<?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>29443</bug_id>
          
          <creation_ts>2009-09-18 07:50:43 -0700</creation_ts>
          <short_desc>[Qt] WebKit crashes when loading certain SVG images</short_desc>
          <delta_ts>2009-12-06 03:55:51 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Other</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Critical</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tor Arne Vestbø">vestbo</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>benjamin</cc>
    
    <cc>charles.wei</cc>
    
    <cc>commit-queue</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
    
    <cc>hausmann</cc>
    
    <cc>kenneth</cc>
    
    <cc>koivisto</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>148150</commentid>
    <comment_count>0</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-09-18 07:50:43 -0700</bug_when>
    <thetext>This bug report originated from issue QTBUG-4433
&lt;http://bugreports.qt.nokia.com/browse/QTBUG-4433&gt;

--- Description ---

WebKit crashes when loading certain SVG images</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149344</commentid>
    <comment_count>1</comment_count>
    <who name="Charles Wei">charles.wei</who>
    <bug_when>2009-09-23 03:33:47 -0700</bug_when>
    <thetext>(In reply to comment #0)
&gt; This bug report originated from issue QTBUG-4433
&gt; &lt;http://bugreports.qt.nokia.com/browse/QTBUG-4433&gt;
&gt; 
&gt; --- Description ---
&gt; 
&gt; WebKit crashes when loading certain SVG images

Please make sure the URL is accessible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149346</commentid>
    <comment_count>2</comment_count>
      <attachid>39985</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-09-23 03:42:15 -0700</bug_when>
    <thetext>Created attachment 39985
Testcase</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>149347</commentid>
    <comment_count>3</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-09-23 03:43:54 -0700</bug_when>
    <thetext>Thanks for triaging Charles. This bug made its way though 3 different bug trackers before ending up here, upstream, so the original content is not always retained. The test-case was attached to the original bug report.

As for the bugreports.qt.nokia.com domain, it will go live in about a week.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152661</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-06 04:39:13 -0700</bug_when>
    <thetext>Reproduced on trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>152820</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-06 12:23:34 -0700</bug_when>
    <thetext>This did not crash for me on Safari Mac tip of tree just now.   r49195</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153717</commentid>
    <comment_count>6</comment_count>
      <attachid>40954</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-09 10:55:49 -0700</bug_when>
    <thetext>Created attachment 40954
Make Qt uses the common FontFallbackList() and make sure a font is always returned

This bug can only be reproduced if the SVG is used as an image in a HTML page.

The font is asked without a family, the family name is NULL, we call the selector directly on it -&gt; Webkit crashes. The other ports do not crash because of the test:
  if (currFamily-&gt;family().length()) {
in FontCache.

Instead of limiting the fix to the FontFallbackList, I have modified the way we handle font in Qt to be similar to the other ports (so we benefit from the patches made to FontFallbackList).

Without the refactoring, the patch would be as simple as that:
diff --git a/WebCore/platform/graphics/qt/FontFallbackListQt.cpp b/WebCore/platform/graphics/qt/FontFallbackListQt.cpp
index 8e1e4f6..0306abf 100644
--- a/WebCore/platform/graphics/qt/FontFallbackListQt.cpp
+++ b/WebCore/platform/graphics/qt/FontFallbackListQt.cpp
@@ -102,7 +102,7 @@ const FontData* FontFallbackList::fontDataAt(const WebCore::Font* _font, unsigne
     const FontDescription&amp; description = _font-&gt;fontDescription();
     const FontFamily* family = &amp;description.family();
     while (family) {
-        if (m_fontSelector) {
+        if (family-&gt;family().length() &amp;&amp; m_fontSelector) {
             FontData* data = m_fontSelector-&gt;getFontData(description, family-&gt;family());
             if (data) {
                 if (data-&gt;isLoading())


I have not made the test case yet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>153827</commentid>
    <comment_count>7</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-10-09 18:24:30 -0700</bug_when>
    <thetext>We can use the WebCore FontCache without going through the hassle of having GlyphNode* implemented for Qt?

What is the memory impact of this? We didn&apos;t use the FontCache as Font Caching is already implemented by Qt and having two caches didn&apos;t seem like a good idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155682</commentid>
    <comment_count>8</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-19 07:56:32 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; We can use the WebCore FontCache without going through the hassle of having
&gt; GlyphNode* implemented for Qt?

If I understand correctly, FontCache does not store/cache the glyphs. It caches the relation between the WebCore::Font and the FontPlatformData.

Most of the previous code was copied from FontFallbackList. The only advantage I could find on the previous implementation was to avoid the call to FontCache::getFontDataForCharacters().

I am new to this code so I might have missed something.

&gt; What is the memory impact of this? We didn&apos;t use the FontCache as Font Caching
&gt; is already implemented by Qt and having two caches didn&apos;t seem like a good
&gt; idea.

The only difference for the memory usage is the new &quot;bool m_isDeletedValue;&quot; in FontPlatformData. If this is a problem I can use a special value of the size like in the previous implementation (FontPlatformDataCacheKey). I have added the bool because I think the size trick is less clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155683</commentid>
    <comment_count>9</comment_count>
      <attachid>41417</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-19 08:03:25 -0700</bug_when>
    <thetext>Created attachment 41417
The patch with a test

This is the same patch as 40954 with a test.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155687</commentid>
    <comment_count>10</comment_count>
      <attachid>41418</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-19 08:33:29 -0700</bug_when>
    <thetext>Created attachment 41418
Patch with test case

Same patch, just a minor change to follow the coding convention.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>155916</commentid>
    <comment_count>11</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-19 14:40:42 -0700</bug_when>
    <thetext>This seems a bit more major than just a small SVG crash fix.  It&apos;s nice that we&apos;re fixing the crasher,but it seems we&apos;re also finally moving Qt onto a font system closer to the other ports...  SEems the ChangeLog needs a lot more explanation as to what you&apos;re doing here!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156126</commentid>
    <comment_count>12</comment_count>
      <attachid>41497</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-20 04:54:47 -0700</bug_when>
    <thetext>Created attachment 41497
Patch with test case

I have added more comments in the ChangeLog to describe how the new implementation differs from the old one.

I do not know if I should describe how this patch fixes 29856? The fix is mostly a by-product of using the common FontCache and FontFallbackList.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156129</commentid>
    <comment_count>13</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-20 05:18:34 -0700</bug_when>
    <thetext>can you please git/svn blame the original code, and cc the original authors to this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156142</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-20 06:28:18 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; can you please git/svn blame the original code, and cc the original authors to
&gt; this bug?

The original author is Zecke, he is already in the CC list of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156385</commentid>
    <comment_count>15</comment_count>
      <attachid>41497</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-10-20 19:00:33 -0700</bug_when>
    <thetext>Comment on attachment 41497
Patch with test case


&gt; -FontPlatformData* FontCache::getLastResortFallbackFont(const FontDescription&amp;)
&gt; +const SimpleFontData* FontCache::getFontDataForCharacters(const Font&amp; font,
&gt; +                                                          const UChar* characters,
&gt; +                                                          int length)
&gt;  {
&gt; +    UNUSED_PARAM(font);
&gt; +    UNUSED_PARAM(characters);
&gt; +    UNUSED_PARAM(length);
&gt;      return 0;

Omit the parameters and remove UNUSED_PARAM. Classically UNUSED_PARAM is only supposed to be used in C code were omitting the parameter is not legal.


&gt;  
&gt; +    FontPlatformData(WTF::HashTableDeletedValueType) : m_isDeletedValue(true) { }

The coding style says m_isDeletedValue should be on the next line.



&gt;  
&gt;  #ifndef NDEBUG
&gt;      String description() const;
&gt; @@ -77,6 +94,7 @@ public:
&gt;      float m_size;
&gt;      bool m_bold;
&gt;      bool m_oblique;
&gt; +    bool m_isDeletedValue;
&gt;      QFont m_font;
&gt;  };

Please look at the packing of this structure. Maybe we can reorder to save a byte per instance? :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156500</commentid>
    <comment_count>16</comment_count>
      <attachid>41569</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-21 09:24:21 -0700</bug_when>
    <thetext>Created attachment 41569
Patch with test case

Thanks Holger for the comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>157999</commentid>
    <comment_count>17</comment_count>
      <attachid>41569</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-10-26 16:13:21 -0700</bug_when>
    <thetext>Comment on attachment 41569
Patch with test case

It seems svg/text/resources/text-font-invalid.svg could be dumpAsText.  It&apos;s just a crash test, no?  It also should have some sort of &lt;text&gt;PASSED -- this test did not crash&lt;/text&gt;

Unintentional change?
WebCore/platform/graphics/qt/FontPlatformData.h

1  /*
 1   /*


Is this what you want?
80     unsigned hash() const
 81     {
 82         return qHash(m_font.toString());
 83     }

Does that correctly handle smallCaps and italic, etc?

I&apos;m not convinced that hash() and == are equivalent.  If they are not, that could cause badness!

In general this looks fine though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158014</commentid>
    <comment_count>18</comment_count>
      <attachid>41569</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-10-26 16:27:32 -0700</bug_when>
    <thetext>Comment on attachment 41569
Patch with test case

Looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158069</commentid>
    <comment_count>19</comment_count>
      <attachid>41569</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-10-26 19:50:24 -0700</bug_when>
    <thetext>Comment on attachment 41569
Patch with test case

Benjamin needs to verify changes in memory usage before this can be landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158080</commentid>
    <comment_count>20</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2009-10-26 20:29:13 -0700</bug_when>
    <thetext>Ah, sorry. Didn&apos;t see the r-.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158889</commentid>
    <comment_count>21</comment_count>
      <attachid>42096</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-29 07:42:54 -0700</bug_when>
    <thetext>Created attachment 42096
Patch with test case

Here are the changes: 
-Change the tests as a dumpAsText (thanks Eric)
-Remove the accidental space (thanks Eric)
-fix the hash function, Eric is right, there are cases where the font.toString() do not follow the attributes of FontPlatformData

Memory usage as reported by memusagestat (thanks Holger):
without patch: MAX: total: 391554162 stack: 78384 heap: 391537982
with patch: MAX: total: 241243358 stack: 78912 heap: 241232030

Other questions:
&quot;Does m_font.toString() that correctly handle smallCaps and italic, etc?&quot; (Eric)
Yep, toString() serialize all the parameters of the font: http://doc.trolltech.com/4.6-snapshot/qfont.html#toString</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158891</commentid>
    <comment_count>22</comment_count>
      <attachid>42097</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-29 07:51:23 -0700</bug_when>
    <thetext>Created attachment 42097
Memory footprint of the cycler test (without the patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158892</commentid>
    <comment_count>23</comment_count>
      <attachid>42098</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-29 07:51:51 -0700</bug_when>
    <thetext>Created attachment 42098
Memory footprint of the cycler test (with patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158904</commentid>
    <comment_count>24</comment_count>
      <attachid>42101</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-29 08:26:22 -0700</bug_when>
    <thetext>Created attachment 42101
Memory footprint of the cycler test without the last test (without patch)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158905</commentid>
    <comment_count>25</comment_count>
      <attachid>42102</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-29 08:27:05 -0700</bug_when>
    <thetext>Created attachment 42102
Memory footprint of the cycler test without the last test (with patch)

With patch: MAX: total: 75229876 stack: 76544 heap: 75198548
Without patch: MAX: total: 81395638 stack: 76544 heap: 81361830</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158919</commentid>
    <comment_count>26</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-10-29 09:02:48 -0700</bug_when>
    <thetext>Feel free to land. Nice cleanup and progress on memory usage!!!!

The last test is a real tough corner case and it is best to execute it in something like Xephyr (to make sure the window has focus and is redrawn) as the images are only decoded when they are drawn. From looking at the picture I was not sure if the tst_cycler was ran in the same way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>159930</commentid>
    <comment_count>27</comment_count>
      <attachid>42096</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-02 14:50:20 -0800</bug_when>
    <thetext>Comment on attachment 42096
Patch with test case

Excellent!

Then changelog for text-font-invalid-expected.txt refers to the wrong directory, but I&apos;ll fix that when landing manually.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160292</commentid>
    <comment_count>28</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-03 19:39:50 -0800</bug_when>
    <thetext>Committed r50496: &lt;http://trac.webkit.org/changeset/50496&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>160654</commentid>
    <comment_count>29</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-11-04 16:32:48 -0800</bug_when>
    <thetext>This was crashing on the bot in QFont and was reverted in r50511.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>161432</commentid>
    <comment_count>30</comment_count>
      <attachid>42096</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-11-08 10:41:49 -0800</bug_when>
    <thetext>Comment on attachment 42096
Patch with test case

Marking this r- since it was reverted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164037</commentid>
    <comment_count>31</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-11-16 11:29:16 -0800</bug_when>
    <thetext>Any update on this?

Was the patch at least cherry-picked into Qt 4.6? so that we can stop blocking on it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164209</commentid>
    <comment_count>32</comment_count>
      <attachid>43356</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-11-17 05:47:11 -0800</bug_when>
    <thetext>Created attachment 43356
Simple patch to fix the SVG crash

This is the simple version of the patch: copy the missing code from the common FontCache.
The complete refactoring will come later when I am sure it does not have any regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164210</commentid>
    <comment_count>33</comment_count>
      <attachid>43356</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-11-17 05:48:43 -0800</bug_when>
    <thetext>Comment on attachment 43356
Simple patch to fix the SVG crash

Great Benjamin</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164214</commentid>
    <comment_count>34</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-11-17 05:56:26 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; Any update on this?
&gt; 
&gt; Was the patch at least cherry-picked into Qt 4.6? so that we can stop blocking
&gt; on it?

Here is what went wrong with the refactoring and Qt 4.5:

The WTF::HashTable is creating the empty FontPlatformData from a memory area filled with zeros (because of the emptyValueIsZero = true; in the trait defined for this hashmap). This fails with Qt 4.5 because the d-pointer of QFont must never be null. On Qt 4.6, the comparisons works because of the changes for exception-safety.

I am going to improve PlatfromDataQt to work with zero-initializations and re-submit the refactoring.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164501</commentid>
    <comment_count>35</comment_count>
      <attachid>43356</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-18 01:51:19 -0800</bug_when>
    <thetext>Comment on attachment 43356
Simple patch to fix the SVG crash

Clearning review for manual landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164502</commentid>
    <comment_count>36</comment_count>
      <attachid>43356</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-18 01:54:27 -0800</bug_when>
    <thetext>Comment on attachment 43356
Simple patch to fix the SVG crash

r-, the ChangeLog is broken as it talks about custom printing shrink factors and links to the wrong bugzilla url</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164511</commentid>
    <comment_count>37</comment_count>
      <attachid>43420</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-11-18 02:22:16 -0800</bug_when>
    <thetext>Created attachment 43420
Simple patch to fix the SVG crash

I messed up the Changelog again :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164514</commentid>
    <comment_count>38</comment_count>
      <attachid>43420</attachid>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-18 02:29:58 -0800</bug_when>
    <thetext>Comment on attachment 43420
Simple patch to fix the SVG crash

Landed attachment 43420 in rr51103</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>164560</commentid>
    <comment_count>39</comment_count>
    <who name="Simon Hausmann">hausmann</who>
    <bug_when>2009-11-18 07:32:09 -0800</bug_when>
    <thetext>Removing from the 4.6 blocker list. The simple fix has been integrated into the trunk and qtwebkit-4.6 and if all goes well it&apos;ll make it into 4.6.0, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168302</commentid>
    <comment_count>40</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-12-02 23:02:55 -0800</bug_when>
    <thetext>We will need the FontCache unification as well. From Benjamin&apos;s finding we consume less memory, from my finding it is likely due us creating less FontPlatformData.. which means less usage of FontConfig in Qt and we don&apos;t pass stuff like &quot;-webkit-*&quot; as font name which all leads to a nice speedup on font config.

So the FontCache change turns up to be a priority to me. Benjamin are you working on it or should I have a go?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168593</commentid>
    <comment_count>41</comment_count>
      <attachid>44277</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-03 16:52:32 -0800</bug_when>
    <thetext>Created attachment 44277
Refactoring of the font cache to use the common FontCache

This is the patch updated to work on Qt 4.5 and superior.
I use a d-pointer in order to keep the PlatformFont as small as possible.

With this patch, the cycler test uses 7% less memory.

The tests are running, I will finish the patch tomorrow with the results and the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168667</commentid>
    <comment_count>42</comment_count>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-12-03 22:12:46 -0800</bug_when>
    <thetext>Have you considered just using a QFont* and then in the copy c&apos;tor create a new QFont? Besides that great work!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168699</commentid>
    <comment_count>43</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 02:14:45 -0800</bug_when>
    <thetext>(In reply to comment #42)
&gt; Have you considered just using a QFont* and then in the copy c&apos;tor create a new
&gt; QFont? Besides that great work!

That was my first idea, but I have avoided that on purpose.
The copy operations on QFont are atomic, which is not necessary in this case (from what I have seen, FontCache is never accessed from multiple threads).

Since the atomic operation is quite slow, and the copy is common in this hashmap, I wanted to avoid the AtomicInt and use a regular integer for the ref counting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168703</commentid>
    <comment_count>44</comment_count>
      <attachid>44299</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 03:13:02 -0800</bug_when>
    <thetext>Created attachment 44299
Refactoring of the font cache to use the common FontCache

Three tests are failing with this patch. The layout is a bit different (2 to 4 pixels smaller), the problem seems related to the family problem.

Should I send another patch to change the result of those tests or we wait for the proper fix for the font family before updating the tests?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168704</commentid>
    <comment_count>45</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-04 03:18:07 -0800</bug_when>
    <thetext>Attachment 44299 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/qt/FontPlatformData.h:35:  This { should be at the end of the previous line  [whitespace/braces] [4]
Skipping input &apos;WebCore/platform/graphics/qt/FontFallbackListQt.cpp&apos;: Can&apos;t open for reading
WebCore/platform/graphics/qt/FontPlatformDataQt.cpp:31:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebCore/platform/graphics/qt/FontPlatformDataQt.cpp:36:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/graphics/qt/FontPlatformDataQt.cpp:56:  Declaration has space between type name and &amp; in QFont &amp;font  [whitespace/declaration] [3]
WebCore/platform/graphics/qt/FontPlatformDataQt.cpp:96:  An else if statement should be written as an if statement when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Total errors found: 5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168713</commentid>
    <comment_count>46</comment_count>
      <attachid>44302</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 04:14:54 -0800</bug_when>
    <thetext>Created attachment 44302
Refactoring of the font cache to use the common FontCache

Same as the previous patch, but use webkit coding style instead of the Qt coding style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168714</commentid>
    <comment_count>47</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-04 04:20:04 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44302 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168715</commentid>
    <comment_count>48</comment_count>
      <attachid>44303</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 04:30:28 -0800</bug_when>
    <thetext>Created attachment 44303
Refactoring of the font cache to use the common FontCache

Update the Changelog.
Re-introduce &quot;size == 0.f&quot; because &quot;!size&quot; was confusing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168716</commentid>
    <comment_count>49</comment_count>
      <attachid>44304</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 04:33:50 -0800</bug_when>
    <thetext>Created attachment 44304
Refactoring of the font cache to use the common FontCache

I had uploaded the wrong file.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168718</commentid>
    <comment_count>50</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-04 04:35:36 -0800</bug_when>
    <thetext>Attachment 44304 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Skipping input &apos;WebCore/platform/graphics/qt/FontFallbackListQt.cpp&apos;: Can&apos;t open for reading
WebCore/platform/graphics/qt/FontPlatformDataQt.cpp:31:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168719</commentid>
    <comment_count>51</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2009-12-04 04:38:12 -0800</bug_when>
    <thetext>(In reply to comment #49)
&gt; Created an attachment (id=44304) [details]
&gt; Refactoring of the font cache to use the common FontCache
&gt; 
&gt; I had uploaded the wrong file.

 
+FontPlatformData::FontPlatformData(float size, bool bold, bool oblique)
+{
+    if (!bold &amp;&amp; !oblique &amp;&amp; size == 0.f)


benjamin, you might want &apos;qFuzzyCompare&apos; here ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168721</commentid>
    <comment_count>52</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 04:47:35 -0800</bug_when>
    <thetext>(In reply to comment #51)
&gt; +FontPlatformData::FontPlatformData(float size, bool bold, bool oblique)
&gt; +{
&gt; +    if (!bold &amp;&amp; !oblique &amp;&amp; size == 0.f)
&gt; 
&gt; 
&gt; benjamin, you might want &apos;qFuzzyCompare&apos; here ?

In this case I don&apos;t want the fuzzy compare.

This test is only for the empty value as defined by the trait : &quot;DEFINE_STATIC_LOCAL(FontPlatformData, key, (0.f, false, false));&quot; (in FontCache.cpp).

Anything different from this should not be an empty value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168723</commentid>
    <comment_count>53</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-12-04 04:50:44 -0800</bug_when>
    <thetext>(In reply to comment #52)
&gt; (In reply to comment #51)
&gt; &gt; +FontPlatformData::FontPlatformData(float size, bool bold, bool oblique)
&gt; &gt; +{
&gt; &gt; +    if (!bold &amp;&amp; !oblique &amp;&amp; size == 0.f)
&gt; &gt; 
&gt; &gt; 
&gt; &gt; benjamin, you might want &apos;qFuzzyCompare&apos; here ?
&gt; 
&gt; In this case I don&apos;t want the fuzzy compare.
&gt; 
&gt; This test is only for the empty value as defined by the trait :
&gt; &quot;DEFINE_STATIC_LOCAL(FontPlatformData, key, (0.f, false, false));&quot; (in
&gt; FontCache.cpp).
&gt; 
&gt; Anything different from this should not be an empty value.

Actually, then I think it would be a good idea to add that comment about the comparison.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168729</commentid>
    <comment_count>54</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 05:02:25 -0800</bug_when>
    <thetext>(In reply to comment #53)
&gt; Actually, then I think it would be a good idea to add that comment about the
&gt; comparison.

There is a comment on the next line :
    if (!bold &amp;&amp; !oblique &amp;&amp; size == 0.f)
        // this is the empty value by definition of the trait FontDataCacheKeyTraits</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168732</commentid>
    <comment_count>55</comment_count>
      <attachid>44305</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 05:12:41 -0800</bug_when>
    <thetext>Created attachment 44305
Refactoring of the font cache to use the common FontCache</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168733</commentid>
    <comment_count>56</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-04 05:16:22 -0800</bug_when>
    <thetext>Attachment 44305 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
Skipping input &apos;WebCore/platform/graphics/qt/FontFallbackListQt.cpp&apos;: Can&apos;t open for reading
WebCore/platform/graphics/qt/FontPlatformDataQt.cpp:32:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168735</commentid>
    <comment_count>57</comment_count>
      <attachid>44306</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 05:22:11 -0800</bug_when>
    <thetext>Created attachment 44306
Update the layout tests

Update the test&apos;s results changed by the patch.
With the patch, &quot;bold&quot;, and &quot;size&quot; are always fully coherent with the font&apos;s data.
We still don&apos;t take into account the family, Tor Arne is working on a solution for another bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168736</commentid>
    <comment_count>58</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-04 05:26:49 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 44306 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168737</commentid>
    <comment_count>59</comment_count>
      <attachid>44306</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-12-04 05:29:01 -0800</bug_when>
    <thetext>Comment on attachment 44306
Update the layout tests

LAck of ChangeLog</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168740</commentid>
    <comment_count>60</comment_count>
      <attachid>44308</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-12-04 05:33:09 -0800</bug_when>
    <thetext>Created attachment 44308
Update the layout tests

I forgot the changelog in the previous version. Thanks Kenneth for noticing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168814</commentid>
    <comment_count>61</comment_count>
      <attachid>44305</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-04 09:50:50 -0800</bug_when>
    <thetext>Comment on attachment 44305
Refactoring of the font cache to use the common FontCache

Clearing flags on attachment: 44305

Committed r51699: &lt;http://trac.webkit.org/changeset/51699&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168817</commentid>
    <comment_count>62</comment_count>
      <attachid>44308</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-04 09:57:55 -0800</bug_when>
    <thetext>Comment on attachment 44308
Update the layout tests

Clearing flags on attachment: 44308

Committed r51700: &lt;http://trac.webkit.org/changeset/51700&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>168818</commentid>
    <comment_count>63</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2009-12-04 09:58:04 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>169088</commentid>
    <comment_count>64</comment_count>
    <who name="Antonio Gomes">tonikitoo</who>
    <bug_when>2009-12-06 03:55:51 -0800</bug_when>
    <thetext>cool stuff.

landed patches did much more than what the bug title says. I would change in accordingly for search/reference in the future :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>39985</attachid>
            <date>2009-09-23 03:42:15 -0700</date>
            <delta_ts>2009-09-23 03:42:15 -0700</delta_ts>
            <desc>Testcase</desc>
            <filename>text.svg</filename>
            <type>image/svg+xml</type>
            <size>1170</size>
            <attacher name="Tor Arne Vestbø">vestbo</attacher>
            
              <data encoding="base64">PD94bWwgdmVyc2lvbj0iMS4wIj8+DQo8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQg
U1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcx
MS5kdGQiPg0KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhs
PSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjE3
OCAyNCA2NSAzOCIgd2lkdGg9IjY1cHQiIGhlaWdodD0iMzhwdCI+PG1ldGFkYXRhIHhtbG5zOmRj
PSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyI+PGRjOmRhdGU+MjAwOS0wOC0xMyAw
OToyMFo8L2RjOmRhdGU+PCEtLSBQcm9kdWNlZCBieSBPbW5pR3JhZmZsZSBQcm9mZXNzaW9uYWwg
NS4xLjEgLS0+PC9tZXRhZGF0YT48ZGVmcz48Zm9udC1mYWNlIGZvbnQtZmFtaWx5PSJIZWx2ZXRp
Y2EgTmV1ZSIgZm9udC1zaXplPSIxMyIgcGFub3NlLTE9IjIgMCA1IDMgMCAwIDAgMiAwIDQiIHVu
aXRzLXBlci1lbT0iMTAwMCIgdW5kZXJsaW5lLXBvc2l0aW9uPSItMTAwLjAwNjExIiB1bmRlcmxp
bmUtdGhpY2tuZXNzPSI1MC4wMDMwNTYiIHNsb3BlPSIwIiB4LWhlaWdodD0iNTM4LjQ2MTU1IiBj
YXAtaGVpZ2h0PSI3MzAuNzY5MyIgYXNjZW50PSI5NTEuOTk1OSIgZGVzY2VudD0iLTIxMi45OTc0
NSIgZm9udC13ZWlnaHQ9IjUwMCI+PGZvbnQtZmFjZS1zcmM+PGZvbnQtZmFjZS1uYW1lIG5hbWU9
IkhlbHZldGljYU5ldWUiLz48L2ZvbnQtZmFjZS1zcmM+PC9mb250LWZhY2U+PC9kZWZzPjxnIHN0
cm9rZT0ibm9uZSIgc3Ryb2tlLW9wYWNpdHk9IjEiIHN0cm9rZS1kYXNoYXJyYXk9Im5vbmUiIGZp
bGw9Im5vbmUiIGZpbGwtb3BhY2l0eT0iMSI+PHRpdGxlPkNhbnZhcyAxPC90aXRsZT48cmVjdCBm
aWxsPSJ3aGl0ZSIgd2lkdGg9IjU1OSIgaGVpZ2h0PSI3ODMiLz48Zz48dGl0bGU+TGF5ZXIgMTwv
dGl0bGU+PHRleHQgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTg5LjUgMzUuNSkiIGZpbGw9ImJsYWNr
Ij48dHNwYW4gZm9udC1mYW1pbHk9IkhlbHZldGljYSBOZXVlIiBmb250LXNpemU9IjEzIiBmb250
LXdlaWdodD0iNTAwIiB4PSIwIiB5PSIxMiIgdGV4dExlbmd0aD0iNDEuNDA1MTY3Ij5Gb29iYXI8
L3RzcGFuPjwvdGV4dD48L2c+PC9nPjwvc3ZnPg0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>40954</attachid>
            <date>2009-10-09 10:55:49 -0700</date>
            <delta_ts>2009-10-19 08:03:25 -0700</delta_ts>
            <desc>Make Qt uses the common FontFallbackList() and make sure a font is always returned</desc>
            <filename>font_handling.patch</filename>
            <type>text/plain</type>
            <size>17992</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IGQ0MTg5NTguLmQ5NzczM2YgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTE3OCw2ICsxMTc4LDcgQEAgU09VUkNFUyArPSBc
CiAgICAgcGxhdGZvcm0vR2VvbG9jYXRpb25TZXJ2aWNlLmNwcCBcCiAgICAgcGxhdGZvcm0vaW1h
Z2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250RGVzY3JpcHRpb24uY3BwIFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJh
Y2tMaXN0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbWlseS5jcHAgXAogICAg
IHBsYXRmb3JtL2dyYXBoaWNzL0JpdG1hcEltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvQ29sb3IuY3BwIFwKQEAgLTExODgsNiArMTE4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0Zsb2F0U2l6ZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnREYXRhLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAgXAorICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnRDYWNoZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dlbmVy
YXRlZEltYWdlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhZGllbnQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwIFwKQEAgLTIzNjIsNyArMjM2
NCw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL3F0L1NoYXJlZEJ1ZmZlclF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBcCi0gICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvR2x5cGhQYWdlVHJlZU5vZGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0
L1NpbXBsZUZvbnREYXRhUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9xdC9LVVJMUXQuY3BwIFwKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAKaW5kZXggMTExM2Vh
ZS4uZWEyZWY3MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
Q2FjaGVRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVR
dC5jcHAKQEAgLTM4LDI1NiArMzgsMzQgQEAgdXNpbmcgbmFtZXNwYWNlIFdURjsKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCi1Gb250Q2FjaGUqIGZvbnRDYWNoZSgpCit2b2lkIEZvbnRDYWNoZTo6
cGxhdGZvcm1Jbml0KCkKIHsKLSAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRDYWNoZSwgZ2xv
YmFsRm9udENhY2hlLCAoKSk7Ci0gICAgcmV0dXJuICZnbG9iYWxGb250Q2FjaGU7CiB9CiAKLUZv
bnRDYWNoZTo6Rm9udENhY2hlKCkKLXsKLX0KLQotdm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0lu
RmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQotewotfQotCi0v
LyBUaGlzIHR5cGUgbXVzdCBiZSBjb25zaXN0ZW50IHdpdGggRm9udFBsYXRmb3JtRGF0YSdzIGN0
b3IgLSB0aGUgb25lIHdoaWNoCi0vLyBnZXRzIEZvbnREZXNjcmlwdGlvbiBhcyBpdCdzIHBhcmFt
ZXRlci4KLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSB7Ci1wdWJsaWM6Ci0gICAgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
Ci0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkKLSAgICAgICAgLCBtX3NpemUoZGVzY3JpcHRpb24u
Y29tcHV0ZWRQaXhlbFNpemUoKSkKLSAgICAgICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwg
bV9pdGFsaWMoZGVzY3JpcHRpb24uaXRhbGljKCkpCi0gICAgICAgICwgbV9zbWFsbENhcHMoZGVz
Y3JpcHRpb24uc21hbGxDYXBzKCkpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogTWFwIGFsbCBGb250V2VpZ2h0IHZhbHVlcyB0byBRRm9udCB3ZWlnaHRzIGlu
IEZvbnRQbGF0Zm9ybURhdGEncyBjdG9yIGFuZCBmb2xsb3cgaXQgaGVyZQotICAgICAgICBpZiAo
Rm9udFBsYXRmb3JtRGF0YTo6dG9RRm9udFdlaWdodChkZXNjcmlwdGlvbi53ZWlnaHQoKSkgPiBR
Rm9udDo6Tm9ybWFsKQotICAgICAgICAgICAgbV9ib2xkID0gdHJ1ZTsKLQotICAgICAgICBjb25z
dCBGb250RmFtaWx5KiBmYW1pbHkgPSAmZGVzY3JpcHRpb24uZmFtaWx5KCk7Ci0gICAgICAgIHdo
aWxlIChmYW1pbHkpIHsKLSAgICAgICAgICAgIG1fZmFtaWx5TmFtZS5hcHBlbmQoZmFtaWx5LT5m
YW1pbHkoKSk7Ci0gICAgICAgICAgICBmYW1pbHkgPSBmYW1pbHktPm5leHQoKTsKLSAgICAgICAg
ICAgIGlmIChmYW1pbHkpCi0gICAgICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZCgnLCcp
OwotICAgICAgICB9Ci0KLSAgICAgICAgY29tcHV0ZUhhc2goKTsKLSAgICB9Ci0KLSAgICBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgZm9udERhdGEpCi0g
ICAgICAgIDogbV9mYW1pbHlOYW1lKHN0YXRpY19jYXN0PFN0cmluZz4oZm9udERhdGEuZmFtaWx5
KCkpKQotICAgICAgICAsIG1fc2l6ZShmb250RGF0YS5waXhlbFNpemUoKSkKLSAgICAgICAgLCBt
X2JvbGQoZm9udERhdGEuYm9sZCgpKQotICAgICAgICAsIG1faXRhbGljKGZvbnREYXRhLml0YWxp
YygpKQotICAgICAgICAsIG1fc21hbGxDYXBzKGZvbnREYXRhLnNtYWxsQ2FwcygpKQotICAgICAg
ICAsIG1faGFzaCgwKQotICAgIHsKLSAgICAgICAgY29tcHV0ZUhhc2goKTsKLSAgICB9Ci0KLSAg
ICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBt
X3NpemUoaGFzaFRhYmxlRGVsZXRlZFNpemUoKSkgeyB9Ci0gICAgYm9vbCBpc0hhc2hUYWJsZURl
bGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZSA9PSBoYXNoVGFibGVEZWxldGVkU2l6
ZSgpOyB9Ci0KLSAgICBlbnVtIEhhc2hUYWJsZUVtcHR5VmFsdWVUeXBlIHsgSGFzaFRhYmxlRW1w
dHlWYWx1ZSB9OwotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZUVtcHR5
VmFsdWVUeXBlKQotICAgICAgICA6IG1fZmFtaWx5TmFtZSgpCi0gICAgICAgICwgbV9zaXplKDAp
Ci0gICAgICAgICwgbV9ib2xkKGZhbHNlKQotICAgICAgICAsIG1faXRhbGljKGZhbHNlKQotICAg
ICAgICAsIG1fc21hbGxDYXBzKGZhbHNlKQotICAgICAgICAsIG1faGFzaCgwKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
JiBvdGhlcikgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChtX2hhc2ggIT0gb3RoZXIubV9oYXNo
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBlcXVhbElnbm9y
aW5nQ2FzZShtX2ZhbWlseU5hbWUsIG90aGVyLm1fZmFtaWx5TmFtZSkgJiYgbV9zaXplID09IG90
aGVyLm1fc2l6ZSAmJgotICAgICAgICAgICAgbV9ib2xkID09IG90aGVyLm1fYm9sZCAmJiBtX2l0
YWxpYyA9PSBvdGhlci5tX2l0YWxpYyAmJiBtX3NtYWxsQ2FwcyA9PSBvdGhlci5tX3NtYWxsQ2Fw
czsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJl
dHVybiBtX2hhc2g7Ci0gICAgfQotCi0gICAgdm9pZCBjb21wdXRlSGFzaCgpCi0gICAgewotICAg
ICAgICB1bnNpZ25lZCBoYXNoQ29kZXNbXSA9IHsKLSAgICAgICAgICAgIENhc2VGb2xkaW5nSGFz
aDo6aGFzaChtX2ZhbWlseU5hbWUpLAotICAgICAgICAgICAgbV9zaXplIHwgc3RhdGljX2Nhc3Q8
dW5zaWduZWQ+KG1fYm9sZCA8PCBzaXplb2YodW5zaWduZWQpICogOCAtIDEpCi0gICAgICAgICAg
ICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9pdGFsaWMpIDw8IHNpemVvZih1bnNpZ25l
ZCkgKjggLSAyCi0gICAgICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9zbWFs
bENhcHMpIDw8IHNpemVvZih1bnNpZ25lZCkgKiA4IC0gMwotICAgICAgICB9OwotICAgICAgICBt
X2hhc2ggPSBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4o
aGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKLSAgICB9Ci0K
LXByaXZhdGU6Ci0gICAgU3RyaW5nIG1fZmFtaWx5TmFtZTsKLSAgICBpbnQgbV9zaXplOwotICAg
IGJvb2wgbV9ib2xkOwotICAgIGJvb2wgbV9pdGFsaWM7Ci0gICAgYm9vbCBtX3NtYWxsQ2FwczsK
LSAgICB1bnNpZ25lZCBtX2hhc2g7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaFRhYmxlRGVs
ZXRlZFNpemUoKSB7IHJldHVybiAweEZGRkZGRkZGVTsgfQotfTsKLQotc3RydWN0IEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGtleS5o
YXNoKCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGIpCi0gICAg
ewotICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29s
IHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleT4gewotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1
Y3Rpb24gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkm
IGVtcHR5VmFsdWUoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXksIGtleSwgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6SGFzaFRh
YmxlRW1wdHlWYWx1ZSkpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLSAgICBzdGF0aWMg
dm9pZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBzbG90
KQotICAgIHsKLSAgICAgICAgbmV3ICgmc2xvdCkgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhh
c2hUYWJsZURlbGV0ZWRWYWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZh
bHVlKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgdmFsdWUpCi0gICAgewotICAgICAg
ICByZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKLSAgICB9Ci19OwotCi10
eXBlZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBGb250UGxhdGZvcm1EYXRh
KiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
VHJhaXRzPiBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0KLS8vIHVzaW5nIFFfR0xPQkFMX1NUQVRJ
QyBsZWFkcyB0byBjcmFzaC4gVE9ETyBpbnZlc3RpZ2F0ZSB0aGUgd2F5IHRvIGZpeCB0aGlzLgot
c3RhdGljIEZvbnRQbGF0Zm9ybURhdGFDYWNoZSogZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSA9IDA7
Ci0KLUZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcm
LCBib29sKQotewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSkKLSAgICAgICAgZ0Zv
bnRQbGF0Zm9ybURhdGFDYWNoZSA9IG5ldyBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0KLSAgICBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGRlc2NyaXB0aW9uKTsKLSAgICBGb250UGxhdGZv
cm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5nZXQoa2V5KTsK
LSAgICBpZiAoIXBsYXRmb3JtRGF0YSkgewotICAgICAgICBwbGF0Zm9ybURhdGEgPSBuZXcgRm9u
dFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2Fj
aGUtPmFkZChrZXksIHBsYXRmb3JtRGF0YSk7Ci0gICAgfQotICAgIHJldHVybiBwbGF0Zm9ybURh
dGE7Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIHN0ZDo6
cGFpcjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwotCi1z
dGF0aWMgRm9udERhdGFDYWNoZSogZ0ZvbnREYXRhQ2FjaGUgPSAwOwotCi1zdGF0aWMgY29uc3Qg
aW50IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gNDA7Ci1zdGF0aWMgY29uc3QgaW50IGNUYXJnZXRJ
bmFjdGl2ZUZvbnREYXRhID0gMzI7Ci0KLXN0YXRpYyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVG
b250RGF0YSo+KiBnSW5hY3RpdmVGb250RGF0YVNldCA9IDA7Ci0KLVNpbXBsZUZvbnREYXRhKiBG
b250Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQ
bGF0Zm9ybURhdGEpCi17Ci0gICAgaWYgKCFnRm9udERhdGFDYWNoZSkgewotICAgICAgICBnRm9u
dERhdGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAgICAgICBnSW5hY3RpdmVGb250RGF0
YVNldCA9IG5ldyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OwotICAgIH0KLQot
ICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoKmZvbnRQbGF0Zm9ybURhdGEpOwotICAg
IEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoa2V5KTsK
LSAgICBpZiAoaXQgPT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKSB7Ci0gICAgICAgIFNpbXBsZUZv
bnREYXRhKiBmb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqZm9udFBsYXRmb3JtRGF0YSk7
Ci0gICAgICAgIGdGb250RGF0YUNhY2hlLT5hZGQoa2V5LCBzdGQ6OnBhaXI8U2ltcGxlRm9udERh
dGEqLCB1bnNpZ25lZD4oZm9udERhdGEsIDEpKTsKLSAgICAgICAgcmV0dXJuIGZvbnREYXRhOwot
ICAgIH0KLSAgICBpZiAoIWl0LT5zZWNvbmQuc2Vjb25kKyspIHsKLSAgICAgICAgQVNTRVJUKGdJ
bmFjdGl2ZUZvbnREYXRhU2V0LT5jb250YWlucyhpdC0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAg
IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5yZW1vdmUoaXQtPnNlY29uZC5maXJzdCk7Ci0gICAgfQot
ICAgIHJldHVybiBpdC0+c2Vjb25kLmZpcnN0OwotfQotCi1Gb250UGxhdGZvcm1EYXRhKiBGb250
Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikK
K2NvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVy
cyhjb25zdCBGb250JiBmb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5n
dGgpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERh
dGEoY29uc3QgV2ViQ29yZTo6U2ltcGxlRm9udERhdGEqIGZvbnREYXRhKQotewotICAgIEFTU0VS
VChnRm9udERhdGFDYWNoZSk7Ci0gICAgQVNTRVJUKCFmb250RGF0YS0+aXNDdXN0b21Gb250KCkp
OwotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleShmb250RGF0YS0+cGxhdGZvcm1E
YXRhKCkpOwotICAgIEZvbnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUt
PmZpbmQoa2V5KTsKLSAgICBBU1NFUlQoaXQgIT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKLSAg
ICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpIHsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFT
ZXQtPmFkZChpdC0+c2Vjb25kLmZpcnN0KTsKLSAgICAgICAgaWYgKGdJbmFjdGl2ZUZvbnREYXRh
U2V0LT5zaXplKCkgPiBjTWF4SW5hY3RpdmVGb250RGF0YSkKLSAgICAgICAgICAgIHB1cmdlSW5h
Y3RpdmVGb250RGF0YShnSW5hY3RpdmVGb250RGF0YVNldC0+c2l6ZSgpIC0gY1RhcmdldEluYWN0
aXZlRm9udERhdGEpOwotICAgIH0KLX0KLQotdm9pZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVG
b250RGF0YShpbnQgY291bnQpCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0gICAgc3RhdGljIGJvb2wg
aXNQdXJnaW5nOyAgLy8gR3VhcmQgYWdhaW5zdCByZWVudHJ5IHdoZW4gZS5nLiBhIGRlbGV0ZWQg
Rm9udERhdGEgcmVsZWFzZXMgaXRzIHNtYWxsIGNhcHMgRm9udERhdGEuCi0gICAgaWYgKGlzUHVy
Z2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaXNQdXJnaW5nID0gdHJ1ZTsKLQotICAgIExp
c3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZl
Rm9udERhdGFTZXQtPmJlZ2luKCk7Ci0gICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERh
dGEqPjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZlRm9udERhdGFTZXQtPmVuZCgpOwotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQgJiYgaXQgIT0gZW5kOyArK2ksICsraXQpIHsKLSAgICAg
ICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSA9ICgqaXQpLT5wbGF0Zm9ybURhdGEoKTsK
LSAgICAgICAgcGFpcjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPiBmb250RGF0YVBhaXIgPSBn
Rm9udERhdGFDYWNoZS0+dGFrZShrZXkpOwotICAgICAgICBBU1NFUlQoZm9udERhdGFQYWlyLmZp
cnN0ICE9IDApOwotICAgICAgICBBU1NFUlQoIWZvbnREYXRhUGFpci5zZWNvbmQpOwotICAgICAg
ICBkZWxldGUgZm9udERhdGFQYWlyLmZpcnN0OwotCi0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEq
IHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPnRha2Uoa2V5KTsKLSAgICAg
ICAgaWYgKHBsYXRmb3JtRGF0YSkKLSAgICAgICAgICAgIGRlbGV0ZSBwbGF0Zm9ybURhdGE7Ci0g
ICAgfQotCi0gICAgaWYgKGl0ID09IGVuZCkgewotICAgICAgICAvLyBSZW1vdmVkIGV2ZXJ5dGhp
bmcKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPmNsZWFyKCk7Ci0gICAgfSBlbHNlIHsK
LSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgKytpKQotICAgICAgICAgICAgZ0lu
YWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShnSW5hY3RpdmVGb250RGF0YVNldC0+YmVnaW4oKSk7
Ci0gICAgfQotCi0gICAgaXNQdXJnaW5nID0gZmFsc2U7CisgICAgcmV0dXJuIG5ldyBGb250UGxh
dGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9uKCkpOwogfQogCi12b2lkIEZvbnRDYWNoZTo6
YWRkQ2xpZW50KEZvbnRTZWxlY3RvciopCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6Omdl
dExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikKIHsKKyAgICBy
ZXR1cm4gIG5ldyBGb250UGxhdGZvcm1EYXRhKFFGb250KCksIGZhbHNlKTsKIH0KIAotdm9pZCBG
b250Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3IqKQordm9pZCBGb250Q2FjaGU6Omdl
dFRyYWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSwgVmVjdG9yPHVu
c2lnbmVkPiYgdHJhaXRzTWFza3MpCiB7CiB9CiAKLXZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRl
KCkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5n
JiBmYW1pbHkpCiB7Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlIHx8ICFnRm9udERh
dGFDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCk7
CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbik7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggOGUxZTRmNi4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRGYWxsYmFja0xpc3RRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBAQAotLyoK
LSAgICBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKLQotICAg
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICAgIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bwot
ICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0KLSAgICBS
ZXBsYWNlbWVudCBvZiB0aGUgc3RvY2sgRm9udEZhbGxiYWNrTGlzdCBhcyBRdCBpcyBnb2luZyB0
byBmaW5kIHVzIGEKLSAgICByZXBsYWNlbWVudCBmb250LCB3aWxsIGRvIGNhY2hpbmcgYW5kIHRo
ZSBvdGhlciBzdHVmZiB3ZSBpbXBsZW1lbnQgaW4KLSAgICBXZWJLaXQuCi0qLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgotCi0jaW5jbHVkZSAi
Rm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZEZvbnRE
YXRhLmgiCi0KLSNpbmNsdWRlIDxRRGVidWc+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotRm9u
dEZhbGxiYWNrTGlzdDo6Rm9udEZhbGxiYWNrTGlzdCgpCi0gICAgOiBtX3BhZ2VaZXJvKDApCi0g
ICAgLCBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQotICAgICwgbV9mb250U2VsZWN0
b3IoMCkKLSAgICAsIG1fZmFtaWx5SW5kZXgoMCkKLSAgICAsIG1fcGl0Y2goVW5rbm93blBpdGNo
KQotICAgICwgbV9sb2FkaW5nQ3VzdG9tRm9udHMoZmFsc2UpCi0gICAgLCBtX2dlbmVyYXRpb24o
MCkKLXsKLX0KLQotdm9pZCBGb250RmFsbGJhY2tMaXN0OjppbnZhbGlkYXRlKFdURjo6UGFzc1Jl
ZlB0cjxXZWJDb3JlOjpGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLXsKLSAgICByZWxlYXNl
Rm9udERhdGEoKTsKLSAgICBtX2ZvbnRMaXN0LmNsZWFyKCk7Ci0gICAgbV9wYWdlWmVybyA9IDA7
Ci0gICAgbV9wYWdlcy5jbGVhcigpOwotICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRh
ID0gMDsKLSAgICBtX2ZhbWlseUluZGV4ID0gMDsKLSAgICBtX3BpdGNoID0gVW5rbm93blBpdGNo
OwotICAgIG1fbG9hZGluZ0N1c3RvbUZvbnRzID0gZmFsc2U7Ci0gICAgbV9mb250U2VsZWN0b3Ig
PSBmb250U2VsZWN0b3I7Ci0gICAgbV9nZW5lcmF0aW9uID0gMDsKLX0KLQotdm9pZCBGb250RmFs
bGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEoKQotewotICAgIHVuc2lnbmVkIG51bUZvbnRzID0g
bV9mb250TGlzdC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51bUZvbnRz
OyArK2kpIHsKLSAgICAgICAgaWYgKG1fZm9udExpc3RbaV0uc2Vjb25kKQotICAgICAgICAgICAg
ZGVsZXRlIG1fZm9udExpc3RbaV0uZmlyc3Q7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAg
QVNTRVJUKCFtX2ZvbnRMaXN0W2ldLmZpcnN0LT5pc1NlZ21lbnRlZCgpKTsKLSAgICAgICAgICAg
IGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPihtX2ZvbnRMaXN0W2ldLmZpcnN0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgRm9udEZhbGxiYWNrTGlzdDo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgV2ViQ29yZTo6Rm9udCog
Zm9udCkgY29uc3QKLXsKLSAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBwcmltYXJ5Rm9u
dERhdGEoZm9udCk7Ci0gICAgaWYgKCFmb250RGF0YS0+aXNTZWdtZW50ZWQoKSkKLSAgICAgICAg
bV9waXRjaCA9IHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oZm9udERhdGEpLT5w
aXRjaCgpOwotICAgIGVsc2UgewotICAgICAgICBjb25zdCBTZWdtZW50ZWRGb250RGF0YSogc2Vn
bWVudGVkRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTZWdtZW50ZWRGb250RGF0YSo+KGZv
bnREYXRhKTsKLSAgICAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gc2VnbWVudGVkRm9udERhdGEt
Pm51bVJhbmdlcygpOwotICAgICAgICBpZiAobnVtUmFuZ2VzID09IDEpCi0gICAgICAgICAgICBt
X3BpdGNoID0gc2VnbWVudGVkRm9udERhdGEtPnJhbmdlQXQoMCkuZm9udERhdGEoKS0+cGl0Y2go
KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9waXRjaCA9IFZhcmlhYmxlUGl0Y2g7Ci0g
ICAgfQotfQotCi1jb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdChj
b25zdCBXZWJDb3JlOjpGb250KiBfZm9udCwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17Ci0gICAg
aWYgKGluZGV4ICE9IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gU2VhcmNoIGZvciB0
aGUgV2ViQ29yZSBmb250IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgbGlzdAotICAgIGZvciAoaW50
IGkgPSBtX2ZvbnRMaXN0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgIHBhaXI8
Y29uc3QgRm9udERhdGEqLCBib29sPiBpdGVtID0gbV9mb250TGlzdFtpXTsKLSAgICAgICAgLy8g
aXRlbS5zZWNvbmQgbWVhbnMgdGhhdCB0aGUgaXRlbSB3YXMgY3JlYXRlZCBsb2NhbGx5IG9yIG5v
dAotICAgICAgICBpZiAoIWl0ZW0uc2Vjb25kKQotICAgICAgICAgICAgcmV0dXJuIGl0ZW0uZmly
c3Q7Ci0gICAgfQotCi0gICAgLy8gVXNlIHRoZSBGb250U2VsZWN0b3IgdG8gZ2V0IGEgV2ViQ29y
ZSBmb250IGFuZCB0aGVuIGZhbGxiYWNrIHRvIFF0Ci0gICAgY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbiA9IF9mb250LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBjb25zdCBGb250
RmFtaWx5KiBmYW1pbHkgPSAmZGVzY3JpcHRpb24uZmFtaWx5KCk7Ci0gICAgd2hpbGUgKGZhbWls
eSkgewotICAgICAgICBpZiAobV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgICAgIEZvbnREYXRh
KiBkYXRhID0gbV9mb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHkt
PmZhbWlseSgpKTsKLSAgICAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAgICAgICAgaWYg
KGRhdGEtPmlzTG9hZGluZygpKQotICAgICAgICAgICAgICAgICAgICBtX2xvYWRpbmdDdXN0b21G
b250cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLT5pc0N1c3RvbUZvbnQoKSkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b20gZm9udHMgY2FuIGJlIGZyZWVkIGFueXRp
bWUgc28gd2UgbXVzdCBub3QgaG9sZCB0aGVtCi0gICAgICAgICAgICAgICAgICAgIG1fZm9udExp
c3QuYXBwZW5kKHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPihkYXRhLCBmYWxzZSkpOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotICAgICAgICBmYW1pbHkgPSBmYW1pbHktPm5leHQoKTsKLSAgICB9Ci0K
LSAgICBpZiAobV9mb250TGlzdC5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX2ZvbnRMaXN0WzBd
LmZpcnN0OwotCi0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9IG5ldyBTaW1wbGVGb250RGF0
YShGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBfZm9udC0+d29yZFNwYWNpbmcoKSwgX2Zv
bnQtPmxldHRlclNwYWNpbmcoKSksIHRydWUpOwotICAgIG1fZm9udExpc3QuYXBwZW5kKHBhaXI8
Y29uc3QgRm9udERhdGEqLCBib29sPihyZXN1bHQsIHRydWUpKTsKLSAgICByZXR1cm4gcmVzdWx0
OwotfQotCi1jb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFGb3JDaGFy
YWN0ZXJzKGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZvbnQsIGNvbnN0IFVDaGFyKiwgaW50KSBjb25z
dAotewotICAgIHJldHVybiBwcmltYXJ5Rm9udERhdGEoZm9udCk7Ci19Ci0KLXZvaWQgRm9udEZh
bGxiYWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGEmKQotewotICAgIG1fZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxpZXNTY2FubmVkOwotfQotCi19
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURh
dGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCmlu
ZGV4IDkyMjE5ZmQuLmQyZmMzMzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRlICJGb250
RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRSGFzaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw2ICs0Miw5IEBAIHB1YmxpYzoKICAgICBGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGludCB3b3JkU3BhY2luZyA9IDAsIGlu
dCBsZXR0ZXJTcGFjaW5nID0gMCk7CiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBRRm9udCYs
IGJvb2wgYm9sZCk7CiAKKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRl
ZFZhbHVlVHlwZSkgOiBtX2lzRGVsZXRlZFZhbHVlKHRydWUpIHsgfQorICAgIGJvb2wgaXNIYXNo
VGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZFZhbHVlOyB9CisK
ICAgICBzdGF0aWMgaW5saW5lIFFGb250OjpXZWlnaHQgdG9RRm9udFdlaWdodChGb250V2VpZ2h0
IGZvbnRXZWlnaHQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGZvbnRXZWlnaHQpIHsKQEAgLTY5
LDYgKzczLDE5IEBAIHB1YmxpYzoKICAgICBib29sIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1f
Zm9udC5pdGFsaWMoKTsgfQogICAgIGJvb2wgc21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9m
b250LmNhcGl0YWxpemF0aW9uKCkgPT0gUUZvbnQ6OlNtYWxsQ2FwczsgfQogICAgIGludCBwaXhl
bFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQucGl4ZWxTaXplKCk7IH0KKyAgICB1bnNpZ25l
ZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBxSGFzaChtX2ZvbnQudG9TdHJp
bmcoKSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChtX2lzRGVsZXRlZFZhbHVl
ICYmIG1faXNEZWxldGVkVmFsdWUgPT0gb3RoZXIubV9pc0RlbGV0ZWRWYWx1ZSkKKyAgICAgICAg
ICAgICAgICB8fCAobV9zaXplID09IG90aGVyLm1fc2l6ZQorICAgICAgICAgICAgICAgICAgICAm
JiBtX2JvbGQgPT0gb3RoZXIubV9ib2xkCisgICAgICAgICAgICAgICAgICAgICYmIG1fb2JsaXF1
ZSA9PSBvdGhlci5tX29ibGlxdWUKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9mb250ID09IG1f
Zm9udCk7CisgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIFN0cmluZyBkZXNjcmlwdGlvbigp
IGNvbnN0OwpAQCAtNzcsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgbV9zaXplOwogICAg
IGJvb2wgbV9ib2xkOwogICAgIGJvb2wgbV9vYmxpcXVlOworICAgIGJvb2wgbV9pc0RlbGV0ZWRW
YWx1ZTsKICAgICBRRm9udCBtX2ZvbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXggNzcwOWJlNi4uZGEzODIx
ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1E
YXRhUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3Jt
RGF0YVF0LmNwcApAQCAtMzAsNiArMzAsNyBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGludCB3b3JkUwogICAg
IDogbV9zaXplKDAuMGYpCiAgICAgLCBtX2JvbGQoZmFsc2UpCiAgICAgLCBtX29ibGlxdWUoZmFs
c2UpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogICAgIFFTdHJpbmcgZmFtaWx5
TmFtZTsKICAgICBjb25zdCBGb250RmFtaWx5KiBmYW1pbHkgPSAmZGVzY3JpcHRpb24uZmFtaWx5
KCk7CkBAIC01OSw2ICs2MCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgUUZvbnQmIGZvbnQsIGJvb2wgYm9sZCkKICAgICAsIG1fYm9sZChib2xkKQogICAgICwg
bV9vYmxpcXVlKGZhbHNlKQogICAgICwgbV9mb250KGZvbnQpCisgICAgLCBtX2lzRGVsZXRlZFZh
bHVlKGZhbHNlKQogewogfQogCkBAIC02Nyw2ICs2OSw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCiAgICAg
OiBtX3NpemUoc2l6ZSkKICAgICAsIG1fYm9sZChib2xkKQogICAgICwgbV9vYmxpcXVlKG9ibGlx
dWUpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQogI2VuZGlmCkBAIC03NSw2
ICs3OCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoKQogICAgIDogbV9z
aXplKDAuMGYpCiAgICAgLCBtX2JvbGQoZmFsc2UpCiAgICAgLCBtX29ibGlxdWUoZmFsc2UpCisg
ICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41417</attachid>
            <date>2009-10-19 08:03:25 -0700</date>
            <delta_ts>2009-10-19 08:33:29 -0700</delta_ts>
            <desc>The patch with a test</desc>
            <filename>font_handling_qt.patch</filename>
            <type>text/plain</type>
            <size>22029</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZDcwMWY4Li40NGY2ZmQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTAt
MTkgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgdGVz
dCB0byByZXByb2R1Y2UgMjk4NTYuIFRoZSBidWcgb25seSBoYXBwZW4gCisgICAgICAgIHdoZW4g
dGhlIFNWRyBmaWxlIGlzIHVzZWQgYXMgYW4gaW1hZ2UuCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTg1NgorCisgICAgICAgICogcGxhdGZvcm0vcXQv
c3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBzdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnOiBBZGRlZC4KKyAgICAg
ICAgKiBzdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC5odG1sOiBBZGRlZC4KKwogMjAwOS0xMC0w
NyAgWGFuIExvcGV6ICA8eGxvcGV6QGlnYWxpYS5jb20+CiAKICAgICAgICAgU2tpcCB0d28gbmV3
IHRlc3RzIGZvciB3aGljaCB3ZSBhcmUgbWlzc2luZyByZXN1bHRzLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vcXQvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MGU3ZTgK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9zdmcvdGV4dC90ZXh0
LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw5IEBACitsYXllciBhdCAoMCww
KSBzaXplIDgwMHg2MTYKKyAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVy
IGF0ICgwLDApIHNpemUgODAweDYxNgorICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6
ZSA4MDB4NjE2CisgICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3ODR4NjAwCisg
ICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwwKSBzaXplIDc4NHg2MDAKKyAgICAgIFJlbmRl
clRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAorICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgMHgwCisgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSAweDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy90ZXh0L3Jlc291cmNlcy90ZXh0LWZv
bnQtaW52YWxpZC5zdmcgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1mb250
LWludmFsaWQuc3ZnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmOWUwMDYK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1m
b250LWludmFsaWQuc3ZnCkBAIC0wLDAgKzEsMTcgQEAKKzw/eG1sIHZlcnNpb249IjEuMCI/Pgor
PCFET0NUWVBFIHN2ZyBQVUJMSUMgIi0vL1czQy8vRFREIFNWRyAxLjEvL0VOIiAiaHR0cDovL3d3
dy53My5vcmcvR3JhcGhpY3MvU1ZHLzEuMS9EVEQvc3ZnMTEuZHRkIj4KKzxzdmcgeG1sbnM9Imh0
dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bD0iaHR0cDovL3d3dy53My5vcmcvMTk5
OS94bGluayIgdmVyc2lvbj0iMS4xIj4KKyAgPGRlZnM+CisgICAgPGZvbnQtZmFjZSBmb250LWZh
bWlseT0iQXJiaXRyYXJ5IGZvbnQgbm90IG9uIHRoZSBzeXN0ZW0iPgorICAgIDxmb250LWZhY2Ut
c3JjPgorICAgICAgPGZvbnQtZmFjZS1uYW1lIG5hbWU9IlZlcnlVbmxpa2VseVRvRXhpc3RGb250
Ii8+CisgICAgPC9mb250LWZhY2Utc3JjPgorICAgIDwvZm9udC1mYWNlPgorICA8L2RlZnM+Cisg
IDxnPgorICAgIDx0ZXh0PgorICAgICAgPHRzcGFuIGZvbnQtZmFtaWx5PSJBcmJpdHJhcnkgZm9u
dCBub3Qgb24gdGhlIHN5c3RlbSI+Rm9vYmFyPC90c3Bhbj4KKyAgICA8L3RleHQ+CisgIDwvZz4K
Kzwvc3ZnPgorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQtaW52
YWxpZC5odG1sIGIvTGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQuaHRtbApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTIzYjMyCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQuaHRtbApAQCAtMCww
ICsxLDUgQEAKKzxodG1sPgorICA8Ym9keT4KKyAgICA8aW1nIHNyYz0icmVzb3VyY2VzL3RleHQt
Zm9udC1pbnZhbGlkLnN2ZyIgLz4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA3Yjc4MjE4Li42ZjM1YmE0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDMzIEBACisyMDA5LTEwLTE5ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4u
cG91bGFpbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgW1F0XSBIYW5kbGUgZm9udCBsaWtlIHRoZSBvdGhlciBwb3J0cworCisgICAg
ICAgIFJlbW92ZSBGb250RmFsbGJhY2tMaXN0UXQgYW5kIHJlbHkgb24gdGhlIGNvbW1vbiBGb250
RmFsbGJhY2tMaXN0CisgICAgICAgIHRvIGhhbmRsZSB0aGUgZm9udHMuIEZvbnRDYWNoZSBhbmQg
Rm9udFBsYXRmb3JtRGF0YSBoYXZlIGJlZW4KKyAgICAgICAgdXBkYXRlZCB0byB3b3JrIHdpdGgg
dGhlIGNvbW1vbiBGb250RmFsbGJhY2tMaXN0LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk4NTYKKworICAgICAgICBUZXN0OiBzdmcvdGV4dC90ZXh0
LWZvbnQtaW52YWxpZC5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FjaGU6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
dEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6Omdl
dFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6
Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6
OmdldFRyYWl0c0luRmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRl
Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZh
bGxiYWNrTGlzdFF0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0
b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEpOgorCiAyMDA5LTEwLTA3ICBHaXJpc2ggUmFtYWtyaXNobmFuICA8Z2lyaXNoQGZvcndhcmRi
aWFzLmluPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggZDQxODk1
OC4uZDk3NzMzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3Jl
L1dlYkNvcmUucHJvCkBAIC0xMTc4LDYgKzExNzgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0
Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2UuY3BwIFwKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9xdC9SR0JBMzJCdWZmZXJRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAgXApAQCAtMTE4OCw2ICsxMTg5LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2Uu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXApAQCAtMjM2Miw3ICsyMzY0LDYgQEAgU09V
UkNFUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvU2hhcmVkQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HbHlw
aFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9u
dERhdGFRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0tVUkxRdC5jcHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAppbmRleCAxMTEzZWFlLi5lYTJlZjcy
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcApAQCAt
MzgsMjU2ICszOCwzNCBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZvbnRDYWNoZSogZm9udENhY2hlKCkKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUlu
aXQoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udENhY2hlLCBnbG9iYWxGb250Q2Fj
aGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2JhbEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjpG
b250Q2FjaGUoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpCi17Ci19Ci0KLS8vIFRoaXMgdHlw
ZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciAtIHRoZSBv
bmUgd2hpY2gKLS8vIGdldHMgRm9udERlc2NyaXB0aW9uIGFzIGl0J3MgcGFyYW1ldGVyLgotY2xh
c3MgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKLXB1YmxpYzoKLSAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICAgICAg
OiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAgICAgLCBtX2l0YWxpYyhk
ZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgLCBtX3NtYWxsQ2FwcyhkZXNjcmlwdGlvbi5z
bWFsbENhcHMoKSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFFGb250IHdlaWdodHMgaW4gRm9udFBsYXRm
b3JtRGF0YSdzIGN0b3IgYW5kIGZvbGxvdyBpdCBoZXJlCi0gICAgICAgIGlmIChGb250UGxhdGZv
cm1EYXRhOjp0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9uLndlaWdodCgpKSA+IFFGb250OjpOb3Jt
YWwpCi0gICAgICAgICAgICBtX2JvbGQgPSB0cnVlOwotCi0gICAgICAgIGNvbnN0IEZvbnRGYW1p
bHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAgICAgICAgd2hpbGUgKGZhbWls
eSkgewotICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZChmYW1pbHktPmZhbWlseSgpKTsK
LSAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKGZh
bWlseSkKLSAgICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKCcsJyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSkKLSAgICAgICAgOiBt
X2ZhbWlseU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nPihmb250RGF0YS5mYW1pbHkoKSkpCi0gICAg
ICAgICwgbV9zaXplKGZvbnREYXRhLnBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmb250
RGF0YS5ib2xkKCkpCi0gICAgICAgICwgbV9pdGFsaWMoZm9udERhdGEuaXRhbGljKCkpCi0gICAg
ICAgICwgbV9zbWFsbENhcHMoZm9udERhdGEuc21hbGxDYXBzKCkpCi0gICAgICAgICwgbV9oYXNo
KDApCi0gICAgewotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fc2l6ZShoYXNo
VGFibGVEZWxldGVkU2l6ZSgpKSB7IH0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IGhhc2hUYWJsZURlbGV0ZWRTaXplKCk7IH0KLQot
ICAgIGVudW0gSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUgeyBIYXNoVGFibGVFbXB0eVZhbHVlIH07
Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUp
Ci0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAg
LCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9pdGFsaWMoZmFsc2UpCi0gICAgICAgICwgbV9z
bWFsbENhcHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faGFzaCAhPSBvdGhlci5tX2hhc2gpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1f
ZmFtaWx5TmFtZSwgb3RoZXIubV9mYW1pbHlOYW1lKSAmJiBtX3NpemUgPT0gb3RoZXIubV9zaXpl
ICYmCi0gICAgICAgICAgICBtX2JvbGQgPT0gb3RoZXIubV9ib2xkICYmIG1faXRhbGljID09IG90
aGVyLm1faXRhbGljICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFz
aDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXB1dGVIYXNoKCkKLSAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICAgICAgQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKG1f
ZmFtaWx5TmFtZSksCi0gICAgICAgICAgICBtX3NpemUgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9ib2xkIDw8IHNpemVvZih1bnNpZ25lZCkgKiA4IC0gMSkKLSAgICAgICAgICAgICAgICB8IHN0
YXRpY19jYXN0PHVuc2lnbmVkPihtX2l0YWxpYykgPDwgc2l6ZW9mKHVuc2lnbmVkKSAqOCAtIDIK
LSAgICAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3NtYWxsQ2FwcykgPDwg
c2l6ZW9mKHVuc2lnbmVkKSAqIDggLSAzCi0gICAgICAgIH07Ci0gICAgICAgIG1faGFzaCA9IFN0
cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMp
LCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwotICAgIH0KLQotcHJpdmF0ZToK
LSAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOwotICAgIGludCBtX3NpemU7Ci0gICAgYm9vbCBtX2Jv
bGQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLSAgICBib29sIG1fc21hbGxDYXBzOwotICAgIHVuc2ln
bmVkIG1faGFzaDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoVGFibGVEZWxldGVkU2l6ZSgp
IHsgcmV0dXJuIDB4RkZGRkZGRkZVOyB9Ci19OwotCi1zdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5JiBrZXkpCi0gICAgewotICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKLSAg
ICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikKLSAgICB7Ci0gICAgICAg
IHJldHVybiBhID09IGI7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3RydWN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8Rm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRy
dWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgZW1wdHlWYWx1
ZSgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSwga2V5LCAoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5OjpIYXNoVGFibGVFbXB0eVZh
bHVlKSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0
cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIHNsb3QpCi0gICAgewot
ICAgICAgICBuZXcgKCZzbG90KSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRGVs
ZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiB2YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2
YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotICAgIH0KLX07Ci0KLXR5cGVkZWYgSGFz
aE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIEZvbnRQbGF0Zm9ybURhdGEqLCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotLy8gdXNpbmcgUV9HTE9CQUxfU1RBVElDIGxlYWRzIHRv
IGNyYXNoLiBUT0RPIGludmVzdGlnYXRlIHRoZSB3YXkgdG8gZml4IHRoaXMuCi1zdGF0aWMgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0gMDsKLQotRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wpCi17
Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlKQotICAgICAgICBnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotICAgIEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleSBrZXkoZGVzY3JpcHRpb24pOwotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBs
YXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmdldChrZXkpOwotICAgIGlmICgh
cGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIHBsYXRmb3JtRGF0YSA9IG5ldyBGb250UGxhdGZvcm1E
YXRhKGRlc2NyaXB0aW9uKTsKLSAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+YWRkKGtl
eSwgcGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsKLX0KLQot
dHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3RkOjpwYWlyPFNpbXBs
ZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7Ci0KLXN0YXRpYyBGb250
RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7Ci0KLXN0YXRpYyBjb25zdCBpbnQgY01heElu
YWN0aXZlRm9udERhdGEgPSA0MDsKLXN0YXRpYyBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9u
dERhdGEgPSAzMjsKLQotc3RhdGljIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4q
IGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsKLQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6
Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0
YSkKLXsKLSAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7Ci0gICAgICAgIGdGb250RGF0YUNhY2hl
ID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gbmV3
IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj47Ci0gICAgfQotCi0gICAgRm9udFBs
YXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9udFBsYXRmb3JtRGF0YSk7Ci0gICAgRm9udERhdGFD
YWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChrZXkpOwotICAgIGlmIChp
dCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKLSAgICAgICAgU2ltcGxlRm9udERhdGEqIGZv
bnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpmb250UGxhdGZvcm1EYXRhKTsKLSAgICAgICAg
Z0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0ZDo6cGFpcjxTaW1wbGVGb250RGF0YSosIHVuc2ln
bmVkPihmb250RGF0YSwgMSkpOwotICAgICAgICByZXR1cm4gZm9udERhdGE7Ci0gICAgfQotICAg
IGlmICghaXQtPnNlY29uZC5zZWNvbmQrKykgewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9u
dERhdGFTZXQtPmNvbnRhaW5zKGl0LT5zZWNvbmQuZmlyc3QpKTsKLSAgICAgICAgZ0luYWN0aXZl
Rm9udERhdGFTZXQtPnJlbW92ZShpdC0+c2Vjb25kLmZpcnN0KTsKLSAgICB9Ci0gICAgcmV0dXJu
IGl0LT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0
TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQorY29uc3QgU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZv
bnQmIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGxlbmd0aCkKIHsKICAg
ICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgQVNTRVJUKGdGb250RGF0
YUNhY2hlKTsKLSAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0KLSAgICBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7Ci0g
ICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChrZXkp
OwotICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwotICAgIGlmICghLS1p
dC0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+YWRkKGl0
LT5zZWNvbmQuZmlyc3QpOwotICAgICAgICBpZiAoZ0luYWN0aXZlRm9udERhdGFTZXQtPnNpemUo
KSA+IGNNYXhJbmFjdGl2ZUZvbnREYXRhKQotICAgICAgICAgICAgcHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgLSBjVGFyZ2V0SW5hY3RpdmVGb250RGF0
YSk7Ci0gICAgfQotfQotCi12b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGlu
dCBjb3VudCkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc1B1cmdpbmc7
ICAvLyBHdWFyZCBhZ2FpbnN0IHJlZW50cnkgd2hlbiBlLmcuIGEgZGVsZXRlZCBGb250RGF0YSBy
ZWxlYXNlcyBpdHMgc21hbGwgY2FwcyBGb250RGF0YS4KLSAgICBpZiAoaXNQdXJnaW5nKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBpc1B1cmdpbmcgPSB0cnVlOwotCi0gICAgTGlzdEhhc2hTZXQ8
Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0YVNl
dC0+YmVnaW4oKTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVy
YXRvciBlbmQgPSBnSW5hY3RpdmVGb250RGF0YVNldC0+ZW5kKCk7Ci0gICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBjb3VudCAmJiBpdCAhPSBlbmQ7ICsraSwgKytpdCkgewotICAgICAgICBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkga2V5ID0gKCppdCktPnBsYXRmb3JtRGF0YSgpOwotICAgICAgICBw
YWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+IGZvbnREYXRhUGFpciA9IGdGb250RGF0YUNh
Y2hlLT50YWtlKGtleSk7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YVBhaXIuZmlyc3QgIT0gMCk7
Ci0gICAgICAgIEFTU0VSVCghZm9udERhdGFQYWlyLnNlY29uZCk7Ci0gICAgICAgIGRlbGV0ZSBm
b250RGF0YVBhaXIuZmlyc3Q7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1E
YXRhID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+dGFrZShrZXkpOwotICAgICAgICBpZiAocGxh
dGZvcm1EYXRhKQotICAgICAgICAgICAgZGVsZXRlIHBsYXRmb3JtRGF0YTsKLSAgICB9Ci0KLSAg
ICBpZiAoaXQgPT0gZW5kKSB7Ci0gICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0aGluZwotICAgICAg
ICBnSW5hY3RpdmVGb250RGF0YVNldC0+Y2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBnSW5hY3RpdmVGb250
RGF0YVNldC0+cmVtb3ZlKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpKTsKLSAgICB9Ci0K
LSAgICBpc1B1cmdpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEo
Zm9udC5mb250RGVzY3JpcHRpb24oKSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjphZGRDbGllbnQo
Rm9udFNlbGVjdG9yKikKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogeworICAgIHJldHVybiAgbmV3
IEZvbnRQbGF0Zm9ybURhdGEoUUZvbnQoKSwgZmFsc2UpOwogfQogCi12b2lkIEZvbnRDYWNoZTo6
cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciopCit2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5G
YW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lLCBWZWN0b3I8dW5zaWduZWQ+JiB0
cmFpdHNNYXNrcykKIHsKIH0KIAotdm9pZCBGb250Q2FjaGU6OmludmFsaWRhdGUoKQorRm9udFBs
YXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkK
IHsKLSAgICBpZiAoIWdGb250UGxhdGZvcm1EYXRhQ2FjaGUgfHwgIWdGb250RGF0YUNhY2hlKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoKTsKKyAgICByZXR1
cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250RmFsbGJhY2tMaXN0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
RmFsbGJhY2tMaXN0UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTFlNGY2
Li4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNr
TGlzdFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICAgIENvcHly
aWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAg
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFJlcGxhY2VtZW50
IG9mIHRoZSBzdG9jayBGb250RmFsbGJhY2tMaXN0IGFzIFF0IGlzIGdvaW5nIHRvIGZpbmQgdXMg
YQotICAgIHJlcGxhY2VtZW50IGZvbnQsIHdpbGwgZG8gY2FjaGluZyBhbmQgdGhlIG90aGVyIHN0
dWZmIHdlIGltcGxlbWVudCBpbgotICAgIFdlYktpdC4KLSovCi0KLSNpbmNsdWRlICJjb25maWcu
aCIKLSNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0j
aW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkRm9udERhdGEuaCIKLQot
I2luY2x1ZGUgPFFEZWJ1Zz4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Gb250RmFsbGJhY2tM
aXN0OjpGb250RmFsbGJhY2tMaXN0KCkKLSAgICA6IG1fcGFnZVplcm8oMCkKLSAgICAsIG1fY2Fj
aGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKDApCi0gICAgLCBtX2ZvbnRTZWxlY3RvcigwKQotICAg
ICwgbV9mYW1pbHlJbmRleCgwKQotICAgICwgbV9waXRjaChVbmtub3duUGl0Y2gpCi0gICAgLCBt
X2xvYWRpbmdDdXN0b21Gb250cyhmYWxzZSkKLSAgICAsIG1fZ2VuZXJhdGlvbigwKQotewotfQot
Ci12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmludmFsaWRhdGUoV1RGOjpQYXNzUmVmUHRyPFdlYkNv
cmU6OkZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotewotICAgIHJlbGVhc2VGb250RGF0YSgp
OwotICAgIG1fZm9udExpc3QuY2xlYXIoKTsKLSAgICBtX3BhZ2VaZXJvID0gMDsKLSAgICBtX3Bh
Z2VzLmNsZWFyKCk7Ci0gICAgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGEgPSAwOwotICAg
IG1fZmFtaWx5SW5kZXggPSAwOwotICAgIG1fcGl0Y2ggPSBVbmtub3duUGl0Y2g7Ci0gICAgbV9s
b2FkaW5nQ3VzdG9tRm9udHMgPSBmYWxzZTsKLSAgICBtX2ZvbnRTZWxlY3RvciA9IGZvbnRTZWxl
Y3RvcjsKLSAgICBtX2dlbmVyYXRpb24gPSAwOwotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6
OnJlbGVhc2VGb250RGF0YSgpCi17Ci0gICAgdW5zaWduZWQgbnVtRm9udHMgPSBtX2ZvbnRMaXN0
LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRm9udHM7ICsraSkgewot
ICAgICAgICBpZiAobV9mb250TGlzdFtpXS5zZWNvbmQpCi0gICAgICAgICAgICBkZWxldGUgbV9m
b250TGlzdFtpXS5maXJzdDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1f
Zm9udExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVkKCkpOwotICAgICAgICAgICAgZm9udENhY2hl
KCktPnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KG1f
Zm9udExpc3RbaV0uZmlyc3QpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGb250RmFs
bGJhY2tMaXN0OjpkZXRlcm1pbmVQaXRjaChjb25zdCBXZWJDb3JlOjpGb250KiBmb250KSBjb25z
dAotewotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IHByaW1hcnlGb250RGF0YShmb250
KTsKLSAgICBpZiAoIWZvbnREYXRhLT5pc1NlZ21lbnRlZCgpKQotICAgICAgICBtX3BpdGNoID0g
c3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250RGF0YSktPnBpdGNoKCk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRlZEZvbnREYXRhKiBzZWdtZW50ZWRGb250
RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNlZ21lbnRlZEZvbnREYXRhKj4oZm9udERhdGEpOwot
ICAgICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBzZWdtZW50ZWRGb250RGF0YS0+bnVtUmFuZ2Vz
KCk7Ci0gICAgICAgIGlmIChudW1SYW5nZXMgPT0gMSkKLSAgICAgICAgICAgIG1fcGl0Y2ggPSBz
ZWdtZW50ZWRGb250RGF0YS0+cmFuZ2VBdCgwKS5mb250RGF0YSgpLT5waXRjaCgpOwotICAgICAg
ICBlbHNlCi0gICAgICAgICAgICBtX3BpdGNoID0gVmFyaWFibGVQaXRjaDsKLSAgICB9Ci19Ci0K
LWNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KGNvbnN0IFdlYkNv
cmU6OkZvbnQqIF9mb250LCB1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoaW5kZXgg
IT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBTZWFyY2ggZm9yIHRoZSBXZWJDb3Jl
IGZvbnQgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBsaXN0Ci0gICAgZm9yIChpbnQgaSA9IG1fZm9u
dExpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgcGFpcjxjb25zdCBGb250
RGF0YSosIGJvb2w+IGl0ZW0gPSBtX2ZvbnRMaXN0W2ldOwotICAgICAgICAvLyBpdGVtLnNlY29u
ZCBtZWFucyB0aGF0IHRoZSBpdGVtIHdhcyBjcmVhdGVkIGxvY2FsbHkgb3Igbm90Ci0gICAgICAg
IGlmICghaXRlbS5zZWNvbmQpCi0gICAgICAgICAgICByZXR1cm4gaXRlbS5maXJzdDsKLSAgICB9
Ci0KLSAgICAvLyBVc2UgdGhlIEZvbnRTZWxlY3RvciB0byBnZXQgYSBXZWJDb3JlIGZvbnQgYW5k
IHRoZW4gZmFsbGJhY2sgdG8gUXQKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0
aW9uID0gX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZh
bWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAgICB3aGlsZSAoZmFtaWx5KSB7Ci0gICAg
ICAgIGlmIChtX2ZvbnRTZWxlY3RvcikgewotICAgICAgICAgICAgRm9udERhdGEqIGRhdGEgPSBt
X2ZvbnRTZWxlY3Rvci0+Z2V0Rm9udERhdGEoZGVzY3JpcHRpb24sIGZhbWlseS0+ZmFtaWx5KCkp
OwotICAgICAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YS0+aXNM
b2FkaW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbG9hZGluZ0N1c3RvbUZvbnRzID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICBpZiAoIWRhdGEtPmlzQ3VzdG9tRm9udCgpKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIEN1c3RvbSBmb250cyBjYW4gYmUgZnJlZWQgYW55dGltZSBzbyB3ZSBt
dXN0IG5vdCBob2xkIHRoZW0KLSAgICAgICAgICAgICAgICAgICAgbV9mb250TGlzdC5hcHBlbmQo
cGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+KGRhdGEsIGZhbHNlKSk7Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmICht
X2ZvbnRMaXN0LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1fZm9udExpc3RbMF0uZmlyc3Q7Ci0K
LSAgICBjb25zdCBGb250RGF0YSogcmVzdWx0ID0gbmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0
Zm9ybURhdGEoZGVzY3JpcHRpb24sIF9mb250LT53b3JkU3BhY2luZygpLCBfZm9udC0+bGV0dGVy
U3BhY2luZygpKSwgdHJ1ZSk7Ci0gICAgbV9mb250TGlzdC5hcHBlbmQocGFpcjxjb25zdCBGb250
RGF0YSosIGJvb2w+KHJlc3VsdCwgdHJ1ZSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWNv
bnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUZvckNoYXJhY3RlcnMoY29u
c3QgV2ViQ29yZTo6Rm9udCogZm9udCwgY29uc3QgVUNoYXIqLCBpbnQpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIHByaW1hcnlGb250RGF0YShmb250KTsKLX0KLQotdm9pZCBGb250RmFsbGJhY2tMaXN0
OjpzZXRQbGF0Zm9ybUZvbnQoY29uc3QgV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YSYpCi17Ci0g
ICAgbV9mYW1pbHlJbmRleCA9IGNBbGxGYW1pbGllc1NjYW5uZWQ7Ci19Ci0KLX0KZGlmZiAtLWdp
dCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggOTIyMTlm
ZC4uZDJmYzMzNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UGxhdGZvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxh
dGZvcm1EYXRhLmgKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgogI2luY2x1ZGUgPFFGb250PgorI2luY2x1ZGUgPFFIYXNoPgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTQxLDYgKzQyLDkgQEAgcHVibGljOgogICAgIEZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiwgaW50IHdvcmRTcGFjaW5nID0gMCwgaW50IGxldHRlclNw
YWNpbmcgPSAwKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IFFGb250JiwgYm9vbCBib2xk
KTsKIAorICAgIEZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBl
KSA6IG1faXNEZWxldGVkVmFsdWUodHJ1ZSkgeyB9CisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0
ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNEZWxldGVkVmFsdWU7IH0KKwogICAgIHN0YXRp
YyBpbmxpbmUgUUZvbnQ6OldlaWdodCB0b1FGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdo
dCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoZm9udFdlaWdodCkgewpAQCAtNjksNiArNzMsMTkg
QEAgcHVibGljOgogICAgIGJvb2wgaXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9mb250Lml0YWxp
YygpOyB9CiAgICAgYm9vbCBzbWFsbENhcHMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuY2FwaXRh
bGl6YXRpb24oKSA9PSBRRm9udDo6U21hbGxDYXBzOyB9CiAgICAgaW50IHBpeGVsU2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udC5waXhlbFNpemUoKTsgfQorICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIHFIYXNoKG1fZm9udC50b1N0cmluZygpKTsKKyAg
ICB9CisKKyAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKG1faXNEZWxldGVkVmFsdWUgJiYgbV9pc0Rl
bGV0ZWRWYWx1ZSA9PSBvdGhlci5tX2lzRGVsZXRlZFZhbHVlKQorICAgICAgICAgICAgICAgIHx8
IChtX3NpemUgPT0gb3RoZXIubV9zaXplCisgICAgICAgICAgICAgICAgICAgICYmIG1fYm9sZCA9
PSBvdGhlci5tX2JvbGQKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9vYmxpcXVlID09IG90aGVy
Lm1fb2JsaXF1ZQorICAgICAgICAgICAgICAgICAgICAmJiBtX2ZvbnQgPT0gbV9mb250KTsKKyAg
ICB9CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CkBA
IC03Nyw2ICs5NCw3IEBAIHB1YmxpYzoKICAgICBmbG9hdCBtX3NpemU7CiAgICAgYm9vbCBtX2Jv
bGQ7CiAgICAgYm9vbCBtX29ibGlxdWU7CisgICAgYm9vbCBtX2lzRGVsZXRlZFZhbHVlOwogICAg
IFFGb250IG1fZm9udDsKIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAppbmRleCA3NzA5YmU2Li5kYTM4MjFlIDEwMDY0NAot
LS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3Bw
CkBAIC0zMCw2ICszMCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29u
c3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgaW50IHdvcmRTCiAgICAgOiBtX3NpemUo
MC4wZikKICAgICAsIG1fYm9sZChmYWxzZSkKICAgICAsIG1fb2JsaXF1ZShmYWxzZSkKKyAgICAs
IG1faXNEZWxldGVkVmFsdWUoZmFsc2UpCiB7CiAgICAgUVN0cmluZyBmYW1pbHlOYW1lOwogICAg
IGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKQEAgLTU5
LDYgKzYwLDcgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBRRm9u
dCYgZm9udCwgYm9vbCBib2xkKQogICAgICwgbV9ib2xkKGJvbGQpCiAgICAgLCBtX29ibGlxdWUo
ZmFsc2UpCiAgICAgLCBtX2ZvbnQoZm9udCkKKyAgICAsIG1faXNEZWxldGVkVmFsdWUoZmFsc2Up
CiB7CiB9CiAKQEAgLTY3LDYgKzY5LDcgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKICAgICA6IG1fc2l6ZShz
aXplKQogICAgICwgbV9ib2xkKGJvbGQpCiAgICAgLCBtX29ibGlxdWUob2JsaXF1ZSkKKyAgICAs
IG1faXNEZWxldGVkVmFsdWUoZmFsc2UpCiB7CiB9CiAjZW5kaWYKQEAgLTc1LDYgKzc4LDcgQEAg
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSgpCiAgICAgOiBtX3NpemUoMC4wZikK
ICAgICAsIG1fYm9sZChmYWxzZSkKICAgICAsIG1fb2JsaXF1ZShmYWxzZSkKKyAgICAsIG1faXNE
ZWxldGVkVmFsdWUoZmFsc2UpCiB7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41418</attachid>
            <date>2009-10-19 08:33:29 -0700</date>
            <delta_ts>2009-10-20 04:54:47 -0700</delta_ts>
            <desc>Patch with test case</desc>
            <filename>font_handling_qt.patch</filename>
            <type>text/plain</type>
            <size>22045</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZDcwMWY4Li40NGY2ZmQ4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTAt
MTkgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgdGVz
dCB0byByZXByb2R1Y2UgMjk4NTYuIFRoZSBidWcgb25seSBoYXBwZW4KKyAgICAgICAgd2hlbiB0
aGUgU1ZHIGZpbGUgaXMgdXNlZCBhcyBhbiBpbWFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODU2CisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9z
dmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN2Zy90ZXh0L3Jlc291cmNlcy90ZXh0LWZvbnQtaW52YWxpZC5zdmc6IEFkZGVkLgorICAgICAg
ICAqIHN2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEwLTA3
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBTa2lwIHR3byBuZXcg
dGVzdHMgZm9yIHdoaWNoIHdlIGFyZSBtaXNzaW5nIHJlc3VsdHMuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnIGIvTGF5b3V0
VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1pbnZhbGlkLnN2ZwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjllMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1pbnZhbGlkLnN2ZwpAQCAtMCww
ICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICIt
Ly9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8x
LjEvRFREL3N2ZzExLmR0ZCI+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgeG1sbnM6eGw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSI+
CisgIDxkZWZzPgorICAgIDxmb250LWZhY2UgZm9udC1mYW1pbHk9IkFyYml0cmFyeSBmb250IG5v
dCBvbiB0aGUgc3lzdGVtIj4KKyAgICA8Zm9udC1mYWNlLXNyYz4KKyAgICAgIDxmb250LWZhY2Ut
bmFtZSBuYW1lPSJWZXJ5VW5saWtlbHlUb0V4aXN0Rm9udCIvPgorICAgIDwvZm9udC1mYWNlLXNy
Yz4KKyAgICA8L2ZvbnQtZmFjZT4KKyAgPC9kZWZzPgorICA8Zz4KKyAgICA8dGV4dD4KKyAgICAg
IDx0c3BhbiBmb250LWZhbWlseT0iQXJiaXRyYXJ5IGZvbnQgbm90IG9uIHRoZSBzeXN0ZW0iPkZv
b2JhcjwvdHNwYW4+CisgICAgPC90ZXh0PgorICA8L2c+Cis8L3N2Zz4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MGU3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw5IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MTYKKyAgUmVuZGVyVmlldyBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYxNgorICBSZW5kZXJC
bG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjE2CisgICAgUmVuZGVyQm9keSB7Qk9EWX0g
YXQgKDgsOCkgc2l6ZSA3ODR4NjAwCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwwKSBz
aXplIDc4NHg2MDAKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAor
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCisgICAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2
Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0
LWZvbnQtaW52YWxpZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVl
MjNiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQt
aW52YWxpZC5odG1sCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+CisgIDxib2R5PgorICAgIDxpbWcg
c3JjPSJyZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnIiAvPgorICA8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDdiNzgyMTguLjZmMzViYTQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMgQEAKKzIwMDktMTAtMTkgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEhhbmRsZSBmb250cyBsaWtlIHRo
ZSBvdGhlciBwb3J0cworCisgICAgICAgIFJlbW92ZSBGb250RmFsbGJhY2tMaXN0UXQgYW5kIHJl
bHkgb24gdGhlIGNvbW1vbiBGb250RmFsbGJhY2tMaXN0CisgICAgICAgIHRvIGhhbmRsZSB0aGUg
Zm9udHMuIEZvbnRDYWNoZSBhbmQgRm9udFBsYXRmb3JtRGF0YSBoYXZlIGJlZW4KKyAgICAgICAg
dXBkYXRlZCB0byB3b3JrIHdpdGggdGhlIGNvbW1vbiBGb250RmFsbGJhY2tMaXN0LgorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mjk4NTYKKworICAgICAg
ICBUZXN0OiBzdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC5odG1sCisKKyAgICAgICAgKiBXZWJD
b3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udCk6CisgICAgICAg
IChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcDogUmVtb3ZlZC4KKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorCiAyMDA5LTEwLTA3ICBHaXJpc2ggUmFtYWtyaXNo
bmFuICA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNpbW9u
IEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUvV2Vi
Q29yZS5wcm8KaW5kZXggZDQxODk1OC4uZDk3NzMzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJD
b3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMTc4LDYgKzExNzgsNyBAQCBT
T1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2UuY3BwIFwKICAgICBw
bGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5
LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXApAQCAtMTE4OCw2ICsxMTg5LDcgQEAgU09VUkNFUyAr
PSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udERhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBc
CisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVu
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXApAQCAt
MjM2Miw3ICsyMzY0LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvU2hhcmVkQnVm
ZmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIFwKLSAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0tVUkxR
dC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2Fj
aGVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcApp
bmRleCAxMTEzZWFlLi5jODdhYzRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRDYWNoZVF0LmNwcApAQCAtMzgsMjU2ICszOCwzNyBAQCB1c2luZyBuYW1lc3BhY2UgV1RG
OwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRDYWNoZSogZm9udENhY2hlKCkKK3ZvaWQg
Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9u
dENhY2hlLCBnbG9iYWxGb250Q2FjaGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2JhbEZvbnRDYWNo
ZTsKIH0KIAotRm9udENhY2hlOjpGb250Q2FjaGUoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6
Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYp
Ci17Ci19Ci0KLS8vIFRoaXMgdHlwZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxhdGZv
cm1EYXRhJ3MgY3RvciAtIHRoZSBvbmUgd2hpY2gKLS8vIGdldHMgRm9udERlc2NyaXB0aW9uIGFz
IGl0J3MgcGFyYW1ldGVyLgotY2xhc3MgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKLXB1Ymxp
YzoKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6ZShk
ZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmYWxzZSkK
LSAgICAgICAgLCBtX2l0YWxpYyhkZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgLCBtX3Nt
YWxsQ2FwcyhkZXNjcmlwdGlvbi5zbWFsbENhcHMoKSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAg
ICB7Ci0gICAgICAgIC8vIEZJWE1FOiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFFGb250
IHdlaWdodHMgaW4gRm9udFBsYXRmb3JtRGF0YSdzIGN0b3IgYW5kIGZvbGxvdyBpdCBoZXJlCi0g
ICAgICAgIGlmIChGb250UGxhdGZvcm1EYXRhOjp0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9uLndl
aWdodCgpKSA+IFFGb250OjpOb3JtYWwpCi0gICAgICAgICAgICBtX2JvbGQgPSB0cnVlOwotCi0g
ICAgICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsK
LSAgICAgICAgd2hpbGUgKGZhbWlseSkgewotICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVu
ZChmYW1pbHktPmZhbWlseSgpKTsKLSAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgp
OwotICAgICAgICAgICAgaWYgKGZhbWlseSkKLSAgICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUu
YXBwZW5kKCcsJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0K
LQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBm
b250RGF0YSkKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nPihmb250
RGF0YS5mYW1pbHkoKSkpCi0gICAgICAgICwgbV9zaXplKGZvbnREYXRhLnBpeGVsU2l6ZSgpKQot
ICAgICAgICAsIG1fYm9sZChmb250RGF0YS5ib2xkKCkpCi0gICAgICAgICwgbV9pdGFsaWMoZm9u
dERhdGEuaXRhbGljKCkpCi0gICAgICAgICwgbV9zbWFsbENhcHMoZm9udERhdGEuc21hbGxDYXBz
KCkpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewotICAgICAgICBjb21wdXRlSGFzaCgpOwot
ICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVEZWxldGVkVmFs
dWVUeXBlKSA6IG1fc2l6ZShoYXNoVGFibGVEZWxldGVkU2l6ZSgpKSB7IH0KLSAgICBib29sIGlz
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IGhhc2hUYWJs
ZURlbGV0ZWRTaXplKCk7IH0KLQotICAgIGVudW0gSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUgeyBI
YXNoVGFibGVFbXB0eVZhbHVlIH07Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFz
aFRhYmxlRW1wdHlWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkKLSAgICAgICAg
LCBtX3NpemUoMCkKLSAgICAgICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9pdGFsaWMo
ZmFsc2UpCi0gICAgICAgICwgbV9zbWFsbENhcHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXNoKDAp
Ci0gICAgewotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faGFzaCAhPSBv
dGhlci5tX2hhc2gpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJu
IGVxdWFsSWdub3JpbmdDYXNlKG1fZmFtaWx5TmFtZSwgb3RoZXIubV9mYW1pbHlOYW1lKSAmJiBt
X3NpemUgPT0gb3RoZXIubV9zaXplICYmCi0gICAgICAgICAgICBtX2JvbGQgPT0gb3RoZXIubV9i
b2xkICYmIG1faXRhbGljID09IG90aGVyLm1faXRhbGljICYmIG1fc21hbGxDYXBzID09IG90aGVy
Lm1fc21hbGxDYXBzOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1faGFzaDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXB1dGVIYXNoKCkK
LSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICAgICAgQ2Fz
ZUZvbGRpbmdIYXNoOjpoYXNoKG1fZmFtaWx5TmFtZSksCi0gICAgICAgICAgICBtX3NpemUgfCBz
dGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ib2xkIDw8IHNpemVvZih1bnNpZ25lZCkgKiA4IC0gMSkK
LSAgICAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2l0YWxpYykgPDwgc2l6
ZW9mKHVuc2lnbmVkKSAqOCAtIDIKLSAgICAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX3NtYWxsQ2FwcykgPDwgc2l6ZW9mKHVuc2lnbmVkKSAqIDggLSAzCi0gICAgICAgIH07
Ci0gICAgICAgIG1faGFzaCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nh
c3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikp
OwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOwotICAgIGludCBt
X3NpemU7Ci0gICAgYm9vbCBtX2JvbGQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLSAgICBib29sIG1f
c21hbGxDYXBzOwotICAgIHVuc2lnbmVkIG1faGFzaDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBo
YXNoVGFibGVEZWxldGVkU2l6ZSgpIHsgcmV0dXJuIDB4RkZGRkZGRkZVOyB9Ci19OwotCi1zdHJ1
Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhh
c2goY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpCi0gICAgewotICAgICAgICBy
ZXR1cm4ga2V5Lmhhc2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQotCi0gICAgc3RhdGlj
IGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQot
c3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hU
cmFpdHM8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wg
bmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleSYgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElDX0xP
Q0FMKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwga2V5LCAoRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5OjpIYXNoVGFibGVFbXB0eVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQot
ICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkmIHNsb3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wg
aXNEZWxldGVkVmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiB2YWx1ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotICAg
IH0KLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIEZvbnRQ
bGF0Zm9ybURhdGEqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotLy8gdXNpbmcgUV9H
TE9CQUxfU1RBVElDIGxlYWRzIHRvIGNyYXNoLiBUT0RPIGludmVzdGlnYXRlIHRoZSB3YXkgdG8g
Zml4IHRoaXMuCi1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3JtRGF0
YUNhY2hlID0gMDsKLQotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0
b21pY1N0cmluZyYsIGJvb2wpCi17Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlKQot
ICAgICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZGVzY3JpcHRpb24pOwotICAg
IEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUt
PmdldChrZXkpOwotICAgIGlmICghcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIHBsYXRmb3JtRGF0
YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKTsKLSAgICAgICAgZ0ZvbnRQbGF0
Zm9ybURhdGFDYWNoZS0+YWRkKGtleSwgcGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJu
IHBsYXRmb3JtRGF0YTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRh
Q2FjaGU7Ci0KLXN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7Ci0KLXN0
YXRpYyBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSA0MDsKLXN0YXRpYyBjb25zdCBp
bnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAzMjsKLQotc3RhdGljIExpc3RIYXNoU2V0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsKLQotU2ltcGxl
Rm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSogZm9udFBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7Ci0g
ICAgICAgIGdGb250RGF0YUNhY2hlID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAgICAgIGdJbmFj
dGl2ZUZvbnREYXRhU2V0ID0gbmV3IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj47
Ci0gICAgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9udFBsYXRmb3Jt
RGF0YSk7Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+
ZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKLSAgICAg
ICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpmb250UGxh
dGZvcm1EYXRhKTsKLSAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0ZDo6cGFpcjxT
aW1wbGVGb250RGF0YSosIHVuc2lnbmVkPihmb250RGF0YSwgMSkpOwotICAgICAgICByZXR1cm4g
Zm9udERhdGE7Ci0gICAgfQotICAgIGlmICghaXQtPnNlY29uZC5zZWNvbmQrKykgewotICAgICAg
ICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGFTZXQtPmNvbnRhaW5zKGl0LT5zZWNvbmQuZmlyc3Qp
KTsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShpdC0+c2Vjb25kLmZpcnN0
KTsKLSAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLUZvbnRQbGF0Zm9y
bURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVz
Y3JpcHRpb24mKQorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFG
b3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgaW50IGxlbmd0aCkKIHsKKyAgICBVTlVTRURfUEFSQU0oZm9udCk7CisgICAgVU5VU0VEX1BB
UkFNKGNoYXJhY3RlcnMpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwogICAgIHJldHVybiAw
OwogfQogCi12b2lkIEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFdlYkNvcmU6OlNp
bXBsZUZvbnREYXRhKiBmb250RGF0YSkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0
U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKLSAgICBBU1NFUlQo
Z0ZvbnREYXRhQ2FjaGUpOwotICAgIEFTU0VSVCghZm9udERhdGEtPmlzQ3VzdG9tRm9udCgpKTsK
LQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpKTsKLSAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGdGb250RGF0YUNhY2hlLT5m
aW5kKGtleSk7Ci0gICAgQVNTRVJUKGl0ICE9IGdGb250RGF0YUNhY2hlLT5lbmQoKSk7Ci0gICAg
aWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0
LT5hZGQoaXQtPnNlY29uZC5maXJzdCk7Ci0gICAgICAgIGlmIChnSW5hY3RpdmVGb250RGF0YVNl
dC0+c2l6ZSgpID4gY01heEluYWN0aXZlRm9udERhdGEpCi0gICAgICAgICAgICBwdXJnZUluYWN0
aXZlRm9udERhdGEoZ0luYWN0aXZlRm9udERhdGFTZXQtPnNpemUoKSAtIGNUYXJnZXRJbmFjdGl2
ZUZvbnREYXRhKTsKLSAgICB9Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpwdXJnZUluYWN0aXZlRm9u
dERhdGEoaW50IGNvdW50KQotewotICAgIHN0YXRpYyBib29sIGlzUHVyZ2luZzsgIC8vIEd1YXJk
IGFnYWluc3QgcmVlbnRyeSB3aGVuIGUuZy4gYSBkZWxldGVkIEZvbnREYXRhIHJlbGVhc2VzIGl0
cyBzbWFsbCBjYXBzIEZvbnREYXRhLgotICAgIGlmIChpc1B1cmdpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIGlzUHVyZ2luZyA9IHRydWU7Ci0KLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1w
bGVGb250RGF0YSo+OjppdGVyYXRvciBpdCA9IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigp
OwotICAgIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46Oml0ZXJhdG9yIGVuZCA9
IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5lbmQoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50ICYmIGl0ICE9IGVuZDsgKytpLCArK2l0KSB7Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSBrZXkgPSAoKml0KS0+cGxhdGZvcm1EYXRhKCk7Ci0gICAgICAgIHBhaXI8U2ltcGxl
Rm9udERhdGEqLCB1bnNpZ25lZD4gZm9udERhdGFQYWlyID0gZ0ZvbnREYXRhQ2FjaGUtPnRha2Uo
a2V5KTsKLSAgICAgICAgQVNTRVJUKGZvbnREYXRhUGFpci5maXJzdCAhPSAwKTsKLSAgICAgICAg
QVNTRVJUKCFmb250RGF0YVBhaXIuc2Vjb25kKTsKLSAgICAgICAgZGVsZXRlIGZvbnREYXRhUGFp
ci5maXJzdDsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEgPSBnRm9u
dFBsYXRmb3JtRGF0YUNhY2hlLT50YWtlKGtleSk7Ci0gICAgICAgIGlmIChwbGF0Zm9ybURhdGEp
Ci0gICAgICAgICAgICBkZWxldGUgcGxhdGZvcm1EYXRhOwotICAgIH0KLQotICAgIGlmIChpdCA9
PSBlbmQpIHsKLSAgICAgICAgLy8gUmVtb3ZlZCBldmVyeXRoaW5nCi0gICAgICAgIGdJbmFjdGl2
ZUZvbnREYXRhU2V0LT5jbGVhcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5y
ZW1vdmUoZ0luYWN0aXZlRm9udERhdGFTZXQtPmJlZ2luKCkpOwotICAgIH0KLQotICAgIGlzUHVy
Z2luZyA9IGZhbHNlOworICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250LmZvbnRE
ZXNjcmlwdGlvbigpKTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChGb250U2VsZWN0
b3IqKQorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tG
b250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCiB7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZv
cm1EYXRhKFFGb250KCksIGZhbHNlKTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OnJlbW92ZUNsaWVu
dChGb250U2VsZWN0b3IqKQordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFtaWx5KGNvbnN0
IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQogewogfQogCi12b2lkIEZvbnRDYWNo
ZTo6aW52YWxpZGF0ZSgpCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0ZUZvbnRQ
bGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0
IEF0b21pY1N0cmluZyYpCiB7Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlIHx8ICFn
Rm9udERhdGFDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHVyZ2VJbmFjdGl2ZUZvbnRE
YXRhKCk7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbik7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOGUxZTRmNi4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwxMzggKzAsMCBA
QAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIK
LQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAgIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAot
ICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAgICBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0
ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuCi0K
LSAgICBSZXBsYWNlbWVudCBvZiB0aGUgc3RvY2sgRm9udEZhbGxiYWNrTGlzdCBhcyBRdCBpcyBn
b2luZyB0byBmaW5kIHVzIGEKLSAgICByZXBsYWNlbWVudCBmb250LCB3aWxsIGRvIGNhY2hpbmcg
YW5kIHRoZSBvdGhlciBzdHVmZiB3ZSBpbXBsZW1lbnQgaW4KLSAgICBXZWJLaXQuCi0qLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5oIgotCi0jaW5j
bHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUgIlNlZ21lbnRl
ZEZvbnREYXRhLmgiCi0KLSNpbmNsdWRlIDxRRGVidWc+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotRm9udEZhbGxiYWNrTGlzdDo6Rm9udEZhbGxiYWNrTGlzdCgpCi0gICAgOiBtX3BhZ2VaZXJv
KDApCi0gICAgLCBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQotICAgICwgbV9mb250
U2VsZWN0b3IoMCkKLSAgICAsIG1fZmFtaWx5SW5kZXgoMCkKLSAgICAsIG1fcGl0Y2goVW5rbm93
blBpdGNoKQotICAgICwgbV9sb2FkaW5nQ3VzdG9tRm9udHMoZmFsc2UpCi0gICAgLCBtX2dlbmVy
YXRpb24oMCkKLXsKLX0KLQotdm9pZCBGb250RmFsbGJhY2tMaXN0OjppbnZhbGlkYXRlKFdURjo6
UGFzc1JlZlB0cjxXZWJDb3JlOjpGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikKLXsKLSAgICBy
ZWxlYXNlRm9udERhdGEoKTsKLSAgICBtX2ZvbnRMaXN0LmNsZWFyKCk7Ci0gICAgbV9wYWdlWmVy
byA9IDA7Ci0gICAgbV9wYWdlcy5jbGVhcigpOwotICAgIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZv
bnREYXRhID0gMDsKLSAgICBtX2ZhbWlseUluZGV4ID0gMDsKLSAgICBtX3BpdGNoID0gVW5rbm93
blBpdGNoOwotICAgIG1fbG9hZGluZ0N1c3RvbUZvbnRzID0gZmFsc2U7Ci0gICAgbV9mb250U2Vs
ZWN0b3IgPSBmb250U2VsZWN0b3I7Ci0gICAgbV9nZW5lcmF0aW9uID0gMDsKLX0KLQotdm9pZCBG
b250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEoKQotewotICAgIHVuc2lnbmVkIG51bUZv
bnRzID0gbV9mb250TGlzdC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG51
bUZvbnRzOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZm9udExpc3RbaV0uc2Vjb25kKQotICAgICAg
ICAgICAgZGVsZXRlIG1fZm9udExpc3RbaV0uZmlyc3Q7Ci0gICAgICAgIGVsc2UgewotICAgICAg
ICAgICAgQVNTRVJUKCFtX2ZvbnRMaXN0W2ldLmZpcnN0LT5pc1NlZ21lbnRlZCgpKTsKLSAgICAg
ICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEoc3RhdGljX2Nhc3Q8Y29uc3QgU2lt
cGxlRm9udERhdGEqPihtX2ZvbnRMaXN0W2ldLmZpcnN0KSk7Ci0gICAgICAgIH0KLSAgICB9Ci19
Ci0KLXZvaWQgRm9udEZhbGxiYWNrTGlzdDo6ZGV0ZXJtaW5lUGl0Y2goY29uc3QgV2ViQ29yZTo6
Rm9udCogZm9udCkgY29uc3QKLXsKLSAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBwcmlt
YXJ5Rm9udERhdGEoZm9udCk7Ci0gICAgaWYgKCFmb250RGF0YS0+aXNTZWdtZW50ZWQoKSkKLSAg
ICAgICAgbV9waXRjaCA9IHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4oZm9udERh
dGEpLT5waXRjaCgpOwotICAgIGVsc2UgewotICAgICAgICBjb25zdCBTZWdtZW50ZWRGb250RGF0
YSogc2VnbWVudGVkRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTZWdtZW50ZWRGb250RGF0
YSo+KGZvbnREYXRhKTsKLSAgICAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gc2VnbWVudGVkRm9u
dERhdGEtPm51bVJhbmdlcygpOwotICAgICAgICBpZiAobnVtUmFuZ2VzID09IDEpCi0gICAgICAg
ICAgICBtX3BpdGNoID0gc2VnbWVudGVkRm9udERhdGEtPnJhbmdlQXQoMCkuZm9udERhdGEoKS0+
cGl0Y2goKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9waXRjaCA9IFZhcmlhYmxlUGl0
Y2g7Ci0gICAgfQotfQotCi1jb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERh
dGFBdChjb25zdCBXZWJDb3JlOjpGb250KiBfZm9udCwgdW5zaWduZWQgaW5kZXgpIGNvbnN0Ci17
Ci0gICAgaWYgKGluZGV4ICE9IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgLy8gU2VhcmNo
IGZvciB0aGUgV2ViQ29yZSBmb250IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgbGlzdAotICAgIGZv
ciAoaW50IGkgPSBtX2ZvbnRMaXN0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAg
IHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPiBpdGVtID0gbV9mb250TGlzdFtpXTsKLSAgICAg
ICAgLy8gaXRlbS5zZWNvbmQgbWVhbnMgdGhhdCB0aGUgaXRlbSB3YXMgY3JlYXRlZCBsb2NhbGx5
IG9yIG5vdAotICAgICAgICBpZiAoIWl0ZW0uc2Vjb25kKQotICAgICAgICAgICAgcmV0dXJuIGl0
ZW0uZmlyc3Q7Ci0gICAgfQotCi0gICAgLy8gVXNlIHRoZSBGb250U2VsZWN0b3IgdG8gZ2V0IGEg
V2ViQ29yZSBmb250IGFuZCB0aGVuIGZhbGxiYWNrIHRvIFF0Ci0gICAgY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbiA9IF9mb250LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICBjb25z
dCBGb250RmFtaWx5KiBmYW1pbHkgPSAmZGVzY3JpcHRpb24uZmFtaWx5KCk7Ci0gICAgd2hpbGUg
KGZhbWlseSkgewotICAgICAgICBpZiAobV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgICAgIEZv
bnREYXRhKiBkYXRhID0gbV9mb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGRlc2NyaXB0aW9uLCBm
YW1pbHktPmZhbWlseSgpKTsKLSAgICAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKGRhdGEtPmlzTG9hZGluZygpKQotICAgICAgICAgICAgICAgICAgICBtX2xvYWRpbmdD
dXN0b21Gb250cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLT5pc0N1c3RvbUZv
bnQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b20gZm9udHMgY2FuIGJlIGZyZWVk
IGFueXRpbWUgc28gd2UgbXVzdCBub3QgaG9sZCB0aGVtCi0gICAgICAgICAgICAgICAgICAgIG1f
Zm9udExpc3QuYXBwZW5kKHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPihkYXRhLCBmYWxzZSkp
OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmYW1pbHkgPSBmYW1pbHktPm5leHQoKTsKLSAg
ICB9Ci0KLSAgICBpZiAobV9mb250TGlzdC5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX2ZvbnRM
aXN0WzBdLmZpcnN0OwotCi0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9IG5ldyBTaW1wbGVG
b250RGF0YShGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBfZm9udC0+d29yZFNwYWNpbmco
KSwgX2ZvbnQtPmxldHRlclNwYWNpbmcoKSksIHRydWUpOwotICAgIG1fZm9udExpc3QuYXBwZW5k
KHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPihyZXN1bHQsIHRydWUpKTsKLSAgICByZXR1cm4g
cmVzdWx0OwotfQotCi1jb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFG
b3JDaGFyYWN0ZXJzKGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZvbnQsIGNvbnN0IFVDaGFyKiwgaW50
KSBjb25zdAotewotICAgIHJldHVybiBwcmltYXJ5Rm9udERhdGEoZm9udCk7Ci19Ci0KLXZvaWQg
Rm9udEZhbGxiYWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGEmKQotewotICAgIG1fZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxpZXNTY2FubmVkOwot
fQotCi19CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0
YS5oCmluZGV4IDkyMjE5ZmQuLmQyZmMzMzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yNiw2ICsyNiw3IEBACiAKICNpbmNsdWRl
ICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRSGFzaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw2ICs0Miw5IEBAIHB1YmxpYzoKICAgICBG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGludCB3b3JkU3BhY2luZyA9
IDAsIGludCBsZXR0ZXJTcGFjaW5nID0gMCk7CiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBR
Rm9udCYsIGJvb2wgYm9sZCk7CiAKKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxl
RGVsZXRlZFZhbHVlVHlwZSkgOiBtX2lzRGVsZXRlZFZhbHVlKHRydWUpIHsgfQorICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZFZhbHVl
OyB9CisKICAgICBzdGF0aWMgaW5saW5lIFFGb250OjpXZWlnaHQgdG9RRm9udFdlaWdodChGb250
V2VpZ2h0IGZvbnRXZWlnaHQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGZvbnRXZWlnaHQpIHsK
QEAgLTY5LDYgKzczLDE5IEBAIHB1YmxpYzoKICAgICBib29sIGl0YWxpYygpIGNvbnN0IHsgcmV0
dXJuIG1fZm9udC5pdGFsaWMoKTsgfQogICAgIGJvb2wgc21hbGxDYXBzKCkgY29uc3QgeyByZXR1
cm4gbV9mb250LmNhcGl0YWxpemF0aW9uKCkgPT0gUUZvbnQ6OlNtYWxsQ2FwczsgfQogICAgIGlu
dCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQucGl4ZWxTaXplKCk7IH0KKyAgICB1
bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBxSGFzaChtX2ZvbnQu
dG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChtX2lzRGVsZXRl
ZFZhbHVlICYmIG1faXNEZWxldGVkVmFsdWUgPT0gb3RoZXIubV9pc0RlbGV0ZWRWYWx1ZSkKKyAg
ICAgICAgICAgICAgICB8fCAobV9zaXplID09IG90aGVyLm1fc2l6ZQorICAgICAgICAgICAgICAg
ICAgICAmJiBtX2JvbGQgPT0gb3RoZXIubV9ib2xkCisgICAgICAgICAgICAgICAgICAgICYmIG1f
b2JsaXF1ZSA9PSBvdGhlci5tX29ibGlxdWUKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9mb250
ID09IG1fZm9udCk7CisgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIFN0cmluZyBkZXNjcmlw
dGlvbigpIGNvbnN0OwpAQCAtNzcsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgZmxvYXQgbV9zaXpl
OwogICAgIGJvb2wgbV9ib2xkOwogICAgIGJvb2wgbV9vYmxpcXVlOworICAgIGJvb2wgbV9pc0Rl
bGV0ZWRWYWx1ZTsKICAgICBRRm9udCBtX2ZvbnQ7CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXggNzcwOWJlNi4u
ZGEzODIxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxh
dGZvcm1EYXRhUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBs
YXRmb3JtRGF0YVF0LmNwcApAQCAtMzAsNiArMzAsNyBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGludCB3b3Jk
UwogICAgIDogbV9zaXplKDAuMGYpCiAgICAgLCBtX2JvbGQoZmFsc2UpCiAgICAgLCBtX29ibGlx
dWUoZmFsc2UpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogICAgIFFTdHJpbmcg
ZmFtaWx5TmFtZTsKICAgICBjb25zdCBGb250RmFtaWx5KiBmYW1pbHkgPSAmZGVzY3JpcHRpb24u
ZmFtaWx5KCk7CkBAIC01OSw2ICs2MCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9y
bURhdGEoY29uc3QgUUZvbnQmIGZvbnQsIGJvb2wgYm9sZCkKICAgICAsIG1fYm9sZChib2xkKQog
ICAgICwgbV9vYmxpcXVlKGZhbHNlKQogICAgICwgbV9mb250KGZvbnQpCisgICAgLCBtX2lzRGVs
ZXRlZFZhbHVlKGZhbHNlKQogewogfQogCkBAIC02Nyw2ICs2OSw3IEBAIEZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUp
CiAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAsIG1fYm9sZChib2xkKQogICAgICwgbV9vYmxpcXVl
KG9ibGlxdWUpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQogI2VuZGlmCkBA
IC03NSw2ICs3OCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoKQogICAg
IDogbV9zaXplKDAuMGYpCiAgICAgLCBtX2JvbGQoZmFsc2UpCiAgICAgLCBtX29ibGlxdWUoZmFs
c2UpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41497</attachid>
            <date>2009-10-20 04:54:47 -0700</date>
            <delta_ts>2009-10-21 09:24:21 -0700</delta_ts>
            <desc>Patch with test case</desc>
            <filename>font_handling_qt.patch</filename>
            <type>text/plain</type>
            <size>22966</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZDcwMWY4Li41Y2MwMzY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTAt
MTkgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgdGVz
dCB0byByZXByb2R1Y2UgMjk4NTYuIFRoZSBidWcgb25seSBoYXBwZW4KKyAgICAgICAgd2hlbiB0
aGUgU1ZHIGZpbGUgaXMgdXNlZCBhcyBhbiBpbWFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODU2CisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9z
dmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN2Zy90ZXh0L3Jlc291cmNlcy90ZXh0LWZvbnQtaW52YWxpZC5zdmc6IEFkZGVkLgorICAgICAg
ICAqIHN2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEwLTA3
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBTa2lwIHR3byBuZXcg
dGVzdHMgZm9yIHdoaWNoIHdlIGFyZSBtaXNzaW5nIHJlc3VsdHMuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnIGIvTGF5b3V0
VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1pbnZhbGlkLnN2ZwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjllMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1pbnZhbGlkLnN2ZwpAQCAtMCww
ICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICIt
Ly9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8x
LjEvRFREL3N2ZzExLmR0ZCI+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgeG1sbnM6eGw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSI+
CisgIDxkZWZzPgorICAgIDxmb250LWZhY2UgZm9udC1mYW1pbHk9IkFyYml0cmFyeSBmb250IG5v
dCBvbiB0aGUgc3lzdGVtIj4KKyAgICA8Zm9udC1mYWNlLXNyYz4KKyAgICAgIDxmb250LWZhY2Ut
bmFtZSBuYW1lPSJWZXJ5VW5saWtlbHlUb0V4aXN0Rm9udCIvPgorICAgIDwvZm9udC1mYWNlLXNy
Yz4KKyAgICA8L2ZvbnQtZmFjZT4KKyAgPC9kZWZzPgorICA8Zz4KKyAgICA8dGV4dD4KKyAgICAg
IDx0c3BhbiBmb250LWZhbWlseT0iQXJiaXRyYXJ5IGZvbnQgbm90IG9uIHRoZSBzeXN0ZW0iPkZv
b2JhcjwvdHNwYW4+CisgICAgPC90ZXh0PgorICA8L2c+Cis8L3N2Zz4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MGU3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw5IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MTYKKyAgUmVuZGVyVmlldyBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYxNgorICBSZW5kZXJC
bG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjE2CisgICAgUmVuZGVyQm9keSB7Qk9EWX0g
YXQgKDgsOCkgc2l6ZSA3ODR4NjAwCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwwKSBz
aXplIDc4NHg2MDAKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAor
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCisgICAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2
Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0
LWZvbnQtaW52YWxpZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVl
MjNiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQt
aW52YWxpZC5odG1sCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+CisgIDxib2R5PgorICAgIDxpbWcg
c3JjPSJyZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnIiAvPgorICA8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDdiNzgyMTguLjY2ZWFiOTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMDktMTAtMTkgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEhhbmRsZSBmb250cyBsaWtlIHRo
ZSBvdGhlciBwb3J0cworCisgICAgICAgIFJlbW92ZSBGb250RmFsbGJhY2tMaXN0UXQgYW5kIHJl
bHkgb24gdGhlIGNvbW1vbiBGb250RmFsbGJhY2tMaXN0CisgICAgICAgIHRvIGhhbmRsZSB0aGUg
Zm9udHMuIEZvbnRDYWNoZSBhbmQgRm9udFBsYXRmb3JtRGF0YSBoYXZlIGJlZW4KKyAgICAgICAg
dXBkYXRlZCB0byB3b3JrIHdpdGggdGhlIGNvbW1vbiBGb250RmFsbGJhY2tMaXN0LgorCisgICAg
ICAgIEluIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiwgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5CisgICAgICAgIHdhcyBhIGNsb25lIG9mIEZvbnRQbGF0Zm9ybURhdGEgd2l0aCB0aGUgaGFz
aGluZyAKKyAgICAgICAgY2FwYWJpbGl0aWVzIGFkZGVkIGluIG9yZGVyIHRvIHVzZSBpdCBhcyBh
IGtleSBpbiB0aGUgY2FjaGUncyAKKyAgICAgICAgaGFzaG1hcC4gRm9udFBsYXRmb3JtRGF0YSBo
YXMgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgdGhlIGhhc2hpbmcgCisgICAgICAgIGZ1bmN0aW9u
IGRpcmVjdGx5IHNvIHRoZSBkYXRhIGFyZSBub3QgY29waWVkIHR3aWNlIGluIG1lbW9yeS4KKwor
ICAgICAgICBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KCkgZnJvbSBGb250RmFsbGJhY2tM
aXN0UXQgd2FzIGEgY29weSBvZgorICAgICAgICBjb2RlIGZyb20gRm9udENhY2hlOjpnZXRGb250
RGF0YSgpIGFuZCBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KCkuIAorICAgICAgICBUaGUg
YmVoYXZpb3IgaXMgc2ltaWxhciBleGNlcHQgY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3RoKCkg
d2FzIAorICAgICAgICBub3QgdGVzdGVkIGFuZCB0aGUgZmFsbGJhY2sgZm9udHMgc2VsZWN0b3Ig
d2VyZSBub3QgdXNlZC4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mjk4NTYKKworICAgICAgICBUZXN0OiBzdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxp
ZC5odG1sCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBs
YXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9y
Q2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250
UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29y
dEZhbGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFRyYWl0c0lu
RmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0
LmNwcDogCisgICAgICAgIFJlbW92ZWQuIFdlIG5vdyB1c2UgdGhlIGltcGxlbWVudGF0aW9uIGZy
b20gRm9udEZhbGxiYWNrTGlzdC5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIEFkZCBoYXNoaW5nIGNhcGFiaWxpdGllcyB0byBi
ZSBhYmxlIHRvIHVzZSB0aGUgZGF0YSB3aXRoIHRoZSBGb250Q2FjaGUuCisgICAgICAgIFRoaXMg
d2FzIHByZXZpb3VzbHkgZG9uZSBpbiBGb250Q2FjaGVRdC5jcHAKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICBBZGRlZCBhIGJv
b2xlYW4gdG8gaWRlbnRpZnkgZGVsZXRlZCB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZS4KKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorCiAyMDA5LTEwLTA3ICBHaXJpc2gg
UmFtYWtyaXNobmFuICA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNpbW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dl
YkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggZDQxODk1OC4uZDk3NzMzZiAxMDA2NDQKLS0tIGEvV2Vi
Q29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMTc4LDYgKzEx
NzgsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2UuY3Bw
IFwKICAgICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAgXAorICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXApAQCAtMTE4OCw2ICsxMTg5LDcgQEAg
U09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9HcmFkaWVudC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAgXApAQCAtMjM2Miw3ICsyMzY0LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vcXQv
U2hhcmVkQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVR
dC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEu
Y3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIFwK
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAgXAogICAgIHBsYXRmb3Jt
L3F0L0tVUkxRdC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250Q2FjaGVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNo
ZVF0LmNwcAppbmRleCAxMTEzZWFlLi5jODdhYzRhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcApAQCAtMzgsMjU2ICszOCwzNyBAQCB1c2luZyBuYW1l
c3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRDYWNoZSogZm9udENhY2hl
KCkKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogewotICAgIERFRklORV9TVEFUSUNf
TE9DQUwoRm9udENhY2hlLCBnbG9iYWxGb250Q2FjaGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2Jh
bEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjpGb250Q2FjaGUoKQotewotfQotCi12b2lkIEZv
bnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVu
c2lnbmVkPiYpCi17Ci19Ci0KLS8vIFRoaXMgdHlwZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBG
b250UGxhdGZvcm1EYXRhJ3MgY3RvciAtIHRoZSBvbmUgd2hpY2gKLS8vIGdldHMgRm9udERlc2Ny
aXB0aW9uIGFzIGl0J3MgcGFyYW1ldGVyLgotY2xhc3MgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
IHsKLXB1YmxpYzoKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAs
IG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9s
ZChmYWxzZSkKLSAgICAgICAgLCBtX2l0YWxpYyhkZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAg
ICAgLCBtX3NtYWxsQ2FwcyhkZXNjcmlwdGlvbi5zbWFsbENhcHMoKSkKLSAgICAgICAgLCBtX2hh
c2goMCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVz
IHRvIFFGb250IHdlaWdodHMgaW4gRm9udFBsYXRmb3JtRGF0YSdzIGN0b3IgYW5kIGZvbGxvdyBp
dCBoZXJlCi0gICAgICAgIGlmIChGb250UGxhdGZvcm1EYXRhOjp0b1FGb250V2VpZ2h0KGRlc2Ny
aXB0aW9uLndlaWdodCgpKSA+IFFGb250OjpOb3JtYWwpCi0gICAgICAgICAgICBtX2JvbGQgPSB0
cnVlOwotCi0gICAgICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5m
YW1pbHkoKTsKLSAgICAgICAgd2hpbGUgKGZhbWlseSkgewotICAgICAgICAgICAgbV9mYW1pbHlO
YW1lLmFwcGVuZChmYW1pbHktPmZhbWlseSgpKTsKLSAgICAgICAgICAgIGZhbWlseSA9IGZhbWls
eS0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKGZhbWlseSkKLSAgICAgICAgICAgICAgICBtX2Zh
bWlseU5hbWUuYXBwZW5kKCcsJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb21wdXRlSGFzaCgp
OwotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBGb250UGxhdGZv
cm1EYXRhJiBmb250RGF0YSkKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoc3RhdGljX2Nhc3Q8U3Ry
aW5nPihmb250RGF0YS5mYW1pbHkoKSkpCi0gICAgICAgICwgbV9zaXplKGZvbnREYXRhLnBpeGVs
U2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmb250RGF0YS5ib2xkKCkpCi0gICAgICAgICwgbV9p
dGFsaWMoZm9udERhdGEuaXRhbGljKCkpCi0gICAgICAgICwgbV9zbWFsbENhcHMoZm9udERhdGEu
c21hbGxDYXBzKCkpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewotICAgICAgICBjb21wdXRl
SGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKSA6IG1fc2l6ZShoYXNoVGFibGVEZWxldGVkU2l6ZSgpKSB7IH0KLSAg
ICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09
IGhhc2hUYWJsZURlbGV0ZWRTaXplKCk7IH0KLQotICAgIGVudW0gSGFzaFRhYmxlRW1wdHlWYWx1
ZVR5cGUgeyBIYXNoVGFibGVFbXB0eVZhbHVlIH07Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkoSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkK
LSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwg
bV9pdGFsaWMoZmFsc2UpCi0gICAgICAgICwgbV9zbWFsbENhcHMoZmFsc2UpCi0gICAgICAgICwg
bV9oYXNoKDApCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1f
aGFzaCAhPSBvdGhlci5tX2hhc2gpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1fZmFtaWx5TmFtZSwgb3RoZXIubV9mYW1pbHlO
YW1lKSAmJiBtX3NpemUgPT0gb3RoZXIubV9zaXplICYmCi0gICAgICAgICAgICBtX2JvbGQgPT0g
b3RoZXIubV9ib2xkICYmIG1faXRhbGljID09IG90aGVyLm1faXRhbGljICYmIG1fc21hbGxDYXBz
ID09IG90aGVyLm1fc21hbGxDYXBzOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFzaDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXB1
dGVIYXNoKCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAg
ICAgICAgQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKG1fZmFtaWx5TmFtZSksCi0gICAgICAgICAgICBt
X3NpemUgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ib2xkIDw8IHNpemVvZih1bnNpZ25lZCkg
KiA4IC0gMSkKLSAgICAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2l0YWxp
YykgPDwgc2l6ZW9mKHVuc2lnbmVkKSAqOCAtIDIKLSAgICAgICAgICAgICAgICB8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihtX3NtYWxsQ2FwcykgPDwgc2l6ZW9mKHVuc2lnbmVkKSAqIDggLSAzCi0g
ICAgICAgIH07Ci0gICAgICAgIG1faGFzaCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50
ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVv
ZihVQ2hhcikpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOwot
ICAgIGludCBtX3NpemU7Ci0gICAgYm9vbCBtX2JvbGQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLSAg
ICBib29sIG1fc21hbGxDYXBzOwotICAgIHVuc2lnbmVkIG1faGFzaDsKLQotICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoVGFibGVEZWxldGVkU2l6ZSgpIHsgcmV0dXJuIDB4RkZGRkZGRkZVOyB9Ci19
OwotCi1zdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpCi0gICAgewot
ICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OwotfTsKLQotc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2Vu
ZXJpY0hhc2hUcmFpdHM8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiB7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwga2V5LCAoRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5OjpIYXNoVGFibGVFbXB0eVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBrZXk7
Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkmIHNsb3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOwotICAgIH0KLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXksIEZvbnRQbGF0Zm9ybURhdGEqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotLy8g
dXNpbmcgUV9HTE9CQUxfU1RBVElDIGxlYWRzIHRvIGNyYXNoLiBUT0RPIGludmVzdGlnYXRlIHRo
ZSB3YXkgdG8gZml4IHRoaXMuCi1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBs
YXRmb3JtRGF0YUNhY2hlID0gMDsKLQotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRD
YWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wpCi17Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0
YUNhY2hlKQotICAgICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZGVzY3JpcHRp
b24pOwotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1E
YXRhQ2FjaGUtPmdldChrZXkpOwotICAgIGlmICghcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIHBs
YXRmb3JtRGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKTsKLSAgICAgICAg
Z0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+YWRkKGtleSwgcGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+
IEZvbnREYXRhQ2FjaGU7Ci0KLXN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9
IDA7Ci0KLXN0YXRpYyBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSA0MDsKLXN0YXRp
YyBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAzMjsKLQotc3RhdGljIExpc3RI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsK
LQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdGb250RGF0YUNh
Y2hlKSB7Ci0gICAgICAgIGdGb250RGF0YUNhY2hlID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAg
ICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gbmV3IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj47Ci0gICAgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9u
dFBsYXRmb3JtRGF0YSk7Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERh
dGFDYWNoZS0+ZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkp
IHsKLSAgICAgICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRh
KCpmb250UGxhdGZvcm1EYXRhKTsKLSAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0
ZDo6cGFpcjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPihmb250RGF0YSwgMSkpOwotICAgICAg
ICByZXR1cm4gZm9udERhdGE7Ci0gICAgfQotICAgIGlmICghaXQtPnNlY29uZC5zZWNvbmQrKykg
ewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGFTZXQtPmNvbnRhaW5zKGl0LT5zZWNv
bmQuZmlyc3QpKTsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShpdC0+c2Vj
b25kLmZpcnN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLUZv
bnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mKQorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmIGZvbnQsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaW50IGxlbmd0aCkKIHsKKyAgICBVTlVTRURfUEFSQU0oZm9udCk7CisgICAg
VU5VU0VEX1BBUkFNKGNoYXJhY3RlcnMpOworICAgIFVOVVNFRF9QQVJBTShsZW5ndGgpOwogICAg
IHJldHVybiAwOwogfQogCi12b2lkIEZvbnRDYWNoZTo6cmVsZWFzZUZvbnREYXRhKGNvbnN0IFdl
YkNvcmU6OlNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRD
YWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udCYgZm9udCkKIHsKLSAg
ICBBU1NFUlQoZ0ZvbnREYXRhQ2FjaGUpOwotICAgIEFTU0VSVCghZm9udERhdGEtPmlzQ3VzdG9t
Rm9udCgpKTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZm9udERhdGEtPnBs
YXRmb3JtRGF0YSgpKTsKLSAgICBGb250RGF0YUNhY2hlOjppdGVyYXRvciBpdCA9IGdGb250RGF0
YUNhY2hlLT5maW5kKGtleSk7Ci0gICAgQVNTRVJUKGl0ICE9IGdGb250RGF0YUNhY2hlLT5lbmQo
KSk7Ci0gICAgaWYgKCEtLWl0LT5zZWNvbmQuc2Vjb25kKSB7Ci0gICAgICAgIGdJbmFjdGl2ZUZv
bnREYXRhU2V0LT5hZGQoaXQtPnNlY29uZC5maXJzdCk7Ci0gICAgICAgIGlmIChnSW5hY3RpdmVG
b250RGF0YVNldC0+c2l6ZSgpID4gY01heEluYWN0aXZlRm9udERhdGEpCi0gICAgICAgICAgICBw
dXJnZUluYWN0aXZlRm9udERhdGEoZ0luYWN0aXZlRm9udERhdGFTZXQtPnNpemUoKSAtIGNUYXJn
ZXRJbmFjdGl2ZUZvbnREYXRhKTsKLSAgICB9Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpwdXJnZUlu
YWN0aXZlRm9udERhdGEoaW50IGNvdW50KQotewotICAgIHN0YXRpYyBib29sIGlzUHVyZ2luZzsg
IC8vIEd1YXJkIGFnYWluc3QgcmVlbnRyeSB3aGVuIGUuZy4gYSBkZWxldGVkIEZvbnREYXRhIHJl
bGVhc2VzIGl0cyBzbWFsbCBjYXBzIEZvbnREYXRhLgotICAgIGlmIChpc1B1cmdpbmcpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlzUHVyZ2luZyA9IHRydWU7Ci0KLSAgICBMaXN0SGFzaFNldDxj
b25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBpdCA9IGdJbmFjdGl2ZUZvbnREYXRhU2V0
LT5iZWdpbigpOwotICAgIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj46Oml0ZXJh
dG9yIGVuZCA9IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5lbmQoKTsKLSAgICBmb3IgKGludCBpID0g
MDsgaSA8IGNvdW50ICYmIGl0ICE9IGVuZDsgKytpLCArK2l0KSB7Ci0gICAgICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleSBrZXkgPSAoKml0KS0+cGxhdGZvcm1EYXRhKCk7Ci0gICAgICAgIHBh
aXI8U2ltcGxlRm9udERhdGEqLCB1bnNpZ25lZD4gZm9udERhdGFQYWlyID0gZ0ZvbnREYXRhQ2Fj
aGUtPnRha2Uoa2V5KTsKLSAgICAgICAgQVNTRVJUKGZvbnREYXRhUGFpci5maXJzdCAhPSAwKTsK
LSAgICAgICAgQVNTRVJUKCFmb250RGF0YVBhaXIuc2Vjb25kKTsKLSAgICAgICAgZGVsZXRlIGZv
bnREYXRhUGFpci5maXJzdDsKLQotICAgICAgICBGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURh
dGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT50YWtlKGtleSk7Ci0gICAgICAgIGlmIChwbGF0
Zm9ybURhdGEpCi0gICAgICAgICAgICBkZWxldGUgcGxhdGZvcm1EYXRhOwotICAgIH0KLQotICAg
IGlmIChpdCA9PSBlbmQpIHsKLSAgICAgICAgLy8gUmVtb3ZlZCBldmVyeXRoaW5nCi0gICAgICAg
IGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5jbGVhcigpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7ICsraSkKLSAgICAgICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhU2V0LT5yZW1vdmUoZ0luYWN0aXZlRm9udERhdGFTZXQtPmJlZ2luKCkpOwotICAgIH0KLQot
ICAgIGlzUHVyZ2luZyA9IGZhbHNlOworICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShm
b250LmZvbnREZXNjcmlwdGlvbigpKTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OmFkZENsaWVudChG
b250U2VsZWN0b3IqKQorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0
RmFsbGJhY2tGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYpCiB7CisgICAgcmV0dXJuIG5ldyBG
b250UGxhdGZvcm1EYXRhKFFGb250KCksIGZhbHNlKTsKIH0KIAotdm9pZCBGb250Q2FjaGU6OnJl
bW92ZUNsaWVudChGb250U2VsZWN0b3IqKQordm9pZCBGb250Q2FjaGU6OmdldFRyYWl0c0luRmFt
aWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQogewogfQogCi12b2lk
IEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNy
ZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRp
b24sIGNvbnN0IEF0b21pY1N0cmluZyYpCiB7Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNh
Y2hlIHx8ICFnRm9udERhdGFDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcHVyZ2VJbmFj
dGl2ZUZvbnREYXRhKCk7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnREZXNj
cmlwdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcApkZWxldGVkIGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggOGUxZTRmNi4uMDAwMDAwMAotLS0gYS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwx
MzggKzAsMCBAQAotLyoKLSAgICBDb3B5cmlnaHQgKEMpIDIwMDggSG9sZ2VyIEhhbnMgUGV0ZXIg
RnJleXRoZXIKLQotICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICAgIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLQotICAg
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAotICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCi0gICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKLSAgICBMaWJyYXJ5IEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLQotICAgIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAg
ICBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYg
bm90LCB3cml0ZSB0bwotICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCi0gICAgQm9zdG9uLCBNQSAwMjExMC0xMzAx
LCBVU0EuCi0KLSAgICBSZXBsYWNlbWVudCBvZiB0aGUgc3RvY2sgRm9udEZhbGxiYWNrTGlzdCBh
cyBRdCBpcyBnb2luZyB0byBmaW5kIHVzIGEKLSAgICByZXBsYWNlbWVudCBmb250LCB3aWxsIGRv
IGNhY2hpbmcgYW5kIHRoZSBvdGhlciBzdHVmZiB3ZSBpbXBsZW1lbnQgaW4KLSAgICBXZWJLaXQu
Ci0qLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiRm9udEZhbGxiYWNrTGlzdC5o
IgotCi0jaW5jbHVkZSAiRm9udC5oIgotI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgotI2luY2x1ZGUg
IlNlZ21lbnRlZEZvbnREYXRhLmgiCi0KLSNpbmNsdWRlIDxRRGVidWc+Ci0KLW5hbWVzcGFjZSBX
ZWJDb3JlIHsKLQotRm9udEZhbGxiYWNrTGlzdDo6Rm9udEZhbGxiYWNrTGlzdCgpCi0gICAgOiBt
X3BhZ2VaZXJvKDApCi0gICAgLCBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQotICAg
ICwgbV9mb250U2VsZWN0b3IoMCkKLSAgICAsIG1fZmFtaWx5SW5kZXgoMCkKLSAgICAsIG1fcGl0
Y2goVW5rbm93blBpdGNoKQotICAgICwgbV9sb2FkaW5nQ3VzdG9tRm9udHMoZmFsc2UpCi0gICAg
LCBtX2dlbmVyYXRpb24oMCkKLXsKLX0KLQotdm9pZCBGb250RmFsbGJhY2tMaXN0OjppbnZhbGlk
YXRlKFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpGb250U2VsZWN0b3I+IGZvbnRTZWxlY3RvcikK
LXsKLSAgICByZWxlYXNlRm9udERhdGEoKTsKLSAgICBtX2ZvbnRMaXN0LmNsZWFyKCk7Ci0gICAg
bV9wYWdlWmVybyA9IDA7Ci0gICAgbV9wYWdlcy5jbGVhcigpOwotICAgIG1fY2FjaGVkUHJpbWFy
eVNpbXBsZUZvbnREYXRhID0gMDsKLSAgICBtX2ZhbWlseUluZGV4ID0gMDsKLSAgICBtX3BpdGNo
ID0gVW5rbm93blBpdGNoOwotICAgIG1fbG9hZGluZ0N1c3RvbUZvbnRzID0gZmFsc2U7Ci0gICAg
bV9mb250U2VsZWN0b3IgPSBmb250U2VsZWN0b3I7Ci0gICAgbV9nZW5lcmF0aW9uID0gMDsKLX0K
LQotdm9pZCBGb250RmFsbGJhY2tMaXN0OjpyZWxlYXNlRm9udERhdGEoKQotewotICAgIHVuc2ln
bmVkIG51bUZvbnRzID0gbV9mb250TGlzdC5zaXplKCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG51bUZvbnRzOyArK2kpIHsKLSAgICAgICAgaWYgKG1fZm9udExpc3RbaV0uc2Vjb25k
KQotICAgICAgICAgICAgZGVsZXRlIG1fZm9udExpc3RbaV0uZmlyc3Q7Ci0gICAgICAgIGVsc2Ug
ewotICAgICAgICAgICAgQVNTRVJUKCFtX2ZvbnRMaXN0W2ldLmZpcnN0LT5pc1NlZ21lbnRlZCgp
KTsKLSAgICAgICAgICAgIGZvbnRDYWNoZSgpLT5yZWxlYXNlRm9udERhdGEoc3RhdGljX2Nhc3Q8
Y29uc3QgU2ltcGxlRm9udERhdGEqPihtX2ZvbnRMaXN0W2ldLmZpcnN0KSk7Ci0gICAgICAgIH0K
LSAgICB9Ci19Ci0KLXZvaWQgRm9udEZhbGxiYWNrTGlzdDo6ZGV0ZXJtaW5lUGl0Y2goY29uc3Qg
V2ViQ29yZTo6Rm9udCogZm9udCkgY29uc3QKLXsKLSAgICBjb25zdCBGb250RGF0YSogZm9udERh
dGEgPSBwcmltYXJ5Rm9udERhdGEoZm9udCk7Ci0gICAgaWYgKCFmb250RGF0YS0+aXNTZWdtZW50
ZWQoKSkKLSAgICAgICAgbV9waXRjaCA9IHN0YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj4oZm9udERhdGEpLT5waXRjaCgpOwotICAgIGVsc2UgewotICAgICAgICBjb25zdCBTZWdtZW50
ZWRGb250RGF0YSogc2VnbWVudGVkRm9udERhdGEgPSBzdGF0aWNfY2FzdDxjb25zdCBTZWdtZW50
ZWRGb250RGF0YSo+KGZvbnREYXRhKTsKLSAgICAgICAgdW5zaWduZWQgbnVtUmFuZ2VzID0gc2Vn
bWVudGVkRm9udERhdGEtPm51bVJhbmdlcygpOwotICAgICAgICBpZiAobnVtUmFuZ2VzID09IDEp
Ci0gICAgICAgICAgICBtX3BpdGNoID0gc2VnbWVudGVkRm9udERhdGEtPnJhbmdlQXQoMCkuZm9u
dERhdGEoKS0+cGl0Y2goKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbV9waXRjaCA9IFZh
cmlhYmxlUGl0Y2g7Ci0gICAgfQotfQotCi1jb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlz
dDo6Zm9udERhdGFBdChjb25zdCBXZWJDb3JlOjpGb250KiBfZm9udCwgdW5zaWduZWQgaW5kZXgp
IGNvbnN0Ci17Ci0gICAgaWYgKGluZGV4ICE9IDApCi0gICAgICAgIHJldHVybiAwOwotCi0gICAg
Ly8gU2VhcmNoIGZvciB0aGUgV2ViQ29yZSBmb250IHRoYXQgaXMgYWxyZWFkeSBpbiB0aGUgbGlz
dAotICAgIGZvciAoaW50IGkgPSBtX2ZvbnRMaXN0LnNpemUoKSAtIDE7IGkgPj0gMDsgLS1pKSB7
Ci0gICAgICAgIHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPiBpdGVtID0gbV9mb250TGlzdFtp
XTsKLSAgICAgICAgLy8gaXRlbS5zZWNvbmQgbWVhbnMgdGhhdCB0aGUgaXRlbSB3YXMgY3JlYXRl
ZCBsb2NhbGx5IG9yIG5vdAotICAgICAgICBpZiAoIWl0ZW0uc2Vjb25kKQotICAgICAgICAgICAg
cmV0dXJuIGl0ZW0uZmlyc3Q7Ci0gICAgfQotCi0gICAgLy8gVXNlIHRoZSBGb250U2VsZWN0b3Ig
dG8gZ2V0IGEgV2ViQ29yZSBmb250IGFuZCB0aGVuIGZhbGxiYWNrIHRvIFF0Ci0gICAgY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiA9IF9mb250LT5mb250RGVzY3JpcHRpb24oKTsK
LSAgICBjb25zdCBGb250RmFtaWx5KiBmYW1pbHkgPSAmZGVzY3JpcHRpb24uZmFtaWx5KCk7Ci0g
ICAgd2hpbGUgKGZhbWlseSkgewotICAgICAgICBpZiAobV9mb250U2VsZWN0b3IpIHsKLSAgICAg
ICAgICAgIEZvbnREYXRhKiBkYXRhID0gbV9mb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGRlc2Ny
aXB0aW9uLCBmYW1pbHktPmZhbWlseSgpKTsKLSAgICAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGRhdGEtPmlzTG9hZGluZygpKQotICAgICAgICAgICAgICAgICAgICBt
X2xvYWRpbmdDdXN0b21Gb250cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLT5p
c0N1c3RvbUZvbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b20gZm9udHMgY2Fu
IGJlIGZyZWVkIGFueXRpbWUgc28gd2UgbXVzdCBub3QgaG9sZCB0aGVtCi0gICAgICAgICAgICAg
ICAgICAgIG1fZm9udExpc3QuYXBwZW5kKHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPihkYXRh
LCBmYWxzZSkpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZGF0
YTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBmYW1pbHkgPSBmYW1pbHktPm5l
eHQoKTsKLSAgICB9Ci0KLSAgICBpZiAobV9mb250TGlzdC5zaXplKCkpCi0gICAgICAgIHJldHVy
biBtX2ZvbnRMaXN0WzBdLmZpcnN0OwotCi0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9IG5l
dyBTaW1wbGVGb250RGF0YShGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBfZm9udC0+d29y
ZFNwYWNpbmcoKSwgX2ZvbnQtPmxldHRlclNwYWNpbmcoKSksIHRydWUpOwotICAgIG1fZm9udExp
c3QuYXBwZW5kKHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPihyZXN1bHQsIHRydWUpKTsKLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1jb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6
Zm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZvbnQsIGNvbnN0IFVD
aGFyKiwgaW50KSBjb25zdAotewotICAgIHJldHVybiBwcmltYXJ5Rm9udERhdGEoZm9udCk7Ci19
Ci0KLXZvaWQgRm9udEZhbGxiYWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGEmKQotewotICAgIG1fZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxpZXNT
Y2FubmVkOwotfQotCi19CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0
L0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBs
YXRmb3JtRGF0YS5oCmluZGV4IDkyMjE5ZmQuLmQyZmMzMzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yNiw2ICsyNiw3IEBACiAK
ICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRl
IDxRSGFzaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw2ICs0Miw5IEBAIHB1Ymxp
YzoKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGludCB3b3Jk
U3BhY2luZyA9IDAsIGludCBsZXR0ZXJTcGFjaW5nID0gMCk7CiAgICAgRm9udFBsYXRmb3JtRGF0
YShjb25zdCBRRm9udCYsIGJvb2wgYm9sZCk7CiAKKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6
SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkgOiBtX2lzRGVsZXRlZFZhbHVlKHRydWUpIHsgfQor
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVs
ZXRlZFZhbHVlOyB9CisKICAgICBzdGF0aWMgaW5saW5lIFFGb250OjpXZWlnaHQgdG9RRm9udFdl
aWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGZvbnRX
ZWlnaHQpIHsKQEAgLTY5LDYgKzczLDE5IEBAIHB1YmxpYzoKICAgICBib29sIGl0YWxpYygpIGNv
bnN0IHsgcmV0dXJuIG1fZm9udC5pdGFsaWMoKTsgfQogICAgIGJvb2wgc21hbGxDYXBzKCkgY29u
c3QgeyByZXR1cm4gbV9mb250LmNhcGl0YWxpemF0aW9uKCkgPT0gUUZvbnQ6OlNtYWxsQ2Fwczsg
fQogICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQucGl4ZWxTaXplKCk7
IH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBxSGFz
aChtX2ZvbnQudG9TdHJpbmcoKSk7CisgICAgfQorCisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuICht
X2lzRGVsZXRlZFZhbHVlICYmIG1faXNEZWxldGVkVmFsdWUgPT0gb3RoZXIubV9pc0RlbGV0ZWRW
YWx1ZSkKKyAgICAgICAgICAgICAgICB8fCAobV9zaXplID09IG90aGVyLm1fc2l6ZQorICAgICAg
ICAgICAgICAgICAgICAmJiBtX2JvbGQgPT0gb3RoZXIubV9ib2xkCisgICAgICAgICAgICAgICAg
ICAgICYmIG1fb2JsaXF1ZSA9PSBvdGhlci5tX29ibGlxdWUKKyAgICAgICAgICAgICAgICAgICAg
JiYgbV9mb250ID09IG1fZm9udCk7CisgICAgfQogCiAjaWZuZGVmIE5ERUJVRwogICAgIFN0cmlu
ZyBkZXNjcmlwdGlvbigpIGNvbnN0OwpAQCAtNzcsNiArOTQsNyBAQCBwdWJsaWM6CiAgICAgZmxv
YXQgbV9zaXplOwogICAgIGJvb2wgbV9ib2xkOwogICAgIGJvb2wgbV9vYmxpcXVlOworICAgIGJv
b2wgbV9pc0RlbGV0ZWRWYWx1ZTsKICAgICBRRm9udCBtX2ZvbnQ7CiB9OwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXgg
NzcwOWJlNi4uZGEzODIxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcApAQCAtMzAsNiArMzAsNyBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGludCB3b3JkUwogICAgIDogbV9zaXplKDAuMGYpCiAgICAgLCBtX2JvbGQoZmFsc2UpCiAgICAg
LCBtX29ibGlxdWUoZmFsc2UpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogICAg
IFFTdHJpbmcgZmFtaWx5TmFtZTsKICAgICBjb25zdCBGb250RmFtaWx5KiBmYW1pbHkgPSAmZGVz
Y3JpcHRpb24uZmFtaWx5KCk7CkBAIC01OSw2ICs2MCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoY29uc3QgUUZvbnQmIGZvbnQsIGJvb2wgYm9sZCkKICAgICAsIG1fYm9s
ZChib2xkKQogICAgICwgbV9vYmxpcXVlKGZhbHNlKQogICAgICwgbV9mb250KGZvbnQpCisgICAg
LCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQogCkBAIC02Nyw2ICs2OSw3IEBAIEZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IG9ibGlxdWUpCiAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAsIG1fYm9sZChib2xkKQogICAgICwg
bV9vYmxpcXVlKG9ibGlxdWUpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQog
I2VuZGlmCkBAIC03NSw2ICs3OCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoKQogICAgIDogbV9zaXplKDAuMGYpCiAgICAgLCBtX2JvbGQoZmFsc2UpCiAgICAgLCBtX29i
bGlxdWUoZmFsc2UpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>41569</attachid>
            <date>2009-10-21 09:24:21 -0700</date>
            <delta_ts>2009-10-29 07:42:54 -0700</delta_ts>
            <desc>Patch with test case</desc>
            <filename>font_handling_qt.patch</filename>
            <type>text/plain</type>
            <size>23035</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZDcwMWY4Li41Y2MwMzY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTAt
MTkgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgdGVz
dCB0byByZXByb2R1Y2UgMjk4NTYuIFRoZSBidWcgb25seSBoYXBwZW4KKyAgICAgICAgd2hlbiB0
aGUgU1ZHIGZpbGUgaXMgdXNlZCBhcyBhbiBpbWFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODU2CisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9z
dmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN2Zy90ZXh0L3Jlc291cmNlcy90ZXh0LWZvbnQtaW52YWxpZC5zdmc6IEFkZGVkLgorICAgICAg
ICAqIHN2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEwLTA3
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBTa2lwIHR3byBuZXcg
dGVzdHMgZm9yIHdoaWNoIHdlIGFyZSBtaXNzaW5nIHJlc3VsdHMuCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9zdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnIGIvTGF5b3V0
VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1pbnZhbGlkLnN2ZwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjllMDA2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1pbnZhbGlkLnN2ZwpAQCAtMCww
ICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9DVFlQRSBzdmcgUFVCTElDICIt
Ly9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMub3JnL0dyYXBoaWNzL1NWRy8x
LjEvRFREL3N2ZzExLmR0ZCI+Cis8c3ZnIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2
ZyIgeG1sbnM6eGw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSI+
CisgIDxkZWZzPgorICAgIDxmb250LWZhY2UgZm9udC1mYW1pbHk9IkFyYml0cmFyeSBmb250IG5v
dCBvbiB0aGUgc3lzdGVtIj4KKyAgICA8Zm9udC1mYWNlLXNyYz4KKyAgICAgIDxmb250LWZhY2Ut
bmFtZSBuYW1lPSJWZXJ5VW5saWtlbHlUb0V4aXN0Rm9udCIvPgorICAgIDwvZm9udC1mYWNlLXNy
Yz4KKyAgICA8L2ZvbnQtZmFjZT4KKyAgPC9kZWZzPgorICA8Zz4KKyAgICA8dGV4dD4KKyAgICAg
IDx0c3BhbiBmb250LWZhbWlseT0iQXJiaXRyYXJ5IGZvbnQgbm90IG9uIHRoZSBzeXN0ZW0iPkZv
b2JhcjwvdHNwYW4+CisgICAgPC90ZXh0PgorICA8L2c+Cis8L3N2Zz4KKwpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2MGU3ZTgKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw5IEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MTYKKyAgUmVuZGVyVmlldyBhdCAo
MCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYxNgorICBSZW5kZXJC
bG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjE2CisgICAgUmVuZGVyQm9keSB7Qk9EWX0g
YXQgKDgsOCkgc2l6ZSA3ODR4NjAwCisgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwwKSBz
aXplIDc4NHg2MDAKKyAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4MAor
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMHgwCisgICAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAweDAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2
Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0
LWZvbnQtaW52YWxpZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVl
MjNiMzIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQt
aW52YWxpZC5odG1sCkBAIC0wLDAgKzEsNSBAQAorPGh0bWw+CisgIDxib2R5PgorICAgIDxpbWcg
c3JjPSJyZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnIiAvPgorICA8L2JvZHk+Cis8L2h0
bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDdiNzgyMTguLjk2ZjMzZjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkgQEAKKzIwMDktMTAtMTkgIEJlbmphbWlu
IFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIEhhbmRsZSBmb250cyBsaWtlIHRo
ZSBvdGhlciBwb3J0cworCisgICAgICAgIFJlbW92ZSBGb250RmFsbGJhY2tMaXN0UXQgYW5kIHJl
bHkgb24gdGhlIGNvbW1vbiBGb250RmFsbGJhY2tMaXN0CisgICAgICAgIHRvIGhhbmRsZSB0aGUg
Zm9udHMuIEZvbnRDYWNoZSBhbmQgRm9udFBsYXRmb3JtRGF0YSBoYXZlIGJlZW4KKyAgICAgICAg
dXBkYXRlZCB0byB3b3JrIHdpdGggdGhlIGNvbW1vbiBGb250RmFsbGJhY2tMaXN0LgorCisgICAg
ICAgIEluIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbiwgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5CisgICAgICAgIHdhcyBhIGNsb25lIG9mIEZvbnRQbGF0Zm9ybURhdGEgd2l0aCB0aGUgaGFz
aGluZworICAgICAgICBjYXBhYmlsaXRpZXMgYWRkZWQgaW4gb3JkZXIgdG8gdXNlIGl0IGFzIGEg
a2V5IGluIHRoZSBjYWNoZSdzCisgICAgICAgIGhhc2htYXAuIEZvbnRQbGF0Zm9ybURhdGEgaGFz
IGJlZW4gbW9kaWZpZWQgdG8gaGFuZGxlIHRoZSBoYXNoaW5nCisgICAgICAgIGZ1bmN0aW9uIGRp
cmVjdGx5IHNvIHRoZSBkYXRhIGFyZSBub3QgY29waWVkIHR3aWNlIGluIG1lbW9yeS4KKworICAg
ICAgICBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KCkgZnJvbSBGb250RmFsbGJhY2tMaXN0
UXQgd2FzIGEgY29weSBvZgorICAgICAgICBjb2RlIGZyb20gRm9udENhY2hlOjpnZXRGb250RGF0
YSgpIGFuZCBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KCkuCisgICAgICAgIFRoZSBiZWhh
dmlvciBpcyBzaW1pbGFyIGV4Y2VwdCBjdXJyRmFtaWx5LT5mYW1pbHkoKS5sZW5ndGgoKSB3YXMK
KyAgICAgICAgbm90IHRlc3RlZCBhbmQgdGhlIGZhbGxiYWNrIGZvbnRzIHNlbGVjdG9yIHdlcmUg
bm90IHVzZWQuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI5ODU2CisKKyAgICAgICAgVGVzdDogc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQuaHRt
bAorCisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udENhY2hlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9y
bUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJh
Y3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRm
b3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxs
YmFja0ZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWls
eSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHA6
CisgICAgICAgIFJlbW92ZWQuIFdlIG5vdyB1c2UgdGhlIGltcGxlbWVudGF0aW9uIGZyb20gRm9u
dEZhbGxiYWNrTGlzdC5jcHAKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxh
dGZvcm1EYXRhLmg6CisgICAgICAgIEFkZCBoYXNoaW5nIGNhcGFiaWxpdGllcyB0byBiZSBhYmxl
IHRvIHVzZSB0aGUgZGF0YSB3aXRoIHRoZSBGb250Q2FjaGUuCisgICAgICAgIFRoaXMgd2FzIHBy
ZXZpb3VzbHkgZG9uZSBpbiBGb250Q2FjaGVRdC5jcHAKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICBBZGRlZCBhIGJvb2xlYW4g
dG8gaWRlbnRpZnkgZGVsZXRlZCB2YWx1ZSBpbiB0aGUgaGFzaCB0YWJsZS4KKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorCiAyMDA5LTEwLTA3ICBHaXJpc2ggUmFtYWty
aXNobmFuICA8Z2lyaXNoQGZvcndhcmRiaWFzLmluPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNp
bW9uIEhhdXNtYW5uLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnBybyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KaW5kZXggZDQxODk1OC4uZDk3NzMzZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9X
ZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJvCkBAIC0xMTc4LDYgKzExNzgsNyBA
QCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9HZW9sb2NhdGlvblNlcnZpY2UuY3BwIFwKICAg
ICBwbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9xdC9SR0JBMzJCdWZmZXJRdC5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnRGYWxsYmFja0xpc3QuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFt
aWx5LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9Db2xvci5jcHAgXApAQCAtMTE4OCw2ICsxMTg5LDcgQEAgU09VUkNF
UyArPSBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udERhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNw
cCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFk
aWVudC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXApA
QCAtMjM2Miw3ICsyMzY0LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvU2hhcmVk
QnVmZmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIFwK
LSAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9udERhdGFRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0tV
UkxRdC5jcHAgXApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
Q2FjaGVRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cAppbmRleCAxMTEzZWFlLi4xMGRkZWJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDYWNoZVF0LmNwcApAQCAtMzgsMjU2ICszOCwzMiBAQCB1c2luZyBuYW1lc3BhY2Ug
V1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRDYWNoZSogZm9udENhY2hlKCkKK3Zv
aWQgRm9udENhY2hlOjpwbGF0Zm9ybUluaXQoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwo
Rm9udENhY2hlLCBnbG9iYWxGb250Q2FjaGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2JhbEZvbnRD
YWNoZTsKIH0KIAotRm9udENhY2hlOjpGb250Q2FjaGUoKQotewotfQotCi12b2lkIEZvbnRDYWNo
ZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVk
PiYpCi17Ci19Ci0KLS8vIFRoaXMgdHlwZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxh
dGZvcm1EYXRhJ3MgY3RvciAtIHRoZSBvbmUgd2hpY2gKLS8vIGdldHMgRm9udERlc2NyaXB0aW9u
IGFzIGl0J3MgcGFyYW1ldGVyLgotY2xhc3MgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKLXB1
YmxpYzoKLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBkZXNjcmlwdGlvbikKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6
ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmYWxz
ZSkKLSAgICAgICAgLCBtX2l0YWxpYyhkZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgLCBt
X3NtYWxsQ2FwcyhkZXNjcmlwdGlvbi5zbWFsbENhcHMoKSkKLSAgICAgICAgLCBtX2hhc2goMCkK
LSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFFG
b250IHdlaWdodHMgaW4gRm9udFBsYXRmb3JtRGF0YSdzIGN0b3IgYW5kIGZvbGxvdyBpdCBoZXJl
Ci0gICAgICAgIGlmIChGb250UGxhdGZvcm1EYXRhOjp0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9u
LndlaWdodCgpKSA+IFFGb250OjpOb3JtYWwpCi0gICAgICAgICAgICBtX2JvbGQgPSB0cnVlOwot
Ci0gICAgICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHko
KTsKLSAgICAgICAgd2hpbGUgKGZhbWlseSkgewotICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFw
cGVuZChmYW1pbHktPmZhbWlseSgpKTsKLSAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4
dCgpOwotICAgICAgICAgICAgaWYgKGZhbWlseSkKLSAgICAgICAgICAgICAgICBtX2ZhbWlseU5h
bWUuYXBwZW5kKCcsJyk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAg
IH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBmb250RGF0YSkKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nPihm
b250RGF0YS5mYW1pbHkoKSkpCi0gICAgICAgICwgbV9zaXplKGZvbnREYXRhLnBpeGVsU2l6ZSgp
KQotICAgICAgICAsIG1fYm9sZChmb250RGF0YS5ib2xkKCkpCi0gICAgICAgICwgbV9pdGFsaWMo
Zm9udERhdGEuaXRhbGljKCkpCi0gICAgICAgICwgbV9zbWFsbENhcHMoZm9udERhdGEuc21hbGxD
YXBzKCkpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewotICAgICAgICBjb21wdXRlSGFzaCgp
OwotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKSA6IG1fc2l6ZShoYXNoVGFibGVEZWxldGVkU2l6ZSgpKSB7IH0KLSAgICBib29s
IGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IGhhc2hU
YWJsZURlbGV0ZWRTaXplKCk7IH0KLQotICAgIGVudW0gSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUg
eyBIYXNoVGFibGVFbXB0eVZhbHVlIH07Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXko
SGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkKLSAgICAg
ICAgLCBtX3NpemUoMCkKLSAgICAgICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9pdGFs
aWMoZmFsc2UpCi0gICAgICAgICwgbV9zbWFsbENhcHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXNo
KDApCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faGFzaCAh
PSBvdGhlci5tX2hhc2gpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1fZmFtaWx5TmFtZSwgb3RoZXIubV9mYW1pbHlOYW1lKSAm
JiBtX3NpemUgPT0gb3RoZXIubV9zaXplICYmCi0gICAgICAgICAgICBtX2JvbGQgPT0gb3RoZXIu
bV9ib2xkICYmIG1faXRhbGljID09IG90aGVyLm1faXRhbGljICYmIG1fc21hbGxDYXBzID09IG90
aGVyLm1fc21hbGxDYXBzOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAg
IHsKLSAgICAgICAgcmV0dXJuIG1faGFzaDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXB1dGVIYXNo
KCkKLSAgICB7Ci0gICAgICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICAgICAg
Q2FzZUZvbGRpbmdIYXNoOjpoYXNoKG1fZmFtaWx5TmFtZSksCi0gICAgICAgICAgICBtX3NpemUg
fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9ib2xkIDw8IHNpemVvZih1bnNpZ25lZCkgKiA4IC0g
MSkKLSAgICAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2l0YWxpYykgPDwg
c2l6ZW9mKHVuc2lnbmVkKSAqOCAtIDIKLSAgICAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVu
c2lnbmVkPihtX3NtYWxsQ2FwcykgPDwgc2l6ZW9mKHVuc2lnbmVkKSAqIDggLSAzCi0gICAgICAg
IH07Ci0gICAgICAgIG1faGFzaCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0
X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hh
cikpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOwotICAgIGlu
dCBtX3NpemU7Ci0gICAgYm9vbCBtX2JvbGQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLSAgICBib29s
IG1fc21hbGxDYXBzOwotICAgIHVuc2lnbmVkIG1faGFzaDsKLQotICAgIHN0YXRpYyB1bnNpZ25l
ZCBoYXNoVGFibGVEZWxldGVkU2l6ZSgpIHsgcmV0dXJuIDB4RkZGRkZGRkZVOyB9Ci19OwotCi1z
dHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVk
IGhhc2goY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpCi0gICAgewotICAgICAg
ICByZXR1cm4ga2V5Lmhhc2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25z
dCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNo
ZUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQotCi0gICAgc3Rh
dGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsK
LQotc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hh
c2hUcmFpdHM8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleSYgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElD
X0xPQ0FMKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwga2V5LCAoRm9udFBsYXRmb3JtRGF0YUNh
Y2hlS2V5OjpIYXNoVGFibGVFbXB0eVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAg
fQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkmIHNsb3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIGJv
b2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiB2YWx1ZSkK
LSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwot
ICAgIH0KLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIEZv
bnRQbGF0Zm9ybURhdGEqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotLy8gdXNpbmcg
UV9HTE9CQUxfU1RBVElDIGxlYWRzIHRvIGNyYXNoLiBUT0RPIGludmVzdGlnYXRlIHRoZSB3YXkg
dG8gZml4IHRoaXMuCi1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3Jt
RGF0YUNhY2hlID0gMDsKLQotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0
IEF0b21pY1N0cmluZyYsIGJvb2wpCi17Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hl
KQotICAgICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFD
YWNoZTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZGVzY3JpcHRpb24pOwot
ICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2Fj
aGUtPmdldChrZXkpOwotICAgIGlmICghcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIHBsYXRmb3Jt
RGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKTsKLSAgICAgICAgZ0ZvbnRQ
bGF0Zm9ybURhdGFDYWNoZS0+YWRkKGtleSwgcGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0gICAgcmV0
dXJuIHBsYXRmb3JtRGF0YTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnRE
YXRhQ2FjaGU7Ci0KLXN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7Ci0K
LXN0YXRpYyBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSA0MDsKLXN0YXRpYyBjb25z
dCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAzMjsKLQotc3RhdGljIExpc3RIYXNoU2V0
PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsKLQotU2lt
cGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7
Ci0gICAgICAgIGdGb250RGF0YUNhY2hlID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAgICAgIGdJ
bmFjdGl2ZUZvbnREYXRhU2V0ID0gbmV3IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj47Ci0gICAgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9udFBsYXRm
b3JtRGF0YSk7Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNo
ZS0+ZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKLSAg
ICAgICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpmb250
UGxhdGZvcm1EYXRhKTsKLSAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0ZDo6cGFp
cjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPihmb250RGF0YSwgMSkpOwotICAgICAgICByZXR1
cm4gZm9udERhdGE7Ci0gICAgfQotICAgIGlmICghaXQtPnNlY29uZC5zZWNvbmQrKykgewotICAg
ICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGFTZXQtPmNvbnRhaW5zKGl0LT5zZWNvbmQuZmly
c3QpKTsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShpdC0+c2Vjb25kLmZp
cnN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLUZvbnRQbGF0
Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250
RGVzY3JpcHRpb24mKQorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERh
dGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciosIGludCkKIHsKICAgICBy
ZXR1cm4gMDsKIH0KIAotdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBXZWJD
b3JlOjpTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0gICAg
QVNTRVJUKGdGb250RGF0YUNhY2hlKTsKLSAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZv
bnQoKSk7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZvbnREYXRhLT5wbGF0
Zm9ybURhdGEoKSk7Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFD
YWNoZS0+ZmluZChrZXkpOwotICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkp
OwotICAgIGlmICghLS1pdC0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBnSW5hY3RpdmVGb250
RGF0YVNldC0+YWRkKGl0LT5zZWNvbmQuZmlyc3QpOwotICAgICAgICBpZiAoZ0luYWN0aXZlRm9u
dERhdGFTZXQtPnNpemUoKSA+IGNNYXhJbmFjdGl2ZUZvbnREYXRhKQotICAgICAgICAgICAgcHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgLSBjVGFyZ2V0
SW5hY3RpdmVGb250RGF0YSk7Ci0gICAgfQotfQotCi12b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFj
dGl2ZUZvbnREYXRhKGludCBjb3VudCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpc1B1cmdpbmc7ICAv
LyBHdWFyZCBhZ2FpbnN0IHJlZW50cnkgd2hlbiBlLmcuIGEgZGVsZXRlZCBGb250RGF0YSByZWxl
YXNlcyBpdHMgc21hbGwgY2FwcyBGb250RGF0YS4KLSAgICBpZiAoaXNQdXJnaW5nKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBpc1B1cmdpbmcgPSB0cnVlOwotCi0gICAgTGlzdEhhc2hTZXQ8Y29u
c3QgU2ltcGxlRm9udERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0YVNldC0+
YmVnaW4oKTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRv
ciBlbmQgPSBnSW5hY3RpdmVGb250RGF0YVNldC0+ZW5kKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBjb3VudCAmJiBpdCAhPSBlbmQ7ICsraSwgKytpdCkgewotICAgICAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkga2V5ID0gKCppdCktPnBsYXRmb3JtRGF0YSgpOwotICAgICAgICBwYWly
PFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+IGZvbnREYXRhUGFpciA9IGdGb250RGF0YUNhY2hl
LT50YWtlKGtleSk7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YVBhaXIuZmlyc3QgIT0gMCk7Ci0g
ICAgICAgIEFTU0VSVCghZm9udERhdGFQYWlyLnNlY29uZCk7Ci0gICAgICAgIGRlbGV0ZSBmb250
RGF0YVBhaXIuZmlyc3Q7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRh
ID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+dGFrZShrZXkpOwotICAgICAgICBpZiAocGxhdGZv
cm1EYXRhKQotICAgICAgICAgICAgZGVsZXRlIHBsYXRmb3JtRGF0YTsKLSAgICB9Ci0KLSAgICBp
ZiAoaXQgPT0gZW5kKSB7Ci0gICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0aGluZwotICAgICAgICBn
SW5hY3RpdmVGb250RGF0YVNldC0+Y2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBnSW5hY3RpdmVGb250RGF0
YVNldC0+cmVtb3ZlKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpKTsKLSAgICB9Ci0KLSAg
ICBpc1B1cmdpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9u
dC5mb250RGVzY3JpcHRpb24oKSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9u
dFNlbGVjdG9yKikKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogeworICAgIHJldHVybiBuZXcgRm9u
dFBsYXRmb3JtRGF0YShRRm9udCgpLCBmYWxzZSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpyZW1v
dmVDbGllbnQoRm9udFNlbGVjdG9yKikKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKIHsKIH0KIAotdm9pZCBG
b250Q2FjaGU6OmludmFsaWRhdGUoKQorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmKQogewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSB8fCAhZ0ZvbnREYXRhQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHB1cmdlSW5hY3Rp
dmVGb250RGF0YSgpOworICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0YShmb250RGVzY3Jp
cHRpb24pOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDhlMWU0ZjYuLjAwMDAwMDAKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMTM4
ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBIYW5zIFBldGVyIEZy
ZXl0aGVyCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0KLSAgICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gICAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotCi0gICAgUmVwbGFjZW1lbnQgb2YgdGhlIHN0b2NrIEZvbnRGYWxsYmFja0xpc3QgYXMg
UXQgaXMgZ29pbmcgdG8gZmluZCB1cyBhCi0gICAgcmVwbGFjZW1lbnQgZm9udCwgd2lsbCBkbyBj
YWNoaW5nIGFuZCB0aGUgb3RoZXIgc3R1ZmYgd2UgaW1wbGVtZW50IGluCi0gICAgV2ViS2l0Lgot
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRGYWxsYmFja0xpc3QuaCIK
LQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJT
ZWdtZW50ZWRGb250RGF0YS5oIgotCi0jaW5jbHVkZSA8UURlYnVnPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLUZvbnRGYWxsYmFja0xpc3Q6OkZvbnRGYWxsYmFja0xpc3QoKQotICAgIDogbV9w
YWdlWmVybygwKQotICAgICwgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGEoMCkKLSAgICAs
IG1fZm9udFNlbGVjdG9yKDApCi0gICAgLCBtX2ZhbWlseUluZGV4KDApCi0gICAgLCBtX3BpdGNo
KFVua25vd25QaXRjaCkKLSAgICAsIG1fbG9hZGluZ0N1c3RvbUZvbnRzKGZhbHNlKQotICAgICwg
bV9nZW5lcmF0aW9uKDApCi17Ci19Ci0KLXZvaWQgRm9udEZhbGxiYWNrTGlzdDo6aW52YWxpZGF0
ZShXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9udFNlbGVjdG9yPiBmb250U2VsZWN0b3IpCi17
Ci0gICAgcmVsZWFzZUZvbnREYXRhKCk7Ci0gICAgbV9mb250TGlzdC5jbGVhcigpOwotICAgIG1f
cGFnZVplcm8gPSAwOwotICAgIG1fcGFnZXMuY2xlYXIoKTsKLSAgICBtX2NhY2hlZFByaW1hcnlT
aW1wbGVGb250RGF0YSA9IDA7Ci0gICAgbV9mYW1pbHlJbmRleCA9IDA7Ci0gICAgbV9waXRjaCA9
IFVua25vd25QaXRjaDsKLSAgICBtX2xvYWRpbmdDdXN0b21Gb250cyA9IGZhbHNlOwotICAgIG1f
Zm9udFNlbGVjdG9yID0gZm9udFNlbGVjdG9yOwotICAgIG1fZ2VuZXJhdGlvbiA9IDA7Ci19Ci0K
LXZvaWQgRm9udEZhbGxiYWNrTGlzdDo6cmVsZWFzZUZvbnREYXRhKCkKLXsKLSAgICB1bnNpZ25l
ZCBudW1Gb250cyA9IG1fZm9udExpc3Quc2l6ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBudW1Gb250czsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZvbnRMaXN0W2ldLnNlY29uZCkK
LSAgICAgICAgICAgIGRlbGV0ZSBtX2ZvbnRMaXN0W2ldLmZpcnN0OwotICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgIEFTU0VSVCghbV9mb250TGlzdFtpXS5maXJzdC0+aXNTZWdtZW50ZWQoKSk7
Ci0gICAgICAgICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0YXRpY19jYXN0PGNv
bnN0IFNpbXBsZUZvbnREYXRhKj4obV9mb250TGlzdFtpXS5maXJzdCkpOwotICAgICAgICB9Ci0g
ICAgfQotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmRldGVybWluZVBpdGNoKGNvbnN0IFdl
YkNvcmU6OkZvbnQqIGZvbnQpIGNvbnN0Ci17Ci0gICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
ID0gcHJpbWFyeUZvbnREYXRhKGZvbnQpOwotICAgIGlmICghZm9udERhdGEtPmlzU2VnbWVudGVk
KCkpCi0gICAgICAgIG1fcGl0Y2ggPSBzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+
KGZvbnREYXRhKS0+cGl0Y2goKTsKLSAgICBlbHNlIHsKLSAgICAgICAgY29uc3QgU2VnbWVudGVk
Rm9udERhdGEqIHNlZ21lbnRlZEZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2VnbWVudGVk
Rm9udERhdGEqPihmb250RGF0YSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bVJhbmdlcyA9IHNlZ21l
bnRlZEZvbnREYXRhLT5udW1SYW5nZXMoKTsKLSAgICAgICAgaWYgKG51bVJhbmdlcyA9PSAxKQot
ICAgICAgICAgICAgbV9waXRjaCA9IHNlZ21lbnRlZEZvbnREYXRhLT5yYW5nZUF0KDApLmZvbnRE
YXRhKCktPnBpdGNoKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1fcGl0Y2ggPSBWYXJp
YWJsZVBpdGNoOwotICAgIH0KLX0KLQotY29uc3QgRm9udERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6
OmZvbnREYXRhQXQoY29uc3QgV2ViQ29yZTo6Rm9udCogX2ZvbnQsIHVuc2lnbmVkIGluZGV4KSBj
b25zdAotewotICAgIGlmIChpbmRleCAhPSAwKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIC8v
IFNlYXJjaCBmb3IgdGhlIFdlYkNvcmUgZm9udCB0aGF0IGlzIGFscmVhZHkgaW4gdGhlIGxpc3QK
LSAgICBmb3IgKGludCBpID0gbV9mb250TGlzdC5zaXplKCkgLSAxOyBpID49IDA7IC0taSkgewot
ICAgICAgICBwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4gaXRlbSA9IG1fZm9udExpc3RbaV07
Ci0gICAgICAgIC8vIGl0ZW0uc2Vjb25kIG1lYW5zIHRoYXQgdGhlIGl0ZW0gd2FzIGNyZWF0ZWQg
bG9jYWxseSBvciBub3QKLSAgICAgICAgaWYgKCFpdGVtLnNlY29uZCkKLSAgICAgICAgICAgIHJl
dHVybiBpdGVtLmZpcnN0OwotICAgIH0KLQotICAgIC8vIFVzZSB0aGUgRm9udFNlbGVjdG9yIHRv
IGdldCBhIFdlYkNvcmUgZm9udCBhbmQgdGhlbiBmYWxsYmFjayB0byBRdAotICAgIGNvbnN0IEZv
bnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBfZm9udC0+Zm9udERlc2NyaXB0aW9uKCk7Ci0g
ICAgY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZhbWlseSgpOwotICAg
IHdoaWxlIChmYW1pbHkpIHsKLSAgICAgICAgaWYgKG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAg
ICAgICBGb250RGF0YSogZGF0YSA9IG1fZm9udFNlbGVjdG9yLT5nZXRGb250RGF0YShkZXNjcmlw
dGlvbiwgZmFtaWx5LT5mYW1pbHkoKSk7Ci0gICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAg
ICAgICAgICAgIGlmIChkYXRhLT5pc0xvYWRpbmcoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9s
b2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwotICAgICAgICAgICAgICAgIGlmICghZGF0YS0+aXND
dXN0b21Gb250KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQ3VzdG9tIGZvbnRzIGNhbiBi
ZSBmcmVlZCBhbnl0aW1lIHNvIHdlIG11c3Qgbm90IGhvbGQgdGhlbQotICAgICAgICAgICAgICAg
ICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4oZGF0YSwg
ZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgZmFtaWx5ID0gZmFtaWx5LT5uZXh0
KCk7Ci0gICAgfQotCi0gICAgaWYgKG1fZm9udExpc3Quc2l6ZSgpKQotICAgICAgICByZXR1cm4g
bV9mb250TGlzdFswXS5maXJzdDsKLQotICAgIGNvbnN0IEZvbnREYXRhKiByZXN1bHQgPSBuZXcg
U2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShkZXNjcmlwdGlvbiwgX2ZvbnQtPndvcmRT
cGFjaW5nKCksIF9mb250LT5sZXR0ZXJTcGFjaW5nKCkpLCB0cnVlKTsKLSAgICBtX2ZvbnRMaXN0
LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4ocmVzdWx0LCB0cnVlKSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotY29uc3QgRm9udERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6OmZv
bnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBXZWJDb3JlOjpGb250KiBmb250LCBjb25zdCBVQ2hh
ciosIGludCkgY29uc3QKLXsKLSAgICByZXR1cm4gcHJpbWFyeUZvbnREYXRhKGZvbnQpOwotfQot
Ci12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnNldFBsYXRmb3JtRm9udChjb25zdCBXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhJikKLXsKLSAgICBtX2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nh
bm5lZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250UGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaAppbmRleCA5MjIxOWZkLi44NzcxNTljIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtMSw0ICsxLDQgQEAKLS8qCisg
IC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMg
c3Vic2lkaWFyeSgtaWVzKQogICAgIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRl
ciBGcmV5dGhlcgogICAgIENvcHlyaWdodCAoQykgMjAwOSBUb3JjaCBNb2JpbGUgSW5jLiBodHRw
Oi8vd3d3LnRvcmNobW9iaWxlLmNvbS8KQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZv
bnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPFFGb250PgorI2luY2x1ZGUgPFFIYXNoPgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQxLDYgKzQyLDEzIEBAIHB1YmxpYzoKICAgICBGb250
UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGludCB3b3JkU3BhY2luZyA9IDAs
IGludCBsZXR0ZXJTcGFjaW5nID0gMCk7CiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBRRm9u
dCYsIGJvb2wgYm9sZCk7CiAKKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVs
ZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2lzRGVsZXRlZFZhbHVlKHRydWUpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVy
biBtX2lzRGVsZXRlZFZhbHVlOyB9CisKICAgICBzdGF0aWMgaW5saW5lIFFGb250OjpXZWlnaHQg
dG9RRm9udFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCiAgICAgewogICAgICAgICBzd2l0
Y2ggKGZvbnRXZWlnaHQpIHsKQEAgLTY5LDE1ICs3NywyOSBAQCBwdWJsaWM6CiAgICAgYm9vbCBp
dGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuaXRhbGljKCk7IH0KICAgICBib29sIHNtYWxs
Q2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5jYXBpdGFsaXphdGlvbigpID09IFFGb250OjpT
bWFsbENhcHM7IH0KICAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb250LnBp
eGVsU2l6ZSgpOyB9CisgICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gcUhhc2gobV9mb250LnRvU3RyaW5nKCkpOworICAgIH0KKworICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAobV9pc0RlbGV0ZWRWYWx1ZSAmJiBtX2lzRGVsZXRlZFZhbHVlID09IG90aGVyLm1f
aXNEZWxldGVkVmFsdWUpCisgICAgICAgICAgICAgICAgfHwgKG1fc2l6ZSA9PSBvdGhlci5tX3Np
emUKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9ib2xkID09IG90aGVyLm1fYm9sZAorICAgICAg
ICAgICAgICAgICAgICAmJiBtX29ibGlxdWUgPT0gb3RoZXIubV9vYmxpcXVlCisgICAgICAgICAg
ICAgICAgICAgICYmIG1fZm9udCA9PSBtX2ZvbnQpOworICAgIH0KIAogI2lmbmRlZiBOREVCVUcK
ICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsKICNlbmRpZgogCiAgICAgZmxvYXQgbV9z
aXplOwotICAgIGJvb2wgbV9ib2xkOwotICAgIGJvb2wgbV9vYmxpcXVlOwogICAgIFFGb250IG1f
Zm9udDsKKyAgICBib29sIG1fYm9sZCA6IDE7CisgICAgYm9vbCBtX29ibGlxdWUgOiAxOworICAg
IGJvb2wgbV9pc0RlbGV0ZWRWYWx1ZSA6IDE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURh
dGFRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFR
dC5jcHAKaW5kZXggNzcwOWJlNi4uZGEzODIxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcApAQCAtMzAsNiArMzAsNyBAQCBG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24sIGludCB3b3JkUwogICAgIDogbV9zaXplKDAuMGYpCiAgICAgLCBtX2JvbGQo
ZmFsc2UpCiAgICAgLCBtX29ibGlxdWUoZmFsc2UpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZh
bHNlKQogewogICAgIFFTdHJpbmcgZmFtaWx5TmFtZTsKICAgICBjb25zdCBGb250RmFtaWx5KiBm
YW1pbHkgPSAmZGVzY3JpcHRpb24uZmFtaWx5KCk7CkBAIC01OSw2ICs2MCw3IEBAIEZvbnRQbGF0
Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgUUZvbnQmIGZvbnQsIGJvb2wgYm9sZCkK
ICAgICAsIG1fYm9sZChib2xkKQogICAgICwgbV9vYmxpcXVlKGZhbHNlKQogICAgICwgbV9mb250
KGZvbnQpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQogCkBAIC02Nyw2ICs2
OSw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIG9ibGlxdWUpCiAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAsIG1fYm9sZChi
b2xkKQogICAgICwgbV9vYmxpcXVlKG9ibGlxdWUpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZh
bHNlKQogewogfQogI2VuZGlmCkBAIC03NSw2ICs3OCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZv
bnRQbGF0Zm9ybURhdGEoKQogICAgIDogbV9zaXplKDAuMGYpCiAgICAgLCBtX2JvbGQoZmFsc2Up
CiAgICAgLCBtX29ibGlxdWUoZmFsc2UpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQog
ewogfQogCg==
</data>
<flag name="review"
          id="22984"
          type_id="1"
          status="-"
          setter="zecke"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42096</attachid>
            <date>2009-10-29 07:42:54 -0700</date>
            <delta_ts>2009-11-08 10:41:48 -0800</delta_ts>
            <desc>Patch with test case</desc>
            <filename>font_handling_qt.patch</filename>
            <type>text/plain</type>
            <size>23432</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA3MWM2Mjc1Li5hYTNiNzVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMDktMTAt
MTkgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBuZXcgdGVz
dCB0byByZXByb2R1Y2UgMjk4NTYuIFRoZSBidWcgb25seSBoYXBwZW4KKyAgICAgICAgd2hlbiB0
aGUgU1ZHIGZpbGUgaXMgdXNlZCBhcyBhbiBpbWFnZS4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5ODU2CisKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9z
dmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHN2Zy90ZXh0L3Jlc291cmNlcy90ZXh0LWZvbnQtaW52YWxpZC5zdmc6IEFkZGVkLgorICAgICAg
ICAqIHN2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWw6IEFkZGVkLgorCiAyMDA5LTEwLTIx
ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBTa2lwIGFub3RoZXIg
ZmFpbGluZyB0ZXN0LgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2Vz
L3RleHQtZm9udC1pbnZhbGlkLnN2ZyBiL0xheW91dFRlc3RzL3N2Zy90ZXh0L3Jlc291cmNlcy90
ZXh0LWZvbnQtaW52YWxpZC5zdmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u
MGY5ZTAwNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3N2Zy90ZXh0L3Jlc291cmNl
cy90ZXh0LWZvbnQtaW52YWxpZC5zdmcKQEAgLTAsMCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0i
MS4wIj8+Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJo
dHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPgorPHN2ZyB4
bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsPSJodHRwOi8vd3d3Lncz
Lm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEiPgorICA8ZGVmcz4KKyAgICA8Zm9udC1mYWNl
IGZvbnQtZmFtaWx5PSJBcmJpdHJhcnkgZm9udCBub3Qgb24gdGhlIHN5c3RlbSI+CisgICAgPGZv
bnQtZmFjZS1zcmM+CisgICAgICA8Zm9udC1mYWNlLW5hbWUgbmFtZT0iVmVyeVVubGlrZWx5VG9F
eGlzdEZvbnQiLz4KKyAgICA8L2ZvbnQtZmFjZS1zcmM+CisgICAgPC9mb250LWZhY2U+CisgIDwv
ZGVmcz4KKyAgPGc+CisgICAgPHRleHQ+CisgICAgICA8dHNwYW4gZm9udC1mYW1pbHk9IkFyYml0
cmFyeSBmb250IG5vdCBvbiB0aGUgc3lzdGVtIj5Gb29iYXI8L3RzcGFuPgorICAgIDwvdGV4dD4K
KyAgPC9nPgorPC9zdmc+CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy90ZXh0L3RleHQt
Zm9udC1pbnZhbGlkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3N2Zy90ZXh0L3RleHQtZm9u
dC1pbnZhbGlkLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
Li44Yzg0OGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1m
b250LWludmFsaWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMyBAQAorVGhpcyB0ZXN0IGlzIHRv
IGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBjcmFzaCB3aGVuIGxvYWRpbmcgYSBTVkcgaW1hZ2Ugd2l0
aG91dCBhIHZhbGlkIGZvbnQtZmFtaWx5CitQQVNTOiBEaWQgbm90IGNyYXNoIHdoZW4gcmVuZGVy
aW5nIHRoZSBTVkcgaW1hZ2UuCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3N2Zy90ZXh0L3Rl
eHQtZm9udC1pbnZhbGlkLmh0bWwgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQtaW52
YWxpZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjOWExNmYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC5o
dG1sCkBAIC0wLDAgKzEsMTIgQEAKKzxodG1sPgorICA8Ym9keT4KKyAgICBUaGlzIHRlc3QgaXMg
dG8gZW5zdXJlIHRoYXQgd2UgZG8gbm90IGNyYXNoIHdoZW4gbG9hZGluZyBhIFNWRyBpbWFnZSB3
aXRob3V0IGEgdmFsaWQgZm9udC1mYW1pbHkKKyAgICA8ZGl2IGlkPSJsb2ciPjxzcGFuIHN0eWxl
PSdjb2xvcjogcmVkOyc+RkFJTDo8L3NwYW4+IERpZCBub3QgY29tcGxldGUgdGVzdDwvZGl2Pgor
ICAgIDxpbWcgc3JjPSJyZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnIiAvPgorICAgIDxz
Y3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAg
ICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7CisgICAgICAgIGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lckhUTUwgPSAiPHNwYW4gc3R5bGU9J2NvbG9yOiBn
cmVlbjsnPlBBU1M6PC9zcGFuPiBEaWQgbm90IGNyYXNoIHdoZW4gcmVuZGVyaW5nIHRoZSBTVkcg
aW1hZ2UuIjsKKyAgICA8L3NjcmlwdD4KKyAgPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZWM1YTA5Li43MzE4
MTNjIDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDQ5IEBACisyMDA5LTEwLTE5ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFt
aW4ucG91bGFpbkBub2tpYS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1F0XSBIYW5kbGUgZm9udHMgbGlrZSB0aGUgb3RoZXIgcG9ydHMKKwor
ICAgICAgICBSZW1vdmUgRm9udEZhbGxiYWNrTGlzdFF0IGFuZCByZWx5IG9uIHRoZSBjb21tb24g
Rm9udEZhbGxiYWNrTGlzdAorICAgICAgICB0byBoYW5kbGUgdGhlIGZvbnRzLiBGb250Q2FjaGUg
YW5kIEZvbnRQbGF0Zm9ybURhdGEgaGF2ZSBiZWVuCisgICAgICAgIHVwZGF0ZWQgdG8gd29yayB3
aXRoIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdC4KKworICAgICAgICBJbiB0aGUgcHJldmlv
dXMgaW1wbGVtZW50YXRpb24sIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleQorICAgICAgICB3YXMg
YSBjbG9uZSBvZiBGb250UGxhdGZvcm1EYXRhIHdpdGggdGhlIGhhc2hpbmcKKyAgICAgICAgY2Fw
YWJpbGl0aWVzIGFkZGVkIGluIG9yZGVyIHRvIHVzZSBpdCBhcyBhIGtleSBpbiB0aGUgY2FjaGUn
cworICAgICAgICBoYXNobWFwLiBGb250UGxhdGZvcm1EYXRhIGhhcyBiZWVuIG1vZGlmaWVkIHRv
IGhhbmRsZSB0aGUgaGFzaGluZworICAgICAgICBmdW5jdGlvbiBkaXJlY3RseSBzbyB0aGUgZGF0
YSBhcmUgbm90IGNvcGllZCB0d2ljZSBpbiBtZW1vcnkuCisKKyAgICAgICAgRm9udEZhbGxiYWNr
TGlzdDo6Zm9udERhdGFBdCgpIGZyb20gRm9udEZhbGxiYWNrTGlzdFF0IHdhcyBhIGNvcHkgb2YK
KyAgICAgICAgY29kZSBmcm9tIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGEoKSBhbmQgRm9udEZhbGxi
YWNrTGlzdDo6Zm9udERhdGFBdCgpLgorICAgICAgICBUaGUgYmVoYXZpb3IgaXMgc2ltaWxhciBl
eGNlcHQgY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3RoKCkgd2FzCisgICAgICAgIG5vdCB0ZXN0
ZWQgYW5kIHRoZSBmYWxsYmFjayBmb250cyBzZWxlY3RvciB3ZXJlIG5vdCB1c2VkLgorCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yOTg1NgorCisgICAg
ICAgIFRlc3Q6IHN2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWwKKworICAgICAgICAqIFdl
YkNvcmUucHJvOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6cGxhdGZvcm1Jbml0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwOgorICAgICAgICBSZW1vdmVk
LiBXZSBub3cgdXNlIHRoZSBpbXBsZW1lbnRhdGlvbiBmcm9tIEZvbnRGYWxsYmFja0xpc3QuY3Bw
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oOgorICAg
ICAgICBBZGQgaGFzaGluZyBjYXBhYmlsaXRpZXMgdG8gYmUgYWJsZSB0byB1c2UgdGhlIGRhdGEg
d2l0aCB0aGUgRm9udENhY2hlLgorICAgICAgICBUaGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgaW4g
Rm9udENhY2hlUXQuY3BwCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKToKKyAgICAgICAgQWRkZWQgYSBib29sZWFuIHRvIGlkZW50aWZ5IGRlbGV0
ZWQgdmFsdWUgaW4gdGhlIGhhc2ggdGFibGUuCisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpoYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6
Om9wZXJhdG9yPT0pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9y
bURhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxh
dGZvcm1EYXRhKToKKwogMjAwOS0xMC0yMSAgU2F0b3NoaSBOYWthZ2F3YSAgPHBzeWNoc0BsaW1l
Y2hhdC5uZXQ+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQg
YS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCAwMGI0Njdk
Li44ODc3NjUzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUv
V2ViQ29yZS5wcm8KQEAgLTExODksNiArMTE4OSw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRm
b3JtL2ltYWdlLWRlY29kZXJzL3F0L1JHQkEzMkJ1ZmZlclF0LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvZmlsdGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0ZvbnREZXNjcmlwdGlvbi5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxs
YmFja0xpc3QuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9Db2xvci5jcHAgXApAQCAtMTE5OSw2ICsxMjAwLDcgQEAgU09VUkNFUyArPSBcCiAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udERhdGEuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCisgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2Vu
ZXJhdGVkSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgXAog
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXApAQCAtMjM3Niw3ICsy
Mzc4LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvU2hhcmVkQnVmZmVyUXQuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgXAogICAgIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIFwKLSAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9xdC9HbHlwaFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvU2ltcGxlRm9udERhdGFRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0tVUkxRdC5jcHAgXApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAppbmRleCAxMTEz
ZWFlLi4yYWE5ZTExIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0Zv
bnRDYWNoZVF0LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNo
ZVF0LmNwcApAQCAtMzgsMjU2ICszOCwzMiBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKLUZvbnRDYWNoZSogZm9udENhY2hlKCkKK3ZvaWQgRm9udENhY2hl
OjpwbGF0Zm9ybUluaXQoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udENhY2hlLCBn
bG9iYWxGb250Q2FjaGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2JhbEZvbnRDYWNoZTsKIH0KIAot
Rm9udENhY2hlOjpGb250Q2FjaGUoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRz
SW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpCi17Ci19Ci0K
LS8vIFRoaXMgdHlwZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxhdGZvcm1EYXRhJ3Mg
Y3RvciAtIHRoZSBvbmUgd2hpY2gKLS8vIGdldHMgRm9udERlc2NyaXB0aW9uIGFzIGl0J3MgcGFy
YW1ldGVyLgotY2xhc3MgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKLXB1YmxpYzoKLSAgICBG
b250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
bikKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6ZShkZXNjcmlwdGlv
bi5jb21wdXRlZFBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAgICAg
LCBtX2l0YWxpYyhkZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgLCBtX3NtYWxsQ2Fwcyhk
ZXNjcmlwdGlvbi5zbWFsbENhcHMoKSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAgICB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFFGb250IHdlaWdodHMg
aW4gRm9udFBsYXRmb3JtRGF0YSdzIGN0b3IgYW5kIGZvbGxvdyBpdCBoZXJlCi0gICAgICAgIGlm
IChGb250UGxhdGZvcm1EYXRhOjp0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9uLndlaWdodCgpKSA+
IFFGb250OjpOb3JtYWwpCi0gICAgICAgICAgICBtX2JvbGQgPSB0cnVlOwotCi0gICAgICAgIGNv
bnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAgICAgICAg
d2hpbGUgKGZhbWlseSkgewotICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZChmYW1pbHkt
PmZhbWlseSgpKTsKLSAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOwotICAgICAg
ICAgICAgaWYgKGZhbWlseSkKLSAgICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKCcs
Jyk7Ci0gICAgICAgIH0KLQotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSkK
LSAgICAgICAgOiBtX2ZhbWlseU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nPihmb250RGF0YS5mYW1p
bHkoKSkpCi0gICAgICAgICwgbV9zaXplKGZvbnREYXRhLnBpeGVsU2l6ZSgpKQotICAgICAgICAs
IG1fYm9sZChmb250RGF0YS5ib2xkKCkpCi0gICAgICAgICwgbV9pdGFsaWMoZm9udERhdGEuaXRh
bGljKCkpCi0gICAgICAgICwgbV9zbWFsbENhcHMoZm9udERhdGEuc21hbGxDYXBzKCkpCi0gICAg
ICAgICwgbV9oYXNoKDApCi0gICAgewotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQot
ICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6
IG1fc2l6ZShoYXNoVGFibGVEZWxldGVkU2l6ZSgpKSB7IH0KLSAgICBib29sIGlzSGFzaFRhYmxl
RGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IGhhc2hUYWJsZURlbGV0ZWRT
aXplKCk7IH0KLQotICAgIGVudW0gSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUgeyBIYXNoVGFibGVF
bXB0eVZhbHVlIH07Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRW1w
dHlWYWx1ZVR5cGUpCi0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkKLSAgICAgICAgLCBtX3NpemUo
MCkKLSAgICAgICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9pdGFsaWMoZmFsc2UpCi0g
ICAgICAgICwgbV9zbWFsbENhcHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewot
ICAgIH0KLQotICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXkmIG90aGVyKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faGFzaCAhPSBvdGhlci5tX2hh
c2gpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGVxdWFsSWdu
b3JpbmdDYXNlKG1fZmFtaWx5TmFtZSwgb3RoZXIubV9mYW1pbHlOYW1lKSAmJiBtX3NpemUgPT0g
b3RoZXIubV9zaXplICYmCi0gICAgICAgICAgICBtX2JvbGQgPT0gb3RoZXIubV9ib2xkICYmIG1f
aXRhbGljID09IG90aGVyLm1faXRhbGljICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxD
YXBzOwotICAgIH0KLQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAg
cmV0dXJuIG1faGFzaDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXB1dGVIYXNoKCkKLSAgICB7Ci0g
ICAgICAgIHVuc2lnbmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICAgICAgQ2FzZUZvbGRpbmdI
YXNoOjpoYXNoKG1fZmFtaWx5TmFtZSksCi0gICAgICAgICAgICBtX3NpemUgfCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9ib2xkIDw8IHNpemVvZih1bnNpZ25lZCkgKiA4IC0gMSkKLSAgICAgICAg
ICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2l0YWxpYykgPDwgc2l6ZW9mKHVuc2ln
bmVkKSAqOCAtIDIKLSAgICAgICAgICAgICAgICB8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3Nt
YWxsQ2FwcykgPDwgc2l6ZW9mKHVuc2lnbmVkKSAqIDggLSAzCi0gICAgICAgIH07Ci0gICAgICAg
IG1faGFzaCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8VUNoYXIq
PihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwotICAgIH0K
LQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOwotICAgIGludCBtX3NpemU7Ci0g
ICAgYm9vbCBtX2JvbGQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLSAgICBib29sIG1fc21hbGxDYXBz
OwotICAgIHVuc2lnbmVkIG1faGFzaDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoVGFibGVE
ZWxldGVkU2l6ZSgpIHsgcmV0dXJuIDB4RkZGRkZGRkZVOyB9Ci19OwotCi1zdHJ1Y3QgRm9udFBs
YXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpCi0gICAgewotICAgICAgICByZXR1cm4ga2V5
Lmhhc2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgYikKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQotCi0gICAgc3RhdGljIGNvbnN0IGJv
b2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3RydWN0IEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFpdHM8Rm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0
cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSwga2V5LCAoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5OjpIYXNo
VGFibGVFbXB0eVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICAgIHN0YXRp
YyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIHNs
b3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXko
SGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgaXNEZWxldGVk
VmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiB2YWx1ZSkKLSAgICB7Ci0gICAg
ICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotICAgIH0KLX07Ci0K
LXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIEZvbnRQbGF0Zm9ybURh
dGEqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXlUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotLy8gdXNpbmcgUV9HTE9CQUxfU1RB
VElDIGxlYWRzIHRvIGNyYXNoLiBUT0RPIGludmVzdGlnYXRlIHRoZSB3YXkgdG8gZml4IHRoaXMu
Ci1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0g
MDsKLQotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYsIGJvb2wpCi17Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlKQotICAgICAgICBn
Rm9udFBsYXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotICAg
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZGVzY3JpcHRpb24pOwotICAgIEZvbnRQbGF0
Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmdldChrZXkp
OwotICAgIGlmICghcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIHBsYXRmb3JtRGF0YSA9IG5ldyBG
b250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKTsKLSAgICAgICAgZ0ZvbnRQbGF0Zm9ybURhdGFD
YWNoZS0+YWRkKGtleSwgcGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBsYXRmb3Jt
RGF0YTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwgc3Rk
OjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2FjaGU7Ci0K
LXN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7Ci0KLXN0YXRpYyBjb25z
dCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSA0MDsKLXN0YXRpYyBjb25zdCBpbnQgY1Rhcmdl
dEluYWN0aXZlRm9udERhdGEgPSAzMjsKLQotc3RhdGljIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBs
ZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsKLQotU2ltcGxlRm9udERhdGEq
IEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSogZm9u
dFBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7Ci0gICAgICAgIGdG
b250RGF0YUNhY2hlID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAgICAgIGdJbmFjdGl2ZUZvbnRE
YXRhU2V0ID0gbmV3IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj47Ci0gICAgfQot
Ci0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9udFBsYXRmb3JtRGF0YSk7Ci0g
ICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChrZXkp
OwotICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKLSAgICAgICAgU2ltcGxl
Rm9udERhdGEqIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpmb250UGxhdGZvcm1EYXRh
KTsKLSAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0ZDo6cGFpcjxTaW1wbGVGb250
RGF0YSosIHVuc2lnbmVkPihmb250RGF0YSwgMSkpOwotICAgICAgICByZXR1cm4gZm9udERhdGE7
Ci0gICAgfQotICAgIGlmICghaXQtPnNlY29uZC5zZWNvbmQrKykgewotICAgICAgICBBU1NFUlQo
Z0luYWN0aXZlRm9udERhdGFTZXQtPmNvbnRhaW5zKGl0LT5zZWNvbmQuZmlyc3QpKTsKLSAgICAg
ICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShpdC0+c2Vjb25kLmZpcnN0KTsKLSAgICB9
Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLUZvbnRQbGF0Zm9ybURhdGEqIEZv
bnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24m
KQorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JDaGFyYWN0
ZXJzKGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciosIGludCkKIHsKICAgICByZXR1cm4gMDsKIH0K
IAotdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBXZWJDb3JlOjpTaW1wbGVG
b250RGF0YSogZm9udERhdGEpCitGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWls
YXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7Ci0gICAgQVNTRVJUKGdGb250
RGF0YUNhY2hlKTsKLSAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0KLSAg
ICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7
Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChr
ZXkpOwotICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwotICAgIGlmICgh
LS1pdC0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+YWRk
KGl0LT5zZWNvbmQuZmlyc3QpOwotICAgICAgICBpZiAoZ0luYWN0aXZlRm9udERhdGFTZXQtPnNp
emUoKSA+IGNNYXhJbmFjdGl2ZUZvbnREYXRhKQotICAgICAgICAgICAgcHVyZ2VJbmFjdGl2ZUZv
bnREYXRhKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgLSBjVGFyZ2V0SW5hY3RpdmVGb250
RGF0YSk7Ci0gICAgfQotfQotCi12b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRh
KGludCBjb3VudCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpc1B1cmdpbmc7ICAvLyBHdWFyZCBhZ2Fp
bnN0IHJlZW50cnkgd2hlbiBlLmcuIGEgZGVsZXRlZCBGb250RGF0YSByZWxlYXNlcyBpdHMgc21h
bGwgY2FwcyBGb250RGF0YS4KLSAgICBpZiAoaXNQdXJnaW5nKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpc1B1cmdpbmcgPSB0cnVlOwotCi0gICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9u
dERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0YVNldC0+YmVnaW4oKTsKLSAg
ICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBlbmQgPSBnSW5h
Y3RpdmVGb250RGF0YVNldC0+ZW5kKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudCAm
JiBpdCAhPSBlbmQ7ICsraSwgKytpdCkgewotICAgICAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXkga2V5ID0gKCppdCktPnBsYXRmb3JtRGF0YSgpOwotICAgICAgICBwYWlyPFNpbXBsZUZvbnRE
YXRhKiwgdW5zaWduZWQ+IGZvbnREYXRhUGFpciA9IGdGb250RGF0YUNhY2hlLT50YWtlKGtleSk7
Ci0gICAgICAgIEFTU0VSVChmb250RGF0YVBhaXIuZmlyc3QgIT0gMCk7Ci0gICAgICAgIEFTU0VS
VCghZm9udERhdGFQYWlyLnNlY29uZCk7Ci0gICAgICAgIGRlbGV0ZSBmb250RGF0YVBhaXIuZmly
c3Q7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gZ0ZvbnRQbGF0
Zm9ybURhdGFDYWNoZS0+dGFrZShrZXkpOwotICAgICAgICBpZiAocGxhdGZvcm1EYXRhKQotICAg
ICAgICAgICAgZGVsZXRlIHBsYXRmb3JtRGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoaXQgPT0gZW5k
KSB7Ci0gICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0aGluZwotICAgICAgICBnSW5hY3RpdmVGb250
RGF0YVNldC0+Y2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+cmVtb3Zl
KGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICBpc1B1cmdpbmcg
PSBmYWxzZTsKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250RGVzY3Jp
cHRpb24oKSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVjdG9yKikK
K0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChj
b25zdCBGb250RGVzY3JpcHRpb24mKQogeworICAgIHJldHVybiBuZXcgRm9udFBsYXRmb3JtRGF0
YSgpOwogfQogCi12b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50KEZvbnRTZWxlY3RvciopCit2
b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3QgQXRvbWljU3RyaW5nJiwgVmVj
dG9yPHVuc2lnbmVkPiYpCiB7CiB9CiAKLXZvaWQgRm9udENhY2hlOjppbnZhbGlkYXRlKCkKK0Zv
bnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJikKIHsK
LSAgICBpZiAoIWdGb250UGxhdGZvcm1EYXRhQ2FjaGUgfHwgIWdGb250RGF0YUNhY2hlKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBwdXJnZUluYWN0aXZlRm9udERhdGEoKTsKKyAgICByZXR1cm4g
bmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
RmFsbGJhY2tMaXN0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFs
bGJhY2tMaXN0UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA4ZTFlNGY2Li4w
MDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlz
dFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBACi0vKgotICAgIENvcHlyaWdo
dCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgotCi0gICAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
Ci0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJh
cnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBz
ZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQotICAgIFJlcGxhY2VtZW50IG9m
IHRoZSBzdG9jayBGb250RmFsbGJhY2tMaXN0IGFzIFF0IGlzIGdvaW5nIHRvIGZpbmQgdXMgYQot
ICAgIHJlcGxhY2VtZW50IGZvbnQsIHdpbGwgZG8gY2FjaGluZyBhbmQgdGhlIG90aGVyIHN0dWZm
IHdlIGltcGxlbWVudCBpbgotICAgIFdlYktpdC4KLSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCi0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5j
bHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkRm9udERhdGEuaCIKLQotI2lu
Y2x1ZGUgPFFEZWJ1Zz4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1Gb250RmFsbGJhY2tMaXN0
OjpGb250RmFsbGJhY2tMaXN0KCkKLSAgICA6IG1fcGFnZVplcm8oMCkKLSAgICAsIG1fY2FjaGVk
UHJpbWFyeVNpbXBsZUZvbnREYXRhKDApCi0gICAgLCBtX2ZvbnRTZWxlY3RvcigwKQotICAgICwg
bV9mYW1pbHlJbmRleCgwKQotICAgICwgbV9waXRjaChVbmtub3duUGl0Y2gpCi0gICAgLCBtX2xv
YWRpbmdDdXN0b21Gb250cyhmYWxzZSkKLSAgICAsIG1fZ2VuZXJhdGlvbigwKQotewotfQotCi12
b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmludmFsaWRhdGUoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6
OkZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotewotICAgIHJlbGVhc2VGb250RGF0YSgpOwot
ICAgIG1fZm9udExpc3QuY2xlYXIoKTsKLSAgICBtX3BhZ2VaZXJvID0gMDsKLSAgICBtX3BhZ2Vz
LmNsZWFyKCk7Ci0gICAgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGEgPSAwOwotICAgIG1f
ZmFtaWx5SW5kZXggPSAwOwotICAgIG1fcGl0Y2ggPSBVbmtub3duUGl0Y2g7Ci0gICAgbV9sb2Fk
aW5nQ3VzdG9tRm9udHMgPSBmYWxzZTsKLSAgICBtX2ZvbnRTZWxlY3RvciA9IGZvbnRTZWxlY3Rv
cjsKLSAgICBtX2dlbmVyYXRpb24gPSAwOwotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnJl
bGVhc2VGb250RGF0YSgpCi17Ci0gICAgdW5zaWduZWQgbnVtRm9udHMgPSBtX2ZvbnRMaXN0LnNp
emUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVtRm9udHM7ICsraSkgewotICAg
ICAgICBpZiAobV9mb250TGlzdFtpXS5zZWNvbmQpCi0gICAgICAgICAgICBkZWxldGUgbV9mb250
TGlzdFtpXS5maXJzdDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZm9u
dExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVkKCkpOwotICAgICAgICAgICAgZm9udENhY2hlKCkt
PnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2FzdDxjb25zdCBTaW1wbGVGb250RGF0YSo+KG1fZm9u
dExpc3RbaV0uZmlyc3QpKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBGb250RmFsbGJh
Y2tMaXN0OjpkZXRlcm1pbmVQaXRjaChjb25zdCBXZWJDb3JlOjpGb250KiBmb250KSBjb25zdAot
ewotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IHByaW1hcnlGb250RGF0YShmb250KTsK
LSAgICBpZiAoIWZvbnREYXRhLT5pc1NlZ21lbnRlZCgpKQotICAgICAgICBtX3BpdGNoID0gc3Rh
dGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250RGF0YSktPnBpdGNoKCk7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRlZEZvbnREYXRhKiBzZWdtZW50ZWRGb250RGF0
YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNlZ21lbnRlZEZvbnREYXRhKj4oZm9udERhdGEpOwotICAg
ICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBzZWdtZW50ZWRGb250RGF0YS0+bnVtUmFuZ2VzKCk7
Ci0gICAgICAgIGlmIChudW1SYW5nZXMgPT0gMSkKLSAgICAgICAgICAgIG1fcGl0Y2ggPSBzZWdt
ZW50ZWRGb250RGF0YS0+cmFuZ2VBdCgwKS5mb250RGF0YSgpLT5waXRjaCgpOwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBtX3BpdGNoID0gVmFyaWFibGVQaXRjaDsKLSAgICB9Ci19Ci0KLWNv
bnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KGNvbnN0IFdlYkNvcmU6
OkZvbnQqIF9mb250LCB1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsKLSAgICBpZiAoaW5kZXggIT0g
MCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBTZWFyY2ggZm9yIHRoZSBXZWJDb3JlIGZv
bnQgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBsaXN0Ci0gICAgZm9yIChpbnQgaSA9IG1fZm9udExp
c3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgcGFpcjxjb25zdCBGb250RGF0
YSosIGJvb2w+IGl0ZW0gPSBtX2ZvbnRMaXN0W2ldOwotICAgICAgICAvLyBpdGVtLnNlY29uZCBt
ZWFucyB0aGF0IHRoZSBpdGVtIHdhcyBjcmVhdGVkIGxvY2FsbHkgb3Igbm90Ci0gICAgICAgIGlm
ICghaXRlbS5zZWNvbmQpCi0gICAgICAgICAgICByZXR1cm4gaXRlbS5maXJzdDsKLSAgICB9Ci0K
LSAgICAvLyBVc2UgdGhlIEZvbnRTZWxlY3RvciB0byBnZXQgYSBXZWJDb3JlIGZvbnQgYW5kIHRo
ZW4gZmFsbGJhY2sgdG8gUXQKLSAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
ID0gX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWls
eSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAgICB3aGlsZSAoZmFtaWx5KSB7Ci0gICAgICAg
IGlmIChtX2ZvbnRTZWxlY3RvcikgewotICAgICAgICAgICAgRm9udERhdGEqIGRhdGEgPSBtX2Zv
bnRTZWxlY3Rvci0+Z2V0Rm9udERhdGEoZGVzY3JpcHRpb24sIGZhbWlseS0+ZmFtaWx5KCkpOwot
ICAgICAgICAgICAgaWYgKGRhdGEpIHsKLSAgICAgICAgICAgICAgICBpZiAoZGF0YS0+aXNMb2Fk
aW5nKCkpCi0gICAgICAgICAgICAgICAgICAgIG1fbG9hZGluZ0N1c3RvbUZvbnRzID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICBpZiAoIWRhdGEtPmlzQ3VzdG9tRm9udCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIEN1c3RvbSBmb250cyBjYW4gYmUgZnJlZWQgYW55dGltZSBzbyB3ZSBtdXN0
IG5vdCBob2xkIHRoZW0KLSAgICAgICAgICAgICAgICAgICAgbV9mb250TGlzdC5hcHBlbmQocGFp
cjxjb25zdCBGb250RGF0YSosIGJvb2w+KGRhdGEsIGZhbHNlKSk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIHJldHVybiBkYXRhOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOwotICAgIH0KLQotICAgIGlmIChtX2Zv
bnRMaXN0LnNpemUoKSkKLSAgICAgICAgcmV0dXJuIG1fZm9udExpc3RbMF0uZmlyc3Q7Ci0KLSAg
ICBjb25zdCBGb250RGF0YSogcmVzdWx0ID0gbmV3IFNpbXBsZUZvbnREYXRhKEZvbnRQbGF0Zm9y
bURhdGEoZGVzY3JpcHRpb24sIF9mb250LT53b3JkU3BhY2luZygpLCBfZm9udC0+bGV0dGVyU3Bh
Y2luZygpKSwgdHJ1ZSk7Ci0gICAgbV9mb250TGlzdC5hcHBlbmQocGFpcjxjb25zdCBGb250RGF0
YSosIGJvb2w+KHJlc3VsdCwgdHJ1ZSkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWNvbnN0
IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUZvckNoYXJhY3RlcnMoY29uc3Qg
V2ViQ29yZTo6Rm9udCogZm9udCwgY29uc3QgVUNoYXIqLCBpbnQpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIHByaW1hcnlGb250RGF0YShmb250KTsKLX0KLQotdm9pZCBGb250RmFsbGJhY2tMaXN0Ojpz
ZXRQbGF0Zm9ybUZvbnQoY29uc3QgV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YSYpCi17Ci0gICAg
bV9mYW1pbHlJbmRleCA9IGNBbGxGYW1pbGllc1NjYW5uZWQ7Ci19Ci0KLX0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggOTIyMTlmZC4u
ZjcxNzkzZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxh
dGZvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZv
cm1EYXRhLmgKQEAgLTI2LDYgKzI2LDcgQEAKIAogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5o
IgogI2luY2x1ZGUgPFFGb250PgorI2luY2x1ZGUgPFFIYXNoPgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTQxLDYgKzQyLDEzIEBAIHB1YmxpYzoKICAgICBGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYsIGludCB3b3JkU3BhY2luZyA9IDAsIGludCBsZXR0ZXJTcGFj
aW5nID0gMCk7CiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBRRm9udCYsIGJvb2wgYm9sZCk7
CiAKKyAgICBGb250UGxhdGZvcm1EYXRhKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
KyAgICAgICAgOiBtX2lzRGVsZXRlZFZhbHVlKHRydWUpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lzRGVsZXRlZFZh
bHVlOyB9CisKICAgICBzdGF0aWMgaW5saW5lIFFGb250OjpXZWlnaHQgdG9RRm9udFdlaWdodChG
b250V2VpZ2h0IGZvbnRXZWlnaHQpCiAgICAgewogICAgICAgICBzd2l0Y2ggKGZvbnRXZWlnaHQp
IHsKQEAgLTY5LDE1ICs3NywzNCBAQCBwdWJsaWM6CiAgICAgYm9vbCBpdGFsaWMoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQuaXRhbGljKCk7IH0KICAgICBib29sIHNtYWxsQ2FwcygpIGNvbnN0IHsg
cmV0dXJuIG1fZm9udC5jYXBpdGFsaXphdGlvbigpID09IFFGb250OjpTbWFsbENhcHM7IH0KICAg
ICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9mb250LnBpeGVsU2l6ZSgpOyB9Cisg
ICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0CisgICAgeworICAgICAgICBmbG9hdCBzaXplID0gbV9z
aXplOworICAgICAgICByZXR1cm4gcUhhc2gobV9pc0RlbGV0ZWRWYWx1ZSkKKyAgICAgICAgICAg
ICAgIF4gcUhhc2gobV9ib2xkKQorICAgICAgICAgICAgICAgXiBxSGFzaChtX29ibGlxdWUpCisg
ICAgICAgICAgICAgICBeIHFIYXNoKCpyZWludGVycHJldF9jYXN0PHF1aW50MzIqPigmc2l6ZSkp
CisgICAgICAgICAgICAgICBeIHFIYXNoKG1fZm9udC50b1N0cmluZygpKTsKKyAgICB9CisKKyAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gKG1faXNEZWxldGVkVmFsdWUgJiYgbV9pc0RlbGV0ZWRWYWx1
ZSA9PSBvdGhlci5tX2lzRGVsZXRlZFZhbHVlKQorICAgICAgICAgICAgICAgIHx8IChtX2JvbGQg
PT0gb3RoZXIubV9ib2xkCisgICAgICAgICAgICAgICAgICAgICYmIG1fb2JsaXF1ZSA9PSBvdGhl
ci5tX29ibGlxdWUKKyAgICAgICAgICAgICAgICAgICAgJiYgbV9zaXplID09IG90aGVyLm1fc2l6
ZQorICAgICAgICAgICAgICAgICAgICAmJiBtX2ZvbnQgPT0gbV9mb250KTsKKyAgICB9CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAjZW5kaWYKIAot
ICAgIGZsb2F0IG1fc2l6ZTsKLSAgICBib29sIG1fYm9sZDsKLSAgICBib29sIG1fb2JsaXF1ZTsK
ICAgICBRRm9udCBtX2ZvbnQ7CisgICAgZmxvYXQgbV9zaXplOworICAgIGJvb2wgbV9ib2xkIDog
MTsKKyAgICBib29sIG1fb2JsaXF1ZSA6IDE7CisgICAgYm9vbCBtX2lzRGVsZXRlZFZhbHVlIDog
MTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcAppbmRleCA3NzA5YmU2Li4wNThi
YjIxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9y
bURhdGFRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZv
cm1EYXRhUXQuY3BwCkBAIC0zMCw2ICszMCw3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgaW50IHdvcmRTCiAg
ICAgOiBtX3NpemUoMC4wZikKICAgICAsIG1fYm9sZChmYWxzZSkKICAgICAsIG1fb2JsaXF1ZShm
YWxzZSkKKyAgICAsIG1faXNEZWxldGVkVmFsdWUoZmFsc2UpCiB7CiAgICAgUVN0cmluZyBmYW1p
bHlOYW1lOwogICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1p
bHkoKTsKQEAgLTU1LDEwICs1NiwxMSBAQCBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1E
YXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGludCB3b3JkUwogfQogCiBG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IFFGb250JiBmb250LCBib29s
IGJvbGQpCi0gICAgOiBtX3NpemUoZm9udC5wb2ludFNpemUoKSkKKyAgICA6IG1fZm9udChmb250
KQorICAgICwgbV9zaXplKGZvbnQucG9pbnRTaXplKCkpCiAgICAgLCBtX2JvbGQoYm9sZCkKICAg
ICAsIG1fb2JsaXF1ZShmYWxzZSkKLSAgICAsIG1fZm9udChmb250KQorICAgICwgbV9pc0RlbGV0
ZWRWYWx1ZShmYWxzZSkKIHsKIH0KIApAQCAtNjcsMTQgKzY5LDE2IEBAIEZvbnRQbGF0Zm9ybURh
dGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUp
CiAgICAgOiBtX3NpemUoc2l6ZSkKICAgICAsIG1fYm9sZChib2xkKQogICAgICwgbV9vYmxpcXVl
KG9ibGlxdWUpCisgICAgLCBtX2lzRGVsZXRlZFZhbHVlKGZhbHNlKQogewogfQogI2VuZGlmCiAK
IEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoKQotICAgIDogbV9zaXplKDAuMGYp
CisgICAgOiBtX3NpemUobV9mb250LnBvaW50U2l6ZSgpKQogICAgICwgbV9ib2xkKGZhbHNlKQog
ICAgICwgbV9vYmxpcXVlKGZhbHNlKQorICAgICwgbV9pc0RlbGV0ZWRWYWx1ZShmYWxzZSkKIHsK
IH0KIAo=
</data>
<flag name="review"
          id="23693"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>42097</attachid>
            <date>2009-10-29 07:51:23 -0700</date>
            <delta_ts>2009-10-29 07:51:23 -0700</delta_ts>
            <desc>Memory footprint of the cycler test (without the patch)</desc>
            <filename>without_patch.profile.png</filename>
            <type>image/png</type>
            <size>7068</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>42098</attachid>
            <date>2009-10-29 07:51:51 -0700</date>
            <delta_ts>2009-10-29 07:51:51 -0700</delta_ts>
            <desc>Memory footprint of the cycler test (with patch)</desc>
            <filename>with_patch.profile.png</filename>
            <type>image/png</type>
            <size>6474</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>42101</attachid>
            <date>2009-10-29 08:26:22 -0700</date>
            <delta_ts>2009-10-29 08:26:22 -0700</delta_ts>
            <desc>Memory footprint of the cycler test without the last test (without patch)</desc>
            <filename>without_patch_2.profile.png</filename>
            <type>image/png</type>
            <size>7961</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">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
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>42102</attachid>
            <date>2009-10-29 08:27:05 -0700</date>
            <delta_ts>2009-10-29 08:27:05 -0700</delta_ts>
            <desc>Memory footprint of the cycler test without the last test (with patch)</desc>
            <filename>with_patch_2.profile.png</filename>
            <type>image/png</type>
            <size>7811</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">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
YII=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43356</attachid>
            <date>2009-11-17 05:47:11 -0800</date>
            <delta_ts>2009-11-18 02:22:16 -0800</delta_ts>
            <desc>Simple patch to fix the SVG crash</desc>
            <filename>simple_font_check.patch</filename>
            <type>text/plain</type>
            <size>4178</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">Y29tbWl0IGFiZTFjMmY4N2VjZGQ3OGI5MGU1ZTA1Y2Q1MzBmMTFiNjc0ODU0Y2EKQXV0aG9yOiBC
ZW5qYW1pbiBQb3VsYWluIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KRGF0ZTogICBUdWUg
Tm92IDE3IDE0OjQ0OjE5IDIwMDkgKzAxMDAKCiAgICBTaW1wbGUgZm9udCBwYXRjaAoKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCA3MjE1YzUxLi42MWQ3ZWJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTEtMTcgIEJl
bmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXN0b20gcHJpbnRpbmcgc2hy
aW5rIGZhY3RvcnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTI5MDQyCisKKyAgICAgICAgKiBzdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1mb250LWludmFs
aWQuc3ZnOiBBZGRlZC4KKyAgICAgICAgKiBzdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBl
Y3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHN2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0
bWw6IEFkZGVkLgorCiAyMDA5LTExLTE3ICBZdXRhIEtpdGFtdXJhICA8eXV0YWtAY2hyb21pdW0u
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1pbnZhbGlkLnN2ZyBiL0xheW91
dFRlc3RzL3N2Zy90ZXh0L3Jlc291cmNlcy90ZXh0LWZvbnQtaW52YWxpZC5zdmcKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5ZTAwNgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3N2Zy90ZXh0L3Jlc291cmNlcy90ZXh0LWZvbnQtaW52YWxpZC5zdmcKQEAgLTAs
MCArMSwxNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIj8+Cis8IURPQ1RZUEUgc3ZnIFBVQkxJQyAi
LS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcv
MS4xL0RURC9zdmcxMS5kdGQiPgorPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9z
dmciIHhtbG5zOnhsPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB2ZXJzaW9uPSIxLjEi
PgorICA8ZGVmcz4KKyAgICA8Zm9udC1mYWNlIGZvbnQtZmFtaWx5PSJBcmJpdHJhcnkgZm9udCBu
b3Qgb24gdGhlIHN5c3RlbSI+CisgICAgPGZvbnQtZmFjZS1zcmM+CisgICAgICA8Zm9udC1mYWNl
LW5hbWUgbmFtZT0iVmVyeVVubGlrZWx5VG9FeGlzdEZvbnQiLz4KKyAgICA8L2ZvbnQtZmFjZS1z
cmM+CisgICAgPC9mb250LWZhY2U+CisgIDwvZGVmcz4KKyAgPGc+CisgICAgPHRleHQ+CisgICAg
ICA8dHNwYW4gZm9udC1mYW1pbHk9IkFyYml0cmFyeSBmb250IG5vdCBvbiB0aGUgc3lzdGVtIj5G
b29iYXI8L3RzcGFuPgorICAgIDwvdGV4dD4KKyAgPC9nPgorPC9zdmc+CisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3N2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3N2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzg0OGQ2Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsMyBAQAorVGhpcyB0ZXN0IGlzIHRvIGVuc3VyZSB0aGF0IHdlIGRvIG5vdCBjcmFzaCB3
aGVuIGxvYWRpbmcgYSBTVkcgaW1hZ2Ugd2l0aG91dCBhIHZhbGlkIGZvbnQtZmFtaWx5CitQQVNT
OiBEaWQgbm90IGNyYXNoIHdoZW4gcmVuZGVyaW5nIHRoZSBTVkcgaW1hZ2UuCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3N2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWwgYi9MYXlvdXRU
ZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLjdjOWExNmYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9z
dmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzxodG1sPgor
ICA8Ym9keT4KKyAgICBUaGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRoYXQgd2UgZG8gbm90IGNyYXNo
IHdoZW4gbG9hZGluZyBhIFNWRyBpbWFnZSB3aXRob3V0IGEgdmFsaWQgZm9udC1mYW1pbHkKKyAg
ICA8ZGl2IGlkPSJsb2ciPjxzcGFuIHN0eWxlPSdjb2xvcjogcmVkOyc+RkFJTDo8L3NwYW4+IERp
ZCBub3QgY29tcGxldGUgdGVzdDwvZGl2PgorICAgIDxpbWcgc3JjPSJyZXNvdXJjZXMvdGV4dC1m
b250LWludmFsaWQuc3ZnIiAvPgorICAgIDxzY3JpcHQ+CisgICAgICAgIGlmICh3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1w
QXNUZXh0KCk7CisgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJsb2ciKS5pbm5lckhU
TUwgPSAiPHNwYW4gc3R5bGU9J2NvbG9yOiBncmVlbjsnPlBBU1M6PC9zcGFuPiBEaWQgbm90IGNy
YXNoIHdoZW4gcmVuZGVyaW5nIHRoZSBTVkcgaW1hZ2UuIjsKKyAgICA8L3NjcmlwdD4KKyAgPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAxNmEzZmUxLi5jMDA2ODY2IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5n
ZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDA5LTExLTE3
ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW4ucG91bGFpbkBub2tpYS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VzdG9tIHByaW50aW5n
IHNocmluayBmYWN0b3JzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yOTA0MgorCisgICAgICAgIENoZWNrIGlmIHRoZSBmYW1pbGx5IGV4aXN0IGJlZm9y
ZSBjcmVhdGluZyB0aGUgUGxhdGZvcm1EYXRhIGZyb20gaXQuCisKKyAgICAgICAgVGVzdDogc3Zn
L3RleHQvdGV4dC1mb250LWludmFsaWQuaHRtbAorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRGYWxs
YmFja0xpc3Q6OmZvbnREYXRhQXQpOgorCiAyMDA5LTExLTE3ICBBbmRyZWkgUG9wZXNjdSAgPGFu
ZHJlaXBAZ29vZ2xlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEaW1pdHJpIEdsYXprb3Yu
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xp
c3RRdC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RR
dC5jcHAKaW5kZXggOGUxZTRmNi4uMDMwNmFiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcApAQCAtMTAyLDcgKzEwMiw3IEBA
IGNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KGNvbnN0IFdlYkNv
cmU6OkZvbnQqIF9mb250LCB1bnNpZ25lCiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNj
cmlwdGlvbiA9IF9mb250LT5mb250RGVzY3JpcHRpb24oKTsKICAgICBjb25zdCBGb250RmFtaWx5
KiBmYW1pbHkgPSAmZGVzY3JpcHRpb24uZmFtaWx5KCk7CiAgICAgd2hpbGUgKGZhbWlseSkgewot
ICAgICAgICBpZiAobV9mb250U2VsZWN0b3IpIHsKKyAgICAgICAgaWYgKGZhbWlseS0+ZmFtaWx5
KCkubGVuZ3RoKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKICAgICAgICAgICAgIEZvbnREYXRhKiBk
YXRhID0gbV9mb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHktPmZh
bWlseSgpKTsKICAgICAgICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRh
dGEtPmlzTG9hZGluZygpKQo=
</data>
<flag name="review"
          id="25052"
          type_id="1"
          status="-"
          setter="hausmann"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>43420</attachid>
            <date>2009-11-18 02:22:16 -0800</date>
            <delta_ts>2009-11-18 02:29:58 -0800</delta_ts>
            <desc>Simple patch to fix the SVG crash</desc>
            <filename>simple_font_check.patch</filename>
            <type>text/plain</type>
            <size>4163</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA2Njc0ZDlmLi5kNjMwNGYyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMDktMTEt
MTggIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFdlYktpdCBj
cmFzaGVzIHdoZW4gbG9hZGluZyBjZXJ0YWluIFNWRyBpbWFnZXMKKworICAgICAgICBBZGRlZCBh
IHRlc3QgZm9yIGEgY3Jhc2ggb2YgUXRXZWJraXQgd2hlbiBsb2FkaW5nIFNWRyBpbWFnZXMuCisK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5NDQzCisK
KyAgICAgICAgKiBzdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1mb250LWludmFsaWQuc3ZnOiBBZGRl
ZC4KKyAgICAgICAgKiBzdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHN2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWw6IEFkZGVkLgor
CiAyMDA5LTExLTE3ICBQYXZlbCBGZWxkbWFuICA8cGZlbGRtYW5AY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIE5vdCByZXZpZXdlZCwgdGVzdHMgZml4LiBGb2xsb3cgdXAgdG8gcjUxMDcyOiBtb3Zl
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9zdmcvdGV4dC9yZXNvdXJjZXMvdGV4dC1mb250LWlu
dmFsaWQuc3ZnIGIvTGF5b3V0VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1pbnZh
bGlkLnN2ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjllMDA2Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvc3ZnL3RleHQvcmVzb3VyY2VzL3RleHQtZm9udC1p
bnZhbGlkLnN2ZwpAQCAtMCwwICsxLDE3IEBACis8P3htbCB2ZXJzaW9uPSIxLjAiPz4KKzwhRE9D
VFlQRSBzdmcgUFVCTElDICItLy9XM0MvL0RURCBTVkcgMS4xLy9FTiIgImh0dHA6Ly93d3cudzMu
b3JnL0dyYXBoaWNzL1NWRy8xLjEvRFREL3N2ZzExLmR0ZCI+Cis8c3ZnIHhtbG5zPSJodHRwOi8v
d3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGw9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxp
bmsiIHZlcnNpb249IjEuMSI+CisgIDxkZWZzPgorICAgIDxmb250LWZhY2UgZm9udC1mYW1pbHk9
IkFyYml0cmFyeSBmb250IG5vdCBvbiB0aGUgc3lzdGVtIj4KKyAgICA8Zm9udC1mYWNlLXNyYz4K
KyAgICAgIDxmb250LWZhY2UtbmFtZSBuYW1lPSJWZXJ5VW5saWtlbHlUb0V4aXN0Rm9udCIvPgor
ICAgIDwvZm9udC1mYWNlLXNyYz4KKyAgICA8L2ZvbnQtZmFjZT4KKyAgPC9kZWZzPgorICA8Zz4K
KyAgICA8dGV4dD4KKyAgICAgIDx0c3BhbiBmb250LWZhbWlseT0iQXJiaXRyYXJ5IGZvbnQgbm90
IG9uIHRoZSBzeXN0ZW0iPkZvb2JhcjwvdHNwYW4+CisgICAgPC90ZXh0PgorICA8L2c+Cis8L3N2
Zz4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFsaWQtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjODQ4ZDYKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9zdmcvdGV4dC90ZXh0LWZvbnQtaW52YWxpZC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwzIEBACitUaGlzIHRlc3QgaXMgdG8gZW5zdXJlIHRoYXQg
d2UgZG8gbm90IGNyYXNoIHdoZW4gbG9hZGluZyBhIFNWRyBpbWFnZSB3aXRob3V0IGEgdmFsaWQg
Zm9udC1mYW1pbHkKK1BBU1M6IERpZCBub3QgY3Jhc2ggd2hlbiByZW5kZXJpbmcgdGhlIFNWRyBp
bWFnZS4KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvc3ZnL3RleHQvdGV4dC1mb250LWludmFs
aWQuaHRtbCBiL0xheW91dFRlc3RzL3N2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWwKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5YTE2ZgotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL3N2Zy90ZXh0L3RleHQtZm9udC1pbnZhbGlkLmh0bWwKQEAgLTAsMCAr
MSwxMiBAQAorPGh0bWw+CisgIDxib2R5PgorICAgIFRoaXMgdGVzdCBpcyB0byBlbnN1cmUgdGhh
dCB3ZSBkbyBub3QgY3Jhc2ggd2hlbiBsb2FkaW5nIGEgU1ZHIGltYWdlIHdpdGhvdXQgYSB2YWxp
ZCBmb250LWZhbWlseQorICAgIDxkaXYgaWQ9ImxvZyI+PHNwYW4gc3R5bGU9J2NvbG9yOiByZWQ7
Jz5GQUlMOjwvc3Bhbj4gRGlkIG5vdCBjb21wbGV0ZSB0ZXN0PC9kaXY+CisgICAgPGltZyBzcmM9
InJlc291cmNlcy90ZXh0LWZvbnQtaW52YWxpZC5zdmciIC8+CisgICAgPHNjcmlwdD4KKyAgICAg
ICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoImxvZyIpLmlubmVySFRNTCA9ICI8c3BhbiBzdHlsZT0nY29sb3I6IGdyZWVuOyc+UEFTUzo8
L3NwYW4+IERpZCBub3QgY3Jhc2ggd2hlbiByZW5kZXJpbmcgdGhlIFNWRyBpbWFnZS4iOworICAg
IDwvc2NyaXB0PgorICA8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5n
ZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDU2NWVlNjEuLmYxNzc4ZTMgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTggQEAKKzIwMDktMTEtMTggIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5v
a2lhLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBbUXRdIFdlYktpdCBjcmFzaGVzIHdoZW4gbG9hZGluZyBjZXJ0YWluIFNWRyBpbWFnZXMKKwor
ICAgICAgICBDaGVjayBpZiB0aGUgZmFtaWxseSBleGlzdCBiZWZvcmUgY3JlYXRpbmcgdGhlIFBs
YXRmb3JtRGF0YSBmcm9tIGl0LgorCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yOTQ0MworCisgICAgICAgIFRlc3Q6IHN2Zy90ZXh0L3RleHQtZm9udC1p
bnZhbGlkLmh0bWwKKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFj
a0xpc3RRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0
YUF0KToKKwogMjAwOS0xMS0xNyAgUGF2ZWwgRmVsZG1hbiAgPHBmZWxkbWFuQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW1vdGh5IEhhdGNoZXIuCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAKaW5kZXggOGUx
ZTRmNi4uMDMwNmFiZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9G
b250RmFsbGJhY2tMaXN0UXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udEZhbGxiYWNrTGlzdFF0LmNwcApAQCAtMTAyLDcgKzEwMiw3IEBAIGNvbnN0IEZvbnREYXRh
KiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250
LCB1bnNpZ25lCiAgICAgY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiA9IF9mb250
LT5mb250RGVzY3JpcHRpb24oKTsKICAgICBjb25zdCBGb250RmFtaWx5KiBmYW1pbHkgPSAmZGVz
Y3JpcHRpb24uZmFtaWx5KCk7CiAgICAgd2hpbGUgKGZhbWlseSkgewotICAgICAgICBpZiAobV9m
b250U2VsZWN0b3IpIHsKKyAgICAgICAgaWYgKGZhbWlseS0+ZmFtaWx5KCkubGVuZ3RoKCkgJiYg
bV9mb250U2VsZWN0b3IpIHsKICAgICAgICAgICAgIEZvbnREYXRhKiBkYXRhID0gbV9mb250U2Vs
ZWN0b3ItPmdldEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHktPmZhbWlseSgpKTsKICAgICAg
ICAgICAgIGlmIChkYXRhKSB7CiAgICAgICAgICAgICAgICAgaWYgKGRhdGEtPmlzTG9hZGluZygp
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44277</attachid>
            <date>2009-12-03 16:52:32 -0800</date>
            <delta_ts>2009-12-04 03:13:02 -0800</delta_ts>
            <desc>Refactoring of the font cache to use the common FontCache</desc>
            <filename>font_cache_refactoring.patch</filename>
            <type>text/plain</type>
            <size>23983</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IDc5ZjAzYmIuLjViZjYzZTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtMTE5Miw2ICsxMTkyLDcgQEAgU09VUkNFUyArPSBc
CiAgICAgcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBcCiAgICAgcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udERlc2NyaXB0aW9uLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udEZhbGxiYWNrTGlzdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1p
bHkuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL0NvbG9yLmNwcCBcCkBAIC0xMjAyLDYgKzEyMDMsNyBAQCBTT1VSQ0VT
ICs9IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9Gb250RGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3Bw
IFwKKyAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9HZW5lcmF0ZWRJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRp
ZW50LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBcCkBA
IC0yMzg5LDcgKzIzOTEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9TaGFyZWRC
dWZmZXJRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcCBc
CiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgXAot
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAgXAogICAgIHBs
YXRmb3JtL2dyYXBoaWNzL3F0L0dseXBoUGFnZVRyZWVOb2RlUXQuY3BwIFwKICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9xdC9TaW1wbGVGb250RGF0YVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvS1VS
TFF0LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRD
YWNoZVF0LmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3Bw
CmluZGV4IDRlZjAzYTUuLjJhYTllMTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udENhY2hlUXQuY3BwCkBAIC0zOCwyNTYgKzM4LDMyIEBAIHVzaW5nIG5hbWVzcGFjZSBX
VEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotRm9udENhY2hlKiBmb250Q2FjaGUoKQordm9p
ZCBGb250Q2FjaGU6OnBsYXRmb3JtSW5pdCgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChG
b250Q2FjaGUsIGdsb2JhbEZvbnRDYWNoZSwgKCkpOwotICAgIHJldHVybiAmZ2xvYmFsRm9udENh
Y2hlOwogfQogCi1Gb250Q2FjaGU6OkZvbnRDYWNoZSgpCi17Ci19Ci0KLXZvaWQgRm9udENhY2hl
OjpnZXRUcmFpdHNJbkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+
JikKLXsKLX0KLQotLy8gVGhpcyB0eXBlIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIEZvbnRQbGF0
Zm9ybURhdGEncyBjdG9yIC0gdGhlIG9uZSB3aGljaAotLy8gZ2V0cyBGb250RGVzY3JpcHRpb24g
YXMgaXQncyBwYXJhbWV0ZXIuCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewotcHVi
bGljOgotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBGb250RGVzY3JpcHRpb24m
IGRlc2NyaXB0aW9uKQotICAgICAgICA6IG1fZmFtaWx5TmFtZSgpCi0gICAgICAgICwgbV9zaXpl
KGRlc2NyaXB0aW9uLmNvbXB1dGVkUGl4ZWxTaXplKCkpCi0gICAgICAgICwgbV9ib2xkKGZhbHNl
KQotICAgICAgICAsIG1faXRhbGljKGRlc2NyaXB0aW9uLml0YWxpYygpKQotICAgICAgICAsIG1f
c21hbGxDYXBzKGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpKQotICAgICAgICAsIG1faGFzaCgwKQot
ICAgIHsKLSAgICAgICAgLy8gRklYTUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1ZXMgdG8gUUZv
bnQgd2VpZ2h0cyBpbiBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciBhbmQgZm9sbG93IGl0IGhlcmUK
LSAgICAgICAgaWYgKEZvbnRQbGF0Zm9ybURhdGE6OnRvUUZvbnRXZWlnaHQoZGVzY3JpcHRpb24u
d2VpZ2h0KCkpID4gUUZvbnQ6Ok5vcm1hbCkKLSAgICAgICAgICAgIG1fYm9sZCA9IHRydWU7Ci0K
LSAgICAgICAgY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZhbWlseSgp
OwotICAgICAgICB3aGlsZSAoZmFtaWx5KSB7Ci0gICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBw
ZW5kKGZhbWlseS0+ZmFtaWx5KCkpOwotICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5LT5uZXh0
KCk7Ci0gICAgICAgICAgICBpZiAoZmFtaWx5KQotICAgICAgICAgICAgICAgIG1fZmFtaWx5TmFt
ZS5hcHBlbmQoJywnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbXB1dGVIYXNoKCk7Ci0gICAg
fQotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IGZvbnREYXRhKQotICAgICAgICA6IG1fZmFtaWx5TmFtZShzdGF0aWNfY2FzdDxTdHJpbmc+KGZv
bnREYXRhLmZhbWlseSgpKSkKLSAgICAgICAgLCBtX3NpemUoZm9udERhdGEucGl4ZWxTaXplKCkp
Ci0gICAgICAgICwgbV9ib2xkKGZvbnREYXRhLmJvbGQoKSkKLSAgICAgICAgLCBtX2l0YWxpYyhm
b250RGF0YS5pdGFsaWMoKSkKLSAgICAgICAgLCBtX3NtYWxsQ2Fwcyhmb250RGF0YS5zbWFsbENh
cHMoKSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAgICB7Ci0gICAgICAgIGNvbXB1dGVIYXNoKCk7
Ci0gICAgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURlbGV0ZWRW
YWx1ZVR5cGUpIDogbV9zaXplKGhhc2hUYWJsZURlbGV0ZWRTaXplKCkpIHsgfQotICAgIGJvb2wg
aXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NpemUgPT0gaGFzaFRh
YmxlRGVsZXRlZFNpemUoKTsgfQotCi0gICAgZW51bSBIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSB7
IEhhc2hUYWJsZUVtcHR5VmFsdWUgfTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShI
YXNoVGFibGVFbXB0eVZhbHVlVHlwZSkKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoKQotICAgICAg
ICAsIG1fc2l6ZSgwKQotICAgICAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAgICAgLCBtX2l0YWxp
YyhmYWxzZSkKLSAgICAgICAgLCBtX3NtYWxsQ2FwcyhmYWxzZSkKLSAgICAgICAgLCBtX2hhc2go
MCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9oYXNoICE9
IG90aGVyLm1faGFzaCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1
cm4gZXF1YWxJZ25vcmluZ0Nhc2UobV9mYW1pbHlOYW1lLCBvdGhlci5tX2ZhbWlseU5hbWUpICYm
IG1fc2l6ZSA9PSBvdGhlci5tX3NpemUgJiYKLSAgICAgICAgICAgIG1fYm9sZCA9PSBvdGhlci5t
X2JvbGQgJiYgbV9pdGFsaWMgPT0gb3RoZXIubV9pdGFsaWMgJiYgbV9zbWFsbENhcHMgPT0gb3Ro
ZXIubV9zbWFsbENhcHM7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gbV9oYXNoOwotICAgIH0KLQotICAgIHZvaWQgY29tcHV0ZUhhc2go
KQotICAgIHsKLSAgICAgICAgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7Ci0gICAgICAgICAgICBD
YXNlRm9sZGluZ0hhc2g6Omhhc2gobV9mYW1pbHlOYW1lKSwKLSAgICAgICAgICAgIG1fc2l6ZSB8
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX2JvbGQgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4IC0g
MSkpCi0gICAgICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9pdGFsaWMpIDw8
IChzaXplb2YodW5zaWduZWQpICogOCAtIDIpCi0gICAgICAgICAgICAgICAgfCBzdGF0aWNfY2Fz
dDx1bnNpZ25lZD4obV9zbWFsbENhcHMpIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIDMpCi0g
ICAgICAgIH07Ci0gICAgICAgIG1faGFzaCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50
ZXJwcmV0X2Nhc3Q8VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVv
ZihVQ2hhcikpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOwot
ICAgIGludCBtX3NpemU7Ci0gICAgYm9vbCBtX2JvbGQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLSAg
ICBib29sIG1fc21hbGxDYXBzOwotICAgIHVuc2lnbmVkIG1faGFzaDsKLQotICAgIHN0YXRpYyB1
bnNpZ25lZCBoYXNoVGFibGVEZWxldGVkU2l6ZSgpIHsgcmV0dXJuIDB4RkZGRkZGRkZVOyB9Ci19
OwotCi1zdHJ1Y3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpCi0gICAgewot
ICAgICAgICByZXR1cm4ga2V5Lmhhc2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVh
bChjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleSYgYikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQotCi0g
ICAgc3RhdGljIGNvbnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVl
OwotfTsKLQotc3RydWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2Vu
ZXJpY0hhc2hUcmFpdHM8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiB7Ci0gICAgc3RhdGljIGNv
bnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwga2V5LCAoRm9udFBsYXRmb3Jt
RGF0YUNhY2hlS2V5OjpIYXNoVGFibGVFbXB0eVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBrZXk7
Ci0gICAgfQotICAgIHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkmIHNsb3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3Rh
dGljIGJvb2wgaXNEZWxldGVkVmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiB2
YWx1ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSgpOwotICAgIH0KLX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXksIEZvbnRQbGF0Zm9ybURhdGEqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotLy8g
dXNpbmcgUV9HTE9CQUxfU1RBVElDIGxlYWRzIHRvIGNyYXNoLiBUT0RPIGludmVzdGlnYXRlIHRo
ZSB3YXkgdG8gZml4IHRoaXMuCi1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBs
YXRmb3JtRGF0YUNhY2hlID0gMDsKLQotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRD
YWNoZWRGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYsIGJvb2wpCi17Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0
YUNhY2hlKQotICAgICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZGVzY3JpcHRp
b24pOwotICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1E
YXRhQ2FjaGUtPmdldChrZXkpOwotICAgIGlmICghcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIHBs
YXRmb3JtRGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKTsKLSAgICAgICAg
Z0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+YWRkKGtleSwgcGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIHBsYXRmb3JtRGF0YTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+
IEZvbnREYXRhQ2FjaGU7Ci0KLXN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9
IDA7Ci0KLXN0YXRpYyBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSA0MDsKLXN0YXRp
YyBjb25zdCBpbnQgY1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAzMjsKLQotc3RhdGljIExpc3RI
YXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsK
LQotU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSogZm9udFBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdGb250RGF0YUNh
Y2hlKSB7Ci0gICAgICAgIGdGb250RGF0YUNhY2hlID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAg
ICAgIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gbmV3IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZv
bnREYXRhKj47Ci0gICAgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9u
dFBsYXRmb3JtRGF0YSk7Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERh
dGFDYWNoZS0+ZmluZChrZXkpOwotICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkp
IHsKLSAgICAgICAgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRh
KCpmb250UGxhdGZvcm1EYXRhKTsKLSAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0
ZDo6cGFpcjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPihmb250RGF0YSwgMSkpOwotICAgICAg
ICByZXR1cm4gZm9udERhdGE7Ci0gICAgfQotICAgIGlmICghaXQtPnNlY29uZC5zZWNvbmQrKykg
ewotICAgICAgICBBU1NFUlQoZ0luYWN0aXZlRm9udERhdGFTZXQtPmNvbnRhaW5zKGl0LT5zZWNv
bmQuZmlyc3QpKTsKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShpdC0+c2Vj
b25kLmZpcnN0KTsKLSAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLUZv
bnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25z
dCBGb250RGVzY3JpcHRpb24mKQorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGFGb3JDaGFyYWN0ZXJzKGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciosIGludCkKIHsK
ICAgICByZXR1cm4gMDsKIH0KIAotdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25z
dCBXZWJDb3JlOjpTaW1wbGVGb250RGF0YSogZm9udERhdGEpCitGb250UGxhdGZvcm1EYXRhKiBG
b250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQmIGZvbnQpCiB7
Ci0gICAgQVNTRVJUKGdGb250RGF0YUNhY2hlKTsKLSAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1
c3RvbUZvbnQoKSk7Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGZvbnREYXRh
LT5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9u
dERhdGFDYWNoZS0+ZmluZChrZXkpOwotICAgIEFTU0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+
ZW5kKCkpOwotICAgIGlmICghLS1pdC0+c2Vjb25kLnNlY29uZCkgewotICAgICAgICBnSW5hY3Rp
dmVGb250RGF0YVNldC0+YWRkKGl0LT5zZWNvbmQuZmlyc3QpOwotICAgICAgICBpZiAoZ0luYWN0
aXZlRm9udERhdGFTZXQtPnNpemUoKSA+IGNNYXhJbmFjdGl2ZUZvbnREYXRhKQotICAgICAgICAg
ICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgLSBj
VGFyZ2V0SW5hY3RpdmVGb250RGF0YSk7Ci0gICAgfQotfQotCi12b2lkIEZvbnRDYWNoZTo6cHVy
Z2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCkKLXsKLSAgICBzdGF0aWMgYm9vbCBpc1B1cmdp
bmc7ICAvLyBHdWFyZCBhZ2FpbnN0IHJlZW50cnkgd2hlbiBlLmcuIGEgZGVsZXRlZCBGb250RGF0
YSByZWxlYXNlcyBpdHMgc21hbGwgY2FwcyBGb250RGF0YS4KLSAgICBpZiAoaXNQdXJnaW5nKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBpc1B1cmdpbmcgPSB0cnVlOwotCi0gICAgTGlzdEhhc2hT
ZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0
YVNldC0+YmVnaW4oKTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+Ojpp
dGVyYXRvciBlbmQgPSBnSW5hY3RpdmVGb250RGF0YVNldC0+ZW5kKCk7Ci0gICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBjb3VudCAmJiBpdCAhPSBlbmQ7ICsraSwgKytpdCkgewotICAgICAgICBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5ID0gKCppdCktPnBsYXRmb3JtRGF0YSgpOwotICAgICAg
ICBwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+IGZvbnREYXRhUGFpciA9IGdGb250RGF0
YUNhY2hlLT50YWtlKGtleSk7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YVBhaXIuZmlyc3QgIT0g
MCk7Ci0gICAgICAgIEFTU0VSVCghZm9udERhdGFQYWlyLnNlY29uZCk7Ci0gICAgICAgIGRlbGV0
ZSBmb250RGF0YVBhaXIuZmlyc3Q7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZv
cm1EYXRhID0gZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZS0+dGFrZShrZXkpOwotICAgICAgICBpZiAo
cGxhdGZvcm1EYXRhKQotICAgICAgICAgICAgZGVsZXRlIHBsYXRmb3JtRGF0YTsKLSAgICB9Ci0K
LSAgICBpZiAoaXQgPT0gZW5kKSB7Ci0gICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0aGluZwotICAg
ICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+Y2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAg
ICBmb3IgKGludCBpID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBnSW5hY3RpdmVG
b250RGF0YVNldC0+cmVtb3ZlKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpKTsKLSAgICB9
Ci0KLSAgICBpc1B1cmdpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURh
dGEoZm9udC5mb250RGVzY3JpcHRpb24oKSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjphZGRDbGll
bnQoRm9udFNlbGVjdG9yKikKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJl
c29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3JpcHRpb24mKQogeworICAgIHJldHVybiBu
ZXcgRm9udFBsYXRmb3JtRGF0YSgpOwogfQogCi12b2lkIEZvbnRDYWNoZTo6cmVtb3ZlQ2xpZW50
KEZvbnRTZWxlY3RvciopCit2b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29uc3Qg
QXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpCiB7CiB9CiAKLXZvaWQgRm9udENhY2hl
OjppbnZhbGlkYXRlKCkKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3Qg
QXRvbWljU3RyaW5nJikKIHsKLSAgICBpZiAoIWdGb250UGxhdGZvcm1EYXRhQ2FjaGUgfHwgIWdG
b250RGF0YUNhY2hlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBwdXJnZUluYWN0aXZlRm9udERh
dGEoKTsKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMzA2YWJmLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEzOCArMCwwIEBA
Ci0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgot
Ci0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0g
ICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAgIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBub3QsIHdyaXRl
IHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KLQot
ICAgIFJlcGxhY2VtZW50IG9mIHRoZSBzdG9jayBGb250RmFsbGJhY2tMaXN0IGFzIFF0IGlzIGdv
aW5nIHRvIGZpbmQgdXMgYQotICAgIHJlcGxhY2VtZW50IGZvbnQsIHdpbGwgZG8gY2FjaGluZyBh
bmQgdGhlIG90aGVyIHN0dWZmIHdlIGltcGxlbWVudCBpbgotICAgIFdlYktpdC4KLSovCi0KLSNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCi0KLSNpbmNs
dWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVk
Rm9udERhdGEuaCIKLQotI2luY2x1ZGUgPFFEZWJ1Zz4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1Gb250RmFsbGJhY2tMaXN0OjpGb250RmFsbGJhY2tMaXN0KCkKLSAgICA6IG1fcGFnZVplcm8o
MCkKLSAgICAsIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKDApCi0gICAgLCBtX2ZvbnRT
ZWxlY3RvcigwKQotICAgICwgbV9mYW1pbHlJbmRleCgwKQotICAgICwgbV9waXRjaChVbmtub3du
UGl0Y2gpCi0gICAgLCBtX2xvYWRpbmdDdXN0b21Gb250cyhmYWxzZSkKLSAgICAsIG1fZ2VuZXJh
dGlvbigwKQotewotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmludmFsaWRhdGUoV1RGOjpQ
YXNzUmVmUHRyPFdlYkNvcmU6OkZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQotewotICAgIHJl
bGVhc2VGb250RGF0YSgpOwotICAgIG1fZm9udExpc3QuY2xlYXIoKTsKLSAgICBtX3BhZ2VaZXJv
ID0gMDsKLSAgICBtX3BhZ2VzLmNsZWFyKCk7Ci0gICAgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9u
dERhdGEgPSAwOwotICAgIG1fZmFtaWx5SW5kZXggPSAwOwotICAgIG1fcGl0Y2ggPSBVbmtub3du
UGl0Y2g7Ci0gICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSBmYWxzZTsKLSAgICBtX2ZvbnRTZWxl
Y3RvciA9IGZvbnRTZWxlY3RvcjsKLSAgICBtX2dlbmVyYXRpb24gPSAwOwotfQotCi12b2lkIEZv
bnRGYWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0YSgpCi17Ci0gICAgdW5zaWduZWQgbnVtRm9u
dHMgPSBtX2ZvbnRMaXN0LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbnVt
Rm9udHM7ICsraSkgewotICAgICAgICBpZiAobV9mb250TGlzdFtpXS5zZWNvbmQpCi0gICAgICAg
ICAgICBkZWxldGUgbV9mb250TGlzdFtpXS5maXJzdDsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBBU1NFUlQoIW1fZm9udExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVkKCkpOwotICAgICAg
ICAgICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KG1fZm9udExpc3RbaV0uZmlyc3QpKTsKLSAgICAgICAgfQotICAgIH0KLX0K
LQotdm9pZCBGb250RmFsbGJhY2tMaXN0OjpkZXRlcm1pbmVQaXRjaChjb25zdCBXZWJDb3JlOjpG
b250KiBmb250KSBjb25zdAotewotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0YSA9IHByaW1h
cnlGb250RGF0YShmb250KTsKLSAgICBpZiAoIWZvbnREYXRhLT5pc1NlZ21lbnRlZCgpKQotICAg
ICAgICBtX3BpdGNoID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEqPihmb250RGF0
YSktPnBpdGNoKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRlZEZvbnREYXRh
KiBzZWdtZW50ZWRGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNlZ21lbnRlZEZvbnREYXRh
Kj4oZm9udERhdGEpOwotICAgICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBzZWdtZW50ZWRGb250
RGF0YS0+bnVtUmFuZ2VzKCk7Ci0gICAgICAgIGlmIChudW1SYW5nZXMgPT0gMSkKLSAgICAgICAg
ICAgIG1fcGl0Y2ggPSBzZWdtZW50ZWRGb250RGF0YS0+cmFuZ2VBdCgwKS5mb250RGF0YSgpLT5w
aXRjaCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BpdGNoID0gVmFyaWFibGVQaXRj
aDsKLSAgICB9Ci19Ci0KLWNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0Ojpmb250RGF0
YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250LCB1bnNpZ25lZCBpbmRleCkgY29uc3QKLXsK
LSAgICBpZiAoaW5kZXggIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAvLyBTZWFyY2gg
Zm9yIHRoZSBXZWJDb3JlIGZvbnQgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBsaXN0Ci0gICAgZm9y
IChpbnQgaSA9IG1fZm9udExpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
cGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+IGl0ZW0gPSBtX2ZvbnRMaXN0W2ldOwotICAgICAg
ICAvLyBpdGVtLnNlY29uZCBtZWFucyB0aGF0IHRoZSBpdGVtIHdhcyBjcmVhdGVkIGxvY2FsbHkg
b3Igbm90Ci0gICAgICAgIGlmICghaXRlbS5zZWNvbmQpCi0gICAgICAgICAgICByZXR1cm4gaXRl
bS5maXJzdDsKLSAgICB9Ci0KLSAgICAvLyBVc2UgdGhlIEZvbnRTZWxlY3RvciB0byBnZXQgYSBX
ZWJDb3JlIGZvbnQgYW5kIHRoZW4gZmFsbGJhY2sgdG8gUXQKLSAgICBjb25zdCBGb250RGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uID0gX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwotICAgIGNvbnN0
IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAgICB3aGlsZSAo
ZmFtaWx5KSB7Ci0gICAgICAgIGlmIChmYW1pbHktPmZhbWlseSgpLmxlbmd0aCgpICYmIG1fZm9u
dFNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBGb250RGF0YSogZGF0YSA9IG1fZm9udFNlbGVjdG9y
LT5nZXRGb250RGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5LT5mYW1pbHkoKSk7Ci0gICAgICAgICAg
ICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIGlmIChkYXRhLT5pc0xvYWRpbmcoKSkKLSAg
ICAgICAgICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIGlmICghZGF0YS0+aXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
Ly8gQ3VzdG9tIGZvbnRzIGNhbiBiZSBmcmVlZCBhbnl0aW1lIHNvIHdlIG11c3Qgbm90IGhvbGQg
dGhlbQotICAgICAgICAgICAgICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZv
bnREYXRhKiwgYm9vbD4oZGF0YSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAg
ICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAg
ZmFtaWx5ID0gZmFtaWx5LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKG1fZm9udExpc3Quc2l6
ZSgpKQotICAgICAgICByZXR1cm4gbV9mb250TGlzdFswXS5maXJzdDsKLQotICAgIGNvbnN0IEZv
bnREYXRhKiByZXN1bHQgPSBuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3JtRGF0YShkZXNj
cmlwdGlvbiwgX2ZvbnQtPndvcmRTcGFjaW5nKCksIF9mb250LT5sZXR0ZXJTcGFjaW5nKCkpLCB0
cnVlKTsKLSAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4o
cmVzdWx0LCB0cnVlKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY29uc3QgRm9udERhdGEq
IEZvbnRGYWxsYmFja0xpc3Q6OmZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBXZWJDb3JlOjpG
b250KiBmb250LCBjb25zdCBVQ2hhciosIGludCkgY29uc3QKLXsKLSAgICByZXR1cm4gcHJpbWFy
eUZvbnREYXRhKGZvbnQpOwotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnNldFBsYXRmb3Jt
Rm9udChjb25zdCBXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhJikKLXsKLSAgICBtX2ZhbWlseUlu
ZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA1Y2Q2ZWQyLi43ZDE2NWJiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEu
aAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaApA
QCAtMjYsMjAgKzI2LDY1IEBACiAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNs
dWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRSGFzaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBTdHJpbmc7CitjbGFzcyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZQoreworcHVibGljOgor
ICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKCkKKyAgICAgICAgOiByZWZDb3VudCgxKQorICAg
ICAgICAsIHNpemUoMC4wZikKKyAgICAgICAgLCBib2xkKGZhbHNlKQorICAgICAgICAsIG9ibGlx
dWUoZmFsc2UpCisgICAge30KKyAgICBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZShjb25zdCBmbG9h
dCBzaXplLCBjb25zdCBib29sIGJvbGQsIGNvbnN0IGJvb2wgb2JsaXF1ZSkKKyAgICAgICAgOiBy
ZWZDb3VudCgxKQorICAgICAgICAsIHNpemUoc2l6ZSkKKyAgICAgICAgLCBib2xkKGJvbGQpCisg
ICAgICAgICwgb2JsaXF1ZShvYmxpcXVlKQorICAgIHt9CisgICAgRm9udFBsYXRmb3JtRGF0YVBy
aXZhdGUoY29uc3QgUUZvbnQmIGZvbnQsIGNvbnN0IGJvb2wgYm9sZCkKKyAgICAgICAgOiByZWZD
b3VudCgxKQorICAgICAgICAsIGZvbnQoZm9udCkKKyAgICAgICAgLCBzaXplKGZvbnQucG9pbnRT
aXplRigpKQorICAgICAgICAsIGJvbGQoYm9sZCkKKyAgICAgICAgLCBvYmxpcXVlKGZhbHNlKQor
ICAgIHt9CisgICAgdW5zaWduZWQgcmVmQ291bnQ7CisgICAgUUZvbnQgZm9udDsKKyAgICBmbG9h
dCBzaXplOworICAgIGJvb2wgYm9sZCA6IDE7CisgICAgYm9vbCBvYmxpcXVlIDogMTsKK307CisK
KwogCiBjbGFzcyBGb250UGxhdGZvcm1EYXRhIDogcHVibGljIEZhc3RBbGxvY0Jhc2UKIHsKIHB1
YmxpYzoKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQg
c2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotI2VuZGlmCiAgICAgRm9udFBsYXRmb3Jt
RGF0YSgpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29s
IG9ibGlxdWUpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSAm
KTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGludCB3b3Jk
U3BhY2luZyA9IDAsIGludCBsZXR0ZXJTcGFjaW5nID0gMCk7Ci0gICAgRm9udFBsYXRmb3JtRGF0
YShjb25zdCBRRm9udCYsIGJvb2wgYm9sZCk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBR
Rm9udCYgZm9udCwgYm9vbCBib2xkKQorICAgICAgICA6IG1fZGF0YShuZXcgRm9udFBsYXRmb3Jt
RGF0YVByaXZhdGUoZm9udCwgYm9sZCkpCisgICAge30KKyAgICBGb250UGxhdGZvcm1EYXRhKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2RhdGEocmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICB7fQorCisgICAgfkZv
bnRQbGF0Zm9ybURhdGEoKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25z
dCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmKSBjb25zdDsKKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YSA9PSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpOworICAgIH0KIAogICAgIHN0YXRpYyBpbmxpbmUg
UUZvbnQ6OldlaWdodCB0b1FGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKICAgICB7
CkBAIC02MiwyMiArMTA3LDYyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFFG
b250IGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KLSAgICBmbG9hdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgUVN0cmluZyBmYW1pbHkoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnQuZmFtaWx5KCk7IH0KLSAgICBib29sIGJvbGQoKSBjb25zdCB7IHJldHVybiBtX2Jv
bGQ7IH0KLSAgICBib29sIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5pdGFsaWMoKTsg
fQotICAgIGJvb2wgc21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmNhcGl0YWxpemF0
aW9uKCkgPT0gUUZvbnQ6OlNtYWxsQ2FwczsgfQotICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQucGl4ZWxTaXplKCk7IH0KKyAgICBRRm9udCBmb250KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0
Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAg
IHJldHVybiBtX2RhdGEtPmZvbnQ7CisgICAgICAgIHJldHVybiBRRm9udCgpOworICAgIH0KKyAg
ICBmbG9hdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSBy
ZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAg
aWYgKG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPnNpemU7CisgICAgICAgIHJl
dHVybiAwLjBmOworICAgIH0KKyAgICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0CisgICAgeworICAg
ICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRh
UHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bV9kYXRhLT5mb250LmZhbWlseSgpOworICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIH0K
KyAgICBib29sIGJvbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NFUlQobV9kYXRhICE9
IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpOworICAgICAg
ICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Ym9sZDsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIGl0YWxpYygpIGNvbnN0CisgICAgeworICAg
ICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRh
UHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bV9kYXRhLT5mb250Lml0YWxpYygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGJvb2wgc21hbGxDYXBzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAh
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAg
ICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmZvbnQuY2FwaXRhbGl6
YXRpb24oKSA9PSBRRm9udDo6U21hbGxDYXBzOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGludCBwaXhlbFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NFUlQobV9k
YXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpOwor
ICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Zm9udC5waXhl
bFNpemUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdDsKIAogI2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsK
ICNlbmRpZgotCi0gICAgZmxvYXQgbV9zaXplOwotICAgIGJvb2wgbV9ib2xkOwotICAgIGJvb2wg
bV9vYmxpcXVlOwotICAgIFFGb250IG1fZm9udDsKK3ByaXZhdGU6CisgICAgRm9udFBsYXRmb3Jt
RGF0YVByaXZhdGUqIG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcApp
bmRleCA3NzA5YmU2Li5mODI2OTY3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCkBAIC0yNiwxMCArMjYsMzAgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCisvLyBjb25zdHJ1Y3RvciBmb3IgZGVmYXVsdCBmb250CisvLyB0
aGUgZW1wdHkgdmFsdWUgaXMgRm9udFBsYXRmb3JtRGF0YSgwLmYsIGZhbHNlLCBmYWxzZSk7CitG
b250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKCkKKyAgICA6IG1fZGF0YShuZXcgRm9u
dFBsYXRmb3JtRGF0YVByaXZhdGUoKSkKK3t9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0
Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCit7CisgICAgaWYg
KHNpemUgPT0gMC5mICYmIGJvbGQgPT0gZmFsc2UgJiYgb2JsaXF1ZSA9PSBmYWxzZSkgeworICAg
ICAgICAvLyB0aGlzIGlzIHRoZSBlbXB0eSB2YWx1ZSBieSBkZWZpbml0aW9uIG9mIHRoZSB0cmFp
dCBGb250RGF0YUNhY2hlS2V5VHJhaXRzCisgICAgICAgIG1fZGF0YSA9IDA7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9kYXRhID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKHNpemUsIGJv
bGQsIG9ibGlxdWUpOworICAgIH0KK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhICZvdGhlcikgOiBtX2RhdGEob3RoZXIubV9kYXRh
KQoreworICAgIGlmIChtX2RhdGEgJiYgbV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAgICAgICsrbV9kYXRhLT5yZWZDb3VudDsKK30K
KwogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBpbnQgd29yZFNwYWNpbmcsIGludCBsZXR0ZXJTcGFjaW5nKQotICAg
IDogbV9zaXplKDAuMGYpCi0gICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgLCBtX29ibGlxdWUoZmFs
c2UpCisgICAgOiBtX2RhdGEobmV3IEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKCkpCiB7CiAgICAg
UVN0cmluZyBmYW1pbHlOYW1lOwogICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNj
cmlwdGlvbi5mYW1pbHkoKTsKQEAgLTM5LDQzICs1OSw2OSBAQCBGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGludCB3
b3JkUwogICAgICAgICBpZiAoZmFtaWx5KQogICAgICAgICAgICAgZmFtaWx5TmFtZSArPSBRTGF0
aW4xQ2hhcignLCcpOwogICAgIH0KKyAgICBRRm9udCAmZm9udCA9IG1fZGF0YS0+Zm9udDsKKyAg
ICBmb250LnNldEZhbWlseShmYW1pbHlOYW1lKTsKKyAgICBmb250LnNldFBpeGVsU2l6ZShxUm91
bmQoZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpKTsKKyAgICBmb250LnNldEl0YWxpYyhkZXNj
cmlwdGlvbi5pdGFsaWMoKSk7CisgICAgZm9udC5zZXRXZWlnaHQodG9RRm9udFdlaWdodChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkpOworICAgIGZvbnQuc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcp
OworICAgIGZvbnQuc2V0TGV0dGVyU3BhY2luZyhRRm9udDo6QWJzb2x1dGVTcGFjaW5nLCBsZXR0
ZXJTcGFjaW5nKTsKKyAgICBjb25zdCBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxs
Q2FwcygpOworICAgIGZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNt
YWxsQ2FwcyA6IFFGb250OjpNaXhlZENhc2UpOworCisgICAgbV9kYXRhLT5ib2xkID0gZm9udC5i
b2xkKCk7CisgICAgbV9kYXRhLT5zaXplID0gZm9udC5wb2ludFNpemVGKCk7Cit9CiAKLSAgICBt
X2ZvbnQuc2V0RmFtaWx5KGZhbWlseU5hbWUpOwotICAgIG1fZm9udC5zZXRQaXhlbFNpemUocVJv
dW5kKGRlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKSk7Ci0gICAgbV9mb250LnNldEl0YWxpYyhk
ZXNjcmlwdGlvbi5pdGFsaWMoKSk7Ci0KLSAgICBtX2ZvbnQuc2V0V2VpZ2h0KHRvUUZvbnRXZWln
aHQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpKTsKLSAgICBtX2JvbGQgPSBtX2ZvbnQuYm9sZCgpOwot
Ci0gICAgYm9vbCBzbWFsbENhcHMgPSBkZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsKLSAgICBtX2Zv
bnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNtYWxsQ2FwcyA6IFFGb250
OjpNaXhlZENhc2UpOwotICAgIG1fZm9udC5zZXRXb3JkU3BhY2luZyh3b3JkU3BhY2luZyk7Ci0g
ICAgbV9mb250LnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFic29sdXRlU3BhY2luZywgbGV0dGVy
U3BhY2luZyk7Ci0gICAgbV9zaXplID0gbV9mb250LnBvaW50U2l6ZSgpOworRm9udFBsYXRmb3Jt
RGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAgIGlmICghbV9kYXRhIHx8IG1fZGF0YSA9
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKQorICAgICAg
ICByZXR1cm47CisgICAgLS1tX2RhdGEtPnJlZkNvdW50OworICAgIGlmICghbV9kYXRhLT5yZWZD
b3VudCkKKyAgICAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShjb25zdCBRRm9udCYgZm9udCwgYm9vbCBib2xkKQotICAgIDogbV9zaXpl
KGZvbnQucG9pbnRTaXplKCkpCi0gICAgLCBtX2JvbGQoYm9sZCkKLSAgICAsIG1fb2JsaXF1ZShm
YWxzZSkKLSAgICAsIG1fZm9udChmb250KQorRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3Jt
RGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQogeworICAgIGlm
IChtX2RhdGEgPT0gb3RoZXIubV9kYXRhKQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgaWYg
KG1fZGF0YSAmJiBtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJp
dmF0ZSo+KC0xKSkgeworICAgICAgICAtLW1fZGF0YS0+cmVmQ291bnQ7CisgICAgICAgIGlmICgh
bV9kYXRhLT5yZWZDb3VudCkKKyAgICAgICAgICAgIGRlbGV0ZSBtX2RhdGE7CisgICAgfQorICAg
IG1fZGF0YSA9IG90aGVyLm1fZGF0YTsKKyAgICBpZiAobV9kYXRhICYmIG1fZGF0YSAhPSByZWlu
dGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKQorICAgICAgICArK21f
ZGF0YS0+cmVmQ291bnQ7CisgICAgcmV0dXJuICp0aGlzOwogfQogCi0jaWYgRU5BQkxFKFNWR19G
T05UUykKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIG9ibGlxdWUpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1fYm9sZChi
b2xkKQotICAgICwgbV9vYmxpcXVlKG9ibGlxdWUpCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiB7CisgICAgaWYg
KG1fZGF0YSA9PSBvdGhlci5tX2RhdGEpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGVsc2Ug
aWYgKCFtX2RhdGEgfHwgIW90aGVyLm1fZGF0YQorICAgICAgICB8fCBtX2RhdGEgPT0gcmVpbnRl
cnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSB8fCBvdGhlci5tX2RhdGEg
PT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICAg
ICAgcmV0dXJuICBmYWxzZTsKKworICAgIGNvbnN0IGJvb2wgZXF1YWxzID0gKG1fZGF0YS0+c2l6
ZSA9PSBvdGhlci5tX2RhdGEtPnNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2Rh
dGEtPmJvbGQgPT0gb3RoZXIubV9kYXRhLT5ib2xkCisgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV9kYXRhLT5vYmxpcXVlID09IG90aGVyLm1fZGF0YS0+b2JsaXF1ZQorICAgICAgICAgICAg
ICAgICAgICAgICAgICYmIG1fZGF0YS0+Zm9udCA9PSBvdGhlci5tX2RhdGEtPmZvbnQpOworICAg
IHJldHVybiBlcXVhbHM7CiB9Ci0jZW5kaWYKIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YSgpCi0gICAgOiBtX3NpemUoMC4wZikKLSAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAs
IG1fb2JsaXF1ZShmYWxzZSkKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25z
dAogeworICAgIGlmICghbV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9kYXRh
ID09IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAg
ICAgIHJldHVybiAxOworICAgIHJldHVybiBxSGFzaChtX2RhdGEtPmZvbnQudG9TdHJpbmcoKSkK
KyAgICAgICAgICAgXiBxSGFzaCgqcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4oJm1fZGF0YS0+
c2l6ZSkpCisgICAgICAgICAgIF4gcUhhc2gobV9kYXRhLT5ib2xkKQorICAgICAgICAgICBeIHFI
YXNoKG1fZGF0YS0+b2JsaXF1ZSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44299</attachid>
            <date>2009-12-04 03:13:02 -0800</date>
            <delta_ts>2009-12-04 04:14:54 -0800</delta_ts>
            <desc>Refactoring of the font cache to use the common FontCache</desc>
            <filename>font_cache_refactoring.patch</filename>
            <type>text/plain</type>
            <size>27447</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWY2ZTllNS4uNDE3OGVhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAwOS0xMi0wNCAgQmVuamFtaW4gUG91
bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gV2ViS2l0IGNyYXNoZXMgd2hlbiBsb2Fk
aW5nIGNlcnRhaW4gU1ZHIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjk0NDMKKworICAgICAgICBSZW1vdmUgRm9udEZhbGxiYWNrTGlzdFF0
IGFuZCByZWx5IG9uIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdAorICAgICAgICB0byBoYW5k
bGUgdGhlIGZvbnRzLiBGb250Q2FjaGUgYW5kIEZvbnRQbGF0Zm9ybURhdGEgaGF2ZSBiZWVuCisg
ICAgICAgIHVwZGF0ZWQgdG8gd29yayB3aXRoIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdC4K
KworICAgICAgICBJbiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleQorICAgICAgICB3YXMgYSBjbG9uZSBvZiBGb250UGxhdGZvcm1EYXRhIHdpdGgg
dGhlIGhhc2hpbmcKKyAgICAgICAgY2FwYWJpbGl0aWVzIGFkZGVkIGluIG9yZGVyIHRvIHVzZSBp
dCBhcyBhIGtleSBpbiB0aGUgY2FjaGUncworICAgICAgICBoYXNobWFwLiBGb250UGxhdGZvcm1E
YXRhIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgaGFzaGluZworICAgICAgICBmdW5j
dGlvbiBkaXJlY3RseSBzbyB0aGUgZGF0YSBhcmUgbm90IGNvcGllZCB0d2ljZSBpbiBtZW1vcnku
CisKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpIGZyb20gRm9udEZhbGxi
YWNrTGlzdFF0IHdhcyBhIGNvcHkgb2YKKyAgICAgICAgY29kZSBmcm9tIEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGEoKSBhbmQgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpLgorICAgICAgICBU
aGUgYmVoYXZpb3IgaXMgc2ltaWxhciBleGNlcHQgY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3Ro
KCkgd2FzCisgICAgICAgIG5vdCB0ZXN0ZWQgYW5kIHRoZSBmYWxsYmFjayBmb250cyBzZWxlY3Rv
ciB3ZXJlIG5vdCB1c2VkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENh
Y2hlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcDoK
KyAgICAgICAgUmVtb3ZlZC4gV2Ugbm93IHVzZSB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSBGb250
RmFsbGJhY2tMaXN0LmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaDoKKyAgICAgICAgQWRkIGhhc2hpbmcgY2FwYWJpbGl0aWVzIHRvIGJlIGFibGUg
dG8gdXNlIHRoZSBkYXRhIHdpdGggdGhlIEZvbnRDYWNoZS4KKyAgICAgICAgVGhpcyB3YXMgcHJl
dmlvdXNseSBkb25lIGluIEZvbnRDYWNoZVF0LmNwcAorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YVByaXZhdGU6OkZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpib2xkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Oml0YWxpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzbWFsbENhcHMpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YTo6cGl4ZWxTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToK
KwogMjAwOS0xMi0wMyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA3OWYwM2JiLi41YmY2M2U1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTExOTIsNiArMTE5Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3F0L1JHQkEzMkJ1ZmZlclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAgXApAQCAtMTIwMiw2ICsxMjAzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2Uu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXApAQCAtMjM4OSw3ICsyMzkxLDYgQEAgU09V
UkNFUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvU2hhcmVkQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HbHlw
aFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9u
dERhdGFRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0tVUkxRdC5jcHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAppbmRleCA0ZWYwM2E1Li42NDhlZWQ3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcApAQCAt
MzgsMjU2ICszOCwzMyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZvbnRDYWNoZSogZm9udENhY2hlKCkKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUlu
aXQoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udENhY2hlLCBnbG9iYWxGb250Q2Fj
aGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2JhbEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjpG
b250Q2FjaGUoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpCi17Ci19Ci0KLS8vIFRoaXMgdHlw
ZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciAtIHRoZSBv
bmUgd2hpY2gKLS8vIGdldHMgRm9udERlc2NyaXB0aW9uIGFzIGl0J3MgcGFyYW1ldGVyLgotY2xh
c3MgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKLXB1YmxpYzoKLSAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICAgICAg
OiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAgICAgLCBtX2l0YWxpYyhk
ZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgLCBtX3NtYWxsQ2FwcyhkZXNjcmlwdGlvbi5z
bWFsbENhcHMoKSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFFGb250IHdlaWdodHMgaW4gRm9udFBsYXRm
b3JtRGF0YSdzIGN0b3IgYW5kIGZvbGxvdyBpdCBoZXJlCi0gICAgICAgIGlmIChGb250UGxhdGZv
cm1EYXRhOjp0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9uLndlaWdodCgpKSA+IFFGb250OjpOb3Jt
YWwpCi0gICAgICAgICAgICBtX2JvbGQgPSB0cnVlOwotCi0gICAgICAgIGNvbnN0IEZvbnRGYW1p
bHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAgICAgICAgd2hpbGUgKGZhbWls
eSkgewotICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZChmYW1pbHktPmZhbWlseSgpKTsK
LSAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKGZh
bWlseSkKLSAgICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKCcsJyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSkKLSAgICAgICAgOiBt
X2ZhbWlseU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nPihmb250RGF0YS5mYW1pbHkoKSkpCi0gICAg
ICAgICwgbV9zaXplKGZvbnREYXRhLnBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmb250
RGF0YS5ib2xkKCkpCi0gICAgICAgICwgbV9pdGFsaWMoZm9udERhdGEuaXRhbGljKCkpCi0gICAg
ICAgICwgbV9zbWFsbENhcHMoZm9udERhdGEuc21hbGxDYXBzKCkpCi0gICAgICAgICwgbV9oYXNo
KDApCi0gICAgewotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fc2l6ZShoYXNo
VGFibGVEZWxldGVkU2l6ZSgpKSB7IH0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IGhhc2hUYWJsZURlbGV0ZWRTaXplKCk7IH0KLQot
ICAgIGVudW0gSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUgeyBIYXNoVGFibGVFbXB0eVZhbHVlIH07
Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUp
Ci0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAg
LCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9pdGFsaWMoZmFsc2UpCi0gICAgICAgICwgbV9z
bWFsbENhcHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faGFzaCAhPSBvdGhlci5tX2hhc2gpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1f
ZmFtaWx5TmFtZSwgb3RoZXIubV9mYW1pbHlOYW1lKSAmJiBtX3NpemUgPT0gb3RoZXIubV9zaXpl
ICYmCi0gICAgICAgICAgICBtX2JvbGQgPT0gb3RoZXIubV9ib2xkICYmIG1faXRhbGljID09IG90
aGVyLm1faXRhbGljICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFz
aDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXB1dGVIYXNoKCkKLSAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICAgICAgQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKG1f
ZmFtaWx5TmFtZSksCi0gICAgICAgICAgICBtX3NpemUgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9ib2xkIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIDEpKQotICAgICAgICAgICAgICAgIHwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faXRhbGljKSA8PCAoc2l6ZW9mKHVuc2lnbmVkKSAqIDgg
LSAyKQotICAgICAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc21hbGxDYXBz
KSA8PCAoc2l6ZW9mKHVuc2lnbmVkKSAqIDggLSAzKQotICAgICAgICB9OwotICAgICAgICBtX2hh
c2ggPSBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFz
aENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgU3RyaW5nIG1fZmFtaWx5TmFtZTsKLSAgICBpbnQgbV9zaXplOwotICAgIGJv
b2wgbV9ib2xkOwotICAgIGJvb2wgbV9pdGFsaWM7Ci0gICAgYm9vbCBtX3NtYWxsQ2FwczsKLSAg
ICB1bnNpZ25lZCBtX2hhc2g7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaFRhYmxlRGVsZXRl
ZFNpemUoKSB7IHJldHVybiAweEZGRkZGRkZGVTsgfQotfTsKLQotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGtleS5oYXNo
KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGIpCi0gICAgewot
ICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleT4gewotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGVt
cHR5VmFsdWUoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXksIGtleSwgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6SGFzaFRhYmxl
RW1wdHlWYWx1ZSkpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLSAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBzbG90KQot
ICAgIHsKLSAgICAgICAgbmV3ICgmc2xvdCkgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKLSAgICB9Ci19OwotCi10eXBl
ZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBGb250UGxhdGZvcm1EYXRhKiwg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJh
aXRzPiBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0KLS8vIHVzaW5nIFFfR0xPQkFMX1NUQVRJQyBs
ZWFkcyB0byBjcmFzaC4gVE9ETyBpbnZlc3RpZ2F0ZSB0aGUgd2F5IHRvIGZpeCB0aGlzLgotc3Rh
dGljIEZvbnRQbGF0Zm9ybURhdGFDYWNoZSogZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSA9IDA7Ci0K
LUZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sKQotewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSkKLSAgICAgICAgZ0ZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSA9IG5ldyBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0KLSAgICBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGRlc2NyaXB0aW9uKTsKLSAgICBGb250UGxhdGZvcm1E
YXRhKiBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5nZXQoa2V5KTsKLSAg
ICBpZiAoIXBsYXRmb3JtRGF0YSkgewotICAgICAgICBwbGF0Zm9ybURhdGEgPSBuZXcgRm9udFBs
YXRmb3JtRGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUt
PmFkZChrZXksIHBsYXRmb3JtRGF0YSk7Ci0gICAgfQotICAgIHJldHVybiBwbGF0Zm9ybURhdGE7
Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIHN0ZDo6cGFp
cjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFz
aCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwotCi1zdGF0
aWMgRm9udERhdGFDYWNoZSogZ0ZvbnREYXRhQ2FjaGUgPSAwOwotCi1zdGF0aWMgY29uc3QgaW50
IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gNDA7Ci1zdGF0aWMgY29uc3QgaW50IGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhID0gMzI7Ci0KLXN0YXRpYyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBnSW5hY3RpdmVGb250RGF0YVNldCA9IDA7Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0
Zm9ybURhdGEpCi17Ci0gICAgaWYgKCFnRm9udERhdGFDYWNoZSkgewotICAgICAgICBnRm9udERh
dGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNl
dCA9IG5ldyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OwotICAgIH0KLQotICAg
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoKmZvbnRQbGF0Zm9ybURhdGEpOwotICAgIEZv
bnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoa2V5KTsKLSAg
ICBpZiAoaXQgPT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKSB7Ci0gICAgICAgIFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqZm9udFBsYXRmb3JtRGF0YSk7Ci0g
ICAgICAgIGdGb250RGF0YUNhY2hlLT5hZGQoa2V5LCBzdGQ6OnBhaXI8U2ltcGxlRm9udERhdGEq
LCB1bnNpZ25lZD4oZm9udERhdGEsIDEpKTsKLSAgICAgICAgcmV0dXJuIGZvbnREYXRhOwotICAg
IH0KLSAgICBpZiAoIWl0LT5zZWNvbmQuc2Vjb25kKyspIHsKLSAgICAgICAgQVNTRVJUKGdJbmFj
dGl2ZUZvbnREYXRhU2V0LT5jb250YWlucyhpdC0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJ
bmFjdGl2ZUZvbnREYXRhU2V0LT5yZW1vdmUoaXQtPnNlY29uZC5maXJzdCk7Ci0gICAgfQotICAg
IHJldHVybiBpdC0+c2Vjb25kLmZpcnN0OwotfQotCi1Gb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikKK2Nv
bnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250JiwgY29uc3QgVUNoYXIqLCBpbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgV2ViQ29yZTo6U2ltcGxlRm9udERh
dGEqIGZvbnREYXRhKQotewotICAgIEFTU0VSVChnRm9udERhdGFDYWNoZSk7Ci0gICAgQVNTRVJU
KCFmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5IGtleShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwotICAgIEZvbnREYXRhQ2FjaGU6Oml0
ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoa2V5KTsKLSAgICBBU1NFUlQoaXQgIT0g
Z0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpIHsK
LSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPmFkZChpdC0+c2Vjb25kLmZpcnN0KTsKLSAg
ICAgICAgaWYgKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgPiBjTWF4SW5hY3RpdmVGb250
RGF0YSkKLSAgICAgICAgICAgIHB1cmdlSW5hY3RpdmVGb250RGF0YShnSW5hY3RpdmVGb250RGF0
YVNldC0+c2l6ZSgpIC0gY1RhcmdldEluYWN0aXZlRm9udERhdGEpOwotICAgIH0KLX0KLQotdm9p
ZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCitGb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQm
IGZvbnQpCiB7Ci0gICAgc3RhdGljIGJvb2wgaXNQdXJnaW5nOyAgLy8gR3VhcmQgYWdhaW5zdCBy
ZWVudHJ5IHdoZW4gZS5nLiBhIGRlbGV0ZWQgRm9udERhdGEgcmVsZWFzZXMgaXRzIHNtYWxsIGNh
cHMgRm9udERhdGEuCi0gICAgaWYgKGlzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aXNQdXJnaW5nID0gdHJ1ZTsKLQotICAgIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGFTZXQtPmJlZ2luKCk7Ci0gICAgTGlz
dEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZl
Rm9udERhdGFTZXQtPmVuZCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgJiYgaXQg
IT0gZW5kOyArK2ksICsraXQpIHsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtl
eSA9ICgqaXQpLT5wbGF0Zm9ybURhdGEoKTsKLSAgICAgICAgcGFpcjxTaW1wbGVGb250RGF0YSos
IHVuc2lnbmVkPiBmb250RGF0YVBhaXIgPSBnRm9udERhdGFDYWNoZS0+dGFrZShrZXkpOwotICAg
ICAgICBBU1NFUlQoZm9udERhdGFQYWlyLmZpcnN0ICE9IDApOwotICAgICAgICBBU1NFUlQoIWZv
bnREYXRhUGFpci5zZWNvbmQpOwotICAgICAgICBkZWxldGUgZm9udERhdGFQYWlyLmZpcnN0Owot
Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1E
YXRhQ2FjaGUtPnRha2Uoa2V5KTsKLSAgICAgICAgaWYgKHBsYXRmb3JtRGF0YSkKLSAgICAgICAg
ICAgIGRlbGV0ZSBwbGF0Zm9ybURhdGE7Ci0gICAgfQotCi0gICAgaWYgKGl0ID09IGVuZCkgewot
ICAgICAgICAvLyBSZW1vdmVkIGV2ZXJ5dGhpbmcKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFT
ZXQtPmNsZWFyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShnSW5h
Y3RpdmVGb250RGF0YVNldC0+YmVnaW4oKSk7Ci0gICAgfQotCi0gICAgaXNQdXJnaW5nID0gZmFs
c2U7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9u
KCkpOwogfQogCi12b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciopCitGb250
UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CisgICAgcmV0dXJuIG5ldyBGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpyZW1v
dmVDbGllbnQoRm9udFNlbGVjdG9yKikKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKIHsKIH0KIAotdm9pZCBG
b250Q2FjaGU6OmludmFsaWRhdGUoKQorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmKQogewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSB8fCAhZ0ZvbnREYXRhQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHB1cmdlSW5hY3Rp
dmVGb250RGF0YSgpOworICAgIC8vIEZJWE1FIDogd2UgbXVzdCB0YWtlIGludG8gYWNjb3VudCB0
aGUgZmFtaWxseSBuYW1lIChzZWNvbmQgYXJndW1lbnQpCisgICAgcmV0dXJuIG5ldyBGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCmluZGV4IGExOTQ2NGUuLjZlOWQwNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAt
NDMsNyArNDMsNyBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZv
bnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYgogICAgICAgICBmb250LnNldFdl
aWdodChRRm9udDo6Qm9sZCk7CiAgICAgZm9udC5zZXRJdGFsaWMoaXRhbGljKTsKIAotICAgIHJl
dHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnQsIGJvbGQpOworICAgIHJldHVybiBGb250UGxhdGZv
cm1EYXRhKGZvbnQpOwogfQogCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMzA2YWJmLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
OCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLQotICAgIFJlcGxhY2VtZW50IG9mIHRoZSBzdG9jayBGb250RmFsbGJhY2tMaXN0IGFz
IFF0IGlzIGdvaW5nIHRvIGZpbmQgdXMgYQotICAgIHJlcGxhY2VtZW50IGZvbnQsIHdpbGwgZG8g
Y2FjaGluZyBhbmQgdGhlIG90aGVyIHN0dWZmIHdlIGltcGxlbWVudCBpbgotICAgIFdlYktpdC4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0Lmgi
Ci0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAi
U2VnbWVudGVkRm9udERhdGEuaCIKLQotI2luY2x1ZGUgPFFEZWJ1Zz4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Gb250RmFsbGJhY2tMaXN0OjpGb250RmFsbGJhY2tMaXN0KCkKLSAgICA6IG1f
cGFnZVplcm8oMCkKLSAgICAsIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKDApCi0gICAg
LCBtX2ZvbnRTZWxlY3RvcigwKQotICAgICwgbV9mYW1pbHlJbmRleCgwKQotICAgICwgbV9waXRj
aChVbmtub3duUGl0Y2gpCi0gICAgLCBtX2xvYWRpbmdDdXN0b21Gb250cyhmYWxzZSkKLSAgICAs
IG1fZ2VuZXJhdGlvbigwKQotewotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmludmFsaWRh
dGUoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQot
ewotICAgIHJlbGVhc2VGb250RGF0YSgpOwotICAgIG1fZm9udExpc3QuY2xlYXIoKTsKLSAgICBt
X3BhZ2VaZXJvID0gMDsKLSAgICBtX3BhZ2VzLmNsZWFyKCk7Ci0gICAgbV9jYWNoZWRQcmltYXJ5
U2ltcGxlRm9udERhdGEgPSAwOwotICAgIG1fZmFtaWx5SW5kZXggPSAwOwotICAgIG1fcGl0Y2gg
PSBVbmtub3duUGl0Y2g7Ci0gICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSBmYWxzZTsKLSAgICBt
X2ZvbnRTZWxlY3RvciA9IGZvbnRTZWxlY3RvcjsKLSAgICBtX2dlbmVyYXRpb24gPSAwOwotfQot
Ci12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0YSgpCi17Ci0gICAgdW5zaWdu
ZWQgbnVtRm9udHMgPSBtX2ZvbnRMaXN0LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtRm9udHM7ICsraSkgewotICAgICAgICBpZiAobV9mb250TGlzdFtpXS5zZWNvbmQp
Ci0gICAgICAgICAgICBkZWxldGUgbV9mb250TGlzdFtpXS5maXJzdDsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZm9udExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVkKCkp
OwotICAgICAgICAgICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2FzdDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KG1fZm9udExpc3RbaV0uZmlyc3QpKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBGb250RmFsbGJhY2tMaXN0OjpkZXRlcm1pbmVQaXRjaChjb25zdCBX
ZWJDb3JlOjpGb250KiBmb250KSBjb25zdAotewotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0
YSA9IHByaW1hcnlGb250RGF0YShmb250KTsKLSAgICBpZiAoIWZvbnREYXRhLT5pc1NlZ21lbnRl
ZCgpKQotICAgICAgICBtX3BpdGNoID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEq
Pihmb250RGF0YSktPnBpdGNoKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRl
ZEZvbnREYXRhKiBzZWdtZW50ZWRGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNlZ21lbnRl
ZEZvbnREYXRhKj4oZm9udERhdGEpOwotICAgICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBzZWdt
ZW50ZWRGb250RGF0YS0+bnVtUmFuZ2VzKCk7Ci0gICAgICAgIGlmIChudW1SYW5nZXMgPT0gMSkK
LSAgICAgICAgICAgIG1fcGl0Y2ggPSBzZWdtZW50ZWRGb250RGF0YS0+cmFuZ2VBdCgwKS5mb250
RGF0YSgpLT5waXRjaCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BpdGNoID0gVmFy
aWFibGVQaXRjaDsKLSAgICB9Ci19Ci0KLWNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0
Ojpmb250RGF0YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250LCB1bnNpZ25lZCBpbmRleCkg
Y29uc3QKLXsKLSAgICBpZiAoaW5kZXggIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv
LyBTZWFyY2ggZm9yIHRoZSBXZWJDb3JlIGZvbnQgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBsaXN0
Ci0gICAgZm9yIChpbnQgaSA9IG1fZm9udExpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
LSAgICAgICAgcGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+IGl0ZW0gPSBtX2ZvbnRMaXN0W2ld
OwotICAgICAgICAvLyBpdGVtLnNlY29uZCBtZWFucyB0aGF0IHRoZSBpdGVtIHdhcyBjcmVhdGVk
IGxvY2FsbHkgb3Igbm90Ci0gICAgICAgIGlmICghaXRlbS5zZWNvbmQpCi0gICAgICAgICAgICBy
ZXR1cm4gaXRlbS5maXJzdDsKLSAgICB9Ci0KLSAgICAvLyBVc2UgdGhlIEZvbnRTZWxlY3RvciB0
byBnZXQgYSBXZWJDb3JlIGZvbnQgYW5kIHRoZW4gZmFsbGJhY2sgdG8gUXQKLSAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uID0gX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAg
ICB3aGlsZSAoZmFtaWx5KSB7Ci0gICAgICAgIGlmIChmYW1pbHktPmZhbWlseSgpLmxlbmd0aCgp
ICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBGb250RGF0YSogZGF0YSA9IG1fZm9u
dFNlbGVjdG9yLT5nZXRGb250RGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5LT5mYW1pbHkoKSk7Ci0g
ICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIGlmIChkYXRhLT5pc0xvYWRp
bmcoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGlmICghZGF0YS0+aXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQ3VzdG9tIGZvbnRzIGNhbiBiZSBmcmVlZCBhbnl0aW1lIHNvIHdlIG11c3Qg
bm90IGhvbGQgdGhlbQotICAgICAgICAgICAgICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWly
PGNvbnN0IEZvbnREYXRhKiwgYm9vbD4oZGF0YSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZmFtaWx5ID0gZmFtaWx5LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKG1fZm9u
dExpc3Quc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9mb250TGlzdFswXS5maXJzdDsKLQotICAg
IGNvbnN0IEZvbnREYXRhKiByZXN1bHQgPSBuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3Jt
RGF0YShkZXNjcmlwdGlvbiwgX2ZvbnQtPndvcmRTcGFjaW5nKCksIF9mb250LT5sZXR0ZXJTcGFj
aW5nKCkpLCB0cnVlKTsKLSAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRh
KiwgYm9vbD4ocmVzdWx0LCB0cnVlKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY29uc3Qg
Rm9udERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6OmZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBX
ZWJDb3JlOjpGb250KiBmb250LCBjb25zdCBVQ2hhciosIGludCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcHJpbWFyeUZvbnREYXRhKGZvbnQpOwotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnNl
dFBsYXRmb3JtRm9udChjb25zdCBXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhJikKLXsKLSAgICBt
X2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA1Y2Q2ZWQyLi4x
MTg5YTM4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9y
bURhdGEuaApAQCAtMjYsMjAgKzI2LDY0IEBACiAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRSGFzaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBTdHJpbmc7CitjbGFzcyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZQorewor
cHVibGljOgorICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKCkKKyAgICAgICAgOiByZWZDb3Vu
dCgxKQorICAgICAgICAsIHNpemUoZm9udC5wb2ludFNpemVGKCkpCisgICAgICAgICwgYm9sZChm
b250LmJvbGQoKSkKKyAgICAgICAgLCBvYmxpcXVlKGZhbHNlKQorICAgIHt9CisgICAgRm9udFBs
YXRmb3JtRGF0YVByaXZhdGUoY29uc3QgZmxvYXQgc2l6ZSwgY29uc3QgYm9vbCBib2xkLCBjb25z
dCBib29sIG9ibGlxdWUpCisgICAgICAgIDogcmVmQ291bnQoMSkKKyAgICAgICAgLCBzaXplKHNp
emUpCisgICAgICAgICwgYm9sZChib2xkKQorICAgICAgICAsIG9ibGlxdWUob2JsaXF1ZSkKKyAg
ICB7fQorICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKGNvbnN0IFFGb250JiBmb250KQorICAg
ICAgICA6IHJlZkNvdW50KDEpCisgICAgICAgICwgZm9udChmb250KQorICAgICAgICAsIHNpemUo
Zm9udC5wb2ludFNpemVGKCkpCisgICAgICAgICwgYm9sZChmb250LmJvbGQoKSkKKyAgICAgICAg
LCBvYmxpcXVlKGZhbHNlKQorICAgIHt9CisgICAgdW5zaWduZWQgcmVmQ291bnQ7CisgICAgUUZv
bnQgZm9udDsKKyAgICBmbG9hdCBzaXplOworICAgIGJvb2wgYm9sZCA6IDE7CisgICAgYm9vbCBv
YmxpcXVlIDogMTsKK307CisKKwogCiBjbGFzcyBGb250UGxhdGZvcm1EYXRhIDogcHVibGljIEZh
c3RBbGxvY0Jhc2UKIHsKIHB1YmxpYzoKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIEZvbnRQ
bGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotI2VuZGlm
Ci0gICAgRm9udFBsYXRmb3JtRGF0YSgpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSAmKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlw
dGlvbiYsIGludCB3b3JkU3BhY2luZyA9IDAsIGludCBsZXR0ZXJTcGFjaW5nID0gMCk7Ci0gICAg
Rm9udFBsYXRmb3JtRGF0YShjb25zdCBRRm9udCYsIGJvb2wgYm9sZCk7CisgICAgRm9udFBsYXRm
b3JtRGF0YShjb25zdCBRRm9udCYgZm9udCkKKyAgICAgICAgOiBtX2RhdGEobmV3IEZvbnRQbGF0
Zm9ybURhdGFQcml2YXRlKGZvbnQpKQorICAgIHt9CisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6
Okhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9kYXRhKHJlaW50ZXJwcmV0
X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAge30KKworICAgIH5Gb250
UGxhdGZvcm1EYXRhKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZv
cm1EYXRhJikgY29uc3Q7CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29u
c3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2RhdGEgPT0gcmVpbnRlcnByZXRfY2FzdDxGb250
UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKTsKKyAgICB9CiAKICAgICBzdGF0aWMgaW5saW5lIFFG
b250OjpXZWlnaHQgdG9RRm9udFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCiAgICAgewpA
QCAtNjIsMjIgKzEwNiw2MiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBRRm9u
dCBmb250KCkgY29uc3QgeyByZXR1cm4gbV9mb250OyB9Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc2l6ZTsgfQotICAgIFFTdHJpbmcgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4g
bV9mb250LmZhbWlseSgpOyB9Ci0gICAgYm9vbCBib2xkKCkgY29uc3QgeyByZXR1cm4gbV9ib2xk
OyB9Ci0gICAgYm9vbCBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuaXRhbGljKCk7IH0K
LSAgICBib29sIHNtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5jYXBpdGFsaXphdGlv
bigpID09IFFGb250OjpTbWFsbENhcHM7IH0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyBy
ZXR1cm4gbV9mb250LnBpeGVsU2l6ZSgpOyB9CisgICAgUUZvbnQgZm9udCgpIGNvbnN0CisgICAg
eworICAgICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZv
cm1EYXRhUHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICBy
ZXR1cm4gbV9kYXRhLT5mb250OworICAgICAgICByZXR1cm4gUUZvbnQoKTsKKyAgICB9CisgICAg
ZmxvYXQgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVp
bnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlm
IChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5zaXplOworICAgICAgICByZXR1
cm4gMC4wZjsKKyAgICB9CisgICAgUVN0cmluZyBmYW1pbHkoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgUV9BU1NFUlQobV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVBy
aXZhdGUqPigtMSkpOworICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1f
ZGF0YS0+Zm9udC5mYW1pbHkoKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICB9Cisg
ICAgYm9vbCBib2xkKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSBy
ZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAg
aWYgKG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmJvbGQ7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisgICAgYm9vbCBpdGFsaWMoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgUV9BU1NFUlQobV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVBy
aXZhdGUqPigtMSkpOworICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1f
ZGF0YS0+Zm9udC5pdGFsaWMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBi
b29sIHNtYWxsQ2FwcygpIGNvbnN0CisgICAgeworICAgICAgICBRX0FTU0VSVChtX2RhdGEgIT0g
cmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSk7CisgICAgICAg
IGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5mb250LmNhcGl0YWxpemF0
aW9uKCkgPT0gUUZvbnQ6OlNtYWxsQ2FwczsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KyAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0
YSAhPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAg
ICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmZvbnQucGl4ZWxT
aXplKCk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29u
c3Q7CiAKICNpZm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAj
ZW5kaWYKLQotICAgIGZsb2F0IG1fc2l6ZTsKLSAgICBib29sIG1fYm9sZDsKLSAgICBib29sIG1f
b2JsaXF1ZTsKLSAgICBRRm9udCBtX2ZvbnQ7Citwcml2YXRlOgorICAgIEZvbnRQbGF0Zm9ybURh
dGFQcml2YXRlKiBtX2RhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5k
ZXggNzcwOWJlNi4uYmE4NmE0NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcApAQCAtMjYsMTAgKzI2LDI0IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9h
dCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKK3sKKyAgICBpZiAoc2l6ZSA9PSAwLmYg
JiYgYm9sZCA9PSBmYWxzZSAmJiBvYmxpcXVlID09IGZhbHNlKSB7CisgICAgICAgIC8vIHRoaXMg
aXMgdGhlIGVtcHR5IHZhbHVlIGJ5IGRlZmluaXRpb24gb2YgdGhlIHRyYWl0IEZvbnREYXRhQ2Fj
aGVLZXlUcmFpdHMKKyAgICAgICAgbV9kYXRhID0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBt
X2RhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoc2l6ZSwgYm9sZCwgb2JsaXF1ZSk7
CisgICAgfQorfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEgJm90aGVyKSA6IG1fZGF0YShvdGhlci5tX2RhdGEpCit7CisgICAgaWYg
KG1fZGF0YSAmJiBtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJp
dmF0ZSo+KC0xKSkKKyAgICAgICAgKyttX2RhdGEtPnJlZkNvdW50OworfQorCiBGb250UGxhdGZv
cm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRp
b24sIGludCB3b3JkU3BhY2luZywgaW50IGxldHRlclNwYWNpbmcpCi0gICAgOiBtX3NpemUoMC4w
ZikKLSAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAsIG1fb2JsaXF1ZShmYWxzZSkKKyAgICA6IG1f
ZGF0YShuZXcgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoKSkKIHsKICAgICBRU3RyaW5nIGZhbWls
eU5hbWU7CiAgICAgY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZhbWls
eSgpOwpAQCAtMzksNDMgKzUzLDY5IEBAIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURh
dGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbiwgaW50IHdvcmRTCiAgICAgICAg
IGlmIChmYW1pbHkpCiAgICAgICAgICAgICBmYW1pbHlOYW1lICs9IFFMYXRpbjFDaGFyKCcsJyk7
CiAgICAgfQorICAgIFFGb250ICZmb250ID0gbV9kYXRhLT5mb250OworICAgIGZvbnQuc2V0RmFt
aWx5KGZhbWlseU5hbWUpOworICAgIGZvbnQuc2V0UGl4ZWxTaXplKHFSb3VuZChkZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSkpOworICAgIGZvbnQuc2V0SXRhbGljKGRlc2NyaXB0aW9uLml0YWxp
YygpKTsKKyAgICBmb250LnNldFdlaWdodCh0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9uLndlaWdo
dCgpKSk7CisgICAgZm9udC5zZXRXb3JkU3BhY2luZyh3b3JkU3BhY2luZyk7CisgICAgZm9udC5z
ZXRMZXR0ZXJTcGFjaW5nKFFGb250OjpBYnNvbHV0ZVNwYWNpbmcsIGxldHRlclNwYWNpbmcpOwor
ICAgIGNvbnN0IGJvb2wgc21hbGxDYXBzID0gZGVzY3JpcHRpb24uc21hbGxDYXBzKCk7CisgICAg
Zm9udC5zZXRDYXBpdGFsaXphdGlvbihzbWFsbENhcHMgPyBRRm9udDo6U21hbGxDYXBzIDogUUZv
bnQ6Ok1peGVkQ2FzZSk7CisKKyAgICBtX2RhdGEtPmJvbGQgPSBmb250LmJvbGQoKTsKKyAgICBt
X2RhdGEtPnNpemUgPSBmb250LnBvaW50U2l6ZUYoKTsKK30KIAotICAgIG1fZm9udC5zZXRGYW1p
bHkoZmFtaWx5TmFtZSk7Ci0gICAgbV9mb250LnNldFBpeGVsU2l6ZShxUm91bmQoZGVzY3JpcHRp
b24uY29tcHV0ZWRTaXplKCkpKTsKLSAgICBtX2ZvbnQuc2V0SXRhbGljKGRlc2NyaXB0aW9uLml0
YWxpYygpKTsKLQotICAgIG1fZm9udC5zZXRXZWlnaHQodG9RRm9udFdlaWdodChkZXNjcmlwdGlv
bi53ZWlnaHQoKSkpOwotICAgIG1fYm9sZCA9IG1fZm9udC5ib2xkKCk7Ci0KLSAgICBib29sIHNt
YWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxsQ2FwcygpOwotICAgIG1fZm9udC5zZXRDYXBpdGFs
aXphdGlvbihzbWFsbENhcHMgPyBRRm9udDo6U21hbGxDYXBzIDogUUZvbnQ6Ok1peGVkQ2FzZSk7
Ci0gICAgbV9mb250LnNldFdvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKTsKLSAgICBtX2ZvbnQuc2V0
TGV0dGVyU3BhY2luZyhRRm9udDo6QWJzb2x1dGVTcGFjaW5nLCBsZXR0ZXJTcGFjaW5nKTsKLSAg
ICBtX3NpemUgPSBtX2ZvbnQucG9pbnRTaXplKCk7CitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBs
YXRmb3JtRGF0YSgpCit7CisgICAgaWYgKCFtX2RhdGEgfHwgbV9kYXRhID09IHJlaW50ZXJwcmV0
X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAgICAgIHJldHVybjsKKyAg
ICAtLW1fZGF0YS0+cmVmQ291bnQ7CisgICAgaWYgKCFtX2RhdGEtPnJlZkNvdW50KQorICAgICAg
ICBkZWxldGUgbV9kYXRhOwogfQogCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KGNvbnN0IFFGb250JiBmb250LCBib29sIGJvbGQpCi0gICAgOiBtX3NpemUoZm9udC5wb2ludFNp
emUoKSkKLSAgICAsIG1fYm9sZChib2xkKQotICAgICwgbV9vYmxpcXVlKGZhbHNlKQotICAgICwg
bV9mb250KGZvbnQpCitGb250UGxhdGZvcm1EYXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRv
cj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpCiB7CisgICAgaWYgKG1fZGF0YSA9PSBv
dGhlci5tX2RhdGEpCisgICAgICAgIHJldHVybiAqdGhpczsKKyAgICBpZiAobV9kYXRhICYmIG1f
ZGF0YSAhPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKSB7
CisgICAgICAgIC0tbV9kYXRhLT5yZWZDb3VudDsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnJlZkNv
dW50KQorICAgICAgICAgICAgZGVsZXRlIG1fZGF0YTsKKyAgICB9CisgICAgbV9kYXRhID0gb3Ro
ZXIubV9kYXRhOworICAgIGlmIChtX2RhdGEgJiYgbV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8
Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAgICAgICsrbV9kYXRhLT5yZWZDb3Vu
dDsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wg
b2JsaXF1ZSkKLSAgICA6IG1fc2l6ZShzaXplKQotICAgICwgbV9ib2xkKGJvbGQpCi0gICAgLCBt
X29ibGlxdWUob2JsaXF1ZSkKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25z
dCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikgY29uc3QKIHsKKyAgICBpZiAobV9kYXRhID09IG90
aGVyLm1fZGF0YSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgZWxzZSBpZiAoIW1fZGF0YSB8
fCAhb3RoZXIubV9kYXRhCisgICAgICAgIHx8IG1fZGF0YSA9PSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpIHx8IG90aGVyLm1fZGF0YSA9PSByZWludGVycHJl
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKQorICAgICAgICByZXR1cm4gIGZh
bHNlOworCisgICAgY29uc3QgYm9vbCBlcXVhbHMgPSAobV9kYXRhLT5zaXplID09IG90aGVyLm1f
ZGF0YS0+c2l6ZQorICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fZGF0YS0+Ym9sZCA9PSBv
dGhlci5tX2RhdGEtPmJvbGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2RhdGEtPm9i
bGlxdWUgPT0gb3RoZXIubV9kYXRhLT5vYmxpcXVlCisgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgbV9kYXRhLT5mb250ID09IG90aGVyLm1fZGF0YS0+Zm9udCk7CisgICAgcmV0dXJuIGVxdWFs
czsKIH0KLSNlbmRpZgogCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKCkKLSAg
ICA6IG1fc2l6ZSgwLjBmKQotICAgICwgbV9ib2xkKGZhbHNlKQotICAgICwgbV9vYmxpcXVlKGZh
bHNlKQordW5zaWduZWQgRm9udFBsYXRmb3JtRGF0YTo6aGFzaCgpIGNvbnN0CiB7CisgICAgaWYg
KCFtX2RhdGEpCisgICAgICAgIHJldHVybiAwOworICAgIGlmIChtX2RhdGEgPT0gcmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICAgICAgcmV0dXJuIDE7
CisgICAgcmV0dXJuIHFIYXNoKG1fZGF0YS0+Zm9udC50b1N0cmluZygpKQorICAgICAgICAgICBe
IHFIYXNoKCpyZWludGVycHJldF9jYXN0PHF1aW50MzIqPigmbV9kYXRhLT5zaXplKSkKKyAgICAg
ICAgICAgXiBxSGFzaChtX2RhdGEtPmJvbGQpCisgICAgICAgICAgIF4gcUhhc2gobV9kYXRhLT5v
YmxpcXVlKTsKIH0KIAogI2lmbmRlZiBOREVCVUcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44302</attachid>
            <date>2009-12-04 04:14:54 -0800</date>
            <delta_ts>2009-12-04 04:30:28 -0800</delta_ts>
            <desc>Refactoring of the font cache to use the common FontCache</desc>
            <filename>font_cache_refactoring.patch</filename>
            <type>text/plain</type>
            <size>27457</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWY2ZTllNS4uNDE3OGVhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAwOS0xMi0wNCAgQmVuamFtaW4gUG91
bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gV2ViS2l0IGNyYXNoZXMgd2hlbiBsb2Fk
aW5nIGNlcnRhaW4gU1ZHIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjk0NDMKKworICAgICAgICBSZW1vdmUgRm9udEZhbGxiYWNrTGlzdFF0
IGFuZCByZWx5IG9uIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdAorICAgICAgICB0byBoYW5k
bGUgdGhlIGZvbnRzLiBGb250Q2FjaGUgYW5kIEZvbnRQbGF0Zm9ybURhdGEgaGF2ZSBiZWVuCisg
ICAgICAgIHVwZGF0ZWQgdG8gd29yayB3aXRoIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdC4K
KworICAgICAgICBJbiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleQorICAgICAgICB3YXMgYSBjbG9uZSBvZiBGb250UGxhdGZvcm1EYXRhIHdpdGgg
dGhlIGhhc2hpbmcKKyAgICAgICAgY2FwYWJpbGl0aWVzIGFkZGVkIGluIG9yZGVyIHRvIHVzZSBp
dCBhcyBhIGtleSBpbiB0aGUgY2FjaGUncworICAgICAgICBoYXNobWFwLiBGb250UGxhdGZvcm1E
YXRhIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgaGFzaGluZworICAgICAgICBmdW5j
dGlvbiBkaXJlY3RseSBzbyB0aGUgZGF0YSBhcmUgbm90IGNvcGllZCB0d2ljZSBpbiBtZW1vcnku
CisKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpIGZyb20gRm9udEZhbGxi
YWNrTGlzdFF0IHdhcyBhIGNvcHkgb2YKKyAgICAgICAgY29kZSBmcm9tIEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGEoKSBhbmQgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpLgorICAgICAgICBU
aGUgYmVoYXZpb3IgaXMgc2ltaWxhciBleGNlcHQgY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3Ro
KCkgd2FzCisgICAgICAgIG5vdCB0ZXN0ZWQgYW5kIHRoZSBmYWxsYmFjayBmb250cyBzZWxlY3Rv
ciB3ZXJlIG5vdCB1c2VkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENh
Y2hlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcDoK
KyAgICAgICAgUmVtb3ZlZC4gV2Ugbm93IHVzZSB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSBGb250
RmFsbGJhY2tMaXN0LmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaDoKKyAgICAgICAgQWRkIGhhc2hpbmcgY2FwYWJpbGl0aWVzIHRvIGJlIGFibGUg
dG8gdXNlIHRoZSBkYXRhIHdpdGggdGhlIEZvbnRDYWNoZS4KKyAgICAgICAgVGhpcyB3YXMgcHJl
dmlvdXNseSBkb25lIGluIEZvbnRDYWNoZVF0LmNwcAorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YVByaXZhdGU6OkZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpib2xkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Oml0YWxpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzbWFsbENhcHMpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YTo6cGl4ZWxTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToK
KwogMjAwOS0xMi0wMyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA3OWYwM2JiLi41YmY2M2U1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTExOTIsNiArMTE5Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3F0L1JHQkEzMkJ1ZmZlclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAgXApAQCAtMTIwMiw2ICsxMjAzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2Uu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXApAQCAtMjM4OSw3ICsyMzkxLDYgQEAgU09V
UkNFUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvU2hhcmVkQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HbHlw
aFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9u
dERhdGFRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0tVUkxRdC5jcHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAppbmRleCA0ZWYwM2E1Li42NDhlZWQ3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcApAQCAt
MzgsMjU2ICszOCwzMyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZvbnRDYWNoZSogZm9udENhY2hlKCkKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUlu
aXQoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udENhY2hlLCBnbG9iYWxGb250Q2Fj
aGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2JhbEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjpG
b250Q2FjaGUoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpCi17Ci19Ci0KLS8vIFRoaXMgdHlw
ZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciAtIHRoZSBv
bmUgd2hpY2gKLS8vIGdldHMgRm9udERlc2NyaXB0aW9uIGFzIGl0J3MgcGFyYW1ldGVyLgotY2xh
c3MgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKLXB1YmxpYzoKLSAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICAgICAg
OiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAgICAgLCBtX2l0YWxpYyhk
ZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgLCBtX3NtYWxsQ2FwcyhkZXNjcmlwdGlvbi5z
bWFsbENhcHMoKSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFFGb250IHdlaWdodHMgaW4gRm9udFBsYXRm
b3JtRGF0YSdzIGN0b3IgYW5kIGZvbGxvdyBpdCBoZXJlCi0gICAgICAgIGlmIChGb250UGxhdGZv
cm1EYXRhOjp0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9uLndlaWdodCgpKSA+IFFGb250OjpOb3Jt
YWwpCi0gICAgICAgICAgICBtX2JvbGQgPSB0cnVlOwotCi0gICAgICAgIGNvbnN0IEZvbnRGYW1p
bHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAgICAgICAgd2hpbGUgKGZhbWls
eSkgewotICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZChmYW1pbHktPmZhbWlseSgpKTsK
LSAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKGZh
bWlseSkKLSAgICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKCcsJyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSkKLSAgICAgICAgOiBt
X2ZhbWlseU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nPihmb250RGF0YS5mYW1pbHkoKSkpCi0gICAg
ICAgICwgbV9zaXplKGZvbnREYXRhLnBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmb250
RGF0YS5ib2xkKCkpCi0gICAgICAgICwgbV9pdGFsaWMoZm9udERhdGEuaXRhbGljKCkpCi0gICAg
ICAgICwgbV9zbWFsbENhcHMoZm9udERhdGEuc21hbGxDYXBzKCkpCi0gICAgICAgICwgbV9oYXNo
KDApCi0gICAgewotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fc2l6ZShoYXNo
VGFibGVEZWxldGVkU2l6ZSgpKSB7IH0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IGhhc2hUYWJsZURlbGV0ZWRTaXplKCk7IH0KLQot
ICAgIGVudW0gSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUgeyBIYXNoVGFibGVFbXB0eVZhbHVlIH07
Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUp
Ci0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAg
LCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9pdGFsaWMoZmFsc2UpCi0gICAgICAgICwgbV9z
bWFsbENhcHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faGFzaCAhPSBvdGhlci5tX2hhc2gpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1f
ZmFtaWx5TmFtZSwgb3RoZXIubV9mYW1pbHlOYW1lKSAmJiBtX3NpemUgPT0gb3RoZXIubV9zaXpl
ICYmCi0gICAgICAgICAgICBtX2JvbGQgPT0gb3RoZXIubV9ib2xkICYmIG1faXRhbGljID09IG90
aGVyLm1faXRhbGljICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFz
aDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXB1dGVIYXNoKCkKLSAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICAgICAgQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKG1f
ZmFtaWx5TmFtZSksCi0gICAgICAgICAgICBtX3NpemUgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9ib2xkIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIDEpKQotICAgICAgICAgICAgICAgIHwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faXRhbGljKSA8PCAoc2l6ZW9mKHVuc2lnbmVkKSAqIDgg
LSAyKQotICAgICAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc21hbGxDYXBz
KSA8PCAoc2l6ZW9mKHVuc2lnbmVkKSAqIDggLSAzKQotICAgICAgICB9OwotICAgICAgICBtX2hh
c2ggPSBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFz
aENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgU3RyaW5nIG1fZmFtaWx5TmFtZTsKLSAgICBpbnQgbV9zaXplOwotICAgIGJv
b2wgbV9ib2xkOwotICAgIGJvb2wgbV9pdGFsaWM7Ci0gICAgYm9vbCBtX3NtYWxsQ2FwczsKLSAg
ICB1bnNpZ25lZCBtX2hhc2g7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaFRhYmxlRGVsZXRl
ZFNpemUoKSB7IHJldHVybiAweEZGRkZGRkZGVTsgfQotfTsKLQotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGtleS5oYXNo
KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGIpCi0gICAgewot
ICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleT4gewotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGVt
cHR5VmFsdWUoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXksIGtleSwgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6SGFzaFRhYmxl
RW1wdHlWYWx1ZSkpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLSAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBzbG90KQot
ICAgIHsKLSAgICAgICAgbmV3ICgmc2xvdCkgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKLSAgICB9Ci19OwotCi10eXBl
ZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBGb250UGxhdGZvcm1EYXRhKiwg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJh
aXRzPiBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0KLS8vIHVzaW5nIFFfR0xPQkFMX1NUQVRJQyBs
ZWFkcyB0byBjcmFzaC4gVE9ETyBpbnZlc3RpZ2F0ZSB0aGUgd2F5IHRvIGZpeCB0aGlzLgotc3Rh
dGljIEZvbnRQbGF0Zm9ybURhdGFDYWNoZSogZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSA9IDA7Ci0K
LUZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sKQotewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSkKLSAgICAgICAgZ0ZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSA9IG5ldyBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0KLSAgICBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGRlc2NyaXB0aW9uKTsKLSAgICBGb250UGxhdGZvcm1E
YXRhKiBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5nZXQoa2V5KTsKLSAg
ICBpZiAoIXBsYXRmb3JtRGF0YSkgewotICAgICAgICBwbGF0Zm9ybURhdGEgPSBuZXcgRm9udFBs
YXRmb3JtRGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUt
PmFkZChrZXksIHBsYXRmb3JtRGF0YSk7Ci0gICAgfQotICAgIHJldHVybiBwbGF0Zm9ybURhdGE7
Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIHN0ZDo6cGFp
cjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFz
aCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwotCi1zdGF0
aWMgRm9udERhdGFDYWNoZSogZ0ZvbnREYXRhQ2FjaGUgPSAwOwotCi1zdGF0aWMgY29uc3QgaW50
IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gNDA7Ci1zdGF0aWMgY29uc3QgaW50IGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhID0gMzI7Ci0KLXN0YXRpYyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBnSW5hY3RpdmVGb250RGF0YVNldCA9IDA7Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0
Zm9ybURhdGEpCi17Ci0gICAgaWYgKCFnRm9udERhdGFDYWNoZSkgewotICAgICAgICBnRm9udERh
dGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNl
dCA9IG5ldyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OwotICAgIH0KLQotICAg
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoKmZvbnRQbGF0Zm9ybURhdGEpOwotICAgIEZv
bnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoa2V5KTsKLSAg
ICBpZiAoaXQgPT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKSB7Ci0gICAgICAgIFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqZm9udFBsYXRmb3JtRGF0YSk7Ci0g
ICAgICAgIGdGb250RGF0YUNhY2hlLT5hZGQoa2V5LCBzdGQ6OnBhaXI8U2ltcGxlRm9udERhdGEq
LCB1bnNpZ25lZD4oZm9udERhdGEsIDEpKTsKLSAgICAgICAgcmV0dXJuIGZvbnREYXRhOwotICAg
IH0KLSAgICBpZiAoIWl0LT5zZWNvbmQuc2Vjb25kKyspIHsKLSAgICAgICAgQVNTRVJUKGdJbmFj
dGl2ZUZvbnREYXRhU2V0LT5jb250YWlucyhpdC0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJ
bmFjdGl2ZUZvbnREYXRhU2V0LT5yZW1vdmUoaXQtPnNlY29uZC5maXJzdCk7Ci0gICAgfQotICAg
IHJldHVybiBpdC0+c2Vjb25kLmZpcnN0OwotfQotCi1Gb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikKK2Nv
bnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250JiwgY29uc3QgVUNoYXIqLCBpbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgV2ViQ29yZTo6U2ltcGxlRm9udERh
dGEqIGZvbnREYXRhKQotewotICAgIEFTU0VSVChnRm9udERhdGFDYWNoZSk7Ci0gICAgQVNTRVJU
KCFmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5IGtleShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwotICAgIEZvbnREYXRhQ2FjaGU6Oml0
ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoa2V5KTsKLSAgICBBU1NFUlQoaXQgIT0g
Z0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpIHsK
LSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPmFkZChpdC0+c2Vjb25kLmZpcnN0KTsKLSAg
ICAgICAgaWYgKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgPiBjTWF4SW5hY3RpdmVGb250
RGF0YSkKLSAgICAgICAgICAgIHB1cmdlSW5hY3RpdmVGb250RGF0YShnSW5hY3RpdmVGb250RGF0
YVNldC0+c2l6ZSgpIC0gY1RhcmdldEluYWN0aXZlRm9udERhdGEpOwotICAgIH0KLX0KLQotdm9p
ZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCitGb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQm
IGZvbnQpCiB7Ci0gICAgc3RhdGljIGJvb2wgaXNQdXJnaW5nOyAgLy8gR3VhcmQgYWdhaW5zdCBy
ZWVudHJ5IHdoZW4gZS5nLiBhIGRlbGV0ZWQgRm9udERhdGEgcmVsZWFzZXMgaXRzIHNtYWxsIGNh
cHMgRm9udERhdGEuCi0gICAgaWYgKGlzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aXNQdXJnaW5nID0gdHJ1ZTsKLQotICAgIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGFTZXQtPmJlZ2luKCk7Ci0gICAgTGlz
dEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZl
Rm9udERhdGFTZXQtPmVuZCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgJiYgaXQg
IT0gZW5kOyArK2ksICsraXQpIHsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtl
eSA9ICgqaXQpLT5wbGF0Zm9ybURhdGEoKTsKLSAgICAgICAgcGFpcjxTaW1wbGVGb250RGF0YSos
IHVuc2lnbmVkPiBmb250RGF0YVBhaXIgPSBnRm9udERhdGFDYWNoZS0+dGFrZShrZXkpOwotICAg
ICAgICBBU1NFUlQoZm9udERhdGFQYWlyLmZpcnN0ICE9IDApOwotICAgICAgICBBU1NFUlQoIWZv
bnREYXRhUGFpci5zZWNvbmQpOwotICAgICAgICBkZWxldGUgZm9udERhdGFQYWlyLmZpcnN0Owot
Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1E
YXRhQ2FjaGUtPnRha2Uoa2V5KTsKLSAgICAgICAgaWYgKHBsYXRmb3JtRGF0YSkKLSAgICAgICAg
ICAgIGRlbGV0ZSBwbGF0Zm9ybURhdGE7Ci0gICAgfQotCi0gICAgaWYgKGl0ID09IGVuZCkgewot
ICAgICAgICAvLyBSZW1vdmVkIGV2ZXJ5dGhpbmcKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFT
ZXQtPmNsZWFyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShnSW5h
Y3RpdmVGb250RGF0YVNldC0+YmVnaW4oKSk7Ci0gICAgfQotCi0gICAgaXNQdXJnaW5nID0gZmFs
c2U7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9u
KCkpOwogfQogCi12b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciopCitGb250
UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CisgICAgcmV0dXJuIG5ldyBGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpyZW1v
dmVDbGllbnQoRm9udFNlbGVjdG9yKikKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKIHsKIH0KIAotdm9pZCBG
b250Q2FjaGU6OmludmFsaWRhdGUoKQorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmKQogewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSB8fCAhZ0ZvbnREYXRhQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHB1cmdlSW5hY3Rp
dmVGb250RGF0YSgpOworICAgIC8vIEZJWE1FIDogd2UgbXVzdCB0YWtlIGludG8gYWNjb3VudCB0
aGUgZmFtaWxseSBuYW1lIChzZWNvbmQgYXJndW1lbnQpCisgICAgcmV0dXJuIG5ldyBGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCmluZGV4IGExOTQ2NGUuLjZlOWQwNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAt
NDMsNyArNDMsNyBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZv
bnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYgogICAgICAgICBmb250LnNldFdl
aWdodChRRm9udDo6Qm9sZCk7CiAgICAgZm9udC5zZXRJdGFsaWMoaXRhbGljKTsKIAotICAgIHJl
dHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnQsIGJvbGQpOworICAgIHJldHVybiBGb250UGxhdGZv
cm1EYXRhKGZvbnQpOwogfQogCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMzA2YWJmLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
OCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLQotICAgIFJlcGxhY2VtZW50IG9mIHRoZSBzdG9jayBGb250RmFsbGJhY2tMaXN0IGFz
IFF0IGlzIGdvaW5nIHRvIGZpbmQgdXMgYQotICAgIHJlcGxhY2VtZW50IGZvbnQsIHdpbGwgZG8g
Y2FjaGluZyBhbmQgdGhlIG90aGVyIHN0dWZmIHdlIGltcGxlbWVudCBpbgotICAgIFdlYktpdC4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0Lmgi
Ci0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAi
U2VnbWVudGVkRm9udERhdGEuaCIKLQotI2luY2x1ZGUgPFFEZWJ1Zz4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Gb250RmFsbGJhY2tMaXN0OjpGb250RmFsbGJhY2tMaXN0KCkKLSAgICA6IG1f
cGFnZVplcm8oMCkKLSAgICAsIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKDApCi0gICAg
LCBtX2ZvbnRTZWxlY3RvcigwKQotICAgICwgbV9mYW1pbHlJbmRleCgwKQotICAgICwgbV9waXRj
aChVbmtub3duUGl0Y2gpCi0gICAgLCBtX2xvYWRpbmdDdXN0b21Gb250cyhmYWxzZSkKLSAgICAs
IG1fZ2VuZXJhdGlvbigwKQotewotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmludmFsaWRh
dGUoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQot
ewotICAgIHJlbGVhc2VGb250RGF0YSgpOwotICAgIG1fZm9udExpc3QuY2xlYXIoKTsKLSAgICBt
X3BhZ2VaZXJvID0gMDsKLSAgICBtX3BhZ2VzLmNsZWFyKCk7Ci0gICAgbV9jYWNoZWRQcmltYXJ5
U2ltcGxlRm9udERhdGEgPSAwOwotICAgIG1fZmFtaWx5SW5kZXggPSAwOwotICAgIG1fcGl0Y2gg
PSBVbmtub3duUGl0Y2g7Ci0gICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSBmYWxzZTsKLSAgICBt
X2ZvbnRTZWxlY3RvciA9IGZvbnRTZWxlY3RvcjsKLSAgICBtX2dlbmVyYXRpb24gPSAwOwotfQot
Ci12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0YSgpCi17Ci0gICAgdW5zaWdu
ZWQgbnVtRm9udHMgPSBtX2ZvbnRMaXN0LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtRm9udHM7ICsraSkgewotICAgICAgICBpZiAobV9mb250TGlzdFtpXS5zZWNvbmQp
Ci0gICAgICAgICAgICBkZWxldGUgbV9mb250TGlzdFtpXS5maXJzdDsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZm9udExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVkKCkp
OwotICAgICAgICAgICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2FzdDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KG1fZm9udExpc3RbaV0uZmlyc3QpKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBGb250RmFsbGJhY2tMaXN0OjpkZXRlcm1pbmVQaXRjaChjb25zdCBX
ZWJDb3JlOjpGb250KiBmb250KSBjb25zdAotewotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0
YSA9IHByaW1hcnlGb250RGF0YShmb250KTsKLSAgICBpZiAoIWZvbnREYXRhLT5pc1NlZ21lbnRl
ZCgpKQotICAgICAgICBtX3BpdGNoID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEq
Pihmb250RGF0YSktPnBpdGNoKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRl
ZEZvbnREYXRhKiBzZWdtZW50ZWRGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNlZ21lbnRl
ZEZvbnREYXRhKj4oZm9udERhdGEpOwotICAgICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBzZWdt
ZW50ZWRGb250RGF0YS0+bnVtUmFuZ2VzKCk7Ci0gICAgICAgIGlmIChudW1SYW5nZXMgPT0gMSkK
LSAgICAgICAgICAgIG1fcGl0Y2ggPSBzZWdtZW50ZWRGb250RGF0YS0+cmFuZ2VBdCgwKS5mb250
RGF0YSgpLT5waXRjaCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BpdGNoID0gVmFy
aWFibGVQaXRjaDsKLSAgICB9Ci19Ci0KLWNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0
Ojpmb250RGF0YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250LCB1bnNpZ25lZCBpbmRleCkg
Y29uc3QKLXsKLSAgICBpZiAoaW5kZXggIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv
LyBTZWFyY2ggZm9yIHRoZSBXZWJDb3JlIGZvbnQgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBsaXN0
Ci0gICAgZm9yIChpbnQgaSA9IG1fZm9udExpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
LSAgICAgICAgcGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+IGl0ZW0gPSBtX2ZvbnRMaXN0W2ld
OwotICAgICAgICAvLyBpdGVtLnNlY29uZCBtZWFucyB0aGF0IHRoZSBpdGVtIHdhcyBjcmVhdGVk
IGxvY2FsbHkgb3Igbm90Ci0gICAgICAgIGlmICghaXRlbS5zZWNvbmQpCi0gICAgICAgICAgICBy
ZXR1cm4gaXRlbS5maXJzdDsKLSAgICB9Ci0KLSAgICAvLyBVc2UgdGhlIEZvbnRTZWxlY3RvciB0
byBnZXQgYSBXZWJDb3JlIGZvbnQgYW5kIHRoZW4gZmFsbGJhY2sgdG8gUXQKLSAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uID0gX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAg
ICB3aGlsZSAoZmFtaWx5KSB7Ci0gICAgICAgIGlmIChmYW1pbHktPmZhbWlseSgpLmxlbmd0aCgp
ICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBGb250RGF0YSogZGF0YSA9IG1fZm9u
dFNlbGVjdG9yLT5nZXRGb250RGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5LT5mYW1pbHkoKSk7Ci0g
ICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIGlmIChkYXRhLT5pc0xvYWRp
bmcoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGlmICghZGF0YS0+aXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQ3VzdG9tIGZvbnRzIGNhbiBiZSBmcmVlZCBhbnl0aW1lIHNvIHdlIG11c3Qg
bm90IGhvbGQgdGhlbQotICAgICAgICAgICAgICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWly
PGNvbnN0IEZvbnREYXRhKiwgYm9vbD4oZGF0YSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZmFtaWx5ID0gZmFtaWx5LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKG1fZm9u
dExpc3Quc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9mb250TGlzdFswXS5maXJzdDsKLQotICAg
IGNvbnN0IEZvbnREYXRhKiByZXN1bHQgPSBuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3Jt
RGF0YShkZXNjcmlwdGlvbiwgX2ZvbnQtPndvcmRTcGFjaW5nKCksIF9mb250LT5sZXR0ZXJTcGFj
aW5nKCkpLCB0cnVlKTsKLSAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRh
KiwgYm9vbD4ocmVzdWx0LCB0cnVlKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY29uc3Qg
Rm9udERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6OmZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBX
ZWJDb3JlOjpGb250KiBmb250LCBjb25zdCBVQ2hhciosIGludCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcHJpbWFyeUZvbnREYXRhKGZvbnQpOwotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnNl
dFBsYXRmb3JtRm9udChjb25zdCBXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhJikKLXsKLSAgICBt
X2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA1Y2Q2ZWQyLi4z
MDZhZGE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9y
bURhdGEuaApAQCAtMjYsMjAgKzI2LDYyIEBACiAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRSGFzaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBTdHJpbmc7CitjbGFzcyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSB7Citw
dWJsaWM6CisgICAgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoKQorICAgICAgICA6IHJlZkNvdW50
KDEpCisgICAgICAgICwgc2l6ZShmb250LnBvaW50U2l6ZUYoKSkKKyAgICAgICAgLCBib2xkKGZv
bnQuYm9sZCgpKQorICAgICAgICAsIG9ibGlxdWUoZmFsc2UpCisgICAge30KKyAgICBGb250UGxh
dGZvcm1EYXRhUHJpdmF0ZShjb25zdCBmbG9hdCBzaXplLCBjb25zdCBib29sIGJvbGQsIGNvbnN0
IGJvb2wgb2JsaXF1ZSkKKyAgICAgICAgOiByZWZDb3VudCgxKQorICAgICAgICAsIHNpemUoc2l6
ZSkKKyAgICAgICAgLCBib2xkKGJvbGQpCisgICAgICAgICwgb2JsaXF1ZShvYmxpcXVlKQorICAg
IHt9CisgICAgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoY29uc3QgUUZvbnQmIGZvbnQpCisgICAg
ICAgIDogcmVmQ291bnQoMSkKKyAgICAgICAgLCBmb250KGZvbnQpCisgICAgICAgICwgc2l6ZShm
b250LnBvaW50U2l6ZUYoKSkKKyAgICAgICAgLCBib2xkKGZvbnQuYm9sZCgpKQorICAgICAgICAs
IG9ibGlxdWUoZmFsc2UpCisgICAge30KKyAgICB1bnNpZ25lZCByZWZDb3VudDsKKyAgICBRRm9u
dCBmb250OworICAgIGZsb2F0IHNpemU7CisgICAgYm9vbCBib2xkIDogMTsKKyAgICBib29sIG9i
bGlxdWUgOiAxOworfTsKKworCiAKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgOiBwdWJsaWMgRmFz
dEFsbG9jQmFzZQoteworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSA6IHB1YmxpYyBGYXN0QWxsb2NC
YXNlIHsKIHB1YmxpYzoKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIEZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotI2VuZGlmCi0gICAgRm9u
dFBsYXRmb3JtRGF0YSgpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSAmKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGlu
dCB3b3JkU3BhY2luZyA9IDAsIGludCBsZXR0ZXJTcGFjaW5nID0gMCk7Ci0gICAgRm9udFBsYXRm
b3JtRGF0YShjb25zdCBRRm9udCYsIGJvb2wgYm9sZCk7CisgICAgRm9udFBsYXRmb3JtRGF0YShj
b25zdCBRRm9udCYgZm9udCkKKyAgICAgICAgOiBtX2RhdGEobmV3IEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlKGZvbnQpKQorICAgIHt9CisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9kYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Rm9u
dFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAge30KKworICAgIH5Gb250UGxhdGZvcm1E
YXRhKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikg
Y29uc3Q7CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2RhdGEgPT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1E
YXRhUHJpdmF0ZSo+KC0xKTsKKyAgICB9CiAKICAgICBzdGF0aWMgaW5saW5lIFFGb250OjpXZWln
aHQgdG9RRm9udFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCiAgICAgewpAQCAtNjIsMjIg
KzEwNCw2MiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBRRm9udCBmb250KCkg
Y29uc3QgeyByZXR1cm4gbV9mb250OyB9Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotICAgIFFTdHJpbmcgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZh
bWlseSgpOyB9Ci0gICAgYm9vbCBib2xkKCkgY29uc3QgeyByZXR1cm4gbV9ib2xkOyB9Ci0gICAg
Ym9vbCBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuaXRhbGljKCk7IH0KLSAgICBib29s
IHNtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5jYXBpdGFsaXphdGlvbigpID09IFFG
b250OjpTbWFsbENhcHM7IH0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9m
b250LnBpeGVsU2l6ZSgpOyB9CisgICAgUUZvbnQgZm9udCgpIGNvbnN0CisgICAgeworICAgICAg
ICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJp
dmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbV9k
YXRhLT5mb250OworICAgICAgICByZXR1cm4gUUZvbnQoKTsKKyAgICB9CisgICAgZmxvYXQgc2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRf
Y2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEp
CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5zaXplOworICAgICAgICByZXR1cm4gMC4wZjsK
KyAgICB9CisgICAgUVN0cmluZyBmYW1pbHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NF
UlQobV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigt
MSkpOworICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Zm9u
dC5mYW1pbHkoKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICB9CisgICAgYm9vbCBi
b2xkKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSByZWludGVycHJl
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAgaWYgKG1fZGF0
YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmJvbGQ7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgYm9vbCBpdGFsaWMoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NF
UlQobV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigt
MSkpOworICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Zm9u
dC5pdGFsaWMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIHNtYWxs
Q2FwcygpIGNvbnN0CisgICAgeworICAgICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2Rh
dGEpCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5mb250LmNhcGl0YWxpemF0aW9uKCkgPT0g
UUZvbnQ6OlNtYWxsQ2FwczsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpbnQg
cGl4ZWxTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSByZWlu
dGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAgaWYg
KG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmZvbnQucGl4ZWxTaXplKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAjZW5kaWYKLQot
ICAgIGZsb2F0IG1fc2l6ZTsKLSAgICBib29sIG1fYm9sZDsKLSAgICBib29sIG1fb2JsaXF1ZTsK
LSAgICBRRm9udCBtX2ZvbnQ7Citwcml2YXRlOgorICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRl
KiBtX2RhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXggNzcwOWJl
Ni4uY2NmZDgxMCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UGxhdGZvcm1EYXRhUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFBsYXRmb3JtRGF0YVF0LmNwcApAQCAtMjYsMTAgKzI2LDIzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKK3sKKyAgICBpZiAoIWJvbGQgJiYgIW9ibGlxdWUgJiYg
IXNpemUpCisgICAgICAgIC8vIHRoaXMgaXMgdGhlIGVtcHR5IHZhbHVlIGJ5IGRlZmluaXRpb24g
b2YgdGhlIHRyYWl0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMKKyAgICAgICAgbV9kYXRhID0gMDsK
KyAgICBlbHNlCisgICAgICAgIG1fZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZShz
aXplLCBib2xkLCBvYmxpcXVlKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhICZvdGhlcikgOiBtX2RhdGEob3RoZXIubV9kYXRh
KQoreworICAgIGlmIChtX2RhdGEgJiYgbV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAgICAgICsrbV9kYXRhLT5yZWZDb3VudDsKK30K
KwogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRp
b24mIGRlc2NyaXB0aW9uLCBpbnQgd29yZFNwYWNpbmcsIGludCBsZXR0ZXJTcGFjaW5nKQotICAg
IDogbV9zaXplKDAuMGYpCi0gICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgLCBtX29ibGlxdWUoZmFs
c2UpCisgICAgOiBtX2RhdGEobmV3IEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKCkpCiB7CiAgICAg
UVN0cmluZyBmYW1pbHlOYW1lOwogICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNj
cmlwdGlvbi5mYW1pbHkoKTsKQEAgLTM5LDQzICs1Miw3MCBAQCBGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGludCB3
b3JkUwogICAgICAgICBpZiAoZmFtaWx5KQogICAgICAgICAgICAgZmFtaWx5TmFtZSArPSBRTGF0
aW4xQ2hhcignLCcpOwogICAgIH0KKyAgICBRRm9udCYgZm9udCA9IG1fZGF0YS0+Zm9udDsKKyAg
ICBmb250LnNldEZhbWlseShmYW1pbHlOYW1lKTsKKyAgICBmb250LnNldFBpeGVsU2l6ZShxUm91
bmQoZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpKTsKKyAgICBmb250LnNldEl0YWxpYyhkZXNj
cmlwdGlvbi5pdGFsaWMoKSk7CisgICAgZm9udC5zZXRXZWlnaHQodG9RRm9udFdlaWdodChkZXNj
cmlwdGlvbi53ZWlnaHQoKSkpOworICAgIGZvbnQuc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcp
OworICAgIGZvbnQuc2V0TGV0dGVyU3BhY2luZyhRRm9udDo6QWJzb2x1dGVTcGFjaW5nLCBsZXR0
ZXJTcGFjaW5nKTsKKyAgICBjb25zdCBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxs
Q2FwcygpOworICAgIGZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNt
YWxsQ2FwcyA6IFFGb250OjpNaXhlZENhc2UpOworCisgICAgbV9kYXRhLT5ib2xkID0gZm9udC5i
b2xkKCk7CisgICAgbV9kYXRhLT5zaXplID0gZm9udC5wb2ludFNpemVGKCk7Cit9CiAKLSAgICBt
X2ZvbnQuc2V0RmFtaWx5KGZhbWlseU5hbWUpOwotICAgIG1fZm9udC5zZXRQaXhlbFNpemUocVJv
dW5kKGRlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKSk7Ci0gICAgbV9mb250LnNldEl0YWxpYyhk
ZXNjcmlwdGlvbi5pdGFsaWMoKSk7Ci0KLSAgICBtX2ZvbnQuc2V0V2VpZ2h0KHRvUUZvbnRXZWln
aHQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpKTsKLSAgICBtX2JvbGQgPSBtX2ZvbnQuYm9sZCgpOwot
Ci0gICAgYm9vbCBzbWFsbENhcHMgPSBkZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsKLSAgICBtX2Zv
bnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNtYWxsQ2FwcyA6IFFGb250
OjpNaXhlZENhc2UpOwotICAgIG1fZm9udC5zZXRXb3JkU3BhY2luZyh3b3JkU3BhY2luZyk7Ci0g
ICAgbV9mb250LnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFic29sdXRlU3BhY2luZywgbGV0dGVy
U3BhY2luZyk7Ci0gICAgbV9zaXplID0gbV9mb250LnBvaW50U2l6ZSgpOworRm9udFBsYXRmb3Jt
RGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAgIGlmICghbV9kYXRhIHx8IG1fZGF0YSA9
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKQorICAgICAg
ICByZXR1cm47CisgICAgLS1tX2RhdGEtPnJlZkNvdW50OworICAgIGlmICghbV9kYXRhLT5yZWZD
b3VudCkKKyAgICAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9u
dFBsYXRmb3JtRGF0YShjb25zdCBRRm9udCYgZm9udCwgYm9vbCBib2xkKQotICAgIDogbV9zaXpl
KGZvbnQucG9pbnRTaXplKCkpCi0gICAgLCBtX2JvbGQoYm9sZCkKLSAgICAsIG1fb2JsaXF1ZShm
YWxzZSkKLSAgICAsIG1fZm9udChmb250KQorRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3Jt
RGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQogeworICAgIGlm
IChtX2RhdGEgPT0gb3RoZXIubV9kYXRhKQorICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgaWYg
KG1fZGF0YSAmJiBtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJp
dmF0ZSo+KC0xKSkgeworICAgICAgICAtLW1fZGF0YS0+cmVmQ291bnQ7CisgICAgICAgIGlmICgh
bV9kYXRhLT5yZWZDb3VudCkKKyAgICAgICAgICAgIGRlbGV0ZSBtX2RhdGE7CisgICAgfQorICAg
IG1fZGF0YSA9IG90aGVyLm1fZGF0YTsKKyAgICBpZiAobV9kYXRhICYmIG1fZGF0YSAhPSByZWlu
dGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKQorICAgICAgICArK21f
ZGF0YS0+cmVmQ291bnQ7CisgICAgcmV0dXJuICp0aGlzOwogfQogCi0jaWYgRU5BQkxFKFNWR19G
T05UUykKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6ZSwgYm9v
bCBib2xkLCBib29sIG9ibGlxdWUpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1fYm9sZChi
b2xkKQotICAgICwgbV9vYmxpcXVlKG9ibGlxdWUpCitib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9w
ZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiB7CisgICAgaWYg
KG1fZGF0YSA9PSBvdGhlci5tX2RhdGEpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYg
KCFtX2RhdGEgfHwgIW90aGVyLm1fZGF0YQorICAgICAgICB8fCBtX2RhdGEgPT0gcmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSB8fCBvdGhlci5tX2RhdGEgPT0g
cmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICAgICAg
cmV0dXJuICBmYWxzZTsKKworICAgIGNvbnN0IGJvb2wgZXF1YWxzID0gKG1fZGF0YS0+c2l6ZSA9
PSBvdGhlci5tX2RhdGEtPnNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBtX2RhdGEt
PmJvbGQgPT0gb3RoZXIubV9kYXRhLT5ib2xkCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYg
bV9kYXRhLT5vYmxpcXVlID09IG90aGVyLm1fZGF0YS0+b2JsaXF1ZQorICAgICAgICAgICAgICAg
ICAgICAgICAgICYmIG1fZGF0YS0+Zm9udCA9PSBvdGhlci5tX2RhdGEtPmZvbnQpOworICAgIHJl
dHVybiBlcXVhbHM7CiB9Ci0jZW5kaWYKIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YSgpCi0gICAgOiBtX3NpemUoMC4wZikKLSAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAsIG1f
b2JsaXF1ZShmYWxzZSkKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBjb25zdAog
eworICAgIGlmICghbV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9kYXRhID09
IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAgICAg
IHJldHVybiAxOworICAgIHJldHVybiBxSGFzaChtX2RhdGEtPmZvbnQudG9TdHJpbmcoKSkKKyAg
ICAgICAgICAgXiBxSGFzaCgqcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4oJm1fZGF0YS0+c2l6
ZSkpCisgICAgICAgICAgIF4gcUhhc2gobV9kYXRhLT5ib2xkKQorICAgICAgICAgICBeIHFIYXNo
KG1fZGF0YS0+b2JsaXF1ZSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44303</attachid>
            <date>2009-12-04 04:30:28 -0800</date>
            <delta_ts>2009-12-04 04:33:50 -0800</delta_ts>
            <desc>Refactoring of the font cache to use the common FontCache</desc>
            <filename>font_cache_refactoring.patch</filename>
            <type>text/plain</type>
            <size>27463</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWY2ZTllNS4uNDE3OGVhOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAwOS0xMi0wNCAgQmVuamFtaW4gUG91
bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gV2ViS2l0IGNyYXNoZXMgd2hlbiBsb2Fk
aW5nIGNlcnRhaW4gU1ZHIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjk0NDMKKworICAgICAgICBSZW1vdmUgRm9udEZhbGxiYWNrTGlzdFF0
IGFuZCByZWx5IG9uIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdAorICAgICAgICB0byBoYW5k
bGUgdGhlIGZvbnRzLiBGb250Q2FjaGUgYW5kIEZvbnRQbGF0Zm9ybURhdGEgaGF2ZSBiZWVuCisg
ICAgICAgIHVwZGF0ZWQgdG8gd29yayB3aXRoIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdC4K
KworICAgICAgICBJbiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleQorICAgICAgICB3YXMgYSBjbG9uZSBvZiBGb250UGxhdGZvcm1EYXRhIHdpdGgg
dGhlIGhhc2hpbmcKKyAgICAgICAgY2FwYWJpbGl0aWVzIGFkZGVkIGluIG9yZGVyIHRvIHVzZSBp
dCBhcyBhIGtleSBpbiB0aGUgY2FjaGUncworICAgICAgICBoYXNobWFwLiBGb250UGxhdGZvcm1E
YXRhIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgaGFzaGluZworICAgICAgICBmdW5j
dGlvbiBkaXJlY3RseSBzbyB0aGUgZGF0YSBhcmUgbm90IGNvcGllZCB0d2ljZSBpbiBtZW1vcnku
CisKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpIGZyb20gRm9udEZhbGxi
YWNrTGlzdFF0IHdhcyBhIGNvcHkgb2YKKyAgICAgICAgY29kZSBmcm9tIEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGEoKSBhbmQgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpLgorICAgICAgICBU
aGUgYmVoYXZpb3IgaXMgc2ltaWxhciBleGNlcHQgY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3Ro
KCkgd2FzCisgICAgICAgIG5vdCB0ZXN0ZWQgYW5kIHRoZSBmYWxsYmFjayBmb250cyBzZWxlY3Rv
ciB3ZXJlIG5vdCB1c2VkLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gKE9PUFMhKQorCisgICAg
ICAgICogV2ViQ29yZS5wcm86CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENh
Y2hlUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpwbGF0Zm9ybUluaXQpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRTaW1pbGFyRm9udFBsYXRmb3JtRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWlseSk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcDoK
KyAgICAgICAgUmVtb3ZlZC4gV2Ugbm93IHVzZSB0aGUgaW1wbGVtZW50YXRpb24gZnJvbSBGb250
RmFsbGJhY2tMaXN0LmNwcAorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaDoKKyAgICAgICAgQWRkIGhhc2hpbmcgY2FwYWJpbGl0aWVzIHRvIGJlIGFibGUg
dG8gdXNlIHRoZSBkYXRhIHdpdGggdGhlIEZvbnRDYWNoZS4KKyAgICAgICAgVGhpcyB3YXMgcHJl
dmlvdXNseSBkb25lIGluIEZvbnRDYWNoZVF0LmNwcAorICAgICAgICAoV2ViQ29yZTo6Rm9udFBs
YXRmb3JtRGF0YVByaXZhdGU6OkZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Zm9udCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpzaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmZhbWlseSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpib2xkKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6Oml0YWxpYyk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzbWFsbENhcHMpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YTo6cGl4ZWxTaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZv
cm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpoYXNoKToK
KwogMjAwOS0xMi0wMyAgRGltaXRyaSBHbGF6a292ICA8ZGdsYXprb3ZAY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IEFkYW0gQmFydGguCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dl
YkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCA3OWYwM2JiLi41YmY2M2U1IDEw
MDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8K
QEAgLTExOTIsNiArMTE5Miw3IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL2ltYWdlLWRl
Y29kZXJzL3F0L1JHQkEzMkJ1ZmZlclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZmls
dGVycy9GRUdhdXNzaWFuQmx1ci5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnREZXNj
cmlwdGlvbi5jcHAgXAorICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFtaWx5LmNwcCBcCiAgICAgcGxhdGZvcm0v
Z3JhcGhpY3MvQml0bWFwSW1hZ2UuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Db2xvci5j
cHAgXApAQCAtMTIwMiw2ICsxMjAzLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvRmxvYXRTaXplLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udERhdGEuY3Bw
IFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhY2hlLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvR2VuZXJhdGVkSW1hZ2Uu
Y3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HcmFkaWVudC5jcHAgXAogICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAgXApAQCAtMjM4OSw3ICsyMzkxLDYgQEAgU09V
UkNFUyArPSBcCiAgICAgcGxhdGZvcm0vcXQvU2hhcmVkQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNz
L3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwIFwKLSAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9xdC9HbHlw
aFBhZ2VUcmVlTm9kZVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvcXQvU2ltcGxlRm9u
dERhdGFRdC5jcHAgXAogICAgIHBsYXRmb3JtL3F0L0tVUkxRdC5jcHAgXApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q2FjaGVRdC5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcAppbmRleCA0ZWYwM2E1Li42NDhlZWQ3
IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcApAQCAt
MzgsMjU2ICszOCwzMyBAQCB1c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKLUZvbnRDYWNoZSogZm9udENhY2hlKCkKK3ZvaWQgRm9udENhY2hlOjpwbGF0Zm9ybUlu
aXQoKQogewotICAgIERFRklORV9TVEFUSUNfTE9DQUwoRm9udENhY2hlLCBnbG9iYWxGb250Q2Fj
aGUsICgpKTsKLSAgICByZXR1cm4gJmdsb2JhbEZvbnRDYWNoZTsKIH0KIAotRm9udENhY2hlOjpG
b250Q2FjaGUoKQotewotfQotCi12b2lkIEZvbnRDYWNoZTo6Z2V0VHJhaXRzSW5GYW1pbHkoY29u
c3QgQXRvbWljU3RyaW5nJiwgVmVjdG9yPHVuc2lnbmVkPiYpCi17Ci19Ci0KLS8vIFRoaXMgdHlw
ZSBtdXN0IGJlIGNvbnNpc3RlbnQgd2l0aCBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciAtIHRoZSBv
bmUgd2hpY2gKLS8vIGdldHMgRm9udERlc2NyaXB0aW9uIGFzIGl0J3MgcGFyYW1ldGVyLgotY2xh
c3MgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IHsKLXB1YmxpYzoKLSAgICBGb250UGxhdGZvcm1E
YXRhQ2FjaGVLZXkoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKLSAgICAgICAg
OiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6ZShkZXNjcmlwdGlvbi5jb21wdXRlZFBp
eGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAgICAgLCBtX2l0YWxpYyhk
ZXNjcmlwdGlvbi5pdGFsaWMoKSkKLSAgICAgICAgLCBtX3NtYWxsQ2FwcyhkZXNjcmlwdGlvbi5z
bWFsbENhcHMoKSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBNYXAgYWxsIEZvbnRXZWlnaHQgdmFsdWVzIHRvIFFGb250IHdlaWdodHMgaW4gRm9udFBsYXRm
b3JtRGF0YSdzIGN0b3IgYW5kIGZvbGxvdyBpdCBoZXJlCi0gICAgICAgIGlmIChGb250UGxhdGZv
cm1EYXRhOjp0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9uLndlaWdodCgpKSA+IFFGb250OjpOb3Jt
YWwpCi0gICAgICAgICAgICBtX2JvbGQgPSB0cnVlOwotCi0gICAgICAgIGNvbnN0IEZvbnRGYW1p
bHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAgICAgICAgd2hpbGUgKGZhbWls
eSkgewotICAgICAgICAgICAgbV9mYW1pbHlOYW1lLmFwcGVuZChmYW1pbHktPmZhbWlseSgpKTsK
LSAgICAgICAgICAgIGZhbWlseSA9IGZhbWlseS0+bmV4dCgpOwotICAgICAgICAgICAgaWYgKGZh
bWlseSkKLSAgICAgICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKCcsJyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSkKLSAgICAgICAgOiBt
X2ZhbWlseU5hbWUoc3RhdGljX2Nhc3Q8U3RyaW5nPihmb250RGF0YS5mYW1pbHkoKSkpCi0gICAg
ICAgICwgbV9zaXplKGZvbnREYXRhLnBpeGVsU2l6ZSgpKQotICAgICAgICAsIG1fYm9sZChmb250
RGF0YS5ib2xkKCkpCi0gICAgICAgICwgbV9pdGFsaWMoZm9udERhdGEuaXRhbGljKCkpCi0gICAg
ICAgICwgbV9zbWFsbENhcHMoZm9udERhdGEuc21hbGxDYXBzKCkpCi0gICAgICAgICwgbV9oYXNo
KDApCi0gICAgewotICAgICAgICBjb21wdXRlSGFzaCgpOwotICAgIH0KLQotICAgIEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVEZWxldGVkVmFsdWVUeXBlKSA6IG1fc2l6ZShoYXNo
VGFibGVEZWxldGVkU2l6ZSgpKSB7IH0KLSAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV9zaXplID09IGhhc2hUYWJsZURlbGV0ZWRTaXplKCk7IH0KLQot
ICAgIGVudW0gSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUgeyBIYXNoVGFibGVFbXB0eVZhbHVlIH07
Ci0KLSAgICBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkoSGFzaFRhYmxlRW1wdHlWYWx1ZVR5cGUp
Ci0gICAgICAgIDogbV9mYW1pbHlOYW1lKCkKLSAgICAgICAgLCBtX3NpemUoMCkKLSAgICAgICAg
LCBtX2JvbGQoZmFsc2UpCi0gICAgICAgICwgbV9pdGFsaWMoZmFsc2UpCi0gICAgICAgICwgbV9z
bWFsbENhcHMoZmFsc2UpCi0gICAgICAgICwgbV9oYXNoKDApCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIG90aGVyKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKG1faGFzaCAhPSBvdGhlci5tX2hhc2gpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGVxdWFsSWdub3JpbmdDYXNlKG1f
ZmFtaWx5TmFtZSwgb3RoZXIubV9mYW1pbHlOYW1lKSAmJiBtX3NpemUgPT0gb3RoZXIubV9zaXpl
ICYmCi0gICAgICAgICAgICBtX2JvbGQgPT0gb3RoZXIubV9ib2xkICYmIG1faXRhbGljID09IG90
aGVyLm1faXRhbGljICYmIG1fc21hbGxDYXBzID09IG90aGVyLm1fc21hbGxDYXBzOwotICAgIH0K
LQotICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1faGFz
aDsKLSAgICB9Ci0KLSAgICB2b2lkIGNvbXB1dGVIYXNoKCkKLSAgICB7Ci0gICAgICAgIHVuc2ln
bmVkIGhhc2hDb2Rlc1tdID0gewotICAgICAgICAgICAgQ2FzZUZvbGRpbmdIYXNoOjpoYXNoKG1f
ZmFtaWx5TmFtZSksCi0gICAgICAgICAgICBtX3NpemUgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9ib2xkIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIDEpKQotICAgICAgICAgICAgICAgIHwg
c3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1faXRhbGljKSA8PCAoc2l6ZW9mKHVuc2lnbmVkKSAqIDgg
LSAyKQotICAgICAgICAgICAgICAgIHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1fc21hbGxDYXBz
KSA8PCAoc2l6ZW9mKHVuc2lnbmVkKSAqIDggLSAzKQotICAgICAgICB9OwotICAgICAgICBtX2hh
c2ggPSBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaChyZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFz
aENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKLSAgICB9Ci0KLXBy
aXZhdGU6Ci0gICAgU3RyaW5nIG1fZmFtaWx5TmFtZTsKLSAgICBpbnQgbV9zaXplOwotICAgIGJv
b2wgbV9ib2xkOwotICAgIGJvb2wgbV9pdGFsaWM7Ci0gICAgYm9vbCBtX3NtYWxsQ2FwczsKLSAg
ICB1bnNpZ25lZCBtX2hhc2g7Ci0KLSAgICBzdGF0aWMgdW5zaWduZWQgaGFzaFRhYmxlRGVsZXRl
ZFNpemUoKSB7IHJldHVybiAweEZGRkZGRkZGVTsgfQotfTsKLQotc3RydWN0IEZvbnRQbGF0Zm9y
bURhdGFDYWNoZUtleUhhc2ggewotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IEZvbnRQ
bGF0Zm9ybURhdGFDYWNoZUtleSYga2V5KQotICAgIHsKLSAgICAgICAgcmV0dXJuIGtleS5oYXNo
KCk7Ci0gICAgfQotCi0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgRm9udFBsYXRmb3JtRGF0
YUNhY2hlS2V5JiBhLCBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGIpCi0gICAgewot
ICAgICAgICByZXR1cm4gYSA9PSBiOwotICAgIH0KLQotICAgIHN0YXRpYyBjb25zdCBib29sIHNh
ZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0gdHJ1ZTsKLX07Ci0KLXN0cnVjdCBGb250UGxh
dGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHMgOiBXVEY6OkdlbmVyaWNIYXNoVHJhaXRzPEZvbnRQbGF0
Zm9ybURhdGFDYWNoZUtleT4gewotICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rp
b24gPSB0cnVlOwotICAgIHN0YXRpYyBjb25zdCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGVt
cHR5VmFsdWUoKQotICAgIHsKLSAgICAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXksIGtleSwgKEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleTo6SGFzaFRhYmxl
RW1wdHlWYWx1ZSkpOwotICAgICAgICByZXR1cm4ga2V5OwotICAgIH0KLSAgICBzdGF0aWMgdm9p
ZCBjb25zdHJ1Y3REZWxldGVkVmFsdWUoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBzbG90KQot
ICAgIHsKLSAgICAgICAgbmV3ICgmc2xvdCkgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hU
YWJsZURlbGV0ZWRWYWx1ZSk7Ci0gICAgfQotICAgIHN0YXRpYyBib29sIGlzRGVsZXRlZFZhbHVl
KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYgdmFsdWUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gdmFsdWUuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsKLSAgICB9Ci19OwotCi10eXBl
ZGVmIEhhc2hNYXA8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5LCBGb250UGxhdGZvcm1EYXRhKiwg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJh
aXRzPiBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0KLS8vIHVzaW5nIFFfR0xPQkFMX1NUQVRJQyBs
ZWFkcyB0byBjcmFzaC4gVE9ETyBpbnZlc3RpZ2F0ZSB0aGUgd2F5IHRvIGZpeCB0aGlzLgotc3Rh
dGljIEZvbnRQbGF0Zm9ybURhdGFDYWNoZSogZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSA9IDA7Ci0K
LUZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udFBsYXRmb3JtRGF0YShj
b25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmLCBi
b29sKQotewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNoZSkKLSAgICAgICAgZ0ZvbnRQ
bGF0Zm9ybURhdGFDYWNoZSA9IG5ldyBGb250UGxhdGZvcm1EYXRhQ2FjaGU7Ci0KLSAgICBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkga2V5KGRlc2NyaXB0aW9uKTsKLSAgICBGb250UGxhdGZvcm1E
YXRhKiBwbGF0Zm9ybURhdGEgPSBnRm9udFBsYXRmb3JtRGF0YUNhY2hlLT5nZXQoa2V5KTsKLSAg
ICBpZiAoIXBsYXRmb3JtRGF0YSkgewotICAgICAgICBwbGF0Zm9ybURhdGEgPSBuZXcgRm9udFBs
YXRmb3JtRGF0YShkZXNjcmlwdGlvbik7Ci0gICAgICAgIGdGb250UGxhdGZvcm1EYXRhQ2FjaGUt
PmFkZChrZXksIHBsYXRmb3JtRGF0YSk7Ci0gICAgfQotICAgIHJldHVybiBwbGF0Zm9ybURhdGE7
Ci19Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIHN0ZDo6cGFp
cjxTaW1wbGVGb250RGF0YSosIHVuc2lnbmVkPiwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFz
aCwgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5VHJhaXRzPiBGb250RGF0YUNhY2hlOwotCi1zdGF0
aWMgRm9udERhdGFDYWNoZSogZ0ZvbnREYXRhQ2FjaGUgPSAwOwotCi1zdGF0aWMgY29uc3QgaW50
IGNNYXhJbmFjdGl2ZUZvbnREYXRhID0gNDA7Ci1zdGF0aWMgY29uc3QgaW50IGNUYXJnZXRJbmFj
dGl2ZUZvbnREYXRhID0gMzI7Ci0KLXN0YXRpYyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250
RGF0YSo+KiBnSW5hY3RpdmVGb250RGF0YVNldCA9IDA7Ci0KLVNpbXBsZUZvbnREYXRhKiBGb250
Q2FjaGU6OmdldENhY2hlZEZvbnREYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIGZvbnRQbGF0
Zm9ybURhdGEpCi17Ci0gICAgaWYgKCFnRm9udERhdGFDYWNoZSkgewotICAgICAgICBnRm9udERh
dGFDYWNoZSA9IG5ldyBGb250RGF0YUNhY2hlOwotICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNl
dCA9IG5ldyBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OwotICAgIH0KLQotICAg
IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoKmZvbnRQbGF0Zm9ybURhdGEpOwotICAgIEZv
bnREYXRhQ2FjaGU6Oml0ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoa2V5KTsKLSAg
ICBpZiAoaXQgPT0gZ0ZvbnREYXRhQ2FjaGUtPmVuZCgpKSB7Ci0gICAgICAgIFNpbXBsZUZvbnRE
YXRhKiBmb250RGF0YSA9IG5ldyBTaW1wbGVGb250RGF0YSgqZm9udFBsYXRmb3JtRGF0YSk7Ci0g
ICAgICAgIGdGb250RGF0YUNhY2hlLT5hZGQoa2V5LCBzdGQ6OnBhaXI8U2ltcGxlRm9udERhdGEq
LCB1bnNpZ25lZD4oZm9udERhdGEsIDEpKTsKLSAgICAgICAgcmV0dXJuIGZvbnREYXRhOwotICAg
IH0KLSAgICBpZiAoIWl0LT5zZWNvbmQuc2Vjb25kKyspIHsKLSAgICAgICAgQVNTRVJUKGdJbmFj
dGl2ZUZvbnREYXRhU2V0LT5jb250YWlucyhpdC0+c2Vjb25kLmZpcnN0KSk7Ci0gICAgICAgIGdJ
bmFjdGl2ZUZvbnREYXRhU2V0LT5yZW1vdmUoaXQtPnNlY29uZC5maXJzdCk7Ci0gICAgfQotICAg
IHJldHVybiBpdC0+c2Vjb25kLmZpcnN0OwotfQotCi1Gb250UGxhdGZvcm1EYXRhKiBGb250Q2Fj
aGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJikKK2Nv
bnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhj
b25zdCBGb250JiwgY29uc3QgVUNoYXIqLCBpbnQpCiB7CiAgICAgcmV0dXJuIDA7CiB9CiAKLXZv
aWQgRm9udENhY2hlOjpyZWxlYXNlRm9udERhdGEoY29uc3QgV2ViQ29yZTo6U2ltcGxlRm9udERh
dGEqIGZvbnREYXRhKQotewotICAgIEFTU0VSVChnRm9udERhdGFDYWNoZSk7Ci0gICAgQVNTRVJU
KCFmb250RGF0YS0+aXNDdXN0b21Gb250KCkpOwotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hl
S2V5IGtleShmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkpOwotICAgIEZvbnREYXRhQ2FjaGU6Oml0
ZXJhdG9yIGl0ID0gZ0ZvbnREYXRhQ2FjaGUtPmZpbmQoa2V5KTsKLSAgICBBU1NFUlQoaXQgIT0g
Z0ZvbnREYXRhQ2FjaGUtPmVuZCgpKTsKLSAgICBpZiAoIS0taXQtPnNlY29uZC5zZWNvbmQpIHsK
LSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPmFkZChpdC0+c2Vjb25kLmZpcnN0KTsKLSAg
ICAgICAgaWYgKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgPiBjTWF4SW5hY3RpdmVGb250
RGF0YSkKLSAgICAgICAgICAgIHB1cmdlSW5hY3RpdmVGb250RGF0YShnSW5hY3RpdmVGb250RGF0
YVNldC0+c2l6ZSgpIC0gY1RhcmdldEluYWN0aXZlRm9udERhdGEpOwotICAgIH0KLX0KLQotdm9p
ZCBGb250Q2FjaGU6OnB1cmdlSW5hY3RpdmVGb250RGF0YShpbnQgY291bnQpCitGb250UGxhdGZv
cm1EYXRhKiBGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnQm
IGZvbnQpCiB7Ci0gICAgc3RhdGljIGJvb2wgaXNQdXJnaW5nOyAgLy8gR3VhcmQgYWdhaW5zdCBy
ZWVudHJ5IHdoZW4gZS5nLiBhIGRlbGV0ZWQgRm9udERhdGEgcmVsZWFzZXMgaXRzIHNtYWxsIGNh
cHMgRm9udERhdGEuCi0gICAgaWYgKGlzUHVyZ2luZykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aXNQdXJnaW5nID0gdHJ1ZTsKLQotICAgIExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRh
Kj46Oml0ZXJhdG9yIGl0ID0gZ0luYWN0aXZlRm9udERhdGFTZXQtPmJlZ2luKCk7Ci0gICAgTGlz
dEhhc2hTZXQ8Y29uc3QgU2ltcGxlRm9udERhdGEqPjo6aXRlcmF0b3IgZW5kID0gZ0luYWN0aXZl
Rm9udERhdGFTZXQtPmVuZCgpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY291bnQgJiYgaXQg
IT0gZW5kOyArK2ksICsraXQpIHsKLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtl
eSA9ICgqaXQpLT5wbGF0Zm9ybURhdGEoKTsKLSAgICAgICAgcGFpcjxTaW1wbGVGb250RGF0YSos
IHVuc2lnbmVkPiBmb250RGF0YVBhaXIgPSBnRm9udERhdGFDYWNoZS0+dGFrZShrZXkpOwotICAg
ICAgICBBU1NFUlQoZm9udERhdGFQYWlyLmZpcnN0ICE9IDApOwotICAgICAgICBBU1NFUlQoIWZv
bnREYXRhUGFpci5zZWNvbmQpOwotICAgICAgICBkZWxldGUgZm9udERhdGFQYWlyLmZpcnN0Owot
Ci0gICAgICAgIEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1E
YXRhQ2FjaGUtPnRha2Uoa2V5KTsKLSAgICAgICAgaWYgKHBsYXRmb3JtRGF0YSkKLSAgICAgICAg
ICAgIGRlbGV0ZSBwbGF0Zm9ybURhdGE7Ci0gICAgfQotCi0gICAgaWYgKGl0ID09IGVuZCkgewot
ICAgICAgICAvLyBSZW1vdmVkIGV2ZXJ5dGhpbmcKLSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFT
ZXQtPmNsZWFyKCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudDsgKytpKQotICAgICAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShnSW5h
Y3RpdmVGb250RGF0YVNldC0+YmVnaW4oKSk7Ci0gICAgfQotCi0gICAgaXNQdXJnaW5nID0gZmFs
c2U7CisgICAgcmV0dXJuIG5ldyBGb250UGxhdGZvcm1EYXRhKGZvbnQuZm9udERlc2NyaXB0aW9u
KCkpOwogfQogCi12b2lkIEZvbnRDYWNoZTo6YWRkQ2xpZW50KEZvbnRTZWxlY3RvciopCitGb250
UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3Qg
Rm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pCiB7CisgICAgcmV0dXJuIG5ldyBGb250
UGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKLXZvaWQgRm9udENhY2hlOjpyZW1v
dmVDbGllbnQoRm9udFNlbGVjdG9yKikKK3ZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJbkZhbWls
eShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKIHsKIH0KIAotdm9pZCBG
b250Q2FjaGU6OmludmFsaWRhdGUoKQorRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpjcmVh
dGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0aW9u
LCBjb25zdCBBdG9taWNTdHJpbmcmKQogewotICAgIGlmICghZ0ZvbnRQbGF0Zm9ybURhdGFDYWNo
ZSB8fCAhZ0ZvbnREYXRhQ2FjaGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIHB1cmdlSW5hY3Rp
dmVGb250RGF0YSgpOworICAgIC8vIEZJWE1FIDogd2UgbXVzdCB0YWtlIGludG8gYWNjb3VudCB0
aGUgZmFtaWxseSBuYW1lIChzZWNvbmQgYXJndW1lbnQpCisgICAgcmV0dXJuIG5ldyBGb250UGxh
dGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbik7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGEuY3BwCmluZGV4IGExOTQ2NGUuLjZlOWQwNTMgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAt
NDMsNyArNDMsNyBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZv
bnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYgogICAgICAgICBmb250LnNldFdl
aWdodChRRm9udDo6Qm9sZCk7CiAgICAgZm9udC5zZXRJdGFsaWMoaXRhbGljKTsKIAotICAgIHJl
dHVybiBGb250UGxhdGZvcm1EYXRhKGZvbnQsIGJvbGQpOworICAgIHJldHVybiBGb250UGxhdGZv
cm1EYXRhKGZvbnQpOwogfQogCiBGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMzA2YWJmLi4wMDAwMDAwCi0tLSBhL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvcXQvRm9udEZhbGxiYWNrTGlzdFF0LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDEz
OCArMCwwIEBACi0vKgotICAgIENvcHlyaWdodCAoQykgMjAwOCBIb2xnZXIgSGFucyBQZXRlciBG
cmV5dGhlcgotCi0gICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgotICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCi0gICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gICAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgotCi0gICAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCi0gICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKLSAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICAgIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotCi0gICAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICAg
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBzZWUgdGhlIGZpbGUgQ09QWUlORy5MSUIuICBJZiBu
b3QsIHdyaXRlIHRvCi0gICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKLSAgICBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KLQotICAgIFJlcGxhY2VtZW50IG9mIHRoZSBzdG9jayBGb250RmFsbGJhY2tMaXN0IGFz
IFF0IGlzIGdvaW5nIHRvIGZpbmQgdXMgYQotICAgIHJlcGxhY2VtZW50IGZvbnQsIHdpbGwgZG8g
Y2FjaGluZyBhbmQgdGhlIG90aGVyIHN0dWZmIHdlIGltcGxlbWVudCBpbgotICAgIFdlYktpdC4K
LSovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0Lmgi
Ci0KLSNpbmNsdWRlICJGb250LmgiCi0jaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAi
U2VnbWVudGVkRm9udERhdGEuaCIKLQotI2luY2x1ZGUgPFFEZWJ1Zz4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Gb250RmFsbGJhY2tMaXN0OjpGb250RmFsbGJhY2tMaXN0KCkKLSAgICA6IG1f
cGFnZVplcm8oMCkKLSAgICAsIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhKDApCi0gICAg
LCBtX2ZvbnRTZWxlY3RvcigwKQotICAgICwgbV9mYW1pbHlJbmRleCgwKQotICAgICwgbV9waXRj
aChVbmtub3duUGl0Y2gpCi0gICAgLCBtX2xvYWRpbmdDdXN0b21Gb250cyhmYWxzZSkKLSAgICAs
IG1fZ2VuZXJhdGlvbigwKQotewotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmludmFsaWRh
dGUoV1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6OkZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQot
ewotICAgIHJlbGVhc2VGb250RGF0YSgpOwotICAgIG1fZm9udExpc3QuY2xlYXIoKTsKLSAgICBt
X3BhZ2VaZXJvID0gMDsKLSAgICBtX3BhZ2VzLmNsZWFyKCk7Ci0gICAgbV9jYWNoZWRQcmltYXJ5
U2ltcGxlRm9udERhdGEgPSAwOwotICAgIG1fZmFtaWx5SW5kZXggPSAwOwotICAgIG1fcGl0Y2gg
PSBVbmtub3duUGl0Y2g7Ci0gICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSBmYWxzZTsKLSAgICBt
X2ZvbnRTZWxlY3RvciA9IGZvbnRTZWxlY3RvcjsKLSAgICBtX2dlbmVyYXRpb24gPSAwOwotfQot
Ci12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnJlbGVhc2VGb250RGF0YSgpCi17Ci0gICAgdW5zaWdu
ZWQgbnVtRm9udHMgPSBtX2ZvbnRMaXN0LnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbnVtRm9udHM7ICsraSkgewotICAgICAgICBpZiAobV9mb250TGlzdFtpXS5zZWNvbmQp
Ci0gICAgICAgICAgICBkZWxldGUgbV9mb250TGlzdFtpXS5maXJzdDsKLSAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICBBU1NFUlQoIW1fZm9udExpc3RbaV0uZmlyc3QtPmlzU2VnbWVudGVkKCkp
OwotICAgICAgICAgICAgZm9udENhY2hlKCktPnJlbGVhc2VGb250RGF0YShzdGF0aWNfY2FzdDxj
b25zdCBTaW1wbGVGb250RGF0YSo+KG1fZm9udExpc3RbaV0uZmlyc3QpKTsKLSAgICAgICAgfQot
ICAgIH0KLX0KLQotdm9pZCBGb250RmFsbGJhY2tMaXN0OjpkZXRlcm1pbmVQaXRjaChjb25zdCBX
ZWJDb3JlOjpGb250KiBmb250KSBjb25zdAotewotICAgIGNvbnN0IEZvbnREYXRhKiBmb250RGF0
YSA9IHByaW1hcnlGb250RGF0YShmb250KTsKLSAgICBpZiAoIWZvbnREYXRhLT5pc1NlZ21lbnRl
ZCgpKQotICAgICAgICBtX3BpdGNoID0gc3RhdGljX2Nhc3Q8Y29uc3QgU2ltcGxlRm9udERhdGEq
Pihmb250RGF0YSktPnBpdGNoKCk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGNvbnN0IFNlZ21lbnRl
ZEZvbnREYXRhKiBzZWdtZW50ZWRGb250RGF0YSA9IHN0YXRpY19jYXN0PGNvbnN0IFNlZ21lbnRl
ZEZvbnREYXRhKj4oZm9udERhdGEpOwotICAgICAgICB1bnNpZ25lZCBudW1SYW5nZXMgPSBzZWdt
ZW50ZWRGb250RGF0YS0+bnVtUmFuZ2VzKCk7Ci0gICAgICAgIGlmIChudW1SYW5nZXMgPT0gMSkK
LSAgICAgICAgICAgIG1fcGl0Y2ggPSBzZWdtZW50ZWRGb250RGF0YS0+cmFuZ2VBdCgwKS5mb250
RGF0YSgpLT5waXRjaCgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3BpdGNoID0gVmFy
aWFibGVQaXRjaDsKLSAgICB9Ci19Ci0KLWNvbnN0IEZvbnREYXRhKiBGb250RmFsbGJhY2tMaXN0
Ojpmb250RGF0YUF0KGNvbnN0IFdlYkNvcmU6OkZvbnQqIF9mb250LCB1bnNpZ25lZCBpbmRleCkg
Y29uc3QKLXsKLSAgICBpZiAoaW5kZXggIT0gMCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICAv
LyBTZWFyY2ggZm9yIHRoZSBXZWJDb3JlIGZvbnQgdGhhdCBpcyBhbHJlYWR5IGluIHRoZSBsaXN0
Ci0gICAgZm9yIChpbnQgaSA9IG1fZm9udExpc3Quc2l6ZSgpIC0gMTsgaSA+PSAwOyAtLWkpIHsK
LSAgICAgICAgcGFpcjxjb25zdCBGb250RGF0YSosIGJvb2w+IGl0ZW0gPSBtX2ZvbnRMaXN0W2ld
OwotICAgICAgICAvLyBpdGVtLnNlY29uZCBtZWFucyB0aGF0IHRoZSBpdGVtIHdhcyBjcmVhdGVk
IGxvY2FsbHkgb3Igbm90Ci0gICAgICAgIGlmICghaXRlbS5zZWNvbmQpCi0gICAgICAgICAgICBy
ZXR1cm4gaXRlbS5maXJzdDsKLSAgICB9Ci0KLSAgICAvLyBVc2UgdGhlIEZvbnRTZWxlY3RvciB0
byBnZXQgYSBXZWJDb3JlIGZvbnQgYW5kIHRoZW4gZmFsbGJhY2sgdG8gUXQKLSAgICBjb25zdCBG
b250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uID0gX2ZvbnQtPmZvbnREZXNjcmlwdGlvbigpOwot
ICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKLSAg
ICB3aGlsZSAoZmFtaWx5KSB7Ci0gICAgICAgIGlmIChmYW1pbHktPmZhbWlseSgpLmxlbmd0aCgp
ICYmIG1fZm9udFNlbGVjdG9yKSB7Ci0gICAgICAgICAgICBGb250RGF0YSogZGF0YSA9IG1fZm9u
dFNlbGVjdG9yLT5nZXRGb250RGF0YShkZXNjcmlwdGlvbiwgZmFtaWx5LT5mYW1pbHkoKSk7Ci0g
ICAgICAgICAgICBpZiAoZGF0YSkgewotICAgICAgICAgICAgICAgIGlmIChkYXRhLT5pc0xvYWRp
bmcoKSkKLSAgICAgICAgICAgICAgICAgICAgbV9sb2FkaW5nQ3VzdG9tRm9udHMgPSB0cnVlOwot
ICAgICAgICAgICAgICAgIGlmICghZGF0YS0+aXNDdXN0b21Gb250KCkpIHsKLSAgICAgICAgICAg
ICAgICAgICAgLy8gQ3VzdG9tIGZvbnRzIGNhbiBiZSBmcmVlZCBhbnl0aW1lIHNvIHdlIG11c3Qg
bm90IGhvbGQgdGhlbQotICAgICAgICAgICAgICAgICAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWly
PGNvbnN0IEZvbnREYXRhKiwgYm9vbD4oZGF0YSwgZmFsc2UpKTsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGRhdGE7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICAgICAgZmFtaWx5ID0gZmFtaWx5LT5uZXh0KCk7Ci0gICAgfQotCi0gICAgaWYgKG1fZm9u
dExpc3Quc2l6ZSgpKQotICAgICAgICByZXR1cm4gbV9mb250TGlzdFswXS5maXJzdDsKLQotICAg
IGNvbnN0IEZvbnREYXRhKiByZXN1bHQgPSBuZXcgU2ltcGxlRm9udERhdGEoRm9udFBsYXRmb3Jt
RGF0YShkZXNjcmlwdGlvbiwgX2ZvbnQtPndvcmRTcGFjaW5nKCksIF9mb250LT5sZXR0ZXJTcGFj
aW5nKCkpLCB0cnVlKTsKLSAgICBtX2ZvbnRMaXN0LmFwcGVuZChwYWlyPGNvbnN0IEZvbnREYXRh
KiwgYm9vbD4ocmVzdWx0LCB0cnVlKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotY29uc3Qg
Rm9udERhdGEqIEZvbnRGYWxsYmFja0xpc3Q6OmZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBX
ZWJDb3JlOjpGb250KiBmb250LCBjb25zdCBVQ2hhciosIGludCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcHJpbWFyeUZvbnREYXRhKGZvbnQpOwotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OnNl
dFBsYXRmb3JtRm9udChjb25zdCBXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhJikKLXsKLSAgICBt
X2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsKLX0KLQotfQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UGxhdGZvcm1EYXRhLmggYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA1Y2Q2ZWQyLi4z
MDZhZGE4IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0
Zm9ybURhdGEuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9y
bURhdGEuaApAQCAtMjYsMjAgKzI2LDYyIEBACiAKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlIDxRRm9udD4KKyNpbmNsdWRlIDxRSGFzaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBTdHJpbmc7CitjbGFzcyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSB7Citw
dWJsaWM6CisgICAgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoKQorICAgICAgICA6IHJlZkNvdW50
KDEpCisgICAgICAgICwgc2l6ZShmb250LnBvaW50U2l6ZUYoKSkKKyAgICAgICAgLCBib2xkKGZv
bnQuYm9sZCgpKQorICAgICAgICAsIG9ibGlxdWUoZmFsc2UpCisgICAge30KKyAgICBGb250UGxh
dGZvcm1EYXRhUHJpdmF0ZShjb25zdCBmbG9hdCBzaXplLCBjb25zdCBib29sIGJvbGQsIGNvbnN0
IGJvb2wgb2JsaXF1ZSkKKyAgICAgICAgOiByZWZDb3VudCgxKQorICAgICAgICAsIHNpemUoc2l6
ZSkKKyAgICAgICAgLCBib2xkKGJvbGQpCisgICAgICAgICwgb2JsaXF1ZShvYmxpcXVlKQorICAg
IHt9CisgICAgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoY29uc3QgUUZvbnQmIGZvbnQpCisgICAg
ICAgIDogcmVmQ291bnQoMSkKKyAgICAgICAgLCBmb250KGZvbnQpCisgICAgICAgICwgc2l6ZShm
b250LnBvaW50U2l6ZUYoKSkKKyAgICAgICAgLCBib2xkKGZvbnQuYm9sZCgpKQorICAgICAgICAs
IG9ibGlxdWUoZmFsc2UpCisgICAge30KKyAgICB1bnNpZ25lZCByZWZDb3VudDsKKyAgICBRRm9u
dCBmb250OworICAgIGZsb2F0IHNpemU7CisgICAgYm9vbCBib2xkIDogMTsKKyAgICBib29sIG9i
bGlxdWUgOiAxOworfTsKKworCiAKLWNsYXNzIEZvbnRQbGF0Zm9ybURhdGEgOiBwdWJsaWMgRmFz
dEFsbG9jQmFzZQoteworY2xhc3MgRm9udFBsYXRmb3JtRGF0YSA6IHB1YmxpYyBGYXN0QWxsb2NC
YXNlIHsKIHB1YmxpYzoKLSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQogICAgIEZvbnRQbGF0Zm9ybURh
dGEoZmxvYXQgc2l6ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpOwotI2VuZGlmCi0gICAgRm9u
dFBsYXRmb3JtRGF0YSgpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSAmKTsKICAgICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYsIGlu
dCB3b3JkU3BhY2luZyA9IDAsIGludCBsZXR0ZXJTcGFjaW5nID0gMCk7Ci0gICAgRm9udFBsYXRm
b3JtRGF0YShjb25zdCBRRm9udCYsIGJvb2wgYm9sZCk7CisgICAgRm9udFBsYXRmb3JtRGF0YShj
b25zdCBRRm9udCYgZm9udCkKKyAgICAgICAgOiBtX2RhdGEobmV3IEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlKGZvbnQpKQorICAgIHt9CisgICAgRm9udFBsYXRmb3JtRGF0YShXVEY6Okhhc2hUYWJs
ZURlbGV0ZWRWYWx1ZVR5cGUpCisgICAgICAgIDogbV9kYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8Rm9u
dFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAge30KKworICAgIH5Gb250UGxhdGZvcm1E
YXRhKCk7CisKKyAgICBGb250UGxhdGZvcm1EYXRhJiBvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpOworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJikg
Y29uc3Q7CisKKyAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2RhdGEgPT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1E
YXRhUHJpdmF0ZSo+KC0xKTsKKyAgICB9CiAKICAgICBzdGF0aWMgaW5saW5lIFFGb250OjpXZWln
aHQgdG9RRm9udFdlaWdodChGb250V2VpZ2h0IGZvbnRXZWlnaHQpCiAgICAgewpAQCAtNjIsMjIg
KzEwNCw2MiBAQCBwdWJsaWM6CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBRRm9udCBmb250KCkg
Y29uc3QgeyByZXR1cm4gbV9mb250OyB9Ci0gICAgZmxvYXQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2l6ZTsgfQotICAgIFFTdHJpbmcgZmFtaWx5KCkgY29uc3QgeyByZXR1cm4gbV9mb250LmZh
bWlseSgpOyB9Ci0gICAgYm9vbCBib2xkKCkgY29uc3QgeyByZXR1cm4gbV9ib2xkOyB9Ci0gICAg
Ym9vbCBpdGFsaWMoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQuaXRhbGljKCk7IH0KLSAgICBib29s
IHNtYWxsQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5jYXBpdGFsaXphdGlvbigpID09IFFG
b250OjpTbWFsbENhcHM7IH0KLSAgICBpbnQgcGl4ZWxTaXplKCkgY29uc3QgeyByZXR1cm4gbV9m
b250LnBpeGVsU2l6ZSgpOyB9CisgICAgUUZvbnQgZm9udCgpIGNvbnN0CisgICAgeworICAgICAg
ICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJp
dmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4gbV9k
YXRhLT5mb250OworICAgICAgICByZXR1cm4gUUZvbnQoKTsKKyAgICB9CisgICAgZmxvYXQgc2l6
ZSgpIGNvbnN0CisgICAgeworICAgICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRf
Y2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEp
CisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5zaXplOworICAgICAgICByZXR1cm4gMC4wZjsK
KyAgICB9CisgICAgUVN0cmluZyBmYW1pbHkoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NF
UlQobV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigt
MSkpOworICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Zm9u
dC5mYW1pbHkoKTsKKyAgICAgICAgcmV0dXJuIFFTdHJpbmcoKTsKKyAgICB9CisgICAgYm9vbCBi
b2xkKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSByZWludGVycHJl
dF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAgaWYgKG1fZGF0
YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmJvbGQ7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisgICAgYm9vbCBpdGFsaWMoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NF
UlQobV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigt
MSkpOworICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Zm9u
dC5pdGFsaWMoKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIHNtYWxs
Q2FwcygpIGNvbnN0CisgICAgeworICAgICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2Rh
dGEpCisgICAgICAgICAgICByZXR1cm4gbV9kYXRhLT5mb250LmNhcGl0YWxpemF0aW9uKCkgPT0g
UUZvbnQ6OlNtYWxsQ2FwczsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBpbnQg
cGl4ZWxTaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSByZWlu
dGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAgaWYg
KG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmZvbnQucGl4ZWxTaXplKCk7Cisg
ICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICB1bnNpZ25lZCBoYXNoKCkgY29uc3Q7CiAKICNp
Zm5kZWYgTkRFQlVHCiAgICAgU3RyaW5nIGRlc2NyaXB0aW9uKCkgY29uc3Q7CiAjZW5kaWYKLQot
ICAgIGZsb2F0IG1fc2l6ZTsKLSAgICBib29sIG1fYm9sZDsKLSAgICBib29sIG1fb2JsaXF1ZTsK
LSAgICBRRm9udCBtX2ZvbnQ7Citwcml2YXRlOgorICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRl
KiBtX2RhdGE7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKaW5kZXggNzcwOWJl
Ni4uNTlkZjBhNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
UGxhdGZvcm1EYXRhUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dFBsYXRmb3JtRGF0YVF0LmNwcApAQCAtMjYsMTAgKzI2LDIzIEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBi
b29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKK3sKKyAgICBpZiAoIWJvbGQgJiYgIW9ibGlxdWUgJiYg
c2l6ZSA9PSAwLmYpCisgICAgICAgIC8vIHRoaXMgaXMgdGhlIGVtcHR5IHZhbHVlIGJ5IGRlZmlu
aXRpb24gb2YgdGhlIHRyYWl0IEZvbnREYXRhQ2FjaGVLZXlUcmFpdHMKKyAgICAgICAgbV9kYXRh
ID0gMDsKKyAgICBlbHNlCisgICAgICAgIG1fZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhUHJp
dmF0ZShzaXplLCBib2xkLCBvYmxpcXVlKTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhICZvdGhlcikgOiBtX2RhdGEob3RoZXIu
bV9kYXRhKQoreworICAgIGlmIChtX2RhdGEgJiYgbV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8
Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAgICAgICsrbV9kYXRhLT5yZWZDb3Vu
dDsKK30KKwogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uLCBpbnQgd29yZFNwYWNpbmcsIGludCBsZXR0ZXJTcGFjaW5n
KQotICAgIDogbV9zaXplKDAuMGYpCi0gICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgLCBtX29ibGlx
dWUoZmFsc2UpCisgICAgOiBtX2RhdGEobmV3IEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKCkpCiB7
CiAgICAgUVN0cmluZyBmYW1pbHlOYW1lOwogICAgIGNvbnN0IEZvbnRGYW1pbHkqIGZhbWlseSA9
ICZkZXNjcmlwdGlvbi5mYW1pbHkoKTsKQEAgLTM5LDQzICs1Miw3MCBAQCBGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24s
IGludCB3b3JkUwogICAgICAgICBpZiAoZmFtaWx5KQogICAgICAgICAgICAgZmFtaWx5TmFtZSAr
PSBRTGF0aW4xQ2hhcignLCcpOwogICAgIH0KKyAgICBRRm9udCYgZm9udCA9IG1fZGF0YS0+Zm9u
dDsKKyAgICBmb250LnNldEZhbWlseShmYW1pbHlOYW1lKTsKKyAgICBmb250LnNldFBpeGVsU2l6
ZShxUm91bmQoZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpKTsKKyAgICBmb250LnNldEl0YWxp
YyhkZXNjcmlwdGlvbi5pdGFsaWMoKSk7CisgICAgZm9udC5zZXRXZWlnaHQodG9RRm9udFdlaWdo
dChkZXNjcmlwdGlvbi53ZWlnaHQoKSkpOworICAgIGZvbnQuc2V0V29yZFNwYWNpbmcod29yZFNw
YWNpbmcpOworICAgIGZvbnQuc2V0TGV0dGVyU3BhY2luZyhRRm9udDo6QWJzb2x1dGVTcGFjaW5n
LCBsZXR0ZXJTcGFjaW5nKTsKKyAgICBjb25zdCBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9u
LnNtYWxsQ2FwcygpOworICAgIGZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZv
bnQ6OlNtYWxsQ2FwcyA6IFFGb250OjpNaXhlZENhc2UpOworCisgICAgbV9kYXRhLT5ib2xkID0g
Zm9udC5ib2xkKCk7CisgICAgbV9kYXRhLT5zaXplID0gZm9udC5wb2ludFNpemVGKCk7Cit9CiAK
LSAgICBtX2ZvbnQuc2V0RmFtaWx5KGZhbWlseU5hbWUpOwotICAgIG1fZm9udC5zZXRQaXhlbFNp
emUocVJvdW5kKGRlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpKSk7Ci0gICAgbV9mb250LnNldEl0
YWxpYyhkZXNjcmlwdGlvbi5pdGFsaWMoKSk7Ci0KLSAgICBtX2ZvbnQuc2V0V2VpZ2h0KHRvUUZv
bnRXZWlnaHQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpKTsKLSAgICBtX2JvbGQgPSBtX2ZvbnQuYm9s
ZCgpOwotCi0gICAgYm9vbCBzbWFsbENhcHMgPSBkZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsKLSAg
ICBtX2ZvbnQuc2V0Q2FwaXRhbGl6YXRpb24oc21hbGxDYXBzID8gUUZvbnQ6OlNtYWxsQ2FwcyA6
IFFGb250OjpNaXhlZENhc2UpOwotICAgIG1fZm9udC5zZXRXb3JkU3BhY2luZyh3b3JkU3BhY2lu
Zyk7Ci0gICAgbV9mb250LnNldExldHRlclNwYWNpbmcoUUZvbnQ6OkFic29sdXRlU3BhY2luZywg
bGV0dGVyU3BhY2luZyk7Ci0gICAgbV9zaXplID0gbV9mb250LnBvaW50U2l6ZSgpOworRm9udFBs
YXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQoreworICAgIGlmICghbV9kYXRhIHx8IG1f
ZGF0YSA9PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKQor
ICAgICAgICByZXR1cm47CisgICAgLS1tX2RhdGEtPnJlZkNvdW50OworICAgIGlmICghbV9kYXRh
LT5yZWZDb3VudCkKKyAgICAgICAgZGVsZXRlIG1fZGF0YTsKIH0KIAotRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBRRm9udCYgZm9udCwgYm9vbCBib2xkKQotICAgIDog
bV9zaXplKGZvbnQucG9pbnRTaXplKCkpCi0gICAgLCBtX2JvbGQoYm9sZCkKLSAgICAsIG1fb2Js
aXF1ZShmYWxzZSkKLSAgICAsIG1fZm9udChmb250KQorRm9udFBsYXRmb3JtRGF0YSYgRm9udFBs
YXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKQogewor
ICAgIGlmIChtX2RhdGEgPT0gb3RoZXIubV9kYXRhKQorICAgICAgICByZXR1cm4gKnRoaXM7Cisg
ICAgaWYgKG1fZGF0YSAmJiBtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1E
YXRhUHJpdmF0ZSo+KC0xKSkgeworICAgICAgICAtLW1fZGF0YS0+cmVmQ291bnQ7CisgICAgICAg
IGlmICghbV9kYXRhLT5yZWZDb3VudCkKKyAgICAgICAgICAgIGRlbGV0ZSBtX2RhdGE7CisgICAg
fQorICAgIG1fZGF0YSA9IG90aGVyLm1fZGF0YTsKKyAgICBpZiAobV9kYXRhICYmIG1fZGF0YSAh
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKQorICAgICAg
ICArK21fZGF0YS0+cmVmQ291bnQ7CisgICAgcmV0dXJuICp0aGlzOwogfQogCi0jaWYgRU5BQkxF
KFNWR19GT05UUykKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoZmxvYXQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIG9ibGlxdWUpCi0gICAgOiBtX3NpemUoc2l6ZSkKLSAgICAsIG1f
Ym9sZChib2xkKQotICAgICwgbV9vYmxpcXVlKG9ibGlxdWUpCitib29sIEZvbnRQbGF0Zm9ybURh
dGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiB7Cisg
ICAgaWYgKG1fZGF0YSA9PSBvdGhlci5tX2RhdGEpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKCFtX2RhdGEgfHwgIW90aGVyLm1fZGF0YQorICAgICAgICB8fCBtX2RhdGEgPT0gcmVp
bnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSB8fCBvdGhlci5tX2Rh
dGEgPT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAg
ICAgICAgcmV0dXJuICBmYWxzZTsKKworICAgIGNvbnN0IGJvb2wgZXF1YWxzID0gKG1fZGF0YS0+
c2l6ZSA9PSBvdGhlci5tX2RhdGEtPnNpemUKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBt
X2RhdGEtPmJvbGQgPT0gb3RoZXIubV9kYXRhLT5ib2xkCisgICAgICAgICAgICAgICAgICAgICAg
ICAgJiYgbV9kYXRhLT5vYmxpcXVlID09IG90aGVyLm1fZGF0YS0+b2JsaXF1ZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIG1fZGF0YS0+Zm9udCA9PSBvdGhlci5tX2RhdGEtPmZvbnQpOwor
ICAgIHJldHVybiBlcXVhbHM7CiB9Ci0jZW5kaWYKIAotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YSgpCi0gICAgOiBtX3NpemUoMC4wZikKLSAgICAsIG1fYm9sZChmYWxzZSkKLSAg
ICAsIG1fb2JsaXF1ZShmYWxzZSkKK3Vuc2lnbmVkIEZvbnRQbGF0Zm9ybURhdGE6Omhhc2goKSBj
b25zdAogeworICAgIGlmICghbV9kYXRhKQorICAgICAgICByZXR1cm4gMDsKKyAgICBpZiAobV9k
YXRhID09IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisg
ICAgICAgIHJldHVybiAxOworICAgIHJldHVybiBxSGFzaChtX2RhdGEtPmZvbnQudG9TdHJpbmco
KSkKKyAgICAgICAgICAgXiBxSGFzaCgqcmVpbnRlcnByZXRfY2FzdDxxdWludDMyKj4oJm1fZGF0
YS0+c2l6ZSkpCisgICAgICAgICAgIF4gcUhhc2gobV9kYXRhLT5ib2xkKQorICAgICAgICAgICBe
IHFIYXNoKG1fZGF0YS0+b2JsaXF1ZSk7CiB9CiAKICNpZm5kZWYgTkRFQlVHCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44304</attachid>
            <date>2009-12-04 04:33:50 -0800</date>
            <delta_ts>2009-12-04 05:12:41 -0800</delta_ts>
            <desc>Refactoring of the font cache to use the common FontCache</desc>
            <filename>font_cache_refactoring.patch</filename>
            <type>text/plain</type>
            <size>27474</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWY2ZTllNS4uZTc1YWQ4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAwOS0xMi0wNCAgQmVuamFtaW4gUG91
bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gV2ViS2l0IGNyYXNoZXMgd2hlbiBsb2Fk
aW5nIGNlcnRhaW4gU1ZHIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjk0NDMKKworICAgICAgICBSZW1vdmUgRm9udEZhbGxiYWNrTGlzdFF0
IGFuZCByZWx5IG9uIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdAorICAgICAgICB0byBoYW5k
bGUgdGhlIGZvbnRzLiBGb250Q2FjaGUgYW5kIEZvbnRQbGF0Zm9ybURhdGEgaGF2ZSBiZWVuCisg
ICAgICAgIHVwZGF0ZWQgdG8gd29yayB3aXRoIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdC4K
KworICAgICAgICBJbiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleQorICAgICAgICB3YXMgYSBjbG9uZSBvZiBGb250UGxhdGZvcm1EYXRhIHdpdGgg
dGhlIGhhc2hpbmcKKyAgICAgICAgY2FwYWJpbGl0aWVzIGFkZGVkIGluIG9yZGVyIHRvIHVzZSBp
dCBhcyBhIGtleSBpbiB0aGUgY2FjaGUncworICAgICAgICBoYXNobWFwLiBGb250UGxhdGZvcm1E
YXRhIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgaGFzaGluZworICAgICAgICBmdW5j
dGlvbiBkaXJlY3RseSBzbyB0aGUgZGF0YSBhcmUgbm90IGNvcGllZCB0d2ljZSBpbiBtZW1vcnku
CisKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpIGZyb20gRm9udEZhbGxi
YWNrTGlzdFF0IHdhcyBhIGNvcHkgb2YKKyAgICAgICAgY29kZSBmcm9tIEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGEoKSBhbmQgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpLgorICAgICAgICBU
aGUgYmVoYXZpb3IgaXMgc2ltaWxhciBleGNlcHQgY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3Ro
KCkgd2FzCisgICAgICAgIG5vdCB0ZXN0ZWQgYW5kIHRoZSBmYWxsYmFjayBmb250cyBzZWxlY3Rv
ciB3ZXJlIG5vdCB1c2VkLgorCisgICAgICAgIEV4aXN0aW5nIHRlc3RzIGNvdmVyIHRoZSBjaGFu
Z2UuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRm
b3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFRyYWl0c0luRmFt
aWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tM
aXN0UXQuY3BwOgorICAgICAgICBSZW1vdmVkLiBXZSBub3cgdXNlIHRoZSBpbXBsZW1lbnRhdGlv
biBmcm9tIEZvbnRGYWxsYmFja0xpc3QuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICBBZGQgaGFzaGluZyBjYXBhYmlsaXRpZXMg
dG8gYmUgYWJsZSB0byB1c2UgdGhlIGRhdGEgd2l0aCB0aGUgRm9udENhY2hlLgorICAgICAgICBU
aGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgaW4gRm9udENhY2hlUXQuY3BwCisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhUHJpdmF0ZTo6Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpmb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6ZmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmJvbGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXRhbGljKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNtYWxsQ2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpwaXhlbFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Omhhc2gpOgorCiAyMDA5LTEyLTAzICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDc5ZjAzYmIu
LjViZjYzZTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLnBybwpAQCAtMTE5Miw2ICsxMTkyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udERlc2NyaXB0aW9uLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxi
YWNrTGlzdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcCBcCkBAIC0xMjAyLDYgKzEyMDMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250RGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBcCkBAIC0yMzg5LDcgKzIz
OTEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9TaGFyZWRCdWZmZXJRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgXAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0dseXBoUGFnZVRyZWVOb2RlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9TaW1wbGVGb250RGF0YVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvS1VSTFF0LmNwcCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCmluZGV4IDRlZjAz
YTUuLjY0OGVlZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dENhY2hlUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hl
UXQuY3BwCkBAIC0zOCwyNTYgKzM4LDMzIEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRm9udENhY2hlKiBmb250Q2FjaGUoKQordm9pZCBGb250Q2FjaGU6
OnBsYXRmb3JtSW5pdCgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250Q2FjaGUsIGds
b2JhbEZvbnRDYWNoZSwgKCkpOwotICAgIHJldHVybiAmZ2xvYmFsRm9udENhY2hlOwogfQogCi1G
b250Q2FjaGU6OkZvbnRDYWNoZSgpCi17Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJ
bkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKLXsKLX0KLQot
Ly8gVGhpcyB0eXBlIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIEZvbnRQbGF0Zm9ybURhdGEncyBj
dG9yIC0gdGhlIG9uZSB3aGljaAotLy8gZ2V0cyBGb250RGVzY3JpcHRpb24gYXMgaXQncyBwYXJh
bWV0ZXIuCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewotcHVibGljOgotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQotICAgICAgICA6IG1fZmFtaWx5TmFtZSgpCi0gICAgICAgICwgbV9zaXplKGRlc2NyaXB0aW9u
LmNvbXB1dGVkUGl4ZWxTaXplKCkpCi0gICAgICAgICwgbV9ib2xkKGZhbHNlKQotICAgICAgICAs
IG1faXRhbGljKGRlc2NyaXB0aW9uLml0YWxpYygpKQotICAgICAgICAsIG1fc21hbGxDYXBzKGRl
c2NyaXB0aW9uLnNtYWxsQ2FwcygpKQotICAgICAgICAsIG1faGFzaCgwKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1ZXMgdG8gUUZvbnQgd2VpZ2h0cyBp
biBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciBhbmQgZm9sbG93IGl0IGhlcmUKLSAgICAgICAgaWYg
KEZvbnRQbGF0Zm9ybURhdGE6OnRvUUZvbnRXZWlnaHQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID4g
UUZvbnQ6Ok5vcm1hbCkKLSAgICAgICAgICAgIG1fYm9sZCA9IHRydWU7Ci0KLSAgICAgICAgY29u
c3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZhbWlseSgpOwotICAgICAgICB3
aGlsZSAoZmFtaWx5KSB7Ci0gICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKGZhbWlseS0+
ZmFtaWx5KCkpOwotICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5LT5uZXh0KCk7Ci0gICAgICAg
ICAgICBpZiAoZmFtaWx5KQotICAgICAgICAgICAgICAgIG1fZmFtaWx5TmFtZS5hcHBlbmQoJywn
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbXB1dGVIYXNoKCk7Ci0gICAgfQotCi0gICAgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhKQot
ICAgICAgICA6IG1fZmFtaWx5TmFtZShzdGF0aWNfY2FzdDxTdHJpbmc+KGZvbnREYXRhLmZhbWls
eSgpKSkKLSAgICAgICAgLCBtX3NpemUoZm9udERhdGEucGl4ZWxTaXplKCkpCi0gICAgICAgICwg
bV9ib2xkKGZvbnREYXRhLmJvbGQoKSkKLSAgICAgICAgLCBtX2l0YWxpYyhmb250RGF0YS5pdGFs
aWMoKSkKLSAgICAgICAgLCBtX3NtYWxsQ2Fwcyhmb250RGF0YS5zbWFsbENhcHMoKSkKLSAgICAg
ICAgLCBtX2hhc2goMCkKLSAgICB7Ci0gICAgICAgIGNvbXB1dGVIYXNoKCk7Ci0gICAgfQotCi0g
ICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDog
bV9zaXplKGhhc2hUYWJsZURlbGV0ZWRTaXplKCkpIHsgfQotICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NpemUgPT0gaGFzaFRhYmxlRGVsZXRlZFNp
emUoKTsgfQotCi0gICAgZW51bSBIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSB7IEhhc2hUYWJsZUVt
cHR5VmFsdWUgfTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVFbXB0
eVZhbHVlVHlwZSkKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6ZSgw
KQotICAgICAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAgICAgLCBtX2l0YWxpYyhmYWxzZSkKLSAg
ICAgICAgLCBtX3NtYWxsQ2FwcyhmYWxzZSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9oYXNoICE9IG90aGVyLm1faGFz
aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UobV9mYW1pbHlOYW1lLCBvdGhlci5tX2ZhbWlseU5hbWUpICYmIG1fc2l6ZSA9PSBv
dGhlci5tX3NpemUgJiYKLSAgICAgICAgICAgIG1fYm9sZCA9PSBvdGhlci5tX2JvbGQgJiYgbV9p
dGFsaWMgPT0gb3RoZXIubV9pdGFsaWMgJiYgbV9zbWFsbENhcHMgPT0gb3RoZXIubV9zbWFsbENh
cHM7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9oYXNoOwotICAgIH0KLQotICAgIHZvaWQgY29tcHV0ZUhhc2goKQotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7Ci0gICAgICAgICAgICBDYXNlRm9sZGluZ0hh
c2g6Omhhc2gobV9mYW1pbHlOYW1lKSwKLSAgICAgICAgICAgIG1fc2l6ZSB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX2JvbGQgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4IC0gMSkpCi0gICAgICAg
ICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9pdGFsaWMpIDw8IChzaXplb2YodW5z
aWduZWQpICogOCAtIDIpCi0gICAgICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9zbWFsbENhcHMpIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIDMpCi0gICAgICAgIH07Ci0g
ICAgICAgIG1faGFzaCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8
VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOwotICAgIGludCBtX3Np
emU7Ci0gICAgYm9vbCBtX2JvbGQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLSAgICBib29sIG1fc21h
bGxDYXBzOwotICAgIHVuc2lnbmVkIG1faGFzaDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
VGFibGVEZWxldGVkU2l6ZSgpIHsgcmV0dXJuIDB4RkZGRkZGRkZVOyB9Ci19OwotCi1zdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpCi0gICAgewotICAgICAgICByZXR1
cm4ga2V5Lmhhc2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYg
YikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQotCi0gICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3Ry
dWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFp
dHM8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSYgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwga2V5LCAoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
OjpIYXNoVGFibGVFbXB0eVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXkmIHNsb3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgaXNE
ZWxldGVkVmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotICAgIH0K
LX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIEZvbnRQbGF0
Zm9ybURhdGEqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXlUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotLy8gdXNpbmcgUV9HTE9C
QUxfU1RBVElDIGxlYWRzIHRvIGNyYXNoLiBUT0RPIGludmVzdGlnYXRlIHRoZSB3YXkgdG8gZml4
IHRoaXMuCi1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3JtRGF0YUNh
Y2hlID0gMDsKLQotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGJvb2wpCi17Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlKQotICAg
ICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsK
LQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZGVzY3JpcHRpb24pOwotICAgIEZv
bnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmdl
dChrZXkpOwotICAgIGlmICghcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIHBsYXRmb3JtRGF0YSA9
IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKTsKLSAgICAgICAgZ0ZvbnRQbGF0Zm9y
bURhdGFDYWNoZS0+YWRkKGtleSwgcGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBs
YXRmb3JtRGF0YTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2Fj
aGU7Ci0KLXN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7Ci0KLXN0YXRp
YyBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSA0MDsKLXN0YXRpYyBjb25zdCBpbnQg
Y1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAzMjsKLQotc3RhdGljIExpc3RIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsKLQotU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSogZm9udFBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7Ci0gICAg
ICAgIGdGb250RGF0YUNhY2hlID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAgICAgIGdJbmFjdGl2
ZUZvbnREYXRhU2V0ID0gbmV3IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj47Ci0g
ICAgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9udFBsYXRmb3JtRGF0
YSk7Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+Zmlu
ZChrZXkpOwotICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKLSAgICAgICAg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpmb250UGxhdGZv
cm1EYXRhKTsKLSAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0ZDo6cGFpcjxTaW1w
bGVGb250RGF0YSosIHVuc2lnbmVkPihmb250RGF0YSwgMSkpOwotICAgICAgICByZXR1cm4gZm9u
dERhdGE7Ci0gICAgfQotICAgIGlmICghaXQtPnNlY29uZC5zZWNvbmQrKykgewotICAgICAgICBB
U1NFUlQoZ0luYWN0aXZlRm9udERhdGFTZXQtPmNvbnRhaW5zKGl0LT5zZWNvbmQuZmlyc3QpKTsK
LSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShpdC0+c2Vjb25kLmZpcnN0KTsK
LSAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLUZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKQorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciosIGludCkKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBXZWJDb3JlOjpT
aW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgQVNTRVJUKGdGb250RGF0YUNhY2hlKTsK
LSAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0KLSAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkga2V5KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgRm9udERh
dGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChrZXkpOwotICAgIEFT
U0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwotICAgIGlmICghLS1pdC0+c2Vjb25k
LnNlY29uZCkgewotICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+YWRkKGl0LT5zZWNvbmQu
Zmlyc3QpOwotICAgICAgICBpZiAoZ0luYWN0aXZlRm9udERhdGFTZXQtPnNpemUoKSA+IGNNYXhJ
bmFjdGl2ZUZvbnREYXRhKQotICAgICAgICAgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGdJbmFj
dGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgLSBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSk7Ci0gICAg
fQotfQotCi12b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCkK
K0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udCYgZm9udCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc1B1cmdpbmc7ICAvLyBHdWFy
ZCBhZ2FpbnN0IHJlZW50cnkgd2hlbiBlLmcuIGEgZGVsZXRlZCBGb250RGF0YSByZWxlYXNlcyBp
dHMgc21hbGwgY2FwcyBGb250RGF0YS4KLSAgICBpZiAoaXNQdXJnaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpc1B1cmdpbmcgPSB0cnVlOwotCi0gICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0YVNldC0+YmVnaW4o
KTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBlbmQg
PSBnSW5hY3RpdmVGb250RGF0YVNldC0+ZW5kKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAmJiBpdCAhPSBlbmQ7ICsraSwgKytpdCkgewotICAgICAgICBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkga2V5ID0gKCppdCktPnBsYXRmb3JtRGF0YSgpOwotICAgICAgICBwYWlyPFNpbXBs
ZUZvbnREYXRhKiwgdW5zaWduZWQ+IGZvbnREYXRhUGFpciA9IGdGb250RGF0YUNhY2hlLT50YWtl
KGtleSk7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YVBhaXIuZmlyc3QgIT0gMCk7Ci0gICAgICAg
IEFTU0VSVCghZm9udERhdGFQYWlyLnNlY29uZCk7Ci0gICAgICAgIGRlbGV0ZSBmb250RGF0YVBh
aXIuZmlyc3Q7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gZ0Zv
bnRQbGF0Zm9ybURhdGFDYWNoZS0+dGFrZShrZXkpOwotICAgICAgICBpZiAocGxhdGZvcm1EYXRh
KQotICAgICAgICAgICAgZGVsZXRlIHBsYXRmb3JtRGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoaXQg
PT0gZW5kKSB7Ci0gICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0aGluZwotICAgICAgICBnSW5hY3Rp
dmVGb250RGF0YVNldC0+Y2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+
cmVtb3ZlKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICBpc1B1
cmdpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250
RGVzY3JpcHRpb24oKSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVj
dG9yKikKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKKyAgICByZXR1
cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBGb250
Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3IqKQordm9pZCBGb250Q2FjaGU6OmdldFRy
YWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQogewog
fQogCi12b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCitGb250UGxhdGZvcm1EYXRhKiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYpCiB7Ci0gICAgaWYgKCFnRm9udFBsYXRm
b3JtRGF0YUNhY2hlIHx8ICFnRm9udERhdGFDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCk7CisgICAgLy8gRklYTUUgOiB3ZSBtdXN0IHRha2UgaW50
byBhY2NvdW50IHRoZSBmYW1pbGx5IG5hbWUgKHNlY29uZCBhcmd1bWVudCkKKyAgICByZXR1cm4g
bmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKaW5kZXggYTE5NDY0ZS4uNmU5ZDA1MyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCkBAIC00Myw3ICs0Myw3IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBiCiAgICAgICAg
IGZvbnQuc2V0V2VpZ2h0KFFGb250OjpCb2xkKTsKICAgICBmb250LnNldEl0YWxpYyhpdGFsaWMp
OwogCi0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgYm9sZCk7CisgICAgcmV0dXJu
IEZvbnRQbGF0Zm9ybURhdGEoZm9udCk7CiB9CiAKIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNy
ZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMDZhYmYuLjAwMDAwMDAKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotCi0gICAgUmVwbGFjZW1lbnQgb2YgdGhlIHN0b2NrIEZvbnRGYWxs
YmFja0xpc3QgYXMgUXQgaXMgZ29pbmcgdG8gZmluZCB1cyBhCi0gICAgcmVwbGFjZW1lbnQgZm9u
dCwgd2lsbCBkbyBjYWNoaW5nIGFuZCB0aGUgb3RoZXIgc3R1ZmYgd2UgaW1wbGVtZW50IGluCi0g
ICAgV2ViS2l0LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRGYWxs
YmFja0xpc3QuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIK
LSNpbmNsdWRlICJTZWdtZW50ZWRGb250RGF0YS5oIgotCi0jaW5jbHVkZSA8UURlYnVnPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZvbnRGYWxsYmFja0xpc3Q6OkZvbnRGYWxsYmFja0xpc3Qo
KQotICAgIDogbV9wYWdlWmVybygwKQotICAgICwgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERh
dGEoMCkKLSAgICAsIG1fZm9udFNlbGVjdG9yKDApCi0gICAgLCBtX2ZhbWlseUluZGV4KDApCi0g
ICAgLCBtX3BpdGNoKFVua25vd25QaXRjaCkKLSAgICAsIG1fbG9hZGluZ0N1c3RvbUZvbnRzKGZh
bHNlKQotICAgICwgbV9nZW5lcmF0aW9uKDApCi17Ci19Ci0KLXZvaWQgRm9udEZhbGxiYWNrTGlz
dDo6aW52YWxpZGF0ZShXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCi17Ci0gICAgcmVsZWFzZUZvbnREYXRhKCk7Ci0gICAgbV9mb250TGlzdC5jbGVh
cigpOwotICAgIG1fcGFnZVplcm8gPSAwOwotICAgIG1fcGFnZXMuY2xlYXIoKTsKLSAgICBtX2Nh
Y2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSA9IDA7Ci0gICAgbV9mYW1pbHlJbmRleCA9IDA7Ci0g
ICAgbV9waXRjaCA9IFVua25vd25QaXRjaDsKLSAgICBtX2xvYWRpbmdDdXN0b21Gb250cyA9IGZh
bHNlOwotICAgIG1fZm9udFNlbGVjdG9yID0gZm9udFNlbGVjdG9yOwotICAgIG1fZ2VuZXJhdGlv
biA9IDA7Ci19Ci0KLXZvaWQgRm9udEZhbGxiYWNrTGlzdDo6cmVsZWFzZUZvbnREYXRhKCkKLXsK
LSAgICB1bnNpZ25lZCBudW1Gb250cyA9IG1fZm9udExpc3Quc2l6ZSgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1Gb250czsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZvbnRMaXN0
W2ldLnNlY29uZCkKLSAgICAgICAgICAgIGRlbGV0ZSBtX2ZvbnRMaXN0W2ldLmZpcnN0OwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9mb250TGlzdFtpXS5maXJzdC0+aXNT
ZWdtZW50ZWQoKSk7Ci0gICAgICAgICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0
YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4obV9mb250TGlzdFtpXS5maXJzdCkpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmRldGVybWluZVBp
dGNoKGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZvbnQpIGNvbnN0Ci17Ci0gICAgY29uc3QgRm9udERh
dGEqIGZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRhKGZvbnQpOwotICAgIGlmICghZm9udERhdGEt
PmlzU2VnbWVudGVkKCkpCi0gICAgICAgIG1fcGl0Y2ggPSBzdGF0aWNfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KGZvbnREYXRhKS0+cGl0Y2goKTsKLSAgICBlbHNlIHsKLSAgICAgICAgY29u
c3QgU2VnbWVudGVkRm9udERhdGEqIHNlZ21lbnRlZEZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29u
c3QgU2VnbWVudGVkRm9udERhdGEqPihmb250RGF0YSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bVJh
bmdlcyA9IHNlZ21lbnRlZEZvbnREYXRhLT5udW1SYW5nZXMoKTsKLSAgICAgICAgaWYgKG51bVJh
bmdlcyA9PSAxKQotICAgICAgICAgICAgbV9waXRjaCA9IHNlZ21lbnRlZEZvbnREYXRhLT5yYW5n
ZUF0KDApLmZvbnREYXRhKCktPnBpdGNoKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
cGl0Y2ggPSBWYXJpYWJsZVBpdGNoOwotICAgIH0KLX0KLQotY29uc3QgRm9udERhdGEqIEZvbnRG
YWxsYmFja0xpc3Q6OmZvbnREYXRhQXQoY29uc3QgV2ViQ29yZTo6Rm9udCogX2ZvbnQsIHVuc2ln
bmVkIGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRleCAhPSAwKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIC8vIFNlYXJjaCBmb3IgdGhlIFdlYkNvcmUgZm9udCB0aGF0IGlzIGFscmVhZHkg
aW4gdGhlIGxpc3QKLSAgICBmb3IgKGludCBpID0gbV9mb250TGlzdC5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICBwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4gaXRlbSA9IG1f
Zm9udExpc3RbaV07Ci0gICAgICAgIC8vIGl0ZW0uc2Vjb25kIG1lYW5zIHRoYXQgdGhlIGl0ZW0g
d2FzIGNyZWF0ZWQgbG9jYWxseSBvciBub3QKLSAgICAgICAgaWYgKCFpdGVtLnNlY29uZCkKLSAg
ICAgICAgICAgIHJldHVybiBpdGVtLmZpcnN0OwotICAgIH0KLQotICAgIC8vIFVzZSB0aGUgRm9u
dFNlbGVjdG9yIHRvIGdldCBhIFdlYkNvcmUgZm9udCBhbmQgdGhlbiBmYWxsYmFjayB0byBRdAot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBfZm9udC0+Zm9udERlc2Ny
aXB0aW9uKCk7Ci0gICAgY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZh
bWlseSgpOwotICAgIHdoaWxlIChmYW1pbHkpIHsKLSAgICAgICAgaWYgKGZhbWlseS0+ZmFtaWx5
KCkubGVuZ3RoKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgICAgIEZvbnREYXRhKiBk
YXRhID0gbV9mb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHktPmZh
bWlseSgpKTsKLSAgICAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRh
dGEtPmlzTG9hZGluZygpKQotICAgICAgICAgICAgICAgICAgICBtX2xvYWRpbmdDdXN0b21Gb250
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLT5pc0N1c3RvbUZvbnQoKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b20gZm9udHMgY2FuIGJlIGZyZWVkIGFueXRpbWUg
c28gd2UgbXVzdCBub3QgaG9sZCB0aGVtCi0gICAgICAgICAgICAgICAgICAgIG1fZm9udExpc3Qu
YXBwZW5kKHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPihkYXRhLCBmYWxzZSkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBmYW1pbHkgPSBmYW1pbHktPm5leHQoKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9mb250TGlzdC5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX2ZvbnRMaXN0WzBdLmZp
cnN0OwotCi0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9IG5ldyBTaW1wbGVGb250RGF0YShG
b250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBfZm9udC0+d29yZFNwYWNpbmcoKSwgX2ZvbnQt
PmxldHRlclNwYWNpbmcoKSksIHRydWUpOwotICAgIG1fZm9udExpc3QuYXBwZW5kKHBhaXI8Y29u
c3QgRm9udERhdGEqLCBib29sPihyZXN1bHQsIHRydWUpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1jb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFGb3JDaGFyYWN0
ZXJzKGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZvbnQsIGNvbnN0IFVDaGFyKiwgaW50KSBjb25zdAot
ewotICAgIHJldHVybiBwcmltYXJ5Rm9udERhdGEoZm9udCk7Ci19Ci0KLXZvaWQgRm9udEZhbGxi
YWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGEm
KQotewotICAgIG1fZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxpZXNTY2FubmVkOwotfQotCi19CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4
IDVjZDZlZDIuLjMwNmFkYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yNiwyMCArMjYsNjIgQEAKIAogI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPFFGb250PgorI2luY2x1ZGUgPFFIYXNoPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN0cmluZzsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlIHsKK3B1YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpCisgICAgICAg
IDogcmVmQ291bnQoMSkKKyAgICAgICAgLCBzaXplKGZvbnQucG9pbnRTaXplRigpKQorICAgICAg
ICAsIGJvbGQoZm9udC5ib2xkKCkpCisgICAgICAgICwgb2JsaXF1ZShmYWxzZSkKKyAgICB7fQor
ICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKGNvbnN0IGZsb2F0IHNpemUsIGNvbnN0IGJvb2wg
Ym9sZCwgY29uc3QgYm9vbCBvYmxpcXVlKQorICAgICAgICA6IHJlZkNvdW50KDEpCisgICAgICAg
ICwgc2l6ZShzaXplKQorICAgICAgICAsIGJvbGQoYm9sZCkKKyAgICAgICAgLCBvYmxpcXVlKG9i
bGlxdWUpCisgICAge30KKyAgICBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZShjb25zdCBRRm9udCYg
Zm9udCkKKyAgICAgICAgOiByZWZDb3VudCgxKQorICAgICAgICAsIGZvbnQoZm9udCkKKyAgICAg
ICAgLCBzaXplKGZvbnQucG9pbnRTaXplRigpKQorICAgICAgICAsIGJvbGQoZm9udC5ib2xkKCkp
CisgICAgICAgICwgb2JsaXF1ZShmYWxzZSkKKyAgICB7fQorICAgIHVuc2lnbmVkIHJlZkNvdW50
OworICAgIFFGb250IGZvbnQ7CisgICAgZmxvYXQgc2l6ZTsKKyAgICBib29sIGJvbGQgOiAxOwor
ICAgIGJvb2wgb2JsaXF1ZSA6IDE7Cit9OworCisKIAotY2xhc3MgRm9udFBsYXRmb3JtRGF0YSA6
IHB1YmxpYyBGYXN0QWxsb2NCYXNlCi17CitjbGFzcyBGb250UGxhdGZvcm1EYXRhIDogcHVibGlj
IEZhc3RBbGxvY0Jhc2UgewogcHVibGljOgotI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgRm9u
dFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7Ci0jZW5k
aWYKLSAgICBGb250UGxhdGZvcm1EYXRhKCk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhICYpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgaW50IHdvcmRTcGFjaW5nID0gMCwgaW50IGxldHRlclNwYWNpbmcgPSAwKTsKLSAg
ICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IFFGb250JiwgYm9vbCBib2xkKTsKKyAgICBGb250UGxh
dGZvcm1EYXRhKGNvbnN0IFFGb250JiBmb250KQorICAgICAgICA6IG1fZGF0YShuZXcgRm9udFBs
YXRmb3JtRGF0YVByaXZhdGUoZm9udCkpCisgICAge30KKyAgICBGb250UGxhdGZvcm1EYXRhKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2RhdGEocmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICB7fQorCisgICAgfkZv
bnRQbGF0Zm9ybURhdGEoKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25z
dCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmKSBjb25zdDsKKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YSA9PSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpOworICAgIH0KIAogICAgIHN0YXRpYyBpbmxpbmUg
UUZvbnQ6OldlaWdodCB0b1FGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKICAgICB7
CkBAIC02MiwyMiArMTA0LDYyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFFG
b250IGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KLSAgICBmbG9hdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgUVN0cmluZyBmYW1pbHkoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnQuZmFtaWx5KCk7IH0KLSAgICBib29sIGJvbGQoKSBjb25zdCB7IHJldHVybiBtX2Jv
bGQ7IH0KLSAgICBib29sIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5pdGFsaWMoKTsg
fQotICAgIGJvb2wgc21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmNhcGl0YWxpemF0
aW9uKCkgPT0gUUZvbnQ6OlNtYWxsQ2FwczsgfQotICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQucGl4ZWxTaXplKCk7IH0KKyAgICBRRm9udCBmb250KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0
Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAg
IHJldHVybiBtX2RhdGEtPmZvbnQ7CisgICAgICAgIHJldHVybiBRRm9udCgpOworICAgIH0KKyAg
ICBmbG9hdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSBy
ZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAg
aWYgKG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPnNpemU7CisgICAgICAgIHJl
dHVybiAwLjBmOworICAgIH0KKyAgICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0CisgICAgeworICAg
ICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRh
UHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bV9kYXRhLT5mb250LmZhbWlseSgpOworICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIH0K
KyAgICBib29sIGJvbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NFUlQobV9kYXRhICE9
IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpOworICAgICAg
ICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Ym9sZDsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIGl0YWxpYygpIGNvbnN0CisgICAgeworICAg
ICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRh
UHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bV9kYXRhLT5mb250Lml0YWxpYygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGJvb2wgc21hbGxDYXBzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAh
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAg
ICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmZvbnQuY2FwaXRhbGl6
YXRpb24oKSA9PSBRRm9udDo6U21hbGxDYXBzOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGludCBwaXhlbFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NFUlQobV9k
YXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpOwor
ICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Zm9udC5waXhl
bFNpemUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdDsKIAogI2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsK
ICNlbmRpZgotCi0gICAgZmxvYXQgbV9zaXplOwotICAgIGJvb2wgbV9ib2xkOwotICAgIGJvb2wg
bV9vYmxpcXVlOwotICAgIFFGb250IG1fZm9udDsKK3ByaXZhdGU6CisgICAgRm9udFBsYXRmb3Jt
RGF0YVByaXZhdGUqIG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcApp
bmRleCA3NzA5YmU2Li41OWRmMGE0IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCkBAIC0yNiwxMCArMjYsMjMgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZs
b2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQoreworICAgIGlmICghYm9sZCAmJiAh
b2JsaXF1ZSAmJiBzaXplID09IDAuZikKKyAgICAgICAgLy8gdGhpcyBpcyB0aGUgZW1wdHkgdmFs
dWUgYnkgZGVmaW5pdGlvbiBvZiB0aGUgdHJhaXQgRm9udERhdGFDYWNoZUtleVRyYWl0cworICAg
ICAgICBtX2RhdGEgPSAwOworICAgIGVsc2UKKyAgICAgICAgbV9kYXRhID0gbmV3IEZvbnRQbGF0
Zm9ybURhdGFQcml2YXRlKHNpemUsIGJvbGQsIG9ibGlxdWUpOworfQorCitGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEgJm90aGVyKSA6IG1f
ZGF0YShvdGhlci5tX2RhdGEpCit7CisgICAgaWYgKG1fZGF0YSAmJiBtX2RhdGEgIT0gcmVpbnRl
cnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICAgICAgKyttX2Rh
dGEtPnJlZkNvdW50OworfQorCiBGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNv
bnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGludCB3b3JkU3BhY2luZywgaW50IGxl
dHRlclNwYWNpbmcpCi0gICAgOiBtX3NpemUoMC4wZikKLSAgICAsIG1fYm9sZChmYWxzZSkKLSAg
ICAsIG1fb2JsaXF1ZShmYWxzZSkKKyAgICA6IG1fZGF0YShuZXcgRm9udFBsYXRmb3JtRGF0YVBy
aXZhdGUoKSkKIHsKICAgICBRU3RyaW5nIGZhbWlseU5hbWU7CiAgICAgY29uc3QgRm9udEZhbWls
eSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZhbWlseSgpOwpAQCAtMzksNDMgKzUyLDcwIEBAIEZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbiwgaW50IHdvcmRTCiAgICAgICAgIGlmIChmYW1pbHkpCiAgICAgICAgICAgICBm
YW1pbHlOYW1lICs9IFFMYXRpbjFDaGFyKCcsJyk7CiAgICAgfQorICAgIFFGb250JiBmb250ID0g
bV9kYXRhLT5mb250OworICAgIGZvbnQuc2V0RmFtaWx5KGZhbWlseU5hbWUpOworICAgIGZvbnQu
c2V0UGl4ZWxTaXplKHFSb3VuZChkZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSkpOworICAgIGZv
bnQuc2V0SXRhbGljKGRlc2NyaXB0aW9uLml0YWxpYygpKTsKKyAgICBmb250LnNldFdlaWdodCh0
b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9uLndlaWdodCgpKSk7CisgICAgZm9udC5zZXRXb3JkU3Bh
Y2luZyh3b3JkU3BhY2luZyk7CisgICAgZm9udC5zZXRMZXR0ZXJTcGFjaW5nKFFGb250OjpBYnNv
bHV0ZVNwYWNpbmcsIGxldHRlclNwYWNpbmcpOworICAgIGNvbnN0IGJvb2wgc21hbGxDYXBzID0g
ZGVzY3JpcHRpb24uc21hbGxDYXBzKCk7CisgICAgZm9udC5zZXRDYXBpdGFsaXphdGlvbihzbWFs
bENhcHMgPyBRRm9udDo6U21hbGxDYXBzIDogUUZvbnQ6Ok1peGVkQ2FzZSk7CisKKyAgICBtX2Rh
dGEtPmJvbGQgPSBmb250LmJvbGQoKTsKKyAgICBtX2RhdGEtPnNpemUgPSBmb250LnBvaW50U2l6
ZUYoKTsKK30KIAotICAgIG1fZm9udC5zZXRGYW1pbHkoZmFtaWx5TmFtZSk7Ci0gICAgbV9mb250
LnNldFBpeGVsU2l6ZShxUm91bmQoZGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpKTsKLSAgICBt
X2ZvbnQuc2V0SXRhbGljKGRlc2NyaXB0aW9uLml0YWxpYygpKTsKLQotICAgIG1fZm9udC5zZXRX
ZWlnaHQodG9RRm9udFdlaWdodChkZXNjcmlwdGlvbi53ZWlnaHQoKSkpOwotICAgIG1fYm9sZCA9
IG1fZm9udC5ib2xkKCk7Ci0KLSAgICBib29sIHNtYWxsQ2FwcyA9IGRlc2NyaXB0aW9uLnNtYWxs
Q2FwcygpOwotICAgIG1fZm9udC5zZXRDYXBpdGFsaXphdGlvbihzbWFsbENhcHMgPyBRRm9udDo6
U21hbGxDYXBzIDogUUZvbnQ6Ok1peGVkQ2FzZSk7Ci0gICAgbV9mb250LnNldFdvcmRTcGFjaW5n
KHdvcmRTcGFjaW5nKTsKLSAgICBtX2ZvbnQuc2V0TGV0dGVyU3BhY2luZyhRRm9udDo6QWJzb2x1
dGVTcGFjaW5nLCBsZXR0ZXJTcGFjaW5nKTsKLSAgICBtX3NpemUgPSBtX2ZvbnQucG9pbnRTaXpl
KCk7CitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7CisgICAgaWYgKCFt
X2RhdGEgfHwgbV9kYXRhID09IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZh
dGUqPigtMSkpCisgICAgICAgIHJldHVybjsKKyAgICAtLW1fZGF0YS0+cmVmQ291bnQ7CisgICAg
aWYgKCFtX2RhdGEtPnJlZkNvdW50KQorICAgICAgICBkZWxldGUgbV9kYXRhOwogfQogCi1Gb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGNvbnN0IFFGb250JiBmb250LCBib29sIGJv
bGQpCi0gICAgOiBtX3NpemUoZm9udC5wb2ludFNpemUoKSkKLSAgICAsIG1fYm9sZChib2xkKQot
ICAgICwgbV9vYmxpcXVlKGZhbHNlKQotICAgICwgbV9mb250KGZvbnQpCitGb250UGxhdGZvcm1E
YXRhJiBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYg
b3RoZXIpCiB7CisgICAgaWYgKG1fZGF0YSA9PSBvdGhlci5tX2RhdGEpCisgICAgICAgIHJldHVy
biAqdGhpczsKKyAgICBpZiAobV9kYXRhICYmIG1fZGF0YSAhPSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKSB7CisgICAgICAgIC0tbV9kYXRhLT5yZWZDb3Vu
dDsKKyAgICAgICAgaWYgKCFtX2RhdGEtPnJlZkNvdW50KQorICAgICAgICAgICAgZGVsZXRlIG1f
ZGF0YTsKKyAgICB9CisgICAgbV9kYXRhID0gb3RoZXIubV9kYXRhOworICAgIGlmIChtX2RhdGEg
JiYgbV9kYXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigt
MSkpCisgICAgICAgICsrbV9kYXRhLT5yZWZDb3VudDsKKyAgICByZXR1cm4gKnRoaXM7CiB9CiAK
LSNpZiBFTkFCTEUoU1ZHX0ZPTlRTKQotRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSkKLSAgICA6IG1fc2l6ZShzaXpl
KQotICAgICwgbV9ib2xkKGJvbGQpCi0gICAgLCBtX29ibGlxdWUob2JsaXF1ZSkKK2Jvb2wgRm9u
dFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikg
Y29uc3QKIHsKKyAgICBpZiAobV9kYXRhID09IG90aGVyLm1fZGF0YSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoIW1fZGF0YSB8fCAhb3RoZXIubV9kYXRhCisgICAgICAgIHx8IG1f
ZGF0YSA9PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpIHx8
IG90aGVyLm1fZGF0YSA9PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRl
Kj4oLTEpKQorICAgICAgICByZXR1cm4gIGZhbHNlOworCisgICAgY29uc3QgYm9vbCBlcXVhbHMg
PSAobV9kYXRhLT5zaXplID09IG90aGVyLm1fZGF0YS0+c2l6ZQorICAgICAgICAgICAgICAgICAg
ICAgICAgICYmIG1fZGF0YS0+Ym9sZCA9PSBvdGhlci5tX2RhdGEtPmJvbGQKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAmJiBtX2RhdGEtPm9ibGlxdWUgPT0gb3RoZXIubV9kYXRhLT5vYmxpcXVl
CisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9kYXRhLT5mb250ID09IG90aGVyLm1fZGF0
YS0+Zm9udCk7CisgICAgcmV0dXJuIGVxdWFsczsKIH0KLSNlbmRpZgogCi1Gb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKCkKLSAgICA6IG1fc2l6ZSgwLjBmKQotICAgICwgbV9ib2xk
KGZhbHNlKQotICAgICwgbV9vYmxpcXVlKGZhbHNlKQordW5zaWduZWQgRm9udFBsYXRmb3JtRGF0
YTo6aGFzaCgpIGNvbnN0CiB7CisgICAgaWYgKCFtX2RhdGEpCisgICAgICAgIHJldHVybiAwOwor
ICAgIGlmIChtX2RhdGEgPT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0
ZSo+KC0xKSkKKyAgICAgICAgcmV0dXJuIDE7CisgICAgcmV0dXJuIHFIYXNoKG1fZGF0YS0+Zm9u
dC50b1N0cmluZygpKQorICAgICAgICAgICBeIHFIYXNoKCpyZWludGVycHJldF9jYXN0PHF1aW50
MzIqPigmbV9kYXRhLT5zaXplKSkKKyAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPmJvbGQpCisg
ICAgICAgICAgIF4gcUhhc2gobV9kYXRhLT5vYmxpcXVlKTsKIH0KIAogI2lmbmRlZiBOREVCVUcK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44305</attachid>
            <date>2009-12-04 05:12:41 -0800</date>
            <delta_ts>2009-12-04 09:50:50 -0800</delta_ts>
            <desc>Refactoring of the font cache to use the common FontCache</desc>
            <filename>font_cache_refactoring.patch</filename>
            <type>text/plain</type>
            <size>27614</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YWY2ZTllNS4uZTc1YWQ4OCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1OSBAQAorMjAwOS0xMi0wNCAgQmVuamFtaW4gUG91
bGFpbiAgPGJlbmphbWluLnBvdWxhaW5Abm9raWEuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gV2ViS2l0IGNyYXNoZXMgd2hlbiBsb2Fk
aW5nIGNlcnRhaW4gU1ZHIGltYWdlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9Mjk0NDMKKworICAgICAgICBSZW1vdmUgRm9udEZhbGxiYWNrTGlzdFF0
IGFuZCByZWx5IG9uIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdAorICAgICAgICB0byBoYW5k
bGUgdGhlIGZvbnRzLiBGb250Q2FjaGUgYW5kIEZvbnRQbGF0Zm9ybURhdGEgaGF2ZSBiZWVuCisg
ICAgICAgIHVwZGF0ZWQgdG8gd29yayB3aXRoIHRoZSBjb21tb24gRm9udEZhbGxiYWNrTGlzdC4K
KworICAgICAgICBJbiB0aGUgcHJldmlvdXMgaW1wbGVtZW50YXRpb24sIEZvbnRQbGF0Zm9ybURh
dGFDYWNoZUtleQorICAgICAgICB3YXMgYSBjbG9uZSBvZiBGb250UGxhdGZvcm1EYXRhIHdpdGgg
dGhlIGhhc2hpbmcKKyAgICAgICAgY2FwYWJpbGl0aWVzIGFkZGVkIGluIG9yZGVyIHRvIHVzZSBp
dCBhcyBhIGtleSBpbiB0aGUgY2FjaGUncworICAgICAgICBoYXNobWFwLiBGb250UGxhdGZvcm1E
YXRhIGhhcyBiZWVuIG1vZGlmaWVkIHRvIGhhbmRsZSB0aGUgaGFzaGluZworICAgICAgICBmdW5j
dGlvbiBkaXJlY3RseSBzbyB0aGUgZGF0YSBhcmUgbm90IGNvcGllZCB0d2ljZSBpbiBtZW1vcnku
CisKKyAgICAgICAgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpIGZyb20gRm9udEZhbGxi
YWNrTGlzdFF0IHdhcyBhIGNvcHkgb2YKKyAgICAgICAgY29kZSBmcm9tIEZvbnRDYWNoZTo6Z2V0
Rm9udERhdGEoKSBhbmQgRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFBdCgpLgorICAgICAgICBU
aGUgYmVoYXZpb3IgaXMgc2ltaWxhciBleGNlcHQgY3VyckZhbWlseS0+ZmFtaWx5KCkubGVuZ3Ro
KCkgd2FzCisgICAgICAgIG5vdCB0ZXN0ZWQgYW5kIHRoZSBmYWxsYmFjayBmb250cyBzZWxlY3Rv
ciB3ZXJlIG5vdCB1c2VkLgorCisgICAgICAgIEV4aXN0aW5nIHRlc3RzIGNvdmVyIHRoZSBjaGFu
Z2UuCisKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9xdC9Gb250Q2FjaGVRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OnBsYXRm
b3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hh
cmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFNpbWlsYXJGb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZh
bGxiYWNrRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldFRyYWl0c0luRmFt
aWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpmb250UGxh
dGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tM
aXN0UXQuY3BwOgorICAgICAgICBSZW1vdmVkLiBXZSBub3cgdXNlIHRoZSBpbXBsZW1lbnRhdGlv
biBmcm9tIEZvbnRGYWxsYmFja0xpc3QuY3BwCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICBBZGQgaGFzaGluZyBjYXBhYmlsaXRpZXMg
dG8gYmUgYWJsZSB0byB1c2UgdGhlIGRhdGEgd2l0aCB0aGUgRm9udENhY2hlLgorICAgICAgICBU
aGlzIHdhcyBwcmV2aW91c2x5IGRvbmUgaW4gRm9udENhY2hlUXQuY3BwCisgICAgICAgIChXZWJD
b3JlOjpGb250UGxhdGZvcm1EYXRhUHJpdmF0ZTo6Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1
ZSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpmb250KToKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNpemUpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6ZmFtaWx5KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OmJvbGQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6aXRhbGljKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNtYWxsQ2Fwcyk6CisgICAgICAg
IChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpwaXhlbFNpemUpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxh
dGZvcm1EYXRhOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6Omhhc2gpOgorCiAyMDA5LTEyLTAzICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xhemtvdkBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQWRhbSBCYXJ0aC4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmluZGV4IDc5ZjAzYmIu
LjViZjYzZTUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9X
ZWJDb3JlLnBybwpAQCAtMTE5Miw2ICsxMTkyLDcgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvcXQvUkdCQTMyQnVmZmVyUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9maWx0ZXJzL0ZFR2F1c3NpYW5CbHVyLmNwcCBcCiAgICAgcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udERlc2NyaXB0aW9uLmNwcCBcCisgICAgcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxi
YWNrTGlzdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYW1pbHkuY3BwIFwKICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9CaXRtYXBJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL0NvbG9yLmNwcCBcCkBAIC0xMjAyLDYgKzEyMDMsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBw
bGF0Zm9ybS9ncmFwaGljcy9GbG9hdFNpemUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9G
b250RGF0YS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwIFwKKyAgICBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FjaGUuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9HZW5l
cmF0ZWRJbWFnZS5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL0dyYWRpZW50LmNwcCBcCiAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcCBcCkBAIC0yMzg5LDcgKzIz
OTEsNiBAQCBTT1VSQ0VTICs9IFwKICAgICBwbGF0Zm9ybS9xdC9TaGFyZWRCdWZmZXJRdC5jcHAg
XAogICAgIHBsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcCBcCiAgICAgcGxhdGZv
cm0vZ3JhcGhpY3MvcXQvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgXAotICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAgXAogICAgIHBsYXRmb3JtL2dyYXBo
aWNzL3F0L0dseXBoUGFnZVRyZWVOb2RlUXQuY3BwIFwKICAgICBwbGF0Zm9ybS9ncmFwaGljcy9x
dC9TaW1wbGVGb250RGF0YVF0LmNwcCBcCiAgICAgcGxhdGZvcm0vcXQvS1VSTFF0LmNwcCBcCmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDYWNoZVF0LmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hlUXQuY3BwCmluZGV4IDRlZjAz
YTUuLjY0OGVlZDcgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dENhY2hlUXQuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udENhY2hl
UXQuY3BwCkBAIC0zOCwyNTYgKzM4LDMzIEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotRm9udENhY2hlKiBmb250Q2FjaGUoKQordm9pZCBGb250Q2FjaGU6
OnBsYXRmb3JtSW5pdCgpCiB7Ci0gICAgREVGSU5FX1NUQVRJQ19MT0NBTChGb250Q2FjaGUsIGds
b2JhbEZvbnRDYWNoZSwgKCkpOwotICAgIHJldHVybiAmZ2xvYmFsRm9udENhY2hlOwogfQogCi1G
b250Q2FjaGU6OkZvbnRDYWNoZSgpCi17Ci19Ci0KLXZvaWQgRm9udENhY2hlOjpnZXRUcmFpdHNJ
bkZhbWlseShjb25zdCBBdG9taWNTdHJpbmcmLCBWZWN0b3I8dW5zaWduZWQ+JikKLXsKLX0KLQot
Ly8gVGhpcyB0eXBlIG11c3QgYmUgY29uc2lzdGVudCB3aXRoIEZvbnRQbGF0Zm9ybURhdGEncyBj
dG9yIC0gdGhlIG9uZSB3aGljaAotLy8gZ2V0cyBGb250RGVzY3JpcHRpb24gYXMgaXQncyBwYXJh
bWV0ZXIuCi1jbGFzcyBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXkgewotcHVibGljOgotICAgIEZv
bnRQbGF0Zm9ybURhdGFDYWNoZUtleShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQotICAgICAgICA6IG1fZmFtaWx5TmFtZSgpCi0gICAgICAgICwgbV9zaXplKGRlc2NyaXB0aW9u
LmNvbXB1dGVkUGl4ZWxTaXplKCkpCi0gICAgICAgICwgbV9ib2xkKGZhbHNlKQotICAgICAgICAs
IG1faXRhbGljKGRlc2NyaXB0aW9uLml0YWxpYygpKQotICAgICAgICAsIG1fc21hbGxDYXBzKGRl
c2NyaXB0aW9uLnNtYWxsQ2FwcygpKQotICAgICAgICAsIG1faGFzaCgwKQotICAgIHsKLSAgICAg
ICAgLy8gRklYTUU6IE1hcCBhbGwgRm9udFdlaWdodCB2YWx1ZXMgdG8gUUZvbnQgd2VpZ2h0cyBp
biBGb250UGxhdGZvcm1EYXRhJ3MgY3RvciBhbmQgZm9sbG93IGl0IGhlcmUKLSAgICAgICAgaWYg
KEZvbnRQbGF0Zm9ybURhdGE6OnRvUUZvbnRXZWlnaHQoZGVzY3JpcHRpb24ud2VpZ2h0KCkpID4g
UUZvbnQ6Ok5vcm1hbCkKLSAgICAgICAgICAgIG1fYm9sZCA9IHRydWU7Ci0KLSAgICAgICAgY29u
c3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZhbWlseSgpOwotICAgICAgICB3
aGlsZSAoZmFtaWx5KSB7Ci0gICAgICAgICAgICBtX2ZhbWlseU5hbWUuYXBwZW5kKGZhbWlseS0+
ZmFtaWx5KCkpOwotICAgICAgICAgICAgZmFtaWx5ID0gZmFtaWx5LT5uZXh0KCk7Ci0gICAgICAg
ICAgICBpZiAoZmFtaWx5KQotICAgICAgICAgICAgICAgIG1fZmFtaWx5TmFtZS5hcHBlbmQoJywn
KTsKLSAgICAgICAgfQotCi0gICAgICAgIGNvbXB1dGVIYXNoKCk7Ci0gICAgfQotCi0gICAgRm9u
dFBsYXRmb3JtRGF0YUNhY2hlS2V5KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIGZvbnREYXRhKQot
ICAgICAgICA6IG1fZmFtaWx5TmFtZShzdGF0aWNfY2FzdDxTdHJpbmc+KGZvbnREYXRhLmZhbWls
eSgpKSkKLSAgICAgICAgLCBtX3NpemUoZm9udERhdGEucGl4ZWxTaXplKCkpCi0gICAgICAgICwg
bV9ib2xkKGZvbnREYXRhLmJvbGQoKSkKLSAgICAgICAgLCBtX2l0YWxpYyhmb250RGF0YS5pdGFs
aWMoKSkKLSAgICAgICAgLCBtX3NtYWxsQ2Fwcyhmb250RGF0YS5zbWFsbENhcHMoKSkKLSAgICAg
ICAgLCBtX2hhc2goMCkKLSAgICB7Ci0gICAgICAgIGNvbXB1dGVIYXNoKCk7Ci0gICAgfQotCi0g
ICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5KEhhc2hUYWJsZURlbGV0ZWRWYWx1ZVR5cGUpIDog
bV9zaXplKGhhc2hUYWJsZURlbGV0ZWRTaXplKCkpIHsgfQotICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX3NpemUgPT0gaGFzaFRhYmxlRGVsZXRlZFNp
emUoKTsgfQotCi0gICAgZW51bSBIYXNoVGFibGVFbXB0eVZhbHVlVHlwZSB7IEhhc2hUYWJsZUVt
cHR5VmFsdWUgfTsKLQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleShIYXNoVGFibGVFbXB0
eVZhbHVlVHlwZSkKLSAgICAgICAgOiBtX2ZhbWlseU5hbWUoKQotICAgICAgICAsIG1fc2l6ZSgw
KQotICAgICAgICAsIG1fYm9sZChmYWxzZSkKLSAgICAgICAgLCBtX2l0YWxpYyhmYWxzZSkKLSAg
ICAgICAgLCBtX3NtYWxsQ2FwcyhmYWxzZSkKLSAgICAgICAgLCBtX2hhc2goMCkKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSYgb3RoZXIpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAobV9oYXNoICE9IG90aGVyLm1faGFz
aCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICByZXR1cm4gZXF1YWxJZ25v
cmluZ0Nhc2UobV9mYW1pbHlOYW1lLCBvdGhlci5tX2ZhbWlseU5hbWUpICYmIG1fc2l6ZSA9PSBv
dGhlci5tX3NpemUgJiYKLSAgICAgICAgICAgIG1fYm9sZCA9PSBvdGhlci5tX2JvbGQgJiYgbV9p
dGFsaWMgPT0gb3RoZXIubV9pdGFsaWMgJiYgbV9zbWFsbENhcHMgPT0gb3RoZXIubV9zbWFsbENh
cHM7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgaGFzaCgpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gbV9oYXNoOwotICAgIH0KLQotICAgIHZvaWQgY29tcHV0ZUhhc2goKQotICAgIHsKLSAg
ICAgICAgdW5zaWduZWQgaGFzaENvZGVzW10gPSB7Ci0gICAgICAgICAgICBDYXNlRm9sZGluZ0hh
c2g6Omhhc2gobV9mYW1pbHlOYW1lKSwKLSAgICAgICAgICAgIG1fc2l6ZSB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihtX2JvbGQgPDwgKHNpemVvZih1bnNpZ25lZCkgKiA4IC0gMSkpCi0gICAgICAg
ICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9pdGFsaWMpIDw8IChzaXplb2YodW5z
aWduZWQpICogOCAtIDIpCi0gICAgICAgICAgICAgICAgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
bV9zbWFsbENhcHMpIDw8IChzaXplb2YodW5zaWduZWQpICogOCAtIDMpCi0gICAgICAgIH07Ci0g
ICAgICAgIG1faGFzaCA9IFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKHJlaW50ZXJwcmV0X2Nhc3Q8
VUNoYXIqPihoYXNoQ29kZXMpLCBzaXplb2YoaGFzaENvZGVzKSAvIHNpemVvZihVQ2hhcikpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBTdHJpbmcgbV9mYW1pbHlOYW1lOwotICAgIGludCBtX3Np
emU7Ci0gICAgYm9vbCBtX2JvbGQ7Ci0gICAgYm9vbCBtX2l0YWxpYzsKLSAgICBib29sIG1fc21h
bGxDYXBzOwotICAgIHVuc2lnbmVkIG1faGFzaDsKLQotICAgIHN0YXRpYyB1bnNpZ25lZCBoYXNo
VGFibGVEZWxldGVkU2l6ZSgpIHsgcmV0dXJuIDB4RkZGRkZGRkZVOyB9Ci19OwotCi1zdHJ1Y3Qg
Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5SGFzaCB7Ci0gICAgc3RhdGljIHVuc2lnbmVkIGhhc2go
Y29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiBrZXkpCi0gICAgewotICAgICAgICByZXR1
cm4ga2V5Lmhhc2goKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBGb250
UGxhdGZvcm1EYXRhQ2FjaGVLZXkmIGEsIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSYg
YikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhID09IGI7Ci0gICAgfQotCi0gICAgc3RhdGljIGNv
bnN0IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOwotfTsKLQotc3Ry
dWN0IEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleVRyYWl0cyA6IFdURjo6R2VuZXJpY0hhc2hUcmFp
dHM8Rm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5PiB7Ci0gICAgc3RhdGljIGNvbnN0IGJvb2wgbmVl
ZHNEZXN0cnVjdGlvbiA9IHRydWU7Ci0gICAgc3RhdGljIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGFD
YWNoZUtleSYgZW1wdHlWYWx1ZSgpCi0gICAgewotICAgICAgICBERUZJTkVfU1RBVElDX0xPQ0FM
KEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSwga2V5LCAoRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5
OjpIYXNoVGFibGVFbXB0eVZhbHVlKSk7Ci0gICAgICAgIHJldHVybiBrZXk7Ci0gICAgfQotICAg
IHN0YXRpYyB2b2lkIGNvbnN0cnVjdERlbGV0ZWRWYWx1ZShGb250UGxhdGZvcm1EYXRhQ2FjaGVL
ZXkmIHNsb3QpCi0gICAgewotICAgICAgICBuZXcgKCZzbG90KSBGb250UGxhdGZvcm1EYXRhQ2Fj
aGVLZXkoSGFzaFRhYmxlRGVsZXRlZFZhbHVlKTsKLSAgICB9Ci0gICAgc3RhdGljIGJvb2wgaXNE
ZWxldGVkVmFsdWUoY29uc3QgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5JiB2YWx1ZSkKLSAgICB7
Ci0gICAgICAgIHJldHVybiB2YWx1ZS5pc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpOwotICAgIH0K
LX07Ci0KLXR5cGVkZWYgSGFzaE1hcDxGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXksIEZvbnRQbGF0
Zm9ybURhdGEqLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXlUcmFpdHM+IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsKLQotLy8gdXNpbmcgUV9HTE9C
QUxfU1RBVElDIGxlYWRzIHRvIGNyYXNoLiBUT0RPIGludmVzdGlnYXRlIHRoZSB3YXkgdG8gZml4
IHRoaXMuCi1zdGF0aWMgRm9udFBsYXRmb3JtRGF0YUNhY2hlKiBnRm9udFBsYXRmb3JtRGF0YUNh
Y2hlID0gMDsKLQotRm9udFBsYXRmb3JtRGF0YSogRm9udENhY2hlOjpnZXRDYWNoZWRGb250UGxh
dGZvcm1EYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24sIGNvbnN0IEF0b21p
Y1N0cmluZyYsIGJvb2wpCi17Ci0gICAgaWYgKCFnRm9udFBsYXRmb3JtRGF0YUNhY2hlKQotICAg
ICAgICBnRm9udFBsYXRmb3JtRGF0YUNhY2hlID0gbmV3IEZvbnRQbGF0Zm9ybURhdGFDYWNoZTsK
LQotICAgIEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtleSBrZXkoZGVzY3JpcHRpb24pOwotICAgIEZv
bnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSA9IGdGb250UGxhdGZvcm1EYXRhQ2FjaGUtPmdl
dChrZXkpOwotICAgIGlmICghcGxhdGZvcm1EYXRhKSB7Ci0gICAgICAgIHBsYXRmb3JtRGF0YSA9
IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uKTsKLSAgICAgICAgZ0ZvbnRQbGF0Zm9y
bURhdGFDYWNoZS0+YWRkKGtleSwgcGxhdGZvcm1EYXRhKTsKLSAgICB9Ci0gICAgcmV0dXJuIHBs
YXRmb3JtRGF0YTsKLX0KLQotdHlwZWRlZiBIYXNoTWFwPEZvbnRQbGF0Zm9ybURhdGFDYWNoZUtl
eSwgc3RkOjpwYWlyPFNpbXBsZUZvbnREYXRhKiwgdW5zaWduZWQ+LCBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXlIYXNoLCBGb250UGxhdGZvcm1EYXRhQ2FjaGVLZXlUcmFpdHM+IEZvbnREYXRhQ2Fj
aGU7Ci0KLXN0YXRpYyBGb250RGF0YUNhY2hlKiBnRm9udERhdGFDYWNoZSA9IDA7Ci0KLXN0YXRp
YyBjb25zdCBpbnQgY01heEluYWN0aXZlRm9udERhdGEgPSA0MDsKLXN0YXRpYyBjb25zdCBpbnQg
Y1RhcmdldEluYWN0aXZlRm9udERhdGEgPSAzMjsKLQotc3RhdGljIExpc3RIYXNoU2V0PGNvbnN0
IFNpbXBsZUZvbnREYXRhKj4qIGdJbmFjdGl2ZUZvbnREYXRhU2V0ID0gMDsKLQotU2ltcGxlRm9u
dERhdGEqIEZvbnRDYWNoZTo6Z2V0Q2FjaGVkRm9udERhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0
YSogZm9udFBsYXRmb3JtRGF0YSkKLXsKLSAgICBpZiAoIWdGb250RGF0YUNhY2hlKSB7Ci0gICAg
ICAgIGdGb250RGF0YUNhY2hlID0gbmV3IEZvbnREYXRhQ2FjaGU7Ci0gICAgICAgIGdJbmFjdGl2
ZUZvbnREYXRhU2V0ID0gbmV3IExpc3RIYXNoU2V0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj47Ci0g
ICAgfQotCi0gICAgRm9udFBsYXRmb3JtRGF0YUNhY2hlS2V5IGtleSgqZm9udFBsYXRmb3JtRGF0
YSk7Ci0gICAgRm9udERhdGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+Zmlu
ZChrZXkpOwotICAgIGlmIChpdCA9PSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpIHsKLSAgICAgICAg
U2ltcGxlRm9udERhdGEqIGZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRhKCpmb250UGxhdGZv
cm1EYXRhKTsKLSAgICAgICAgZ0ZvbnREYXRhQ2FjaGUtPmFkZChrZXksIHN0ZDo6cGFpcjxTaW1w
bGVGb250RGF0YSosIHVuc2lnbmVkPihmb250RGF0YSwgMSkpOwotICAgICAgICByZXR1cm4gZm9u
dERhdGE7Ci0gICAgfQotICAgIGlmICghaXQtPnNlY29uZC5zZWNvbmQrKykgewotICAgICAgICBB
U1NFUlQoZ0luYWN0aXZlRm9udERhdGFTZXQtPmNvbnRhaW5zKGl0LT5zZWNvbmQuZmlyc3QpKTsK
LSAgICAgICAgZ0luYWN0aXZlRm9udERhdGFTZXQtPnJlbW92ZShpdC0+c2Vjb25kLmZpcnN0KTsK
LSAgICB9Ci0gICAgcmV0dXJuIGl0LT5zZWNvbmQuZmlyc3Q7Ci19Ci0KLUZvbnRQbGF0Zm9ybURh
dGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNrRm9udChjb25zdCBGb250RGVzY3Jp
cHRpb24mKQorY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRDYWNoZTo6Z2V0Rm9udERhdGFGb3JD
aGFyYWN0ZXJzKGNvbnN0IEZvbnQmLCBjb25zdCBVQ2hhciosIGludCkKIHsKICAgICByZXR1cm4g
MDsKIH0KIAotdm9pZCBGb250Q2FjaGU6OnJlbGVhc2VGb250RGF0YShjb25zdCBXZWJDb3JlOjpT
aW1wbGVGb250RGF0YSogZm9udERhdGEpCi17Ci0gICAgQVNTRVJUKGdGb250RGF0YUNhY2hlKTsK
LSAgICBBU1NFUlQoIWZvbnREYXRhLT5pc0N1c3RvbUZvbnQoKSk7Ci0KLSAgICBGb250UGxhdGZv
cm1EYXRhQ2FjaGVLZXkga2V5KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKSk7Ci0gICAgRm9udERh
dGFDYWNoZTo6aXRlcmF0b3IgaXQgPSBnRm9udERhdGFDYWNoZS0+ZmluZChrZXkpOwotICAgIEFT
U0VSVChpdCAhPSBnRm9udERhdGFDYWNoZS0+ZW5kKCkpOwotICAgIGlmICghLS1pdC0+c2Vjb25k
LnNlY29uZCkgewotICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+YWRkKGl0LT5zZWNvbmQu
Zmlyc3QpOwotICAgICAgICBpZiAoZ0luYWN0aXZlRm9udERhdGFTZXQtPnNpemUoKSA+IGNNYXhJ
bmFjdGl2ZUZvbnREYXRhKQotICAgICAgICAgICAgcHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGdJbmFj
dGl2ZUZvbnREYXRhU2V0LT5zaXplKCkgLSBjVGFyZ2V0SW5hY3RpdmVGb250RGF0YSk7Ci0gICAg
fQotfQotCi12b2lkIEZvbnRDYWNoZTo6cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKGludCBjb3VudCkK
K0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0U2ltaWxhckZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udCYgZm9udCkKIHsKLSAgICBzdGF0aWMgYm9vbCBpc1B1cmdpbmc7ICAvLyBHdWFy
ZCBhZ2FpbnN0IHJlZW50cnkgd2hlbiBlLmcuIGEgZGVsZXRlZCBGb250RGF0YSByZWxlYXNlcyBp
dHMgc21hbGwgY2FwcyBGb250RGF0YS4KLSAgICBpZiAoaXNQdXJnaW5nKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpc1B1cmdpbmcgPSB0cnVlOwotCi0gICAgTGlzdEhhc2hTZXQ8Y29uc3QgU2lt
cGxlRm9udERhdGEqPjo6aXRlcmF0b3IgaXQgPSBnSW5hY3RpdmVGb250RGF0YVNldC0+YmVnaW4o
KTsKLSAgICBMaXN0SGFzaFNldDxjb25zdCBTaW1wbGVGb250RGF0YSo+OjppdGVyYXRvciBlbmQg
PSBnSW5hY3RpdmVGb250RGF0YVNldC0+ZW5kKCk7Ci0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCBj
b3VudCAmJiBpdCAhPSBlbmQ7ICsraSwgKytpdCkgewotICAgICAgICBGb250UGxhdGZvcm1EYXRh
Q2FjaGVLZXkga2V5ID0gKCppdCktPnBsYXRmb3JtRGF0YSgpOwotICAgICAgICBwYWlyPFNpbXBs
ZUZvbnREYXRhKiwgdW5zaWduZWQ+IGZvbnREYXRhUGFpciA9IGdGb250RGF0YUNhY2hlLT50YWtl
KGtleSk7Ci0gICAgICAgIEFTU0VSVChmb250RGF0YVBhaXIuZmlyc3QgIT0gMCk7Ci0gICAgICAg
IEFTU0VSVCghZm9udERhdGFQYWlyLnNlY29uZCk7Ci0gICAgICAgIGRlbGV0ZSBmb250RGF0YVBh
aXIuZmlyc3Q7Ci0KLSAgICAgICAgRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhID0gZ0Zv
bnRQbGF0Zm9ybURhdGFDYWNoZS0+dGFrZShrZXkpOwotICAgICAgICBpZiAocGxhdGZvcm1EYXRh
KQotICAgICAgICAgICAgZGVsZXRlIHBsYXRmb3JtRGF0YTsKLSAgICB9Ci0KLSAgICBpZiAoaXQg
PT0gZW5kKSB7Ci0gICAgICAgIC8vIFJlbW92ZWQgZXZlcnl0aGluZwotICAgICAgICBnSW5hY3Rp
dmVGb250RGF0YVNldC0+Y2xlYXIoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IGNvdW50OyArK2kpCi0gICAgICAgICAgICBnSW5hY3RpdmVGb250RGF0YVNldC0+
cmVtb3ZlKGdJbmFjdGl2ZUZvbnREYXRhU2V0LT5iZWdpbigpKTsKLSAgICB9Ci0KLSAgICBpc1B1
cmdpbmcgPSBmYWxzZTsKKyAgICByZXR1cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udC5mb250
RGVzY3JpcHRpb24oKSk7CiB9CiAKLXZvaWQgRm9udENhY2hlOjphZGRDbGllbnQoRm9udFNlbGVj
dG9yKikKK0ZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikKIHsKKyAgICByZXR1
cm4gbmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uKTsKIH0KIAotdm9pZCBGb250
Q2FjaGU6OnJlbW92ZUNsaWVudChGb250U2VsZWN0b3IqKQordm9pZCBGb250Q2FjaGU6OmdldFRy
YWl0c0luRmFtaWx5KGNvbnN0IEF0b21pY1N0cmluZyYsIFZlY3Rvcjx1bnNpZ25lZD4mKQogewog
fQogCi12b2lkIEZvbnRDYWNoZTo6aW52YWxpZGF0ZSgpCitGb250UGxhdGZvcm1EYXRhKiBGb250
Q2FjaGU6OmNyZWF0ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250
RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYpCiB7Ci0gICAgaWYgKCFnRm9udFBsYXRm
b3JtRGF0YUNhY2hlIHx8ICFnRm9udERhdGFDYWNoZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
cHVyZ2VJbmFjdGl2ZUZvbnREYXRhKCk7CisgICAgLy8gRklYTUUgOiB3ZSBtdXN0IHRha2UgaW50
byBhY2NvdW50IHRoZSBmYW1pbGx5IG5hbWUgKHNlY29uZCBhcmd1bWVudCkKKyAgICByZXR1cm4g
bmV3IEZvbnRQbGF0Zm9ybURhdGEoZm9udERlc2NyaXB0aW9uKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKaW5kZXggYTE5NDY0ZS4uNmU5ZDA1MyAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRDdXN0b21QbGF0Zm9ybURh
dGEuY3BwCkBAIC00Myw3ICs0Myw3IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRm
b3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBiCiAgICAgICAg
IGZvbnQuc2V0V2VpZ2h0KFFGb250OjpCb2xkKTsKICAgICBmb250LnNldEl0YWxpYyhpdGFsaWMp
OwogCi0gICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoZm9udCwgYm9sZCk7CisgICAgcmV0dXJu
IEZvbnRQbGF0Zm9ybURhdGEoZm9udCk7CiB9CiAKIEZvbnRDdXN0b21QbGF0Zm9ybURhdGEqIGNy
ZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEoU2hhcmVkQnVmZmVyKiBidWZmZXIpCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRGYWxsYmFja0xpc3RRdC5jcHAKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAzMDZhYmYuLjAwMDAwMDAKLS0tIGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250RmFsbGJhY2tMaXN0UXQuY3BwCisrKyAvZGV2L251
bGwKQEAgLTEsMTM4ICswLDAgQEAKLS8qCi0gICAgQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCi0gICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKLSAgICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKLSAgICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCi0KLSAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gICAgTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0KLSAgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlCi0gICAgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KLSAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICAgIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgotCi0gICAgUmVwbGFjZW1lbnQgb2YgdGhlIHN0b2NrIEZvbnRGYWxs
YmFja0xpc3QgYXMgUXQgaXMgZ29pbmcgdG8gZmluZCB1cyBhCi0gICAgcmVwbGFjZW1lbnQgZm9u
dCwgd2lsbCBkbyBjYWNoaW5nIGFuZCB0aGUgb3RoZXIgc3R1ZmYgd2UgaW1wbGVtZW50IGluCi0g
ICAgV2ViS2l0LgotKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkZvbnRGYWxs
YmFja0xpc3QuaCIKLQotI2luY2x1ZGUgIkZvbnQuaCIKLSNpbmNsdWRlICJGb250Q2FjaGUuaCIK
LSNpbmNsdWRlICJTZWdtZW50ZWRGb250RGF0YS5oIgotCi0jaW5jbHVkZSA8UURlYnVnPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUZvbnRGYWxsYmFja0xpc3Q6OkZvbnRGYWxsYmFja0xpc3Qo
KQotICAgIDogbV9wYWdlWmVybygwKQotICAgICwgbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERh
dGEoMCkKLSAgICAsIG1fZm9udFNlbGVjdG9yKDApCi0gICAgLCBtX2ZhbWlseUluZGV4KDApCi0g
ICAgLCBtX3BpdGNoKFVua25vd25QaXRjaCkKLSAgICAsIG1fbG9hZGluZ0N1c3RvbUZvbnRzKGZh
bHNlKQotICAgICwgbV9nZW5lcmF0aW9uKDApCi17Ci19Ci0KLXZvaWQgRm9udEZhbGxiYWNrTGlz
dDo6aW52YWxpZGF0ZShXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6Rm9udFNlbGVjdG9yPiBmb250
U2VsZWN0b3IpCi17Ci0gICAgcmVsZWFzZUZvbnREYXRhKCk7Ci0gICAgbV9mb250TGlzdC5jbGVh
cigpOwotICAgIG1fcGFnZVplcm8gPSAwOwotICAgIG1fcGFnZXMuY2xlYXIoKTsKLSAgICBtX2Nh
Y2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSA9IDA7Ci0gICAgbV9mYW1pbHlJbmRleCA9IDA7Ci0g
ICAgbV9waXRjaCA9IFVua25vd25QaXRjaDsKLSAgICBtX2xvYWRpbmdDdXN0b21Gb250cyA9IGZh
bHNlOwotICAgIG1fZm9udFNlbGVjdG9yID0gZm9udFNlbGVjdG9yOwotICAgIG1fZ2VuZXJhdGlv
biA9IDA7Ci19Ci0KLXZvaWQgRm9udEZhbGxiYWNrTGlzdDo6cmVsZWFzZUZvbnREYXRhKCkKLXsK
LSAgICB1bnNpZ25lZCBudW1Gb250cyA9IG1fZm9udExpc3Quc2l6ZSgpOwotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCBudW1Gb250czsgKytpKSB7Ci0gICAgICAgIGlmIChtX2ZvbnRMaXN0
W2ldLnNlY29uZCkKLSAgICAgICAgICAgIGRlbGV0ZSBtX2ZvbnRMaXN0W2ldLmZpcnN0OwotICAg
ICAgICBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVCghbV9mb250TGlzdFtpXS5maXJzdC0+aXNT
ZWdtZW50ZWQoKSk7Ci0gICAgICAgICAgICBmb250Q2FjaGUoKS0+cmVsZWFzZUZvbnREYXRhKHN0
YXRpY19jYXN0PGNvbnN0IFNpbXBsZUZvbnREYXRhKj4obV9mb250TGlzdFtpXS5maXJzdCkpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEZvbnRGYWxsYmFja0xpc3Q6OmRldGVybWluZVBp
dGNoKGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZvbnQpIGNvbnN0Ci17Ci0gICAgY29uc3QgRm9udERh
dGEqIGZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRhKGZvbnQpOwotICAgIGlmICghZm9udERhdGEt
PmlzU2VnbWVudGVkKCkpCi0gICAgICAgIG1fcGl0Y2ggPSBzdGF0aWNfY2FzdDxjb25zdCBTaW1w
bGVGb250RGF0YSo+KGZvbnREYXRhKS0+cGl0Y2goKTsKLSAgICBlbHNlIHsKLSAgICAgICAgY29u
c3QgU2VnbWVudGVkRm9udERhdGEqIHNlZ21lbnRlZEZvbnREYXRhID0gc3RhdGljX2Nhc3Q8Y29u
c3QgU2VnbWVudGVkRm9udERhdGEqPihmb250RGF0YSk7Ci0gICAgICAgIHVuc2lnbmVkIG51bVJh
bmdlcyA9IHNlZ21lbnRlZEZvbnREYXRhLT5udW1SYW5nZXMoKTsKLSAgICAgICAgaWYgKG51bVJh
bmdlcyA9PSAxKQotICAgICAgICAgICAgbV9waXRjaCA9IHNlZ21lbnRlZEZvbnREYXRhLT5yYW5n
ZUF0KDApLmZvbnREYXRhKCktPnBpdGNoKCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG1f
cGl0Y2ggPSBWYXJpYWJsZVBpdGNoOwotICAgIH0KLX0KLQotY29uc3QgRm9udERhdGEqIEZvbnRG
YWxsYmFja0xpc3Q6OmZvbnREYXRhQXQoY29uc3QgV2ViQ29yZTo6Rm9udCogX2ZvbnQsIHVuc2ln
bmVkIGluZGV4KSBjb25zdAotewotICAgIGlmIChpbmRleCAhPSAwKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIC8vIFNlYXJjaCBmb3IgdGhlIFdlYkNvcmUgZm9udCB0aGF0IGlzIGFscmVhZHkg
aW4gdGhlIGxpc3QKLSAgICBmb3IgKGludCBpID0gbV9mb250TGlzdC5zaXplKCkgLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICBwYWlyPGNvbnN0IEZvbnREYXRhKiwgYm9vbD4gaXRlbSA9IG1f
Zm9udExpc3RbaV07Ci0gICAgICAgIC8vIGl0ZW0uc2Vjb25kIG1lYW5zIHRoYXQgdGhlIGl0ZW0g
d2FzIGNyZWF0ZWQgbG9jYWxseSBvciBub3QKLSAgICAgICAgaWYgKCFpdGVtLnNlY29uZCkKLSAg
ICAgICAgICAgIHJldHVybiBpdGVtLmZpcnN0OwotICAgIH0KLQotICAgIC8vIFVzZSB0aGUgRm9u
dFNlbGVjdG9yIHRvIGdldCBhIFdlYkNvcmUgZm9udCBhbmQgdGhlbiBmYWxsYmFjayB0byBRdAot
ICAgIGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24gPSBfZm9udC0+Zm9udERlc2Ny
aXB0aW9uKCk7Ci0gICAgY29uc3QgRm9udEZhbWlseSogZmFtaWx5ID0gJmRlc2NyaXB0aW9uLmZh
bWlseSgpOwotICAgIHdoaWxlIChmYW1pbHkpIHsKLSAgICAgICAgaWYgKGZhbWlseS0+ZmFtaWx5
KCkubGVuZ3RoKCkgJiYgbV9mb250U2VsZWN0b3IpIHsKLSAgICAgICAgICAgIEZvbnREYXRhKiBk
YXRhID0gbV9mb250U2VsZWN0b3ItPmdldEZvbnREYXRhKGRlc2NyaXB0aW9uLCBmYW1pbHktPmZh
bWlseSgpKTsKLSAgICAgICAgICAgIGlmIChkYXRhKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGRh
dGEtPmlzTG9hZGluZygpKQotICAgICAgICAgICAgICAgICAgICBtX2xvYWRpbmdDdXN0b21Gb250
cyA9IHRydWU7Ci0gICAgICAgICAgICAgICAgaWYgKCFkYXRhLT5pc0N1c3RvbUZvbnQoKSkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBDdXN0b20gZm9udHMgY2FuIGJlIGZyZWVkIGFueXRpbWUg
c28gd2UgbXVzdCBub3QgaG9sZCB0aGVtCi0gICAgICAgICAgICAgICAgICAgIG1fZm9udExpc3Qu
YXBwZW5kKHBhaXI8Y29uc3QgRm9udERhdGEqLCBib29sPihkYXRhLCBmYWxzZSkpOwotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm4gZGF0YTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotICAgICAgICBmYW1pbHkgPSBmYW1pbHktPm5leHQoKTsKLSAgICB9Ci0KLSAg
ICBpZiAobV9mb250TGlzdC5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX2ZvbnRMaXN0WzBdLmZp
cnN0OwotCi0gICAgY29uc3QgRm9udERhdGEqIHJlc3VsdCA9IG5ldyBTaW1wbGVGb250RGF0YShG
b250UGxhdGZvcm1EYXRhKGRlc2NyaXB0aW9uLCBfZm9udC0+d29yZFNwYWNpbmcoKSwgX2ZvbnQt
PmxldHRlclNwYWNpbmcoKSksIHRydWUpOwotICAgIG1fZm9udExpc3QuYXBwZW5kKHBhaXI8Y29u
c3QgRm9udERhdGEqLCBib29sPihyZXN1bHQsIHRydWUpKTsKLSAgICByZXR1cm4gcmVzdWx0Owot
fQotCi1jb25zdCBGb250RGF0YSogRm9udEZhbGxiYWNrTGlzdDo6Zm9udERhdGFGb3JDaGFyYWN0
ZXJzKGNvbnN0IFdlYkNvcmU6OkZvbnQqIGZvbnQsIGNvbnN0IFVDaGFyKiwgaW50KSBjb25zdAot
ewotICAgIHJldHVybiBwcmltYXJ5Rm9udERhdGEoZm9udCk7Ci19Ci0KLXZvaWQgRm9udEZhbGxi
YWNrTGlzdDo6c2V0UGxhdGZvcm1Gb250KGNvbnN0IFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGEm
KQotewotICAgIG1fZmFtaWx5SW5kZXggPSBjQWxsRmFtaWxpZXNTY2FubmVkOwotfQotCi19CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGEu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YS5oCmluZGV4
IDVjZDZlZDIuLjMwNmFkYTggMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cXQvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQv
Rm9udFBsYXRmb3JtRGF0YS5oCkBAIC0yNiwyMCArMjYsNjIgQEAKIAogI2luY2x1ZGUgIkZvbnRE
ZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgPFFGb250PgorI2luY2x1ZGUgPFFIYXNoPgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFN0cmluZzsKK2NsYXNzIEZvbnRQbGF0Zm9ybURhdGFQ
cml2YXRlIHsKK3B1YmxpYzoKKyAgICBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpCisgICAgICAg
IDogcmVmQ291bnQoMSkKKyAgICAgICAgLCBzaXplKGZvbnQucG9pbnRTaXplRigpKQorICAgICAg
ICAsIGJvbGQoZm9udC5ib2xkKCkpCisgICAgICAgICwgb2JsaXF1ZShmYWxzZSkKKyAgICB7fQor
ICAgIEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKGNvbnN0IGZsb2F0IHNpemUsIGNvbnN0IGJvb2wg
Ym9sZCwgY29uc3QgYm9vbCBvYmxpcXVlKQorICAgICAgICA6IHJlZkNvdW50KDEpCisgICAgICAg
ICwgc2l6ZShzaXplKQorICAgICAgICAsIGJvbGQoYm9sZCkKKyAgICAgICAgLCBvYmxpcXVlKG9i
bGlxdWUpCisgICAge30KKyAgICBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZShjb25zdCBRRm9udCYg
Zm9udCkKKyAgICAgICAgOiByZWZDb3VudCgxKQorICAgICAgICAsIGZvbnQoZm9udCkKKyAgICAg
ICAgLCBzaXplKGZvbnQucG9pbnRTaXplRigpKQorICAgICAgICAsIGJvbGQoZm9udC5ib2xkKCkp
CisgICAgICAgICwgb2JsaXF1ZShmYWxzZSkKKyAgICB7fQorICAgIHVuc2lnbmVkIHJlZkNvdW50
OworICAgIFFGb250IGZvbnQ7CisgICAgZmxvYXQgc2l6ZTsKKyAgICBib29sIGJvbGQgOiAxOwor
ICAgIGJvb2wgb2JsaXF1ZSA6IDE7Cit9OworCisKIAotY2xhc3MgRm9udFBsYXRmb3JtRGF0YSA6
IHB1YmxpYyBGYXN0QWxsb2NCYXNlCi17CitjbGFzcyBGb250UGxhdGZvcm1EYXRhIDogcHVibGlj
IEZhc3RBbGxvY0Jhc2UgewogcHVibGljOgotI2lmIEVOQUJMRShTVkdfRk9OVFMpCiAgICAgRm9u
dFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQsIGJvb2wgb2JsaXF1ZSk7Ci0jZW5k
aWYKLSAgICBGb250UGxhdGZvcm1EYXRhKCk7CisgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhICYpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2Ny
aXB0aW9uJiwgaW50IHdvcmRTcGFjaW5nID0gMCwgaW50IGxldHRlclNwYWNpbmcgPSAwKTsKLSAg
ICBGb250UGxhdGZvcm1EYXRhKGNvbnN0IFFGb250JiwgYm9vbCBib2xkKTsKKyAgICBGb250UGxh
dGZvcm1EYXRhKGNvbnN0IFFGb250JiBmb250KQorICAgICAgICA6IG1fZGF0YShuZXcgRm9udFBs
YXRmb3JtRGF0YVByaXZhdGUoZm9udCkpCisgICAge30KKyAgICBGb250UGxhdGZvcm1EYXRhKFdU
Rjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkKKyAgICAgICAgOiBtX2RhdGEocmVpbnRlcnBy
ZXRfY2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICB7fQorCisgICAgfkZv
bnRQbGF0Zm9ybURhdGEoKTsKKworICAgIEZvbnRQbGF0Zm9ybURhdGEmIG9wZXJhdG9yPShjb25z
dCBGb250UGxhdGZvcm1EYXRhJik7CisgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmKSBjb25zdDsKKworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZGF0YSA9PSByZWludGVycHJldF9jYXN0PEZv
bnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpOworICAgIH0KIAogICAgIHN0YXRpYyBpbmxpbmUg
UUZvbnQ6OldlaWdodCB0b1FGb250V2VpZ2h0KEZvbnRXZWlnaHQgZm9udFdlaWdodCkKICAgICB7
CkBAIC02MiwyMiArMTA0LDYyIEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIFFG
b250IGZvbnQoKSBjb25zdCB7IHJldHVybiBtX2ZvbnQ7IH0KLSAgICBmbG9hdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9Ci0gICAgUVN0cmluZyBmYW1pbHkoKSBjb25zdCB7IHJldHVy
biBtX2ZvbnQuZmFtaWx5KCk7IH0KLSAgICBib29sIGJvbGQoKSBjb25zdCB7IHJldHVybiBtX2Jv
bGQ7IH0KLSAgICBib29sIGl0YWxpYygpIGNvbnN0IHsgcmV0dXJuIG1fZm9udC5pdGFsaWMoKTsg
fQotICAgIGJvb2wgc21hbGxDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9mb250LmNhcGl0YWxpemF0
aW9uKCkgPT0gUUZvbnQ6OlNtYWxsQ2FwczsgfQotICAgIGludCBwaXhlbFNpemUoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnQucGl4ZWxTaXplKCk7IH0KKyAgICBRRm9udCBmb250KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0
Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAg
IHJldHVybiBtX2RhdGEtPmZvbnQ7CisgICAgICAgIHJldHVybiBRRm9udCgpOworICAgIH0KKyAg
ICBmbG9hdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAhPSBy
ZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAgICAg
aWYgKG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPnNpemU7CisgICAgICAgIHJl
dHVybiAwLjBmOworICAgIH0KKyAgICBRU3RyaW5nIGZhbWlseSgpIGNvbnN0CisgICAgeworICAg
ICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRh
UHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bV9kYXRhLT5mb250LmZhbWlseSgpOworICAgICAgICByZXR1cm4gUVN0cmluZygpOworICAgIH0K
KyAgICBib29sIGJvbGQoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NFUlQobV9kYXRhICE9
IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpOworICAgICAg
ICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Ym9sZDsKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBib29sIGl0YWxpYygpIGNvbnN0CisgICAgeworICAg
ICAgICBRX0FTU0VSVChtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxGb250UGxhdGZvcm1EYXRh
UHJpdmF0ZSo+KC0xKSk7CisgICAgICAgIGlmIChtX2RhdGEpCisgICAgICAgICAgICByZXR1cm4g
bV9kYXRhLT5mb250Lml0YWxpYygpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAg
IGJvb2wgc21hbGxDYXBzKCkgY29uc3QKKyAgICB7CisgICAgICAgIFFfQVNTRVJUKG1fZGF0YSAh
PSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKTsKKyAgICAg
ICAgaWYgKG1fZGF0YSkKKyAgICAgICAgICAgIHJldHVybiBtX2RhdGEtPmZvbnQuY2FwaXRhbGl6
YXRpb24oKSA9PSBRRm9udDo6U21hbGxDYXBzOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fQorICAgIGludCBwaXhlbFNpemUoKSBjb25zdAorICAgIHsKKyAgICAgICAgUV9BU1NFUlQobV9k
YXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpOwor
ICAgICAgICBpZiAobV9kYXRhKQorICAgICAgICAgICAgcmV0dXJuIG1fZGF0YS0+Zm9udC5waXhl
bFNpemUoKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHVuc2lnbmVkIGhhc2goKSBj
b25zdDsKIAogI2lmbmRlZiBOREVCVUcKICAgICBTdHJpbmcgZGVzY3JpcHRpb24oKSBjb25zdDsK
ICNlbmRpZgotCi0gICAgZmxvYXQgbV9zaXplOwotICAgIGJvb2wgbV9ib2xkOwotICAgIGJvb2wg
bV9vYmxpcXVlOwotICAgIFFGb250IG1fZm9udDsKK3ByaXZhdGU6CisgICAgRm9udFBsYXRmb3Jt
RGF0YVByaXZhdGUqIG1fZGF0YTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFBsYXRmb3JtRGF0YVF0LmNwcApp
bmRleCA3NzA5YmU2Li5hMGUyYTFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3F0L0ZvbnRQbGF0Zm9ybURhdGFRdC5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9xdC9Gb250UGxhdGZvcm1EYXRhUXQuY3BwCkBAIC0yNiwxMCArMjYsMjggQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCitzdGF0aWMgaW5saW5lIGJvb2wgaXNFbXRweVZhbHVlKGNvbnN0
IGZsb2F0IHNpemUsIGNvbnN0IGJvb2wgYm9sZCwgY29uc3QgYm9vbCBvYmxpcXVlKQoreworICAg
ICAvLyB0aGlzIGlzIHRoZSBlbXB0eSB2YWx1ZSBieSBkZWZpbml0aW9uIG9mIHRoZSB0cmFpdCBG
b250RGF0YUNhY2hlS2V5VHJhaXRzCisgICAgcmV0dXJuICFib2xkICYmICFvYmxpcXVlICYmIHNp
emUgPT0gMC5mOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0
IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBvYmxpcXVlKQoreworICAgIGlmIChpc0VtdHB5VmFsdWUo
c2l6ZSwgYm9sZCwgb2JsaXF1ZSkpCisgICAgICAgIG1fZGF0YSA9IDA7CisgICAgZWxzZQorICAg
ICAgICBtX2RhdGEgPSBuZXcgRm9udFBsYXRmb3JtRGF0YVByaXZhdGUoc2l6ZSwgYm9sZCwgb2Js
aXF1ZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSAmb3RoZXIpIDogbV9kYXRhKG90aGVyLm1fZGF0YSkKK3sKKyAgICBpZiAo
bV9kYXRhICYmIG1fZGF0YSAhPSByZWludGVycHJldF9jYXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2
YXRlKj4oLTEpKQorICAgICAgICArK21fZGF0YS0+cmVmQ291bnQ7Cit9CisKIEZvbnRQbGF0Zm9y
bURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBkZXNjcmlwdGlv
biwgaW50IHdvcmRTcGFjaW5nLCBpbnQgbGV0dGVyU3BhY2luZykKLSAgICA6IG1fc2l6ZSgwLjBm
KQotICAgICwgbV9ib2xkKGZhbHNlKQotICAgICwgbV9vYmxpcXVlKGZhbHNlKQorICAgIDogbV9k
YXRhKG5ldyBGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSgpKQogewogICAgIFFTdHJpbmcgZmFtaWx5
TmFtZTsKICAgICBjb25zdCBGb250RmFtaWx5KiBmYW1pbHkgPSAmZGVzY3JpcHRpb24uZmFtaWx5
KCk7CkBAIC0zOSw0MyArNTcsNzAgQEAgRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uLCBpbnQgd29yZFMKICAgICAgICAg
aWYgKGZhbWlseSkKICAgICAgICAgICAgIGZhbWlseU5hbWUgKz0gUUxhdGluMUNoYXIoJywnKTsK
ICAgICB9CisgICAgUUZvbnQmIGZvbnQgPSBtX2RhdGEtPmZvbnQ7CisgICAgZm9udC5zZXRGYW1p
bHkoZmFtaWx5TmFtZSk7CisgICAgZm9udC5zZXRQaXhlbFNpemUocVJvdW5kKGRlc2NyaXB0aW9u
LmNvbXB1dGVkU2l6ZSgpKSk7CisgICAgZm9udC5zZXRJdGFsaWMoZGVzY3JpcHRpb24uaXRhbGlj
KCkpOworICAgIGZvbnQuc2V0V2VpZ2h0KHRvUUZvbnRXZWlnaHQoZGVzY3JpcHRpb24ud2VpZ2h0
KCkpKTsKKyAgICBmb250LnNldFdvcmRTcGFjaW5nKHdvcmRTcGFjaW5nKTsKKyAgICBmb250LnNl
dExldHRlclNwYWNpbmcoUUZvbnQ6OkFic29sdXRlU3BhY2luZywgbGV0dGVyU3BhY2luZyk7Cisg
ICAgY29uc3QgYm9vbCBzbWFsbENhcHMgPSBkZXNjcmlwdGlvbi5zbWFsbENhcHMoKTsKKyAgICBm
b250LnNldENhcGl0YWxpemF0aW9uKHNtYWxsQ2FwcyA/IFFGb250OjpTbWFsbENhcHMgOiBRRm9u
dDo6TWl4ZWRDYXNlKTsKKworICAgIG1fZGF0YS0+Ym9sZCA9IGZvbnQuYm9sZCgpOworICAgIG1f
ZGF0YS0+c2l6ZSA9IGZvbnQucG9pbnRTaXplRigpOworfQogCi0gICAgbV9mb250LnNldEZhbWls
eShmYW1pbHlOYW1lKTsKLSAgICBtX2ZvbnQuc2V0UGl4ZWxTaXplKHFSb3VuZChkZXNjcmlwdGlv
bi5jb21wdXRlZFNpemUoKSkpOwotICAgIG1fZm9udC5zZXRJdGFsaWMoZGVzY3JpcHRpb24uaXRh
bGljKCkpOwotCi0gICAgbV9mb250LnNldFdlaWdodCh0b1FGb250V2VpZ2h0KGRlc2NyaXB0aW9u
LndlaWdodCgpKSk7Ci0gICAgbV9ib2xkID0gbV9mb250LmJvbGQoKTsKLQotICAgIGJvb2wgc21h
bGxDYXBzID0gZGVzY3JpcHRpb24uc21hbGxDYXBzKCk7Ci0gICAgbV9mb250LnNldENhcGl0YWxp
emF0aW9uKHNtYWxsQ2FwcyA/IFFGb250OjpTbWFsbENhcHMgOiBRRm9udDo6TWl4ZWRDYXNlKTsK
LSAgICBtX2ZvbnQuc2V0V29yZFNwYWNpbmcod29yZFNwYWNpbmcpOwotICAgIG1fZm9udC5zZXRM
ZXR0ZXJTcGFjaW5nKFFGb250OjpBYnNvbHV0ZVNwYWNpbmcsIGxldHRlclNwYWNpbmcpOwotICAg
IG1fc2l6ZSA9IG1fZm9udC5wb2ludFNpemUoKTsKK0ZvbnRQbGF0Zm9ybURhdGE6On5Gb250UGxh
dGZvcm1EYXRhKCkKK3sKKyAgICBpZiAoIW1fZGF0YSB8fCBtX2RhdGEgPT0gcmVpbnRlcnByZXRf
Y2FzdDxGb250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICAgICAgcmV0dXJuOworICAg
IC0tbV9kYXRhLT5yZWZDb3VudDsKKyAgICBpZiAoIW1fZGF0YS0+cmVmQ291bnQpCisgICAgICAg
IGRlbGV0ZSBtX2RhdGE7CiB9CiAKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgUUZvbnQmIGZvbnQsIGJvb2wgYm9sZCkKLSAgICA6IG1fc2l6ZShmb250LnBvaW50U2l6
ZSgpKQotICAgICwgbV9ib2xkKGJvbGQpCi0gICAgLCBtX29ibGlxdWUoZmFsc2UpCi0gICAgLCBt
X2ZvbnQoZm9udCkKK0ZvbnRQbGF0Zm9ybURhdGEmIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9y
PShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBvdGhlcikKIHsKKyAgICBpZiAobV9kYXRhID09IG90
aGVyLm1fZGF0YSkKKyAgICAgICAgcmV0dXJuICp0aGlzOworICAgIGlmIChtX2RhdGEgJiYgbV9k
YXRhICE9IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpIHsK
KyAgICAgICAgLS1tX2RhdGEtPnJlZkNvdW50OworICAgICAgICBpZiAoIW1fZGF0YS0+cmVmQ291
bnQpCisgICAgICAgICAgICBkZWxldGUgbV9kYXRhOworICAgIH0KKyAgICBtX2RhdGEgPSBvdGhl
ci5tX2RhdGE7CisgICAgaWYgKG1fZGF0YSAmJiBtX2RhdGEgIT0gcmVpbnRlcnByZXRfY2FzdDxG
b250UGxhdGZvcm1EYXRhUHJpdmF0ZSo+KC0xKSkKKyAgICAgICAgKyttX2RhdGEtPnJlZkNvdW50
OworICAgIHJldHVybiAqdGhpczsKIH0KIAotI2lmIEVOQUJMRShTVkdfRk9OVFMpCi1Gb250UGxh
dGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBv
YmxpcXVlKQotICAgIDogbV9zaXplKHNpemUpCi0gICAgLCBtX2JvbGQoYm9sZCkKLSAgICAsIG1f
b2JsaXF1ZShvYmxpcXVlKQorYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAogeworICAgIGlmIChtX2RhdGEgPT0gb3Ro
ZXIubV9kYXRhKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmICghbV9kYXRhIHx8ICFv
dGhlci5tX2RhdGEKKyAgICAgICAgfHwgbV9kYXRhID09IHJlaW50ZXJwcmV0X2Nhc3Q8Rm9udFBs
YXRmb3JtRGF0YVByaXZhdGUqPigtMSkgfHwgb3RoZXIubV9kYXRhID09IHJlaW50ZXJwcmV0X2Nh
c3Q8Rm9udFBsYXRmb3JtRGF0YVByaXZhdGUqPigtMSkpCisgICAgICAgIHJldHVybiAgZmFsc2U7
CisKKyAgICBjb25zdCBib29sIGVxdWFscyA9IChtX2RhdGEtPnNpemUgPT0gb3RoZXIubV9kYXRh
LT5zaXplCisgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbV9kYXRhLT5ib2xkID09IG90aGVy
Lm1fZGF0YS0+Ym9sZAorICAgICAgICAgICAgICAgICAgICAgICAgICYmIG1fZGF0YS0+b2JsaXF1
ZSA9PSBvdGhlci5tX2RhdGEtPm9ibGlxdWUKKyAgICAgICAgICAgICAgICAgICAgICAgICAmJiBt
X2RhdGEtPmZvbnQgPT0gb3RoZXIubV9kYXRhLT5mb250KTsKKyAgICByZXR1cm4gZXF1YWxzOwog
fQotI2VuZGlmCiAKLUZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoKQotICAgIDog
bV9zaXplKDAuMGYpCi0gICAgLCBtX2JvbGQoZmFsc2UpCi0gICAgLCBtX29ibGlxdWUoZmFsc2Up
Cit1bnNpZ25lZCBGb250UGxhdGZvcm1EYXRhOjpoYXNoKCkgY29uc3QKIHsKKyAgICBpZiAoIW1f
ZGF0YSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgaWYgKG1fZGF0YSA9PSByZWludGVycHJldF9j
YXN0PEZvbnRQbGF0Zm9ybURhdGFQcml2YXRlKj4oLTEpKQorICAgICAgICByZXR1cm4gMTsKKyAg
ICByZXR1cm4gcUhhc2gobV9kYXRhLT5mb250LnRvU3RyaW5nKCkpCisgICAgICAgICAgIF4gcUhh
c2goKnJlaW50ZXJwcmV0X2Nhc3Q8cXVpbnQzMio+KCZtX2RhdGEtPnNpemUpKQorICAgICAgICAg
ICBeIHFIYXNoKG1fZGF0YS0+Ym9sZCkKKyAgICAgICAgICAgXiBxSGFzaChtX2RhdGEtPm9ibGlx
dWUpOwogfQogCiAjaWZuZGVmIE5ERUJVRwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44306</attachid>
            <date>2009-12-04 05:22:11 -0800</date>
            <delta_ts>2009-12-04 05:33:09 -0800</delta_ts>
            <desc>Update the layout tests</desc>
            <filename>tests_update.patch</filename>
            <type>text/plain</type>
            <size>20419</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2NzczEvYm94X3Byb3BlcnRpZXMv
ZmxvYXRfZWxlbWVudHNfaW5fc2VyaWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL3F0L2NzczEvYm94X3Byb3BlcnRpZXMvZmxvYXRfZWxlbWVudHNfaW5fc2VyaWVzLWV4cGVj
dGVkLnR4dAppbmRleCBjNzYwNDQxLi4zMzkzZDFkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9jc3MxL2JveF9wcm9wZXJ0aWVzL2Zsb2F0X2VsZW1lbnRzX2luX3Nlcmllcy1l
eHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvY3NzMS9ib3hfcHJvcGVy
dGllcy9mbG9hdF9lbGVtZW50c19pbl9zZXJpZXMtZXhwZWN0ZWQudHh0CkBAIC0xLDggKzEsOCBA
QAotbGF5ZXIgYXQgKDAsMCkgc2l6ZSA3ODR4Nzc1CitsYXllciBhdCAoMCwwKSBzaXplIDc4NHg3
NzMKICAgUmVuZGVyVmlldyBhdCAoMCwwKSBzaXplIDc4NHg2MDAKLWxheWVyIGF0ICgwLDApIHNp
emUgNzg0eDc3NQotICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA3ODR4Nzc1Ci0g
ICAgUmVuZGVyQm9keSB7Qk9EWX0gYXQgKDgsOCkgc2l6ZSA3Njh4NzQ3IFtiZ2NvbG9yPSNDQ0ND
Q0NdCitsYXllciBhdCAoMCwwKSBzaXplIDc4NHg3NzMKKyAgUmVuZGVyQmxvY2sge0hUTUx9IGF0
ICgwLDApIHNpemUgNzg0eDc3MworICAgIFJlbmRlckJvZHkge0JPRFl9IGF0ICg4LDgpIHNpemUg
NzY4eDc0NSBbYmdjb2xvcj0jQ0NDQ0NDXQogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDAp
IHNpemUgNzY4eDIwCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDM5
NXgyMAogICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDM5NTogIlRoZSBzdHlsZSBk
ZWNsYXJhdGlvbnMgd2hpY2ggYXBwbHkgdG8gdGhlIHRleHQgYmVsb3cgYXJlOiIKQEAgLTM5LDIz
ICszOSwyMyBAQCBsYXllciBhdCAoMCwwKSBzaXplIDc4NHg3NzUKICAgICAgICAgICB0ZXh0IHJ1
biBhdCAoMCwyMCkgd2lkdGggNTYwOiAib2YgdGhpcyBwYWdlIGluZGljYXRlcyBob3cgdGhlIERJ
ViBlbGVtZW50cyBzaG91bGQgYmUgbGFpZCBvdXQgaG9yaXpvbnRhbGx5LiAiCiAgICAgICAgICAg
dGV4dCBydW4gYXQgKDU2MCwyMCkgd2lkdGggMjA4OiAiVGhleSBzaG91bGQgYWxpZ24gd2l0aCBl
YWNoIgogICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDQwKSB3aWR0aCA0MDogIm90aGVyLiIKLSAg
ICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQgKDAsMzM0KSBzaXplIDE0MHgxMDEg
W2JnY29sb3I9I0ZGRkYwMF0gW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCi0gICAgICAg
IFJlbmRlckJsb2NrIHtQfSBhdCAoNDAsNDApIHNpemUgNjB4MjEKLSAgICAgICAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0N3gyMQotICAgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMCkgd2lkdGggNDc6ICJZZWxsb3ciCi0gICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtE
SVZ9IGF0ICgxNjAsMzM0KSBzaXplIDE0MHgxMDEgW2NvbG9yPSNGRkZGRkZdIFtiZ2NvbG9yPSMw
MDAwRkZdIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQotICAgICAgICBSZW5kZXJCbG9j
ayB7UH0gYXQgKDQwLDQwKSBzaXplIDYweDIxCi0gICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgMzF4MjEKLSAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRo
IDMxOiAiQmx1ZSIKLSAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQgKDMyMCwz
MzQpIHNpemUgMTQweDEwMSBbYmdjb2xvcj0jRkYwMDAwXSBbYm9yZGVyOiAoMjBweCBzb2xpZCAj
MDAwMDAwKV0KLSAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICg0MCw0MCkgc2l6ZSA2MHgyMQot
ICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI4eDIxCi0gICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyODogIlJlZCIKLSAgICAgIFJlbmRlckJsb2Nr
IChmbG9hdGluZykge0RJVn0gYXQgKDQ4MCwzMzQpIHNpemUgMTQweDEwMSBbY29sb3I9I0ZGRkZG
Rl0gW2JnY29sb3I9IzAwODAwMF0gW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCi0gICAg
ICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNDAsNDApIHNpemUgNjB4MjEKLSAgICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0MngyMQotICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggNDI6ICJHcmVlbiIKLSAgICAgIFJlbmRlckJsb2NrIHtESVZ9IGF0ICgw
LDQ0NSkgc2l6ZSA3Njh4MjEKKyAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQg
KDAsMzM0KSBzaXplIDE0MHgxMDAgW2JnY29sb3I9I0ZGRkYwMF0gW2JvcmRlcjogKDIwcHggc29s
aWQgIzAwMDAwMCldCisgICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNDAsNDApIHNpemUgNjB4
MjAKKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0OXgyMAorICAg
ICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDk6ICJZZWxsb3ciCisgICAgICBSZW5k
ZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgxNjAsMzM0KSBzaXplIDE0MHgxMDAgW2NvbG9y
PSNGRkZGRkZdIFtiZ2NvbG9yPSMwMDAwRkZdIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDAp
XQorICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQwLDQwKSBzaXplIDYweDIwCisgICAgICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzN4MjAKKyAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDApIHdpZHRoIDMzOiAiQmx1ZSIKKyAgICAgIFJlbmRlckJsb2NrIChmbG9h
dGluZykge0RJVn0gYXQgKDMyMCwzMzQpIHNpemUgMTQweDEwMCBbYmdjb2xvcj0jRkYwMDAwXSBb
Ym9yZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KKyAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0
ICg0MCw0MCkgc2l6ZSA2MHgyMAorICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCww
KSBzaXplIDMweDIwCisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMDogIlJl
ZCIKKyAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQgKDQ4MCwzMzQpIHNpemUg
MTQweDEwMCBbY29sb3I9I0ZGRkZGRl0gW2JnY29sb3I9IzAwODAwMF0gW2JvcmRlcjogKDIwcHgg
c29saWQgIzAwMDAwMCldCisgICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNDAsNDApIHNpemUg
NjB4MjAKKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0NHgyMAor
ICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDQ6ICJHcmVlbiIKKyAgICAgIFJl
bmRlckJsb2NrIHtESVZ9IGF0ICgwLDQ0NCkgc2l6ZSA3Njh4MjEKICAgICAgICAgUmVuZGVyVGFi
bGUge1RBQkxFfSBhdCAoMCwwKSBzaXplIDYyMHgyMQogICAgICAgICAgIFJlbmRlclRhYmxlU2Vj
dGlvbiB7VEJPRFl9IGF0ICgwLDApIHNpemUgNjIweDIxCiAgICAgICAgICAgICBSZW5kZXJUYWJs
ZVJvdyB7VFJ9IGF0ICgwLDApIHNpemUgNjIweDIxCkBAIC05MSw0MSArOTEsNDEgQEAgbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA3ODR4Nzc1CiAgICAgICAgICAgICAgICAgUmVuZGVySW1hZ2Uge0lNR30g
YXQgKDAsMCkgc2l6ZSAxMDB4MQogICAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBh
dCAoNjAwLDEwKSBzaXplIDIweDEgW2JnY29sb3I9IzAwMDAwMF0gW3I9MCBjPTE0IHJzPTEgY3M9
MV0KICAgICAgICAgICAgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwwKSBzaXplIDIweDEK
LSAgICAgIFJlbmRlclRhYmxlIHtUQUJMRX0gYXQgKDAsNDg2KSBzaXplIDc2OHgyNjEgW2JvcmRl
cjogKDFweCBvdXRzZXQgIzgwODA4MCldCi0gICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiB7VEJP
RFl9IGF0ICgxLDEpIHNpemUgNzY2eDI1OQorICAgICAgUmVuZGVyVGFibGUge1RBQkxFfSBhdCAo
MCw0ODUpIHNpemUgNzY4eDI2MCBbYm9yZGVyOiAoMXB4IG91dHNldCAjODA4MDgwKV0KKyAgICAg
ICAgUmVuZGVyVGFibGVTZWN0aW9uIHtUQk9EWX0gYXQgKDEsMSkgc2l6ZSA3NjZ4MjU4CiAgICAg
ICAgICAgUmVuZGVyVGFibGVSb3cge1RSfSBhdCAoMCwwKSBzaXplIDc2NngyOQogICAgICAgICAg
ICAgUmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDAsMCkgc2l6ZSA3NjZ4MjkgW2JnY29sb3I9I0Mw
QzBDMF0gW2JvcmRlcjogKDFweCBpbnNldCAjODA4MDgwKV0gW3I9MCBjPTAgcnM9MSBjcz0yXQog
ICAgICAgICAgICAgICBSZW5kZXJJbmxpbmUge1NUUk9OR30gYXQgKDAsMCkgc2l6ZSAxNzh4MjAK
ICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDQsNCkgc2l6ZSAxNzh4MjAK
ICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0LDQpIHdpZHRoIDE3ODogIlRBQkxFIFRl
c3RpbmcgU2VjdGlvbiIKLSAgICAgICAgICBSZW5kZXJUYWJsZVJvdyB7VFJ9IGF0ICgwLDI5KSBz
aXplIDc2NngyMzAKLSAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCB7VER9IGF0ICgwLDEzMCkg
c2l6ZSAxMngyOCBbYmdjb2xvcj0jQzBDMEMwXSBbYm9yZGVyOiAoMXB4IGluc2V0ICM4MDgwODAp
XSBbcj0xIGM9MCBycz0xIGNzPTFdCisgICAgICAgICAgUmVuZGVyVGFibGVSb3cge1RSfSBhdCAo
MCwyOSkgc2l6ZSA3NjZ4MjI5CisgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBhdCAo
MCwxMjkpIHNpemUgMTJ4MjggW2JnY29sb3I9I0MwQzBDMF0gW2JvcmRlcjogKDFweCBpbnNldCAj
ODA4MDgwKV0gW3I9MSBjPTAgcnM9MSBjcz0xXQogICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDQsNCkgc2l6ZSA0eDIwCiAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDQs
NCkgd2lkdGggNDogIiAiCi0gICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBhdCAoMTIs
MjkpIHNpemUgNzU0eDIzMCBbYm9yZGVyOiAoMXB4IGluc2V0ICM4MDgwODApXSBbcj0xIGM9MSBy
cz0xIGNzPTFdCisgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBhdCAoMTIsMjkpIHNp
emUgNzU0eDIyOSBbYm9yZGVyOiAoMXB4IGluc2V0ICM4MDgwODApXSBbcj0xIGM9MSBycz0xIGNz
PTFdCiAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNCw0KSBzaXplIDc0Nng2MAog
ICAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDc0Nng2MAog
ICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNzQ2OiAiVGhlIGZvdXIg
ZmxvYXRpbmcgRElWIGVsZW1lbnRzIGJlbG93IHNob3VsZCBhcHBlYXIgbmV4dCB0byBlYWNoIG90
aGVyIGhvcml6b250YWxseS4gVGhlIHRhYmxlIGF0IHRoZSIKICAgICAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDIwKSB3aWR0aCA1ODY6ICJib3R0b20gb2YgdGhpcyBwYWdlIGluZGljYXRl
cyBob3cgdGhlIERJViBlbGVtZW50cyBzaG91bGQgYmUgbGFpZCBvdXQgaG9yaXpvbnRhbGx5LiAi
CiAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoNTg2LDIwKSB3aWR0aCAxNjA6ICJUaGV5
IHNob3VsZCBhbGlnbiB3aXRoIgogICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsNDAp
IHdpZHRoIDc5OiAiZWFjaCBvdGhlci4iCi0gICAgICAgICAgICAgIFJlbmRlckJsb2NrIChmbG9h
dGluZykge0RJVn0gYXQgKDQsNzQpIHNpemUgMTQweDEwMSBbYmdjb2xvcj0jRkZGRjAwXSBbYm9y
ZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7
UH0gYXQgKDQwLDQwKSBzaXplIDYweDIxCi0gICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsj
dGV4dH0gYXQgKDAsMCkgc2l6ZSA0N3gyMQotICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwwKSB3aWR0aCA0NzogIlllbGxvdyIKLSAgICAgICAgICAgICAgUmVuZGVyQmxvY2sgKGZs
b2F0aW5nKSB7RElWfSBhdCAoMTY0LDc0KSBzaXplIDE0MHgxMDEgW2NvbG9yPSNGRkZGRkZdIFti
Z2NvbG9yPSMwMDAwRkZdIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQotICAgICAgICAg
ICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNDAsNDApIHNpemUgNjB4MjEKLSAgICAgICAgICAg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMxeDIxCi0gICAgICAgICAg
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDMxOiAiQmx1ZSIKLSAgICAgICAgICAg
ICAgUmVuZGVyQmxvY2sgKGZsb2F0aW5nKSB7RElWfSBhdCAoMzI0LDc0KSBzaXplIDE0MHgxMDEg
W2JnY29sb3I9I0ZGMDAwMF0gW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCi0gICAgICAg
ICAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICg0MCw0MCkgc2l6ZSA2MHgyMQotICAgICAgICAg
ICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjh4MjEKLSAgICAgICAg
ICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjg6ICJSZWQiCi0gICAgICAgICAg
ICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQgKDQ4NCw3NCkgc2l6ZSAxNDB4MTAx
IFtjb2xvcj0jRkZGRkZGXSBbYmdjb2xvcj0jMDA4MDAwXSBbYm9yZGVyOiAoMjBweCBzb2xpZCAj
MDAwMDAwKV0KLSAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQwLDQwKSBzaXpl
IDYweDIxCi0gICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSA0MngyMQotICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0Mjog
IkdyZWVuIgotICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoNCwxODUpIHNpemUg
NzQ2eDIxCisgICAgICAgICAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQgKDQs
NzQpIHNpemUgMTQweDEwMCBbYmdjb2xvcj0jRkZGRjAwXSBbYm9yZGVyOiAoMjBweCBzb2xpZCAj
MDAwMDAwKV0KKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQwLDQwKSBzaXpl
IDYweDIwCisgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSA0OXgyMAorICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0OTog
IlllbGxvdyIKKyAgICAgICAgICAgICAgUmVuZGVyQmxvY2sgKGZsb2F0aW5nKSB7RElWfSBhdCAo
MTY0LDc0KSBzaXplIDE0MHgxMDAgW2NvbG9yPSNGRkZGRkZdIFtiZ2NvbG9yPSMwMDAwRkZdIFti
b3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQorICAgICAgICAgICAgICAgIFJlbmRlckJsb2Nr
IHtQfSBhdCAoNDAsNDApIHNpemUgNjB4MjAKKyAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMzeDIwCisgICAgICAgICAgICAgICAgICAgIHRleHQgcnVu
IGF0ICgwLDApIHdpZHRoIDMzOiAiQmx1ZSIKKyAgICAgICAgICAgICAgUmVuZGVyQmxvY2sgKGZs
b2F0aW5nKSB7RElWfSBhdCAoMzI0LDc0KSBzaXplIDE0MHgxMDAgW2JnY29sb3I9I0ZGMDAwMF0g
W2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCisgICAgICAgICAgICAgICAgUmVuZGVyQmxv
Y2sge1B9IGF0ICg0MCw0MCkgc2l6ZSA2MHgyMAorICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMzB4MjAKKyAgICAgICAgICAgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMzA6ICJSZWQiCisgICAgICAgICAgICAgIFJlbmRlckJsb2NrIChm
bG9hdGluZykge0RJVn0gYXQgKDQ4NCw3NCkgc2l6ZSAxNDB4MTAwIFtjb2xvcj0jRkZGRkZGXSBb
Ymdjb2xvcj0jMDA4MDAwXSBbYm9yZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KKyAgICAgICAg
ICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQwLDQwKSBzaXplIDYweDIwCisgICAgICAgICAg
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA0NHgyMAorICAgICAgICAg
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA0NDogIkdyZWVuIgorICAgICAgICAg
ICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoNCwxODQpIHNpemUgNzQ2eDIxCiAgICAgICAgICAg
ICAgICAgUmVuZGVyVGFibGUge1RBQkxFfSBhdCAoMCwwKSBzaXplIDYyMHgyMQogICAgICAgICAg
ICAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uIHtUQk9EWX0gYXQgKDAsMCkgc2l6ZSA2MjB4MjEK
ICAgICAgICAgICAgICAgICAgICAgUmVuZGVyVGFibGVSb3cge1RSfSBhdCAoMCwwKSBzaXplIDYy
MHgyMQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvY3NzMS9mb250X3Byb3Bl
cnRpZXMvZm9udF92YXJpYW50LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2NzczEvZm9udF9wcm9wZXJ0aWVzL2ZvbnRfdmFyaWFudC1leHBlY3RlZC50eHQKaW5kZXggYTYw
NzM1Zi4uNjNiNTBkYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvY3NzMS9m
b250X3Byb3BlcnRpZXMvZm9udF92YXJpYW50LWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9xdC9jc3MxL2ZvbnRfcHJvcGVydGllcy9mb250X3ZhcmlhbnQtZXhwZWN0ZWQu
dHh0CkBAIC0xNSwzNiArMTUsMzYgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCiAgICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsMzIpIHdpZHRoIDA6ICIgIgogICAgICAgUmVuZGVyQmxvY2sg
e0hSfSBhdCAoMCw5Nykgc2l6ZSA3ODR4MiBbYm9yZGVyOiAoMXB4IGluc2V0ICMwMDAwMDApXQog
ICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDExNSkgc2l6ZSA3ODR4MjAKLSAgICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjcxeDIwCi0gICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggMjcxOiAiVGhpcyBQYXJhZ3JhcGggc2hvdWxkIGJlIGluIFNtYWxsIENh
cHMuIgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyOTJ4MjAKKyAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyOTI6ICJUaGlzIFBhcmFncmFwaCBzaG91
bGQgYmUgaW4gU21hbGwgQ2Fwcy4iCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMTUxKSBz
aXplIDc4NHgyMAotICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA1ODF4
MjAKLSAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA1ODE6ICJUaGlzIFBhcmFncmFw
aCBzaG91bGQgYmUgaW4gU21hbGwgQ2FwcywgYnV0IHRoZSBMYXN0IFdvcmQgaW4gdGhlIFNlbnRl
bmNlIHNob3VsZCBiZSAiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDYxM3gyMAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDYxMzogIlRoaXMgUGFy
YWdyYXBoIHNob3VsZCBiZSBpbiBTbWFsbCBDYXBzLCBidXQgdGhlIExhc3QgV29yZCBpbiB0aGUg
U2VudGVuY2Ugc2hvdWxkIGJlICIKICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCww
KSBzaXplIDUyeDIwCi0gICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg1ODEsMCkgc2l6
ZSA1MngyMAotICAgICAgICAgICAgdGV4dCBydW4gYXQgKDU4MSwwKSB3aWR0aCA1MjogIk5vcm1h
bCIKLSAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg2MzMsMCkgc2l6ZSA0eDIwCi0gICAg
ICAgICAgdGV4dCBydW4gYXQgKDYzMywwKSB3aWR0aCA0OiAiLiIKLSAgICAgIFJlbmRlclRhYmxl
IHtUQUJMRX0gYXQgKDAsMTg3KSBzaXplIDY1OXg5NSBbYm9yZGVyOiAoMXB4IG91dHNldCAjODA4
MDgwKV0KLSAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uIHtUQk9EWX0gYXQgKDEsMSkgc2l6ZSA2
NTd4OTMKLSAgICAgICAgICBSZW5kZXJUYWJsZVJvdyB7VFJ9IGF0ICgwLDApIHNpemUgNjU3eDI5
Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBhdCAoMCwwKSBzaXplIDY1N3gyOSBb
Ymdjb2xvcj0jQzBDMEMwXSBbYm9yZGVyOiAoMXB4IGluc2V0ICM4MDgwODApXSBbcj0wIGM9MCBy
cz0xIGNzPTJdCisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg2MTMsMCkgc2l6ZSA1
MngyMAorICAgICAgICAgICAgdGV4dCBydW4gYXQgKDYxMywwKSB3aWR0aCA1MjogIk5vcm1hbCIK
KyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg2NjUsMCkgc2l6ZSA0eDIwCisgICAgICAg
ICAgdGV4dCBydW4gYXQgKDY2NSwwKSB3aWR0aCA0OiAiLiIKKyAgICAgIFJlbmRlclRhYmxlIHtU
QUJMRX0gYXQgKDAsMTg3KSBzaXplIDY5MXg5NSBbYm9yZGVyOiAoMXB4IG91dHNldCAjODA4MDgw
KV0KKyAgICAgICAgUmVuZGVyVGFibGVTZWN0aW9uIHtUQk9EWX0gYXQgKDEsMSkgc2l6ZSA2ODl4
OTMKKyAgICAgICAgICBSZW5kZXJUYWJsZVJvdyB7VFJ9IGF0ICgwLDApIHNpemUgNjg5eDI5Cisg
ICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBhdCAoMCwwKSBzaXplIDY4OXgyOSBbYmdj
b2xvcj0jQzBDMEMwXSBbYm9yZGVyOiAoMXB4IGluc2V0ICM4MDgwODApXSBbcj0wIGM9MCBycz0x
IGNzPTJdCiAgICAgICAgICAgICAgIFJlbmRlcklubGluZSB7U1RST05HfSBhdCAoMCwwKSBzaXpl
IDE3OHgyMAogICAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNCw0KSBzaXpl
IDE3OHgyMAogICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDQsNCkgd2lkdGggMTc4OiAi
VEFCTEUgVGVzdGluZyBTZWN0aW9uIgotICAgICAgICAgIFJlbmRlclRhYmxlUm93IHtUUn0gYXQg
KDAsMjkpIHNpemUgNjU3eDY0CisgICAgICAgICAgUmVuZGVyVGFibGVSb3cge1RSfSBhdCAoMCwy
OSkgc2l6ZSA2ODl4NjQKICAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCB7VER9IGF0ICgwLDQ3
KSBzaXplIDEyeDI4IFtiZ2NvbG9yPSNDMEMwQzBdIFtib3JkZXI6ICgxcHggaW5zZXQgIzgwODA4
MCldIFtyPTEgYz0wIHJzPTEgY3M9MV0KICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICg0LDQpIHNpemUgNHgyMAogICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0LDQpIHdp
ZHRoIDQ6ICIgIgotICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDEyLDI5KSBz
aXplIDY0NXg2NCBbYm9yZGVyOiAoMXB4IGluc2V0ICM4MDgwODApXSBbcj0xIGM9MSBycz0xIGNz
PTFdCi0gICAgICAgICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNCw0KSBzaXplIDYzN3gyMAot
ICAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI3MXgyMAot
ICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjcxOiAiVGhpcyBQYXJh
Z3JhcGggc2hvdWxkIGJlIGluIFNtYWxsIENhcHMuIgotICAgICAgICAgICAgICBSZW5kZXJCbG9j
ayB7UH0gYXQgKDQsNDApIHNpemUgNjM3eDIwCi0gICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7
I3RleHR9IGF0ICgwLDApIHNpemUgNTgxeDIwCi0gICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCwwKSB3aWR0aCA1ODE6ICJUaGlzIFBhcmFncmFwaCBzaG91bGQgYmUgaW4gU21hbGwgQ2Fw
cywgYnV0IHRoZSBMYXN0IFdvcmQgaW4gdGhlIFNlbnRlbmNlIHNob3VsZCBiZSAiCisgICAgICAg
ICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBhdCAoMTIsMjkpIHNpemUgNjc3eDY0IFtib3JkZXI6
ICgxcHggaW5zZXQgIzgwODA4MCldIFtyPTEgYz0xIHJzPTEgY3M9MV0KKyAgICAgICAgICAgICAg
UmVuZGVyQmxvY2sge1B9IGF0ICg0LDQpIHNpemUgNjY5eDIwCisgICAgICAgICAgICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjkyeDIwCisgICAgICAgICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyOTI6ICJUaGlzIFBhcmFncmFwaCBzaG91bGQgYmUgaW4g
U21hbGwgQ2Fwcy4iCisgICAgICAgICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNCw0MCkgc2l6
ZSA2Njl4MjAKKyAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6
ZSA2MTN4MjAKKyAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDYxMzog
IlRoaXMgUGFyYWdyYXBoIHNob3VsZCBiZSBpbiBTbWFsbCBDYXBzLCBidXQgdGhlIExhc3QgV29y
ZCBpbiB0aGUgU2VudGVuY2Ugc2hvdWxkIGJlICIKICAgICAgICAgICAgICAgICBSZW5kZXJJbmxp
bmUge1NQQU59IGF0ICgwLDApIHNpemUgNTJ4MjAKLSAgICAgICAgICAgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoNTgxLDApIHNpemUgNTJ4MjAKLSAgICAgICAgICAgICAgICAgICAgdGV4
dCBydW4gYXQgKDU4MSwwKSB3aWR0aCA1MjogIk5vcm1hbCIKLSAgICAgICAgICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDYzMywwKSBzaXplIDR4MjAKLSAgICAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICg2MzMsMCkgd2lkdGggNDogIi4iCisgICAgICAgICAgICAgICAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDYxMywwKSBzaXplIDUyeDIwCisgICAgICAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICg2MTMsMCkgd2lkdGggNTI6ICJOb3JtYWwiCisgICAgICAgICAgICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICg2NjUsMCkgc2l6ZSA0eDIwCisgICAgICAgICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoNjY1LDApIHdpZHRoIDQ6ICIuIgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vcXQvY3NzMS9wc2V1ZG8vZmlyc3RsaW5lLWV4cGVjdGVkLnR4dCBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL3F0L2NzczEvcHNldWRvL2ZpcnN0bGluZS1leHBlY3RlZC50eHQKaW5kZXgg
Yjk1YjdkZS4uZTc3NTRhMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvY3Nz
MS9wc2V1ZG8vZmlyc3RsaW5lLWV4cGVjdGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9jc3MxL3BzZXVkby9maXJzdGxpbmUtZXhwZWN0ZWQudHh0CkBAIC0zMiwxOCArMzIsMTgg
QEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA3ODR4NzQ2CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDEz
NSw2MCkgd2lkdGggNjEwOiAiUmVtZW1iZXIgdGhhdCBpbiBvcmRlciB0byBlbnN1cmUgYSBjb21w
bGV0ZSB0ZXN0LCB0aGUgcGFyYWdyYXBoIG11c3QgYmUgZGlzcGxheWVkIG9uIgogICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDgwKSB3aWR0aCAxMzY6ICJtb3JlIHRoYW4gb25lIGxpbmUuIgogICAg
ICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDMyMykgc2l6ZSA3Njh4ODAKLSAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzYxeDYwCi0gICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMCkgd2lkdGggNjA2OiAiVGhlIGZpcnN0IGxpbmUgb2YgdGhpcyBwYXJhZ3JhcGgsIGFuZCBv
bmx5IHRoYXQgb25lLCBzaG91bGQgYmUgZGlzcGxheWVkIGluIHNtYWxsLWNhcHMgc3R5bGUuICIK
LSAgICAgICAgICB0ZXh0IHJ1biBhdCAoNjA2LDApIHdpZHRoIDE1NTogIlRodXMsIGlmIHRoZSBm
aXJzdCBsaW5lIGlzIgotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDIwKSB3aWR0aCA3NTc6ICJu
b3QgaW4gc21hbGwtY2FwcyBzdHlsZSwgT1IgaWYgdGhlIGVudGlyZSBwYXJhZ3JhcGggdHVybnMg
b3V0IGluIHNtYWxsLWNhcHMsIHRoZW4gdGhlIHVzZXIgYWdlbnQgaGFzIGZhaWxlZCB0aGlzIgot
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDQwKSB3aWR0aCAyODM6ICJ0ZXN0IChhbHRob3VnaCB0
aGUgcHJvYmxlbSBtaWdodCBiZSB0aGF0ICIKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0
ICgwLDApIHNpemUgNzQxeDYwCisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNjM0
OiAiVGhlIGZpcnN0IGxpbmUgb2YgdGhpcyBwYXJhZ3JhcGgsIGFuZCBvbmx5IHRoYXQgb25lLCBz
aG91bGQgYmUgZGlzcGxheWVkIGluIHNtYWxsLWNhcHMgc3R5bGUuICIKKyAgICAgICAgICB0ZXh0
IHJ1biBhdCAoNjM0LDApIHdpZHRoIDEwNzogIlRodXMsIGlmIHRoZSBmaXJzdCIKKyAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwyMCkgd2lkdGggNzMxOiAibGluZSBpcyBub3QgaW4gc21hbGwtY2Fw
cyBzdHlsZSwgT1IgaWYgdGhlIGVudGlyZSBwYXJhZ3JhcGggdHVybnMgb3V0IGluIHNtYWxsLWNh
cHMsIHRoZW4gdGhlIHVzZXIgYWdlbnQgaGFzIgorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDQw
KSB3aWR0aCAzNTU6ICJmYWlsZWQgdGhpcyB0ZXN0IChhbHRob3VnaCB0aGUgcHJvYmxlbSBtaWdo
dCBiZSB0aGF0ICIKICAgICAgICAgUmVuZGVySW5saW5lIHtDT0RFfSBhdCAoMCwwKSBzaXplIDYz
eDE2Ci0gICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyODMsNDMpIHNpemUgNjN4MTYK
LSAgICAgICAgICAgIHRleHQgcnVuIGF0ICgyODMsNDMpIHdpZHRoIDYzOiAic21hbGwtY2FwcyIK
LSAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgzNDYsNDApIHNpemUgNzA4eDQwCi0gICAg
ICAgICAgdGV4dCBydW4gYXQgKDM0Niw0MCkgd2lkdGggMjQ3OiAiIGlzIG5vdCBzdXBwb3J0ZWQg
YnkgeW91ciBicm93c2VyKS4gIgotICAgICAgICAgIHRleHQgcnVuIGF0ICg1OTMsNDApIHdpZHRo
IDExNTogIlRoaXMgaXMgZXh0cmEgdGV4dCIKLSAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCw2MCkg
d2lkdGggNjQ0OiAiaW5jbHVkZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiBtYWtpbmcgdGhlIHBhcmFn
cmFwaCBsb25nIGVub3VnaCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgbGluZS4iCisgICAgICAgICAg
UmVuZGVyVGV4dCB7I3RleHR9IGF0ICgzNTUsNDMpIHNpemUgNjN4MTYKKyAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgzNTUsNDMpIHdpZHRoIDYzOiAic21hbGwtY2FwcyIKKyAgICAgICAgUmVuZGVy
VGV4dCB7I3RleHR9IGF0ICg0MTgsNDApIHNpemUgNzUxeDQwCisgICAgICAgICAgdGV4dCBydW4g
YXQgKDQxOCw0MCkgd2lkdGggMjQ3OiAiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgeW91ciBicm93c2Vy
KS4gIgorICAgICAgICAgIHRleHQgcnVuIGF0ICg2NjUsNDApIHdpZHRoIDg2OiAiVGhpcyBpcyBl
eHRyYSIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCw2MCkgd2lkdGggNjczOiAidGV4dCBpbmNs
dWRlZCBmb3IgdGhlIHB1cnBvc2VzIG9mIG1ha2luZyB0aGUgcGFyYWdyYXBoIGxvbmcgZW5vdWdo
IHRvIGhhdmUgbW9yZSB0aGFuIG9uZSBsaW5lLiIKICAgICAgIFJlbmRlclRhYmxlIHtUQUJMRX0g
YXQgKDAsNDE5KSBzaXplIDc2OHgzMTEgW2JvcmRlcjogKDFweCBvdXRzZXQgIzgwODA4MCldCiAg
ICAgICAgIFJlbmRlclRhYmxlU2VjdGlvbiB7VEJPRFl9IGF0ICgxLDEpIHNpemUgNzY2eDMwOQog
ICAgICAgICAgIFJlbmRlclRhYmxlUm93IHtUUn0gYXQgKDAsMCkgc2l6ZSA3NjZ4MjkKQEAgLTcy
LDkgKzcyLDkgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA3ODR4NzQ2CiAgICAgICAgICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMTc5LDYwKSB3aWR0aCA1MTU6ICJSZW1lbWJlciB0aGF0IGluIG9yZGVy
IHRvIGVuc3VyZSBhIGNvbXBsZXRlIHRlc3QsIHRoZSBwYXJhZ3JhcGggbXVzdCBiZSIKICAgICAg
ICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDgwKSB3aWR0aCAyMzE6ICJkaXNwbGF5ZWQgb24g
bW9yZSB0aGFuIG9uZSBsaW5lLiIKICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICg0
LDE5Nikgc2l6ZSA3NDZ4ODAKLSAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSA3MzF4NjAKLSAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDYwNjogIlRoZSBmaXJzdCBsaW5lIG9mIHRoaXMgcGFyYWdyYXBoLCBhbmQgb25seSB0aGF0
IG9uZSwgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBzbWFsbC1jYXBzIHN0eWxlLiAiCi0gICAgICAg
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoNjA2LDApIHdpZHRoIDExMzogIlRodXMsIGlmIHRoZSBm
aXJzdCIKKyAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA3
NDF4NjAKKyAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDYzNDogIlRo
ZSBmaXJzdCBsaW5lIG9mIHRoaXMgcGFyYWdyYXBoLCBhbmQgb25seSB0aGF0IG9uZSwgc2hvdWxk
IGJlIGRpc3BsYXllZCBpbiBzbWFsbC1jYXBzIHN0eWxlLiAiCisgICAgICAgICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoNjM0LDApIHdpZHRoIDEwNzogIlRodXMsIGlmIHRoZSBmaXJzdCIKICAgICAg
ICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDIwKSB3aWR0aCA3MzE6ICJsaW5lIGlzIG5vdCBp
biBzbWFsbC1jYXBzIHN0eWxlLCBPUiBpZiB0aGUgZW50aXJlIHBhcmFncmFwaCB0dXJucyBvdXQg
aW4gc21hbGwtY2FwcywgdGhlbiB0aGUgdXNlciBhZ2VudCBoYXMiCiAgICAgICAgICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCw0MCkgd2lkdGggMzU1OiAiZmFpbGVkIHRoaXMgdGVzdCAoYWx0aG91
Z2ggdGhlIHByb2JsZW0gbWlnaHQgYmUgdGhhdCAiCiAgICAgICAgICAgICAgICAgUmVuZGVySW5s
aW5lIHtDT0RFfSBhdCAoMCwwKSBzaXplIDYzeDE2CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9jc3MxL3BzZXVkby9tdWx0aXBsZV9wc2V1ZG9fZWxlbWVudHMtZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvY3NzMS9wc2V1ZG8vbXVsdGlwbGVfcHNldWRv
X2VsZW1lbnRzLWV4cGVjdGVkLnR4dAppbmRleCBjM2IyMTZkLi5mNDI0NTk3IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9jc3MxL3BzZXVkby9tdWx0aXBsZV9wc2V1ZG9fZWxl
bWVudHMtZXhwZWN0ZWQudHh0CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2NzczEvcHNl
dWRvL211bHRpcGxlX3BzZXVkb19lbGVtZW50cy1leHBlY3RlZC50eHQKQEAgLTUxLDggKzUxLDgg
QEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA3ODR4MTE3MAogICAgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDczeDY5CiAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3
aWR0aCA3MzogIlwiVyIKICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg3MywzOCkgc2l6
ZSA3NjJ4OTEKLSAgICAgICAgICB0ZXh0IHJ1biBhdCAoNzMsMzgpIHdpZHRoIDM0NDogImUgc2hv
dWxkIGNoZWNrIGZvciBxdW90YXRpb24gc3VwcG9ydCxcIiBpdCB3YXMgc2FpZC4gIgotICAgICAg
ICAgIHRleHQgcnVuIGF0ICg0MTcsMzgpIHdpZHRoIDMwODogIlRoZSBmaXJzdCB0d28gY2hhcmFj
dGVycyBpbiB0aGlzIHBhcmFncmFwaC0tIGEiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDczLDM4
KSB3aWR0aCAzNTM6ICJlIHNob3VsZCBjaGVjayBmb3IgcXVvdGF0aW9uIHN1cHBvcnQsXCIgaXQg
d2FzIHNhaWQuICIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoNDI2LDM4KSB3aWR0aCAzMTA6ICJU
aGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgaW4gdGhpcyBwYXJhZ3JhcGgtLSBhIgogICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDY5KSB3aWR0aCA3MzU6ICJkb3VibGUtcXVvdGUgbWFyayBhbmQgYSBj
YXBpdGFsICdXJy0tIHNob3VsZCBiZSAzNTAlIGJpZ2dlciB0aGFuIHRoZSByZXN0IG9mIHRoZSBw
YXJhZ3JhcGgsIGFuZCBtYXJvb24iCiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsODkpIHdpZHRo
IDc2OiAiKGRhcmsgcmVkKS4gIgogICAgICAgICAgIHRleHQgcnVuIGF0ICg3Niw4OSkgd2lkdGgg
NjgxOiAiTm90ZSB0aGF0IHRoZSBpbmNsdXNpb24gb2YgYm90aCB0aGUgcXVvdGF0aW9uIG1hcmsg
YW5kIHRoZSAnVycgaW4gdGhlIGZpcnN0LWxldHRlciBzdHlsZSBpcyBub3QgcmVxdWlyZWQiCkBA
IC05Nyw4ICs5Nyw4IEBAIGxheWVyIGF0ICgwLDApIHNpemUgNzg0eDExNzAKICAgICAgICAgICAg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDczeDY5CiAgICAgICAgICAg
ICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDczOiAiXCJXIgogICAgICAgICAgICAg
ICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNzMsMzgpIHNpemUgNzQ1eDExMQotICAgICAgICAg
ICAgICAgICAgdGV4dCBydW4gYXQgKDczLDM4KSB3aWR0aCAzNDQ6ICJlIHNob3VsZCBjaGVjayBm
b3IgcXVvdGF0aW9uIHN1cHBvcnQsXCIgaXQgd2FzIHNhaWQuICIKLSAgICAgICAgICAgICAgICAg
IHRleHQgcnVuIGF0ICg0MTcsMzgpIHdpZHRoIDMwODogIlRoZSBmaXJzdCB0d28gY2hhcmFjdGVy
cyBpbiB0aGlzIHBhcmFncmFwaC0tIGEiCisgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
NzMsMzgpIHdpZHRoIDM1MzogImUgc2hvdWxkIGNoZWNrIGZvciBxdW90YXRpb24gc3VwcG9ydCxc
IiBpdCB3YXMgc2FpZC4gIgorICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDQyNiwzOCkg
d2lkdGggMzEwOiAiVGhlIGZpcnN0IHR3byBjaGFyYWN0ZXJzIGluIHRoaXMgcGFyYWdyYXBoLS0g
YSIKICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDY5KSB3aWR0aCA3MzU6ICJkb3Vi
bGUtcXVvdGUgbWFyayBhbmQgYSBjYXBpdGFsICdXJy0tIHNob3VsZCBiZSAzNTAlIGJpZ2dlciB0
aGFuIHRoZSByZXN0IG9mIHRoZSBwYXJhZ3JhcGgsIGFuZCBtYXJvb24iCiAgICAgICAgICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCw4OSkgd2lkdGggNzY6ICIoZGFyayByZWQpLiAiCiAgICAgICAg
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoNzYsODkpIHdpZHRoIDYxODogIk5vdGUgdGhhdCB0aGUg
aW5jbHVzaW9uIG9mIGJvdGggdGhlIHF1b3RhdGlvbiBtYXJrIGFuZCB0aGUgJ1cnIGluIHRoZSBm
aXJzdC1sZXR0ZXIgc3R5bGUgaXMgbm90IgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vcXQvY3NzMi4xL3QxNTA1LWM1MjQtZm9udC12YXItMDAtYi1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9xdC9jc3MyLjEvdDE1MDUtYzUyNC1mb250LXZhci0wMC1iLWV4cGVj
dGVkLnR4dAppbmRleCAwYmQwMjgyLi42ZTBjMjVlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9xdC9jc3MyLjEvdDE1MDUtYzUyNC1mb250LXZhci0wMC1iLWV4cGVjdGVkLnR4dAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9jc3MyLjEvdDE1MDUtYzUyNC1mb250LXZhci0w
MC1iLWV4cGVjdGVkLnR4dApAQCAtNCwxMiArNCwxMiBAQCBsYXllciBhdCAoMCwwKSBzaXplIDgw
MHg4OAogICBSZW5kZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4ODgKICAgICBSZW5k
ZXJCb2R5IHtCT0RZfSBhdCAoOCwxNikgc2l6ZSA3ODR4NTYKICAgICAgIFJlbmRlckJsb2NrIHtQ
fSBhdCAoMCwwKSBzaXplIDc4NHgyMCBbY29sb3I9IzAwMDA4MF0KLSAgICAgICAgUmVuZGVyVGV4
dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjcxeDIwCi0gICAgICAgICAgdGV4dCBydW4gYXQgKDAs
MCkgd2lkdGggMjcxOiAiVGhpcyBQYXJhZ3JhcGggc2hvdWxkIGJlIGluIFNtYWxsIENhcHMuIgor
ICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyOTJ4MjAKKyAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyOTI6ICJUaGlzIFBhcmFncmFwaCBzaG91bGQgYmUg
aW4gU21hbGwgQ2Fwcy4iCiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMzYpIHNpemUgNzg0
eDIwIFtjb2xvcj0jMDAwMDgwXQotICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkg
c2l6ZSAyNjZ4MjAKLSAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyNjY6ICJUaGlz
IFNlbnRlbmNlIHNob3VsZCBiZSBpbiBTbWFsbCBDYXBzLiAiCisgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI4OXgyMAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDI4OTogIlRoaXMgU2VudGVuY2Ugc2hvdWxkIGJlIGluIFNtYWxsIENhcHMuICIKICAg
ICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBhdCAoMCwwKSBzaXplIDIzN3gyMAotICAgICAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMjY2LDApIHNpemUgMjM3eDIwCi0gICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMjY2LDApIHdpZHRoIDIzNzogIlRoaXMgU2VudGVuY2Ugc2hvdWxkIGJlIE5v
cm1hbC4iCisgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgyODksMCkgc2l6ZSAyMzd4
MjAKKyAgICAgICAgICAgIHRleHQgcnVuIGF0ICgyODksMCkgd2lkdGggMjM3OiAiVGhpcyBTZW50
ZW5jZSBzaG91bGQgYmUgTm9ybWFsLiIKICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgMHgwCg==
</data>
<flag name="review"
          id="26125"
          type_id="1"
          status="-"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="26126"
          type_id="3"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>44308</attachid>
            <date>2009-12-04 05:33:09 -0800</date>
            <delta_ts>2009-12-04 09:57:54 -0800</delta_ts>
            <desc>Update the layout tests</desc>
            <filename>test_update.patch</filename>
            <type>text/plain</type>
            <size>21377</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAzYmMxMTQ5Li4zODE3MmMxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMDktMTIt
MDQgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbi5wb3VsYWluQG5va2lhLmNvbT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFdlYktpdCBj
cmFzaGVzIHdoZW4gbG9hZGluZyBjZXJ0YWluIFNWRyBpbWFnZXMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI5NDQzCisKKyAgICAgICAgVXBkYXRlIHRo
ZSB0ZXN0IHJlc3VsdHMgZm9yIHRoZSBuZXcgRm9udENhY2hlIGltcGxlbWVudGF0aW9uLgorCisg
ICAgICAgICogcGxhdGZvcm0vcXQvY3NzMS9ib3hfcHJvcGVydGllcy9mbG9hdF9lbGVtZW50c19p
bl9zZXJpZXMtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIHBsYXRmb3JtL3F0L2NzczEvZm9udF9w
cm9wZXJ0aWVzL2ZvbnRfdmFyaWFudC1leHBlY3RlZC50eHQ6CisgICAgICAgICogcGxhdGZvcm0v
cXQvY3NzMS9wc2V1ZG8vZmlyc3RsaW5lLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9jc3MxL3BzZXVkby9tdWx0aXBsZV9wc2V1ZG9fZWxlbWVudHMtZXhwZWN0ZWQudHh0Ogor
ICAgICAgICAqIHBsYXRmb3JtL3F0L2NzczIuMS90MTUwNS1jNTI0LWZvbnQtdmFyLTAwLWItZXhw
ZWN0ZWQudHh0OgorCiAyMDA5LTEyLTAzICBHdXN0YXZvIE5vcm9uaGEgU2lsdmEgIDxndXN0YXZv
Lm5vcm9uaGFAY29sbGFib3JhLmNvLnVrPgogCiAgICAgICAgIFNraXBwaW5nIG5ldyB0ZXN0cywg
YW5kIHRlc3RzIHRoYXQgcmVxdWlyZSBuZXcgRFJUIGZ1bmN0aW9uYWxpdHkuCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9jc3MxL2JveF9wcm9wZXJ0aWVzL2Zsb2F0X2VsZW1l
bnRzX2luX3Nlcmllcy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9jc3Mx
L2JveF9wcm9wZXJ0aWVzL2Zsb2F0X2VsZW1lbnRzX2luX3Nlcmllcy1leHBlY3RlZC50eHQKaW5k
ZXggYzc2MDQ0MS4uMzM5M2QxZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
Y3NzMS9ib3hfcHJvcGVydGllcy9mbG9hdF9lbGVtZW50c19pbl9zZXJpZXMtZXhwZWN0ZWQudHh0
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2NzczEvYm94X3Byb3BlcnRpZXMvZmxvYXRf
ZWxlbWVudHNfaW5fc2VyaWVzLWV4cGVjdGVkLnR4dApAQCAtMSw4ICsxLDggQEAKLWxheWVyIGF0
ICgwLDApIHNpemUgNzg0eDc3NQorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA3ODR4NzczCiAgIFJlbmRl
clZpZXcgYXQgKDAsMCkgc2l6ZSA3ODR4NjAwCi1sYXllciBhdCAoMCwwKSBzaXplIDc4NHg3NzUK
LSAgUmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgNzg0eDc3NQotICAgIFJlbmRlckJv
ZHkge0JPRFl9IGF0ICg4LDgpIHNpemUgNzY4eDc0NyBbYmdjb2xvcj0jQ0NDQ0NDXQorbGF5ZXIg
YXQgKDAsMCkgc2l6ZSA3ODR4NzczCisgIFJlbmRlckJsb2NrIHtIVE1MfSBhdCAoMCwwKSBzaXpl
IDc4NHg3NzMKKyAgICBSZW5kZXJCb2R5IHtCT0RZfSBhdCAoOCw4KSBzaXplIDc2OHg3NDUgW2Jn
Y29sb3I9I0NDQ0NDQ10KICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoMCwwKSBzaXplIDc2OHgy
MAogICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzOTV4MjAKICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzOTU6ICJUaGUgc3R5bGUgZGVjbGFyYXRpb25z
IHdoaWNoIGFwcGx5IHRvIHRoZSB0ZXh0IGJlbG93IGFyZToiCkBAIC0zOSwyMyArMzksMjMgQEAg
bGF5ZXIgYXQgKDAsMCkgc2l6ZSA3ODR4Nzc1CiAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMjAp
IHdpZHRoIDU2MDogIm9mIHRoaXMgcGFnZSBpbmRpY2F0ZXMgaG93IHRoZSBESVYgZWxlbWVudHMg
c2hvdWxkIGJlIGxhaWQgb3V0IGhvcml6b250YWxseS4gIgogICAgICAgICAgIHRleHQgcnVuIGF0
ICg1NjAsMjApIHdpZHRoIDIwODogIlRoZXkgc2hvdWxkIGFsaWduIHdpdGggZWFjaCIKICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMCw0MCkgd2lkdGggNDA6ICJvdGhlci4iCi0gICAgICBSZW5kZXJC
bG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDMzNCkgc2l6ZSAxNDB4MTAxIFtiZ2NvbG9yPSNG
RkZGMDBdIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQotICAgICAgICBSZW5kZXJCbG9j
ayB7UH0gYXQgKDQwLDQwKSBzaXplIDYweDIxCi0gICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICgwLDApIHNpemUgNDd4MjEKLSAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRo
IDQ3OiAiWWVsbG93IgotICAgICAgUmVuZGVyQmxvY2sgKGZsb2F0aW5nKSB7RElWfSBhdCAoMTYw
LDMzNCkgc2l6ZSAxNDB4MTAxIFtjb2xvcj0jRkZGRkZGXSBbYmdjb2xvcj0jMDAwMEZGXSBbYm9y
ZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KLSAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICg0
MCw0MCkgc2l6ZSA2MHgyMQotICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBz
aXplIDMxeDIxCi0gICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMTogIkJsdWUi
Ci0gICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgzMjAsMzM0KSBzaXplIDE0
MHgxMDEgW2JnY29sb3I9I0ZGMDAwMF0gW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCi0g
ICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNDAsNDApIHNpemUgNjB4MjEKLSAgICAgICAgICBS
ZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyOHgyMQotICAgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsMCkgd2lkdGggMjg6ICJSZWQiCi0gICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcp
IHtESVZ9IGF0ICg0ODAsMzM0KSBzaXplIDE0MHgxMDEgW2NvbG9yPSNGRkZGRkZdIFtiZ2NvbG9y
PSMwMDgwMDBdIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQotICAgICAgICBSZW5kZXJC
bG9jayB7UH0gYXQgKDQwLDQwKSBzaXplIDYweDIxCi0gICAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICgwLDApIHNpemUgNDJ4MjEKLSAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDQyOiAiR3JlZW4iCi0gICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCw0NDUpIHNpemUg
NzY4eDIxCisgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICgwLDMzNCkgc2l6
ZSAxNDB4MTAwIFtiZ2NvbG9yPSNGRkZGMDBdIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDAp
XQorICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQwLDQwKSBzaXplIDYweDIwCisgICAgICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDl4MjAKKyAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ5OiAiWWVsbG93IgorICAgICAgUmVuZGVyQmxvY2sgKGZs
b2F0aW5nKSB7RElWfSBhdCAoMTYwLDMzNCkgc2l6ZSAxNDB4MTAwIFtjb2xvcj0jRkZGRkZGXSBb
Ymdjb2xvcj0jMDAwMEZGXSBbYm9yZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KKyAgICAgICAg
UmVuZGVyQmxvY2sge1B9IGF0ICg0MCw0MCkgc2l6ZSA2MHgyMAorICAgICAgICAgIFJlbmRlclRl
eHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDMzeDIwCisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwwKSB3aWR0aCAzMzogIkJsdWUiCisgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9
IGF0ICgzMjAsMzM0KSBzaXplIDE0MHgxMDAgW2JnY29sb3I9I0ZGMDAwMF0gW2JvcmRlcjogKDIw
cHggc29saWQgIzAwMDAwMCldCisgICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNDAsNDApIHNp
emUgNjB4MjAKKyAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMHgy
MAorICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMzA6ICJSZWQiCisgICAgICBS
ZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICg0ODAsMzM0KSBzaXplIDE0MHgxMDAgW2Nv
bG9yPSNGRkZGRkZdIFtiZ2NvbG9yPSMwMDgwMDBdIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAw
MDApXQorICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQwLDQwKSBzaXplIDYweDIwCisgICAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDR4MjAKKyAgICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDQ0OiAiR3JlZW4iCisgICAgICBSZW5kZXJCbG9jayB7
RElWfSBhdCAoMCw0NDQpIHNpemUgNzY4eDIxCiAgICAgICAgIFJlbmRlclRhYmxlIHtUQUJMRX0g
YXQgKDAsMCkgc2l6ZSA2MjB4MjEKICAgICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24ge1RCT0RZ
fSBhdCAoMCwwKSBzaXplIDYyMHgyMQogICAgICAgICAgICAgUmVuZGVyVGFibGVSb3cge1RSfSBh
dCAoMCwwKSBzaXplIDYyMHgyMQpAQCAtOTEsNDEgKzkxLDQxIEBAIGxheWVyIGF0ICgwLDApIHNp
emUgNzg0eDc3NQogICAgICAgICAgICAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDApIHNp
emUgMTAweDEKICAgICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDYwMCwxMCkg
c2l6ZSAyMHgxIFtiZ2NvbG9yPSMwMDAwMDBdIFtyPTAgYz0xNCBycz0xIGNzPTFdCiAgICAgICAg
ICAgICAgICAgUmVuZGVySW1hZ2Uge0lNR30gYXQgKDAsMCkgc2l6ZSAyMHgxCi0gICAgICBSZW5k
ZXJUYWJsZSB7VEFCTEV9IGF0ICgwLDQ4Nikgc2l6ZSA3Njh4MjYxIFtib3JkZXI6ICgxcHggb3V0
c2V0ICM4MDgwODApXQotICAgICAgICBSZW5kZXJUYWJsZVNlY3Rpb24ge1RCT0RZfSBhdCAoMSwx
KSBzaXplIDc2NngyNTkKKyAgICAgIFJlbmRlclRhYmxlIHtUQUJMRX0gYXQgKDAsNDg1KSBzaXpl
IDc2OHgyNjAgW2JvcmRlcjogKDFweCBvdXRzZXQgIzgwODA4MCldCisgICAgICAgIFJlbmRlclRh
YmxlU2VjdGlvbiB7VEJPRFl9IGF0ICgxLDEpIHNpemUgNzY2eDI1OAogICAgICAgICAgIFJlbmRl
clRhYmxlUm93IHtUUn0gYXQgKDAsMCkgc2l6ZSA3NjZ4MjkKICAgICAgICAgICAgIFJlbmRlclRh
YmxlQ2VsbCB7VER9IGF0ICgwLDApIHNpemUgNzY2eDI5IFtiZ2NvbG9yPSNDMEMwQzBdIFtib3Jk
ZXI6ICgxcHggaW5zZXQgIzgwODA4MCldIFtyPTAgYz0wIHJzPTEgY3M9Ml0KICAgICAgICAgICAg
ICAgUmVuZGVySW5saW5lIHtTVFJPTkd9IGF0ICgwLDApIHNpemUgMTc4eDIwCiAgICAgICAgICAg
ICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg0LDQpIHNpemUgMTc4eDIwCiAgICAgICAgICAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoNCw0KSB3aWR0aCAxNzg6ICJUQUJMRSBUZXN0aW5nIFNlY3Rp
b24iCi0gICAgICAgICAgUmVuZGVyVGFibGVSb3cge1RSfSBhdCAoMCwyOSkgc2l6ZSA3NjZ4MjMw
Ci0gICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBhdCAoMCwxMzApIHNpemUgMTJ4Mjgg
W2JnY29sb3I9I0MwQzBDMF0gW2JvcmRlcjogKDFweCBpbnNldCAjODA4MDgwKV0gW3I9MSBjPTAg
cnM9MSBjcz0xXQorICAgICAgICAgIFJlbmRlclRhYmxlUm93IHtUUn0gYXQgKDAsMjkpIHNpemUg
NzY2eDIyOQorICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDAsMTI5KSBzaXpl
IDEyeDI4IFtiZ2NvbG9yPSNDMEMwQzBdIFtib3JkZXI6ICgxcHggaW5zZXQgIzgwODA4MCldIFty
PTEgYz0wIHJzPTEgY3M9MV0KICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICg0
LDQpIHNpemUgNHgyMAogICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0LDQpIHdpZHRoIDQ6
ICIgIgotICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDEyLDI5KSBzaXplIDc1
NHgyMzAgW2JvcmRlcjogKDFweCBpbnNldCAjODA4MDgwKV0gW3I9MSBjPTEgcnM9MSBjcz0xXQor
ICAgICAgICAgICAgUmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDEyLDI5KSBzaXplIDc1NHgyMjkg
W2JvcmRlcjogKDFweCBpbnNldCAjODA4MDgwKV0gW3I9MSBjPTEgcnM9MSBjcz0xXQogICAgICAg
ICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQsNCkgc2l6ZSA3NDZ4NjAKICAgICAgICAgICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA3NDZ4NjAKICAgICAgICAgICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDc0NjogIlRoZSBmb3VyIGZsb2F0aW5nIERJ
ViBlbGVtZW50cyBiZWxvdyBzaG91bGQgYXBwZWFyIG5leHQgdG8gZWFjaCBvdGhlciBob3Jpem9u
dGFsbHkuIFRoZSB0YWJsZSBhdCB0aGUiCiAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MCwyMCkgd2lkdGggNTg2OiAiYm90dG9tIG9mIHRoaXMgcGFnZSBpbmRpY2F0ZXMgaG93IHRoZSBE
SVYgZWxlbWVudHMgc2hvdWxkIGJlIGxhaWQgb3V0IGhvcml6b250YWxseS4gIgogICAgICAgICAg
ICAgICAgICAgdGV4dCBydW4gYXQgKDU4NiwyMCkgd2lkdGggMTYwOiAiVGhleSBzaG91bGQgYWxp
Z24gd2l0aCIKICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDQwKSB3aWR0aCA3OTog
ImVhY2ggb3RoZXIuIgotICAgICAgICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9
IGF0ICg0LDc0KSBzaXplIDE0MHgxMDEgW2JnY29sb3I9I0ZGRkYwMF0gW2JvcmRlcjogKDIwcHgg
c29saWQgIzAwMDAwMCldCi0gICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICg0MCw0
MCkgc2l6ZSA2MHgyMQotICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgw
LDApIHNpemUgNDd4MjEKLSAgICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggNDc6ICJZZWxsb3ciCi0gICAgICAgICAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJ
Vn0gYXQgKDE2NCw3NCkgc2l6ZSAxNDB4MTAxIFtjb2xvcj0jRkZGRkZGXSBbYmdjb2xvcj0jMDAw
MEZGXSBbYm9yZGVyOiAoMjBweCBzb2xpZCAjMDAwMDAwKV0KLSAgICAgICAgICAgICAgICBSZW5k
ZXJCbG9jayB7UH0gYXQgKDQwLDQwKSBzaXplIDYweDIxCi0gICAgICAgICAgICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAzMXgyMQotICAgICAgICAgICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAzMTogIkJsdWUiCi0gICAgICAgICAgICAgIFJlbmRlckJs
b2NrIChmbG9hdGluZykge0RJVn0gYXQgKDMyNCw3NCkgc2l6ZSAxNDB4MTAxIFtiZ2NvbG9yPSNG
RjAwMDBdIFtib3JkZXI6ICgyMHB4IHNvbGlkICMwMDAwMDApXQotICAgICAgICAgICAgICAgIFJl
bmRlckJsb2NrIHtQfSBhdCAoNDAsNDApIHNpemUgNjB4MjEKLSAgICAgICAgICAgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDI4eDIxCi0gICAgICAgICAgICAgICAgICAg
IHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI4OiAiUmVkIgotICAgICAgICAgICAgICBSZW5kZXJC
bG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICg0ODQsNzQpIHNpemUgMTQweDEwMSBbY29sb3I9I0ZG
RkZGRl0gW2JnY29sb3I9IzAwODAwMF0gW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCi0g
ICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICg0MCw0MCkgc2l6ZSA2MHgyMQotICAg
ICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDJ4MjEKLSAg
ICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDI6ICJHcmVlbiIKLSAg
ICAgICAgICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQgKDQsMTg1KSBzaXplIDc0NngyMQorICAg
ICAgICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtESVZ9IGF0ICg0LDc0KSBzaXplIDE0
MHgxMDAgW2JnY29sb3I9I0ZGRkYwMF0gW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCisg
ICAgICAgICAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICg0MCw0MCkgc2l6ZSA2MHgyMAorICAg
ICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDl4MjAKKyAg
ICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDk6ICJZZWxsb3ciCisg
ICAgICAgICAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJVn0gYXQgKDE2NCw3NCkgc2l6
ZSAxNDB4MTAwIFtjb2xvcj0jRkZGRkZGXSBbYmdjb2xvcj0jMDAwMEZGXSBbYm9yZGVyOiAoMjBw
eCBzb2xpZCAjMDAwMDAwKV0KKyAgICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQw
LDQwKSBzaXplIDYweDIwCisgICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAzM3gyMAorICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3
aWR0aCAzMzogIkJsdWUiCisgICAgICAgICAgICAgIFJlbmRlckJsb2NrIChmbG9hdGluZykge0RJ
Vn0gYXQgKDMyNCw3NCkgc2l6ZSAxNDB4MTAwIFtiZ2NvbG9yPSNGRjAwMDBdIFtib3JkZXI6ICgy
MHB4IHNvbGlkICMwMDAwMDApXQorICAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAo
NDAsNDApIHNpemUgNjB4MjAKKyAgICAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMCwwKSBzaXplIDMweDIwCisgICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDAp
IHdpZHRoIDMwOiAiUmVkIgorICAgICAgICAgICAgICBSZW5kZXJCbG9jayAoZmxvYXRpbmcpIHtE
SVZ9IGF0ICg0ODQsNzQpIHNpemUgMTQweDEwMCBbY29sb3I9I0ZGRkZGRl0gW2JnY29sb3I9IzAw
ODAwMF0gW2JvcmRlcjogKDIwcHggc29saWQgIzAwMDAwMCldCisgICAgICAgICAgICAgICAgUmVu
ZGVyQmxvY2sge1B9IGF0ICg0MCw0MCkgc2l6ZSA2MHgyMAorICAgICAgICAgICAgICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNDR4MjAKKyAgICAgICAgICAgICAgICAgICAg
dGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNDQ6ICJHcmVlbiIKKyAgICAgICAgICAgICAgUmVuZGVy
QmxvY2sge0RJVn0gYXQgKDQsMTg0KSBzaXplIDc0NngyMQogICAgICAgICAgICAgICAgIFJlbmRl
clRhYmxlIHtUQUJMRX0gYXQgKDAsMCkgc2l6ZSA2MjB4MjEKICAgICAgICAgICAgICAgICAgIFJl
bmRlclRhYmxlU2VjdGlvbiB7VEJPRFl9IGF0ICgwLDApIHNpemUgNjIweDIxCiAgICAgICAgICAg
ICAgICAgICAgIFJlbmRlclRhYmxlUm93IHtUUn0gYXQgKDAsMCkgc2l6ZSA2MjB4MjEKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2NzczEvZm9udF9wcm9wZXJ0aWVzL2ZvbnRf
dmFyaWFudC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9jc3MxL2ZvbnRf
cHJvcGVydGllcy9mb250X3ZhcmlhbnQtZXhwZWN0ZWQudHh0CmluZGV4IGE2MDczNWYuLjYzYjUw
ZGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2NzczEvZm9udF9wcm9wZXJ0
aWVzL2ZvbnRfdmFyaWFudC1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
cXQvY3NzMS9mb250X3Byb3BlcnRpZXMvZm9udF92YXJpYW50LWV4cGVjdGVkLnR4dApAQCAtMTUs
MzYgKzE1LDM2IEBAIGxheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAogICAgICAgICAgIHRleHQg
cnVuIGF0ICgwLDMyKSB3aWR0aCAwOiAiICIKICAgICAgIFJlbmRlckJsb2NrIHtIUn0gYXQgKDAs
OTcpIHNpemUgNzg0eDIgW2JvcmRlcjogKDFweCBpbnNldCAjMDAwMDAwKV0KICAgICAgIFJlbmRl
ckJsb2NrIHtQfSBhdCAoMCwxMTUpIHNpemUgNzg0eDIwCi0gICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDI3MXgyMAotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdp
ZHRoIDI3MTogIlRoaXMgUGFyYWdyYXBoIHNob3VsZCBiZSBpbiBTbWFsbCBDYXBzLiIKKyAgICAg
ICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjkyeDIwCisgICAgICAgICAgdGV4
dCBydW4gYXQgKDAsMCkgd2lkdGggMjkyOiAiVGhpcyBQYXJhZ3JhcGggc2hvdWxkIGJlIGluIFNt
YWxsIENhcHMuIgogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDE1MSkgc2l6ZSA3ODR4MjAK
LSAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNTgxeDIwCi0gICAgICAg
ICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNTgxOiAiVGhpcyBQYXJhZ3JhcGggc2hvdWxkIGJl
IGluIFNtYWxsIENhcHMsIGJ1dCB0aGUgTGFzdCBXb3JkIGluIHRoZSBTZW50ZW5jZSBzaG91bGQg
YmUgIgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA2MTN4MjAKKyAg
ICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA2MTM6ICJUaGlzIFBhcmFncmFwaCBzaG91
bGQgYmUgaW4gU21hbGwgQ2FwcywgYnV0IHRoZSBMYXN0IFdvcmQgaW4gdGhlIFNlbnRlbmNlIHNo
b3VsZCBiZSAiCiAgICAgICAgIFJlbmRlcklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSA1Mngy
MAotICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNTgxLDApIHNpemUgNTJ4MjAKLSAg
ICAgICAgICAgIHRleHQgcnVuIGF0ICg1ODEsMCkgd2lkdGggNTI6ICJOb3JtYWwiCi0gICAgICAg
IFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNjMzLDApIHNpemUgNHgyMAotICAgICAgICAgIHRleHQg
cnVuIGF0ICg2MzMsMCkgd2lkdGggNDogIi4iCi0gICAgICBSZW5kZXJUYWJsZSB7VEFCTEV9IGF0
ICgwLDE4Nykgc2l6ZSA2NTl4OTUgW2JvcmRlcjogKDFweCBvdXRzZXQgIzgwODA4MCldCi0gICAg
ICAgIFJlbmRlclRhYmxlU2VjdGlvbiB7VEJPRFl9IGF0ICgxLDEpIHNpemUgNjU3eDkzCi0gICAg
ICAgICAgUmVuZGVyVGFibGVSb3cge1RSfSBhdCAoMCwwKSBzaXplIDY1N3gyOQotICAgICAgICAg
ICAgUmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDAsMCkgc2l6ZSA2NTd4MjkgW2JnY29sb3I9I0Mw
QzBDMF0gW2JvcmRlcjogKDFweCBpbnNldCAjODA4MDgwKV0gW3I9MCBjPTAgcnM9MSBjcz0yXQor
ICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNjEzLDApIHNpemUgNTJ4MjAKKyAgICAg
ICAgICAgIHRleHQgcnVuIGF0ICg2MTMsMCkgd2lkdGggNTI6ICJOb3JtYWwiCisgICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoNjY1LDApIHNpemUgNHgyMAorICAgICAgICAgIHRleHQgcnVu
IGF0ICg2NjUsMCkgd2lkdGggNDogIi4iCisgICAgICBSZW5kZXJUYWJsZSB7VEFCTEV9IGF0ICgw
LDE4Nykgc2l6ZSA2OTF4OTUgW2JvcmRlcjogKDFweCBvdXRzZXQgIzgwODA4MCldCisgICAgICAg
IFJlbmRlclRhYmxlU2VjdGlvbiB7VEJPRFl9IGF0ICgxLDEpIHNpemUgNjg5eDkzCisgICAgICAg
ICAgUmVuZGVyVGFibGVSb3cge1RSfSBhdCAoMCwwKSBzaXplIDY4OXgyOQorICAgICAgICAgICAg
UmVuZGVyVGFibGVDZWxsIHtURH0gYXQgKDAsMCkgc2l6ZSA2ODl4MjkgW2JnY29sb3I9I0MwQzBD
MF0gW2JvcmRlcjogKDFweCBpbnNldCAjODA4MDgwKV0gW3I9MCBjPTAgcnM9MSBjcz0yXQogICAg
ICAgICAgICAgICBSZW5kZXJJbmxpbmUge1NUUk9OR30gYXQgKDAsMCkgc2l6ZSAxNzh4MjAKICAg
ICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDQsNCkgc2l6ZSAxNzh4MjAKICAg
ICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0LDQpIHdpZHRoIDE3ODogIlRBQkxFIFRlc3Rp
bmcgU2VjdGlvbiIKLSAgICAgICAgICBSZW5kZXJUYWJsZVJvdyB7VFJ9IGF0ICgwLDI5KSBzaXpl
IDY1N3g2NAorICAgICAgICAgIFJlbmRlclRhYmxlUm93IHtUUn0gYXQgKDAsMjkpIHNpemUgNjg5
eDY0CiAgICAgICAgICAgICBSZW5kZXJUYWJsZUNlbGwge1REfSBhdCAoMCw0Nykgc2l6ZSAxMngy
OCBbYmdjb2xvcj0jQzBDMEMwXSBbYm9yZGVyOiAoMXB4IGluc2V0ICM4MDgwODApXSBbcj0xIGM9
MCBycz0xIGNzPTFdCiAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNCw0KSBz
aXplIDR4MjAKICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoNCw0KSB3aWR0aCA0OiAiICIK
LSAgICAgICAgICAgIFJlbmRlclRhYmxlQ2VsbCB7VER9IGF0ICgxMiwyOSkgc2l6ZSA2NDV4NjQg
W2JvcmRlcjogKDFweCBpbnNldCAjODA4MDgwKV0gW3I9MSBjPTEgcnM9MSBjcz0xXQotICAgICAg
ICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQsNCkgc2l6ZSA2Mzd4MjAKLSAgICAgICAgICAg
ICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSAyNzF4MjAKLSAgICAgICAgICAg
ICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI3MTogIlRoaXMgUGFyYWdyYXBoIHNob3Vs
ZCBiZSBpbiBTbWFsbCBDYXBzLiIKLSAgICAgICAgICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICg0
LDQwKSBzaXplIDYzN3gyMAotICAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAo
MCwwKSBzaXplIDU4MXgyMAotICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lk
dGggNTgxOiAiVGhpcyBQYXJhZ3JhcGggc2hvdWxkIGJlIGluIFNtYWxsIENhcHMsIGJ1dCB0aGUg
TGFzdCBXb3JkIGluIHRoZSBTZW50ZW5jZSBzaG91bGQgYmUgIgorICAgICAgICAgICAgUmVuZGVy
VGFibGVDZWxsIHtURH0gYXQgKDEyLDI5KSBzaXplIDY3N3g2NCBbYm9yZGVyOiAoMXB4IGluc2V0
ICM4MDgwODApXSBbcj0xIGM9MSBycz0xIGNzPTFdCisgICAgICAgICAgICAgIFJlbmRlckJsb2Nr
IHtQfSBhdCAoNCw0KSBzaXplIDY2OXgyMAorICAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoMCwwKSBzaXplIDI5MngyMAorICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQg
KDAsMCkgd2lkdGggMjkyOiAiVGhpcyBQYXJhZ3JhcGggc2hvdWxkIGJlIGluIFNtYWxsIENhcHMu
IgorICAgICAgICAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDQsNDApIHNpemUgNjY5eDIwCisg
ICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNjEzeDIwCisg
ICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA2MTM6ICJUaGlzIFBhcmFn
cmFwaCBzaG91bGQgYmUgaW4gU21hbGwgQ2FwcywgYnV0IHRoZSBMYXN0IFdvcmQgaW4gdGhlIFNl
bnRlbmNlIHNob3VsZCBiZSAiCiAgICAgICAgICAgICAgICAgUmVuZGVySW5saW5lIHtTUEFOfSBh
dCAoMCwwKSBzaXplIDUyeDIwCi0gICAgICAgICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0g
YXQgKDU4MSwwKSBzaXplIDUyeDIwCi0gICAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg1
ODEsMCkgd2lkdGggNTI6ICJOb3JtYWwiCi0gICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3Rl
eHR9IGF0ICg2MzMsMCkgc2l6ZSA0eDIwCi0gICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
NjMzLDApIHdpZHRoIDQ6ICIuIgorICAgICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9
IGF0ICg2MTMsMCkgc2l6ZSA1MngyMAorICAgICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
NjEzLDApIHdpZHRoIDUyOiAiTm9ybWFsIgorICAgICAgICAgICAgICAgIFJlbmRlclRleHQgeyN0
ZXh0fSBhdCAoNjY1LDApIHNpemUgNHgyMAorICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQg
KDY2NSwwKSB3aWR0aCA0OiAiLiIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0
L2NzczEvcHNldWRvL2ZpcnN0bGluZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9xdC9jc3MxL3BzZXVkby9maXJzdGxpbmUtZXhwZWN0ZWQudHh0CmluZGV4IGI5NWI3ZGUuLmU3
NzU0YTIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2NzczEvcHNldWRvL2Zp
cnN0bGluZS1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQvY3NzMS9w
c2V1ZG8vZmlyc3RsaW5lLWV4cGVjdGVkLnR4dApAQCAtMzIsMTggKzMyLDE4IEBAIGxheWVyIGF0
ICgwLDApIHNpemUgNzg0eDc0NgogICAgICAgICAgIHRleHQgcnVuIGF0ICgxMzUsNjApIHdpZHRo
IDYxMDogIlJlbWVtYmVyIHRoYXQgaW4gb3JkZXIgdG8gZW5zdXJlIGEgY29tcGxldGUgdGVzdCwg
dGhlIHBhcmFncmFwaCBtdXN0IGJlIGRpc3BsYXllZCBvbiIKICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCw4MCkgd2lkdGggMTM2OiAibW9yZSB0aGFuIG9uZSBsaW5lLiIKICAgICAgIFJlbmRlckJs
b2NrIHtQfSBhdCAoMCwzMjMpIHNpemUgNzY4eDgwCi0gICAgICAgIFJlbmRlclRleHQgeyN0ZXh0
fSBhdCAoMCwwKSBzaXplIDc2MXg2MAotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRo
IDYwNjogIlRoZSBmaXJzdCBsaW5lIG9mIHRoaXMgcGFyYWdyYXBoLCBhbmQgb25seSB0aGF0IG9u
ZSwgc2hvdWxkIGJlIGRpc3BsYXllZCBpbiBzbWFsbC1jYXBzIHN0eWxlLiAiCi0gICAgICAgICAg
dGV4dCBydW4gYXQgKDYwNiwwKSB3aWR0aCAxNTU6ICJUaHVzLCBpZiB0aGUgZmlyc3QgbGluZSBp
cyIKLSAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwyMCkgd2lkdGggNzU3OiAibm90IGluIHNtYWxs
LWNhcHMgc3R5bGUsIE9SIGlmIHRoZSBlbnRpcmUgcGFyYWdyYXBoIHR1cm5zIG91dCBpbiBzbWFs
bC1jYXBzLCB0aGVuIHRoZSB1c2VyIGFnZW50IGhhcyBmYWlsZWQgdGhpcyIKLSAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCw0MCkgd2lkdGggMjgzOiAidGVzdCAoYWx0aG91Z2ggdGhlIHByb2JsZW0g
bWlnaHQgYmUgdGhhdCAiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDc0MXg2MAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDYzNDogIlRoZSBmaXJz
dCBsaW5lIG9mIHRoaXMgcGFyYWdyYXBoLCBhbmQgb25seSB0aGF0IG9uZSwgc2hvdWxkIGJlIGRp
c3BsYXllZCBpbiBzbWFsbC1jYXBzIHN0eWxlLiAiCisgICAgICAgICAgdGV4dCBydW4gYXQgKDYz
NCwwKSB3aWR0aCAxMDc6ICJUaHVzLCBpZiB0aGUgZmlyc3QiCisgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMjApIHdpZHRoIDczMTogImxpbmUgaXMgbm90IGluIHNtYWxsLWNhcHMgc3R5bGUsIE9S
IGlmIHRoZSBlbnRpcmUgcGFyYWdyYXBoIHR1cm5zIG91dCBpbiBzbWFsbC1jYXBzLCB0aGVuIHRo
ZSB1c2VyIGFnZW50IGhhcyIKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCw0MCkgd2lkdGggMzU1
OiAiZmFpbGVkIHRoaXMgdGVzdCAoYWx0aG91Z2ggdGhlIHByb2JsZW0gbWlnaHQgYmUgdGhhdCAi
CiAgICAgICAgIFJlbmRlcklubGluZSB7Q09ERX0gYXQgKDAsMCkgc2l6ZSA2M3gxNgotICAgICAg
ICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMjgzLDQzKSBzaXplIDYzeDE2Ci0gICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMjgzLDQzKSB3aWR0aCA2MzogInNtYWxsLWNhcHMiCi0gICAgICAgIFJl
bmRlclRleHQgeyN0ZXh0fSBhdCAoMzQ2LDQwKSBzaXplIDcwOHg0MAotICAgICAgICAgIHRleHQg
cnVuIGF0ICgzNDYsNDApIHdpZHRoIDI0NzogIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJv
d3NlcikuICIKLSAgICAgICAgICB0ZXh0IHJ1biBhdCAoNTkzLDQwKSB3aWR0aCAxMTU6ICJUaGlz
IGlzIGV4dHJhIHRleHQiCi0gICAgICAgICAgdGV4dCBydW4gYXQgKDAsNjApIHdpZHRoIDY0NDog
ImluY2x1ZGVkIGZvciB0aGUgcHVycG9zZXMgb2YgbWFraW5nIHRoZSBwYXJhZ3JhcGggbG9uZyBl
bm91Z2ggdG8gaGF2ZSBtb3JlIHRoYW4gb25lIGxpbmUuIgorICAgICAgICAgIFJlbmRlclRleHQg
eyN0ZXh0fSBhdCAoMzU1LDQzKSBzaXplIDYzeDE2CisgICAgICAgICAgICB0ZXh0IHJ1biBhdCAo
MzU1LDQzKSB3aWR0aCA2MzogInNtYWxsLWNhcHMiCisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0
fSBhdCAoNDE4LDQwKSBzaXplIDc1MXg0MAorICAgICAgICAgIHRleHQgcnVuIGF0ICg0MTgsNDAp
IHdpZHRoIDI0NzogIiBpcyBub3Qgc3VwcG9ydGVkIGJ5IHlvdXIgYnJvd3NlcikuICIKKyAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoNjY1LDQwKSB3aWR0aCA4NjogIlRoaXMgaXMgZXh0cmEiCisgICAg
ICAgICAgdGV4dCBydW4gYXQgKDAsNjApIHdpZHRoIDY3MzogInRleHQgaW5jbHVkZWQgZm9yIHRo
ZSBwdXJwb3NlcyBvZiBtYWtpbmcgdGhlIHBhcmFncmFwaCBsb25nIGVub3VnaCB0byBoYXZlIG1v
cmUgdGhhbiBvbmUgbGluZS4iCiAgICAgICBSZW5kZXJUYWJsZSB7VEFCTEV9IGF0ICgwLDQxOSkg
c2l6ZSA3Njh4MzExIFtib3JkZXI6ICgxcHggb3V0c2V0ICM4MDgwODApXQogICAgICAgICBSZW5k
ZXJUYWJsZVNlY3Rpb24ge1RCT0RZfSBhdCAoMSwxKSBzaXplIDc2NngzMDkKICAgICAgICAgICBS
ZW5kZXJUYWJsZVJvdyB7VFJ9IGF0ICgwLDApIHNpemUgNzY2eDI5CkBAIC03Miw5ICs3Miw5IEBA
IGxheWVyIGF0ICgwLDApIHNpemUgNzg0eDc0NgogICAgICAgICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDE3OSw2MCkgd2lkdGggNTE1OiAiUmVtZW1iZXIgdGhhdCBpbiBvcmRlciB0byBlbnN1cmUg
YSBjb21wbGV0ZSB0ZXN0LCB0aGUgcGFyYWdyYXBoIG11c3QgYmUiCiAgICAgICAgICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCw4MCkgd2lkdGggMjMxOiAiZGlzcGxheWVkIG9uIG1vcmUgdGhhbiBv
bmUgbGluZS4iCiAgICAgICAgICAgICAgIFJlbmRlckJsb2NrIHtQfSBhdCAoNCwxOTYpIHNpemUg
NzQ2eDgwCi0gICAgICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUg
NzMxeDYwCi0gICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA2MDY6ICJU
aGUgZmlyc3QgbGluZSBvZiB0aGlzIHBhcmFncmFwaCwgYW5kIG9ubHkgdGhhdCBvbmUsIHNob3Vs
ZCBiZSBkaXNwbGF5ZWQgaW4gc21hbGwtY2FwcyBzdHlsZS4gIgotICAgICAgICAgICAgICAgICAg
dGV4dCBydW4gYXQgKDYwNiwwKSB3aWR0aCAxMTM6ICJUaHVzLCBpZiB0aGUgZmlyc3QiCisgICAg
ICAgICAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgNzQxeDYwCisgICAg
ICAgICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA2MzQ6ICJUaGUgZmlyc3QgbGlu
ZSBvZiB0aGlzIHBhcmFncmFwaCwgYW5kIG9ubHkgdGhhdCBvbmUsIHNob3VsZCBiZSBkaXNwbGF5
ZWQgaW4gc21hbGwtY2FwcyBzdHlsZS4gIgorICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQg
KDYzNCwwKSB3aWR0aCAxMDc6ICJUaHVzLCBpZiB0aGUgZmlyc3QiCiAgICAgICAgICAgICAgICAg
ICB0ZXh0IHJ1biBhdCAoMCwyMCkgd2lkdGggNzMxOiAibGluZSBpcyBub3QgaW4gc21hbGwtY2Fw
cyBzdHlsZSwgT1IgaWYgdGhlIGVudGlyZSBwYXJhZ3JhcGggdHVybnMgb3V0IGluIHNtYWxsLWNh
cHMsIHRoZW4gdGhlIHVzZXIgYWdlbnQgaGFzIgogICAgICAgICAgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsNDApIHdpZHRoIDM1NTogImZhaWxlZCB0aGlzIHRlc3QgKGFsdGhvdWdoIHRoZSBwcm9i
bGVtIG1pZ2h0IGJlIHRoYXQgIgogICAgICAgICAgICAgICAgIFJlbmRlcklubGluZSB7Q09ERX0g
YXQgKDAsMCkgc2l6ZSA2M3gxNgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
Y3NzMS9wc2V1ZG8vbXVsdGlwbGVfcHNldWRvX2VsZW1lbnRzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL3F0L2NzczEvcHNldWRvL211bHRpcGxlX3BzZXVkb19lbGVtZW50cy1l
eHBlY3RlZC50eHQKaW5kZXggYzNiMjE2ZC4uZjQyNDU5NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vcXQvY3NzMS9wc2V1ZG8vbXVsdGlwbGVfcHNldWRvX2VsZW1lbnRzLWV4cGVj
dGVkLnR4dAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9xdC9jc3MxL3BzZXVkby9tdWx0aXBs
ZV9wc2V1ZG9fZWxlbWVudHMtZXhwZWN0ZWQudHh0CkBAIC01MSw4ICs1MSw4IEBAIGxheWVyIGF0
ICgwLDApIHNpemUgNzg0eDExNzAKICAgICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQgKDAs
MCkgc2l6ZSA3M3g2OQogICAgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggNzM6ICJc
IlciCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoNzMsMzgpIHNpemUgNzYyeDkxCi0g
ICAgICAgICAgdGV4dCBydW4gYXQgKDczLDM4KSB3aWR0aCAzNDQ6ICJlIHNob3VsZCBjaGVjayBm
b3IgcXVvdGF0aW9uIHN1cHBvcnQsXCIgaXQgd2FzIHNhaWQuICIKLSAgICAgICAgICB0ZXh0IHJ1
biBhdCAoNDE3LDM4KSB3aWR0aCAzMDg6ICJUaGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgaW4gdGhp
cyBwYXJhZ3JhcGgtLSBhIgorICAgICAgICAgIHRleHQgcnVuIGF0ICg3MywzOCkgd2lkdGggMzUz
OiAiZSBzaG91bGQgY2hlY2sgZm9yIHF1b3RhdGlvbiBzdXBwb3J0LFwiIGl0IHdhcyBzYWlkLiAi
CisgICAgICAgICAgdGV4dCBydW4gYXQgKDQyNiwzOCkgd2lkdGggMzEwOiAiVGhlIGZpcnN0IHR3
byBjaGFyYWN0ZXJzIGluIHRoaXMgcGFyYWdyYXBoLS0gYSIKICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoMCw2OSkgd2lkdGggNzM1OiAiZG91YmxlLXF1b3RlIG1hcmsgYW5kIGEgY2FwaXRhbCAnVyct
LSBzaG91bGQgYmUgMzUwJSBiaWdnZXIgdGhhbiB0aGUgcmVzdCBvZiB0aGUgcGFyYWdyYXBoLCBh
bmQgbWFyb29uIgogICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDg5KSB3aWR0aCA3NjogIihkYXJr
IHJlZCkuICIKICAgICAgICAgICB0ZXh0IHJ1biBhdCAoNzYsODkpIHdpZHRoIDY4MTogIk5vdGUg
dGhhdCB0aGUgaW5jbHVzaW9uIG9mIGJvdGggdGhlIHF1b3RhdGlvbiBtYXJrIGFuZCB0aGUgJ1cn
IGluIHRoZSBmaXJzdC1sZXR0ZXIgc3R5bGUgaXMgbm90IHJlcXVpcmVkIgpAQCAtOTcsOCArOTcs
OCBAQCBsYXllciBhdCAoMCwwKSBzaXplIDc4NHgxMTcwCiAgICAgICAgICAgICAgICAgICBSZW5k
ZXJUZXh0IHsjdGV4dH0gYXQgKDAsMCkgc2l6ZSA3M3g2OQogICAgICAgICAgICAgICAgICAgICB0
ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCA3MzogIlwiVyIKICAgICAgICAgICAgICAgICBSZW5kZXJU
ZXh0IHsjdGV4dH0gYXQgKDczLDM4KSBzaXplIDc0NXgxMTEKLSAgICAgICAgICAgICAgICAgIHRl
eHQgcnVuIGF0ICg3MywzOCkgd2lkdGggMzQ0OiAiZSBzaG91bGQgY2hlY2sgZm9yIHF1b3RhdGlv
biBzdXBwb3J0LFwiIGl0IHdhcyBzYWlkLiAiCi0gICAgICAgICAgICAgICAgICB0ZXh0IHJ1biBh
dCAoNDE3LDM4KSB3aWR0aCAzMDg6ICJUaGUgZmlyc3QgdHdvIGNoYXJhY3RlcnMgaW4gdGhpcyBw
YXJhZ3JhcGgtLSBhIgorICAgICAgICAgICAgICAgICAgdGV4dCBydW4gYXQgKDczLDM4KSB3aWR0
aCAzNTM6ICJlIHNob3VsZCBjaGVjayBmb3IgcXVvdGF0aW9uIHN1cHBvcnQsXCIgaXQgd2FzIHNh
aWQuICIKKyAgICAgICAgICAgICAgICAgIHRleHQgcnVuIGF0ICg0MjYsMzgpIHdpZHRoIDMxMDog
IlRoZSBmaXJzdCB0d28gY2hhcmFjdGVycyBpbiB0aGlzIHBhcmFncmFwaC0tIGEiCiAgICAgICAg
ICAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCw2OSkgd2lkdGggNzM1OiAiZG91YmxlLXF1b3RlIG1h
cmsgYW5kIGEgY2FwaXRhbCAnVyctLSBzaG91bGQgYmUgMzUwJSBiaWdnZXIgdGhhbiB0aGUgcmVz
dCBvZiB0aGUgcGFyYWdyYXBoLCBhbmQgbWFyb29uIgogICAgICAgICAgICAgICAgICAgdGV4dCBy
dW4gYXQgKDAsODkpIHdpZHRoIDc2OiAiKGRhcmsgcmVkKS4gIgogICAgICAgICAgICAgICAgICAg
dGV4dCBydW4gYXQgKDc2LDg5KSB3aWR0aCA2MTg6ICJOb3RlIHRoYXQgdGhlIGluY2x1c2lvbiBv
ZiBib3RoIHRoZSBxdW90YXRpb24gbWFyayBhbmQgdGhlICdXJyBpbiB0aGUgZmlyc3QtbGV0dGVy
IHN0eWxlIGlzIG5vdCIKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL3F0L2NzczIu
MS90MTUwNS1jNTI0LWZvbnQtdmFyLTAwLWItZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vcXQvY3NzMi4xL3QxNTA1LWM1MjQtZm9udC12YXItMDAtYi1leHBlY3RlZC50eHQKaW5k
ZXggMGJkMDI4Mi4uNmUwYzI1ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vcXQv
Y3NzMi4xL3QxNTA1LWM1MjQtZm9udC12YXItMDAtYi1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vcXQvY3NzMi4xL3QxNTA1LWM1MjQtZm9udC12YXItMDAtYi1leHBlY3Rl
ZC50eHQKQEAgLTQsMTIgKzQsMTIgQEAgbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4ODgKICAgUmVu
ZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDg4CiAgICAgUmVuZGVyQm9keSB7Qk9E
WX0gYXQgKDgsMTYpIHNpemUgNzg0eDU2CiAgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkg
c2l6ZSA3ODR4MjAgW2NvbG9yPSMwMDAwODBdCi0gICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBh
dCAoMCwwKSBzaXplIDI3MXgyMAotICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDI3
MTogIlRoaXMgUGFyYWdyYXBoIHNob3VsZCBiZSBpbiBTbWFsbCBDYXBzLiIKKyAgICAgICAgUmVu
ZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjkyeDIwCisgICAgICAgICAgdGV4dCBydW4g
YXQgKDAsMCkgd2lkdGggMjkyOiAiVGhpcyBQYXJhZ3JhcGggc2hvdWxkIGJlIGluIFNtYWxsIENh
cHMuIgogICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgwLDM2KSBzaXplIDc4NHgyMCBbY29sb3I9
IzAwMDA4MF0KLSAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjY2eDIw
Ci0gICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjY2OiAiVGhpcyBTZW50ZW5jZSBz
aG91bGQgYmUgaW4gU21hbGwgQ2Fwcy4gIgorICAgICAgICBSZW5kZXJUZXh0IHsjdGV4dH0gYXQg
KDAsMCkgc2l6ZSAyODl4MjAKKyAgICAgICAgICB0ZXh0IHJ1biBhdCAoMCwwKSB3aWR0aCAyODk6
ICJUaGlzIFNlbnRlbmNlIHNob3VsZCBiZSBpbiBTbWFsbCBDYXBzLiAiCiAgICAgICAgIFJlbmRl
cklubGluZSB7U1BBTn0gYXQgKDAsMCkgc2l6ZSAyMzd4MjAKLSAgICAgICAgICBSZW5kZXJUZXh0
IHsjdGV4dH0gYXQgKDI2NiwwKSBzaXplIDIzN3gyMAotICAgICAgICAgICAgdGV4dCBydW4gYXQg
KDI2NiwwKSB3aWR0aCAyMzc6ICJUaGlzIFNlbnRlbmNlIHNob3VsZCBiZSBOb3JtYWwuIgorICAg
ICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMjg5LDApIHNpemUgMjM3eDIwCisgICAgICAg
ICAgICB0ZXh0IHJ1biBhdCAoMjg5LDApIHdpZHRoIDIzNzogIlRoaXMgU2VudGVuY2Ugc2hvdWxk
IGJlIE5vcm1hbC4iCiAgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXplIDB4
MAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>