<?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>15229</bug_id>
          
          <creation_ts>2007-09-18 02:42:45 -0700</creation_ts>
          <short_desc>[gtk] abstract font management by using pango</short_desc>
          <delta_ts>2008-03-12 08:06:04 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>523.x (Safari 3)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>16942</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sven Herzberg">sven</reporter>
          <assigned_to name="Sven Herzberg">sven</assigned_to>
          <cc>alp</cc>
    
    <cc>cosimoc</cc>
    
    <cc>mh+webkit</cc>
    
    <cc>micke</cc>
    
    <cc>mrowe</cc>
    
    <cc>richard</cc>
    
    <cc>zecke</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>389</commentid>
    <comment_count>0</comment_count>
    <who name="Sven Herzberg">sven</who>
    <bug_when>2007-09-18 02:42:45 -0700</bug_when>
    <thetext>Right now, the FontData and FontPlatformData are really specific for Linux/X11. To enable webkit/gtk on other platforms, we should switch to an approach using pango as far as possible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>387</commentid>
    <comment_count>1</comment_count>
    <who name="Sven Herzberg">sven</who>
    <bug_when>2007-09-18 02:43:23 -0700</bug_when>
    <thetext>I almost have a patch ready.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>207</commentid>
    <comment_count>2</comment_count>
      <attachid>16339</attachid>
    <who name="Sven Herzberg">sven</who>
    <bug_when>2007-09-21 05:14:38 -0700</bug_when>
    <thetext>Created attachment 16339
Proposed Patch v1

Proposed patch; applies to svn rev 25680.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202</commentid>
    <comment_count>3</comment_count>
      <attachid>16339</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-09-21 06:26:44 -0700</bug_when>
    <thetext>Comment on attachment 16339
Proposed Patch v1

I didn&apos;t look very closely at the actual code in the patch as I&apos;m not particularly familiar with font handling in WebCore, but I will point out a few areas in which the code doesn&apos;t match the WebKit style guidelines (&lt;http://webkit.org/coding/coding-style.html&gt;).

* Many newly-added function calls have unneeded whitespace between the function name and the opening parenthesis.

* There are several places where you have extra whitespace around, or incorrect placement of, the * in declarations of pointer variables.  In several places you have extra whitespace around the = operator in assignments.  More generally, we don&apos;t typically use whitespace to line up assignments and declarations.

* In several places you have broken function calls across multiple lines for no apparent reason.  In cases where it&apos;s wrapped due to one argument being the result of a function call, it may be preferable to use a local variable to simplify the code rather than jamming it all into the function call.  In other cases, having all the arguments on the same line may be preferable.

* When checking if a pointer is NULL, !theVariable is preferred over theVariable == 0.

* Declaring local variables at the point of first use is preferred over declaring at the top of a function then initializing later.


Sorry for being so picky!  Hopefully someone can review the real meat of your patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>199</commentid>
    <comment_count>4</comment_count>
      <attachid>16340</attachid>
    <who name="Sven Herzberg">sven</who>
    <bug_when>2007-09-21 08:03:51 -0700</bug_when>
    <thetext>Created attachment 16340
Proposed Patch v2

(In reply to comment #3)
&gt; * Many newly-added function calls have unneeded whitespace between the function
&gt; name and the opening parenthesis.

Fixed.

&gt; * There are several places where you have extra whitespace around, or incorrect
&gt; placement of, the * in declarations of pointer variables.  In several places
&gt; you have extra whitespace around the = operator in assignments.  More
&gt; generally, we don&apos;t typically use whitespace to line up assignments and
&gt; declarations.

Fixed.

&gt; * In several places you have broken function calls across multiple lines for no
&gt; apparent reason.  In cases where it&apos;s wrapped due to one argument being the
&gt; result of a function call, it may be preferable to use a local variable to
&gt; simplify the code rather than jamming it all into the function call.  In other
&gt; cases, having all the arguments on the same line may be preferable.

Fixed. I just didn&apos;t fix this for two calls:
FontPlatformDataGdk.cpp: FontPlatformData::init(),
GlyphPageTreeNodeGdk.cpp: GlyphPage::fill() - introducing a local variable will require adding braces - which in turn will lead up to code that looks almost as scrammed as it does now.

&gt; * When checking if a pointer is NULL, !theVariable is preferred over
&gt; theVariable == 0.

I haven&apos;t done that, it was a plain int that I compared to, but this is fixed too.

&gt; * Declaring local variables at the point of first use is preferred over
&gt; declaring at the top of a function then initializing later.

Fixed.

&gt; Sorry for being so picky!  Hopefully someone can review the real meat of your
&gt; patch soon.

Well, thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198</commentid>
    <comment_count>5</comment_count>
      <attachid>16340</attachid>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2007-09-21 11:24:28 -0700</bug_when>
    <thetext>Comment on attachment 16340
Proposed Patch v2

+    static PangoFontMap* m_fontMap;
+    static GHashTable  * m_hashTable;

These can just become static globals in FontPlatformDataGdk.cpp.

+    gchar const* families[] = {
+        familyName.domString().utf8().data(),

I&apos;m worried that this will give you a junk pointer. String::utf8 returns a CString, and CString::data returns a pointer to its internal null-terminated string, but the temporary CString immediately goes out of scope, which should free the buffer. I think you&apos;ll need to put the CString in a local variable.

+        PangoFontFamily**families = 0;

You&apos;re missing a space after the **.

+        int n_families = 0;

We&apos;d normally call this familyCount or something like that.

+        pango_font_map_list_families (m_fontMap, &amp;families, &amp;n_families);
+                g_hash_table_insert (m_hashTable,

Please remove the spaces before the open parenthesis.

+    bool result(pango_font_description_equal(thisDesc, otherDesc));

I think you should just use the assignment operator here.

+static PangoGlyph pango_font_get_glyph (PangoFont* font, PangoContext* context, gunichar wc)

Please remove the space before the open parenthesis.

+    gint  length = g_unichar_to_utf8(wc, buffer);

Looks like you&apos;ve got an extra space after gint.

+    GList* items = pango_itemize(context, buffer, 0, length, NULL, NULL);
+    g_list_foreach(items, (GFunc)pango_item_free, NULL);

Since this is C++ code, please use 0 instead of NULL.

+            g_warning (&quot;didn&apos;t get 1 glyph but %d&quot;, glyphs-&gt;num_glyphs);

I think it would be better to use our LOG() macros here.

There are a few other places that have a space before the parameter list of a function that I haven&apos;t explicitly called out here.

I don&apos;t think adding braces around the for loops would make the code seem crammed. I do think it would allow you to make the function calls match our coding style better, though.

This looks sane overall (though I don&apos;t know Pango), but we definitely at least need to fix the CString issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>156</commentid>
    <comment_count>6</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-09-22 10:56:58 -0700</bug_when>
    <thetext>This is looking good. I&apos;d actually like to keep the old (non-Pango) font backend code around in the tree so we can continue to do performance comparisons and possibly make use of it as a fallback in certain cases. It could also be useful for avoiding the Pango dependency in any new ports that use Cairo but not Gtk+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59047</commentid>
    <comment_count>7</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-10-21 17:03:47 -0700</bug_when>
    <thetext>Hey, any word on when this patch will be updated to SVN head and marked for review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>59102</commentid>
    <comment_count>8</comment_count>
    <who name="Sven Herzberg">sven</who>
    <bug_when>2007-10-22 01:01:02 -0700</bug_when>
    <thetext>This week</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64694</commentid>
    <comment_count>9</comment_count>
      <attachid>17981</attachid>
    <who name="Sven Herzberg">sven</who>
    <bug_when>2007-12-18 21:58:34 -0800</bug_when>
    <thetext>Created attachment 17981
Proposed patch (v3)

This patch is updated for the new backend name (GTK instead of GDK) and the new source locations (WebCore/platform/graphics/gtk instead of WebCore/platform/gdk). Also, most of the issues should be fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64715</commentid>
    <comment_count>10</comment_count>
      <attachid>17985</attachid>
    <who name="Richard Hult">richard</who>
    <bug_when>2007-12-19 03:39:12 -0800</bug_when>
    <thetext>Created attachment 17985
Updated patch that applies cleanly

The v3 patch doesn&apos;t apply cleanly for me, I had to tweak the last chunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64718</commentid>
    <comment_count>11</comment_count>
    <who name="Mikkel Kruse Johnsen">mikkel</who>
    <bug_when>2007-12-19 04:17:41 -0800</bug_when>
    <thetext>Just compiled on mac with the latest patch and it works. I now have text.

http://www.linet.dk/screenshots/WebKitGtk-MacOSX-Leopard.png

Using jhbuild with native Gtk for mac. http://developer.imendio.com/projects/gtk-macosx/build-instructions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64736</commentid>
    <comment_count>12</comment_count>
      <attachid>17981</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-12-19 09:54:34 -0800</bug_when>
    <thetext>Comment on attachment 17981
Proposed patch (v3)

Patch obsoleted by the next one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64737</commentid>
    <comment_count>13</comment_count>
      <attachid>17985</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-12-19 09:55:10 -0800</bug_when>
    <thetext>Comment on attachment 17985
Updated patch that applies cleanly

r=me with some whitespace cleanups.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64738</commentid>
    <comment_count>14</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-12-19 10:02:49 -0800</bug_when>
    <thetext>Landed in r28864.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64765</commentid>
    <comment_count>15</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-12-19 15:25:12 -0800</bug_when>
    <thetext>Sven: The change broke the build so I had to throw together this fix:

  http://trac.webkit.org/projects/webkit/changeset/28876

Can you look over it and see if it can be made more correct? We need to support older versions of Pango, but should aim to use the best code path available as your patch does too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>64891</commentid>
    <comment_count>16</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2007-12-20 16:38:55 -0800</bug_when>
    <thetext>Commits r28880, r28876, r28865, r28864 were reverted in r28921 to fix this P1 bug:

  http://bugs.webkit.org/show_bug.cgi?id=16542
  [GTK] Text is missing with old Pango version

These patches will need to be fixed to work with older Pango versions (using #if macros where necessary) since most of our users don&apos;t have bleeding edge setups. Future work should be based on the versions of the patches that were landed rather than the ones in this bug report since they were modified to include coding style fixes before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>65061</commentid>
    <comment_count>17</comment_count>
      <attachid>17985</attachid>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2007-12-22 01:26:29 -0800</bug_when>
    <thetext>Comment on attachment 17985
Updated patch that applies cleanly

Clearing r+ flag as the patch as-is not suitable to be landed, and the change in which it was rolled out should be used as the basis for future work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73190</commentid>
    <comment_count>18</comment_count>
      <attachid>19631</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2008-03-10 07:02:57 -0700</bug_when>
    <thetext>Created attachment 19631
Pango font backend.

Took Herzi&apos;s patch and massaged it into a new optional font backend as discussed with alp. The existing backend is called the &apos;freetype&apos; backend, although the files are still suffixed with Gtk.

I&apos;ve done two code changes:
- Use pango_cairo_font_map_get_default to create the font map instead of pango_cairo_font_map_new.
- Free the hash table in the destructor.

The custom font stuff is unimplemented in the pango backend.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73193</commentid>
    <comment_count>19</comment_count>
      <attachid>19632</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2008-03-10 07:14:10 -0700</bug_when>
    <thetext>Created attachment 19632
Add Pango font backend.

Fix configure.ac to use proper variable for font_backend default value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73202</commentid>
    <comment_count>20</comment_count>
      <attachid>19635</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2008-03-10 08:59:39 -0700</bug_when>
    <thetext>Created attachment 19635
Add Pango font backend.

Also guard against no font backend defined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73223</commentid>
    <comment_count>21</comment_count>
      <attachid>19639</attachid>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2008-03-10 11:42:12 -0700</bug_when>
    <thetext>Created attachment 19639
Add Pango font backend.

Do not free the hash table for each instance, it&apos;s a class member... (we are leaking this again now, but I don&apos;t know where to free it).

Remove dead code from FontCustomPlatformDataPango.cpp.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73244</commentid>
    <comment_count>22</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2008-03-10 14:17:12 -0700</bug_when>
    <thetext>Just one comment: discussed the hash table leakage with Sven and Tim Janik, and while it&apos;s technically leaked it does not really matter because we&apos;ll imediately exit the program afterwards (being a class variable).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73453</commentid>
    <comment_count>23</comment_count>
    <who name="Richard Hult">richard</who>
    <bug_when>2008-03-12 06:30:42 -0700</bug_when>
    <thetext>I&apos;ve just tried the latest incarnation of the patch on GTK+ OS X and it works nicely (I couldn&apos;t get it building with qmake though, only auto*). Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73459</commentid>
    <comment_count>24</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-03-12 07:46:36 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; I&apos;ve just tried the latest incarnation of the patch on GTK+ OS X and it works
&gt; nicely (I couldn&apos;t get it building with qmake though, only auto*). Thanks!
&gt; 

Time to get this patch in ;-)

qmake is no longer supported btw.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73460</commentid>
    <comment_count>25</comment_count>
      <attachid>19639</attachid>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-03-12 08:01:47 -0700</bug_when>
    <thetext>Comment on attachment 19639
Add Pango font backend.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>73461</commentid>
    <comment_count>26</comment_count>
    <who name="Alp Toker">alp</who>
    <bug_when>2008-03-12 08:06:04 -0700</bug_when>
    <thetext>Landed in r30989.

This will need more work to become the default font backend.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16339</attachid>
            <date>2007-09-21 05:14:38 -0700</date>
            <delta_ts>2007-09-21 08:03:51 -0700</delta_ts>
            <desc>Proposed Patch v1</desc>
            <filename>fix-15229.patch</filename>
            <type>text/plain</type>
            <size>16132</size>
            <attacher name="Sven Herzberg">sven</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmRkNjUwYi4uNjE1MzJiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAwNy0wOS0yMSAgU3ZlbiBIZXJ6YmVy
ZyAgPHN2ZW5AaW1lbmRpby5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVwbGFjZSB0aGUgZm9udGNvbmZpZy9mcmVldHlwZSBiYXNlZCBmb250
IG1hbmFnZW1lbnQgd2l0aCBhIHBhbmdvCisgICAgICAgIGJhc2VkIG9uZS4gRml4ZXM6CisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjI5CisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwIChGb250RGF0YTo6cGxhdGZvcm1EZXN0
cm95KCkpOiB1cGRhdGVkCisgICAgICAgIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXN0cm95IGNv
ZGUKKyAgICAgICAgKEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoKSk6IGltcGxlbWVudGVk
IGZvbnQgY292ZXJhZ2Ugd2l0aCBwYW5nbworICAgICAgICAqIHBsYXRmb3JtL2dkay9Gb250UGxh
dGZvcm1EYXRhLmg6IHJlcGxhY2VkIGZvbnRjb25maWcgc3BlY2lmaWMKKyAgICAgICAgbWVtYmVy
cyB3aXRoIHBhbmdvLXNwZWNpZmljIG9uZXMKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udFBs
YXRmb3JtRGF0YUdkay5jcHA6IGFkZGVkIHN0YXRpYyBtZW1iZXJzIGZvciB0aGUKKyAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YSBjbGFzcworICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YSgpKTogaW1wbGVtZW50ZWQgdGhlIGZvbnQtbWF0Y2hpbmcKKyAgICAgICAgd2l0
aCBhIFBhbmdvRm9udERlc2NyaXB0aW9uIGluc3RlYWQgb2YgYW4gRmNQYXR0ZXJuOyBpbml0aWFs
aXplIHRoZQorICAgICAgICBzY2FsZWQgZm9udCBieSB1c2luZyB0aGUgQVBJIGZvciBQYW5nb0Nh
aXJvRm9udAorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKTogaW5pdGlhbGl6ZSB0
aGUgUGFuZ29Gb250TWFwIGFuZCBzZXQgdXAgYQorICAgICAgICBoYXNoIHRhYmxlIHRvIHRyYW5z
bGF0ZSB0aGUgZm9udCBmYW1pbHkgbmFtZSBpbnRvIGEgZm9udCBmYW1pbHkKKyAgICAgICAgKEZv
bnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpKTogaW1wbGVtZW50ZWQgYnkgcXVlcnlpbmcg
dGhlCisgICAgICAgIFBhbmdvRm9udEZhbWlseQorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6IGNvbXBhcmUgdGhlIEZvbnRQbGF0Zm9ybURhdGEgYnkKKyAgICAgICAgY29t
cGFyaW5nIHRoZSBmb250IHBvaW50ZXJzIG9yIHRoZSBkZXNjcmliZWQgZm9udHMKKyAgICAgICAg
KiBwbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5vZGVHZGsuY3BwIChwYW5nb19mb250X2dldF9n
bHlwaCgpKToKKyAgICAgICAgYWRkZWQgYSBmdW5jdGlvbiB0byBxdWVyeSBhIGdseXBoIGZyb20g
YSBQYW5nb0ZvbnQKKyAgICAgICAgKEdseXBoUGFnZTo6ZmlsbCgpKTogaW1wbGVtZW50ZWQgdGhl
IGZpbGwgZnVuY3Rpb24gd2l0aCBQYW5nbyBpbnN0ZWFkCisgICAgICAgIG9mIGZvbnRjb25maWcv
ZnJlZXR5cGUKKwogMjAwNy0wOS0yMCAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTQ3NzI0MD4gUmVncmVzc2lvbjogRm9vdGVyIGlzIHRv
byBoaWdoIGluIHByaW50IHByZXZpZXcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0ZvbnREYXRhR2RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcApp
bmRleCAzMGI1ZTcwLi4zYTkwYzQzIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9G
b250RGF0YUdkay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3Bw
CkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAu
dG9rZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBD
ZW50ZXIgVVNBLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNjIsOCArNjMsMTAgQEAgdm9pZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKIAogdm9p
ZCBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBpZiAobV9mb250Lm1fcGF0dGVy
biAmJiAoKEZjUGF0dGVybiopLTEgIT0gbV9mb250Lm1fcGF0dGVybikpCi0gICAgICAgIEZjUGF0
dGVybkRlc3Ryb3kobV9mb250Lm1fcGF0dGVybik7CisgICAgaWYgKG1fZm9udC5tX2ZvbnQgJiYg
bV9mb250Lm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYgKG1fZm9udC5tX2ZvbnQpOworICAgIGlmIChtX2ZvbnQubV9jb250
ZXh0KQorICAgICAgICBnX29iamVjdF91bnJlZiAobV9mb250Lm1fY29udGV4dCk7CiAKICAgICBp
ZiAobV9mb250Lm1fc2NhbGVkRm9udCkKICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJv
eShtX2ZvbnQubV9zY2FsZWRGb250KTsKQEAgLTgzLDIxICs4NiwyNCBAQCBGb250RGF0YSogRm9u
dERhdGE6OnNtYWxsQ2Fwc0ZvbnREYXRhKGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2Ny
aXB0aW9uKSBjbwogCiBib29sIEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0CiB7Ci0gICAgRlRfRmFjZSBmYWNlID0g
Y2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKG1fZm9udC5tX3NjYWxlZEZvbnQpOworICAg
IGJvb2wgcmVzdWx0ID0gdHJ1ZTsKIAotICAgIGlmICghZmFjZSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIFBhbmdvQ292ZXJhZ2UqIHJlcXVlc3RlZCA9IHBhbmdvX2NvdmVyYWdlX2Zyb21f
Ynl0ZXMgKChndWNoYXIqKWNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgUGFuZ29Db3ZlcmFnZSog
YXZhaWxhYmxlID0gcGFuZ29fZm9udF9nZXRfY292ZXJhZ2UgKG1fZm9udC5tX2ZvbnQsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmdv
X2xhbmd1YWdlX2dldF9kZWZhdWx0KCkpOworICAgIHBhbmdvX2NvdmVyYWdlX21heCAocmVxdWVz
dGVkLCBhdmFpbGFibGUpOwogCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
aSsrKSB7Ci0gICAgICAgIGlmIChGY0ZyZWVUeXBlQ2hhckluZGV4KGZhY2UsIGNoYXJhY3RlcnNb
aV0pID09IDApIHsKLSAgICAgICAgICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNl
KG1fZm9udC5tX3NjYWxlZEZvbnQpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICBpZiAoUEFOR09fQ09WRVJBR0VfTk9ORSA9PSBwYW5nb19jb3ZlcmFnZV9nZXQgKHJlcXVlc3Rl
ZCwgaSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFj
ZShtX2ZvbnQubV9zY2FsZWRGb250KTsKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZiAoYXZhaWxh
YmxlKTsKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZiAocmVxdWVzdGVkKTsKIAotICAgIHJldHVy
biB0cnVlOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIHZvaWQgRm9udERhdGE6OmRldGVybWlu
ZVBpdGNoKCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURh
dGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCAxZGIz
YmRkLi40NmIxYzJiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250UGxhdGZv
cm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YS5oCkBA
IC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMu
CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNv
bSAKICAqIENvcHlyaWdodCAoQykgMjAwNyBIb2xnZXIgSGFucyBQZXRlciBGcmV5dGhlcgorICog
Q29weXJpZ2h0IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgogICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCkBAIC0zMCw4ICszMSw3IEBACiAjaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNs
dWRlIDxjYWlyby5oPgotI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZp
Zy9mY2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29jYWlyby5oPgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKQEAgLTM5LDEyICszOSwxNCBAQCBjbGFzcyBGb250UGxhdGZvcm1EYXRh
IHsKIHB1YmxpYzoKICAgICBjbGFzcyBEZWxldGVkIHt9OwogICAgIEZvbnRQbGF0Zm9ybURhdGEo
RGVsZXRlZCkKLSAgICAgICAgOiBtX3BhdHRlcm4ocmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4q
PigtMSkpCisgICAgICAgIDogbV9jb250ZXh0KDApCisgICAgICAgICwgbV9mb250KHJlaW50ZXJw
cmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQogICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQogICAg
ICAgICB7IH0KIAogICAgIEZvbnRQbGF0Zm9ybURhdGEoKQotICAgICAgICA6IG1fcGF0dGVybigw
KQorICAgICAgICA6IG1fY29udGV4dCgwKQorICAgICAgICAsIG1fZm9udCgwKQogICAgICAgICAs
IG1fc2NhbGVkRm9udCgwKQogICAgICAgICB7IH0KIApAQCAtNjUsNyArNjcsMTEgQEAgcHVibGlj
OgogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsK
IAotICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOworICAgIHN0YXRpYyBQYW5nb0ZvbnRNYXAqIG1f
Zm9udE1hcDsKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSAgKiBtX2hhc2hUYWJsZTsKKworICAgIFBh
bmdvQ29udGV4dCogbV9jb250ZXh0OworICAgIFBhbmdvRm9udCAgICogbV9mb250OwogICAgIEZv
bnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBjYWlyb19zY2FsZWRfZm9udF90
KiBtX3NjYWxlZEZvbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9u
dFBsYXRmb3JtRGF0YUdkay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1E
YXRhR2RrLmNwcAppbmRleCA2ZmYxZWM5Li40MzYzYjEwIDEwMDY0NAotLS0gYS9XZWJDb3JlL3Bs
YXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcApAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdo
dCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJp
Z2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBQ
aW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgpAQCAtMzEsODYgKzMyLDYzIEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgi
Ci0jaW5jbHVkZSAiY2Fpcm8tZnQuaCIKICNpbmNsdWRlICJjYWlyby5oIgotI2luY2x1ZGUgPGZv
bnRjb25maWcvZmNmcmVldHlwZS5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKK1BhbmdvRm9udE1hcCogRm9udFBsYXRmb3JtRGF0YTo6bV9mb250TWFwICAg
PSAwOworR0hhc2hUYWJsZSogICBGb250UGxhdGZvcm1EYXRhOjptX2hhc2hUYWJsZSA9IDA7CisK
IEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9u
JiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5TmFtZSkKLSAgICA6
IG1fcGF0dGVybigwKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKICAgICAs
IG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikKICAgICAsIG1fc2NhbGVkRm9udCgw
KQogewogICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsKIAotICAgIENTdHJpbmcgZmFtaWx5
TmFtZVN0cmluZyA9IGZhbWlseU5hbWUuZG9tU3RyaW5nKCkudXRmOCgpOwotICAgIGNvbnN0IGNo
YXIqIGZjZmFtaWx5ID0gZmFtaWx5TmFtZVN0cmluZy5kYXRhKCk7Ci0gICAgaW50IGZjc2xhbnQg
PSBGQ19TTEFOVF9ST01BTjsKLSAgICBpbnQgZmN3ZWlnaHQgPSBGQ19XRUlHSFRfTk9STUFMOwot
ICAgIGZsb2F0IGZjc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKTsKLSAgICBp
ZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQotICAgICAgICBmY3NsYW50ID0gRkNfU0xBTlRf
SVRBTElDOwotICAgIGlmIChmb250RGVzY3JpcHRpb24uYm9sZCgpKQotICAgICAgICBmY3dlaWdo
dCA9IEZDX1dFSUdIVF9CT0xEOwotCi0gICAgaW50IHR5cGUgPSBmb250RGVzY3JpcHRpb24uZ2Vu
ZXJpY0ZhbWlseSgpOwotCi0gICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRl
KCk7Ci0gICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNlOwotICAgIGNhaXJvX2ZvbnRfb3B0
aW9uc190KiBvcHRpb25zOwotICAgIGNhaXJvX21hdHJpeF90KiBmb250TWF0cml4OwotCi0gICAg
aWYgKCFGY1BhdHRlcm5BZGRTdHJpbmcocGF0dGVybiwgRkNfRkFNSUxZLCByZWludGVycHJldF9j
YXN0PGNvbnN0IEZjQ2hhcjgqPihmY2ZhbWlseSkpKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJu
OwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpT
ZXJpZkZhbWlseToKLSAgICAgICAgICAgIGZjZmFtaWx5ID0gInNlcmlmIjsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5Ogot
ICAgICAgICAgICAgZmNmYW1pbHkgPSAic2Fucy1zZXJpZiI7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKLSAgICAgICAg
ICAgIGZjZmFtaWx5ID0gIm1vbm9zcGFjZSI7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgotICAgICAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6U3RhbmRhcmRGYW1pbHk6Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBmY2Zh
bWlseSA9ICJzYW5zLXNlcmlmIjsKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRp
b24gPSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX25ldyAoKTsKKyAgICBnY2hhciBjb25zdCogZmFt
aWxpZXNbXSA9IHsKKyAgICAgICAgZmFtaWx5TmFtZS5kb21TdHJpbmcoKS51dGY4KCkuZGF0YSgp
LAorICAgICAgICBOVUxMCisgICAgfTsKKworICAgIHN3aXRjaCAoZm9udERlc2NyaXB0aW9uLmdl
bmVyaWNGYW1pbHkoKSkgeworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToK
KyAgICAgICAgZmFtaWxpZXNbMV0gPSAic2VyaWYiOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICBmYW1pbGllc1sxXSA9
ICJzYW5zIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9z
cGFjZUZhbWlseToKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAibW9ub3NwYWNlIjsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgorICAgIGNhc2UgRm9u
dERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAgICBmYW1p
bGllc1sxXSA9ICJzYW5zIjsKICAgICB9CiAKLSAgICBpZiAoIUZjUGF0dGVybkFkZFN0cmluZyhw
YXR0ZXJuLCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZjZmFt
aWx5KSkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgaWYgKCFGY1BhdHRlcm5BZGRJ
bnRlZ2VyKHBhdHRlcm4sIEZDX1NMQU5ULCBmY3NsYW50KSkKLSAgICAgICAgZ290byBmcmVlUGF0
dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfV0VJR0hULCBm
Y3dlaWdodCkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgaWYgKCFGY1BhdHRlcm5B
ZGREb3VibGUocGF0dGVybiwgRkNfUElYRUxfU0laRSwgZmNzaXplKSkKLSAgICAgICAgZ290byBm
cmVlUGF0dGVybjsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9hYnNvbHV0ZV9zaXpl
IChkZXNjcmlwdGlvbiwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogUEFOR09fU0NB
TEUpOworCisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5ib2xkKCkpCisgICAgICAgIHBhbmdvX2Zv
bnRfZGVzY3JpcHRpb25fc2V0X3dlaWdodCAoZGVzY3JpcHRpb24sIFBBTkdPX1dFSUdIVF9CT0xE
KTsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBwYW5nb19mb250
X2Rlc2NyaXB0aW9uX3NldF9zdHlsZSAoZGVzY3JpcHRpb24sIFBBTkdPX1NUWUxFX0lUQUxJQyk7
CisKKyAgICBtX2NvbnRleHQgICAgPSBwYW5nb19jYWlyb19mb250X21hcF9jcmVhdGVfY29udGV4
dCAoUEFOR09fQ0FJUk9fRk9OVF9NQVAgKG1fZm9udE1hcCkpOwogCi0gICAgRmNDb25maWdTdWJz
dGl0dXRlKE5VTEwsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKLSAgICBGY0RlZmF1bHRTdWJz
dGl0dXRlKHBhdHRlcm4pOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAwOyAhbV9mb250ICYm
IGkgPCBHX05fRUxFTUVOVFMgKGZhbWlsaWVzKTsgaSsrKSB7CisgICAgICAgIHBhbmdvX2ZvbnRf
ZGVzY3JpcHRpb25fc2V0X2ZhbWlseSAoZGVzY3JpcHRpb24sIGZhbWlsaWVzW2ldKTsKKyAgICAg
ICAgbV9mb250ID0gcGFuZ29fZm9udF9tYXBfbG9hZF9mb250IChtX2ZvbnRNYXAsIG1fY29udGV4
dCwgZGVzY3JpcHRpb24pOworICAgIH0KIAotICAgIEZjUmVzdWx0IGZjcmVzdWx0OwotICAgIG1f
cGF0dGVybiA9IEZjRm9udE1hdGNoKE5VTEwsIHBhdHRlcm4sICZmY3Jlc3VsdCk7CiAgICAgLy8g
RklYTUU6IHNob3VsZCB3ZSBzZXQgc29tZSBkZWZhdWx0IGZvbnQ/Ci0gICAgaWYgKCFtX3BhdHRl
cm4pCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgZm9udEZhY2UgPSBjYWlyb19mdF9m
b250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKG1fcGF0dGVybik7Ci0gICAgZm9udE1hdHJpeCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fbWF0cml4X3QqPihtYWxsb2Moc2l6ZW9mKGNhaXJvX21h
dHJpeF90KSkpOwotICAgIGNhaXJvX21hdHJpeF90IGN0bTsKLSAgICBjYWlyb19tYXRyaXhfaW5p
dF9zY2FsZShmb250TWF0cml4LCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSwgbV9m
b250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwotICAgIGNhaXJvX21hdHJpeF9pbml0X2lk
ZW50aXR5KCZjdG0pOwotICAgIG9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNfY3JlYXRlKCk7
Ci0gICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCBm
b250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKLSAgICBjYWlyb19mb250X2ZhY2VfZGVzdHJveShm
b250RmFjZSk7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Ci0gICAg
ZnJlZShmb250TWF0cml4KTsKLQotZnJlZVBhdHRlcm46Ci0gICAgRmNQYXR0ZXJuRGVzdHJveShw
YXR0ZXJuKTsKKyAgICBpZiAobV9mb250KQorICAgICAgICBtX3NjYWxlZEZvbnQgPSBwYW5nb19j
YWlyb19mb250X2dldF9zY2FsZWRfZm9udCAoUEFOR09fQ0FJUk9fRk9OVCAobV9mb250KSk7CisK
KyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUgKGRlc2NyaXB0aW9uKTsKIH0KIAogYm9v
bCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKQEAgLTExOSwxMCArOTcsMzAgQEAgYm9vbCBGb250
UGxhdGZvcm1EYXRhOjppbml0KCkKICAgICBpZiAoaW5pdGlhbGl6ZWQpCiAgICAgICAgIHJldHVy
biB0cnVlOwogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICBpZiAoIUZjSW5pdCgpKSB7Ci0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgaW5pdCBmb250IGNvbmZpZyBsaWJyYXJ5XG4i
KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2ZvbnRNYXApCisgICAgICAg
IG1fZm9udE1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX25ldyAoKTsKKyAgICBpZiAoIW1faGFz
aFRhYmxlKSB7CisgICAgICAgIFBhbmdvRm9udEZhbWlseSoqZmFtaWxpZXMgICA9IDA7CisgICAg
ICAgIGludCAgICAgICAgICAgICAgbl9mYW1pbGllcyA9IDA7CisKKyAgICAgICAgbV9oYXNoVGFi
bGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19zdHJfaGFzaCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19zdHJfZXF1YWwsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfZnJlZSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYpOworCisgICAgICAgIHBhbmdv
X2ZvbnRfbWFwX2xpc3RfZmFtaWxpZXMgKG1fZm9udE1hcCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJmZhbWlsaWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmbl9mYW1pbGllcyk7CisKKyAgICAgICAgZm9yIChpbnQgZmFtaWx5ID0gMDsg
ZmFtaWx5IDwgbl9mYW1pbGllczsgZmFtaWx5KyspCisgICAgICAgICAgICAgICAgZ19oYXNoX3Rh
YmxlX2luc2VydCAobV9oYXNoVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ19zdHJkdXAgKHBhbmdvX2ZvbnRfZmFtaWx5X2dldF9uYW1lIChmYW1pbGllc1tmYW1p
bHldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3RfcmVm
IChmYW1pbGllc1tmYW1pbHldKSk7CisKKyAgICAgICAgZ19mcmVlIChmYW1pbGllcyk7CiAgICAg
fQorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTEzMiwxMCArMTMwLDE1IEBAIEZvbnRQbGF0
Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKIAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjpp
c0ZpeGVkUGl0Y2goKQogewotICAgIGludCBzcGFjaW5nOwotICAgIGlmIChGY1BhdHRlcm5HZXRJ
bnRlZ2VyKG1fcGF0dGVybiwgRkNfU1BBQ0lORywgMCwgJnNwYWNpbmcpID09IEZjUmVzdWx0TWF0
Y2gpCi0gICAgICAgIHJldHVybiBzcGFjaW5nID09IEZDX01PTk87Ci0gICAgcmV0dXJuIGZhbHNl
OworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbjsKKyAgICBQYW5nb0ZvbnRG
YW1pbHkqIGZhbWlseTsKKworICAgIGRlc2NyaXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmliZV93
aXRoX2Fic29sdXRlX3NpemUgKG1fZm9udCk7CisgICAgZmFtaWx5ID0gcmVpbnRlcnByZXRfY2Fz
dDxQYW5nb0ZvbnRGYW1pbHkqPgorICAgICAgICAgICAgKGdfaGFzaF90YWJsZV9sb29rdXAgKG1f
aGFzaFRhYmxlLCBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9mYW1pbHkgKGRlc2NyaXB0aW9u
KSkpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZSAoZGVzY3JpcHRpb24pOworCisg
ICAgcmV0dXJuIHBhbmdvX2ZvbnRfZmFtaWx5X2lzX21vbm9zcGFjZSAoZmFtaWx5KTsKIH0KIAog
dm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdApAQCAtMTQ3
LDEyICsxNTAsMTggQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KGNhaXJvX3QqIGNy
KSBjb25zdAogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcGF0dGVybiA9PSBvdGhlci5t
X3BhdHRlcm4pCisgICAgaWYgKG1fZm9udCA9PSBvdGhlci5tX2ZvbnQpCiAgICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmIChtX3BhdHRlcm4gPT0gMCB8fCBtX3BhdHRlcm4gPT0gcmVpbnRlcnBy
ZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkKLSAgICAgICAgICAgIHx8IG90aGVyLm1fcGF0dGVybiA9
PSAwIHx8IG90aGVyLm1fcGF0dGVybiA9PSByZWludGVycHJldF9jYXN0PEZjUGF0dGVybio+KC0x
KSkKKyAgICBpZiAobV9mb250ID09IDAgfHwgbV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFu
Z29Gb250Kj4oLTEpCisgICAgICAgICAgICB8fCBvdGhlci5tX2ZvbnQgPT0gMCB8fCBvdGhlci5t
X2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpCiAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gRmNQYXR0ZXJuRXF1YWwobV9wYXR0ZXJuLCBvdGhlci5tX3Bh
dHRlcm4pOworCisgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIHRoaXNEZXNjID0gcGFuZ29fZm9u
dF9kZXNjcmliZSAobV9mb250KTsKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogb3RoZXJEZXNj
ID0gcGFuZ29fZm9udF9kZXNjcmliZSAob3RoZXIubV9mb250KTsKKyAgICBib29sIHJlc3VsdChw
YW5nb19mb250X2Rlc2NyaXB0aW9uX2VxdWFsICh0aGlzRGVzYywgb3RoZXJEZXNjKSk7CisgICAg
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlIChvdGhlckRlc2MpOworICAgIHBhbmdvX2ZvbnRf
ZGVzY3JpcHRpb25fZnJlZSAodGhpc0Rlc2MpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0K
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNw
cCBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRyZWVOb2RlR2RrLmNwcAppbmRleCA1
OGMxNmUyLi5kNDgwZDFkIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBh
Z2VUcmVlTm9kZUdkay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJl
ZU5vZGVHZGsuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgogICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgQWxwIFRva2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgorICogQ29weXJpZ2h0
IChDKSAyMDA3IFBpb25lZXIgUmVzZWFyY2ggQ2VudGVyIFVTQSwgSW5jLgogICogQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKQEAgLTMzLDIwICszNCw2MCBAQAogI2luY2x1
ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCiAKICNpbmNsdWRlICJGb250RGF0YS5oIgorI2luY2x1
ZGUgPHBhbmdvL3BhbmdvLWZvbnQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1ib29sIEds
eXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0
IEZvbnREYXRhKiBmb250RGF0YSkKK3N0YXRpYyBQYW5nb0dseXBoIHBhbmdvX2ZvbnRfZ2V0X2ds
eXBoIChQYW5nb0ZvbnQqIGZvbnQsIFBhbmdvQ29udGV4dCogY29udGV4dCwgZ3VuaWNoYXIgd2Mp
CiB7Ci0gICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9ja19mYWNlKGZv
bnREYXRhLT5tX2ZvbnQubV9zY2FsZWRGb250KTsKKyAgICBQYW5nb0dseXBoIHJlc3VsdCA9IDA7
CisgICAgR0xpc3QqIGl0ZW1zOworICAgIGdjaGFyIGJ1ZmZlcls3XTsKKyAgICBnaW50ICBsZW5n
dGg7CisKKyAgICBsZW5ndGggPSBnX3VuaWNoYXJfdG9fdXRmOCAod2MsIGJ1ZmZlcik7CisgICAg
Z19yZXR1cm5fdmFsX2lmX2ZhaWwgKGxlbmd0aCAhPSAwLCAwKTsKKworICAgIGl0ZW1zID0gcGFu
Z29faXRlbWl6ZSAoY29udGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlciwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICBsZW5ndGgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgTlVMTCk7CisKKyAgICBpZiAoZ19saXN0X2xlbmd0aCAoaXRlbXMpID09
IDEpIHsKKyAgICAgICAgUGFuZ29HbHlwaFN0cmluZyogZ2x5cGhzID0gcGFuZ29fZ2x5cGhfc3Ry
aW5nX25ldyAoKTsKKworICAgICAgICBwYW5nb19zaGFwZSAoYnVmZmVyLAorICAgICAgICAgICAg
ICAgICAgICAgbGVuZ3RoLAorICAgICAgICAgICAgICAgICAgICAgJigoUGFuZ29JdGVtKilpdGVt
cy0+ZGF0YSktPmFuYWx5c2lzLAorICAgICAgICAgICAgICAgICAgICAgZ2x5cGhzKTsKKworICAg
ICAgICBpZiAoZ2x5cGhzLT5udW1fZ2x5cGhzID09IDEpCisgICAgICAgICAgICByZXN1bHQgPSBn
bHlwaHMtPmdseXBoc1swXS5nbHlwaDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ193YXJu
aW5nICgiZGlkbid0IGdldCAxIGdseXBoIGJ1dCAlZCIsIGdseXBocy0+bnVtX2dseXBocyk7CisK
KyAgICAgICAgcGFuZ29fZ2x5cGhfc3RyaW5nX2ZyZWUgKGdseXBocyk7CisgICAgfQogCi0gICAg
aWYgKCFmYWNlKQorICAgIGdfbGlzdF9mb3JlYWNoIChpdGVtcywgKEdGdW5jKXBhbmdvX2l0ZW1f
ZnJlZSwgTlVMTCk7CisgICAgZ19saXN0X2ZyZWUgICAgKGl0ZW1zKTsKKworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZvbnREYXRhKQoreworICAgIGlmICghZm9u
dERhdGEtPm1fZm9udC5tX2ZvbnQgfHwgZm9udERhdGEtPm1fZm9udC5tX2ZvbnQgPT0gcmVpbnRl
cnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBidWZmZXJMZW5ndGg7IGkrKykKLSAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgoaSwgRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0p
LCBmb250RGF0YSk7Ci0KLSAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZShmb250
RGF0YS0+bV9mb250Lm1fc2NhbGVkRm9udCk7CisgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4
KGksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhbmdvX2ZvbnRfZ2V0X2dseXBoKGZv
bnREYXRhLT5tX2ZvbnQubV9mb250LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb250RGF0YS0+bV9mb250Lm1fY29udGV4dCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnVmZmVyW2ldKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgZm9udERhdGEpOwogCiAgICAgcmV0dXJuIHRydWU7CiB9
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>16340</attachid>
            <date>2007-09-21 08:03:51 -0700</date>
            <delta_ts>2007-12-18 21:58:34 -0800</delta_ts>
            <desc>Proposed Patch v2</desc>
            <filename>fix-15229-v2.patch</filename>
            <type>text/plain</type>
            <size>15944</size>
            <attacher name="Sven Herzberg">sven</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
ZmRkNjUwYi4uNjE1MzJiYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAwNy0wOS0yMSAgU3ZlbiBIZXJ6YmVy
ZyAgPHN2ZW5AaW1lbmRpby5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVwbGFjZSB0aGUgZm9udGNvbmZpZy9mcmVldHlwZSBiYXNlZCBmb250
IG1hbmFnZW1lbnQgd2l0aCBhIHBhbmdvCisgICAgICAgIGJhc2VkIG9uZS4gRml4ZXM6CisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjI5CisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3BwIChGb250RGF0YTo6cGxhdGZvcm1EZXN0
cm95KCkpOiB1cGRhdGVkCisgICAgICAgIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXN0cm95IGNv
ZGUKKyAgICAgICAgKEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoKSk6IGltcGxlbWVudGVk
IGZvbnQgY292ZXJhZ2Ugd2l0aCBwYW5nbworICAgICAgICAqIHBsYXRmb3JtL2dkay9Gb250UGxh
dGZvcm1EYXRhLmg6IHJlcGxhY2VkIGZvbnRjb25maWcgc3BlY2lmaWMKKyAgICAgICAgbWVtYmVy
cyB3aXRoIHBhbmdvLXNwZWNpZmljIG9uZXMKKyAgICAgICAgKiBwbGF0Zm9ybS9nZGsvRm9udFBs
YXRmb3JtRGF0YUdkay5jcHA6IGFkZGVkIHN0YXRpYyBtZW1iZXJzIGZvciB0aGUKKyAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YSBjbGFzcworICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YSgpKTogaW1wbGVtZW50ZWQgdGhlIGZvbnQtbWF0Y2hpbmcKKyAgICAgICAgd2l0
aCBhIFBhbmdvRm9udERlc2NyaXB0aW9uIGluc3RlYWQgb2YgYW4gRmNQYXR0ZXJuOyBpbml0aWFs
aXplIHRoZQorICAgICAgICBzY2FsZWQgZm9udCBieSB1c2luZyB0aGUgQVBJIGZvciBQYW5nb0Nh
aXJvRm9udAorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKTogaW5pdGlhbGl6ZSB0
aGUgUGFuZ29Gb250TWFwIGFuZCBzZXQgdXAgYQorICAgICAgICBoYXNoIHRhYmxlIHRvIHRyYW5z
bGF0ZSB0aGUgZm9udCBmYW1pbHkgbmFtZSBpbnRvIGEgZm9udCBmYW1pbHkKKyAgICAgICAgKEZv
bnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpKTogaW1wbGVtZW50ZWQgYnkgcXVlcnlpbmcg
dGhlCisgICAgICAgIFBhbmdvRm9udEZhbWlseQorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6IGNvbXBhcmUgdGhlIEZvbnRQbGF0Zm9ybURhdGEgYnkKKyAgICAgICAgY29t
cGFyaW5nIHRoZSBmb250IHBvaW50ZXJzIG9yIHRoZSBkZXNjcmliZWQgZm9udHMKKyAgICAgICAg
KiBwbGF0Zm9ybS9nZGsvR2x5cGhQYWdlVHJlZU5vZGVHZGsuY3BwIChwYW5nb19mb250X2dldF9n
bHlwaCgpKToKKyAgICAgICAgYWRkZWQgYSBmdW5jdGlvbiB0byBxdWVyeSBhIGdseXBoIGZyb20g
YSBQYW5nb0ZvbnQKKyAgICAgICAgKEdseXBoUGFnZTo6ZmlsbCgpKTogaW1wbGVtZW50ZWQgdGhl
IGZpbGwgZnVuY3Rpb24gd2l0aCBQYW5nbyBpbnN0ZWFkCisgICAgICAgIG9mIGZvbnRjb25maWcv
ZnJlZXR5cGUKKwogMjAwNy0wOS0yMCAgQWRhIENoYW4gIDxhZGFjaGFuQGFwcGxlLmNvbT4KIAog
ICAgICAgICA8cmRhcjovL3Byb2JsZW0vNTQ3NzI0MD4gUmVncmVzc2lvbjogRm9vdGVyIGlzIHRv
byBoaWdoIGluIHByaW50IHByZXZpZXcKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ2Rr
L0ZvbnREYXRhR2RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnREYXRhR2RrLmNwcApp
bmRleCAzMGI1ZTcwLi4yYWU2NTkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9G
b250RGF0YUdkay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udERhdGFHZGsuY3Bw
CkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlr
ZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRva2VyIDxhbHAu
dG9rZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5z
IFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBD
ZW50ZXIgVVNBLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dApAQCAtNjIsOCArNjMsMTAgQEAgdm9pZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0KCkKIAogdm9p
ZCBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBpZiAobV9mb250Lm1fcGF0dGVy
biAmJiAoKEZjUGF0dGVybiopLTEgIT0gbV9mb250Lm1fcGF0dGVybikpCi0gICAgICAgIEZjUGF0
dGVybkRlc3Ryb3kobV9mb250Lm1fcGF0dGVybik7CisgICAgaWYgKG1fZm9udC5tX2ZvbnQgJiYg
bV9mb250Lm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkKKyAgICAg
ICAgZ19vYmplY3RfdW5yZWYobV9mb250Lm1fZm9udCk7CisgICAgaWYgKG1fZm9udC5tX2NvbnRl
eHQpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZm9udC5tX2NvbnRleHQpOwogCiAgICAgaWYg
KG1fZm9udC5tX3NjYWxlZEZvbnQpCiAgICAgICAgIGNhaXJvX3NjYWxlZF9mb250X2Rlc3Ryb3ko
bV9mb250Lm1fc2NhbGVkRm9udCk7CkBAIC04MywyMSArODYsMjMgQEAgRm9udERhdGEqIEZvbnRE
YXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlw
dGlvbikgY28KIAogYm9vbCBGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAogewotICAgIEZUX0ZhY2UgZmFjZSA9IGNh
aXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX2ZvbnQubV9zY2FsZWRGb250KTsKKyAgICBi
b29sIHJlc3VsdCA9IHRydWU7CiAKLSAgICBpZiAoIWZhY2UpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICBQYW5nb0NvdmVyYWdlKiByZXF1ZXN0ZWQgPSBwYW5nb19jb3ZlcmFnZV9mcm9tX2J5
dGVzKChndWNoYXIqKWNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgUGFuZ29Db3ZlcmFnZSogYXZh
aWxhYmxlID0gcGFuZ29fZm9udF9nZXRfY292ZXJhZ2UobV9mb250Lm1fZm9udCwgcGFuZ29fbGFu
Z3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisgICAgcGFuZ29fY292ZXJhZ2VfbWF4KHJlcXVlc3RlZCwg
YXZhaWxhYmxlKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykg
ewotICAgICAgICBpZiAoRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBjaGFyYWN0ZXJzW2ldKSA9
PSAwKSB7Ci0gICAgICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZShtX2Zv
bnQubV9zY2FsZWRGb250KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgaWYg
KFBBTkdPX0NPVkVSQUdFX05PTkUgPT0gcGFuZ29fY292ZXJhZ2VfZ2V0KHJlcXVlc3RlZCwgaSkp
IHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tfZmFjZShtX2Zv
bnQubV9zY2FsZWRGb250KTsKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZihhdmFpbGFibGUpOwor
ICAgIHBhbmdvX2NvdmVyYWdlX3VucmVmKHJlcXVlc3RlZCk7CiAKLSAgICByZXR1cm4gdHJ1ZTsK
KyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIEZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgp
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhLmgKaW5kZXggMWRiM2JkZC4uNDZl
YTM2NiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YS5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtNSw2ICs1
LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzAsOCArMzEsNyBAQAogI2luY2x1ZGUgIkds
eXBoQnVmZmVyLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8Y2Fp
cm8uaD4KLSNpbmNsdWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVl
dHlwZS5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0zOSwxMiArMzksMTQgQEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJs
aWM6CiAgICAgY2xhc3MgRGVsZXRlZCB7fTsKICAgICBGb250UGxhdGZvcm1EYXRhKERlbGV0ZWQp
Ci0gICAgICAgIDogbV9wYXR0ZXJuKHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpKQor
ICAgICAgICA6IG1fY29udGV4dCgwKQorICAgICAgICAsIG1fZm9udChyZWludGVycHJldF9jYXN0
PFBhbmdvRm9udCo+KC0xKSkKICAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKICAgICAgICAgeyB9
CiAKICAgICBGb250UGxhdGZvcm1EYXRhKCkKLSAgICAgICAgOiBtX3BhdHRlcm4oMCkKKyAgICAg
ICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkKICAgICAgICAgLCBtX3NjYWxl
ZEZvbnQoMCkKICAgICAgICAgeyB9CiAKQEAgLTU5LDEzICs2MSwxNyBAQCBwdWJsaWM6CiAKICAg
ICB1bnNpZ25lZCBoYXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHVpbnRwdHJfdCBoYXNoQ29k
ZXNbMV0gPSB7IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3NjYWxlZEZvbnQpIH07Ci0g
ICAgICAgIHJldHVybiBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaCggcmVpbnRlcnByZXRfY2FzdDxV
Q2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7Cisg
ICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7cmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fc2NhbGVkRm9udCl9OworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhh
c2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMp
IC8gc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKIAotICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOworICAg
IHN0YXRpYyBQYW5nb0ZvbnRNYXAqIG1fZm9udE1hcDsKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSAg
KiBtX2hhc2hUYWJsZTsKKworICAgIFBhbmdvQ29udGV4dCogbV9jb250ZXh0OworICAgIFBhbmdv
Rm9udCogbV9mb250OwogICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAg
ICBjYWlyb19zY2FsZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9nZGsvRm9udFBsYXRmb3JtRGF0YUdkay5jcHAgYi9XZWJDb3JlL3BsYXRm
b3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcAppbmRleCA2ZmYxZWM5Li42MjQ2MWE2IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9Gb250UGxhdGZvcm1EYXRhR2RrLmNwcApAQCAtNiw2
ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxA
Z21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwQGF0b2tlci5j
b20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAq
IENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KICAq
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgpAQCAtMzEsODYgKzMyLDYzIEBACiAj
aW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCi0jaW5jbHVkZSAiY2Fpcm8tZnQuaCIKICNpbmNsdWRlICJj
YWlyby5oIgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgogI2luY2x1ZGUgPGFz
c2VydC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1BhbmdvRm9udE1hcCogRm9udFBsYXRm
b3JtRGF0YTo6bV9mb250TWFwICAgPSAwOworR0hhc2hUYWJsZSogICBGb250UGxhdGZvcm1EYXRh
OjptX2hhc2hUYWJsZSA9IDA7CisKIEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEo
Y29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmlu
ZyYgZmFtaWx5TmFtZSkKLSAgICA6IG1fcGF0dGVybigwKQorICAgIDogbV9jb250ZXh0KDApCisg
ICAgLCBtX2ZvbnQoMCkKICAgICAsIG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikK
ICAgICAsIG1fc2NhbGVkRm9udCgwKQogewogICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsK
IAotICAgIENTdHJpbmcgZmFtaWx5TmFtZVN0cmluZyA9IGZhbWlseU5hbWUuZG9tU3RyaW5nKCku
dXRmOCgpOwotICAgIGNvbnN0IGNoYXIqIGZjZmFtaWx5ID0gZmFtaWx5TmFtZVN0cmluZy5kYXRh
KCk7Ci0gICAgaW50IGZjc2xhbnQgPSBGQ19TTEFOVF9ST01BTjsKLSAgICBpbnQgZmN3ZWlnaHQg
PSBGQ19XRUlHSFRfTk9STUFMOwotICAgIGZsb2F0IGZjc2l6ZSA9IGZvbnREZXNjcmlwdGlvbi5j
b21wdXRlZFNpemUoKTsKLSAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQotICAgICAg
ICBmY3NsYW50ID0gRkNfU0xBTlRfSVRBTElDOwotICAgIGlmIChmb250RGVzY3JpcHRpb24uYm9s
ZCgpKQotICAgICAgICBmY3dlaWdodCA9IEZDX1dFSUdIVF9CT0xEOwotCi0gICAgaW50IHR5cGUg
PSBmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpOwotCi0gICAgRmNQYXR0ZXJuKiBwYXR0
ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7Ci0gICAgY2Fpcm9fZm9udF9mYWNlX3QqIGZvbnRGYWNl
OwotICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zOwotICAgIGNhaXJvX21hdHJpeF90
KiBmb250TWF0cml4OwotCi0gICAgaWYgKCFGY1BhdHRlcm5BZGRTdHJpbmcocGF0dGVybiwgRkNf
RkFNSUxZLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmY2ZhbWlseSkpKQotICAg
ICAgICBnb3RvIGZyZWVQYXR0ZXJuOwotCi0gICAgc3dpdGNoICh0eXBlKSB7Ci0gICAgICAgIGNh
c2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZhbWlseToKLSAgICAgICAgICAgIGZjZmFtaWx5ID0g
InNlcmlmIjsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlv
bjo6U2Fuc1NlcmlmRmFtaWx5OgotICAgICAgICAgICAgZmNmYW1pbHkgPSAic2Fucy1zZXJpZiI7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9z
cGFjZUZhbWlseToKLSAgICAgICAgICAgIGZjZmFtaWx5ID0gIm1vbm9zcGFjZSI7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgotICAg
ICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6Ci0gICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICBmY2ZhbWlseSA9ICJzYW5zLXNlcmlmIjsKKyAgICBnY2hhciBjb25z
dCogZmFtaWxpZXNbXSA9IHsKKyAgICAgICAgZmFtaWx5TmFtZS5kb21TdHJpbmcoKS51dGY4KCku
ZGF0YSgpLAorICAgICAgICBOVUxMCisgICAgfTsKKworICAgIHN3aXRjaCAoZm9udERlc2NyaXB0
aW9uLmdlbmVyaWNGYW1pbHkoKSkgeworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTZXJpZkZh
bWlseToKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAic2VyaWYiOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2Fuc1NlcmlmRmFtaWx5OgorICAgICAgICBmYW1pbGll
c1sxXSA9ICJzYW5zIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246
Ok1vbm9zcGFjZUZhbWlseToKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAibW9ub3NwYWNlIjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgorICAgIGNh
c2UgRm9udERlc2NyaXB0aW9uOjpTdGFuZGFyZEZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAg
ICBmYW1pbGllc1sxXSA9ICJzYW5zIjsKICAgICB9CiAKLSAgICBpZiAoIUZjUGF0dGVybkFkZFN0
cmluZyhwYXR0ZXJuLCBGQ19GQU1JTFksIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+
KGZjZmFtaWx5KSkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgaWYgKCFGY1BhdHRl
cm5BZGRJbnRlZ2VyKHBhdHRlcm4sIEZDX1NMQU5ULCBmY3NsYW50KSkKLSAgICAgICAgZ290byBm
cmVlUGF0dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfV0VJ
R0hULCBmY3dlaWdodCkpCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgaWYgKCFGY1Bh
dHRlcm5BZGREb3VibGUocGF0dGVybiwgRkNfUElYRUxfU0laRSwgZmNzaXplKSkKLSAgICAgICAg
Z290byBmcmVlUGF0dGVybjsKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24g
PSBwYW5nb19mb250X2Rlc2NyaXB0aW9uX25ldygpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRp
b25fc2V0X2Fic29sdXRlX3NpemUoZGVzY3JpcHRpb24sIGZvbnREZXNjcmlwdGlvbi5jb21wdXRl
ZFNpemUoKSAqIFBBTkdPX1NDQUxFKTsKIAotICAgIEZjQ29uZmlnU3Vic3RpdHV0ZShOVUxMLCBw
YXR0ZXJuLCBGY01hdGNoUGF0dGVybik7Ci0gICAgRmNEZWZhdWx0U3Vic3RpdHV0ZShwYXR0ZXJu
KTsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLmJvbGQoKSkKKyAgICAgICAgcGFuZ29fZm9udF9k
ZXNjcmlwdGlvbl9zZXRfd2VpZ2h0KGRlc2NyaXB0aW9uLCBQQU5HT19XRUlHSFRfQk9MRCk7Cisg
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFsaWMoKSkKKyAgICAgICAgcGFuZ29fZm9udF9kZXNj
cmlwdGlvbl9zZXRfc3R5bGUoZGVzY3JpcHRpb24sIFBBTkdPX1NUWUxFX0lUQUxJQyk7CisKKyAg
ICBtX2NvbnRleHQgPSBwYW5nb19jYWlyb19mb250X21hcF9jcmVhdGVfY29udGV4dChQQU5HT19D
QUlST19GT05UX01BUChtX2ZvbnRNYXApKTsKKworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyAhbV9mb250ICYmIGkgPCBHX05fRUxFTUVOVFMoZmFtaWxpZXMpOyBpKyspIHsKKyAgICAgICAg
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfZmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbGllc1tp
XSk7CisgICAgICAgIG1fZm9udCA9IHBhbmdvX2ZvbnRfbWFwX2xvYWRfZm9udChtX2ZvbnRNYXAs
IG1fY29udGV4dCwgZGVzY3JpcHRpb24pOworICAgIH0KIAotICAgIEZjUmVzdWx0IGZjcmVzdWx0
OwotICAgIG1fcGF0dGVybiA9IEZjRm9udE1hdGNoKE5VTEwsIHBhdHRlcm4sICZmY3Jlc3VsdCk7
CiAgICAgLy8gRklYTUU6IHNob3VsZCB3ZSBzZXQgc29tZSBkZWZhdWx0IGZvbnQ/Ci0gICAgaWYg
KCFtX3BhdHRlcm4pCi0gICAgICAgIGdvdG8gZnJlZVBhdHRlcm47Ci0gICAgZm9udEZhY2UgPSBj
YWlyb19mdF9mb250X2ZhY2VfY3JlYXRlX2Zvcl9wYXR0ZXJuKG1fcGF0dGVybik7Ci0gICAgZm9u
dE1hdHJpeCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2Fpcm9fbWF0cml4X3QqPihtYWxsb2Moc2l6ZW9m
KGNhaXJvX21hdHJpeF90KSkpOwotICAgIGNhaXJvX21hdHJpeF90IGN0bTsKLSAgICBjYWlyb19t
YXRyaXhfaW5pdF9zY2FsZShmb250TWF0cml4LCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNp
emUoKSwgbV9mb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOwotICAgIGNhaXJvX21hdHJp
eF9pbml0X2lkZW50aXR5KCZjdG0pOwotICAgIG9wdGlvbnMgPSBjYWlyb19mb250X29wdGlvbnNf
Y3JlYXRlKCk7Ci0gICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZv
bnRGYWNlLCBmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKLSAgICBjYWlyb19mb250X2ZhY2Vf
ZGVzdHJveShmb250RmFjZSk7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9u
cyk7Ci0gICAgZnJlZShmb250TWF0cml4KTsKLQotZnJlZVBhdHRlcm46Ci0gICAgRmNQYXR0ZXJu
RGVzdHJveShwYXR0ZXJuKTsKKyAgICBpZiAobV9mb250KQorICAgICAgICBtX3NjYWxlZEZvbnQg
PSBwYW5nb19jYWlyb19mb250X2dldF9zY2FsZWRfZm9udChQQU5HT19DQUlST19GT05UKG1fZm9u
dCkpOworCisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKIH0K
IAogYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKQEAgLTExOSwxMCArOTcsMjUgQEAgYm9v
bCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKICAgICBpZiAoaW5pdGlhbGl6ZWQpCiAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKLSAgICBpZiAoIUZjSW5pdCgp
KSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiQ2FuJ3QgaW5pdCBmb250IGNvbmZpZyBsaWJy
YXJ5XG4iKTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFtX2ZvbnRNYXApCisg
ICAgICAgIG1fZm9udE1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX25ldygpOworICAgIGlmICgh
bV9oYXNoVGFibGUpIHsKKyAgICAgICAgUGFuZ29Gb250RmFtaWx5KipmYW1pbGllcyA9IDA7Cisg
ICAgICAgIGludCBuX2ZhbWlsaWVzID0gMDsKKworICAgICAgICBtX2hhc2hUYWJsZSA9IGdfaGFz
aF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9lcXVhbCwgZ19mcmVlLCBnX29iamVj
dF91bnJlZik7CisKKyAgICAgICAgcGFuZ29fZm9udF9tYXBfbGlzdF9mYW1pbGllcyAobV9mb250
TWFwLCAmZmFtaWxpZXMsICZuX2ZhbWlsaWVzKTsKKworICAgICAgICBmb3IgKGludCBmYW1pbHkg
PSAwOyBmYW1pbHkgPCBuX2ZhbWlsaWVzOyBmYW1pbHkrKykKKyAgICAgICAgICAgICAgICBnX2hh
c2hfdGFibGVfaW5zZXJ0IChtX2hhc2hUYWJsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBnX3N0cmR1cChwYW5nb19mb250X2ZhbWlseV9nZXRfbmFtZShmYW1pbGllc1tm
YW1pbHldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3Rf
cmVmKGZhbWlsaWVzW2ZhbWlseV0pKTsKKworICAgICAgICBnX2ZyZWUoZmFtaWxpZXMpOwogICAg
IH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMzIsMTAgKzEyNSwxMSBAQCBGb250UGxh
dGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCiAKIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6
aXNGaXhlZFBpdGNoKCkKIHsKLSAgICBpbnQgc3BhY2luZzsKLSAgICBpZiAoRmNQYXR0ZXJuR2V0
SW50ZWdlcihtX3BhdHRlcm4sIEZDX1NQQUNJTkcsIDAsICZzcGFjaW5nKSA9PSBGY1Jlc3VsdE1h
dGNoKQotICAgICAgICByZXR1cm4gc3BhY2luZyA9PSBGQ19NT05POwotICAgIHJldHVybiBmYWxz
ZTsKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rl
c2NyaWJlX3dpdGhfYWJzb2x1dGVfc2l6ZShtX2ZvbnQpOworICAgIFBhbmdvRm9udEZhbWlseSog
ZmFtaWx5ID0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnRGYW1pbHkqPihnX2hhc2hfdGFibGVf
bG9va3VwKG1faGFzaFRhYmxlLCBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9mYW1pbHkoZGVz
Y3JpcHRpb24pKSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9u
KTsKKworICAgIHJldHVybiBwYW5nb19mb250X2ZhbWlseV9pc19tb25vc3BhY2UoZmFtaWx5KTsK
IH0KIAogdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdApA
QCAtMTQ3LDEyICsxNDEsMTggQEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KGNhaXJv
X3QqIGNyKSBjb25zdAogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3Qg
Rm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcGF0dGVybiA9PSBv
dGhlci5tX3BhdHRlcm4pCisgICAgaWYgKG1fZm9udCA9PSBvdGhlci5tX2ZvbnQpCiAgICAgICAg
IHJldHVybiB0cnVlOwotICAgIGlmIChtX3BhdHRlcm4gPT0gMCB8fCBtX3BhdHRlcm4gPT0gcmVp
bnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkKLSAgICAgICAgICAgIHx8IG90aGVyLm1fcGF0
dGVybiA9PSAwIHx8IG90aGVyLm1fcGF0dGVybiA9PSByZWludGVycHJldF9jYXN0PEZjUGF0dGVy
bio+KC0xKSkKKyAgICBpZiAobV9mb250ID09IDAgfHwgbV9mb250ID09IHJlaW50ZXJwcmV0X2Nh
c3Q8UGFuZ29Gb250Kj4oLTEpCisgICAgICAgICAgICB8fCBvdGhlci5tX2ZvbnQgPT0gMCB8fCBv
dGhlci5tX2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gRmNQYXR0ZXJuRXF1YWwobV9wYXR0ZXJuLCBvdGhl
ci5tX3BhdHRlcm4pOworCisgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIHRoaXNEZXNjID0gcGFu
Z29fZm9udF9kZXNjcmliZShtX2ZvbnQpOworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBvdGhl
ckRlc2MgPSBwYW5nb19mb250X2Rlc2NyaWJlKG90aGVyLm1fZm9udCk7CisgICAgYm9vbCByZXN1
bHQocGFuZ29fZm9udF9kZXNjcmlwdGlvbl9lcXVhbCh0aGlzRGVzYywgb3RoZXJEZXNjKSk7Cisg
ICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKG90aGVyRGVzYyk7CisgICAgcGFuZ29fZm9u
dF9kZXNjcmlwdGlvbl9mcmVlKHRoaXNEZXNjKTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB9
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dkay9HbHlwaFBhZ2VUcmVlTm9kZUdkay5jcHAKaW5kZXgg
NThjMTZlMi4uYmIzYjk5YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9nZGsvR2x5cGhQ
YWdlVHJlZU5vZGVHZGsuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ2RrL0dseXBoUGFnZVRy
ZWVOb2RlR2RrLmNwcApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBs
ZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykg
MjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChD
KSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KKyAqIENvcHlyaWdo
dCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KICAqIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CkBAIC0zMywyMCArMzQsNTAgQEAKICNpbmNs
dWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogCiAjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNs
dWRlIDxwYW5nby9wYW5nby1mb250Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotYm9vbCBH
bHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25z
dCBGb250RGF0YSogZm9udERhdGEpCitzdGF0aWMgUGFuZ29HbHlwaCBwYW5nb19mb250X2dldF9n
bHlwaCAoUGFuZ29Gb250KiBmb250LCBQYW5nb0NvbnRleHQqIGNvbnRleHQsIGd1bmljaGFyIHdj
KQogewotICAgIEZUX0ZhY2UgZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShm
b250RGF0YS0+bV9mb250Lm1fc2NhbGVkRm9udCk7CisgICAgUGFuZ29HbHlwaCByZXN1bHQgPSAw
OworICAgIGdjaGFyIGJ1ZmZlcls3XTsKKworICAgIGdpbnQgIGxlbmd0aCA9IGdfdW5pY2hhcl90
b191dGY4KHdjLCBidWZmZXIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbmd0aCwgMCk7
CisKKyAgICBHTGlzdCogaXRlbXMgPSBwYW5nb19pdGVtaXplKGNvbnRleHQsIGJ1ZmZlciwgMCwg
bGVuZ3RoLCBOVUxMLCBOVUxMKTsKKworICAgIGlmIChnX2xpc3RfbGVuZ3RoKGl0ZW1zKSA9PSAx
KSB7CisgICAgICAgIFBhbmdvR2x5cGhTdHJpbmcqIGdseXBocyA9IHBhbmdvX2dseXBoX3N0cmlu
Z19uZXcoKTsKKworICAgICAgICBwYW5nb19zaGFwZSAoYnVmZmVyLCBsZW5ndGgsICYoKFBhbmdv
SXRlbSopaXRlbXMtPmRhdGEpLT5hbmFseXNpcywgZ2x5cGhzKTsKKworICAgICAgICBpZiAoZ2x5
cGhzLT5udW1fZ2x5cGhzID09IDEpCisgICAgICAgICAgICByZXN1bHQgPSBnbHlwaHMtPmdseXBo
c1swXS5nbHlwaDsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgZ193YXJuaW5nICgiZGlkbid0
IGdldCAxIGdseXBoIGJ1dCAlZCIsIGdseXBocy0+bnVtX2dseXBocyk7CisKKyAgICAgICAgcGFu
Z29fZ2x5cGhfc3RyaW5nX2ZyZWUgKGdseXBocyk7CisgICAgfQogCi0gICAgaWYgKCFmYWNlKQor
ICAgIGdfbGlzdF9mb3JlYWNoKGl0ZW1zLCAoR0Z1bmMpcGFuZ29faXRlbV9mcmVlLCBOVUxMKTsK
KyAgICBnX2xpc3RfZnJlZShpdGVtcyk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29s
IEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICBpZiAoIWZvbnREYXRhLT5tX2ZvbnQubV9m
b250IHx8IGZvbnREYXRhLT5tX2ZvbnQubV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29G
b250Kj4oLTEpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgYnVmZmVyTGVuZ3RoOyBpKyspCi0gICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4
KGksIEZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwgYnVmZmVyW2ldKSwgZm9udERhdGEpOwotCi0g
ICAgY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfdW5sb2NrX2ZhY2UoZm9udERhdGEtPm1fZm9udC5tX3Nj
YWxlZEZvbnQpOworICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBwYW5nb19mb250X2dldF9nbHlwaChmb250RGF0YS0+bV9mb250Lm1f
Zm9udCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Zm9udERhdGEtPm1fZm9udC5tX2NvbnRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcltpXSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZvbnREYXRhKTsKIAogICAgIHJldHVybiB0cnVlOwogfQo=
</data>
<flag name="review"
          id="6881"
          type_id="1"
          status="-"
          setter="aroben"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17981</attachid>
            <date>2007-12-18 21:58:34 -0800</date>
            <delta_ts>2008-03-10 07:02:57 -0700</delta_ts>
            <desc>Proposed patch (v3)</desc>
            <filename>fix-15229-v3.patch</filename>
            <type>text/plain</type>
            <size>16978</size>
            <attacher name="Sven Herzberg">sven</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjZiZGFmMC4uY2ViNTcxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAwNy0xMi0xOSAgU3ZlbiBIZXJ6YmVy
ZyAgPHN2ZW5AaW1lbmRpby5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVwbGFjZSB0aGUgZm9udGNvbmZpZy9mcmVldHlwZSBiYXNlZCBmb250
IG1hbmFnZW1lbnQgd2l0aCBhIHBhbmdvCisgICAgICAgIGJhc2VkIG9uZS4gRml4ZXM6CisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjI5CisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvRm9udERhdGFHdGsuY3BwIChGb250RGF0YTo6cGxhdGZvcm1EZXN0
cm95KCkpOiB1cGRhdGVkCisgICAgICAgIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXN0cm95IGNv
ZGUKKyAgICAgICAgKEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoKSk6IGltcGxlbWVudGVk
IGZvbnQgY292ZXJhZ2Ugd2l0aCBwYW5nbworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Gb250UGxh
dGZvcm1EYXRhLmg6IHJlcGxhY2VkIGZvbnRjb25maWcgc3BlY2lmaWMKKyAgICAgICAgbWVtYmVy
cyB3aXRoIHBhbmdvLXNwZWNpZmljIG9uZXMKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRm9udFBs
YXRmb3JtRGF0YUd0ay5jcHA6IGFkZGVkIHN0YXRpYyBtZW1iZXJzIGZvciB0aGUKKyAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YSBjbGFzcworICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YSgpKTogaW1wbGVtZW50ZWQgdGhlIGZvbnQtbWF0Y2hpbmcKKyAgICAgICAgd2l0
aCBhIFBhbmdvRm9udERlc2NyaXB0aW9uIGluc3RlYWQgb2YgYW4gRmNQYXR0ZXJuOyBpbml0aWFs
aXplIHRoZQorICAgICAgICBzY2FsZWQgZm9udCBieSB1c2luZyB0aGUgQVBJIGZvciBQYW5nb0Nh
aXJvRm9udAorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKTogaW5pdGlhbGl6ZSB0
aGUgUGFuZ29Gb250TWFwIGFuZCBzZXQgdXAgYQorICAgICAgICBoYXNoIHRhYmxlIHRvIHRyYW5z
bGF0ZSB0aGUgZm9udCBmYW1pbHkgbmFtZSBpbnRvIGEgZm9udCBmYW1pbHkKKyAgICAgICAgKEZv
bnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpKTogaW1wbGVtZW50ZWQgYnkgcXVlcnlpbmcg
dGhlCisgICAgICAgIFBhbmdvRm9udEZhbWlseQorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6IGNvbXBhcmUgdGhlIEZvbnRQbGF0Zm9ybURhdGEgYnkKKyAgICAgICAgY29t
cGFyaW5nIHRoZSBmb250IHBvaW50ZXJzIG9yIHRoZSBkZXNjcmliZWQgZm9udHMKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvR2x5cGhQYWdlVHJlZU5vZGVHdGsuY3BwIChwYW5nb19mb250X2dldF9n
bHlwaCgpKToKKyAgICAgICAgYWRkZWQgYSBmdW5jdGlvbiB0byBxdWVyeSBhIGdseXBoIGZyb20g
YSBQYW5nb0ZvbnQKKyAgICAgICAgKEdseXBoUGFnZTo6ZmlsbCgpKTogaW1wbGVtZW50ZWQgdGhl
IGZpbGwgZnVuY3Rpb24gd2l0aCBQYW5nbyBpbnN0ZWFkCisgICAgICAgIG9mIGZvbnRjb25maWcv
ZnJlZXR5cGUKKwogMjAwNy0xMi0wMyAgQWxwIFRva2VyICA8YWxwQGF0b2tlci5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRDYWNoZUd0ay5jcHAKaW5kZXggNWNhZWJjNC4uOTgzMDdiOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwCkBAIC02NCw3ICs2
NCw3IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiBib29sIEZvbnRDYWNoZTo6Zm9udEV4aXN0
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHkpCiB7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHkpOwotICAgIHJldHVybiBwbGF0Zm9ybURhdGEubV9wYXR0ZXJuICE9
IDA7CisgICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5tX2ZvbnQgIT0gMDsKIH0KIAogRm9udFBsYXRm
b3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnREYXRhR3RrLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnREYXRhR3RrLmNwcAppbmRleCAzMGI1
ZTcwLi4yYWU2NTkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250RGF0YUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udERh
dGFHdGsuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBS
ZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNjIsOCArNjMsMTAgQEAgdm9pZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0
KCkKIAogdm9pZCBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBpZiAobV9mb250
Lm1fcGF0dGVybiAmJiAoKEZjUGF0dGVybiopLTEgIT0gbV9mb250Lm1fcGF0dGVybikpCi0gICAg
ICAgIEZjUGF0dGVybkRlc3Ryb3kobV9mb250Lm1fcGF0dGVybik7CisgICAgaWYgKG1fZm9udC5t
X2ZvbnQgJiYgbV9mb250Lm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0x
KSkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9mb250Lm1fZm9udCk7CisgICAgaWYgKG1fZm9u
dC5tX2NvbnRleHQpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZm9udC5tX2NvbnRleHQpOwog
CiAgICAgaWYgKG1fZm9udC5tX3NjYWxlZEZvbnQpCiAgICAgICAgIGNhaXJvX3NjYWxlZF9mb250
X2Rlc3Ryb3kobV9mb250Lm1fc2NhbGVkRm9udCk7CkBAIC04MywyMSArODYsMjMgQEAgRm9udERh
dGEqIEZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY28KIAogYm9vbCBGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAogewotICAgIEZUX0ZhY2Ug
ZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX2ZvbnQubV9zY2FsZWRGb250
KTsKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CiAKLSAgICBpZiAoIWZhY2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBQYW5nb0NvdmVyYWdlKiByZXF1ZXN0ZWQgPSBwYW5nb19jb3ZlcmFn
ZV9mcm9tX2J5dGVzKChndWNoYXIqKWNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgUGFuZ29Db3Zl
cmFnZSogYXZhaWxhYmxlID0gcGFuZ29fZm9udF9nZXRfY292ZXJhZ2UobV9mb250Lm1fZm9udCwg
cGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisgICAgcGFuZ29fY292ZXJhZ2VfbWF4KHJl
cXVlc3RlZCwgYXZhaWxhYmxlKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICBpZiAoRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBjaGFyYWN0
ZXJzW2ldKSA9PSAwKSB7Ci0gICAgICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tf
ZmFjZShtX2ZvbnQubV9zY2FsZWRGb250KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKFBBTkdPX0NPVkVSQUdFX05PTkUgPT0gcGFuZ29fY292ZXJhZ2VfZ2V0KHJlcXVl
c3RlZCwgaSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tf
ZmFjZShtX2ZvbnQubV9zY2FsZWRGb250KTsKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZihhdmFp
bGFibGUpOworICAgIHBhbmdvX2NvdmVyYWdlX3VucmVmKHJlcXVlc3RlZCk7CiAKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIEZvbnREYXRhOjpkZXRlcm1p
bmVQaXRjaCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
UGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhLmgKaW5kZXggMjg1NWU3NS4uYmQxNjIxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtNSw2ICs1LDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBQ
aW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgpAQCAtMzAsOCArMzEsNyBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNs
dWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgorI2lu
Y2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
OSwxMiArMzksMTQgQEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJsaWM6CiAgICAgY2xh
c3MgRGVsZXRlZCB7fTsKICAgICBGb250UGxhdGZvcm1EYXRhKERlbGV0ZWQpCi0gICAgICAgIDog
bV9wYXR0ZXJuKHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpKQorICAgICAgICA6IG1f
Y29udGV4dCgwKQorICAgICAgICAsIG1fZm9udChyZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+
KC0xKSkKICAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKICAgICAgICAgeyB9CiAKICAgICBGb250
UGxhdGZvcm1EYXRhKCkKLSAgICAgICAgOiBtX3BhdHRlcm4oMCkKKyAgICAgICAgOiBtX2NvbnRl
eHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkKICAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKICAg
ICAgICAgeyB9CiAKQEAgLTU5LDEzICs2MSwxNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3NjYWxlZEZvbnQpIH07Ci0gICAgICAgIHJldHVy
biBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaCggcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hD
b2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIHVpbnRw
dHJfdCBoYXNoQ29kZXNbMV0gPSB7cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVk
Rm9udCl9OworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnBy
ZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVD
aGFyKSk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKSBjb25zdDsKIAotICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOworICAgIHN0YXRpYyBQYW5n
b0ZvbnRNYXAqIG1fZm9udE1hcDsKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSAgKiBtX2hhc2hUYWJs
ZTsKKworICAgIFBhbmdvQ29udGV4dCogbV9jb250ZXh0OworICAgIFBhbmdvRm9udCogbV9mb250
OwogICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBjYWlyb19zY2Fs
ZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAppbmRleCBiNTQyZmFjLi5iYjM5
NzZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxh
dGZvcm1EYXRhR3RrLmNwcApAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2Vh
cmNoIENlbnRlciBVU0EsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtMzEsODQgKzMyLDY1IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0KLSNpbmNsdWRl
IDxjYWlyby1mdC5oPgogI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZpZy9m
Y2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorUGFuZ29Gb250TWFwKiBGb250UGxhdGZvcm1EYXRhOjptX2ZvbnRNYXAgICA9IDA7CitHSGFz
aFRhYmxlKiAgIEZvbnRQbGF0Zm9ybURhdGE6Om1faGFzaFRhYmxlID0gMDsKKwogRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQotICAgIDogbV9wYXR0ZXJu
KDApCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAsIG1fZm9udCgwKQogICAgICwgbV9mb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKQogICAgICwgbV9zY2FsZWRGb250KDApCiB7CiAgICAg
Rm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpOwogCi0gICAgQ1N0cmluZyBmYW1pbHlOYW1lU3RyaW5n
ID0gZmFtaWx5TmFtZS5kb21TdHJpbmcoKS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogZmNmYW1p
bHkgPSBmYW1pbHlOYW1lU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgZmNzbGFudCA9IEZDX1NMQU5U
X1JPTUFOOwotICAgIGludCBmY3dlaWdodCA9IEZDX1dFSUdIVF9OT1JNQUw7Ci0gICAgZmxvYXQg
ZmNzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpOwotICAgIGlmIChmb250RGVz
Y3JpcHRpb24uaXRhbGljKCkpCi0gICAgICAgIGZjc2xhbnQgPSBGQ19TTEFOVF9JVEFMSUM7Ci0g
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5ib2xkKCkpCi0gICAgICAgIGZjd2VpZ2h0ID0gRkNfV0VJ
R0hUX0JPTEQ7Ci0KLSAgICBpbnQgdHlwZSA9IGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5
KCk7Ci0KLSAgICBGY1BhdHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKLSAgICBj
YWlyb19mb250X2ZhY2VfdCogZm9udEZhY2U7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9w
dGlvbnM7Ci0gICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKLQotICAgIGlmICghRmNQYXR0
ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBG
Y0NoYXI4Kj4oZmNmYW1pbHkpKSkKLSAgICAgICAgZ290byBmcmVlUGF0dGVybjsKLQotICAgIHN3
aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6
Ci0gICAgICAgICAgICBmY2ZhbWlseSA9ICJzZXJpZiI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKLSAgICAgICAgICAg
IGZjZmFtaWx5ID0gInNhbnMtc2VyaWYiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6Ci0gICAgICAgICAgICBmY2ZhbWls
eSA9ICJtb25vc3BhY2UiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpOb0ZhbWlseToKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5k
YXJkRmFtaWx5OgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZmNmYW1pbHkgPSAic2Fu
cy1zZXJpZiI7CisgICAgQ1N0cmluZyAgc3RvcmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuZG9tU3Ry
aW5nKCkudXRmOCgpOworICAgIGdjaGFyIGNvbnN0KiBmYW1pbGllc1tdID0geworICAgICAgICBz
dG9yZWRfZmFtaWx5LmRhdGEoKSwKKyAgICAgICAgTlVMTAorICAgIH07CisKKyAgICBzd2l0Y2gg
KGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpIHsKKyAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6U2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlsaWVzWzFdID0gInNlcmlmIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKKyAg
ICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9u
dERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6CisgICAgICAgIGZhbWlsaWVzWzFdID0gIm1v
bm9zcGFjZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0Zh
bWlseToKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7CisgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGlmICghRmNQYXR0ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZmNmYW1pbHkpKSkKLSAgICAgICAgZ290byBm
cmVlUGF0dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfU0xB
TlQsIGZjc2xhbnQpKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOwotICAgIGlmICghRmNQYXR0
ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19XRUlHSFQsIGZjd2VpZ2h0KSkKLSAgICAgICAgZ290
byBmcmVlUGF0dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLCBGQ19Q
SVhFTF9TSVpFLCBmY3NpemUpKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOworICAgIFBhbmdv
Rm9udERlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fbmV3
KCk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfYWJzb2x1dGVfc2l6ZShkZXNjcmlw
dGlvbiwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogUEFOR09fU0NBTEUpOworCisg
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5ib2xkKCkpCisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3Jp
cHRpb25fc2V0X3dlaWdodChkZXNjcmlwdGlvbiwgUEFOR09fV0VJR0hUX0JPTEQpOworICAgIGlm
IChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRp
b25fc2V0X3N0eWxlKGRlc2NyaXB0aW9uLCBQQU5HT19TVFlMRV9JVEFMSUMpOwogCi0gICAgRmND
b25maWdTdWJzdGl0dXRlKE5VTEwsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKLSAgICBGY0Rl
ZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOworICAgIG1fY29udGV4dCA9IHBhbmdvX2NhaXJvX2Zv
bnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKG1fZm9udE1hcCkpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7ICFtX2ZvbnQgJiYgaSA8IEdfTl9FTEVNRU5U
UyhmYW1pbGllcyk7IGkrKykgeworICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9m
YW1pbHkoZGVzY3JpcHRpb24sIGZhbWlsaWVzW2ldKTsKKyAgICAgICAgbV9mb250ID0gcGFuZ29f
Zm9udF9tYXBfbG9hZF9mb250KG1fZm9udE1hcCwgbV9jb250ZXh0LCBkZXNjcmlwdGlvbik7Cisg
ICAgfQogCi0gICAgRmNSZXN1bHQgZmNyZXN1bHQ7Ci0gICAgbV9wYXR0ZXJuID0gRmNGb250TWF0
Y2goTlVMTCwgcGF0dGVybiwgJmZjcmVzdWx0KTsKICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIHNl
dCBzb21lIGRlZmF1bHQgZm9udD8KLSAgICBpZiAoIW1fcGF0dGVybikKLSAgICAgICAgZ290byBm
cmVlUGF0dGVybjsKLSAgICBmb250RmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9y
X3BhdHRlcm4obV9wYXR0ZXJuKTsKLSAgICBjYWlyb19tYXRyaXhfdCBjdG07Ci0gICAgY2Fpcm9f
bWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpLCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7Ci0gICAgY2Fpcm9fbWF0
cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7Ci0gICAgb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9u
c19jcmVhdGUoKTsKLSAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUo
Zm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKLSAgICBjYWlyb19mb250X2Zh
Y2VfZGVzdHJveShmb250RmFjZSk7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0
aW9ucyk7Ci0KLWZyZWVQYXR0ZXJuOgotICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVybik7Cisg
ICAgaWYgKG1fZm9udCkKKyAgICAgICAgbV9zY2FsZWRGb250ID0gcGFuZ29fY2Fpcm9fZm9udF9n
ZXRfc2NhbGVkX2ZvbnQoUEFOR09fQ0FJUk9fRk9OVChtX2ZvbnQpKTsKKworICAgIHBhbmdvX2Zv
bnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7CiB9CiAKIGJvb2wgRm9udFBsYXRmb3Jt
RGF0YTo6aW5pdCgpCkBAIC0xMTcsMTAgKzk5LDI1IEBAIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6
aW5pdCgpCiAgICAgaWYgKGluaXRpYWxpemVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBp
bml0aWFsaXplZCA9IHRydWU7Ci0gICAgaWYgKCFGY0luaXQoKSkgewotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNhbid0IGluaXQgZm9udCBjb25maWcgbGlicmFyeVxuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghbV9mb250TWFwKQorICAgICAgICBtX2ZvbnRNYXAgPSBw
YW5nb19jYWlyb19mb250X21hcF9uZXcoKTsKKyAgICBpZiAoIW1faGFzaFRhYmxlKSB7CisgICAg
ICAgIFBhbmdvRm9udEZhbWlseSoqZmFtaWxpZXMgPSAwOworICAgICAgICBpbnQgbl9mYW1pbGll
cyA9IDA7CisKKyAgICAgICAgbV9oYXNoVGFibGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19z
dHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19vYmplY3RfdW5yZWYpOworCisgICAgICAg
IHBhbmdvX2ZvbnRfbWFwX2xpc3RfZmFtaWxpZXMgKG1fZm9udE1hcCwgJmZhbWlsaWVzLCAmbl9m
YW1pbGllcyk7CisKKyAgICAgICAgZm9yIChpbnQgZmFtaWx5ID0gMDsgZmFtaWx5IDwgbl9mYW1p
bGllczsgZmFtaWx5KyspCisgICAgICAgICAgICAgICAgZ19oYXNoX3RhYmxlX2luc2VydCAobV9o
YXNoVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19zdHJkdXAo
cGFuZ29fZm9udF9mYW1pbHlfZ2V0X25hbWUoZmFtaWxpZXNbZmFtaWx5XSkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfb2JqZWN0X3JlZihmYW1pbGllc1tmYW1pbHld
KSk7CisKKyAgICAgICAgZ19mcmVlKGZhbWlsaWVzKTsKICAgICB9CisKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTMwLDEwICsxMjcsMTEgQEAgRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0
Zm9ybURhdGEoKQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCiB7Ci0g
ICAgaW50IHNwYWNpbmc7Ci0gICAgaWYgKEZjUGF0dGVybkdldEludGVnZXIobV9wYXR0ZXJuLCBG
Q19TUEFDSU5HLCAwLCAmc3BhY2luZykgPT0gRmNSZXN1bHRNYXRjaCkKLSAgICAgICAgcmV0dXJu
IHNwYWNpbmcgPT0gRkNfTU9OTzsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgUGFuZ29Gb250RGVz
Y3JpcHRpb24qIGRlc2NyaXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmliZV93aXRoX2Fic29sdXRl
X3NpemUobV9mb250KTsKKyAgICBQYW5nb0ZvbnRGYW1pbHkqIGZhbWlseSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UGFuZ29Gb250RmFtaWx5Kj4oZ19oYXNoX3RhYmxlX2xvb2t1cChtX2hhc2hUYWJsZSwg
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfZmFtaWx5KGRlc2NyaXB0aW9uKSkpOworICAgIHBh
bmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7CisKKyAgICByZXR1cm4gcGFu
Z29fZm9udF9mYW1pbHlfaXNfbW9ub3NwYWNlKGZhbWlseSk7CiB9CiAKIHZvaWQgRm9udFBsYXRm
b3JtRGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29uc3QKQEAgLTE0NSwxMiArMTQzLDE4IEBA
IHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29uc3QKIAogYm9v
bCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90
aGVyKSBjb25zdAogewotICAgIGlmIChtX3BhdHRlcm4gPT0gb3RoZXIubV9wYXR0ZXJuKQorICAg
IGlmIChtX2ZvbnQgPT0gb3RoZXIubV9mb250KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAobV9wYXR0ZXJuID09IDAgfHwgbV9wYXR0ZXJuID09IHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0
ZXJuKj4oLTEpCi0gICAgICAgICAgICB8fCBvdGhlci5tX3BhdHRlcm4gPT0gMCB8fCBvdGhlci5t
X3BhdHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkpCisgICAgaWYgKG1f
Zm9udCA9PSAwIHx8IG1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKQor
ICAgICAgICAgICAgfHwgb3RoZXIubV9mb250ID09IDAgfHwgb3RoZXIubV9mb250ID09IHJlaW50
ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIEZjUGF0dGVybkVxdWFsKG1fcGF0dGVybiwgb3RoZXIubV9wYXR0ZXJuKTsKKworICAg
IFBhbmdvRm9udERlc2NyaXB0aW9uKiB0aGlzRGVzYyA9IHBhbmdvX2ZvbnRfZGVzY3JpYmUobV9m
b250KTsKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogb3RoZXJEZXNjID0gcGFuZ29fZm9udF9k
ZXNjcmliZShvdGhlci5tX2ZvbnQpOworICAgIGJvb2wgcmVzdWx0ID0gcGFuZ29fZm9udF9kZXNj
cmlwdGlvbl9lcXVhbCh0aGlzRGVzYywgb3RoZXJEZXNjKTsKKyAgICBwYW5nb19mb250X2Rlc2Ny
aXB0aW9uX2ZyZWUob3RoZXJEZXNjKTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUo
dGhpc0Rlc2MpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcAppbmRleCBj
MGJjZmE0Li43ZDc1Zjc3IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVHdGsuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzMsMzkgQEAKICNpbmNs
dWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogCiAjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNs
dWRlIDxwYW5nby9wYW5nby1mb250Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGlj
IFBhbmdvR2x5cGggcGFuZ29fZm9udF9nZXRfZ2x5cGggKFBhbmdvRm9udCogZm9udCwgUGFuZ29D
b250ZXh0KiBjb250ZXh0LCBndW5pY2hhciB3YykKK3sKKyAgICBQYW5nb0dseXBoIHJlc3VsdCA9
IDA7CisgICAgZ2NoYXIgYnVmZmVyWzddOworCisgICAgZ2ludCAgbGVuZ3RoID0gZ191bmljaGFy
X3RvX3V0Zjgod2MsIGJ1ZmZlcik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobGVuZ3RoLCAw
KTsKKworICAgIEdMaXN0KiBpdGVtcyA9IHBhbmdvX2l0ZW1pemUoY29udGV4dCwgYnVmZmVyLCAw
LCBsZW5ndGgsIE5VTEwsIE5VTEwpOworCisgICAgaWYgKGdfbGlzdF9sZW5ndGgoaXRlbXMpID09
IDEpIHsKKyAgICAgICAgUGFuZ29HbHlwaFN0cmluZyogZ2x5cGhzID0gcGFuZ29fZ2x5cGhfc3Ry
aW5nX25ldygpOworCisgICAgICAgIHBhbmdvX3NoYXBlIChidWZmZXIsIGxlbmd0aCwgJigoUGFu
Z29JdGVtKilpdGVtcy0+ZGF0YSktPmFuYWx5c2lzLCBnbHlwaHMpOworCisgICAgICAgIGlmIChn
bHlwaHMtPm51bV9nbHlwaHMgPT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+Z2x5
cGhzWzBdLmdseXBoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX3dhcm5pbmcgKCJkaWRu
J3QgZ2V0IDEgZ2x5cGggYnV0ICVkIiwgZ2x5cGhzLT5udW1fZ2x5cGhzKTsKKworICAgICAgICBw
YW5nb19nbHlwaF9zdHJpbmdfZnJlZSAoZ2x5cGhzKTsKKyAgICB9CisKKyAgICBnX2xpc3RfZm9y
ZWFjaChpdGVtcywgKEdGdW5jKXBhbmdvX2l0ZW1fZnJlZSwgTlVMTCk7CisgICAgZ19saXN0X2Zy
ZWUoaXRlbXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogYm9vbCBHbHlwaFBhZ2U6OmZp
bGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSog
Zm9udERhdGEpCiB7CiAgICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhh
biB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVu
dGFyeSBjaGFyYWN0ZXJzLgpAQCAtNDIsMTMgKzczLDEzIEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxs
KFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZv
bnRECiAgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9j
a19mYWNlKGZvbnREYXRhLT5tX2ZvbnQubV9zY2FsZWRGb250KTsKLSAgICBpZiAoIWZhY2UpCisg
ICAgaWYgKCFmb250RGF0YS0+bV9mb250Lm1fZm9udCB8fCBmb250RGF0YS0+bV9mb250Lm1fZm9u
dCA9PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0g
RmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0pOworICAgICAgICBHbHlwaCBnbHlw
aCA9IHBhbmdvX2ZvbnRfZ2V0X2dseXBoKGZvbnREYXRhLT5tX2ZvbnQubV9mb250LCBmb250RGF0
YS0+bV9mb250Lm1fY29udGV4dCwgYnVmZmVyW2ldKTsKICAgICAgICAgaWYgKCFnbHlwaCkKICAg
ICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIDAsIDApOwogICAgICAgICBlbHNlIHsK
QEAgLTU3LDggKzkwLDYgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udEQKICAgICAgICAgfQogICAg
IH0KIAotICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKGZvbnREYXRhLT5tX2Zv
bnQubV9zY2FsZWRGb250KTsKLQogICAgIHJldHVybiBoYXZlR2x5cGhzOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>17985</attachid>
            <date>2007-12-19 03:39:12 -0800</date>
            <delta_ts>2008-03-10 07:02:57 -0700</delta_ts>
            <desc>Updated patch that applies cleanly</desc>
            <filename>fix-15229-v3-rh1.patch</filename>
            <type>text/plain</type>
            <size>16978</size>
            <attacher name="Richard Hult">richard</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MjZiZGFmMC4uY2ViNTcxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzMiBAQAorMjAwNy0xMi0xOSAgU3ZlbiBIZXJ6YmVy
ZyAgPHN2ZW5AaW1lbmRpby5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgUmVwbGFjZSB0aGUgZm9udGNvbmZpZy9mcmVldHlwZSBiYXNlZCBmb250
IG1hbmFnZW1lbnQgd2l0aCBhIHBhbmdvCisgICAgICAgIGJhc2VkIG9uZS4gRml4ZXM6CisgICAg
ICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MjI5CisKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ndGsvRm9udERhdGFHdGsuY3BwIChGb250RGF0YTo6cGxhdGZvcm1EZXN0
cm95KCkpOiB1cGRhdGVkCisgICAgICAgIHRoZSBwbGF0Zm9ybSBzcGVjaWZpYyBkZXN0cm95IGNv
ZGUKKyAgICAgICAgKEZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoKSk6IGltcGxlbWVudGVk
IGZvbnQgY292ZXJhZ2Ugd2l0aCBwYW5nbworICAgICAgICAqIHBsYXRmb3JtL2d0ay9Gb250UGxh
dGZvcm1EYXRhLmg6IHJlcGxhY2VkIGZvbnRjb25maWcgc3BlY2lmaWMKKyAgICAgICAgbWVtYmVy
cyB3aXRoIHBhbmdvLXNwZWNpZmljIG9uZXMKKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvRm9udFBs
YXRmb3JtRGF0YUd0ay5jcHA6IGFkZGVkIHN0YXRpYyBtZW1iZXJzIGZvciB0aGUKKyAgICAgICAg
Rm9udFBsYXRmb3JtRGF0YSBjbGFzcworICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBs
YXRmb3JtRGF0YSgpKTogaW1wbGVtZW50ZWQgdGhlIGZvbnQtbWF0Y2hpbmcKKyAgICAgICAgd2l0
aCBhIFBhbmdvRm9udERlc2NyaXB0aW9uIGluc3RlYWQgb2YgYW4gRmNQYXR0ZXJuOyBpbml0aWFs
aXplIHRoZQorICAgICAgICBzY2FsZWQgZm9udCBieSB1c2luZyB0aGUgQVBJIGZvciBQYW5nb0Nh
aXJvRm9udAorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpKTogaW5pdGlhbGl6ZSB0
aGUgUGFuZ29Gb250TWFwIGFuZCBzZXQgdXAgYQorICAgICAgICBoYXNoIHRhYmxlIHRvIHRyYW5z
bGF0ZSB0aGUgZm9udCBmYW1pbHkgbmFtZSBpbnRvIGEgZm9udCBmYW1pbHkKKyAgICAgICAgKEZv
bnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpKTogaW1wbGVtZW50ZWQgYnkgcXVlcnlpbmcg
dGhlCisgICAgICAgIFBhbmdvRm9udEZhbWlseQorICAgICAgICAoRm9udFBsYXRmb3JtRGF0YTo6
b3BlcmF0b3I9PSk6IGNvbXBhcmUgdGhlIEZvbnRQbGF0Zm9ybURhdGEgYnkKKyAgICAgICAgY29t
cGFyaW5nIHRoZSBmb250IHBvaW50ZXJzIG9yIHRoZSBkZXNjcmliZWQgZm9udHMKKyAgICAgICAg
KiBwbGF0Zm9ybS9ndGsvR2x5cGhQYWdlVHJlZU5vZGVHdGsuY3BwIChwYW5nb19mb250X2dldF9n
bHlwaCgpKToKKyAgICAgICAgYWRkZWQgYSBmdW5jdGlvbiB0byBxdWVyeSBhIGdseXBoIGZyb20g
YSBQYW5nb0ZvbnQKKyAgICAgICAgKEdseXBoUGFnZTo6ZmlsbCgpKTogaW1wbGVtZW50ZWQgdGhl
IGZpbGwgZnVuY3Rpb24gd2l0aCBQYW5nbyBpbnN0ZWFkCisgICAgICAgIG9mIGZvbnRjb25maWcv
ZnJlZXR5cGUKKwogMjAwNy0xMi0wMyAgQWxwIFRva2VyICA8YWxwQGF0b2tlci5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgTWFyayBSb3dlLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL0ZvbnRDYWNoZUd0ay5jcHAKaW5kZXggNWNhZWJjNC4uOTgzMDdiOCAxMDA2NDQKLS0t
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcAorKysgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwCkBAIC02NCw3ICs2
NCw3IEBAIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Z2V0TGFzdFJlc29ydEZhbGxiYWNr
Rm9udChjb25zdCBGb250RGVzY3JpcHRpb24mIGZvCiBib29sIEZvbnRDYWNoZTo6Zm9udEV4aXN0
cyhjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHkpCiB7CiAgICAgRm9udFBsYXRmb3JtRGF0YSBwbGF0Zm9ybURhdGEoZm9udERl
c2NyaXB0aW9uLCBmYW1pbHkpOwotICAgIHJldHVybiBwbGF0Zm9ybURhdGEubV9wYXR0ZXJuICE9
IDA7CisgICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5tX2ZvbnQgIT0gMDsKIH0KIAogRm9udFBsYXRm
b3JtRGF0YSogRm9udENhY2hlOjpjcmVhdGVGb250UGxhdGZvcm1EYXRhKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnREYXRhR3RrLmNwcCBi
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnREYXRhR3RrLmNwcAppbmRleCAzMGI1
ZTcwLi4yYWU2NTkxIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250RGF0YUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udERh
dGFHdGsuY3BwCkBAIC0zLDYgKzMsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgQWxwIFRv
a2VyIDxhbHAudG9rZXJAY29sbGFib3JhLmNvLnVrPgogICogQ29weXJpZ2h0IChDKSAyMDA3IEhv
bGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBS
ZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dApAQCAtNjIsOCArNjMsMTAgQEAgdm9pZCBGb250RGF0YTo6cGxhdGZvcm1Jbml0
KCkKIAogdm9pZCBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KCkKIHsKLSAgICBpZiAobV9mb250
Lm1fcGF0dGVybiAmJiAoKEZjUGF0dGVybiopLTEgIT0gbV9mb250Lm1fcGF0dGVybikpCi0gICAg
ICAgIEZjUGF0dGVybkRlc3Ryb3kobV9mb250Lm1fcGF0dGVybik7CisgICAgaWYgKG1fZm9udC5t
X2ZvbnQgJiYgbV9mb250Lm1fZm9udCAhPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0x
KSkKKyAgICAgICAgZ19vYmplY3RfdW5yZWYobV9mb250Lm1fZm9udCk7CisgICAgaWYgKG1fZm9u
dC5tX2NvbnRleHQpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKG1fZm9udC5tX2NvbnRleHQpOwog
CiAgICAgaWYgKG1fZm9udC5tX3NjYWxlZEZvbnQpCiAgICAgICAgIGNhaXJvX3NjYWxlZF9mb250
X2Rlc3Ryb3kobV9mb250Lm1fc2NhbGVkRm9udCk7CkBAIC04MywyMSArODYsMjMgQEAgRm9udERh
dGEqIEZvbnREYXRhOjpzbWFsbENhcHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZv
bnREZXNjcmlwdGlvbikgY28KIAogYm9vbCBGb250RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBpbnQgbGVuZ3RoKSBjb25zdAogewotICAgIEZUX0ZhY2Ug
ZmFjZSA9IGNhaXJvX2Z0X3NjYWxlZF9mb250X2xvY2tfZmFjZShtX2ZvbnQubV9zY2FsZWRGb250
KTsKKyAgICBib29sIHJlc3VsdCA9IHRydWU7CiAKLSAgICBpZiAoIWZhY2UpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICBQYW5nb0NvdmVyYWdlKiByZXF1ZXN0ZWQgPSBwYW5nb19jb3ZlcmFn
ZV9mcm9tX2J5dGVzKChndWNoYXIqKWNoYXJhY3RlcnMsIGxlbmd0aCk7CisgICAgUGFuZ29Db3Zl
cmFnZSogYXZhaWxhYmxlID0gcGFuZ29fZm9udF9nZXRfY292ZXJhZ2UobV9mb250Lm1fZm9udCwg
cGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisgICAgcGFuZ29fY292ZXJhZ2VfbWF4KHJl
cXVlc3RlZCwgYXZhaWxhYmxlKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewotICAgICAgICBpZiAoRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBjaGFyYWN0
ZXJzW2ldKSA9PSAwKSB7Ci0gICAgICAgICAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tf
ZmFjZShtX2ZvbnQubV9zY2FsZWRGb250KTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgaWYgKFBBTkdPX0NPVkVSQUdFX05PTkUgPT0gcGFuZ29fY292ZXJhZ2VfZ2V0KHJlcXVl
c3RlZCwgaSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBjYWlyb19mdF9zY2FsZWRfZm9udF91bmxvY2tf
ZmFjZShtX2ZvbnQubV9zY2FsZWRGb250KTsKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZihhdmFp
bGFibGUpOworICAgIHBhbmdvX2NvdmVyYWdlX3VucmVmKHJlcXVlc3RlZCk7CiAKLSAgICByZXR1
cm4gdHJ1ZTsKKyAgICByZXR1cm4gcmVzdWx0OwogfQogCiB2b2lkIEZvbnREYXRhOjpkZXRlcm1p
bmVQaXRjaCgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
UGxhdGZvcm1EYXRhLmggYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhLmgKaW5kZXggMjg1NWU3NS4uYmQxNjIxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oCisrKyBiL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaApAQCAtNSw2ICs1LDcgQEAKICAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICogQ29weXJpZ2h0IChDKSAy
MDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20gCiAgKiBDb3B5cmlnaHQgKEMp
IDIwMDcgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBQ
aW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgpAQCAtMzAsOCArMzEsNyBAQAogI2luY2x1ZGUgIkdseXBoQnVmZmVyLmgi
CiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSA8Y2Fpcm8uaD4KLSNpbmNs
dWRlIDxjYWlyby1mdC5oPgotI2luY2x1ZGUgPGZvbnRjb25maWcvZmNmcmVldHlwZS5oPgorI2lu
Y2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
OSwxMiArMzksMTQgQEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJsaWM6CiAgICAgY2xh
c3MgRGVsZXRlZCB7fTsKICAgICBGb250UGxhdGZvcm1EYXRhKERlbGV0ZWQpCi0gICAgICAgIDog
bV9wYXR0ZXJuKHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpKQorICAgICAgICA6IG1f
Y29udGV4dCgwKQorICAgICAgICAsIG1fZm9udChyZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+
KC0xKSkKICAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKICAgICAgICAgeyB9CiAKICAgICBGb250
UGxhdGZvcm1EYXRhKCkKLSAgICAgICAgOiBtX3BhdHRlcm4oMCkKKyAgICAgICAgOiBtX2NvbnRl
eHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkKICAgICAgICAgLCBtX3NjYWxlZEZvbnQoMCkKICAg
ICAgICAgeyB9CiAKQEAgLTU5LDEzICs2MSwxNyBAQCBwdWJsaWM6CiAKICAgICB1bnNpZ25lZCBo
YXNoKCkgY29uc3QKICAgICB7Ci0gICAgICAgIHVpbnRwdHJfdCBoYXNoQ29kZXNbMV0gPSB7IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihtX3NjYWxlZEZvbnQpIH07Ci0gICAgICAgIHJldHVy
biBTdHJpbmdJbXBsOjpjb21wdXRlSGFzaCggcmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hD
b2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7CisgICAgICAgIHVpbnRw
dHJfdCBoYXNoQ29kZXNbMV0gPSB7cmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVk
Rm9udCl9OworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnBy
ZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVD
aGFyKSk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEmKSBjb25zdDsKIAotICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOworICAgIHN0YXRpYyBQYW5n
b0ZvbnRNYXAqIG1fZm9udE1hcDsKKyAgICBzdGF0aWMgR0hhc2hUYWJsZSAgKiBtX2hhc2hUYWJs
ZTsKKworICAgIFBhbmdvQ29udGV4dCogbV9jb250ZXh0OworICAgIFBhbmdvRm9udCogbV9mb250
OwogICAgIEZvbnREZXNjcmlwdGlvbiBtX2ZvbnREZXNjcmlwdGlvbjsKICAgICBjYWlyb19zY2Fs
ZWRfZm9udF90KiBtX3NjYWxlZEZvbnQ7CiB9OwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNwcAppbmRleCBiNTQyZmFjLi5iYjM5
NzZhIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxh
dGZvcm1EYXRhR3RrLmNwcApAQCAtNiw2ICs2LDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBN
aWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICogQ29weXJpZ2h0IChDKSAyMDA3
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2Vh
cmNoIENlbnRlciBVU0EsIEluYy4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgpAQCAtMzEsODQgKzMyLDY1IEBACiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCi0KLSNpbmNsdWRl
IDxjYWlyby1mdC5oPgogI2luY2x1ZGUgPGNhaXJvLmg+Ci0jaW5jbHVkZSA8Zm9udGNvbmZpZy9m
Y2ZyZWV0eXBlLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAorUGFuZ29Gb250TWFwKiBGb250UGxhdGZvcm1EYXRhOjptX2ZvbnRNYXAgICA9IDA7CitHSGFz
aFRhYmxlKiAgIEZvbnRQbGF0Zm9ybURhdGE6Om1faGFzaFRhYmxlID0gMDsKKwogRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNj
cmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQotICAgIDogbV9wYXR0ZXJu
KDApCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAsIG1fZm9udCgwKQogICAgICwgbV9mb250RGVz
Y3JpcHRpb24oZm9udERlc2NyaXB0aW9uKQogICAgICwgbV9zY2FsZWRGb250KDApCiB7CiAgICAg
Rm9udFBsYXRmb3JtRGF0YTo6aW5pdCgpOwogCi0gICAgQ1N0cmluZyBmYW1pbHlOYW1lU3RyaW5n
ID0gZmFtaWx5TmFtZS5kb21TdHJpbmcoKS51dGY4KCk7Ci0gICAgY29uc3QgY2hhciogZmNmYW1p
bHkgPSBmYW1pbHlOYW1lU3RyaW5nLmRhdGEoKTsKLSAgICBpbnQgZmNzbGFudCA9IEZDX1NMQU5U
X1JPTUFOOwotICAgIGludCBmY3dlaWdodCA9IEZDX1dFSUdIVF9OT1JNQUw7Ci0gICAgZmxvYXQg
ZmNzaXplID0gZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpOwotICAgIGlmIChmb250RGVz
Y3JpcHRpb24uaXRhbGljKCkpCi0gICAgICAgIGZjc2xhbnQgPSBGQ19TTEFOVF9JVEFMSUM7Ci0g
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5ib2xkKCkpCi0gICAgICAgIGZjd2VpZ2h0ID0gRkNfV0VJ
R0hUX0JPTEQ7Ci0KLSAgICBpbnQgdHlwZSA9IGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5
KCk7Ci0KLSAgICBGY1BhdHRlcm4qIHBhdHRlcm4gPSBGY1BhdHRlcm5DcmVhdGUoKTsKLSAgICBj
YWlyb19mb250X2ZhY2VfdCogZm9udEZhY2U7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX3QqIG9w
dGlvbnM7Ci0gICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKLQotICAgIGlmICghRmNQYXR0
ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBG
Y0NoYXI4Kj4oZmNmYW1pbHkpKSkKLSAgICAgICAgZ290byBmcmVlUGF0dGVybjsKLQotICAgIHN3
aXRjaCAodHlwZSkgewotICAgICAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U2VyaWZGYW1pbHk6
Ci0gICAgICAgICAgICBmY2ZhbWlseSA9ICJzZXJpZiI7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKLSAgICAgICAgICAg
IGZjZmFtaWx5ID0gInNhbnMtc2VyaWYiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgRm9udERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6Ci0gICAgICAgICAgICBmY2ZhbWls
eSA9ICJtb25vc3BhY2UiOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgRm9udERl
c2NyaXB0aW9uOjpOb0ZhbWlseToKLSAgICAgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5k
YXJkRmFtaWx5OgotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZmNmYW1pbHkgPSAic2Fu
cy1zZXJpZiI7CisgICAgQ1N0cmluZyAgc3RvcmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuZG9tU3Ry
aW5nKCkudXRmOCgpOworICAgIGdjaGFyIGNvbnN0KiBmYW1pbGllc1tdID0geworICAgICAgICBz
dG9yZWRfZmFtaWx5LmRhdGEoKSwKKyAgICAgICAgTlVMTAorICAgIH07CisKKyAgICBzd2l0Y2gg
KGZvbnREZXNjcmlwdGlvbi5nZW5lcmljRmFtaWx5KCkpIHsKKyAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6U2VyaWZGYW1pbHk6CisgICAgICAgIGZhbWlsaWVzWzFdID0gInNlcmlmIjsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNhbnNTZXJpZkZhbWlseToKKyAg
ICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9u
dERlc2NyaXB0aW9uOjpNb25vc3BhY2VGYW1pbHk6CisgICAgICAgIGZhbWlsaWVzWzFdID0gIm1v
bm9zcGFjZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpOb0Zh
bWlseToKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6U3RhbmRhcmRGYW1pbHk6CisgICAgZGVm
YXVsdDoKKyAgICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7CisgICAgICAgIGJyZWFrOwogICAg
IH0KIAotICAgIGlmICghRmNQYXR0ZXJuQWRkU3RyaW5nKHBhdHRlcm4sIEZDX0ZBTUlMWSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZmNmYW1pbHkpKSkKLSAgICAgICAgZ290byBm
cmVlUGF0dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZEludGVnZXIocGF0dGVybiwgRkNfU0xB
TlQsIGZjc2xhbnQpKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOwotICAgIGlmICghRmNQYXR0
ZXJuQWRkSW50ZWdlcihwYXR0ZXJuLCBGQ19XRUlHSFQsIGZjd2VpZ2h0KSkKLSAgICAgICAgZ290
byBmcmVlUGF0dGVybjsKLSAgICBpZiAoIUZjUGF0dGVybkFkZERvdWJsZShwYXR0ZXJuLCBGQ19Q
SVhFTF9TSVpFLCBmY3NpemUpKQotICAgICAgICBnb3RvIGZyZWVQYXR0ZXJuOworICAgIFBhbmdv
Rm9udERlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fbmV3
KCk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfYWJzb2x1dGVfc2l6ZShkZXNjcmlw
dGlvbiwgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVkU2l6ZSgpICogUEFOR09fU0NBTEUpOworCisg
ICAgaWYgKGZvbnREZXNjcmlwdGlvbi5ib2xkKCkpCisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3Jp
cHRpb25fc2V0X3dlaWdodChkZXNjcmlwdGlvbiwgUEFOR09fV0VJR0hUX0JPTEQpOworICAgIGlm
IChmb250RGVzY3JpcHRpb24uaXRhbGljKCkpCisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRp
b25fc2V0X3N0eWxlKGRlc2NyaXB0aW9uLCBQQU5HT19TVFlMRV9JVEFMSUMpOwogCi0gICAgRmND
b25maWdTdWJzdGl0dXRlKE5VTEwsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKLSAgICBGY0Rl
ZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOworICAgIG1fY29udGV4dCA9IHBhbmdvX2NhaXJvX2Zv
bnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKG1fZm9udE1hcCkpOwor
CisgICAgZm9yICh1bnNpZ25lZCBpbnQgaSA9IDA7ICFtX2ZvbnQgJiYgaSA8IEdfTl9FTEVNRU5U
UyhmYW1pbGllcyk7IGkrKykgeworICAgICAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX3NldF9m
YW1pbHkoZGVzY3JpcHRpb24sIGZhbWlsaWVzW2ldKTsKKyAgICAgICAgbV9mb250ID0gcGFuZ29f
Zm9udF9tYXBfbG9hZF9mb250KG1fZm9udE1hcCwgbV9jb250ZXh0LCBkZXNjcmlwdGlvbik7Cisg
ICAgfQogCi0gICAgRmNSZXN1bHQgZmNyZXN1bHQ7Ci0gICAgbV9wYXR0ZXJuID0gRmNGb250TWF0
Y2goTlVMTCwgcGF0dGVybiwgJmZjcmVzdWx0KTsKICAgICAvLyBGSVhNRTogc2hvdWxkIHdlIHNl
dCBzb21lIGRlZmF1bHQgZm9udD8KLSAgICBpZiAoIW1fcGF0dGVybikKLSAgICAgICAgZ290byBm
cmVlUGF0dGVybjsKLSAgICBmb250RmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9y
X3BhdHRlcm4obV9wYXR0ZXJuKTsKLSAgICBjYWlyb19tYXRyaXhfdCBjdG07Ci0gICAgY2Fpcm9f
bWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIG1fZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpLCBtX2ZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7Ci0gICAgY2Fpcm9fbWF0
cml4X2luaXRfaWRlbnRpdHkoJmN0bSk7Ci0gICAgb3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9u
c19jcmVhdGUoKTsKLSAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUo
Zm9udEZhY2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKLSAgICBjYWlyb19mb250X2Zh
Y2VfZGVzdHJveShmb250RmFjZSk7Ci0gICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0
aW9ucyk7Ci0KLWZyZWVQYXR0ZXJuOgotICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVybik7Cisg
ICAgaWYgKG1fZm9udCkKKyAgICAgICAgbV9zY2FsZWRGb250ID0gcGFuZ29fY2Fpcm9fZm9udF9n
ZXRfc2NhbGVkX2ZvbnQoUEFOR09fQ0FJUk9fRk9OVChtX2ZvbnQpKTsKKworICAgIHBhbmdvX2Zv
bnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7CiB9CiAKIGJvb2wgRm9udFBsYXRmb3Jt
RGF0YTo6aW5pdCgpCkBAIC0xMTcsMTAgKzk5LDI1IEBAIGJvb2wgRm9udFBsYXRmb3JtRGF0YTo6
aW5pdCgpCiAgICAgaWYgKGluaXRpYWxpemVkKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBp
bml0aWFsaXplZCA9IHRydWU7Ci0gICAgaWYgKCFGY0luaXQoKSkgewotICAgICAgICBmcHJpbnRm
KHN0ZGVyciwgIkNhbid0IGluaXQgZm9udCBjb25maWcgbGlicmFyeVxuIik7Ci0gICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgIGlmICghbV9mb250TWFwKQorICAgICAgICBtX2ZvbnRNYXAgPSBw
YW5nb19jYWlyb19mb250X21hcF9uZXcoKTsKKyAgICBpZiAoIW1faGFzaFRhYmxlKSB7CisgICAg
ICAgIFBhbmdvRm9udEZhbWlseSoqZmFtaWxpZXMgPSAwOworICAgICAgICBpbnQgbl9mYW1pbGll
cyA9IDA7CisKKyAgICAgICAgbV9oYXNoVGFibGUgPSBnX2hhc2hfdGFibGVfbmV3X2Z1bGwoZ19z
dHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19vYmplY3RfdW5yZWYpOworCisgICAgICAg
IHBhbmdvX2ZvbnRfbWFwX2xpc3RfZmFtaWxpZXMgKG1fZm9udE1hcCwgJmZhbWlsaWVzLCAmbl9m
YW1pbGllcyk7CisKKyAgICAgICAgZm9yIChpbnQgZmFtaWx5ID0gMDsgZmFtaWx5IDwgbl9mYW1p
bGllczsgZmFtaWx5KyspCisgICAgICAgICAgICAgICAgZ19oYXNoX3RhYmxlX2luc2VydCAobV9o
YXNoVGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19zdHJkdXAo
cGFuZ29fZm9udF9mYW1pbHlfZ2V0X25hbWUoZmFtaWxpZXNbZmFtaWx5XSkpLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdfb2JqZWN0X3JlZihmYW1pbGllc1tmYW1pbHld
KSk7CisKKyAgICAgICAgZ19mcmVlKGZhbWlsaWVzKTsKICAgICB9CisKICAgICByZXR1cm4gdHJ1
ZTsKIH0KIApAQCAtMTMwLDEwICsxMjcsMTEgQEAgRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0
Zm9ybURhdGEoKQogCiBib29sIEZvbnRQbGF0Zm9ybURhdGE6OmlzRml4ZWRQaXRjaCgpCiB7Ci0g
ICAgaW50IHNwYWNpbmc7Ci0gICAgaWYgKEZjUGF0dGVybkdldEludGVnZXIobV9wYXR0ZXJuLCBG
Q19TUEFDSU5HLCAwLCAmc3BhY2luZykgPT0gRmNSZXN1bHRNYXRjaCkKLSAgICAgICAgcmV0dXJu
IHNwYWNpbmcgPT0gRkNfTU9OTzsKLSAgICByZXR1cm4gZmFsc2U7CisgICAgUGFuZ29Gb250RGVz
Y3JpcHRpb24qIGRlc2NyaXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmliZV93aXRoX2Fic29sdXRl
X3NpemUobV9mb250KTsKKyAgICBQYW5nb0ZvbnRGYW1pbHkqIGZhbWlseSA9IHJlaW50ZXJwcmV0
X2Nhc3Q8UGFuZ29Gb250RmFtaWx5Kj4oZ19oYXNoX3RhYmxlX2xvb2t1cChtX2hhc2hUYWJsZSwg
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9nZXRfZmFtaWx5KGRlc2NyaXB0aW9uKSkpOworICAgIHBh
bmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShkZXNjcmlwdGlvbik7CisKKyAgICByZXR1cm4gcGFu
Z29fZm9udF9mYW1pbHlfaXNfbW9ub3NwYWNlKGZhbWlseSk7CiB9CiAKIHZvaWQgRm9udFBsYXRm
b3JtRGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29uc3QKQEAgLTE0NSwxMiArMTQzLDE4IEBA
IHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29uc3QKIAogYm9v
bCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIG90
aGVyKSBjb25zdAogewotICAgIGlmIChtX3BhdHRlcm4gPT0gb3RoZXIubV9wYXR0ZXJuKQorICAg
IGlmIChtX2ZvbnQgPT0gb3RoZXIubV9mb250KQogICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICBp
ZiAobV9wYXR0ZXJuID09IDAgfHwgbV9wYXR0ZXJuID09IHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0
ZXJuKj4oLTEpCi0gICAgICAgICAgICB8fCBvdGhlci5tX3BhdHRlcm4gPT0gMCB8fCBvdGhlci5t
X3BhdHRlcm4gPT0gcmVpbnRlcnByZXRfY2FzdDxGY1BhdHRlcm4qPigtMSkpCisgICAgaWYgKG1f
Zm9udCA9PSAwIHx8IG1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKQor
ICAgICAgICAgICAgfHwgb3RoZXIubV9mb250ID09IDAgfHwgb3RoZXIubV9mb250ID09IHJlaW50
ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIEZjUGF0dGVybkVxdWFsKG1fcGF0dGVybiwgb3RoZXIubV9wYXR0ZXJuKTsKKworICAg
IFBhbmdvRm9udERlc2NyaXB0aW9uKiB0aGlzRGVzYyA9IHBhbmdvX2ZvbnRfZGVzY3JpYmUobV9m
b250KTsKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogb3RoZXJEZXNjID0gcGFuZ29fZm9udF9k
ZXNjcmliZShvdGhlci5tX2ZvbnQpOworICAgIGJvb2wgcmVzdWx0ID0gcGFuZ29fZm9udF9kZXNj
cmlwdGlvbl9lcXVhbCh0aGlzRGVzYywgb3RoZXJEZXNjKTsKKyAgICBwYW5nb19mb250X2Rlc2Ny
aXB0aW9uX2ZyZWUob3RoZXJEZXNjKTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUo
dGhpc0Rlc2MpOworICAgIHJldHVybiByZXN1bHQ7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlR3RrLmNwcAppbmRleCBj
MGJjZmE0Li44ODI5YzlmIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9HbHlwaFBhZ2VUcmVlTm9kZUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVHdGsuY3BwCkBAIC0yLDYgKzIsNyBAQAogICogQ29weXJp
Z2h0IChDKSAyMDA2LCAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqIENv
cHlyaWdodCAoQykgMjAwNiBNaWNoYWVsIEVtbWVsIG1pa2UuZW1tZWxAZ21haWwuY29tIAogICog
Q29weXJpZ2h0IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4K
KyAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsOSArMzMsMzkgQEAKICNpbmNs
dWRlICJHbHlwaFBhZ2VUcmVlTm9kZS5oIgogCiAjaW5jbHVkZSAiRm9udERhdGEuaCIKKyNpbmNs
dWRlIDxwYW5nby9wYW5nby1mb250Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorc3RhdGlj
IFBhbmdvR2x5cGggcGFuZ29fZm9udF9nZXRfZ2x5cGggKFBhbmdvRm9udCogZm9udCwgUGFuZ29D
b250ZXh0KiBjb250ZXh0LCBndW5pY2hhciB3YykKK3sKKyAgICBQYW5nb0dseXBoIHJlc3VsdCA9
IDA7CisgICAgZ2NoYXIgYnVmZmVyWzddOworCisgICAgZ2ludCAgbGVuZ3RoID0gZ191bmljaGFy
X3RvX3V0Zjgod2MsIGJ1ZmZlcik7CisgICAgZ19yZXR1cm5fdmFsX2lmX2ZhaWwobGVuZ3RoLCAw
KTsKKworICAgIEdMaXN0KiBpdGVtcyA9IHBhbmdvX2l0ZW1pemUoY29udGV4dCwgYnVmZmVyLCAw
LCBsZW5ndGgsIE5VTEwsIE5VTEwpOworCisgICAgaWYgKGdfbGlzdF9sZW5ndGgoaXRlbXMpID09
IDEpIHsKKyAgICAgICAgUGFuZ29HbHlwaFN0cmluZyogZ2x5cGhzID0gcGFuZ29fZ2x5cGhfc3Ry
aW5nX25ldygpOworCisgICAgICAgIHBhbmdvX3NoYXBlIChidWZmZXIsIGxlbmd0aCwgJigoUGFu
Z29JdGVtKilpdGVtcy0+ZGF0YSktPmFuYWx5c2lzLCBnbHlwaHMpOworCisgICAgICAgIGlmIChn
bHlwaHMtPm51bV9nbHlwaHMgPT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+Z2x5
cGhzWzBdLmdseXBoOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnX3dhcm5pbmcgKCJkaWRu
J3QgZ2V0IDEgZ2x5cGggYnV0ICVkIiwgZ2x5cGhzLT5udW1fZ2x5cGhzKTsKKworICAgICAgICBw
YW5nb19nbHlwaF9zdHJpbmdfZnJlZSAoZ2x5cGhzKTsKKyAgICB9CisKKyAgICBnX2xpc3RfZm9y
ZWFjaChpdGVtcywgKEdGdW5jKXBhbmdvX2l0ZW1fZnJlZSwgTlVMTCk7CisgICAgZ19saXN0X2Zy
ZWUoaXRlbXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogYm9vbCBHbHlwaFBhZ2U6OmZp
bGwoVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSog
Zm9udERhdGEpCiB7CiAgICAgLy8gVGhlIGJ1ZmZlckxlbmd0aCB3aWxsIGJlIGdyZWF0ZXIgdGhh
biB0aGUgZ2x5cGggcGFnZSBzaXplIGlmIHRoZSBidWZmZXIgaGFzIFVuaWNvZGUgc3VwcGxlbWVu
dGFyeSBjaGFyYWN0ZXJzLgpAQCAtNDIsMTMgKzczLDEyIEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxs
KFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udERhdGEqIGZv
bnRECiAgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6c2l6ZSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwogCi0gICAgRlRfRmFjZSBmYWNlID0gY2Fpcm9fZnRfc2NhbGVkX2ZvbnRfbG9j
a19mYWNlKGZvbnREYXRhLT5tX2ZvbnQubV9zY2FsZWRGb250KTsKLSAgICBpZiAoIWZhY2UpCisg
ICAgaWYgKCFmb250RGF0YS0+bV9mb250Lm1fZm9udCB8fCBmb250RGF0YS0+bV9mb250Lm1fZm9u
dCA9PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udCo+KC0xKSkKICAgICAgICAgcmV0dXJuIGZh
bHNlOwogCiAgICAgYm9vbCBoYXZlR2x5cGhzID0gZmFsc2U7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgaSsrKSB7Ci0gICAgICAgIEdseXBoIGdseXBoID0g
RmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBidWZmZXJbaV0pOworICAgICAgICBHbHlwaCBnbHlw
aCA9IHBhbmdvX2ZvbnRfZ2V0X2dseXBoKGZvbnREYXRhLT5tX2ZvbnQubV9mb250LCBmb250RGF0
YS0+bV9mb250Lm1fY29udGV4dCwgYnVmZmVyW2ldKTsKICAgICAgICAgaWYgKCFnbHlwaCkKICAg
ICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIDAsIDApOwogICAgICAgICBlbHNlIHsK
QEAgLTU3LDggKzg3LDYgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5z
aWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250RGF0YSogZm9udEQKICAgICAgICAgfQogICAg
IH0KIAotICAgIGNhaXJvX2Z0X3NjYWxlZF9mb250X3VubG9ja19mYWNlKGZvbnREYXRhLT5tX2Zv
bnQubV9zY2FsZWRGb250KTsKLQogICAgIHJldHVybiBoYXZlR2x5cGhzOwogfQogCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19631</attachid>
            <date>2008-03-10 07:02:57 -0700</date>
            <delta_ts>2008-03-10 07:14:10 -0700</delta_ts>
            <desc>Pango font backend.</desc>
            <filename>0001-Add-Pango-font-backend.patch</filename>
            <type>text/plain</type>
            <size>30063</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSAwYzFhNjExNTQyMzcyMGRhYjBmZWI5M2UwYmE4YjAxY2QzODAyMzJlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CkRhdGU6IE1vbiwg
MTAgTWFyIDIwMDggMTQ6NTc6MjMgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBZGQgUGFuZ28gZm9u
dCBiYWNrZW5kLgoKU3VwcG9ydCBtdWx0aXBsZSBmb250IGJhY2tlbmRzIGFuZCBhZGQgbmV3IHBh
bmdvIGZvbnQgYmFja2VuZC4KLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTEgKwogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDM4ICsrKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArKystCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwICAgICB8ICAgIDQgKwogLi4uL2dyYXBoaWNz
L2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwICAgfCAgIDc2ICsrKysrKysKIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaCAgIHwgICAyNyAr
KystCiAuLi4vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAgICAgICAgICB8
ICAyMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJl
ZU5vZGVQYW5nby5jcHAgICAgICAgIHwgICA5MyArKysrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcCAgfCAgMTQ5ICsrKysrKysrKysrKysKIGNv
bmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCAr
KwogMTAgZmlsZXMgY2hhbmdlZCwgNjYyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YVBhbmdvLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdv
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1Np
bXBsZUZvbnREYXRhUGFuZ28uY3BwCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9n
CmluZGV4IDM3YTY3ZDcuLmMxZWU0M2YgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOC0wMy0xMCAgWGFuIExvcGV6ICA8eGFuQGdub21l
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyOQorCisgICAgICAgIEFk
ZCBvcHRpb25hbCBmb250IGJhY2tlbmQgc3VwcG9ydCB3aXRoIGZyZWV0eXBlIGFuZCBwYW5nbwor
ICAgICAgICBiYWNrZW5kcy4gRGVmYXVsdCBpcyBmcmVldHlwZSBmb3Igbm93LgorICAgICAgICAK
KyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8
aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTU5ZTc0
Zi4uZmZlNzFkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAwOC0wMy0xMCAgWGFuIExvcGV6ICA8eGFuQGdu
b21lLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyOQorCisgICAgICAg
IEFkZCBQYW5nbyBmb250IGJhY2tlbmQuCisgICAgICAgIAorICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RXhpc3RzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBs
YXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpm
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
Ojp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
Ojppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFuZ29fZm9udF9nZXRfZ2x5cGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmaWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpkZXRlcm1pbmVQaXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpzZXRGb250KToKKwogMjAwOC0wMy0xMCAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFd4IGxpbmtpbmcgZml4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMmMwYTc3YS4uMGZk
ODQ0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC05ODAsMTEgKzk4MCw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250Q2FjaGVHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvRm9udEd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0
Zm9ybURhdGFHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBh
Z2VUcmVlTm9kZUd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBs
ZUZvbnREYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFnZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwIFwKQEAgLTEwNDIsNiArMTAzOCwzNCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCiBlbmRpZiAjIEVORCBVU0VfQ1VSTAogCisjIC0tLQorIyBG
cmVldHlwZSBmb250IGJhY2tlbmQKKyMgLS0tCitpZiBVU0VfRlJFRVRZUEUKK3dlYmtpdGd0a19j
cHBmbGFncyArPSBcCisJLURVU0VfRlJFRVRZUEU9MQorCit3ZWJraXRndGtfc291cmNlcyArPSBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsu
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZUd0
ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3Rr
LmNwcAorZW5kaWYgIyBFTkQgVVNFX0ZSRUVUWVBFCisKKyMgLS0tCisjIFBhbmdvIGZvbnQgYmFj
a2VuZAorIyAtLS0KK2lmIFVTRV9QQU5HTword2Via2l0Z3RrX2NwcGZsYWdzICs9IFwKKwktRFVT
RV9QQU5HTz0xCisKK3dlYmtpdGd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcCBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAKK2VuZGlm
ICMgRU5EIFVTRV9QQU5HTworCiAjIC0tLS0KICMgQ3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nIHN1
cHBvcnQKICMgLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udENhY2hlR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNo
ZUd0ay5jcHAKaW5kZXggYWVjNTc1OC4uZTQyNDgyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwCkBAIC02NCw3ICs2NCwxMSBAQCBGb250UGxh
dGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmbwogYm9vbCBGb250Q2FjaGU6OmZvbnRFeGlzdHMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQog
ewogICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFt
aWx5KTsKKyNpZmRlZiBVU0VfUEFOR08KKyAgICByZXR1cm4gcGxhdGZvcm1EYXRhLm1fZm9udCAh
PSAwOworI2Vsc2UKICAgICByZXR1cm4gcGxhdGZvcm1EYXRhLm1fcGF0dGVybiAhPSAwOworI2Vu
ZGlmCiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4wMWQ3MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcApAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKKyAgLy8gICAgY2Fpcm9fZm9u
dF9mYWNlX2Rlc3Ryb3kobV9mb250RmFjZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYykKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBz
aXplLCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lkKiBk
YXRhKQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigpOwor
fQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworI2lmIDAKKyAgICBBU1NFUlRfQVJHKGJ1ZmZlciwg
YnVmZmVyKTsKKworICAgIGludCBlcnJvcjsKKworICAgIHN0YXRpYyBGVF9MaWJyYXJ5IGxpYnJh
cnkgPSAwOworICAgIGlmICghbGlicmFyeSkgeworICAgICAgICBlcnJvciA9IEZUX0luaXRfRnJl
ZVR5cGUoJmxpYnJhcnkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGxpYnJh
cnkgPSAwOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBG
VF9GYWNlIGZhY2U7CisgICAgZXJyb3IgPSBGVF9OZXdfTWVtb3J5X0ZhY2UobGlicmFyeSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBGVF9CeXRlKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNp
emUoKSwgMCwgJmZhY2UpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBidWZmZXItPnJlZigpOworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNhaXJv
X2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2Z0X2ZhY2UoZmFjZSwgMCk7CisKKyAgICBzdGF0aWMg
Y2Fpcm9fdXNlcl9kYXRhX2tleV90IGJ1ZmZlcktleTsKKyAgICBjYWlyb19mb250X2ZhY2Vfc2V0
X3VzZXJfZGF0YShmb250RmFjZSwgJmJ1ZmZlcktleSwgYnVmZmVyLCByZWxlYXNlRGF0YSk7CisK
KyAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZm9udEZhY2UpOworI2VuZGlm
CisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA3NzhkNTI1Li4wNWUzMWM1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC01LDYg
KzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCiAgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMwLDggKzMxLDEyIEBACiAjaW5jbHVkZSAi
R2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDxj
YWlyby5oPgorI2lmZGVmIFVTRV9GUkVFVFlQRQogI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CiAjaW5j
bHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CisjZWxpZiBVU0VfUEFOR08KKyNpbmNsdWRl
IDxwYW5nby9wYW5nb2NhaXJvLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zOSwxMiArNDQsMjIgQEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJsaWM6CiAgICAg
Y2xhc3MgRGVsZXRlZCB7fTsKICAgICBGb250UGxhdGZvcm1EYXRhKERlbGV0ZWQpCisjaWZkZWYg
VVNFX0ZSRUVUWVBFCiAgICAgICAgIDogbV9wYXR0ZXJuKHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0
ZXJuKj4oLTEpKQorI2VsaWYgVVNFX1BBTkdPCisgICAgICAgIDogbV9jb250ZXh0KDApCisgICAg
ICAgICwgbV9mb250KHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorI2VuZGlmCiAg
ICAgICAgICwgbV9zY2FsZWRGb250KDApCiAgICAgICAgIHsgfQogCiAgICAgRm9udFBsYXRmb3Jt
RGF0YSgpCisjaWZkZWYgVVNFX0ZSRUVUWVBFCiAgICAgICAgIDogbV9wYXR0ZXJuKDApCisjZWxp
ZiBVU0VfUEFOR08KKyAgICAgICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkK
KyNlbmRpZgogICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQogICAgICAgICB7IH0KIApAQCAtNjQs
MTMgKzc5LDIxIEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsK
LSAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1
dGVIYXNoKCByZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hD
b2RlcykgLyBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9
IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCl9OworICAgICAgICBy
ZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhh
c2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKIAorI2lm
ZGVmIFVTRV9GUkVFVFlQRQogICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOworI2VsaWYgVVNFX1BB
TkdPCisgICAgc3RhdGljIFBhbmdvRm9udE1hcCogbV9mb250TWFwOworICAgIHN0YXRpYyBHSGFz
aFRhYmxlKiBtX2hhc2hUYWJsZTsKKworICAgIFBhbmdvQ29udGV4dCogbV9jb250ZXh0OworICAg
IFBhbmdvRm9udCogbV9mb250OworI2VuZGlmCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERl
c2NyaXB0aW9uOwogICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKIH07CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRh
UGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0
YVBhbmdvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjU0MmU4Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRm
b3JtRGF0YVBhbmdvLmNwcApAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJj
aCBDZW50ZXIgVVNBLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRl
IDxwYW5nby9wYW5nby5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKworLy8gVXNl
IGNhaXJvLWZ0IGkgYSByZWNlbnQgZW5vdWdoIFBhbmdvIHZlcnNpb24gaXNuJ3QgYXZhaWxhYmxl
CisjaWYgIVBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+
CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICBQYW5nb0ZvbnRNYXAqIEZvbnRQ
bGF0Zm9ybURhdGE6Om1fZm9udE1hcCA9IDA7CisgIEdIYXNoVGFibGUqIEZvbnRQbGF0Zm9ybURh
dGE6Om1faGFzaFRhYmxlID0gMDsKKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAg
ICAsIG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikKKyAgICAsIG1fc2NhbGVkRm9u
dCgwKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsKKworICAgIENTdHJpbmcgc3Rv
cmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuc3RyaW5nKCkudXRmOCgpOworICAgIGNoYXIgY29uc3Qq
IGZhbWlsaWVzW10gPSB7CisgICAgICBzdG9yZWRfZmFtaWx5LmRhdGEoKSwKKyAgICAgIE5VTEwK
KyAgICB9OworCisgICAgc3dpdGNoIChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7
CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICBmYW1pbGll
c1sxXSA9ICJzZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7CisgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKKyAgICAg
ICAgZmFtaWxpZXNbMV0gPSAibW9ub3NwYWNlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgorICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFu
ZGFyZEZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJzYW5zIjsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2Ny
aXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9uZXcoKTsKKyAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX3NldF9hYnNvbHV0ZV9zaXplKGRlc2NyaXB0aW9uLCBmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRTaXplKCkgKiBQQU5HT19TQ0FMRSk7CisKKyAgICBpZiAoZm9udERlc2NyaXB0aW9u
LmJvbGQoKSkKKyAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfd2VpZ2h0KGRlc2Ny
aXB0aW9uLCBQQU5HT19XRUlHSFRfQk9MRCk7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFs
aWMoKSkKKyAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfc3R5bGUoZGVzY3JpcHRp
b24sIFBBTkdPX1NUWUxFX0lUQUxJQyk7CisKKyAgICBtX2NvbnRleHQgPSBwYW5nb19jYWlyb19m
b250X21hcF9jcmVhdGVfY29udGV4dChQQU5HT19DQUlST19GT05UX01BUChtX2ZvbnRNYXApKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgIW1fZm9udCAmJiBpIDwgR19OX0VMRU1FTlRT
KGZhbWlsaWVzKTsgaSsrKSB7CisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2Zh
bWlseShkZXNjcmlwdGlvbiwgZmFtaWxpZXNbaV0pOworICAgICAgICBtX2ZvbnQgPSBwYW5nb19m
b250X21hcF9sb2FkX2ZvbnQobV9mb250TWFwLCBtX2NvbnRleHQsIGRlc2NyaXB0aW9uKTsKKyAg
ICB9CisKKyNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKKyAgICBpZiAobV9mb250KQor
ICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2UocGFuZ29f
Y2Fpcm9fZm9udF9nZXRfc2NhbGVkX2ZvbnQoUEFOR09fQ0FJUk9fRk9OVChtX2ZvbnQpKSk7Cisj
ZWxzZQorICAgIC8vIFRoaXMgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBvbGRlciB2ZXJzaW9ucyBv
ZiBQYW5nbyBpcyBub3Qgd2VsbC10ZXN0ZWQuCisgICAgaWYgKG1fZm9udCkgeworICAgICAgICBQ
YW5nb0ZjRm9udCogZmNmb250ID0gUEFOR09fRkNfRk9OVChtX2ZvbnQpOworICAgICAgICBjYWly
b19mb250X2ZhY2VfdCogZmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRl
cm4oZmNmb250LT5mb250X3BhdHRlcm4pOworICAgICAgICBkb3VibGUgc2l6ZTsKKyAgICAgICAg
aWYgKEZjUGF0dGVybkdldERvdWJsZShmY2ZvbnQtPmZvbnRfcGF0dGVybiwgRkNfUElYRUxfU0la
RSwgMCwgJnNpemUpICE9IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgICAgc2l6ZSA9IDEyLjA7Cisg
ICAgICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CisgICAgICAgIGNhaXJvX21hdHJpeF9p
bml0X3NjYWxlKCZmb250TWF0cml4LCBzaXplLCBzaXplKTsKKyAgICAgICAgY2Fpcm9fZm9udF9v
cHRpb25zX3QqIGZvbnRPcHRpb25zOworICAgICAgICBpZiAocGFuZ29fY2Fpcm9fY29udGV4dF9n
ZXRfZm9udF9vcHRpb25zKG1fY29udGV4dCkpCisgICAgICAgICAgZm9udE9wdGlvbnMgPSBjYWly
b19mb250X29wdGlvbnNfY29weShwYW5nb19jYWlyb19jb250ZXh0X2dldF9mb250X29wdGlvbnMo
bV9jb250ZXh0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJv
X2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAg
ICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICAgICAgbV9zY2FsZWRG
b250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZhY2UsICZmb250TWF0cml4LCAmY3RtLCBm
b250T3B0aW9ucyk7CisgICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KGZvbnRPcHRp
b25zKTsKKyAgICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZmFjZSk7CisgICAgfQorI2Vu
ZGlmCisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKK30KKwor
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAs
IG1fZm9udERlc2NyaXB0aW9uKCkKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgbV9mb250RGVzY3JpcHRp
b24uc2V0Qm9sZChib2xkKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoaXRhbGlj
KTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2Zh
Y2VfdCogZm9udEZhY2UsIGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDog
bV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAsIG1fZm9udERlc2NyaXB0aW9uKCkK
KyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Qm9sZChib2xkKTsKKyAg
ICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoaXRhbGljKTsKKworICAgIGNhaXJvX21hdHJp
eF90IGZvbnRNYXRyaXg7CisgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgs
IHNpemUsIHNpemUpOworICAgIGNhaXJvX21hdHJpeF90IGN0bTsKKyAgICBjYWlyb19tYXRyaXhf
aW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9
IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKworICAgIC8vIFdlIGZvcmNlIGFudGlhbGlh
c2luZyBhbmQgZGlzYWJsZSBoaW50aW5nIHRvIHByb3ZpZGUgY29uc2lzdGVudAorICAgIC8vIHR5
cG9ncmFwaGljIHF1YWxpdGllcyBmb3IgY3VzdG9tIGZvbnRzIG9uIGFsbCBwbGF0Zm9ybXMuCisg
ICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRf
U1RZTEVfTk9ORSk7CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9u
cywgQ0FJUk9fQU5USUFMSUFTX0dSQVkpOworCisgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2Nh
bGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9ucyk7Cisg
ICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Cit9CisKK2Jvb2wgRm9udFBs
YXRmb3JtRGF0YTo6aW5pdCgpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGluaXRp
YWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9mb250TWFwKQorICAgICAgICBtX2ZvbnRNYXAg
PSBwYW5nb19jYWlyb19mb250X21hcF9nZXRfZGVmYXVsdCgpOworICAgIGlmICghbV9oYXNoVGFi
bGUpIHsKKyAgICAgICAgUGFuZ29Gb250RmFtaWx5KiogZmFtaWxpZXMgPSAwOworICAgICAgICBp
bnQgbl9mYW1pbGllcyA9IDA7CisKKyAgICAgICAgbV9oYXNoVGFibGUgPSBnX2hhc2hfdGFibGVf
bmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19vYmplY3RfdW5yZWYp
OworCisgICAgICAgIHBhbmdvX2ZvbnRfbWFwX2xpc3RfZmFtaWxpZXMobV9mb250TWFwLCAmZmFt
aWxpZXMsICZuX2ZhbWlsaWVzKTsKKworICAgICAgICBmb3IgKGludCBmYW1pbHkgPSAwOyBmYW1p
bHkgPCBuX2ZhbWlsaWVzOyBmYW1pbHkrKykKKyAgICAgICAgICAgICAgICBnX2hhc2hfdGFibGVf
aW5zZXJ0KG1faGFzaFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19zdHJkdXAocGFuZ29fZm9udF9mYW1pbHlfZ2V0X25hbWUoZmFtaWxpZXNbZmFtaWx5XSkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3RfcmVmKGZhbWlsaWVz
W2ZhbWlseV0pKTsKKworICAgICAgICBnX2ZyZWUoZmFtaWxpZXMpOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7
CisgICAgLy8gRGVzdHJveSB0YWtlcyBwbGFjZSBpbiBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95
KCkuCit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKK3sKKyAgICBQ
YW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaWJlX3dp
dGhfYWJzb2x1dGVfc2l6ZShtX2ZvbnQpOworICAgIFBhbmdvRm9udEZhbWlseSogZmFtaWx5ID0g
cmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnRGYW1pbHkqPihnX2hhc2hfdGFibGVfbG9va3VwKG1f
aGFzaFRhYmxlLCBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9mYW1pbHkoZGVzY3JpcHRpb24p
KSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKKyAgICBy
ZXR1cm4gcGFuZ29fZm9udF9mYW1pbHlfaXNfbW9ub3NwYWNlKGZhbWlseSk7Cit9CisKK3ZvaWQg
Rm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9zY2FsZWRGb250KTsKKworICAgIGNhaXJvX3NldF9zY2FsZWRfZm9udChjciwgbV9zY2Fs
ZWRGb250KTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX2ZvbnQgPT0gb3RoZXIu
bV9mb250KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9mb250ID09IDAgfHwgbV9m
b250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpCisgICAgICAgIHx8IG90aGVy
Lm1fZm9udCA9PSAwIHx8IG90aGVyLm1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9u
dCo+KC0xKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFBhbmdvRm9udERlc2NyaXB0aW9u
KiB0aGlzRGVzYyA9IHBhbmdvX2ZvbnRfZGVzY3JpYmUobV9mb250KTsKKyAgICBQYW5nb0ZvbnRE
ZXNjcmlwdGlvbiogb3RoZXJEZXNjID0gcGFuZ29fZm9udF9kZXNjcmliZShvdGhlci5tX2ZvbnQp
OworICAgIGJvb2wgcmVzdWx0ID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9lcXVhbCh0aGlzRGVz
Yywgb3RoZXJEZXNjKTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUob3RoZXJEZXNj
KTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUodGhpc0Rlc2MpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNDI5YzEzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xs
YWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50
ZXIgVVNBLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVO
b2RlLmgiCisKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPHBhbmdvL3Bh
bmdvLWZvbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUGFuZ29HbHlwaCBw
YW5nb19mb250X2dldF9nbHlwaChQYW5nb0ZvbnQqIGZvbnQsIFBhbmdvQ29udGV4dCogY29udGV4
dCwgZ3VuaWNoYXIgd2MpCit7CisgICAgUGFuZ29HbHlwaCByZXN1bHQgPSAwOworICAgIGdjaGFy
IGJ1ZmZlcls3XTsKKworICAgIGdpbnQgIGxlbmd0aCA9IGdfdW5pY2hhcl90b191dGY4KHdjLCBi
dWZmZXIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbmd0aCwgMCk7CisKKyAgICBHTGlz
dCogaXRlbXMgPSBwYW5nb19pdGVtaXplKGNvbnRleHQsIGJ1ZmZlciwgMCwgbGVuZ3RoLCBOVUxM
LCBOVUxMKTsKKworICAgIGlmIChnX2xpc3RfbGVuZ3RoKGl0ZW1zKSA9PSAxKSB7CisgICAgICAg
IFBhbmdvR2x5cGhTdHJpbmcqIGdseXBocyA9IHBhbmdvX2dseXBoX3N0cmluZ19uZXcoKTsKKwor
ICAgICAgICBwYW5nb19zaGFwZShidWZmZXIsIGxlbmd0aCwgJigoUGFuZ29JdGVtKilpdGVtcy0+
ZGF0YSktPmFuYWx5c2lzLCBnbHlwaHMpOworCisgICAgICAgIGlmIChnbHlwaHMtPm51bV9nbHlw
aHMgPT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+Z2x5cGhzWzBdLmdseXBoOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBnX3dhcm5pbmcoImRpZG4ndCBnZXQgMSBnbHlwaCBi
dXQgJWQiLCBnbHlwaHMtPm51bV9nbHlwaHMpOworCisgICAgICAgIHBhbmdvX2dseXBoX3N0cmlu
Z19mcmVlKGdseXBocyk7CisgICAgfQorCisgICAgZ19saXN0X2ZvcmVhY2goaXRlbXMsIChHRnVu
YylwYW5nb19pdGVtX2ZyZWUsIE5VTEwpOworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVu
Z3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZl
ciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qg
c3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6
c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmb250RGF0YS0+bV9mb250
Lm1fZm9udCB8fCBmb250RGF0YS0+bV9mb250Lm1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBh
bmdvRm9udCo+KC0xKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXZlR2x5
cGhzID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgIEdseXBoIGdseXBoID0gcGFuZ29fZm9udF9nZXRfZ2x5cGgoZm9udERhdGEtPm1f
Zm9udC5tX2ZvbnQsIGZvbnREYXRhLT5tX2ZvbnQubV9jb250ZXh0LCBidWZmZXJbaV0pOworICAg
ICAgICBpZiAoIWdseXBoKQorICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0
ICsgaSwgMCwgMCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAgICAgIGhhdmVHbHlw
aHMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZv
bnREYXRhUGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9u
dERhdGFQYW5nby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiY2Vh
NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBs
ZUZvbnREYXRhUGFuZ28uY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkds
eXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFy
Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Jbml0KCkKK3sKKyAgICBjYWlyb19mb250X2V4dGVudHNfdCBmb250X2V4dGVudHM7CisgICAg
Y2Fpcm9fdGV4dF9leHRlbnRzX3QgdGV4dF9leHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250
X2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwgJmZvbnRfZXh0ZW50cyk7CisgICAgbV9hc2Nl
bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRfZXh0ZW50cy5hc2NlbnQpOworICAgIG1fZGVzY2Vu
dCA9IHN0YXRpY19jYXN0PGludD4oZm9udF9leHRlbnRzLmRlc2NlbnQpOworICAgIG1fbGluZVNw
YWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRfZXh0ZW50cy5oZWlnaHQpOworICAgIGNhaXJv
X3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAieCIsICZ0ZXh0
X2V4dGVudHMpOworICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7CisgICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fZm9udC5tX3NjYWxlZEZvbnQsICIgIiwgJnRl
eHRfZXh0ZW50cyk7CisgICAgbV9zcGFjZVdpZHRoID0gIHN0YXRpY19jYXN0PGludD4odGV4dF9l
eHRlbnRzLnhfYWR2YW5jZSk7CisgICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNj
ZW50IC0gbV9kZXNjZW50OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3koKQoreworICAgIGlmICghaXNDdXN0b21Gb250KCkpIHsKKworICAgICAgICBpZiAobV9mb250
Lm1fZm9udCAmJiBtX2ZvbnQubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4o
LTEpKSB7CisgICAgICAgICAgICBnX29iamVjdF91bnJlZihtX2ZvbnQubV9mb250KTsKKyAgICAg
ICAgICAgIG1fZm9udC5tX2ZvbnQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZm9u
dC5tX2NvbnRleHQpIHsKKyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmIChtX2ZvbnQubV9jb250
ZXh0KTsKKyAgICAgICAgICAgIG1fZm9udC5tX2NvbnRleHQgPSAwOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1fZm9udC5tX2hhc2hUYWJsZSkgeworICAgICAgICAgICAgZ19oYXNoX3RhYmxl
X2Rlc3Ryb3kobV9mb250Lm1faGFzaFRhYmxlKTsKKyAgICAgICAgICAgIG1fZm9udC5tX2hhc2hU
YWJsZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9mb250Lm1fc2NhbGVkRm9udCkg
eworICAgICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX2ZvbnQubV9zY2FsZWRG
b250KTsKKyAgICAgICAgICAgIG1fZm9udC5tX3NjYWxlZEZvbnQgPSAwOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK1NpbXBsZUZvbnRE
YXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnRE
YXRhKSB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CisgICAgICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZSgwLjcwZipmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgICAgICBjb25zdCBGb250UGxhdGZvcm1E
YXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFt
aWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRh
KCpwZGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworfQorCiti
b29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgYm9vbCByZXN1bHQgPSB0cnVlOworCisg
ICAgUGFuZ29Db3ZlcmFnZSogcmVxdWVzdGVkID0gcGFuZ29fY292ZXJhZ2VfZnJvbV9ieXRlcygo
Z3VjaGFyKiljaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFBhbmdvQ292ZXJhZ2UqIGF2YWlsYWJs
ZSA9IHBhbmdvX2ZvbnRfZ2V0X2NvdmVyYWdlKG1fZm9udC5tX2ZvbnQsIHBhbmdvX2xhbmd1YWdl
X2dldF9kZWZhdWx0KCkpOworICAgIHBhbmdvX2NvdmVyYWdlX21heChyZXF1ZXN0ZWQsIGF2YWls
YWJsZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgaWYgKFBBTkdPX0NPVkVSQUdFX05PTkUgPT0gcGFuZ29fY292ZXJhZ2VfZ2V0KHJlcXVl
c3RlZCwgaSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZihyZXF1ZXN0
ZWQpOworICAgIHBhbmdvX2NvdmVyYWdlX3VucmVmKGF2YWlsYWJsZSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7Cisg
ICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fZm9udC5pc0ZpeGVkUGl0Y2goKTsKK30KKworZmxv
YXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9mb250Lm1fc2NhbGVkRm9udCk7CisKKyAgICBjYWlyb19nbHlw
aF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBl
eHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9mb250Lm1fc2Nh
bGVkRm9udCwgJmNnbHlwaCwgMSwgJmV4dGVudHMpOworCisgICAgZmxvYXQgdyA9IChmbG9hdClt
X3NwYWNlV2lkdGg7CisgICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1cyhtX2ZvbnQubV9z
Y2FsZWRGb250KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSAh
PSAwKQorICAgICAgICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOworICAgIHJldHVybiB3
OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAor
eworICAgIEFTU0VSVChjcik7CisgICAgbV9mb250LnNldEZvbnQoY3IpOworfQorCit9CmRpZmYg
LS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNGE1OTE5OS4uZmZkOTcz
NyAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMzkzLDYg
KzM5MywxOSBAQCBBQ19BUkdfRU5BQkxFKGZhc3RfbWFsbG9jLAogICAgICAgICAgICAgICBbXSxb
aWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAieWVzIjsgdGhlbiBlbmFibGVfZmFzdF9tYWxsb2M9
Im5vIjsgZWxzZSBlbmFibGVfZmFzdF9tYWxsb2M9InllcyI7IGZpXSkKIEFDX01TR19SRVNVTFQo
WyRlbmFibGVfZmFzdF9tYWxsb2NdKQogCisjIGRldGVybWluZSB0aGUgZm9udCBiYWNrZW5kCitB
Q19NU0dfQ0hFQ0tJTkcoW3RoZSBmb250IGJhY2tlbmQgdG8gdXNlXSkKK0FDX0FSR19XSVRIKGZv
bnRfYmFja2VuZCwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZm9udC1iYWNr
ZW5kPUA8OkBmcmVldHlwZS9wYW5nb0A6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
W1NlbGVjdCBmb250IGJhY2tlbmQgW2RlZmF1bHQ9ZnJlZXR5cGVdXSksCisgICAgICAgICAgICBb
XSxbZm9udF9iYWNrZW5kPSJmcmVldHlwZSJdKQorCitjYXNlICIkd2l0aF9mb250X2JhY2tlbmQi
IGluCisgICAgIGZyZWV0eXBlfHBhbmdvKSA7OworICAgICAqKSBBQ19NU0dfRVJST1IoW0ludmFs
aWQgZm9udCBiYWNrZW5kOiBtdXN0IGJlIGZyZWV0eXBlIG9yIHBhbmdvLl0pIDs7Citlc2FjCitB
Q19NU0dfUkVTVUxUKFskZm9udF9iYWNrZW5kXSkKKwogIyBBZGQgJy1nJyBmbGFnIHRvIGdjYyBp
ZiBpdCdzIGRlYnVnIGJ1aWxkCiBpZiB0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5ZXMiOyB0aGVu
CiAgICBDWFhGTEFHUz0iJENYWEZMQUdTIC1nIgpAQCAtNDY5LDYgKzQ4MiwxMCBAQCBBTV9DT05E
SVRJT05BTChbVEFSR0VUX0RJUkVDVEZCXSwgW3Rlc3QgIiR3aXRoX3RhcmdldCIgPSAiZGlyZWN0
ZmIiXSkKICMgSFRUUCBiYWNrZW5kIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwoW1VTRV9D
VVJMXSwgW3Rlc3QgIiRodHRwX2JhY2tlbmQiID0gImN1cmwiXSkKIAorIyBGb250IGJhY2tlbmQg
Y29uZGl0aW9uYWxzCitBTV9DT05ESVRJT05BTChbVVNFX0ZSRUVUWVBFXSwgW3Rlc3QgIiR3aXRo
X2ZvbnRfYmFja2VuZCIgPSAiZnJlZXR5cGUiXSkKK0FNX0NPTkRJVElPTkFMKFtVU0VfUEFOR09d
LCBbdGVzdCAiJHdpdGhfZm9udF9iYWNrZW5kIiA9ICJwYW5nbyJdKQorCiAjIFdlYktpdCBmZWF0
dXJlIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9ERUJVR10sW3Rlc3QgIiRl
bmFibGVfZGVidWciID0gInllcyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9DUk9TU19ET0NV
TUVOVF9NRVNTQUdJTkddLFt0ZXN0ICIkZW5hYmxlX2Nyb3NzX2RvY3VtZW50X21lc3NhZ2luZyIg
PSAieWVzIl0pCkBAIC01MDQsNiArNTIxLDcgQEAgQnVpbGQgY29uZmlndXJhdGlvbjoKICBDb2Rl
IGNvdmVyYWdlIHN1cHBvcnQgICAgICAgICAgICAgOiAkZW5hYmxlX2NvdmVyYWdlCiAgVW5pY29k
ZSBiYWNrZW5kICAgICAgICAgICAgICAgICAgIDogJHVuaWNvZGVfYmFja2VuZAogIEhUVFAgYmFj
a2VuZCAgICAgICAgICAgICAgICAgICAgICA6ICRodHRwX2JhY2tlbmQKKyBGb250IGJhY2tlbmQg
ICAgICAgICAgICAgICAgICAgICAgOiAkd2l0aF9mb250X2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVt
b3J5IGFsbG9jYXRvciAgICAgICAgOiAkZW5hYmxlX2Zhc3RfbWFsbG9jCiBGZWF0dXJlczoKICBI
VE1MNSBjcm9zcy1kb2N1bWVudCBtZXNzYWdpbmcgICAgOiAkZW5hYmxlX2Nyb3NzX2RvY3VtZW50
X21lc3NhZ2luZwotLSAKMS41LjQuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19632</attachid>
            <date>2008-03-10 07:14:10 -0700</date>
            <delta_ts>2008-03-10 08:59:39 -0700</delta_ts>
            <desc>Add Pango font backend.</desc>
            <filename>0001-Add-Pango-font-backend.patch</filename>
            <type>text/plain</type>
            <size>30073</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBmYWFkYjgwN2Q4MDNmNzdjOTA4MzNkNTg0NTdiYjMwOGMyZGFiNjRlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CkRhdGU6IE1vbiwg
MTAgTWFyIDIwMDggMTQ6NTc6MjMgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBZGQgUGFuZ28gZm9u
dCBiYWNrZW5kLgoKU3VwcG9ydCBtdWx0aXBsZSBmb250IGJhY2tlbmRzIGFuZCBhZGQgbmV3IHBh
bmdvIGZvbnQgYmFja2VuZC4KLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTEgKwogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDM4ICsrKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArKystCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwICAgICB8ICAgIDQgKwogLi4uL2dyYXBoaWNz
L2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwICAgfCAgIDc2ICsrKysrKysKIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaCAgIHwgICAyNyAr
KystCiAuLi4vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAgICAgICAgICB8
ICAyMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJl
ZU5vZGVQYW5nby5jcHAgICAgICAgIHwgICA5MyArKysrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcCAgfCAgMTQ5ICsrKysrKysrKysrKysKIGNv
bmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCAr
KwogMTAgZmlsZXMgY2hhbmdlZCwgNjYyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YVBhbmdvLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdv
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1Np
bXBsZUZvbnREYXRhUGFuZ28uY3BwCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9n
CmluZGV4IDM3YTY3ZDcuLmMxZWU0M2YgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOC0wMy0xMCAgWGFuIExvcGV6ICA8eGFuQGdub21l
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyOQorCisgICAgICAgIEFk
ZCBvcHRpb25hbCBmb250IGJhY2tlbmQgc3VwcG9ydCB3aXRoIGZyZWV0eXBlIGFuZCBwYW5nbwor
ICAgICAgICBiYWNrZW5kcy4gRGVmYXVsdCBpcyBmcmVldHlwZSBmb3Igbm93LgorICAgICAgICAK
KyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8
aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTU5ZTc0
Zi4uZmZlNzFkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAwOC0wMy0xMCAgWGFuIExvcGV6ICA8eGFuQGdu
b21lLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyOQorCisgICAgICAg
IEFkZCBQYW5nbyBmb250IGJhY2tlbmQuCisgICAgICAgIAorICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RXhpc3RzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBs
YXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpm
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
Ojp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
Ojppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFuZ29fZm9udF9nZXRfZ2x5cGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmaWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpkZXRlcm1pbmVQaXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpzZXRGb250KToKKwogMjAwOC0wMy0xMCAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFd4IGxpbmtpbmcgZml4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMmMwYTc3YS4uMGZk
ODQ0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC05ODAsMTEgKzk4MCw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250Q2FjaGVHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvRm9udEd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0
Zm9ybURhdGFHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBh
Z2VUcmVlTm9kZUd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBs
ZUZvbnREYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFnZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwIFwKQEAgLTEwNDIsNiArMTAzOCwzNCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCiBlbmRpZiAjIEVORCBVU0VfQ1VSTAogCisjIC0tLQorIyBG
cmVldHlwZSBmb250IGJhY2tlbmQKKyMgLS0tCitpZiBVU0VfRlJFRVRZUEUKK3dlYmtpdGd0a19j
cHBmbGFncyArPSBcCisJLURVU0VfRlJFRVRZUEU9MQorCit3ZWJraXRndGtfc291cmNlcyArPSBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsu
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZUd0
ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3Rr
LmNwcAorZW5kaWYgIyBFTkQgVVNFX0ZSRUVUWVBFCisKKyMgLS0tCisjIFBhbmdvIGZvbnQgYmFj
a2VuZAorIyAtLS0KK2lmIFVTRV9QQU5HTword2Via2l0Z3RrX2NwcGZsYWdzICs9IFwKKwktRFVT
RV9QQU5HTz0xCisKK3dlYmtpdGd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcCBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAKK2VuZGlm
ICMgRU5EIFVTRV9QQU5HTworCiAjIC0tLS0KICMgQ3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nIHN1
cHBvcnQKICMgLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udENhY2hlR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNo
ZUd0ay5jcHAKaW5kZXggYWVjNTc1OC4uZTQyNDgyOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwCkBAIC02NCw3ICs2NCwxMSBAQCBGb250UGxh
dGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmbwogYm9vbCBGb250Q2FjaGU6OmZvbnRFeGlzdHMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQog
ewogICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFt
aWx5KTsKKyNpZmRlZiBVU0VfUEFOR08KKyAgICByZXR1cm4gcGxhdGZvcm1EYXRhLm1fZm9udCAh
PSAwOworI2Vsc2UKICAgICByZXR1cm4gcGxhdGZvcm1EYXRhLm1fcGF0dGVybiAhPSAwOworI2Vu
ZGlmCiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3Jt
RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWlj
U3RyaW5nJiBmYW1pbHkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwLi4wMWQ3MDE4Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcApAQCAt
MCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFscCBUb2tlciA8YWxwQGF0
b2tlci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90
LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNB
LgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisjaW5jbHVkZSAiRm9u
dFBsYXRmb3JtRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0ZvbnRDdXN0b21QbGF0
Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKKyAgLy8gICAgY2Fpcm9fZm9u
dF9mYWNlX2Rlc3Ryb3kobV9mb250RmFjZSk7Cit9CisKK0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBi
b29sIGl0YWxpYykKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBz
aXplLCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0aWMgdm9pZCByZWxlYXNlRGF0YSh2b2lkKiBk
YXRhKQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRhdGEpLT5kZXJlZigpOwor
fQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRh
KFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworI2lmIDAKKyAgICBBU1NFUlRfQVJHKGJ1ZmZlciwg
YnVmZmVyKTsKKworICAgIGludCBlcnJvcjsKKworICAgIHN0YXRpYyBGVF9MaWJyYXJ5IGxpYnJh
cnkgPSAwOworICAgIGlmICghbGlicmFyeSkgeworICAgICAgICBlcnJvciA9IEZUX0luaXRfRnJl
ZVR5cGUoJmxpYnJhcnkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAgICAgICAgICAgIGxpYnJh
cnkgPSAwOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBG
VF9GYWNlIGZhY2U7CisgICAgZXJyb3IgPSBGVF9OZXdfTWVtb3J5X0ZhY2UobGlicmFyeSwgcmVp
bnRlcnByZXRfY2FzdDxjb25zdCBGVF9CeXRlKj4oYnVmZmVyLT5kYXRhKCkpLCBidWZmZXItPnNp
emUoKSwgMCwgJmZhY2UpOworICAgIGlmIChlcnJvcikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAg
ICBidWZmZXItPnJlZigpOworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSA9IGNhaXJv
X2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2Z0X2ZhY2UoZmFjZSwgMCk7CisKKyAgICBzdGF0aWMg
Y2Fpcm9fdXNlcl9kYXRhX2tleV90IGJ1ZmZlcktleTsKKyAgICBjYWlyb19mb250X2ZhY2Vfc2V0
X3VzZXJfZGF0YShmb250RmFjZSwgJmJ1ZmZlcktleSwgYnVmZmVyLCByZWxlYXNlRGF0YSk7CisK
KyAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZm9udEZhY2UpOworI2VuZGlm
CisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA3NzhkNTI1Li4wNWUzMWM1IDEwMDY0NAotLS0g
YS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmgKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oCkBAIC01LDYg
KzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQogICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCiAgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMwLDggKzMxLDEyIEBACiAjaW5jbHVkZSAi
R2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKICNpbmNsdWRlIDxj
YWlyby5oPgorI2lmZGVmIFVTRV9GUkVFVFlQRQogI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CiAjaW5j
bHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CisjZWxpZiBVU0VfUEFOR08KKyNpbmNsdWRl
IDxwYW5nby9wYW5nb2NhaXJvLmg+CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBA
IC0zOSwxMiArNDQsMjIgQEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0YSB7CiBwdWJsaWM6CiAgICAg
Y2xhc3MgRGVsZXRlZCB7fTsKICAgICBGb250UGxhdGZvcm1EYXRhKERlbGV0ZWQpCisjaWZkZWYg
VVNFX0ZSRUVUWVBFCiAgICAgICAgIDogbV9wYXR0ZXJuKHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0
ZXJuKj4oLTEpKQorI2VsaWYgVVNFX1BBTkdPCisgICAgICAgIDogbV9jb250ZXh0KDApCisgICAg
ICAgICwgbV9mb250KHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorI2VuZGlmCiAg
ICAgICAgICwgbV9zY2FsZWRGb250KDApCiAgICAgICAgIHsgfQogCiAgICAgRm9udFBsYXRmb3Jt
RGF0YSgpCisjaWZkZWYgVVNFX0ZSRUVUWVBFCiAgICAgICAgIDogbV9wYXR0ZXJuKDApCisjZWxp
ZiBVU0VfUEFOR08KKyAgICAgICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkK
KyNlbmRpZgogICAgICAgICAsIG1fc2NhbGVkRm9udCgwKQogICAgICAgICB7IH0KIApAQCAtNjQs
MTMgKzc5LDIxIEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsK
LSAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKLSAgICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1
dGVIYXNoKCByZWludGVycHJldF9jYXN0PFVDaGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hD
b2RlcykgLyBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9
IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCl9OworICAgICAgICBy
ZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhh
c2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCiAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKIAorI2lm
ZGVmIFVTRV9GUkVFVFlQRQogICAgIEZjUGF0dGVybiogbV9wYXR0ZXJuOworI2VsaWYgVVNFX1BB
TkdPCisgICAgc3RhdGljIFBhbmdvRm9udE1hcCogbV9mb250TWFwOworICAgIHN0YXRpYyBHSGFz
aFRhYmxlKiBtX2hhc2hUYWJsZTsKKworICAgIFBhbmdvQ29udGV4dCogbV9jb250ZXh0OworICAg
IFBhbmdvRm9udCogbV9mb250OworI2VuZGlmCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERl
c2NyaXB0aW9uOwogICAgIGNhaXJvX3NjYWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKIH07CmRp
ZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRh
UGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0
YVBhbmdvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjU0MmU4Ci0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRm
b3JtRGF0YVBhbmdvLmNwcApAQCAtMCwwICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwg
RW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBB
bHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBI
YW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJj
aCBDZW50ZXIgVVNBLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwg
UHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExp
YnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlv
bi5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRl
IDxwYW5nby9wYW5nby5oPgorI2luY2x1ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKworLy8gVXNl
IGNhaXJvLWZ0IGkgYSByZWNlbnQgZW5vdWdoIFBhbmdvIHZlcnNpb24gaXNuJ3QgYXZhaWxhYmxl
CisjaWYgIVBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwxOCwwKQorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+
CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1mb250bWFwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxn
dGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworICBQYW5nb0ZvbnRNYXAqIEZvbnRQ
bGF0Zm9ybURhdGE6Om1fZm9udE1hcCA9IDA7CisgIEdIYXNoVGFibGUqIEZvbnRQbGF0Zm9ybURh
dGE6Om1faGFzaFRhYmxlID0gMDsKKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3Ry
aW5nJiBmYW1pbHlOYW1lKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAg
ICAsIG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNjcmlwdGlvbikKKyAgICAsIG1fc2NhbGVkRm9u
dCgwKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6OmluaXQoKTsKKworICAgIENTdHJpbmcgc3Rv
cmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuc3RyaW5nKCkudXRmOCgpOworICAgIGNoYXIgY29uc3Qq
IGZhbWlsaWVzW10gPSB7CisgICAgICBzdG9yZWRfZmFtaWx5LmRhdGEoKSwKKyAgICAgIE5VTEwK
KyAgICB9OworCisgICAgc3dpdGNoIChmb250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7
CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNlcmlmRmFtaWx5OgorICAgICAgICBmYW1pbGll
c1sxXSA9ICJzZXJpZiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9u
OjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgZmFtaWxpZXNbMV0gPSAic2FucyI7CisgICAgICAg
YnJlYWs7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246Ok1vbm9zcGFjZUZhbWlseToKKyAgICAg
ICAgZmFtaWxpZXNbMV0gPSAibW9ub3NwYWNlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBG
b250RGVzY3JpcHRpb246Ok5vRmFtaWx5OgorICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTdGFu
ZGFyZEZhbWlseToKKyAgICBkZWZhdWx0OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJzYW5zIjsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIGRlc2Ny
aXB0aW9uID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9uZXcoKTsKKyAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX3NldF9hYnNvbHV0ZV9zaXplKGRlc2NyaXB0aW9uLCBmb250RGVzY3JpcHRpb24u
Y29tcHV0ZWRTaXplKCkgKiBQQU5HT19TQ0FMRSk7CisKKyAgICBpZiAoZm9udERlc2NyaXB0aW9u
LmJvbGQoKSkKKyAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfd2VpZ2h0KGRlc2Ny
aXB0aW9uLCBQQU5HT19XRUlHSFRfQk9MRCk7CisgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5pdGFs
aWMoKSkKKyAgICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfc3R5bGUoZGVzY3JpcHRp
b24sIFBBTkdPX1NUWUxFX0lUQUxJQyk7CisKKyAgICBtX2NvbnRleHQgPSBwYW5nb19jYWlyb19m
b250X21hcF9jcmVhdGVfY29udGV4dChQQU5HT19DQUlST19GT05UX01BUChtX2ZvbnRNYXApKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGludCBpID0gMDsgIW1fZm9udCAmJiBpIDwgR19OX0VMRU1FTlRT
KGZhbWlsaWVzKTsgaSsrKSB7CisgICAgICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2Zh
bWlseShkZXNjcmlwdGlvbiwgZmFtaWxpZXNbaV0pOworICAgICAgICBtX2ZvbnQgPSBwYW5nb19m
b250X21hcF9sb2FkX2ZvbnQobV9mb250TWFwLCBtX2NvbnRleHQsIGRlc2NyaXB0aW9uKTsKKyAg
ICB9CisKKyNpZiBQQU5HT19WRVJTSU9OX0NIRUNLKDEsMTgsMCkKKyAgICBpZiAobV9mb250KQor
ICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9yZWZlcmVuY2UocGFuZ29f
Y2Fpcm9fZm9udF9nZXRfc2NhbGVkX2ZvbnQoUEFOR09fQ0FJUk9fRk9OVChtX2ZvbnQpKSk7Cisj
ZWxzZQorICAgIC8vIFRoaXMgY29tcGF0aWJpbGl0eSBjb2RlIGZvciBvbGRlciB2ZXJzaW9ucyBv
ZiBQYW5nbyBpcyBub3Qgd2VsbC10ZXN0ZWQuCisgICAgaWYgKG1fZm9udCkgeworICAgICAgICBQ
YW5nb0ZjRm9udCogZmNmb250ID0gUEFOR09fRkNfRk9OVChtX2ZvbnQpOworICAgICAgICBjYWly
b19mb250X2ZhY2VfdCogZmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX3BhdHRl
cm4oZmNmb250LT5mb250X3BhdHRlcm4pOworICAgICAgICBkb3VibGUgc2l6ZTsKKyAgICAgICAg
aWYgKEZjUGF0dGVybkdldERvdWJsZShmY2ZvbnQtPmZvbnRfcGF0dGVybiwgRkNfUElYRUxfU0la
RSwgMCwgJnNpemUpICE9IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgICAgc2l6ZSA9IDEyLjA7Cisg
ICAgICAgIGNhaXJvX21hdHJpeF90IGZvbnRNYXRyaXg7CisgICAgICAgIGNhaXJvX21hdHJpeF9p
bml0X3NjYWxlKCZmb250TWF0cml4LCBzaXplLCBzaXplKTsKKyAgICAgICAgY2Fpcm9fZm9udF9v
cHRpb25zX3QqIGZvbnRPcHRpb25zOworICAgICAgICBpZiAocGFuZ29fY2Fpcm9fY29udGV4dF9n
ZXRfZm9udF9vcHRpb25zKG1fY29udGV4dCkpCisgICAgICAgICAgZm9udE9wdGlvbnMgPSBjYWly
b19mb250X29wdGlvbnNfY29weShwYW5nb19jYWlyb19jb250ZXh0X2dldF9mb250X29wdGlvbnMo
bV9jb250ZXh0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJv
X2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3QgY3RtOworICAg
ICAgICBjYWlyb19tYXRyaXhfaW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICAgICAgbV9zY2FsZWRG
b250ID0gY2Fpcm9fc2NhbGVkX2ZvbnRfY3JlYXRlKGZhY2UsICZmb250TWF0cml4LCAmY3RtLCBm
b250T3B0aW9ucyk7CisgICAgICAgIGNhaXJvX2ZvbnRfb3B0aW9uc19kZXN0cm95KGZvbnRPcHRp
b25zKTsKKyAgICAgICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3koZmFjZSk7CisgICAgfQorI2Vu
ZGlmCisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKK30KKwor
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShmbG9hdCBzaXplLCBib29sIGJvbGQs
IGJvb2wgaXRhbGljKQorICAgIDogbV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAs
IG1fZm9udERlc2NyaXB0aW9uKCkKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldFNwZWNpZmllZFNpemUoc2l6ZSk7CisgICAgbV9mb250RGVzY3JpcHRp
b24uc2V0Qm9sZChib2xkKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoaXRhbGlj
KTsKK30KKworRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjYWlyb19mb250X2Zh
Y2VfdCogZm9udEZhY2UsIGludCBzaXplLCBib29sIGJvbGQsIGJvb2wgaXRhbGljKQorICAgIDog
bV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAsIG1fZm9udERlc2NyaXB0aW9uKCkK
KyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldFNwZWNp
ZmllZFNpemUoc2l6ZSk7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Qm9sZChib2xkKTsKKyAg
ICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRJdGFsaWMoaXRhbGljKTsKKworICAgIGNhaXJvX21hdHJp
eF90IGZvbnRNYXRyaXg7CisgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgs
IHNpemUsIHNpemUpOworICAgIGNhaXJvX21hdHJpeF90IGN0bTsKKyAgICBjYWlyb19tYXRyaXhf
aW5pdF9pZGVudGl0eSgmY3RtKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfdCogb3B0aW9ucyA9
IGNhaXJvX2ZvbnRfb3B0aW9uc19jcmVhdGUoKTsKKworICAgIC8vIFdlIGZvcmNlIGFudGlhbGlh
c2luZyBhbmQgZGlzYWJsZSBoaW50aW5nIHRvIHByb3ZpZGUgY29uc2lzdGVudAorICAgIC8vIHR5
cG9ncmFwaGljIHF1YWxpdGllcyBmb3IgY3VzdG9tIGZvbnRzIG9uIGFsbCBwbGF0Zm9ybXMuCisg
ICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9oaW50X3N0eWxlKG9wdGlvbnMsIENBSVJPX0hJTlRf
U1RZTEVfTk9ORSk7CisgICAgY2Fpcm9fZm9udF9vcHRpb25zX3NldF9hbnRpYWxpYXMob3B0aW9u
cywgQ0FJUk9fQU5USUFMSUFTX0dSQVkpOworCisgICAgbV9zY2FsZWRGb250ID0gY2Fpcm9fc2Nh
bGVkX2ZvbnRfY3JlYXRlKGZvbnRGYWNlLCAmZm9udE1hdHJpeCwgJmN0bSwgb3B0aW9ucyk7Cisg
ICAgY2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3kob3B0aW9ucyk7Cit9CisKK2Jvb2wgRm9udFBs
YXRmb3JtRGF0YTo6aW5pdCgpCit7CisgICAgc3RhdGljIGJvb2wgaW5pdGlhbGl6ZWQgPSBmYWxz
ZTsKKyAgICBpZiAoaW5pdGlhbGl6ZWQpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIGluaXRp
YWxpemVkID0gdHJ1ZTsKKworICAgIGlmICghbV9mb250TWFwKQorICAgICAgICBtX2ZvbnRNYXAg
PSBwYW5nb19jYWlyb19mb250X21hcF9nZXRfZGVmYXVsdCgpOworICAgIGlmICghbV9oYXNoVGFi
bGUpIHsKKyAgICAgICAgUGFuZ29Gb250RmFtaWx5KiogZmFtaWxpZXMgPSAwOworICAgICAgICBp
bnQgbl9mYW1pbGllcyA9IDA7CisKKyAgICAgICAgbV9oYXNoVGFibGUgPSBnX2hhc2hfdGFibGVf
bmV3X2Z1bGwoZ19zdHJfaGFzaCwgZ19zdHJfZXF1YWwsIGdfZnJlZSwgZ19vYmplY3RfdW5yZWYp
OworCisgICAgICAgIHBhbmdvX2ZvbnRfbWFwX2xpc3RfZmFtaWxpZXMobV9mb250TWFwLCAmZmFt
aWxpZXMsICZuX2ZhbWlsaWVzKTsKKworICAgICAgICBmb3IgKGludCBmYW1pbHkgPSAwOyBmYW1p
bHkgPCBuX2ZhbWlsaWVzOyBmYW1pbHkrKykKKyAgICAgICAgICAgICAgICBnX2hhc2hfdGFibGVf
aW5zZXJ0KG1faGFzaFRhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z19zdHJkdXAocGFuZ29fZm9udF9mYW1pbHlfZ2V0X25hbWUoZmFtaWxpZXNbZmFtaWx5XSkpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ19vYmplY3RfcmVmKGZhbWlsaWVz
W2ZhbWlseV0pKTsKKworICAgICAgICBnX2ZyZWUoZmFtaWxpZXMpOworICAgIH0KKworICAgIHJl
dHVybiB0cnVlOworfQorCitGb250UGxhdGZvcm1EYXRhOjp+Rm9udFBsYXRmb3JtRGF0YSgpCit7
CisgICAgLy8gRGVzdHJveSB0YWtlcyBwbGFjZSBpbiBGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95
KCkuCit9CisKK2Jvb2wgRm9udFBsYXRmb3JtRGF0YTo6aXNGaXhlZFBpdGNoKCkKK3sKKyAgICBQ
YW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaWJlX3dp
dGhfYWJzb2x1dGVfc2l6ZShtX2ZvbnQpOworICAgIFBhbmdvRm9udEZhbWlseSogZmFtaWx5ID0g
cmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnRGYW1pbHkqPihnX2hhc2hfdGFibGVfbG9va3VwKG1f
aGFzaFRhYmxlLCBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2dldF9mYW1pbHkoZGVzY3JpcHRpb24p
KSk7CisgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9mcmVlKGRlc2NyaXB0aW9uKTsKKyAgICBy
ZXR1cm4gcGFuZ29fZm9udF9mYW1pbHlfaXNfbW9ub3NwYWNlKGZhbWlseSk7Cit9CisKK3ZvaWQg
Rm9udFBsYXRmb3JtRGF0YTo6c2V0Rm9udChjYWlyb190KiBjcikgY29uc3QKK3sKKyAgICBBU1NF
UlQobV9zY2FsZWRGb250KTsKKworICAgIGNhaXJvX3NldF9zY2FsZWRfZm9udChjciwgbV9zY2Fs
ZWRGb250KTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmIG90aGVyKSBjb25zdAoreworICAgIGlmIChtX2ZvbnQgPT0gb3RoZXIu
bV9mb250KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAobV9mb250ID09IDAgfHwgbV9m
b250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpCisgICAgICAgIHx8IG90aGVy
Lm1fZm9udCA9PSAwIHx8IG90aGVyLm1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBhbmdvRm9u
dCo+KC0xKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIFBhbmdvRm9udERlc2NyaXB0aW9u
KiB0aGlzRGVzYyA9IHBhbmdvX2ZvbnRfZGVzY3JpYmUobV9mb250KTsKKyAgICBQYW5nb0ZvbnRE
ZXNjcmlwdGlvbiogb3RoZXJEZXNjID0gcGFuZ29fZm9udF9kZXNjcmliZShvdGhlci5tX2ZvbnQp
OworICAgIGJvb2wgcmVzdWx0ID0gcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9lcXVhbCh0aGlzRGVz
Yywgb3RoZXJEZXNjKTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUob3RoZXJEZXNj
KTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0aW9uX2ZyZWUodGhpc0Rlc2MpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNDI5YzEzMQotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3BwCkBAIC0wLDAgKzEsOTMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBn
bWFpbC5jb20KKyAqIENvcHlyaWdodCAoQykgMjAwNyBBbHAgVG9rZXIgPGFscC50b2tlckBjb2xs
YWJvcmEuY28udWs+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50
ZXIgVVNBLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVO
b2RlLmgiCisKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgorI2luY2x1ZGUgPHBhbmdvL3Bh
bmdvLWZvbnQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgUGFuZ29HbHlwaCBw
YW5nb19mb250X2dldF9nbHlwaChQYW5nb0ZvbnQqIGZvbnQsIFBhbmdvQ29udGV4dCogY29udGV4
dCwgZ3VuaWNoYXIgd2MpCit7CisgICAgUGFuZ29HbHlwaCByZXN1bHQgPSAwOworICAgIGdjaGFy
IGJ1ZmZlcls3XTsKKworICAgIGdpbnQgIGxlbmd0aCA9IGdfdW5pY2hhcl90b191dGY4KHdjLCBi
dWZmZXIpOworICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWlsKGxlbmd0aCwgMCk7CisKKyAgICBHTGlz
dCogaXRlbXMgPSBwYW5nb19pdGVtaXplKGNvbnRleHQsIGJ1ZmZlciwgMCwgbGVuZ3RoLCBOVUxM
LCBOVUxMKTsKKworICAgIGlmIChnX2xpc3RfbGVuZ3RoKGl0ZW1zKSA9PSAxKSB7CisgICAgICAg
IFBhbmdvR2x5cGhTdHJpbmcqIGdseXBocyA9IHBhbmdvX2dseXBoX3N0cmluZ19uZXcoKTsKKwor
ICAgICAgICBwYW5nb19zaGFwZShidWZmZXIsIGxlbmd0aCwgJigoUGFuZ29JdGVtKilpdGVtcy0+
ZGF0YSktPmFuYWx5c2lzLCBnbHlwaHMpOworCisgICAgICAgIGlmIChnbHlwaHMtPm51bV9nbHlw
aHMgPT0gMSkKKyAgICAgICAgICAgIHJlc3VsdCA9IGdseXBocy0+Z2x5cGhzWzBdLmdseXBoOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBnX3dhcm5pbmcoImRpZG4ndCBnZXQgMSBnbHlwaCBi
dXQgJWQiLCBnbHlwaHMtPm51bV9nbHlwaHMpOworCisgICAgICAgIHBhbmdvX2dseXBoX3N0cmlu
Z19mcmVlKGdseXBocyk7CisgICAgfQorCisgICAgZ19saXN0X2ZvcmVhY2goaXRlbXMsIChHRnVu
YylwYW5nb19pdGVtX2ZyZWUsIE5VTEwpOworICAgIGdfbGlzdF9mcmVlKGl0ZW1zKTsKKworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK2Jvb2wgR2x5cGhQYWdlOjpmaWxsKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgs
IGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YSkKK3sKKyAgICAvLyBUaGUgYnVmZmVyTGVu
Z3RoIHdpbGwgYmUgZ3JlYXRlciB0aGFuIHRoZSBnbHlwaCBwYWdlIHNpemUgaWYgdGhlIGJ1ZmZl
ciBoYXMgVW5pY29kZSBzdXBwbGVtZW50YXJ5IGNoYXJhY3RlcnMuCisgICAgLy8gV2Ugd29uJ3Qg
c3VwcG9ydCB0aGlzIGZvciBub3cuCisgICAgaWYgKGJ1ZmZlckxlbmd0aCA+IEdseXBoUGFnZTo6
c2l6ZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKCFmb250RGF0YS0+bV9mb250
Lm1fZm9udCB8fCBmb250RGF0YS0+bV9mb250Lm1fZm9udCA9PSByZWludGVycHJldF9jYXN0PFBh
bmdvRm9udCo+KC0xKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYm9vbCBoYXZlR2x5
cGhzID0gZmFsc2U7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7
CisgICAgICAgIEdseXBoIGdseXBoID0gcGFuZ29fZm9udF9nZXRfZ2x5cGgoZm9udERhdGEtPm1f
Zm9udC5tX2ZvbnQsIGZvbnREYXRhLT5tX2ZvbnQubV9jb250ZXh0LCBidWZmZXJbaV0pOworICAg
ICAgICBpZiAoIWdseXBoKQorICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgob2Zmc2V0
ICsgaSwgMCwgMCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgob2Zmc2V0ICsgaSwgZ2x5cGgsIGZvbnREYXRhKTsKKyAgICAgICAgICAgIGhhdmVHbHlw
aHMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGhhdmVHbHlwaHM7Cit9
CisKK30KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZv
bnREYXRhUGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9u
dERhdGFQYW5nby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBiY2Vh
NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBs
ZUZvbnREYXRhUGFuZ28uY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29w
eXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAqIENv
cHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICogQ29w
eXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCisgKiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5o
IgorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiRm9udC5oIgorI2luY2x1ZGUg
IkZvbnRDYWNoZS5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIkds
eXBoQnVmZmVyLmgiCisjaW5jbHVkZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDx1bmljb2RlL3VjaGFy
Lmg+CisjaW5jbHVkZSA8dW5pY29kZS91bm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFz
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1Jbml0KCkKK3sKKyAgICBjYWlyb19mb250X2V4dGVudHNfdCBmb250X2V4dGVudHM7CisgICAg
Y2Fpcm9fdGV4dF9leHRlbnRzX3QgdGV4dF9leHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250
X2V4dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwgJmZvbnRfZXh0ZW50cyk7CisgICAgbV9hc2Nl
bnQgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRfZXh0ZW50cy5hc2NlbnQpOworICAgIG1fZGVzY2Vu
dCA9IHN0YXRpY19jYXN0PGludD4oZm9udF9leHRlbnRzLmRlc2NlbnQpOworICAgIG1fbGluZVNw
YWNpbmcgPSBzdGF0aWNfY2FzdDxpbnQ+KGZvbnRfZXh0ZW50cy5oZWlnaHQpOworICAgIGNhaXJv
X3NjYWxlZF9mb250X3RleHRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAieCIsICZ0ZXh0
X2V4dGVudHMpOworICAgIG1feEhlaWdodCA9IHRleHRfZXh0ZW50cy5oZWlnaHQ7CisgICAgY2Fp
cm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1fZm9udC5tX3NjYWxlZEZvbnQsICIgIiwgJnRl
eHRfZXh0ZW50cyk7CisgICAgbV9zcGFjZVdpZHRoID0gIHN0YXRpY19jYXN0PGludD4odGV4dF9l
eHRlbnRzLnhfYWR2YW5jZSk7CisgICAgbV9saW5lR2FwID0gbV9saW5lU3BhY2luZyAtIG1fYXNj
ZW50IC0gbV9kZXNjZW50OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybURlc3Ry
b3koKQoreworICAgIGlmICghaXNDdXN0b21Gb250KCkpIHsKKworICAgICAgICBpZiAobV9mb250
Lm1fZm9udCAmJiBtX2ZvbnQubV9mb250ICE9IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4o
LTEpKSB7CisgICAgICAgICAgICBnX29iamVjdF91bnJlZihtX2ZvbnQubV9mb250KTsKKyAgICAg
ICAgICAgIG1fZm9udC5tX2ZvbnQgPSAwOworICAgICAgICB9CisKKyAgICAgICAgaWYgKG1fZm9u
dC5tX2NvbnRleHQpIHsKKyAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmIChtX2ZvbnQubV9jb250
ZXh0KTsKKyAgICAgICAgICAgIG1fZm9udC5tX2NvbnRleHQgPSAwOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKG1fZm9udC5tX2hhc2hUYWJsZSkgeworICAgICAgICAgICAgZ19oYXNoX3RhYmxl
X2Rlc3Ryb3kobV9mb250Lm1faGFzaFRhYmxlKTsKKyAgICAgICAgICAgIG1fZm9udC5tX2hhc2hU
YWJsZSA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9mb250Lm1fc2NhbGVkRm9udCkg
eworICAgICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX2ZvbnQubV9zY2FsZWRG
b250KTsKKyAgICAgICAgICAgIG1fZm9udC5tX3NjYWxlZEZvbnQgPSAwOworICAgICAgICB9Cisg
ICAgfQorCisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK1NpbXBsZUZvbnRE
YXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9udERlc2NyaXB0
aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3NtYWxsQ2Fwc0ZvbnRE
YXRhKSB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbik7CisgICAgICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZSgwLjcwZipmb250
RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgICAgICBjb25zdCBGb250UGxhdGZvcm1E
YXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFtaWx5KCkuZmFt
aWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBsZUZvbnREYXRh
KCpwZGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRhOworfQorCiti
b29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgYm9vbCByZXN1bHQgPSB0cnVlOworCisg
ICAgUGFuZ29Db3ZlcmFnZSogcmVxdWVzdGVkID0gcGFuZ29fY292ZXJhZ2VfZnJvbV9ieXRlcygo
Z3VjaGFyKiljaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFBhbmdvQ292ZXJhZ2UqIGF2YWlsYWJs
ZSA9IHBhbmdvX2ZvbnRfZ2V0X2NvdmVyYWdlKG1fZm9udC5tX2ZvbnQsIHBhbmdvX2xhbmd1YWdl
X2dldF9kZWZhdWx0KCkpOworICAgIHBhbmdvX2NvdmVyYWdlX21heChyZXF1ZXN0ZWQsIGF2YWls
YWJsZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAg
ICAgICAgaWYgKFBBTkdPX0NPVkVSQUdFX05PTkUgPT0gcGFuZ29fY292ZXJhZ2VfZ2V0KHJlcXVl
c3RlZCwgaSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJlZihyZXF1ZXN0
ZWQpOworICAgIHBhbmdvX2NvdmVyYWdlX3VucmVmKGF2YWlsYWJsZSk7CisKKyAgICByZXR1cm4g
cmVzdWx0OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRjaCgpCit7Cisg
ICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fZm9udC5pc0ZpeGVkUGl0Y2goKTsKK30KKworZmxv
YXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29u
c3QKK3sKKyAgICBBU1NFUlQobV9mb250Lm1fc2NhbGVkRm9udCk7CisKKyAgICBjYWlyb19nbHlw
aF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCBl
eHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9mb250Lm1fc2Nh
bGVkRm9udCwgJmNnbHlwaCwgMSwgJmV4dGVudHMpOworCisgICAgZmxvYXQgdyA9IChmbG9hdClt
X3NwYWNlV2lkdGg7CisgICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1cyhtX2ZvbnQubV9z
Y2FsZWRGb250KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhfYWR2YW5jZSAh
PSAwKQorICAgICAgICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOworICAgIHJldHVybiB3
OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpzZXRGb250KGNhaXJvX3QqIGNyKSBjb25zdAor
eworICAgIEFTU0VSVChjcik7CisgICAgbV9mb250LnNldEZvbnQoY3IpOworfQorCit9CmRpZmYg
LS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNGE1OTE5OS4uMTdkN2M1
MiAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMzkzLDYg
KzM5MywxOSBAQCBBQ19BUkdfRU5BQkxFKGZhc3RfbWFsbG9jLAogICAgICAgICAgICAgICBbXSxb
aWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAieWVzIjsgdGhlbiBlbmFibGVfZmFzdF9tYWxsb2M9
Im5vIjsgZWxzZSBlbmFibGVfZmFzdF9tYWxsb2M9InllcyI7IGZpXSkKIEFDX01TR19SRVNVTFQo
WyRlbmFibGVfZmFzdF9tYWxsb2NdKQogCisjIGRldGVybWluZSB0aGUgZm9udCBiYWNrZW5kCitB
Q19NU0dfQ0hFQ0tJTkcoW3RoZSBmb250IGJhY2tlbmQgdG8gdXNlXSkKK0FDX0FSR19XSVRIKGZv
bnRfYmFja2VuZCwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgtZm9udC1iYWNr
ZW5kPUA8OkBmcmVldHlwZS9wYW5nb0A6PkBdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
W1NlbGVjdCBmb250IGJhY2tlbmQgW2RlZmF1bHQ9ZnJlZXR5cGVdXSksCisgICAgICAgICAgICBb
XSxbd2l0aF9mb250X2JhY2tlbmQ9ImZyZWV0eXBlIl0pCisKK2Nhc2UgIiR3aXRoX2ZvbnRfYmFj
a2VuZCIgaW4KKyAgICAgZnJlZXR5cGV8cGFuZ28pIDs7CisgICAgICopIEFDX01TR19FUlJPUihb
SW52YWxpZCBmb250IGJhY2tlbmQ6IG11c3QgYmUgZnJlZXR5cGUgb3IgcGFuZ28uXSkgOzsKK2Vz
YWMKK0FDX01TR19SRVNVTFQoWyR3aXRoX2ZvbnRfYmFja2VuZF0pCisKICMgQWRkICctZycgZmxh
ZyB0byBnY2MgaWYgaXQncyBkZWJ1ZyBidWlsZAogaWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAi
eWVzIjsgdGhlbgogICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtZyIKQEAgLTQ2OSw2ICs0ODIsMTAg
QEAgQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9ESVJFQ1RGQl0sIFt0ZXN0ICIkd2l0aF90YXJnZXQi
ID0gImRpcmVjdGZiIl0pCiAjIEhUVFAgYmFja2VuZCBjb25kaXRpb25hbHMKIEFNX0NPTkRJVElP
TkFMKFtVU0VfQ1VSTF0sIFt0ZXN0ICIkaHR0cF9iYWNrZW5kIiA9ICJjdXJsIl0pCiAKKyMgRm9u
dCBiYWNrZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElUSU9OQUwoW1VTRV9GUkVFVFlQRV0sIFt0
ZXN0ICIkd2l0aF9mb250X2JhY2tlbmQiID0gImZyZWV0eXBlIl0pCitBTV9DT05ESVRJT05BTChb
VVNFX1BBTkdPXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28iXSkKKwogIyBX
ZWJLaXQgZmVhdHVyZSBjb25kaXRpb25hbHMKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVfREVCVUdd
LFt0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFMKFtFTkFCTEVf
Q1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HXSxbdGVzdCAiJGVuYWJsZV9jcm9zc19kb2N1bWVudF9t
ZXNzYWdpbmciID0gInllcyJdKQpAQCAtNTA0LDYgKzUyMSw3IEBAIEJ1aWxkIGNvbmZpZ3VyYXRp
b246CiAgQ29kZSBjb3ZlcmFnZSBzdXBwb3J0ICAgICAgICAgICAgIDogJGVuYWJsZV9jb3ZlcmFn
ZQogIFVuaWNvZGUgYmFja2VuZCAgICAgICAgICAgICAgICAgICA6ICR1bmljb2RlX2JhY2tlbmQK
ICBIVFRQIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgOiAkaHR0cF9iYWNrZW5kCisgRm9u
dCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfZm9udF9iYWNrZW5kCiAgT3B0
aW1pemVkIG1lbW9yeSBhbGxvY2F0b3IgICAgICAgIDogJGVuYWJsZV9mYXN0X21hbGxvYwogRmVh
dHVyZXM6CiAgSFRNTDUgY3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nICAgIDogJGVuYWJsZV9jcm9z
c19kb2N1bWVudF9tZXNzYWdpbmcKLS0gCjEuNS40LjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19635</attachid>
            <date>2008-03-10 08:59:39 -0700</date>
            <delta_ts>2008-03-10 11:42:12 -0700</delta_ts>
            <desc>Add Pango font backend.</desc>
            <filename>0001-Add-Pango-font-backend.patch</filename>
            <type>text/plain</type>
            <size>30387</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSA4ZmQ1M2MyODhhMDgyN2Y1ZGVjOWM0MjdiZmFhMjIyMDNlNDc4MTgyIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CkRhdGU6IE1vbiwg
MTAgTWFyIDIwMDggMTQ6NTc6MjMgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBZGQgUGFuZ28gZm9u
dCBiYWNrZW5kLgoKU3VwcG9ydCBtdWx0aXBsZSBmb250IGJhY2tlbmRzIGFuZCBhZGQgbmV3IHBh
bmdvIGZvbnQgYmFja2VuZC4KLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTEgKwogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDM4ICsrKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArKystCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwICAgICB8ICAgIDYgKwogLi4uL2dyYXBoaWNz
L2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwICAgfCAgIDc2ICsrKysrKysKIFdl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaCAgIHwgICAzNSAr
KystCiAuLi4vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAgICAgICAgICB8
ICAyMjAgKysrKysrKysrKysrKysrKysrKysKIC4uLi9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJl
ZU5vZGVQYW5nby5jcHAgICAgICAgIHwgICA5MyArKysrKysrKwogLi4uL3BsYXRmb3JtL2dyYXBo
aWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcCAgfCAgMTQ5ICsrKysrKysrKysrKysKIGNv
bmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxOCAr
KwogMTAgZmlsZXMgY2hhbmdlZCwgNjcyIGluc2VydGlvbnMoKyksIDYgZGVsZXRpb25zKC0pCiBj
cmVhdGUgbW9kZSAxMDA2NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YVBhbmdvLmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFQYW5nby5jcHAKIGNyZWF0ZSBtb2RlIDEw
MDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdv
LmNwcAogY3JlYXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1Np
bXBsZUZvbnREYXRhUGFuZ28uY3BwCgpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9n
CmluZGV4IDM3YTY3ZDcuLmMxZWU0M2YgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOC0wMy0xMCAgWGFuIExvcGV6ICA8eGFuQGdub21l
Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBo
dHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyOQorCisgICAgICAgIEFk
ZCBvcHRpb25hbCBmb250IGJhY2tlbmQgc3VwcG9ydCB3aXRoIGZyZWV0eXBlIGFuZCBwYW5nbwor
ICAgICAgICBiYWNrZW5kcy4gRGVmYXVsdCBpcyBmcmVldHlwZSBmb3Igbm93LgorICAgICAgICAK
KyAgICAgICAgKiBjb25maWd1cmUuYWM6CisKIDIwMDgtMDMtMDcgIFNpbW9uIEhhdXNtYW5uICA8
aGF1c21hbm5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbi4KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTU5ZTc0
Zi4uZmZlNzFkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAwOC0wMy0xMCAgWGFuIExvcGV6ICA8eGFuQGdu
b21lLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTIyOQorCisgICAgICAg
IEFkZCBQYW5nbyBmb250IGJhY2tlbmQuCisgICAgICAgIAorICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpmb250RXhpc3RzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBs
YXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZvcm1EYXRhOjpm
b250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OnJlbGVhc2VEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OmNyZWF0ZUZvbnRDdXN0b21QbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmg6CisgICAgICAgIChXZWJDb3Jl
OjpGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRQbGF0Zm9ybURhdGE6Omhhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2d0
ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6aW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
Ojp+Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRh
Ojppc0ZpeGVkUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2V0
Rm9udCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj09KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6cGFuZ29fZm9udF9nZXRfZ2x5cGgpOgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpmaWxsKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1w
bGVGb250RGF0YTo6cGxhdGZvcm1EZXN0cm95KToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZv
bnREYXRhOjpzbWFsbENhcHNGb250RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6Y29udGFpbnNDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnRE
YXRhOjpkZXRlcm1pbmVQaXRjaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1XaWR0aEZvckdseXBoKToKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRh
OjpzZXRGb250KToKKwogMjAwOC0wMy0xMCAgU2ltb24gSGF1c21hbm4gIDxoYXVzbWFubkB3ZWJr
aXQub3JnPgogCiAgICAgICAgIFd4IGxpbmtpbmcgZml4LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggMmMwYTc3YS4uMGZk
ODQ0MiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC05ODAsMTEgKzk4MCw3IEBAIHdlYmtpdGd0a19zb3VyY2VzICs9IFwK
IAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9GaWxlQ2hvb3Nlckd0ay5jcHAgXAogCVdlYkNvcmUvcGxh
dGZvcm0vZ3RrL0ZpbGVTeXN0ZW1HdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2d0ay9Gb250Q2FjaGVHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvRm9udEd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0
Zm9ybURhdGFHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBh
Z2VUcmVlTm9kZUd0ay5jcHAgXAotCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBs
ZUZvbnREYXRhR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvS2V5RXZlbnRHdGsuY3Bw
IFwKIAlXZWJDb3JlL3BsYXRmb3JtL2d0ay9MYW5ndWFnZS5jcHAgXAogCVdlYkNvcmUvcGxhdGZv
cm0vZ3RrL0xvY2FsaXplZFN0cmluZ3NHdGsuY3BwIFwKQEAgLTEwNDIsNiArMTAzOCwzNCBAQCB3
ZWJjb3JlX3NvdXJjZXMgKz0gXAogCiBlbmRpZiAjIEVORCBVU0VfQ1VSTAogCisjIC0tLQorIyBG
cmVldHlwZSBmb250IGJhY2tlbmQKKyMgLS0tCitpZiBVU0VfRlJFRVRZUEUKK3dlYmtpdGd0a19j
cHBmbGFncyArPSBcCisJLURVU0VfRlJFRVRZUEU9MQorCit3ZWJraXRndGtfc291cmNlcyArPSBc
CisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGFHdGsu
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZUd0
ay5jcHAgXAorCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhR3Rr
LmNwcAorZW5kaWYgIyBFTkQgVVNFX0ZSRUVUWVBFCisKKyMgLS0tCisjIFBhbmdvIGZvbnQgYmFj
a2VuZAorIyAtLS0KK2lmIFVTRV9QQU5HTword2Via2l0Z3RrX2NwcGZsYWdzICs9IFwKKwktRFVT
RV9QQU5HTz0xCisKK3dlYmtpdGd0a19zb3VyY2VzICs9IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKKwlXZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwIFwKKwlXZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdvLmNwcCBcCisJV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAKK2VuZGlm
ICMgRU5EIFVTRV9QQU5HTworCiAjIC0tLS0KICMgQ3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nIHN1
cHBvcnQKICMgLS0tLQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udENhY2hlR3RrLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNo
ZUd0ay5jcHAKaW5kZXggYWVjNTc1OC4uMDQ0YzI1OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwCkBAIC02NCw3ICs2NCwxMyBAQCBGb250UGxh
dGZvcm1EYXRhKiBGb250Q2FjaGU6OmdldExhc3RSZXNvcnRGYWxsYmFja0ZvbnQoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmbwogYm9vbCBGb250Q2FjaGU6OmZvbnRFeGlzdHMoY29uc3QgRm9udERl
c2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24sIGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQog
ewogICAgIEZvbnRQbGF0Zm9ybURhdGEgcGxhdGZvcm1EYXRhKGZvbnREZXNjcmlwdGlvbiwgZmFt
aWx5KTsKKyNpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyAgICByZXR1cm4gcGxhdGZvcm1EYXRhLm1f
Zm9udCAhPSAwOworI2VsaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCiAgICAgcmV0dXJuIHBsYXRm
b3JtRGF0YS5tX3BhdHRlcm4gIT0gMDsKKyNlbHNlCisjZXJyb3IgIk11c3QgZGVmaW5lIGEgZm9u
dCBiYWNrZW5kIgorI2VuZGlmCiB9CiAKIEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3Jl
YXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlv
biwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWQ3MDE4Ci0tLSAvZGV2L251bGwK
KysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0
YVBhbmdvLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFs
cCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJyYXJ5
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENPUFlJ
TkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwKKyAqIEJvc3RvbiwgTUEg
MDIxMTAtMTMwMSwgVVNBLgorICoKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5oIgorCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CisjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K0ZvbnRDdXN0b21QbGF0Zm9ybURhdGE6On5Gb250Q3VzdG9tUGxhdGZvcm1EYXRhKCkKK3sKKyAg
Ly8gICAgY2Fpcm9fZm9udF9mYWNlX2Rlc3Ryb3kobV9mb250RmFjZSk7Cit9CisKK0ZvbnRQbGF0
Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6
ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKK3sKKyAgICByZXR1cm4gRm9udFBsYXRmb3JtRGF0
YShtX2ZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0aWMgdm9pZCByZWxl
YXNlRGF0YSh2b2lkKiBkYXRhKQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1ZmZlcio+KGRh
dGEpLT5kZXJlZigpOworfQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVhdGVGb250Q3Vz
dG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworI2lmIDAKKyAgICBBU1NF
UlRfQVJHKGJ1ZmZlciwgYnVmZmVyKTsKKworICAgIGludCBlcnJvcjsKKworICAgIHN0YXRpYyBG
VF9MaWJyYXJ5IGxpYnJhcnkgPSAwOworICAgIGlmICghbGlicmFyeSkgeworICAgICAgICBlcnJv
ciA9IEZUX0luaXRfRnJlZVR5cGUoJmxpYnJhcnkpOworICAgICAgICBpZiAoZXJyb3IpIHsKKyAg
ICAgICAgICAgIGxpYnJhcnkgPSAwOworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBGVF9GYWNlIGZhY2U7CisgICAgZXJyb3IgPSBGVF9OZXdfTWVtb3J5X0Zh
Y2UobGlicmFyeSwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGVF9CeXRlKj4oYnVmZmVyLT5kYXRh
KCkpLCBidWZmZXItPnNpemUoKSwgMCwgJmZhY2UpOworICAgIGlmIChlcnJvcikKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBidWZmZXItPnJlZigpOworICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBm
b250RmFjZSA9IGNhaXJvX2Z0X2ZvbnRfZmFjZV9jcmVhdGVfZm9yX2Z0X2ZhY2UoZmFjZSwgMCk7
CisKKyAgICBzdGF0aWMgY2Fpcm9fdXNlcl9kYXRhX2tleV90IGJ1ZmZlcktleTsKKyAgICBjYWly
b19mb250X2ZhY2Vfc2V0X3VzZXJfZGF0YShmb250RmFjZSwgJmJ1ZmZlcktleSwgYnVmZmVyLCBy
ZWxlYXNlRGF0YSk7CisKKyAgICByZXR1cm4gbmV3IEZvbnRDdXN0b21QbGF0Zm9ybURhdGEoZm9u
dEZhY2UpOworI2VuZGlmCisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBhL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA3NzhkNTI1Li4yMjRh
Zjc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3Jt
RGF0YS5oCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1
dGVyLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVs
QGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0
aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJ
bmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMwLDggKzMxLDE0
IEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24u
aCIKICNpbmNsdWRlIDxjYWlyby5oPgorI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQogI2luY2x1
ZGUgPGNhaXJvLWZ0Lmg+CiAjaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+CisjZWxp
ZiBkZWZpbmVkKFVTRV9QQU5HTykKKyNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+CisjZWxz
ZQorI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCisjZW5kaWYKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC0zOSwxMiArNDYsMjYgQEAgY2xhc3MgRm9udFBsYXRmb3JtRGF0
YSB7CiBwdWJsaWM6CiAgICAgY2xhc3MgRGVsZXRlZCB7fTsKICAgICBGb250UGxhdGZvcm1EYXRh
KERlbGV0ZWQpCisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCiAgICAgICAgIDogbV9wYXR0ZXJu
KHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpKQorI2VsaWYgZGVmaW5lZChVU0VfUEFO
R08pCisgICAgICAgIDogbV9jb250ZXh0KDApCisgICAgICAgICwgbV9mb250KHJlaW50ZXJwcmV0
X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorI2Vsc2UKKyNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9u
dCBiYWNrZW5kIgorI2VuZGlmCiAgICAgICAgICwgbV9zY2FsZWRGb250KDApCiAgICAgICAgIHsg
fQogCiAgICAgRm9udFBsYXRmb3JtRGF0YSgpCisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCiAg
ICAgICAgIDogbV9wYXR0ZXJuKDApCisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyAgICAgICAg
OiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkKKyNlbHNlCisjZXJyb3IgIk11c3Qg
ZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRpZgogICAgICAgICAsIG1fc2NhbGVkRm9udCgw
KQogICAgICAgICB7IH0KIApAQCAtNjQsMTMgKzg1LDIzIEBAIHB1YmxpYzoKIAogICAgIHVuc2ln
bmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9
IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKLSAgICAgICAg
cmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKCByZWludGVycHJldF9jYXN0PFVDaGFyKj4o
aGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKKyAgICAgICAg
dWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1f
c2NhbGVkRm9udCl9OworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhhc2gocmVp
bnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMpIC8gc2l6
ZW9mKFVDaGFyKSk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmKSBjb25zdDsKIAorI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQogICAgIEZjUGF0
dGVybiogbV9wYXR0ZXJuOworI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisgICAgc3RhdGljIFBh
bmdvRm9udE1hcCogbV9mb250TWFwOworICAgIHN0YXRpYyBHSGFzaFRhYmxlKiBtX2hhc2hUYWJs
ZTsKKworICAgIFBhbmdvQ29udGV4dCogbV9jb250ZXh0OworICAgIFBhbmdvRm9udCogbV9mb250
OworI2Vsc2UKKyNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgorI2VuZGlmCiAg
ICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOwogICAgIGNhaXJvX3NjYWxlZF9m
b250X3QqIG1fc2NhbGVkRm9udDsKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi41N2YxODA1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcApAQCAtMCwwICsxLDIy
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
Q29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5jb20KKyAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29tPgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmln
aHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCisgKiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQor
ICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElm
IG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEs
IFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5j
bHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorI2luY2x1ZGUgPHBh
bmdvL3BhbmdvY2Fpcm8uaD4KKworLy8gVXNlIGNhaXJvLWZ0IGkgYSByZWNlbnQgZW5vdWdoIFBh
bmdvIHZlcnNpb24gaXNuJ3QgYXZhaWxhYmxlCisjaWYgIVBBTkdPX1ZFUlNJT05fQ0hFQ0soMSwx
OCwwKQorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29mYy1mb250
bWFwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworICBQYW5nb0ZvbnRNYXAqIEZvbnRQbGF0Zm9ybURhdGE6Om1fZm9udE1hcCA9IDA7Cisg
IEdIYXNoVGFibGUqIEZvbnRQbGF0Zm9ybURhdGE6Om1faGFzaFRhYmxlID0gMDsKKworRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnRE
ZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorICAgIDogbV9jb250
ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAsIG1fZm9udERlc2NyaXB0aW9uKGZvbnREZXNj
cmlwdGlvbikKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIEZvbnRQbGF0Zm9ybURhdGE6
OmluaXQoKTsKKworICAgIENTdHJpbmcgc3RvcmVkX2ZhbWlseSA9IGZhbWlseU5hbWUuc3RyaW5n
KCkudXRmOCgpOworICAgIGNoYXIgY29uc3QqIGZhbWlsaWVzW10gPSB7CisgICAgICBzdG9yZWRf
ZmFtaWx5LmRhdGEoKSwKKyAgICAgIE5VTEwKKyAgICB9OworCisgICAgc3dpdGNoIChmb250RGVz
Y3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlNl
cmlmRmFtaWx5OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJzZXJpZiI7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAgICAgIGZh
bWlsaWVzWzFdID0gInNhbnMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlw
dGlvbjo6TW9ub3NwYWNlRmFtaWx5OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJtb25vc3BhY2Ui
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1pbHk6Cisg
ICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5OgorICAgIGRlZmF1bHQ6Cisg
ICAgICAgIGZhbWlsaWVzWzFdID0gInNhbnMiOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAg
ICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rlc2NyaXB0
aW9uX25ldygpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2Fic29sdXRlX3NpemUo
ZGVzY3JpcHRpb24sIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIFBBTkdPX1NDQUxF
KTsKKworICAgIGlmIChmb250RGVzY3JpcHRpb24uYm9sZCgpKQorICAgICAgICBwYW5nb19mb250
X2Rlc2NyaXB0aW9uX3NldF93ZWlnaHQoZGVzY3JpcHRpb24sIFBBTkdPX1dFSUdIVF9CT0xEKTsK
KyAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX3NldF9zdHlsZShkZXNjcmlwdGlvbiwgUEFOR09fU1RZTEVfSVRBTElDKTsKKwor
ICAgIG1fY29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0KFBBTkdP
X0NBSVJPX0ZPTlRfTUFQKG1fZm9udE1hcCkpOworICAgIGZvciAodW5zaWduZWQgaW50IGkgPSAw
OyAhbV9mb250ICYmIGkgPCBHX05fRUxFTUVOVFMoZmFtaWxpZXMpOyBpKyspIHsKKyAgICAgICAg
cGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfZmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1pbGllc1tp
XSk7CisgICAgICAgIG1fZm9udCA9IHBhbmdvX2ZvbnRfbWFwX2xvYWRfZm9udChtX2ZvbnRNYXAs
IG1fY29udGV4dCwgZGVzY3JpcHRpb24pOworICAgIH0KKworI2lmIFBBTkdPX1ZFUlNJT05fQ0hF
Q0soMSwxOCwwKQorICAgIGlmIChtX2ZvbnQpCisgICAgICAgIG1fc2NhbGVkRm9udCA9IGNhaXJv
X3NjYWxlZF9mb250X3JlZmVyZW5jZShwYW5nb19jYWlyb19mb250X2dldF9zY2FsZWRfZm9udChQ
QU5HT19DQUlST19GT05UKG1fZm9udCkpKTsKKyNlbHNlCisgICAgLy8gVGhpcyBjb21wYXRpYmls
aXR5IGNvZGUgZm9yIG9sZGVyIHZlcnNpb25zIG9mIFBhbmdvIGlzIG5vdCB3ZWxsLXRlc3RlZC4K
KyAgICBpZiAobV9mb250KSB7CisgICAgICAgIFBhbmdvRmNGb250KiBmY2ZvbnQgPSBQQU5HT19G
Q19GT05UKG1fZm9udCk7CisgICAgICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmYWNlID0gY2Fpcm9f
ZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmY2ZvbnQtPmZvbnRfcGF0dGVybik7Cisg
ICAgICAgIGRvdWJsZSBzaXplOworICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0RG91YmxlKGZjZm9u
dC0+Zm9udF9wYXR0ZXJuLCBGQ19QSVhFTF9TSVpFLCAwLCAmc2l6ZSkgIT0gRmNSZXN1bHRNYXRj
aCkKKyAgICAgICAgICBzaXplID0gMTIuMDsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1h
dHJpeDsKKyAgICAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgsIHNpemUs
IHNpemUpOworICAgICAgICBjYWlyb19mb250X29wdGlvbnNfdCogZm9udE9wdGlvbnM7CisgICAg
ICAgIGlmIChwYW5nb19jYWlyb19jb250ZXh0X2dldF9mb250X29wdGlvbnMobV9jb250ZXh0KSkK
KyAgICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jb3B5KHBhbmdvX2Nh
aXJvX2NvbnRleHRfZ2V0X2ZvbnRfb3B0aW9ucyhtX2NvbnRleHQpKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgIGZvbnRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgpOworICAg
ICAgICBjYWlyb19tYXRyaXhfdCBjdG07CisgICAgICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50
aXR5KCZjdG0pOworICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVh
dGUoZmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIGZvbnRPcHRpb25zKTsKKyAgICAgICAgY2Fpcm9f
Zm9udF9vcHRpb25zX2Rlc3Ryb3koZm9udE9wdGlvbnMpOworICAgICAgICBjYWlyb19mb250X2Zh
Y2VfZGVzdHJveShmYWNlKTsKKyAgICB9CisjZW5kaWYKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0
aW9uX2ZyZWUoZGVzY3JpcHRpb24pOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX2NvbnRl
eHQoMCkKKyAgICAsIG1fZm9udCgwKQorICAgICwgbV9mb250RGVzY3JpcHRpb24oKQorICAgICwg
bV9zY2FsZWRGb250KDApCit7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6
ZShzaXplKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRCb2xkKGJvbGQpOworICAgIG1fZm9u
dERlc2NyaXB0aW9uLnNldEl0YWxpYyhpdGFsaWMpOworfQorCitGb250UGxhdGZvcm1EYXRhOjpG
b250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgaW50IHNpemUsIGJv
b2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAsIG1fZm9udCgw
KQorICAgICwgbV9mb250RGVzY3JpcHRpb24oKQorICAgICwgbV9zY2FsZWRGb250KDApCit7Cisg
ICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICBtX2ZvbnRE
ZXNjcmlwdGlvbi5zZXRCb2xkKGJvbGQpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNldEl0YWxp
YyhpdGFsaWMpOworCisgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKyAgICBjYWlyb19t
YXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgc2l6ZSwgc2l6ZSk7CisgICAgY2Fpcm9fbWF0
cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOworICAgIGNh
aXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgp
OworCisgICAgLy8gV2UgZm9yY2UgYW50aWFsaWFzaW5nIGFuZCBkaXNhYmxlIGhpbnRpbmcgdG8g
cHJvdmlkZSBjb25zaXN0ZW50CisgICAgLy8gdHlwb2dyYXBoaWMgcXVhbGl0aWVzIGZvciBjdXN0
b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICBjYWlyb19mb250X29wdGlvbnNfc2V0X2hp
bnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKKyAgICBjYWlyb19mb250
X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfR1JBWSk7CisK
KyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZhY2UsICZm
b250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNfZGVzdHJv
eShvcHRpb25zKTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKK3sKKyAgICBz
dGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXplZCkKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAgaWYgKCFt
X2ZvbnRNYXApCisgICAgICAgIG1fZm9udE1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2dldF9k
ZWZhdWx0KCk7CisgICAgaWYgKCFtX2hhc2hUYWJsZSkgeworICAgICAgICBQYW5nb0ZvbnRGYW1p
bHkqKiBmYW1pbGllcyA9IDA7CisgICAgICAgIGludCBuX2ZhbWlsaWVzID0gMDsKKworICAgICAg
ICBtX2hhc2hUYWJsZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBnX3N0cl9l
cXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZik7CisKKyAgICAgICAgcGFuZ29fZm9udF9tYXBf
bGlzdF9mYW1pbGllcyhtX2ZvbnRNYXAsICZmYW1pbGllcywgJm5fZmFtaWxpZXMpOworCisgICAg
ICAgIGZvciAoaW50IGZhbWlseSA9IDA7IGZhbWlseSA8IG5fZmFtaWxpZXM7IGZhbWlseSsrKQor
ICAgICAgICAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQobV9oYXNoVGFibGUsCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChwYW5nb19mb250X2ZhbWlseV9n
ZXRfbmFtZShmYW1pbGllc1tmYW1pbHldKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBnX29iamVjdF9yZWYoZmFtaWxpZXNbZmFtaWx5XSkpOworCisgICAgICAgIGdfZnJl
ZShmYW1pbGllcyk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZvbnRQbGF0Zm9y
bURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKKyAgICAvLyBEZXN0cm95IHRha2VzIHBsYWNl
IGluIEZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKS4KK30KKworYm9vbCBGb250UGxhdGZvcm1E
YXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBkZXNjcmlw
dGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpYmVfd2l0aF9hYnNvbHV0ZV9zaXplKG1fZm9udCk7Cisg
ICAgUGFuZ29Gb250RmFtaWx5KiBmYW1pbHkgPSByZWludGVycHJldF9jYXN0PFBhbmdvRm9udEZh
bWlseSo+KGdfaGFzaF90YWJsZV9sb29rdXAobV9oYXNoVGFibGUsIHBhbmdvX2ZvbnRfZGVzY3Jp
cHRpb25fZ2V0X2ZhbWlseShkZXNjcmlwdGlvbikpKTsKKyAgICBwYW5nb19mb250X2Rlc2NyaXB0
aW9uX2ZyZWUoZGVzY3JpcHRpb24pOworICAgIHJldHVybiBwYW5nb19mb250X2ZhbWlseV9pc19t
b25vc3BhY2UoZmFtaWx5KTsKK30KKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRGb250KGNh
aXJvX3QqIGNyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NjYWxlZEZvbnQpOworCisgICAgY2Fp
cm9fc2V0X3NjYWxlZF9mb250KGNyLCBtX3NjYWxlZEZvbnQpOworfQorCitib29sIEZvbnRQbGF0
Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIpIGNvbnN0
Cit7CisgICAgaWYgKG1fZm9udCA9PSBvdGhlci5tX2ZvbnQpCisgICAgICAgIHJldHVybiB0cnVl
OworICAgIGlmIChtX2ZvbnQgPT0gMCB8fCBtX2ZvbnQgPT0gcmVpbnRlcnByZXRfY2FzdDxQYW5n
b0ZvbnQqPigtMSkKKyAgICAgICAgfHwgb3RoZXIubV9mb250ID09IDAgfHwgb3RoZXIubV9mb250
ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIHRoaXNEZXNjID0gcGFuZ29fZm9udF9kZXNj
cmliZShtX2ZvbnQpOworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBvdGhlckRlc2MgPSBwYW5n
b19mb250X2Rlc2NyaWJlKG90aGVyLm1fZm9udCk7CisgICAgYm9vbCByZXN1bHQgPSBwYW5nb19m
b250X2Rlc2NyaXB0aW9uX2VxdWFsKHRoaXNEZXNjLCBvdGhlckRlc2MpOworICAgIHBhbmdvX2Zv
bnRfZGVzY3JpcHRpb25fZnJlZShvdGhlckRlc2MpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRp
b25fZnJlZSh0aGlzRGVzYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9kZVBhbmdv
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjljMTMxCi0tLSAvZGV2
L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5v
ZGVQYW5nby5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiwg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAy
MDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KKyAqIENvcHlyaWdodCAo
QykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKworI2luY2x1ZGUgIlNpbXBsZUZv
bnREYXRhLmgiCisjaW5jbHVkZSA8cGFuZ28vcGFuZ28tZm9udC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3N0YXRpYyBQYW5nb0dseXBoIHBhbmdvX2ZvbnRfZ2V0X2dseXBoKFBhbmdvRm9u
dCogZm9udCwgUGFuZ29Db250ZXh0KiBjb250ZXh0LCBndW5pY2hhciB3YykKK3sKKyAgICBQYW5n
b0dseXBoIHJlc3VsdCA9IDA7CisgICAgZ2NoYXIgYnVmZmVyWzddOworCisgICAgZ2ludCAgbGVu
Z3RoID0gZ191bmljaGFyX3RvX3V0Zjgod2MsIGJ1ZmZlcik7CisgICAgZ19yZXR1cm5fdmFsX2lm
X2ZhaWwobGVuZ3RoLCAwKTsKKworICAgIEdMaXN0KiBpdGVtcyA9IHBhbmdvX2l0ZW1pemUoY29u
dGV4dCwgYnVmZmVyLCAwLCBsZW5ndGgsIE5VTEwsIE5VTEwpOworCisgICAgaWYgKGdfbGlzdF9s
ZW5ndGgoaXRlbXMpID09IDEpIHsKKyAgICAgICAgUGFuZ29HbHlwaFN0cmluZyogZ2x5cGhzID0g
cGFuZ29fZ2x5cGhfc3RyaW5nX25ldygpOworCisgICAgICAgIHBhbmdvX3NoYXBlKGJ1ZmZlciwg
bGVuZ3RoLCAmKChQYW5nb0l0ZW0qKWl0ZW1zLT5kYXRhKS0+YW5hbHlzaXMsIGdseXBocyk7CisK
KyAgICAgICAgaWYgKGdseXBocy0+bnVtX2dseXBocyA9PSAxKQorICAgICAgICAgICAgcmVzdWx0
ID0gZ2x5cGhzLT5nbHlwaHNbMF0uZ2x5cGg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGdf
d2FybmluZygiZGlkbid0IGdldCAxIGdseXBoIGJ1dCAlZCIsIGdseXBocy0+bnVtX2dseXBocyk7
CisKKyAgICAgICAgcGFuZ29fZ2x5cGhfc3RyaW5nX2ZyZWUoZ2x5cGhzKTsKKyAgICB9CisKKyAg
ICBnX2xpc3RfZm9yZWFjaChpdGVtcywgKEdGdW5jKXBhbmdvX2l0ZW1fZnJlZSwgTlVMTCk7Cisg
ICAgZ19saXN0X2ZyZWUoaXRlbXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBH
bHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVDaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnRE
YXRhKQoreworICAgIC8vIFRoZSBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRoYW4gdGhl
IGdseXBoIHBhZ2Ugc2l6ZSBpZiB0aGUgYnVmZmVyIGhhcyBVbmljb2RlIHN1cHBsZW1lbnRhcnkg
Y2hhcmFjdGVycy4KKyAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4KKyAgICBp
ZiAoYnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdlOjpzaXplKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBpZiAoIWZvbnREYXRhLT5tX2ZvbnQubV9mb250IHx8IGZvbnREYXRhLT5tX2ZvbnQu
bV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgR2x5cGggZ2x5cGggPSBwYW5n
b19mb250X2dldF9nbHlwaChmb250RGF0YS0+bV9mb250Lm1fZm9udCwgZm9udERhdGEtPm1fZm9u
dC5tX2NvbnRleHQsIGJ1ZmZlcltpXSk7CisgICAgICAgIGlmICghZ2x5cGgpCisgICAgICAgICAg
ICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlwaCwgZm9u
dERhdGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAgYi9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi45MGJjZWE3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAKQEAgLTAsMCAr
MSwxNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1l
bCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4IEFscCBU
b2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2VyIEhhbnMg
UGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENl
bnRlciBVU0EsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
KyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
KyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVkZSAiRm9u
dERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRlIDxjYWly
by5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx1bmljb2RlL3Vub3Jt
Lmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
Cit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreworICAgIGNhaXJvX2ZvbnRf
ZXh0ZW50c190IGZvbnRfZXh0ZW50czsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0ZXh0X2V4
dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250
LCAmZm9udF9leHRlbnRzKTsKKyAgICBtX2FzY2VudCA9IHN0YXRpY19jYXN0PGludD4oZm9udF9l
eHRlbnRzLmFzY2VudCk7CisgICAgbV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihmb250X2V4
dGVudHMuZGVzY2VudCk7CisgICAgbV9saW5lU3BhY2luZyA9IHN0YXRpY19jYXN0PGludD4oZm9u
dF9leHRlbnRzLmhlaWdodCk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRlbnRzKG1f
Zm9udC5tX3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7CisgICAgbV94SGVpZ2h0ID0g
dGV4dF9leHRlbnRzLmhlaWdodDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4dGVudHMo
bV9mb250Lm1fc2NhbGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKKyAgICBtX3NwYWNlV2lk
dGggPSAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsKKyAgICBtX2xp
bmVHYXAgPSBtX2xpbmVTcGFjaW5nIC0gbV9hc2NlbnQgLSBtX2Rlc2NlbnQ7Cit9CisKK3ZvaWQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgaWYgKCFpc0N1c3RvbUZv
bnQoKSkgeworCisgICAgICAgIGlmIChtX2ZvbnQubV9mb250ICYmIG1fZm9udC5tX2ZvbnQgIT0g
cmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpIHsKKyAgICAgICAgICAgIGdfb2JqZWN0
X3VucmVmKG1fZm9udC5tX2ZvbnQpOworICAgICAgICAgICAgbV9mb250Lm1fZm9udCA9IDA7Cisg
ICAgICAgIH0KKworICAgICAgICBpZiAobV9mb250Lm1fY29udGV4dCkgeworICAgICAgICAgICAg
Z19vYmplY3RfdW5yZWYgKG1fZm9udC5tX2NvbnRleHQpOworICAgICAgICAgICAgbV9mb250Lm1f
Y29udGV4dCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9mb250Lm1faGFzaFRhYmxl
KSB7CisgICAgICAgICAgICBnX2hhc2hfdGFibGVfZGVzdHJveShtX2ZvbnQubV9oYXNoVGFibGUp
OworICAgICAgICAgICAgbV9mb250Lm1faGFzaFRhYmxlID0gMDsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChtX2ZvbnQubV9zY2FsZWRGb250KSB7CisgICAgICAgICAgICBjYWlyb19zY2FsZWRf
Zm9udF9kZXN0cm95KG1fZm9udC5tX3NjYWxlZEZvbnQpOworICAgICAgICAgICAgbV9mb250Lm1f
c2NhbGVkRm9udCA9IDA7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBkZWxldGUgbV9zbWFsbENh
cHNGb250RGF0YTsKK30KKworU2ltcGxlRm9udERhdGEqIFNpbXBsZUZvbnREYXRhOjpzbWFsbENh
cHNGb250RGF0YShjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbikgY29uc3QK
K3sKKyAgICBpZiAoIW1fc21hbGxDYXBzRm9udERhdGEpIHsKKyAgICAgICAgRm9udERlc2NyaXB0
aW9uIGRlc2MgPSBGb250RGVzY3JpcHRpb24oZm9udERlc2NyaXB0aW9uKTsKKyAgICAgICAgZGVz
Yy5zZXRTcGVjaWZpZWRTaXplKDAuNzBmKmZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSk7
CisgICAgICAgIGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEqIHBkYXRhID0gbmV3IEZvbnRQbGF0Zm9y
bURhdGEoZGVzYywgZGVzYy5mYW1pbHkoKS5mYW1pbHkoKSk7CisgICAgICAgIG1fc21hbGxDYXBz
Rm9udERhdGEgPSBuZXcgU2ltcGxlRm9udERhdGEoKnBkYXRhKTsKKyAgICB9CisgICAgcmV0dXJu
IG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK2Jvb2wgU2ltcGxlRm9udERhdGE6OmNvbnRhaW5z
Q2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgaW50IGxlbmd0aCkgY29uc3QKK3sK
KyAgICBib29sIHJlc3VsdCA9IHRydWU7CisKKyAgICBQYW5nb0NvdmVyYWdlKiByZXF1ZXN0ZWQg
PSBwYW5nb19jb3ZlcmFnZV9mcm9tX2J5dGVzKChndWNoYXIqKWNoYXJhY3RlcnMsIGxlbmd0aCk7
CisgICAgUGFuZ29Db3ZlcmFnZSogYXZhaWxhYmxlID0gcGFuZ29fZm9udF9nZXRfY292ZXJhZ2Uo
bV9mb250Lm1fZm9udCwgcGFuZ29fbGFuZ3VhZ2VfZ2V0X2RlZmF1bHQoKSk7CisgICAgcGFuZ29f
Y292ZXJhZ2VfbWF4KHJlcXVlc3RlZCwgYXZhaWxhYmxlKTsKKworICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgeworICAgICAgICBpZiAoUEFOR09fQ09WRVJBR0VfTk9O
RSA9PSBwYW5nb19jb3ZlcmFnZV9nZXQocmVxdWVzdGVkLCBpKSkgeworICAgICAgICAgICAgcmVz
dWx0ID0gZmFsc2U7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHBhbmdvX2NvdmVyYWdlX3VucmVmKHJlcXVlc3RlZCk7CisgICAgcGFuZ29fY292ZXJhZ2VfdW5y
ZWYoYXZhaWxhYmxlKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgU2ltcGxlRm9u
dERhdGE6OmRldGVybWluZVBpdGNoKCkKK3sKKyAgICBtX3RyZWF0QXNGaXhlZFBpdGNoID0gbV9m
b250LmlzRml4ZWRQaXRjaCgpOworfQorCitmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1X
aWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAoreworICAgIEFTU0VSVChtX2ZvbnQubV9z
Y2FsZWRGb250KTsKKworICAgIGNhaXJvX2dseXBoX3QgY2dseXBoID0geyBnbHlwaCwgMCwgMCB9
OworICAgIGNhaXJvX3RleHRfZXh0ZW50c190IGV4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2Zv
bnRfZ2x5cGhfZXh0ZW50cyhtX2ZvbnQubV9zY2FsZWRGb250LCAmY2dseXBoLCAxLCAmZXh0ZW50
cyk7CisKKyAgICBmbG9hdCB3ID0gKGZsb2F0KW1fc3BhY2VXaWR0aDsKKyAgICBpZiAoY2Fpcm9f
c2NhbGVkX2ZvbnRfc3RhdHVzKG1fZm9udC5tX3NjYWxlZEZvbnQpID09IENBSVJPX1NUQVRVU19T
VUNDRVNTICYmIGV4dGVudHMueF9hZHZhbmNlICE9IDApCisgICAgICAgIHcgPSAoZmxvYXQpZXh0
ZW50cy54X2FkdmFuY2U7CisgICAgcmV0dXJuIHc7Cit9CisKK3ZvaWQgU2ltcGxlRm9udERhdGE6
OnNldEZvbnQoY2Fpcm9fdCogY3IpIGNvbnN0Cit7CisgICAgQVNTRVJUKGNyKTsKKyAgICBtX2Zv
bnQuc2V0Rm9udChjcik7Cit9CisKK30KZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZp
Z3VyZS5hYwppbmRleCA0YTU5MTk5Li4xN2Q3YzUyIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMK
KysrIGIvY29uZmlndXJlLmFjCkBAIC0zOTMsNiArMzkzLDE5IEBAIEFDX0FSR19FTkFCTEUoZmFz
dF9tYWxsb2MsCiAgICAgICAgICAgICAgIFtdLFtpZiB0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5
ZXMiOyB0aGVuIGVuYWJsZV9mYXN0X21hbGxvYz0ibm8iOyBlbHNlIGVuYWJsZV9mYXN0X21hbGxv
Yz0ieWVzIjsgZmldKQogQUNfTVNHX1JFU1VMVChbJGVuYWJsZV9mYXN0X21hbGxvY10pCiAKKyMg
ZGV0ZXJtaW5lIHRoZSBmb250IGJhY2tlbmQKK0FDX01TR19DSEVDS0lORyhbdGhlIGZvbnQgYmFj
a2VuZCB0byB1c2VdKQorQUNfQVJHX1dJVEgoZm9udF9iYWNrZW5kLAorICAgICAgICAgICAgQUNf
SEVMUF9TVFJJTkcoWy0td2l0aC1mb250LWJhY2tlbmQ9QDw6QGZyZWV0eXBlL3BhbmdvQDo+QF0s
CisgICAgICAgICAgICAgICAgICAgICAgICAgICBbU2VsZWN0IGZvbnQgYmFja2VuZCBbZGVmYXVs
dD1mcmVldHlwZV1dKSwKKyAgICAgICAgICAgIFtdLFt3aXRoX2ZvbnRfYmFja2VuZD0iZnJlZXR5
cGUiXSkKKworY2FzZSAiJHdpdGhfZm9udF9iYWNrZW5kIiBpbgorICAgICBmcmVldHlwZXxwYW5n
bykgOzsKKyAgICAgKikgQUNfTVNHX0VSUk9SKFtJbnZhbGlkIGZvbnQgYmFja2VuZDogbXVzdCBi
ZSBmcmVldHlwZSBvciBwYW5nby5dKSA7OworZXNhYworQUNfTVNHX1JFU1VMVChbJHdpdGhfZm9u
dF9iYWNrZW5kXSkKKwogIyBBZGQgJy1nJyBmbGFnIHRvIGdjYyBpZiBpdCdzIGRlYnVnIGJ1aWxk
CiBpZiB0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5ZXMiOyB0aGVuCiAgICBDWFhGTEFHUz0iJENY
WEZMQUdTIC1nIgpAQCAtNDY5LDYgKzQ4MiwxMCBAQCBBTV9DT05ESVRJT05BTChbVEFSR0VUX0RJ
UkVDVEZCXSwgW3Rlc3QgIiR3aXRoX3RhcmdldCIgPSAiZGlyZWN0ZmIiXSkKICMgSFRUUCBiYWNr
ZW5kIGNvbmRpdGlvbmFscwogQU1fQ09ORElUSU9OQUwoW1VTRV9DVVJMXSwgW3Rlc3QgIiRodHRw
X2JhY2tlbmQiID0gImN1cmwiXSkKIAorIyBGb250IGJhY2tlbmQgY29uZGl0aW9uYWxzCitBTV9D
T05ESVRJT05BTChbVVNFX0ZSRUVUWVBFXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAi
ZnJlZXR5cGUiXSkKK0FNX0NPTkRJVElPTkFMKFtVU0VfUEFOR09dLCBbdGVzdCAiJHdpdGhfZm9u
dF9iYWNrZW5kIiA9ICJwYW5nbyJdKQorCiAjIFdlYktpdCBmZWF0dXJlIGNvbmRpdGlvbmFscwog
QU1fQ09ORElUSU9OQUwoW0VOQUJMRV9ERUJVR10sW3Rlc3QgIiRlbmFibGVfZGVidWciID0gInll
cyJdKQogQU1fQ09ORElUSU9OQUwoW0VOQUJMRV9DUk9TU19ET0NVTUVOVF9NRVNTQUdJTkddLFt0
ZXN0ICIkZW5hYmxlX2Nyb3NzX2RvY3VtZW50X21lc3NhZ2luZyIgPSAieWVzIl0pCkBAIC01MDQs
NiArNTIxLDcgQEAgQnVpbGQgY29uZmlndXJhdGlvbjoKICBDb2RlIGNvdmVyYWdlIHN1cHBvcnQg
ICAgICAgICAgICAgOiAkZW5hYmxlX2NvdmVyYWdlCiAgVW5pY29kZSBiYWNrZW5kICAgICAgICAg
ICAgICAgICAgIDogJHVuaWNvZGVfYmFja2VuZAogIEhUVFAgYmFja2VuZCAgICAgICAgICAgICAg
ICAgICAgICA6ICRodHRwX2JhY2tlbmQKKyBGb250IGJhY2tlbmQgICAgICAgICAgICAgICAgICAg
ICAgOiAkd2l0aF9mb250X2JhY2tlbmQKICBPcHRpbWl6ZWQgbWVtb3J5IGFsbG9jYXRvciAgICAg
ICAgOiAkZW5hYmxlX2Zhc3RfbWFsbG9jCiBGZWF0dXJlczoKICBIVE1MNSBjcm9zcy1kb2N1bWVu
dCBtZXNzYWdpbmcgICAgOiAkZW5hYmxlX2Nyb3NzX2RvY3VtZW50X21lc3NhZ2luZwotLSAKMS41
LjQuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>19639</attachid>
            <date>2008-03-10 11:42:12 -0700</date>
            <delta_ts>2008-03-12 08:01:47 -0700</delta_ts>
            <desc>Add Pango font backend.</desc>
            <filename>0001-Add-Pango-font-backend.patch</filename>
            <type>text/plain</type>
            <size>29569</size>
            <attacher name="Xan Lopez">xan.lopez</attacher>
            
              <data encoding="base64">RnJvbSBhN2MzMWQ2MmQ4NjA5NWU4ZDk3ZjcyOWYwYWFhZTQ5OTU5ODAzZDI4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBYYW4gTG9wZXogPHhhbkBnbm9tZS5vcmc+CkRhdGU6IE1vbiwg
MTAgTWFyIDIwMDggMTQ6NTc6MjMgKzAxMDAKU3ViamVjdDogW1BBVENIXSBBZGQgUGFuZ28gZm9u
dCBiYWNrZW5kLgoKU3VwcG9ydCBtdWx0aXBsZSBmb250IGJhY2tlbmRzIGFuZCBhZGQgbmV3IHBh
bmdvIGZvbnQgYmFja2VuZC4KLS0tCiBDaGFuZ2VMb2cgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgMTEgKwogV2ViQ29yZS9DaGFuZ2VMb2cgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDM4ICsrKysKIFdlYkNvcmUvR05VbWFrZWZpbGUuYW0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAzMiArKystCiBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVHdGsuY3BwICAgICB8ICAgIDYgKwogLi4uL2dyYXBoaWNz
L2d0ay9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhUGFuZ28uY3BwICAgfCAgIDQ5ICsrKysrCiBXZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhLmggICB8ICAgMzUgKysr
LQogLi4uL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwICAgICAgICAgfCAg
MjIwICsrKysrKysrKysrKysrKysrKysrCiAuLi4vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVO
b2RlUGFuZ28uY3BwICAgICAgICB8ICAgOTMgKysrKysrKysKIC4uLi9wbGF0Zm9ybS9ncmFwaGlj
cy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAgIHwgIDE0NCArKysrKysrKysrKysrCiBjb25m
aWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMTggKysK
IDEwIGZpbGVzIGNoYW5nZWQsIDY0MCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQogY3Jl
YXRlIG1vZGUgMTAwNjQ0IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21Q
bGF0Zm9ybURhdGFQYW5nby5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5j
cHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1w
bGVGb250RGF0YVBhbmdvLmNwcAoKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwpp
bmRleCAzN2E2N2Q3Li5jMWVlNDNmIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDgtMDMtMTAgIFhhbiBMb3BleiAgPHhhbkBnbm9tZS5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0
cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMjkKKworICAgICAgICBBZGQg
b3B0aW9uYWwgZm9udCBiYWNrZW5kIHN1cHBvcnQgd2l0aCBmcmVldHlwZSBhbmQgcGFuZ28KKyAg
ICAgICAgYmFja2VuZHMuIERlZmF1bHQgaXMgZnJlZXR5cGUgZm9yIG5vdy4KKyAgICAgICAgCisg
ICAgICAgICogY29uZmlndXJlLmFjOgorCiAyMDA4LTAzLTA3ICBTaW1vbiBIYXVzbWFubiAgPGhh
dXNtYW5uQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4uCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGE1OWU3NGYu
LmZmZTcxZDkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDgtMDMtMTAgIFhhbiBMb3BleiAgPHhhbkBnbm9t
ZS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
aHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUyMjkKKworICAgICAgICBB
ZGQgUGFuZ28gZm9udCBiYWNrZW5kLgorICAgICAgICAKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Zm9udEV4aXN0cyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6fkZvbnRDdXN0b21QbGF0
Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9u
dFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpyZWxlYXNlRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YS5oOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpoYXNoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9ndGsv
Rm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQ
bGF0Zm9ybURhdGE6OmluaXQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
fkZvbnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6
aXNGaXhlZFBpdGNoKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnNldEZv
bnQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0dseXBoUGFnZVRyZWVOb2RlUGFuZ28uY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnBhbmdvX2ZvbnRfZ2V0X2dseXBoKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxl
Rm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250
RGF0YTo6c21hbGxDYXBzRm9udERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmNvbnRhaW5zQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0
YTo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
c2V0Rm9udCk6CisKIDIwMDgtMDMtMTAgIFNpbW9uIEhhdXNtYW5uICA8aGF1c21hbm5Ad2Via2l0
Lm9yZz4KIAogICAgICAgICBXeCBsaW5raW5nIGZpeC4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDJjMGE3N2EuLjBmZDg0
NDIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVt
YWtlZmlsZS5hbQpAQCAtOTgwLDExICs5ODAsNyBAQCB3ZWJraXRndGtfc291cmNlcyArPSBcCiAJ
V2ViQ29yZS9wbGF0Zm9ybS9ndGsvRmlsZUNob29zZXJHdGsuY3BwIFwKIAlXZWJDb3JlL3BsYXRm
b3JtL2d0ay9GaWxlU3lzdGVtR3RrLmNwcCBcCiAJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvRm9udENhY2hlR3RrLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3Rr
L0ZvbnRHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZv
cm1EYXRhR3RrLmNwcCBcCi0JV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdl
VHJlZU5vZGVHdGsuY3BwIFwKLQlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVG
b250RGF0YUd0ay5jcHAgXAogCVdlYkNvcmUvcGxhdGZvcm0vZ3RrL0tleUV2ZW50R3RrLmNwcCBc
CiAJV2ViQ29yZS9wbGF0Zm9ybS9ndGsvTGFuZ3VhZ2UuY3BwIFwKIAlXZWJDb3JlL3BsYXRmb3Jt
L2d0ay9Mb2NhbGl6ZWRTdHJpbmdzR3RrLmNwcCBcCkBAIC0xMDQyLDYgKzEwMzgsMzQgQEAgd2Vi
Y29yZV9zb3VyY2VzICs9IFwKIAogZW5kaWYgIyBFTkQgVVNFX0NVUkwKIAorIyAtLS0KKyMgRnJl
ZXR5cGUgZm9udCBiYWNrZW5kCisjIC0tLQoraWYgVVNFX0ZSRUVUWVBFCit3ZWJraXRndGtfY3Bw
ZmxhZ3MgKz0gXAorCS1EVVNFX0ZSRUVUWVBFPTEKKword2Via2l0Z3RrX3NvdXJjZXMgKz0gXAor
CVdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3Bw
IFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhR3RrLmNw
cCBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVHdGsu
Y3BwIFwKKwlXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YUd0ay5j
cHAKK2VuZGlmICMgRU5EIFVTRV9GUkVFVFlQRQorCisjIC0tLQorIyBQYW5nbyBmb250IGJhY2tl
bmQKKyMgLS0tCitpZiBVU0VfUEFOR08KK3dlYmtpdGd0a19jcHBmbGFncyArPSBcCisJLURVU0Vf
UEFOR089MQorCit3ZWJraXRndGtfc291cmNlcyArPSBcCisJV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcCBcCisJV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcCBcCisJV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQYW5nby5jcHAgXAorCVdlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1NpbXBsZUZvbnREYXRhUGFuZ28uY3BwCitlbmRpZiAj
IEVORCBVU0VfUEFOR08KKwogIyAtLS0tCiAjIENyb3NzLWRvY3VtZW50IG1lc3NhZ2luZyBzdXBw
b3J0CiAjIC0tLS0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0Zv
bnRDYWNoZUd0ay5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250Q2FjaGVH
dGsuY3BwCmluZGV4IGFlYzU3NTguLjA0NGMyNTkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDYWNoZUd0ay5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9ndGsvRm9udENhY2hlR3RrLmNwcApAQCAtNjQsNyArNjQsMTMgQEAgRm9udFBsYXRm
b3JtRGF0YSogRm9udENhY2hlOjpnZXRMYXN0UmVzb3J0RmFsbGJhY2tGb250KGNvbnN0IEZvbnRE
ZXNjcmlwdGlvbiYgZm8KIGJvb2wgRm9udENhY2hlOjpmb250RXhpc3RzKGNvbnN0IEZvbnREZXNj
cmlwdGlvbiYgZm9udERlc2NyaXB0aW9uLCBjb25zdCBBdG9taWNTdHJpbmcmIGZhbWlseSkKIHsK
ICAgICBGb250UGxhdGZvcm1EYXRhIHBsYXRmb3JtRGF0YShmb250RGVzY3JpcHRpb24sIGZhbWls
eSk7CisjaWYgZGVmaW5lZChVU0VfUEFOR08pCisgICAgcmV0dXJuIHBsYXRmb3JtRGF0YS5tX2Zv
bnQgIT0gMDsKKyNlbGlmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQogICAgIHJldHVybiBwbGF0Zm9y
bURhdGEubV9wYXR0ZXJuICE9IDA7CisjZWxzZQorI2Vycm9yICJNdXN0IGRlZmluZSBhIGZvbnQg
YmFja2VuZCIKKyNlbmRpZgogfQogCiBGb250UGxhdGZvcm1EYXRhKiBGb250Q2FjaGU6OmNyZWF0
ZUZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24s
IGNvbnN0IEF0b21pY1N0cmluZyYgZmFtaWx5KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9ndGsvRm9udEN1c3RvbVBsYXRmb3JtRGF0YVBhbmdvLmNwcCBiL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQYW5nby5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWViMTM1OQotLS0gL2Rldi9udWxsCisr
KyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGFQ
YW5nby5jcHAKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBbHAg
VG9rZXIgPGFscEBhdG9rZXIuY29tPgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5H
LkxJQi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAy
MTEwLTEzMDEsIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkZvbnRDdXN0b21QbGF0Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOjp+Rm9udEN1c3RvbVBsYXRmb3JtRGF0YSgpCit7Cit9CisK
K0ZvbnRQbGF0Zm9ybURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0
YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBib29sIGl0YWxpYykKK3sKKyAgICByZXR1cm4gRm9udFBs
YXRmb3JtRGF0YShtX2ZvbnRGYWNlLCBzaXplLCBib2xkLCBpdGFsaWMpOworfQorCitzdGF0aWMg
dm9pZCByZWxlYXNlRGF0YSh2b2lkKiBkYXRhKQoreworICAgIHN0YXRpY19jYXN0PFNoYXJlZEJ1
ZmZlcio+KGRhdGEpLT5kZXJlZigpOworfQorCitGb250Q3VzdG9tUGxhdGZvcm1EYXRhKiBjcmVh
dGVGb250Q3VzdG9tUGxhdGZvcm1EYXRhKFNoYXJlZEJ1ZmZlciogYnVmZmVyKQoreworICAgIC8v
IEZJWE1FOiB3ZSBuZWVkIHN1cHBvcnQgaW4gcGFuZ28gdG8gcmVhZCBmb250cyBmcm9tIG1lbW9y
eSB0byBpbXBsZW1lbnQgdGhpcy55CisgICAgcmV0dXJuIDA7Cit9CisKK30KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL0ZvbnRQbGF0Zm9ybURhdGEuaAppbmRleCA3NzhkNTI1
Li4yMjRhZjc5IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9Gb250
UGxhdGZvcm1EYXRhLmgKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBs
YXRmb3JtRGF0YS5oCkBAIC01LDYgKzUsNyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxl
IENvbXB1dGVyLCBJbmMuCiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtl
LmVtbWVsQGdtYWlsLmNvbQogICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVy
IEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIg
VVNBLCBJbmMuCiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKQEAgLTMwLDgg
KzMxLDE0IEBACiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJGb250RGVzY3Jp
cHRpb24uaCIKICNpbmNsdWRlIDxjYWlyby5oPgorI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQog
I2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CiAjaW5jbHVkZSA8Zm9udGNvbmZpZy9mY2ZyZWV0eXBlLmg+
CisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyNpbmNsdWRlIDxwYW5nby9wYW5nb2NhaXJvLmg+
CisjZWxzZQorI2Vycm9yICJNdXN0IGRlZmluZWQgYSBmb250IGJhY2tlbmQiCisjZW5kaWYKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSwxMiArNDYsMjYgQEAgY2xhc3MgRm9udFBsYXRm
b3JtRGF0YSB7CiBwdWJsaWM6CiAgICAgY2xhc3MgRGVsZXRlZCB7fTsKICAgICBGb250UGxhdGZv
cm1EYXRhKERlbGV0ZWQpCisjaWYgZGVmaW5lZChVU0VfRlJFRVRZUEUpCiAgICAgICAgIDogbV9w
YXR0ZXJuKHJlaW50ZXJwcmV0X2Nhc3Q8RmNQYXR0ZXJuKj4oLTEpKQorI2VsaWYgZGVmaW5lZChV
U0VfUEFOR08pCisgICAgICAgIDogbV9jb250ZXh0KDApCisgICAgICAgICwgbV9mb250KHJlaW50
ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorI2Vsc2UKKyNlcnJvciAiTXVzdCBkZWZpbmVk
IGEgZm9udCBiYWNrZW5kIgorI2VuZGlmCiAgICAgICAgICwgbV9zY2FsZWRGb250KDApCiAgICAg
ICAgIHsgfQogCiAgICAgRm9udFBsYXRmb3JtRGF0YSgpCisjaWYgZGVmaW5lZChVU0VfRlJFRVRZ
UEUpCiAgICAgICAgIDogbV9wYXR0ZXJuKDApCisjZWxpZiBkZWZpbmVkKFVTRV9QQU5HTykKKyAg
ICAgICAgOiBtX2NvbnRleHQoMCkKKyAgICAgICAgLCBtX2ZvbnQoMCkKKyNlbHNlCisjZXJyb3Ig
Ik11c3QgZGVmaW5lZCBhIGZvbnQgYmFja2VuZCIKKyNlbmRpZgogICAgICAgICAsIG1fc2NhbGVk
Rm9udCgwKQogICAgICAgICB7IH0KIApAQCAtNjQsMTMgKzg1LDIzIEBAIHB1YmxpYzoKIAogICAg
IHVuc2lnbmVkIGhhc2goKSBjb25zdAogICAgIHsKLSAgICAgICAgdWludHB0cl90IGhhc2hDb2Rl
c1sxXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KG1fc2NhbGVkRm9udCkgfTsKLSAg
ICAgICAgcmV0dXJuIFN0cmluZ0ltcGw6OmNvbXB1dGVIYXNoKCByZWludGVycHJldF9jYXN0PFVD
aGFyKj4oaGFzaENvZGVzKSwgc2l6ZW9mKGhhc2hDb2RlcykgLyBzaXplb2YoVUNoYXIpKTsKKyAg
ICAgICAgdWludHB0cl90IGhhc2hDb2Rlc1sxXSA9IHsgcmVpbnRlcnByZXRfY2FzdDx1aW50cHRy
X3Q+KG1fc2NhbGVkRm9udCl9OworICAgICAgICByZXR1cm4gU3RyaW5nSW1wbDo6Y29tcHV0ZUhh
c2gocmVpbnRlcnByZXRfY2FzdDxVQ2hhcio+KGhhc2hDb2RlcyksIHNpemVvZihoYXNoQ29kZXMp
IC8gc2l6ZW9mKFVDaGFyKSk7CiAgICAgfQogCiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEZv
bnRQbGF0Zm9ybURhdGEmKSBjb25zdDsKIAorI2lmIGRlZmluZWQoVVNFX0ZSRUVUWVBFKQogICAg
IEZjUGF0dGVybiogbV9wYXR0ZXJuOworI2VsaWYgZGVmaW5lZChVU0VfUEFOR08pCisgICAgc3Rh
dGljIFBhbmdvRm9udE1hcCogbV9mb250TWFwOworICAgIHN0YXRpYyBHSGFzaFRhYmxlKiBtX2hh
c2hUYWJsZTsKKworICAgIFBhbmdvQ29udGV4dCogbV9jb250ZXh0OworICAgIFBhbmdvRm9udCog
bV9mb250OworI2Vsc2UKKyNlcnJvciAiTXVzdCBkZWZpbmVkIGEgZm9udCBiYWNrZW5kIgorI2Vu
ZGlmCiAgICAgRm9udERlc2NyaXB0aW9uIG1fZm9udERlc2NyaXB0aW9uOwogICAgIGNhaXJvX3Nj
YWxlZF9mb250X3QqIG1fc2NhbGVkRm9udDsKIH07CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2d0ay9Gb250UGxhdGZvcm1EYXRhUGFuZ28uY3BwIGIvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2YxODA1Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvRm9udFBsYXRmb3JtRGF0YVBhbmdvLmNwcApAQCAtMCww
ICsxLDIyMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5j
LgorICogQ29weXJpZ2h0IChDKSAyMDA2IE1pY2hhZWwgRW1tZWwgbWlrZS5lbW1lbEBnbWFpbC5j
b20KKyAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCBBbHAgVG9rZXIgPGFscEBhdG9rZXIuY29t
PgorICogQ29weXJpZ2h0IChDKSAyMDA3IEhvbGdlciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgUGlvbmVlciBSZXNlYXJjaCBDZW50ZXIgVVNBLCBJbmMuCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJ
Qi4gIElmIG5vdCwgd3JpdGUgdG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEw
LTEzMDEsIFVTQS4KKyAqLworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZvbnRQbGF0
Zm9ybURhdGEuaCIKKworI2luY2x1ZGUgIkNTdHJpbmcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgPGNhaXJvLmg+
CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisKKyNpbmNsdWRlIDxwYW5nby9wYW5nby5oPgorI2luY2x1
ZGUgPHBhbmdvL3BhbmdvY2Fpcm8uaD4KKworLy8gVXNlIGNhaXJvLWZ0IGkgYSByZWNlbnQgZW5v
dWdoIFBhbmdvIHZlcnNpb24gaXNuJ3QgYXZhaWxhYmxlCisjaWYgIVBBTkdPX1ZFUlNJT05fQ0hF
Q0soMSwxOCwwKQorI2luY2x1ZGUgPGNhaXJvLWZ0Lmg+CisjaW5jbHVkZSA8cGFuZ28vcGFuZ29m
Yy1mb250bWFwLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworICBQYW5nb0ZvbnRNYXAqIEZvbnRQbGF0Zm9ybURhdGE6Om1fZm9udE1hcCA9
IDA7CisgIEdIYXNoVGFibGUqIEZvbnRQbGF0Zm9ybURhdGE6Om1faGFzaFRhYmxlID0gMDsKKwor
Rm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3JpcHRpb24m
IGZvbnREZXNjcmlwdGlvbiwgY29uc3QgQXRvbWljU3RyaW5nJiBmYW1pbHlOYW1lKQorICAgIDog
bV9jb250ZXh0KDApCisgICAgLCBtX2ZvbnQoMCkKKyAgICAsIG1fZm9udERlc2NyaXB0aW9uKGZv
bnREZXNjcmlwdGlvbikKKyAgICAsIG1fc2NhbGVkRm9udCgwKQoreworICAgIEZvbnRQbGF0Zm9y
bURhdGE6OmluaXQoKTsKKworICAgIENTdHJpbmcgc3RvcmVkX2ZhbWlseSA9IGZhbWlseU5hbWUu
c3RyaW5nKCkudXRmOCgpOworICAgIGNoYXIgY29uc3QqIGZhbWlsaWVzW10gPSB7CisgICAgICBz
dG9yZWRfZmFtaWx5LmRhdGEoKSwKKyAgICAgIE5VTEwKKyAgICB9OworCisgICAgc3dpdGNoIChm
b250RGVzY3JpcHRpb24uZ2VuZXJpY0ZhbWlseSgpKSB7CisgICAgY2FzZSBGb250RGVzY3JpcHRp
b246OlNlcmlmRmFtaWx5OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJzZXJpZiI7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgRm9udERlc2NyaXB0aW9uOjpTYW5zU2VyaWZGYW1pbHk6CisgICAg
ICAgIGZhbWlsaWVzWzFdID0gInNhbnMiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnRE
ZXNjcmlwdGlvbjo6TW9ub3NwYWNlRmFtaWx5OgorICAgICAgICBmYW1pbGllc1sxXSA9ICJtb25v
c3BhY2UiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEZvbnREZXNjcmlwdGlvbjo6Tm9GYW1p
bHk6CisgICAgY2FzZSBGb250RGVzY3JpcHRpb246OlN0YW5kYXJkRmFtaWx5OgorICAgIGRlZmF1
bHQ6CisgICAgICAgIGZhbWlsaWVzWzFdID0gInNhbnMiOworICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBQYW5nb0ZvbnREZXNjcmlwdGlvbiogZGVzY3JpcHRpb24gPSBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX25ldygpOworICAgIHBhbmdvX2ZvbnRfZGVzY3JpcHRpb25fc2V0X2Fic29sdXRl
X3NpemUoZGVzY3JpcHRpb24sIGZvbnREZXNjcmlwdGlvbi5jb21wdXRlZFNpemUoKSAqIFBBTkdP
X1NDQUxFKTsKKworICAgIGlmIChmb250RGVzY3JpcHRpb24uYm9sZCgpKQorICAgICAgICBwYW5n
b19mb250X2Rlc2NyaXB0aW9uX3NldF93ZWlnaHQoZGVzY3JpcHRpb24sIFBBTkdPX1dFSUdIVF9C
T0xEKTsKKyAgICBpZiAoZm9udERlc2NyaXB0aW9uLml0YWxpYygpKQorICAgICAgICBwYW5nb19m
b250X2Rlc2NyaXB0aW9uX3NldF9zdHlsZShkZXNjcmlwdGlvbiwgUEFOR09fU1RZTEVfSVRBTElD
KTsKKworICAgIG1fY29udGV4dCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFwX2NyZWF0ZV9jb250ZXh0
KFBBTkdPX0NBSVJPX0ZPTlRfTUFQKG1fZm9udE1hcCkpOworICAgIGZvciAodW5zaWduZWQgaW50
IGkgPSAwOyAhbV9mb250ICYmIGkgPCBHX05fRUxFTUVOVFMoZmFtaWxpZXMpOyBpKyspIHsKKyAg
ICAgICAgcGFuZ29fZm9udF9kZXNjcmlwdGlvbl9zZXRfZmFtaWx5KGRlc2NyaXB0aW9uLCBmYW1p
bGllc1tpXSk7CisgICAgICAgIG1fZm9udCA9IHBhbmdvX2ZvbnRfbWFwX2xvYWRfZm9udChtX2Zv
bnRNYXAsIG1fY29udGV4dCwgZGVzY3JpcHRpb24pOworICAgIH0KKworI2lmIFBBTkdPX1ZFUlNJ
T05fQ0hFQ0soMSwxOCwwKQorICAgIGlmIChtX2ZvbnQpCisgICAgICAgIG1fc2NhbGVkRm9udCA9
IGNhaXJvX3NjYWxlZF9mb250X3JlZmVyZW5jZShwYW5nb19jYWlyb19mb250X2dldF9zY2FsZWRf
Zm9udChQQU5HT19DQUlST19GT05UKG1fZm9udCkpKTsKKyNlbHNlCisgICAgLy8gVGhpcyBjb21w
YXRpYmlsaXR5IGNvZGUgZm9yIG9sZGVyIHZlcnNpb25zIG9mIFBhbmdvIGlzIG5vdCB3ZWxsLXRl
c3RlZC4KKyAgICBpZiAobV9mb250KSB7CisgICAgICAgIFBhbmdvRmNGb250KiBmY2ZvbnQgPSBQ
QU5HT19GQ19GT05UKG1fZm9udCk7CisgICAgICAgIGNhaXJvX2ZvbnRfZmFjZV90KiBmYWNlID0g
Y2Fpcm9fZnRfZm9udF9mYWNlX2NyZWF0ZV9mb3JfcGF0dGVybihmY2ZvbnQtPmZvbnRfcGF0dGVy
bik7CisgICAgICAgIGRvdWJsZSBzaXplOworICAgICAgICBpZiAoRmNQYXR0ZXJuR2V0RG91Ymxl
KGZjZm9udC0+Zm9udF9wYXR0ZXJuLCBGQ19QSVhFTF9TSVpFLCAwLCAmc2l6ZSkgIT0gRmNSZXN1
bHRNYXRjaCkKKyAgICAgICAgICBzaXplID0gMTIuMDsKKyAgICAgICAgY2Fpcm9fbWF0cml4X3Qg
Zm9udE1hdHJpeDsKKyAgICAgICAgY2Fpcm9fbWF0cml4X2luaXRfc2NhbGUoJmZvbnRNYXRyaXgs
IHNpemUsIHNpemUpOworICAgICAgICBjYWlyb19mb250X29wdGlvbnNfdCogZm9udE9wdGlvbnM7
CisgICAgICAgIGlmIChwYW5nb19jYWlyb19jb250ZXh0X2dldF9mb250X29wdGlvbnMobV9jb250
ZXh0KSkKKyAgICAgICAgICBmb250T3B0aW9ucyA9IGNhaXJvX2ZvbnRfb3B0aW9uc19jb3B5KHBh
bmdvX2NhaXJvX2NvbnRleHRfZ2V0X2ZvbnRfb3B0aW9ucyhtX2NvbnRleHQpKTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgIGZvbnRPcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2NyZWF0ZSgp
OworICAgICAgICBjYWlyb19tYXRyaXhfdCBjdG07CisgICAgICAgIGNhaXJvX21hdHJpeF9pbml0
X2lkZW50aXR5KCZjdG0pOworICAgICAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9u
dF9jcmVhdGUoZmFjZSwgJmZvbnRNYXRyaXgsICZjdG0sIGZvbnRPcHRpb25zKTsKKyAgICAgICAg
Y2Fpcm9fZm9udF9vcHRpb25zX2Rlc3Ryb3koZm9udE9wdGlvbnMpOworICAgICAgICBjYWlyb19m
b250X2ZhY2VfZGVzdHJveShmYWNlKTsKKyAgICB9CisjZW5kaWYKKyAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX2ZyZWUoZGVzY3JpcHRpb24pOworfQorCitGb250UGxhdGZvcm1EYXRhOjpGb250
UGxhdGZvcm1EYXRhKGZsb2F0IHNpemUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBt
X2NvbnRleHQoMCkKKyAgICAsIG1fZm9udCgwKQorICAgICwgbV9mb250RGVzY3JpcHRpb24oKQor
ICAgICwgbV9zY2FsZWRGb250KDApCit7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lm
aWVkU2l6ZShzaXplKTsKKyAgICBtX2ZvbnREZXNjcmlwdGlvbi5zZXRCb2xkKGJvbGQpOworICAg
IG1fZm9udERlc2NyaXB0aW9uLnNldEl0YWxpYyhpdGFsaWMpOworfQorCitGb250UGxhdGZvcm1E
YXRhOjpGb250UGxhdGZvcm1EYXRhKGNhaXJvX2ZvbnRfZmFjZV90KiBmb250RmFjZSwgaW50IHNp
emUsIGJvb2wgYm9sZCwgYm9vbCBpdGFsaWMpCisgICAgOiBtX2NvbnRleHQoMCkKKyAgICAsIG1f
Zm9udCgwKQorICAgICwgbV9mb250RGVzY3JpcHRpb24oKQorICAgICwgbV9zY2FsZWRGb250KDAp
Cit7CisgICAgbV9mb250RGVzY3JpcHRpb24uc2V0U3BlY2lmaWVkU2l6ZShzaXplKTsKKyAgICBt
X2ZvbnREZXNjcmlwdGlvbi5zZXRCb2xkKGJvbGQpOworICAgIG1fZm9udERlc2NyaXB0aW9uLnNl
dEl0YWxpYyhpdGFsaWMpOworCisgICAgY2Fpcm9fbWF0cml4X3QgZm9udE1hdHJpeDsKKyAgICBj
YWlyb19tYXRyaXhfaW5pdF9zY2FsZSgmZm9udE1hdHJpeCwgc2l6ZSwgc2l6ZSk7CisgICAgY2Fp
cm9fbWF0cml4X3QgY3RtOworICAgIGNhaXJvX21hdHJpeF9pbml0X2lkZW50aXR5KCZjdG0pOwor
ICAgIGNhaXJvX2ZvbnRfb3B0aW9uc190KiBvcHRpb25zID0gY2Fpcm9fZm9udF9vcHRpb25zX2Ny
ZWF0ZSgpOworCisgICAgLy8gV2UgZm9yY2UgYW50aWFsaWFzaW5nIGFuZCBkaXNhYmxlIGhpbnRp
bmcgdG8gcHJvdmlkZSBjb25zaXN0ZW50CisgICAgLy8gdHlwb2dyYXBoaWMgcXVhbGl0aWVzIGZv
ciBjdXN0b20gZm9udHMgb24gYWxsIHBsYXRmb3Jtcy4KKyAgICBjYWlyb19mb250X29wdGlvbnNf
c2V0X2hpbnRfc3R5bGUob3B0aW9ucywgQ0FJUk9fSElOVF9TVFlMRV9OT05FKTsKKyAgICBjYWly
b19mb250X29wdGlvbnNfc2V0X2FudGlhbGlhcyhvcHRpb25zLCBDQUlST19BTlRJQUxJQVNfR1JB
WSk7CisKKyAgICBtX3NjYWxlZEZvbnQgPSBjYWlyb19zY2FsZWRfZm9udF9jcmVhdGUoZm9udEZh
Y2UsICZmb250TWF0cml4LCAmY3RtLCBvcHRpb25zKTsKKyAgICBjYWlyb19mb250X29wdGlvbnNf
ZGVzdHJveShvcHRpb25zKTsKK30KKworYm9vbCBGb250UGxhdGZvcm1EYXRhOjppbml0KCkKK3sK
KyAgICBzdGF0aWMgYm9vbCBpbml0aWFsaXplZCA9IGZhbHNlOworICAgIGlmIChpbml0aWFsaXpl
ZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaW5pdGlhbGl6ZWQgPSB0cnVlOworCisgICAg
aWYgKCFtX2ZvbnRNYXApCisgICAgICAgIG1fZm9udE1hcCA9IHBhbmdvX2NhaXJvX2ZvbnRfbWFw
X2dldF9kZWZhdWx0KCk7CisgICAgaWYgKCFtX2hhc2hUYWJsZSkgeworICAgICAgICBQYW5nb0Zv
bnRGYW1pbHkqKiBmYW1pbGllcyA9IDA7CisgICAgICAgIGludCBuX2ZhbWlsaWVzID0gMDsKKwor
ICAgICAgICBtX2hhc2hUYWJsZSA9IGdfaGFzaF90YWJsZV9uZXdfZnVsbChnX3N0cl9oYXNoLCBn
X3N0cl9lcXVhbCwgZ19mcmVlLCBnX29iamVjdF91bnJlZik7CisKKyAgICAgICAgcGFuZ29fZm9u
dF9tYXBfbGlzdF9mYW1pbGllcyhtX2ZvbnRNYXAsICZmYW1pbGllcywgJm5fZmFtaWxpZXMpOwor
CisgICAgICAgIGZvciAoaW50IGZhbWlseSA9IDA7IGZhbWlseSA8IG5fZmFtaWxpZXM7IGZhbWls
eSsrKQorICAgICAgICAgICAgICAgIGdfaGFzaF90YWJsZV9pbnNlcnQobV9oYXNoVGFibGUsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnX3N0cmR1cChwYW5nb19mb250X2Zh
bWlseV9nZXRfbmFtZShmYW1pbGllc1tmYW1pbHldKSksCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBnX29iamVjdF9yZWYoZmFtaWxpZXNbZmFtaWx5XSkpOworCisgICAgICAg
IGdfZnJlZShmYW1pbGllcyk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKK0ZvbnRQ
bGF0Zm9ybURhdGE6On5Gb250UGxhdGZvcm1EYXRhKCkKK3sKKyAgICAvLyBEZXN0cm95IHRha2Vz
IHBsYWNlIGluIEZvbnREYXRhOjpwbGF0Zm9ybURlc3Ryb3koKS4KK30KKworYm9vbCBGb250UGxh
dGZvcm1EYXRhOjppc0ZpeGVkUGl0Y2goKQoreworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBk
ZXNjcmlwdGlvbiA9IHBhbmdvX2ZvbnRfZGVzY3JpYmVfd2l0aF9hYnNvbHV0ZV9zaXplKG1fZm9u
dCk7CisgICAgUGFuZ29Gb250RmFtaWx5KiBmYW1pbHkgPSByZWludGVycHJldF9jYXN0PFBhbmdv
Rm9udEZhbWlseSo+KGdfaGFzaF90YWJsZV9sb29rdXAobV9oYXNoVGFibGUsIHBhbmdvX2ZvbnRf
ZGVzY3JpcHRpb25fZ2V0X2ZhbWlseShkZXNjcmlwdGlvbikpKTsKKyAgICBwYW5nb19mb250X2Rl
c2NyaXB0aW9uX2ZyZWUoZGVzY3JpcHRpb24pOworICAgIHJldHVybiBwYW5nb19mb250X2ZhbWls
eV9pc19tb25vc3BhY2UoZmFtaWx5KTsKK30KKwordm9pZCBGb250UGxhdGZvcm1EYXRhOjpzZXRG
b250KGNhaXJvX3QqIGNyKSBjb25zdAoreworICAgIEFTU0VSVChtX3NjYWxlZEZvbnQpOworCisg
ICAgY2Fpcm9fc2V0X3NjYWxlZF9mb250KGNyLCBtX3NjYWxlZEZvbnQpOworfQorCitib29sIEZv
bnRQbGF0Zm9ybURhdGE6Om9wZXJhdG9yPT0oY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgb3RoZXIp
IGNvbnN0Cit7CisgICAgaWYgKG1fZm9udCA9PSBvdGhlci5tX2ZvbnQpCisgICAgICAgIHJldHVy
biB0cnVlOworICAgIGlmIChtX2ZvbnQgPT0gMCB8fCBtX2ZvbnQgPT0gcmVpbnRlcnByZXRfY2Fz
dDxQYW5nb0ZvbnQqPigtMSkKKyAgICAgICAgfHwgb3RoZXIubV9mb250ID09IDAgfHwgb3RoZXIu
bV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgUGFuZ29Gb250RGVzY3JpcHRpb24qIHRoaXNEZXNjID0gcGFuZ29fZm9u
dF9kZXNjcmliZShtX2ZvbnQpOworICAgIFBhbmdvRm9udERlc2NyaXB0aW9uKiBvdGhlckRlc2Mg
PSBwYW5nb19mb250X2Rlc2NyaWJlKG90aGVyLm1fZm9udCk7CisgICAgYm9vbCByZXN1bHQgPSBw
YW5nb19mb250X2Rlc2NyaXB0aW9uX2VxdWFsKHRoaXNEZXNjLCBvdGhlckRlc2MpOworICAgIHBh
bmdvX2ZvbnRfZGVzY3JpcHRpb25fZnJlZShvdGhlckRlc2MpOworICAgIHBhbmdvX2ZvbnRfZGVz
Y3JpcHRpb25fZnJlZSh0aGlzRGVzYyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworfQpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdlVHJlZU5vZGVQ
YW5nby5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HbHlwaFBhZ2VUcmVlTm9k
ZVBhbmdvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjljMTMxCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR2x5cGhQYWdl
VHJlZU5vZGVQYW5nby5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNiwgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQg
KEMpIDIwMDYgTWljaGFlbCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0
IChDKSAyMDA3IEFscCBUb2tlciA8YWxwLnRva2VyQGNvbGxhYm9yYS5jby51az4KKyAqIENvcHly
aWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2VhcmNoIENlbnRlciBVU0EsIEluYy4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIKKworI2luY2x1ZGUgIlNp
bXBsZUZvbnREYXRhLmgiCisjaW5jbHVkZSA8cGFuZ28vcGFuZ28tZm9udC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBQYW5nb0dseXBoIHBhbmdvX2ZvbnRfZ2V0X2dseXBoKFBh
bmdvRm9udCogZm9udCwgUGFuZ29Db250ZXh0KiBjb250ZXh0LCBndW5pY2hhciB3YykKK3sKKyAg
ICBQYW5nb0dseXBoIHJlc3VsdCA9IDA7CisgICAgZ2NoYXIgYnVmZmVyWzddOworCisgICAgZ2lu
dCAgbGVuZ3RoID0gZ191bmljaGFyX3RvX3V0Zjgod2MsIGJ1ZmZlcik7CisgICAgZ19yZXR1cm5f
dmFsX2lmX2ZhaWwobGVuZ3RoLCAwKTsKKworICAgIEdMaXN0KiBpdGVtcyA9IHBhbmdvX2l0ZW1p
emUoY29udGV4dCwgYnVmZmVyLCAwLCBsZW5ndGgsIE5VTEwsIE5VTEwpOworCisgICAgaWYgKGdf
bGlzdF9sZW5ndGgoaXRlbXMpID09IDEpIHsKKyAgICAgICAgUGFuZ29HbHlwaFN0cmluZyogZ2x5
cGhzID0gcGFuZ29fZ2x5cGhfc3RyaW5nX25ldygpOworCisgICAgICAgIHBhbmdvX3NoYXBlKGJ1
ZmZlciwgbGVuZ3RoLCAmKChQYW5nb0l0ZW0qKWl0ZW1zLT5kYXRhKS0+YW5hbHlzaXMsIGdseXBo
cyk7CisKKyAgICAgICAgaWYgKGdseXBocy0+bnVtX2dseXBocyA9PSAxKQorICAgICAgICAgICAg
cmVzdWx0ID0gZ2x5cGhzLT5nbHlwaHNbMF0uZ2x5cGg7CisgICAgICAgIGVsc2UKKyAgICAgICAg
ICAgIGdfd2FybmluZygiZGlkbid0IGdldCAxIGdseXBoIGJ1dCAlZCIsIGdseXBocy0+bnVtX2ds
eXBocyk7CisKKyAgICAgICAgcGFuZ29fZ2x5cGhfc3RyaW5nX2ZyZWUoZ2x5cGhzKTsKKyAgICB9
CisKKyAgICBnX2xpc3RfZm9yZWFjaChpdGVtcywgKEdGdW5jKXBhbmdvX2l0ZW1fZnJlZSwgTlVM
TCk7CisgICAgZ19saXN0X2ZyZWUoaXRlbXMpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
Ym9vbCBHbHlwaFBhZ2U6OmZpbGwodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgsIFVD
aGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2ltcGxlRm9udERhdGEq
IGZvbnREYXRhKQoreworICAgIC8vIFRoZSBidWZmZXJMZW5ndGggd2lsbCBiZSBncmVhdGVyIHRo
YW4gdGhlIGdseXBoIHBhZ2Ugc2l6ZSBpZiB0aGUgYnVmZmVyIGhhcyBVbmljb2RlIHN1cHBsZW1l
bnRhcnkgY2hhcmFjdGVycy4KKyAgICAvLyBXZSB3b24ndCBzdXBwb3J0IHRoaXMgZm9yIG5vdy4K
KyAgICBpZiAoYnVmZmVyTGVuZ3RoID4gR2x5cGhQYWdlOjpzaXplKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAoIWZvbnREYXRhLT5tX2ZvbnQubV9mb250IHx8IGZvbnREYXRhLT5t
X2ZvbnQubV9mb250ID09IHJlaW50ZXJwcmV0X2Nhc3Q8UGFuZ29Gb250Kj4oLTEpKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHsKKyAgICAgICAgR2x5cGggZ2x5cGgg
PSBwYW5nb19mb250X2dldF9nbHlwaChmb250RGF0YS0+bV9mb250Lm1fZm9udCwgZm9udERhdGEt
Pm1fZm9udC5tX2NvbnRleHQsIGJ1ZmZlcltpXSk7CisgICAgICAgIGlmICghZ2x5cGgpCisgICAg
ICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCAwLCAwKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChvZmZzZXQgKyBpLCBnbHlw
aCwgZm9udERhdGEpOworICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICByZXR1cm4gaGF2ZUdseXBoczsKK30KKworfQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9TaW1wbGVGb250RGF0YVBhbmdvLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zN2JiNzM0Ci0tLSAvZGV2L251bGwKKysrIGIv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvU2ltcGxlRm9udERhdGFQYW5nby5jcHAKQEAg
LTAsMCArMSwxNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgQXBwbGUgQ29tcHV0ZXIs
IEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYgTWljaGFl
bCBFbW1lbCBtaWtlLmVtbWVsQGdtYWlsLmNvbQorICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
IEFscCBUb2tlciA8YWxwQGF0b2tlci5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgSG9sZ2Vy
IEhhbnMgUGV0ZXIgRnJleXRoZXIKKyAqIENvcHlyaWdodCAoQykgMjAwNyBQaW9uZWVyIFJlc2Vh
cmNoIENlbnRlciBVU0EsIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCisKKyNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKKyNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiRm9udENhY2hlLmgiCisjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKKyNpbmNsdWRl
IDxjYWlyby5oPgorI2luY2x1ZGUgPHVuaWNvZGUvdWNoYXIuaD4KKyNpbmNsdWRlIDx1bmljb2Rl
L3Vub3JtLmg+CisjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCit2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQoreworICAgIGNhaXJv
X2ZvbnRfZXh0ZW50c190IGZvbnRfZXh0ZW50czsKKyAgICBjYWlyb190ZXh0X2V4dGVudHNfdCB0
ZXh0X2V4dGVudHM7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZXh0ZW50cyhtX2ZvbnQubV9zY2Fs
ZWRGb250LCAmZm9udF9leHRlbnRzKTsKKyAgICBtX2FzY2VudCA9IHN0YXRpY19jYXN0PGludD4o
Zm9udF9leHRlbnRzLmFzY2VudCk7CisgICAgbV9kZXNjZW50ID0gc3RhdGljX2Nhc3Q8aW50Pihm
b250X2V4dGVudHMuZGVzY2VudCk7CisgICAgbV9saW5lU3BhY2luZyA9IHN0YXRpY19jYXN0PGlu
dD4oZm9udF9leHRlbnRzLmhlaWdodCk7CisgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfdGV4dF9leHRl
bnRzKG1fZm9udC5tX3NjYWxlZEZvbnQsICJ4IiwgJnRleHRfZXh0ZW50cyk7CisgICAgbV94SGVp
Z2h0ID0gdGV4dF9leHRlbnRzLmhlaWdodDsKKyAgICBjYWlyb19zY2FsZWRfZm9udF90ZXh0X2V4
dGVudHMobV9mb250Lm1fc2NhbGVkRm9udCwgIiAiLCAmdGV4dF9leHRlbnRzKTsKKyAgICBtX3Nw
YWNlV2lkdGggPSAgc3RhdGljX2Nhc3Q8aW50Pih0ZXh0X2V4dGVudHMueF9hZHZhbmNlKTsKKyAg
ICBtX2xpbmVHYXAgPSBtX2xpbmVTcGFjaW5nIC0gbV9hc2NlbnQgLSBtX2Rlc2NlbnQ7Cit9CisK
K3ZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtRGVzdHJveSgpCit7CisgICAgaWYgKCFpc0N1
c3RvbUZvbnQoKSkgeworCisgICAgICAgIGlmIChtX2ZvbnQubV9mb250ICYmIG1fZm9udC5tX2Zv
bnQgIT0gcmVpbnRlcnByZXRfY2FzdDxQYW5nb0ZvbnQqPigtMSkpIHsKKyAgICAgICAgICAgIGdf
b2JqZWN0X3VucmVmKG1fZm9udC5tX2ZvbnQpOworICAgICAgICAgICAgbV9mb250Lm1fZm9udCA9
IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9mb250Lm1fY29udGV4dCkgeworICAgICAg
ICAgICAgZ19vYmplY3RfdW5yZWYgKG1fZm9udC5tX2NvbnRleHQpOworICAgICAgICAgICAgbV9m
b250Lm1fY29udGV4dCA9IDA7CisgICAgICAgIH0KKworICAgICAgICBpZiAobV9mb250Lm1fc2Nh
bGVkRm9udCkgeworICAgICAgICAgICAgY2Fpcm9fc2NhbGVkX2ZvbnRfZGVzdHJveShtX2ZvbnQu
bV9zY2FsZWRGb250KTsKKyAgICAgICAgICAgIG1fZm9udC5tX3NjYWxlZEZvbnQgPSAwOworICAg
ICAgICB9CisgICAgfQorCisgICAgZGVsZXRlIG1fc21hbGxDYXBzRm9udERhdGE7Cit9CisKK1Np
bXBsZUZvbnREYXRhKiBTaW1wbGVGb250RGF0YTo6c21hbGxDYXBzRm9udERhdGEoY29uc3QgRm9u
dERlc2NyaXB0aW9uJiBmb250RGVzY3JpcHRpb24pIGNvbnN0Cit7CisgICAgaWYgKCFtX3NtYWxs
Q2Fwc0ZvbnREYXRhKSB7CisgICAgICAgIEZvbnREZXNjcmlwdGlvbiBkZXNjID0gRm9udERlc2Ny
aXB0aW9uKGZvbnREZXNjcmlwdGlvbik7CisgICAgICAgIGRlc2Muc2V0U3BlY2lmaWVkU2l6ZSgw
LjcwZipmb250RGVzY3JpcHRpb24uY29tcHV0ZWRTaXplKCkpOworICAgICAgICBjb25zdCBGb250
UGxhdGZvcm1EYXRhKiBwZGF0YSA9IG5ldyBGb250UGxhdGZvcm1EYXRhKGRlc2MsIGRlc2MuZmFt
aWx5KCkuZmFtaWx5KCkpOworICAgICAgICBtX3NtYWxsQ2Fwc0ZvbnREYXRhID0gbmV3IFNpbXBs
ZUZvbnREYXRhKCpwZGF0YSk7CisgICAgfQorICAgIHJldHVybiBtX3NtYWxsQ2Fwc0ZvbnREYXRh
OworfQorCitib29sIFNpbXBsZUZvbnREYXRhOjpjb250YWluc0NoYXJhY3RlcnMoY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMsIGludCBsZW5ndGgpIGNvbnN0Cit7CisgICAgYm9vbCByZXN1bHQgPSB0
cnVlOworCisgICAgUGFuZ29Db3ZlcmFnZSogcmVxdWVzdGVkID0gcGFuZ29fY292ZXJhZ2VfZnJv
bV9ieXRlcygoZ3VjaGFyKiljaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFBhbmdvQ292ZXJhZ2Uq
IGF2YWlsYWJsZSA9IHBhbmdvX2ZvbnRfZ2V0X2NvdmVyYWdlKG1fZm9udC5tX2ZvbnQsIHBhbmdv
X2xhbmd1YWdlX2dldF9kZWZhdWx0KCkpOworICAgIHBhbmdvX2NvdmVyYWdlX21heChyZXF1ZXN0
ZWQsIGF2YWlsYWJsZSk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgaWYgKFBBTkdPX0NPVkVSQUdFX05PTkUgPT0gcGFuZ29fY292ZXJhZ2Vf
Z2V0KHJlcXVlc3RlZCwgaSkpIHsKKyAgICAgICAgICAgIHJlc3VsdCA9IGZhbHNlOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBwYW5nb19jb3ZlcmFnZV91bnJl
ZihyZXF1ZXN0ZWQpOworICAgIHBhbmdvX2NvdmVyYWdlX3VucmVmKGF2YWlsYWJsZSk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpkZXRlcm1pbmVQaXRj
aCgpCit7CisgICAgbV90cmVhdEFzRml4ZWRQaXRjaCA9IG1fZm9udC5pc0ZpeGVkUGl0Y2goKTsK
K30KKworZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBn
bHlwaCkgY29uc3QKK3sKKyAgICBBU1NFUlQobV9mb250Lm1fc2NhbGVkRm9udCk7CisKKyAgICBj
YWlyb19nbHlwaF90IGNnbHlwaCA9IHsgZ2x5cGgsIDAsIDAgfTsKKyAgICBjYWlyb190ZXh0X2V4
dGVudHNfdCBleHRlbnRzOworICAgIGNhaXJvX3NjYWxlZF9mb250X2dseXBoX2V4dGVudHMobV9m
b250Lm1fc2NhbGVkRm9udCwgJmNnbHlwaCwgMSwgJmV4dGVudHMpOworCisgICAgZmxvYXQgdyA9
IChmbG9hdCltX3NwYWNlV2lkdGg7CisgICAgaWYgKGNhaXJvX3NjYWxlZF9mb250X3N0YXR1cyht
X2ZvbnQubV9zY2FsZWRGb250KSA9PSBDQUlST19TVEFUVVNfU1VDQ0VTUyAmJiBleHRlbnRzLnhf
YWR2YW5jZSAhPSAwKQorICAgICAgICB3ID0gKGZsb2F0KWV4dGVudHMueF9hZHZhbmNlOworICAg
IHJldHVybiB3OworfQorCit2b2lkIFNpbXBsZUZvbnREYXRhOjpzZXRGb250KGNhaXJvX3QqIGNy
KSBjb25zdAoreworICAgIEFTU0VSVChjcik7CisgICAgbV9mb250LnNldEZvbnQoY3IpOworfQor
Cit9CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNGE1OTE5
OS4uMTdkN2M1MiAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpA
QCAtMzkzLDYgKzM5MywxOSBAQCBBQ19BUkdfRU5BQkxFKGZhc3RfbWFsbG9jLAogICAgICAgICAg
ICAgICBbXSxbaWYgdGVzdCAiJGVuYWJsZV9kZWJ1ZyIgPSAieWVzIjsgdGhlbiBlbmFibGVfZmFz
dF9tYWxsb2M9Im5vIjsgZWxzZSBlbmFibGVfZmFzdF9tYWxsb2M9InllcyI7IGZpXSkKIEFDX01T
R19SRVNVTFQoWyRlbmFibGVfZmFzdF9tYWxsb2NdKQogCisjIGRldGVybWluZSB0aGUgZm9udCBi
YWNrZW5kCitBQ19NU0dfQ0hFQ0tJTkcoW3RoZSBmb250IGJhY2tlbmQgdG8gdXNlXSkKK0FDX0FS
R19XSVRIKGZvbnRfYmFja2VuZCwKKyAgICAgICAgICAgIEFDX0hFTFBfU1RSSU5HKFstLXdpdGgt
Zm9udC1iYWNrZW5kPUA8OkBmcmVldHlwZS9wYW5nb0A6PkBdLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgW1NlbGVjdCBmb250IGJhY2tlbmQgW2RlZmF1bHQ9ZnJlZXR5cGVdXSksCisgICAg
ICAgICAgICBbXSxbd2l0aF9mb250X2JhY2tlbmQ9ImZyZWV0eXBlIl0pCisKK2Nhc2UgIiR3aXRo
X2ZvbnRfYmFja2VuZCIgaW4KKyAgICAgZnJlZXR5cGV8cGFuZ28pIDs7CisgICAgICopIEFDX01T
R19FUlJPUihbSW52YWxpZCBmb250IGJhY2tlbmQ6IG11c3QgYmUgZnJlZXR5cGUgb3IgcGFuZ28u
XSkgOzsKK2VzYWMKK0FDX01TR19SRVNVTFQoWyR3aXRoX2ZvbnRfYmFja2VuZF0pCisKICMgQWRk
ICctZycgZmxhZyB0byBnY2MgaWYgaXQncyBkZWJ1ZyBidWlsZAogaWYgdGVzdCAiJGVuYWJsZV9k
ZWJ1ZyIgPSAieWVzIjsgdGhlbgogICAgQ1hYRkxBR1M9IiRDWFhGTEFHUyAtZyIKQEAgLTQ2OSw2
ICs0ODIsMTAgQEAgQU1fQ09ORElUSU9OQUwoW1RBUkdFVF9ESVJFQ1RGQl0sIFt0ZXN0ICIkd2l0
aF90YXJnZXQiID0gImRpcmVjdGZiIl0pCiAjIEhUVFAgYmFja2VuZCBjb25kaXRpb25hbHMKIEFN
X0NPTkRJVElPTkFMKFtVU0VfQ1VSTF0sIFt0ZXN0ICIkaHR0cF9iYWNrZW5kIiA9ICJjdXJsIl0p
CiAKKyMgRm9udCBiYWNrZW5kIGNvbmRpdGlvbmFscworQU1fQ09ORElUSU9OQUwoW1VTRV9GUkVF
VFlQRV0sIFt0ZXN0ICIkd2l0aF9mb250X2JhY2tlbmQiID0gImZyZWV0eXBlIl0pCitBTV9DT05E
SVRJT05BTChbVVNFX1BBTkdPXSwgW3Rlc3QgIiR3aXRoX2ZvbnRfYmFja2VuZCIgPSAicGFuZ28i
XSkKKwogIyBXZWJLaXQgZmVhdHVyZSBjb25kaXRpb25hbHMKIEFNX0NPTkRJVElPTkFMKFtFTkFC
TEVfREVCVUddLFt0ZXN0ICIkZW5hYmxlX2RlYnVnIiA9ICJ5ZXMiXSkKIEFNX0NPTkRJVElPTkFM
KFtFTkFCTEVfQ1JPU1NfRE9DVU1FTlRfTUVTU0FHSU5HXSxbdGVzdCAiJGVuYWJsZV9jcm9zc19k
b2N1bWVudF9tZXNzYWdpbmciID0gInllcyJdKQpAQCAtNTA0LDYgKzUyMSw3IEBAIEJ1aWxkIGNv
bmZpZ3VyYXRpb246CiAgQ29kZSBjb3ZlcmFnZSBzdXBwb3J0ICAgICAgICAgICAgIDogJGVuYWJs
ZV9jb3ZlcmFnZQogIFVuaWNvZGUgYmFja2VuZCAgICAgICAgICAgICAgICAgICA6ICR1bmljb2Rl
X2JhY2tlbmQKICBIVFRQIGJhY2tlbmQgICAgICAgICAgICAgICAgICAgICAgOiAkaHR0cF9iYWNr
ZW5kCisgRm9udCBiYWNrZW5kICAgICAgICAgICAgICAgICAgICAgIDogJHdpdGhfZm9udF9iYWNr
ZW5kCiAgT3B0aW1pemVkIG1lbW9yeSBhbGxvY2F0b3IgICAgICAgIDogJGVuYWJsZV9mYXN0X21h
bGxvYwogRmVhdHVyZXM6CiAgSFRNTDUgY3Jvc3MtZG9jdW1lbnQgbWVzc2FnaW5nICAgIDogJGVu
YWJsZV9jcm9zc19kb2N1bWVudF9tZXNzYWdpbmcKLS0gCjEuNS40LjQKCg==
</data>
<flag name="review"
          id="8592"
          type_id="1"
          status="+"
          setter="alp"
    />
          </attachment>
      

    </bug>

</bugzilla>