<?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>33065</bug_id>
          
          <creation_ts>2009-12-30 13:20:16 -0800</creation_ts>
          <short_desc>[chromium] Linux: add support for per-strike font render preferences</short_desc>
          <delta_ts>2010-02-28 09:14:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>Linux</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Langley">agl</reporter>
          <assigned_to name="Adam Langley">agl</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>evan</cc>
    
    <cc>fishd</cc>
    
    <cc>levin</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zl29ah</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>176018</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-12-30 13:20:16 -0800</bug_when>
    <thetext>fontconfig on Linux can change the render preferences on a per strike basis (a strike a combination of face and size). Because of this, we need to query fontconfig each time a new FontPlatformData is created for a new size.

This patch adds support for querying this via ChromiumBridge.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176021</commentid>
    <comment_count>1</comment_count>
      <attachid>45681</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-12-30 13:25:03 -0800</bug_when>
    <thetext>Created attachment 45681
patch: two sided so please don&apos;t cq+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176025</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-30 13:26:24 -0800</bug_when>
    <thetext>Attachment 45681 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/chromium/FontRenderStyle.h:42:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/chromium/FontRenderStyle.h:44:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/chromium/FontRenderStyle.h:45:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/chromium/FontRenderStyle.h:46:  One space before end of line comments  [whitespace/comments] [5]
WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp:142:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebCore/platform/graphics/chromium/FontPlatformDataLinux.cpp:201:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
WebKit/chromium/public/linux/WebFontRenderStyle.h:62:  #endif line should be &quot;#endif // WebFontRenderStyle_h&quot;  [build/header_guard] [5]
WebKit/chromium/public/linux/WebFontRenderStyle.h:45:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/public/linux/WebFontRenderStyle.h:47:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/public/linux/WebFontRenderStyle.h:48:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/public/linux/WebFontRenderStyle.h:49:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/src/gtk/WebFontInfo.cpp:110:  is_bold is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/gtk/WebFontInfo.cpp:111:  is_italic is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebKit/chromium/src/gtk/WebFontInfo.cpp:143:  Use 0 instead of NULL.  [readability/null] [4]
WebKit/chromium/src/ChromiumBridge.cpp:313:  One line control clauses should not use braces.  [whitespace/braces] [4]
WebKit/chromium/src/ChromiumBridge.cpp:315:  One line control clauses should not use braces.  [whitespace/braces] [4]
Total errors found: 16</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176026</commentid>
    <comment_count>3</comment_count>
      <attachid>45682</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-12-30 13:34:05 -0800</bug_when>
    <thetext>Created attachment 45682
patch v2: two sided so please don&apos;t cq+

fixing up style bot issues.

(I think one issue will remain: it&apos;s triggering on a mention of &apos;NULL&apos; in a comment)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176027</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-30 13:35:00 -0800</bug_when>
    <thetext>Attachment 45681 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/152496</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176034</commentid>
    <comment_count>5</comment_count>
      <attachid>45682</attachid>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-12-30 13:41:47 -0800</bug_when>
    <thetext>Comment on attachment 45682
patch v2: two sided so please don&apos;t cq+

&gt; +    paint-&gt;setAntiAlias(m_style.useAntiAlias == 2 ? isSkiaAntiAlias : m_style.useAntiAlias);
&gt; +    paint-&gt;setHinting(m_style.useHinting == 2 ? skiaHinting : (SkPaint::Hinting) m_style.hintStyle);

2 =&gt; kNoPreference or some such

&gt; +        m_style.useBitmaps = 2;

Here too.

&gt; +    void queryStyle();

Perhaps this could have a more verbose name that is more self-descriptive.

&gt; +    FcPatternAdd(pattern, FC_FAMILY, fcvalue, 0);

The last param should be FcFalse for this and below.

&gt; +    // Some versions of fontconfig don&apos;t actually write a value into result.

Set result = OK at the start, check it at the end?

&gt; +    FcBool b;

One-letter variables make the reviewer man sad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176047</commentid>
    <comment_count>6</comment_count>
      <attachid>45685</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-12-30 14:20:28 -0800</bug_when>
    <thetext>Created attachment 45685
patch v3: two sided so please don&apos;t cq+

&gt; kNoPreference or some such
&gt; 
&gt; &gt; +        m_style.useBitmaps = 2;

Done

&gt; &gt; +    void queryStyle();
&gt; 
&gt; Perhaps this could have a more verbose name that is more self-descriptive.

Done

&gt; &gt; +    FcPatternAdd(pattern, FC_FAMILY, fcvalue, 0);
&gt; 
&gt; The last param should be FcFalse for this and below.

Done

&gt; &gt; +    // Some versions of fontconfig don&apos;t actually write a value into result.
&gt;
&gt; Set result = OK at the start, check it at the end?

Not clear that it wouldn&apos;t break. fontconfig&apos;s own code does this so I&apos;m going to mirror it.


&gt; &gt; +    FcBool b;
&gt; 
&gt; One-letter variables make the reviewer man sad.

reviewer man is unnecessarily sad.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176069</commentid>
    <comment_count>7</comment_count>
      <attachid>45685</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-30 15:33:30 -0800</bug_when>
    <thetext>Comment on attachment 45685
patch v3: two sided so please don&apos;t cq+

Marking cq- to stop us from marking the patch cq+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176070</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-30 15:38:03 -0800</bug_when>
    <thetext>This patch looks formally correct, but I know nothing about fonts or linux.  Do you have someone in mind to review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176071</commentid>
    <comment_count>9</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-12-30 15:40:25 -0800</bug_when>
    <thetext>&gt; Do you have someone in mind to review this patch?

Since it touches ChromiumBridge, I figured that fishd should review it. Although I don&apos;t know how long he&apos;s away for.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176072</commentid>
    <comment_count>10</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2009-12-30 15:41:44 -0800</bug_when>
    <thetext>I am the reviewer of the Linuxy bits, and it gets my stamp of approval.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176073</commentid>
    <comment_count>11</comment_count>
      <attachid>45685</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2009-12-30 15:44:50 -0800</bug_when>
    <thetext>Comment on attachment 45685
patch v3: two sided so please don&apos;t cq+

There are a bunch of patches blocked on fishd&apos;s API review.  If you&apos;re willing to wait, that probably the best course of action.

(I know this will get a complaint from the chromium-ews, but marking it review? will help us keep track of the patch.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176075</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2009-12-30 15:49:20 -0800</bug_when>
    <thetext>Attachment 45685 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/src/gtk/WebFontInfo.cpp:143:  Use 0 instead of NULL.  [readability/null] [4]
Total errors found: 1</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176076</commentid>
    <comment_count>13</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2009-12-30 15:50:22 -0800</bug_when>
    <thetext>&gt; WebKit/chromium/src/gtk/WebFontInfo.cpp:143:  Use 0 instead of NULL. 

Note to reviewers: false positive. This mention of NULL is in a comment.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>176894</commentid>
    <comment_count>14</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-04 15:02:06 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; &gt; WebKit/chromium/src/gtk/WebFontInfo.cpp:143:  Use 0 instead of NULL. 
&gt; 
&gt; Note to reviewers: false positive. This mention of NULL is in a comment.

fwiw, this isn&apos;t a false positive as the script specifically checks for NULL in comments. Several reviewers flag this in reviews. 

For example, https://bugs.webkit.org/show_bug.cgi?id=22700#c22
  &quot;We do not use NULL in code, so using it in comments isn&apos;t appropriate either. I
suggest lower case &quot;null&quot; or 0.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177496</commentid>
    <comment_count>15</comment_count>
      <attachid>45949</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2010-01-05 17:51:12 -0800</bug_when>
    <thetext>Created attachment 45949
changing NULL to 0 in a comment

Have changed the NULL to a 0 in the comment. I&apos;ll see how slammed Darin is at the moment. Since this only adds APIs in the same places as patch he previously reviewed, I might ask someone else to r+ it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177507</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-05 18:11:11 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 45949 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177733</commentid>
    <comment_count>17</comment_count>
      <attachid>45949</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-01-06 13:39:07 -0800</bug_when>
    <thetext>Comment on attachment 45949
changing NULL to 0 in a comment

&gt; +++ b/WebCore/platform/graphics/chromium/FontRenderStyle.h
...
&gt; +struct FontRenderStyle {
&gt; +    enum {
&gt; +      kNoPreference = 2,
&gt; +    };

nit: indent by 4 spaces.

kNoPreference should be NoPreference without the &quot;k&quot; prefix.


&gt; +++ b/WebKit/chromium/public/gtk/WebFontInfo.h
...
&gt;      WEBKIT_API static WebCString familyForChars(const WebUChar* characters, size_t numCharacters);
&gt; +    // Fill out the given WebFontRenderStyle with the user&apos;s preferences for

^^^ nit: please insert a new line after familyForChars.


&gt; +    WEBKIT_API static void renderStyleForStrike(WebFontRenderStyle* result, const char* family, int sizeAndStyle);

nit: isn&apos;t it better style to list out parameters last?  or perhaps this should just be a return value?

renderStyleForStrike(const char* family, int sizeAndStyle, WebFontRenderStyle* result);


&gt; +++ b/WebKit/chromium/public/linux/WebFontRenderStyle.h
&gt; +++ b/WebKit/chromium/public/linux/WebSandboxSupport.h
...
&gt; +    virtual void getRenderStyleForStrike(WebFontRenderStyle* style, const char* family, int sizeAndStyle) = 0;

ditto... seems like out params should be listed last.


&gt; +void WebFontInfo::renderStyleForStrike(WebFontRenderStyle* out, const char* family, int sizeAndStyle)
&gt; +{
&gt; +    bool isBold = sizeAndStyle &amp; 1;
&gt; +    bool isItalic = sizeAndStyle &amp; 2;
&gt; +    int pixelSize = sizeAndStyle &gt;&gt; 2;

are there no constants that can be used in place of these magic numbers?

&gt; +++ b/WebKit/chromium/src/linux/WebFontRenderStyle.cpp
...
&gt; +using WebCore::FontRenderStyle;
&gt; +
&gt; +namespace WebKit {
&gt; +
&gt; +void WebFontRenderStyle::toFontRenderStyle(WebCore::FontRenderStyle* out)

nit: no need for the WebCore:: prefix above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178407</commentid>
    <comment_count>18</comment_count>
      <attachid>46091</attachid>
    <who name="Adam Langley">agl</who>
    <bug_when>2010-01-07 15:22:38 -0800</bug_when>
    <thetext>Created attachment 46091
Addressing fishd&apos;s comments

&gt; nit: indent by 4 spaces.
&gt; kNoPreference should be NoPreference without the &quot;k&quot; prefix.

Done

&gt; ^^^ nit: please insert a new line after familyForChars.

Done

&gt; nit: isn&apos;t it better style to list out parameters last?  or perhaps this should
&gt; just be a return value?

I&apos;ve moved the outarg to the end, although generally I disagree. Destinations usually come first: memcpy, strcpy, &apos;=&apos; etc

&gt; are there no constants that can be used in place of these magic numbers?

There&apos;s a great big comment in the .h file so I&apos;m not too worried.

&gt; nit: no need for the WebCore:: prefix above.

Done


Cheers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178409</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-07 15:26:03 -0800</bug_when>
    <thetext>style-queue ran check-webkit-style on attachment 46091 without any errors.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182750</commentid>
    <comment_count>20</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2010-01-20 05:39:20 -0800</bug_when>
    <thetext>I summon Eric, who can hopefully r+ this because it&apos;s otherwise stagnating.

Cheers</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183696</commentid>
    <comment_count>21</comment_count>
      <attachid>46091</attachid>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-01-22 10:34:57 -0800</bug_when>
    <thetext>Comment on attachment 46091
Addressing fishd&apos;s comments

OK, r=me

(Sorry for the delays, I lost track of this one.  I had an issue with too much bugmail, which is now hopefully a thing of the past.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183697</commentid>
    <comment_count>22</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2010-01-22 10:36:03 -0800</bug_when>
    <thetext>&gt; &gt; nit: isn&apos;t it better style to list out parameters last?  or perhaps this should
&gt; &gt; just be a return value?
&gt; 
&gt; I&apos;ve moved the outarg to the end, although generally I disagree. Destinations
&gt; usually come first: memcpy, strcpy, &apos;=&apos; etc

Perhaps I am too accustomed to the Google C++ Style Guide, which mandates that out parameters be listed last.  That matches my preference as well, but maybe that is due to working in a COM world for too long ;-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>186642</commentid>
    <comment_count>23</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-01 16:11:28 -0800</bug_when>
    <thetext>Attachment 46091 was posted by a committer and has review+, assigning to Adam Langley for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194156</commentid>
    <comment_count>24</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2010-02-26 10:20:59 -0800</bug_when>
    <thetext>r55089</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194576</commentid>
    <comment_count>25</comment_count>
      <attachid>49698</attachid>
    <who name="Roman Tsisyk">roman</who>
    <bug_when>2010-02-28 07:55:34 -0800</bug_when>
    <thetext>Created attachment 49698
family checking fix in querySystemForRenderStyle

In previous patches was a small mistake. Now the feature works correctly.

I tested it with these settings:
rgba none
hinting true
hintstyle hintfull
antialias true except for [0, 15] sizes

Here is my debug output from WebFontInfo::renderStyleForStrike with google.com page:
family=arial pixelSize=17 isBold=0, isItalic=0
FC match: useAntiAlias=1, useBitmaps=1, useAutoHint=0, useHinting=1, hintStyle=3
family=arial pixelSize=13 isBold=1, isItalic=0
FC match: useAntiAlias=0, useBitmaps=1, useAutoHint=0, useHinting=1, hintStyle=3
family=arial pixelSize=10 isBold=0, isItalic=0
FC match: useAntiAlias=0, useBitmaps=1, useAutoHint=0, useHinting=1, hintStyle=3
....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194580</commentid>
    <comment_count>26</comment_count>
    <who name="Evan Martin">evan</who>
    <bug_when>2010-02-28 09:11:55 -0800</bug_when>
    <thetext>Roman: I added a ChangeLog to your patch and uploaded it at https://bugs.webkit.org/show_bug.cgi?id=35495</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194581</commentid>
    <comment_count>27</comment_count>
    <who name="Adam Langley">agl</who>
    <bug_when>2010-02-28 09:14:25 -0800</bug_when>
    <thetext>Thanks for that. Will review etc on Monday.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45681</attachid>
            <date>2009-12-30 13:25:03 -0800</date>
            <delta_ts>2009-12-30 13:34:05 -0800</delta_ts>
            <desc>patch: two sided so please don&apos;t cq+</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24529</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWMwOWJmZC4uY2I2OGVmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0xMi0zMCAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgZm9udGNvbmZpZyBvbiBMaW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJl
ZmVyZW5jZXMgb24gYSBwZXIgc3RyaWtlCisgICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJp
bmF0aW9uIG9mIGZhY2UgYW5kIHNpemUpLiBCZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5l
ZWQgdG8gcXVlcnkgZm9udGNvbmZpZyBlYWNoIHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBp
cyBjcmVhdGVkCisgICAgICAgIGZvciBhIG5ldyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBzdXBwb3J0IGZvciBxdWVyeWluZyB0aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6IGFkZCBnZXRSZW5kZXJT
dHlsZUZvclN0cmlrZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
YWNoZUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpx
dWVyeVN0eWxlKToKKyAgICAgICAgICBhZGQgY29kZSB0byBxdWVyeSBmb250Y29uZmlnIHZpYSBD
aHJvbWl1bUJyaWRnZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQ
bGF0Zm9ybURhdGFMaW51eC5oOgorCiAyMDA5LTEyLTMwICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4LgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IDM3MDlmN2MuLjcx
OTAwMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKQEAg
LTYyLDYgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0IENvb2tpZTsK
ICAgICBzdHJ1Y3QgUGx1Z2luSW5mbzsKKyAgICBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiAg
ICAgLy8gQW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUg
YWJpbGl0eSB0byBhbnN3ZXIKICAgICAvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQg
c28gb24uLi4KQEAgLTEwOSw2ICsxMTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyBib29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCk7CiAjZW5kaWYKICNpZiBQ
TEFURk9STShMSU5VWCkKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJp
a2UoRm9udFJlbmRlclN0eWxlKiByZXN1bHQsIGNvbnN0IGNoYXIqIGZhbWlseSwgaW50IHNpemVB
bmRTdHlsZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgZ2V0Rm9udEZhbWlseUZvckNoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqLCBzaXplX3QgbnVtQ2hhcmFjdGVycyk7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNw
cAppbmRleCAzZmUxNTYxLi42NzE4ODQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcApAQCAtMTQ1LDYgKzE0NSw3IEBA
IEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnRECiAKICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQg
PQogICAgICAgICBuZXcgRm9udFBsYXRmb3JtRGF0YSh0ZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkU2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUg
JiBTa1R5cGVmYWNlOjprQm9sZCkgJiYgIXRmLT5pc0JvbGQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0l0YWxpYykgJiYgIXRmLT5pc0l0YWxp
YygpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmluZGV4IGE5MDIwNTcuLjBmOWJmMzYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIEZvbnRQbGF0Zm9y
bURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwg
Ym9vbCBib2xkLCBiCiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNpemUpOwog
I2VsaWYgUExBVEZPUk0oTElOVVgpCiAgICAgQVNTRVJUKG1fZm9udFJlZmVyZW5jZSk7Ci0gICAg
cmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCBzaXplLCBib2xkICYmICFt
X2ZvbnRSZWZlcmVuY2UtPmlzQm9sZCgpLCBpdGFsaWMgJiYgIW1fZm9udFJlZmVyZW5jZS0+aXNJ
dGFsaWMoKSk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCAi
Iiwgc2l6ZSwgYm9sZCAmJiAhbV9mb250UmVmZXJlbmNlLT5pc0JvbGQoKSwgaXRhbGljICYmICFt
X2ZvbnRSZWZlcmVuY2UtPmlzSXRhbGljKCkpOwogI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAK
aW5kZXggYmY0Njk3Zi4uMTdlNWFlZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKIAorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiSGFyZmJ1enpT
a2lhLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgpAQCAtNjYsMzEgKzY3LDM3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRI
YXJmYnV6ekZhY2U6On5SZWZDb3VudGVkSGFyZmJ1enpGYWNlKCkKIAogRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCiAgICAgOiBt
X3R5cGVmYWNlKHNyYy5tX3R5cGVmYWNlKQorICAgICwgbV9mYW1pbHkoc3JjLm1fZmFtaWx5KQog
ICAgICwgbV90ZXh0U2l6ZShzcmMubV90ZXh0U2l6ZSkKICAgICAsIG1fZmFrZUJvbGQoc3JjLm1f
ZmFrZUJvbGQpCiAgICAgLCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKKyAgICAsIG1f
c3R5bGUoc3JjLm1fc3R5bGUpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZh
Y2UpCiB7CiAgICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOwogfQogCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKFNrVHlwZWZhY2UqIHRmLCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBm
YWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShTa1R5cGVmYWNlKiB0ZiwgY29uc3QgY2hhciogZmFtaWx5LCBmbG9hdCB0ZXh0U2l6ZSwg
Ym9vbCBmYWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljKQogICAgIDogbV90eXBlZmFjZSh0ZikKKyAg
ICAsIG1fZmFtaWx5KGZhbWlseSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAgICAgLCBt
X2Zha2VCb2xkKGZha2VCb2xkKQogICAgICwgbV9mYWtlSXRhbGljKGZha2VJdGFsaWMpCiB7CiAg
ICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3R5bGUoKTsKIH0KIAogRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMs
IGZsb2F0IHRleHRTaXplKQogICAgIDogbV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKKyAgICAs
IG1fZmFtaWx5KHNyYy5tX2ZhbWlseSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAgICAg
LCBtX2Zha2VCb2xkKHNyYy5tX2Zha2VCb2xkKQogICAgICwgbV9mYWtlSXRhbGljKHNyYy5tX2Zh
a2VJdGFsaWMpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2UpCiB7CiAg
ICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3R5bGUoKTsKIH0KIAogRm9udFBs
YXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQpAQCAtMTAyLDEwICsxMDksMTIgQEAgRm9u
dFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHNyYykKIHsKICAgICBTa1JlZkNudF9TYWZlQXNzaWduKG1fdHlwZWZhY2UsIHNy
Yy5tX3R5cGVmYWNlKTsKIAorICAgIG1fZmFtaWx5ID0gc3JjLm1fZmFtaWx5OwogICAgIG1fdGV4
dFNpemUgPSBzcmMubV90ZXh0U2l6ZTsKICAgICBtX2Zha2VCb2xkID0gc3JjLm1fZmFrZUJvbGQ7
CiAgICAgbV9mYWtlSXRhbGljID0gc3JjLm1fZmFrZUl0YWxpYzsKICAgICBtX2hhcmZidXp6RmFj
ZSA9IHNyYy5tX2hhcmZidXp6RmFjZTsKKyAgICBtX3N0eWxlID0gc3JjLm1fc3R5bGU7CiAKICAg
ICByZXR1cm4gKnRoaXM7CiB9CkBAIC0xMjEsMTMgKzEzMCwxNiBAQCB2b2lkIEZvbnRQbGF0Zm9y
bURhdGE6OnNldHVwUGFpbnQoU2tQYWludCogcGFpbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxv
YXQgdHMgPSBtX3RleHRTaXplID4gMCA/IG1fdGV4dFNpemUgOiAxMjsKIAotICAgIHBhaW50LT5z
ZXRBbnRpQWxpYXMoaXNTa2lhQW50aUFsaWFzKTsKLSAgICBwYWludC0+c2V0SGludGluZyhza2lh
SGludGluZyk7Ci0gICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoaXNTa2lhU3VicGl4ZWxHbHlw
aHMpOworICAgIHBhaW50LT5zZXRBbnRpQWxpYXMobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gMiA/
IGlzU2tpYUFudGlBbGlhcyA6IG1fc3R5bGUudXNlQW50aUFsaWFzKTsKKyAgICBwYWludC0+c2V0
SGludGluZyhtX3N0eWxlLnVzZUhpbnRpbmcgPT0gMiA/IHNraWFIaW50aW5nIDogKFNrUGFpbnQ6
OkhpbnRpbmcpIG1fc3R5bGUuaGludFN0eWxlKTsKICAgICBwYWludC0+c2V0VGV4dFNpemUoU2tG
bG9hdFRvU2NhbGFyKHRzKSk7CiAgICAgcGFpbnQtPnNldFR5cGVmYWNlKG1fdHlwZWZhY2UpOwog
ICAgIHBhaW50LT5zZXRGYWtlQm9sZFRleHQobV9mYWtlQm9sZCk7CiAgICAgcGFpbnQtPnNldFRl
eHRTa2V3WChtX2Zha2VJdGFsaWMgPyAtU0tfU2NhbGFyMSAvIDQgOiAwKTsKKworICAgIGlmICht
X3N0eWxlLnVzZUFudGlBbGlhcyA9PSAxIHx8IG1fc3R5bGUudXNlQW50aUFsaWFzID09IDIgJiYg
aXNTa2lhQW50aUFsaWFzKSB7CisgICAgICAgIHBhaW50LT5zZXRMQ0RSZW5kZXJUZXh0KG1fc3R5
bGUudXNlU3VicGl4ZWwgPT0gMiA/IGlzU2tpYVN1YnBpeGVsR2x5cGhzIDogbV9zdHlsZS51c2VT
dWJwaXhlbCk7CisgICAgfQogfQogCiBTa0ZvbnRJRCBGb250UGxhdGZvcm1EYXRhOjp1bmlxdWVJ
RCgpIGNvbnN0CkBAIC0xODQsNCArMTk2LDIxIEBAIEhCX0ZhY2VSZWNfKiBGb250UGxhdGZvcm1E
YXRhOjpoYXJmYnV6ekZhY2UoKSBjb25zdAogICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS0+ZmFj
ZSgpOwogfQogCit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3R5bGUoKQoreworICAgIGlm
IChtX2ZhbWlseS5sZW5ndGgoKSA9PSAwKSB7CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBm
YW1pbHkgZm9yIHRoaXMuIFByb2JhYmx5IGJlY2F1c2UgaXQncyBhIHdlYmZvbnQuIFdlCisgICAg
ICAgIC8vIHNldCBhbGwgdGhlIHZhbHVlcyB0byAnbm8gcHJlZmVyZW5jZScgYW5kIHRha2UgdGhl
IGRlZmF1bHRzIHBhc3NlZAorICAgICAgICAvLyBpbiBmcm9tIFhTRVRUSU5HUy4KKyAgICAgICAg
bV9zdHlsZS51c2VCaXRtYXBzID0gMjsKKyAgICAgICAgbV9zdHlsZS51c2VBdXRvSGludCA9IDI7
CisgICAgICAgIG1fc3R5bGUudXNlSGludGluZyA9IDI7CisgICAgICAgIG1fc3R5bGUudXNlQW50
aUFsaWFzID0gMjsKKyAgICAgICAgbV9zdHlsZS51c2VTdWJwaXhlbCA9IDI7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBDaHJvbWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJp
a2UoJm1fc3R5bGUsIG1fZmFtaWx5LmRhdGEoKSwgKCgoaW50KW1fdGV4dFNpemUpIDw8IDIpIHwg
KG1fdHlwZWZhY2UtPnN0eWxlKCkgJiAzKSk7Cit9CisKIH0gIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0
Zm9ybURhdGFMaW51eC5oIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
UGxhdGZvcm1EYXRhTGludXguaAppbmRleCAyOWNlOGU3Li4xMzg0ZTdiIDEwMDY0NAotLS0gYS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5o
CisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0
YUxpbnV4LmgKQEAgLTMxLDYgKzMxLDggQEAKICNpZm5kZWYgRm9udFBsYXRmb3JtRGF0YUxpbnV4
X2gKICNkZWZpbmUgRm9udFBsYXRmb3JtRGF0YUxpbnV4X2gKIAorI2luY2x1ZGUgIkNTdHJpbmcu
aCIKKyNpbmNsdWRlICJGb250UmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJTdHJpbmdJbXBsLmgi
CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1ZGUgPFNrUGFpbnQuaD4KQEAgLTQzLDcg
KzQ1LDYgQEAgc3RydWN0IEhCX0ZhY2VSZWNfOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFz
cyBGb250RGVzY3JpcHRpb247Ci1jbGFzcyBTdHJpbmc7CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAvLyBGb250UGxhdGZvcm1EYXRhIGlzIHRoZSBoYW5kbGUgd2hpY2ggV2ViS2l0IGhhcyBv
biBhIHNwZWNpZmljIGZhY2UuIEEgZmFjZQpAQCAtNzksNyArODAsNyBAQCBwdWJsaWM6CiAgICAg
ICAgIHsgfQogCiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJik7
Ci0gICAgRm9udFBsYXRmb3JtRGF0YShTa1R5cGVmYWNlKiwgZmxvYXQgdGV4dFNpemUsIGJvb2wg
ZmFrZUJvbGQsIGJvb2wgZmFrZUl0YWxpYyk7CisgICAgRm9udFBsYXRmb3JtRGF0YShTa1R5cGVm
YWNlKiwgY29uc3QgY2hhciogbmFtZSwgZmxvYXQgdGV4dFNpemUsIGJvb2wgZmFrZUJvbGQsIGJv
b2wgZmFrZUl0YWxpYyk7CiAgICAgRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1E
YXRhJiBzcmMsIGZsb2F0IHRleHRTaXplKTsKICAgICB+Rm9udFBsYXRmb3JtRGF0YSgpOwogCkBA
IC0xNDAsMTEgKzE0MSwxNSBAQCBwcml2YXRlOgogICAgICAgICBIQl9GYWNlUmVjXyogbV9oYXJm
YnV6ekZhY2U7CiAgICAgfTsKIAorICAgIHZvaWQgcXVlcnlTdHlsZSgpOworCiAgICAgLy8gRklY
TUU6IENvdWxkIFNrQXV0b1VucmVmIGJlIHVzZWQgaGVyZT8KICAgICBTa1R5cGVmYWNlKiBtX3R5
cGVmYWNlOworICAgIENTdHJpbmcgbV9uYW1lOwogICAgIGZsb2F0IG1fdGV4dFNpemU7CiAgICAg
Ym9vbCBtX2Zha2VCb2xkOwogICAgIGJvb2wgbV9mYWtlSXRhbGljOworICAgIEZvbnRSZW5kZXJT
dHlsZSBtX3N0eWxlOwogICAgIG11dGFibGUgUmVmUHRyPFJlZkNvdW50ZWRIYXJmYnV6ekZhY2U+
IG1faGFyZmJ1enpGYWNlOwogCiAgICAgU2tUeXBlZmFjZSogaGFzaFRhYmxlRGVsZXRlZEZvbnRW
YWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2tUeXBlZmFjZSo+KC0xKTsg
fQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UmVu
ZGVyU3R5bGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJlbmRl
clN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUxMmNmNgotLS0g
L2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJl
bmRlclN0eWxlLmgKQEAgLTAsMCArMSw1MiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRm9udFJlbmRlclN0eWxlX2gKKyNk
ZWZpbmUgRm9udFJlbmRlclN0eWxlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGb250
UmVuZGVyU3R5bGUgZGVzY3JpYmVzIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yIHJlbmRlcmlu
ZyBhIGZvbnQgYXQgYQorLy8gZ2l2ZW4gc2l6ZS4KK3N0cnVjdCBGb250UmVuZGVyU3R5bGUgewor
ICAgIC8vIEVhY2ggb2YgdGhlIHVzZSogbWVtYmVycyBiZWxvdyBjYW4gdGFrZSBvbmUgb2YgdGhy
ZWUgdmFsdWVzOgorICAgIC8vICAgMDogb2ZmCisgICAgLy8gICAxOiBvbgorICAgIC8vICAgMjog
bm8gcHJlZmVyZW5jZSBleHByZXNzZWQKKyAgICBjaGFyIHVzZUJpdG1hcHM7ICAvLyB1c2UgZW1i
ZWRkZWQgYml0bWFwIHN0cmlrZSBpZiBwb3NzaWJsZQorICAgIGNoYXIgdXNlQXV0b0hpbnQ7IC8v
IHVzZSAnYXV0bycgaGludGluZyAoRnJlZVR5cGUgc3BlY2lmaWMpCisgICAgY2hhciB1c2VIaW50
aW5nOyAgLy8gaGludCBnbHlwaHMgdG8gdGhlIHBpeGVsIGdyaWQKKyAgICBjaGFyIGhpbnRTdHls
ZTsgICAvLyBsZXZlbCBvZiBoaW50aW5nLCAwLi4zCisgICAgY2hhciB1c2VBbnRpQWxpYXM7Ly8g
YW50aWFsaWFzIGdseXBoIHNoYXBlcworICAgIGNoYXIgdXNlU3VicGl4ZWw7IC8vIHVzZSBzdWJw
aXhlbCBhbnRpYWxpYXMKK307CisKK30KKworI2VuZGlmIC8vIEZvbnRSZW5kZXJTdHlsZV9oCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCA3ZjYyMzA5Li5kNjZiYjY0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NCBAQAorMjAwOS0xMi0zMCAgQWRhbSBMYW5nbGV5ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgZm9udGNvbmZpZyBvbiBM
aW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJlZmVyZW5jZXMgb24gYSBwZXIgc3RyaWtlCisg
ICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJpbmF0aW9uIG9mIGZhY2UgYW5kIHNpemUpLiBC
ZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5lZWQgdG8gcXVlcnkgZm9udGNvbmZpZyBlYWNo
IHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBpcyBjcmVhdGVkCisgICAgICAgIGZvciBhIG5l
dyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBxdWVyeWluZyB0
aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAg
ICogcHVibGljL2d0ay9XZWJGb250SW5mby5oOgorICAgICAgICAqIHB1YmxpYy9saW51eC9XZWJT
YW5kYm94U3VwcG9ydC5oOgorICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UpOgor
ICAgICAgICAqIHNyYy9ndGsvV2ViRm9udEluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
b250SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2UpOgorCiAyMDA5LTEyLTI4ICBLaW51a28gWWFz
dWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBNYWNpZWog
U3RhY2hvd2lhay4KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNDRjNDBiOS4uYjZmZWRjNSAxMDA2NDQKLS0t
IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysrIGIvV2ViS2l0L2Nocm9taXVtL1dlYktp
dC5neXAKQEAgLTgwLDYgKzgwLDcgQEAKICAgICAgICAgICAgICdzb3VyY2VzJzogWwogICAgICAg
ICAgICAgICAgICdwdWJsaWMvZ3RrL1dlYklucHV0RXZlbnRGYWN0b3J5LmgnLAogICAgICAgICAg
ICAgICAgICdwdWJsaWMvbGludXgvV2ViRm9udFJlbmRlcmluZy5oJywKKyAgICAgICAgICAgICAg
ICAncHVibGljL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5oJywKICAgICAgICAgICAgICAgICAn
cHVibGljL3gxMS9XZWJTY3JlZW5JbmZvRmFjdG9yeS5oJywKICAgICAgICAgICAgICAgICAncHVi
bGljL21hYy9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywKICAgICAgICAgICAgICAgICAncHVibGlj
L21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5oJywKQEAgLTIyNCw2ICsyMjUsNyBAQAogICAgICAg
ICAgICAgICAgICdzcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL2xpbnV4
L1dlYkZvbnRSZW5kZXJpbmcuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL2xpbnV4L1dlYkZv
bnRSZW5kZXJTdHlsZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMveDExL1dlYlNjcmVlbklu
Zm9GYWN0b3J5LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9tYWMvV2ViSW5wdXRFdmVudEZh
Y3RvcnkubW0nLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYlNjcmVlbkluZm9GYWN0b3J5
Lm1tJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvZ3RrL1dlYkZvbnRJbmZv
LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL2d0ay9XZWJGb250SW5mby5oCmluZGV4IGFkMzc2
ODAuLjI2NTZhODUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvZ3RrL1dlYkZv
bnRJbmZvLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9ndGsvV2ViRm9udEluZm8uaApA
QCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBXZWJGb250SW5mb19oCiAKICNpbmNsdWRlICIuLi9X
ZWJDU3RyaW5nLmgiCisjaW5jbHVkZSAiLi4vbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmgiCiAK
ICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1bmlzdGQuaD4KQEAgLTQ4LDYgKzQ5LDE4
IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zOiB0aGUgZm9udCBmYW1pbHkgb3IgYW4gZW1wdHkg
c3RyaW5nIGlmIHRoZSByZXF1ZXN0IGNvdWxkIG5vdCBiZQogICAgIC8vIHNhdGlzZmllZC4KICAg
ICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJDU3RyaW5nIGZhbWlseUZvckNoYXJzKGNvbnN0IFdlYlVD
aGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hhcmFjdGVycyk7CisgICAgLy8gRmlsbCBvdXQg
dGhlIGdpdmVuIFdlYkZvbnRSZW5kZXJTdHlsZSB3aXRoIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMg
Zm9yCisgICAgLy8gcmVuZGVyaW5nIHRoZSBnaXZlbiBmb250IGF0IHRoZSBnaXZlbiBzaXplLgor
ICAgIC8vICAgZmFtaWx5OiBpLmUuICJUaW1lcyBOZXcgUm9tYW4iCisgICAgLy8gICBzaXplQW5k
U3R5bGU6CisgICAgLy8gICAgICAzMzIyMjIyMjIyMjIxMTExMTExMTExCisgICAgLy8gICAgICAx
MDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMAorICAgIC8vICAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgLy8gICAgIHwuLi4uLi4uLi4uLi4uLlNpemUuLi4u
Li4uLi4uLi5JQnwKKyAgICAvLyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgIC8vICAgICBJOiBpdGFsaWMgZmxhZworICAgIC8vICAgICBCOiBib2xkIGZsYWcKKyAg
ICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHJlbmRlclN0eWxlRm9yU3RyaWtlKFdlYkZvbnRSZW5k
ZXJTdHlsZSogcmVzdWx0LCBjb25zdCBjaGFyKiBmYW1pbHksIGludCBzaXplQW5kU3R5bGUpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hMmFjNjgwCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
b250UmVuZGVyU3R5bGVfaAorI2RlZmluZSBXZWJGb250UmVuZGVyU3R5bGVfaAorCisjaW5jbHVk
ZSAiLi4vV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgc3RydWN0IEZvbnRSZW5k
ZXJTdHlsZTsgfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkZvbnRSZW5kZXJT
dHlsZSB7CisgICAgLy8gRWFjaCBvZiB0aGUgdXNlKiBtZW1iZXJzIGJlbG93IGNhbiB0YWtlIG9u
ZSBvZiB0aHJlZSB2YWx1ZXM6CisgICAgLy8gICAwOiBvZmYKKyAgICAvLyAgIDE6IG9uCisgICAg
Ly8gICAyOiBubyBwcmVmZXJlbmNlIGV4cHJlc3NlZAorICAgIGNoYXIgdXNlQml0bWFwczsgIC8v
IHVzZSBlbWJlZGRlZCBiaXRtYXAgc3RyaWtlIGlmIHBvc3NpYmxlCisgICAgY2hhciB1c2VBdXRv
SGludDsgLy8gdXNlICdhdXRvJyBoaW50aW5nIChGcmVlVHlwZSBzcGVjaWZpYykKKyAgICBjaGFy
IHVzZUhpbnRpbmc7ICAvLyBoaW50IGdseXBocyB0byB0aGUgcGl4ZWwgZ3JpZAorICAgIGNoYXIg
aGludFN0eWxlOyAgIC8vIGxldmVsIG9mIGhpbnRpbmcsIDAuLjMKKyAgICBjaGFyIHVzZUFudGlB
bGlhczsvLyBhbnRpYWxpYXMgZ2x5cGggc2hhcGVzCisgICAgY2hhciB1c2VTdWJwaXhlbDsgLy8g
dXNlIHN1YnBpeGVsIGFudGlhbGlhcworCisjaWZkZWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisg
ICAgLy8gVHJhbnNsYXRlcyB0aGUgbWVtYmVycyBvZiB0aGlzIHN0cnVjdCB0byBhIEZvbnRSZW5k
ZXJTdHlsZQorICAgIHZvaWQgdG9Gb250UmVuZGVyU3R5bGUoV2ViQ29yZTo6Rm9udFJlbmRlclN0
eWxlKik7CisjZW5kaWYKKworICAgIHZvaWQgc2V0RGVmYXVsdHMoKTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYktpdAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJs
aWMvbGludXgvV2ViU2FuZGJveFN1cHBvcnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbGlu
dXgvV2ViU2FuZGJveFN1cHBvcnQuaAppbmRleCA1ZWRjZWIyLi5kMWExYWI0IDEwMDY0NAotLS0g
YS9XZWJLaXQvY2hyb21pdW0vcHVibGljL2xpbnV4L1dlYlNhbmRib3hTdXBwb3J0LmgKKysrIGIv
V2ViS2l0L2Nocm9taXVtL3B1YmxpYy9saW51eC9XZWJTYW5kYm94U3VwcG9ydC5oCkBAIC0zNiw2
ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitzdHJ1Y3QgV2ViRm9udFJlbmRlclN0
eWxlOworCiAvLyBQdXQgbWV0aG9kcyBoZXJlIHRoYXQgYXJlIHJlcXVpcmVkIGR1ZSB0byBzYW5k
Ym94IHJlc3RyaWN0aW9ucy4KIGNsYXNzIFdlYlNhbmRib3hTdXBwb3J0IHsKIHB1YmxpYzoKQEAg
LTQ5LDYgKzUxLDcgQEAgcHVibGljOgogICAgIC8vIFJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUg
Zm9udCBmYW1pbHkgb24gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZQogICAgIC8vIHJlcXVlc3QgY2Fu
bm90IGJlIHNhdGlzZmllZC4KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRGb250RmFtaWx5Rm9y
Q2hhcmFjdGVycyhjb25zdCBXZWJVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3Rl
cnMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoV2ViRm9u
dFJlbmRlclN0eWxlKiBzdHlsZSwgY29uc3QgY2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxl
KSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJv
bWl1bUJyaWRnZS5jcHAKaW5kZXggMzlhMTU1Zi4uOTRhODg5NyAxMDA2NDQKLS0tIGEvV2ViS2l0
L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9DaHJvbWl1bUJyaWRnZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpZiBQTEFURk9STShMSU5V
WCkKICNpbmNsdWRlICJXZWJTYW5kYm94U3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYkZvbnRJbmZv
LmgiCisjaW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCiAjZW5kaWYKIAogI2lmIFdFQktJ
VF9VU0lOR19TS0lBCkBAIC0zMDIsNiArMzAzLDE5IEBAIFN0cmluZyBDaHJvbWl1bUJyaWRnZTo6
Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVf
CiAKICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CiB9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6Omdl
dFJlbmRlclN0eWxlRm9yU3RyaWtlKEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0LCBjb25zdCBjaGFy
KiBmb250LCBpbnQgc2l6ZUFuZFN0eWxlKQoreworICAgIFdlYkZvbnRSZW5kZXJTdHlsZSBzdHls
ZTsKKworICAgIGlmICh3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKSkgeworICAgICAg
ICB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKS0+Z2V0UmVuZGVyU3R5bGVGb3JTdHJp
a2UoJnN0eWxlLCBmb250LCBzaXplQW5kU3R5bGUpOworICAgIH0gZWxzZSB7CisgICAgICAgIFdl
YkZvbnRJbmZvOjpyZW5kZXJTdHlsZUZvclN0cmlrZSgmc3R5bGUsIGZvbnQsIHNpemVBbmRTdHls
ZSk7CisgICAgfQorCisgICAgc3R5bGUudG9Gb250UmVuZGVyU3R5bGUocmVzdWx0KTsKK30KICNl
bmRpZgogCiAvLyBIVE1MNSBEQiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21p
dW0vc3JjL2d0ay9XZWJGb250SW5mby5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2d0ay9XZWJG
b250SW5mby5jcHAKaW5kZXggNzZlZDYxOC4uYzI2MDY3NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2No
cm9taXVtL3NyYy9ndGsvV2ViRm9udEluZm8uY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
Z3RrL1dlYkZvbnRJbmZvLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiV2ViRm9udEluZm8uaCIKKyNpbmNsdWRlICJXZWJGb250UmVuZGVyU3R5
bGUuaCIKIAogI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgogI2luY2x1ZGUgPHN0
cmluZy5oPgpAQCAtMTA0LDQgKzEwNSw2OCBAQCBXZWJDU3RyaW5nIFdlYkZvbnRJbmZvOjpmYW1p
bHlGb3JDaGFycyhjb25zdCBXZWJVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYQogICAg
IHJldHVybiBXZWJDU3RyaW5nKCk7CiB9CiAKK3ZvaWQgV2ViRm9udEluZm86OnJlbmRlclN0eWxl
Rm9yU3RyaWtlKFdlYkZvbnRSZW5kZXJTdHlsZSogb3V0LCBjb25zdCBjaGFyKiBmYW1pbHksIGlu
dCBzaXplQW5kU3R5bGUpCit7CisgICAgYm9vbCBpc19ib2xkID0gc2l6ZUFuZFN0eWxlICYgMTsK
KyAgICBib29sIGlzX2l0YWxpYyA9IHNpemVBbmRTdHlsZSAmIDI7CisgICAgaW50IHBpeGVsU2l6
ZSA9IHNpemVBbmRTdHlsZSA+PiAyOworCisgICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0
ZXJuQ3JlYXRlKCk7CisgICAgRmNWYWx1ZSBmY3ZhbHVlOworCisgICAgZmN2YWx1ZS50eXBlID0g
RmNUeXBlU3RyaW5nOworICAgIGZjdmFsdWUudS5zID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBG
Y0NoYXI4ICo+KGZhbWlseSk7CisgICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX0ZBTUlMWSwg
ZmN2YWx1ZSwgMCk7CisKKyAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVJbnRlZ2VyOworICAgIGZj
dmFsdWUudS5pID0gaXNfYm9sZCA/IEZDX1dFSUdIVF9CT0xEIDogRkNfV0VJR0hUX05PUk1BTDsK
KyAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfV0VJR0hULCBmY3ZhbHVlLCAwKTsKKworICAg
IGZjdmFsdWUudHlwZSA9IEZjVHlwZUludGVnZXI7CisgICAgZmN2YWx1ZS51LmkgPSBpc19pdGFs
aWMgPyBGQ19TTEFOVF9JVEFMSUMgOiBGQ19TTEFOVF9ST01BTjsKKyAgICBGY1BhdHRlcm5BZGQo
cGF0dGVybiwgRkNfU0xBTlQsIGZjdmFsdWUsIDApOworCisgICAgZmN2YWx1ZS50eXBlID0gRmNU
eXBlQm9vbDsKKyAgICBmY3ZhbHVlLnUuYiA9IEZjVHJ1ZTsKKyAgICBGY1BhdHRlcm5BZGQocGF0
dGVybiwgRkNfU0NBTEFCTEUsIGZjdmFsdWUsIDApOworCisgICAgZmN2YWx1ZS50eXBlID0gRmNU
eXBlRG91YmxlOworICAgIGZjdmFsdWUudS5kID0gcGl4ZWxTaXplOworICAgIEZjUGF0dGVybkFk
ZChwYXR0ZXJuLCBGQ19TSVpFLCBmY3ZhbHVlLCAwKTsKKworICAgIEZjQ29uZmlnU3Vic3RpdHV0
ZSgwLCBwYXR0ZXJuLCBGY01hdGNoUGF0dGVybik7CisgICAgRmNEZWZhdWx0U3Vic3RpdHV0ZShw
YXR0ZXJuKTsKKworICAgIEZjUmVzdWx0IHJlc3VsdDsKKyAgICAvLyBTb21lIHZlcnNpb25zIG9m
IGZvbnRjb25maWcgZG9uJ3QgYWN0dWFsbHkgd3JpdGUgYSB2YWx1ZSBpbnRvIHJlc3VsdC4KKyAg
ICAvLyBIb3dldmVyLCBpdCdzIG5vdCBjbGVhciBmcm9tIHRoZSBkb2N1bWVudGF0aW9uIGlmIHJl
c3VsdCBzaG91bGQgYmUgYQorICAgIC8vIG5vbi1OVUxMIHBvaW50ZXI6IGZ1dHVyZSB2ZXJzaW9u
cyBtaWdodCBleHBlY3QgdG8gYmUgYWJsZSB0byB3cml0ZSB0bworICAgIC8vIGl0LiBTbyB3ZSBw
YXNzIGluIGEgdmFsaWQgcG9pbnRlciBhbmQgaWdub3JlIGl0LgorICAgIEZjUGF0dGVybiogbWF0
Y2ggPSBGY0ZvbnRNYXRjaCgwLCBwYXR0ZXJuLCAmcmVzdWx0KTsKKyAgICBGY1BhdHRlcm5EZXN0
cm95KHBhdHRlcm4pOworCisgICAgb3V0LT5zZXREZWZhdWx0cygpOworCisgICAgaWYgKCFtYXRj
aCkgeworICAgICAgICBGY1BhdHRlcm5EZXN0cm95KG1hdGNoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEZjQm9vbCBiOworICAgIGludCBpOworCisgICAgaWYgKEZjUGF0dGVybkdl
dEJvb2wobWF0Y2gsIEZDX0FOVElBTElBUywgMCwgJmIpID09IEZjUmVzdWx0TWF0Y2gpCisgICAg
ICAgIG91dC0+dXNlQW50aUFsaWFzID0gYjsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChtYXRj
aCwgRkNfRU1CRURERURfQklUTUFQLCAwLCAmYikgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAg
b3V0LT51c2VCaXRtYXBzID0gYjsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChtYXRjaCwgRkNf
QVVUT0hJTlQsIDAsICZiKSA9PSBGY1Jlc3VsdE1hdGNoKQorICAgICAgICBvdXQtPnVzZUF1dG9I
aW50ID0gYjsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChtYXRjaCwgRkNfSElOVElORywgMCwg
JmIpID09IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgIG91dC0+dXNlSGludGluZyA9IGI7CisgICAg
aWYgKEZjUGF0dGVybkdldEludGVnZXIobWF0Y2gsIEZDX0hJTlRfU1RZTEUsIDAsICZpKSA9PSBG
Y1Jlc3VsdE1hdGNoKQorICAgICAgICBvdXQtPmhpbnRTdHlsZSA9IGk7CisKKyAgICBGY1BhdHRl
cm5EZXN0cm95KG1hdGNoKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vc3JjL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5jcHAgYi9XZWJL
aXQvY2hyb21pdW0vc3JjL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5OTU4NwotLS0gL2Rldi9udWxsCisrKyBiL1dlYktp
dC9jaHJvbWl1bS9zcmMvbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmNwcApAQCAtMCwwICsxLDYw
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIldlYkZvbnRSZW5kZXJTdHlsZS5oIgor
CisjaW5jbHVkZSAiRm9udFJlbmRlclN0eWxlLmgiCisKK3VzaW5nIFdlYkNvcmU6OkZvbnRSZW5k
ZXJTdHlsZTsKKworbmFtZXNwYWNlIFdlYktpdCB7CisKK3ZvaWQgV2ViRm9udFJlbmRlclN0eWxl
Ojp0b0ZvbnRSZW5kZXJTdHlsZShXZWJDb3JlOjpGb250UmVuZGVyU3R5bGUqIG91dCkKK3sKKyAg
ICBvdXQtPnVzZUJpdG1hcHMgPSB1c2VCaXRtYXBzOworICAgIG91dC0+dXNlQXV0b0hpbnQgPSB1
c2VBdXRvSGludDsKKyAgICBvdXQtPnVzZUhpbnRpbmcgPSB1c2VIaW50aW5nOworICAgIG91dC0+
aGludFN0eWxlID0gaGludFN0eWxlOworICAgIG91dC0+dXNlQW50aUFsaWFzID0gdXNlQW50aUFs
aWFzOworICAgIG91dC0+dXNlU3VicGl4ZWwgPSB1c2VTdWJwaXhlbDsKK30KKwordm9pZCBXZWJG
b250UmVuZGVyU3R5bGU6OnNldERlZmF1bHRzKCkKK3sKKyAgICB1c2VCaXRtYXBzID0gMjsKKyAg
ICB1c2VBdXRvSGludCA9IDI7CisgICAgdXNlSGludGluZyA9IDI7CisgICAgaGludFN0eWxlID0g
MDsKKyAgICB1c2VBbnRpQWxpYXMgPSAyOworICAgIHVzZVN1YnBpeGVsID0gMjsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45682</attachid>
            <date>2009-12-30 13:34:05 -0800</date>
            <delta_ts>2009-12-30 14:20:28 -0800</delta_ts>
            <desc>patch v2: two sided so please don&apos;t cq+</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>24516</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWMwOWJmZC4uY2I2OGVmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0xMi0zMCAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgZm9udGNvbmZpZyBvbiBMaW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJl
ZmVyZW5jZXMgb24gYSBwZXIgc3RyaWtlCisgICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJp
bmF0aW9uIG9mIGZhY2UgYW5kIHNpemUpLiBCZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5l
ZWQgdG8gcXVlcnkgZm9udGNvbmZpZyBlYWNoIHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBp
cyBjcmVhdGVkCisgICAgICAgIGZvciBhIG5ldyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBzdXBwb3J0IGZvciBxdWVyeWluZyB0aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6IGFkZCBnZXRSZW5kZXJT
dHlsZUZvclN0cmlrZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
YWNoZUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpx
dWVyeVN0eWxlKToKKyAgICAgICAgICBhZGQgY29kZSB0byBxdWVyeSBmb250Y29uZmlnIHZpYSBD
aHJvbWl1bUJyaWRnZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQ
bGF0Zm9ybURhdGFMaW51eC5oOgorCiAyMDA5LTEyLTMwICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4LgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IDM3MDlmN2MuLjcx
OTAwMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKQEAg
LTYyLDYgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0IENvb2tpZTsK
ICAgICBzdHJ1Y3QgUGx1Z2luSW5mbzsKKyAgICBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiAg
ICAgLy8gQW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUg
YWJpbGl0eSB0byBhbnN3ZXIKICAgICAvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQg
c28gb24uLi4KQEAgLTEwOSw2ICsxMTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyBib29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCk7CiAjZW5kaWYKICNpZiBQ
TEFURk9STShMSU5VWCkKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJp
a2UoRm9udFJlbmRlclN0eWxlKiByZXN1bHQsIGNvbnN0IGNoYXIqIGZhbWlseSwgaW50IHNpemVB
bmRTdHlsZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgZ2V0Rm9udEZhbWlseUZvckNoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqLCBzaXplX3QgbnVtQ2hhcmFjdGVycyk7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNw
cAppbmRleCAzZmUxNTYxLi42NzE4ODQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcApAQCAtMTQ1LDYgKzE0NSw3IEBA
IEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnRECiAKICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQg
PQogICAgICAgICBuZXcgRm9udFBsYXRmb3JtRGF0YSh0ZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkU2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUg
JiBTa1R5cGVmYWNlOjprQm9sZCkgJiYgIXRmLT5pc0JvbGQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0l0YWxpYykgJiYgIXRmLT5pc0l0YWxp
YygpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmluZGV4IGE5MDIwNTcuLjBmOWJmMzYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIEZvbnRQbGF0Zm9y
bURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwg
Ym9vbCBib2xkLCBiCiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNpemUpOwog
I2VsaWYgUExBVEZPUk0oTElOVVgpCiAgICAgQVNTRVJUKG1fZm9udFJlZmVyZW5jZSk7Ci0gICAg
cmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCBzaXplLCBib2xkICYmICFt
X2ZvbnRSZWZlcmVuY2UtPmlzQm9sZCgpLCBpdGFsaWMgJiYgIW1fZm9udFJlZmVyZW5jZS0+aXNJ
dGFsaWMoKSk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCAi
Iiwgc2l6ZSwgYm9sZCAmJiAhbV9mb250UmVmZXJlbmNlLT5pc0JvbGQoKSwgaXRhbGljICYmICFt
X2ZvbnRSZWZlcmVuY2UtPmlzSXRhbGljKCkpOwogI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAK
aW5kZXggYmY0Njk3Zi4uNDlmNTY2YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKIAorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiSGFyZmJ1enpT
a2lhLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgpAQCAtNjYsMzEgKzY3LDM3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRI
YXJmYnV6ekZhY2U6On5SZWZDb3VudGVkSGFyZmJ1enpGYWNlKCkKIAogRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCiAgICAgOiBt
X3R5cGVmYWNlKHNyYy5tX3R5cGVmYWNlKQorICAgICwgbV9mYW1pbHkoc3JjLm1fZmFtaWx5KQog
ICAgICwgbV90ZXh0U2l6ZShzcmMubV90ZXh0U2l6ZSkKICAgICAsIG1fZmFrZUJvbGQoc3JjLm1f
ZmFrZUJvbGQpCiAgICAgLCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKKyAgICAsIG1f
c3R5bGUoc3JjLm1fc3R5bGUpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZh
Y2UpCiB7CiAgICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOwogfQogCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKFNrVHlwZWZhY2UqIHRmLCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBm
YWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShTa1R5cGVmYWNlKiB0ZiwgY29uc3QgY2hhciogZmFtaWx5LCBmbG9hdCB0ZXh0U2l6ZSwg
Ym9vbCBmYWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljKQogICAgIDogbV90eXBlZmFjZSh0ZikKKyAg
ICAsIG1fZmFtaWx5KGZhbWlseSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAgICAgLCBt
X2Zha2VCb2xkKGZha2VCb2xkKQogICAgICwgbV9mYWtlSXRhbGljKGZha2VJdGFsaWMpCiB7CiAg
ICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3R5bGUoKTsKIH0KIAogRm9udFBs
YXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMs
IGZsb2F0IHRleHRTaXplKQogICAgIDogbV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKKyAgICAs
IG1fZmFtaWx5KHNyYy5tX2ZhbWlseSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAgICAg
LCBtX2Zha2VCb2xkKHNyYy5tX2Zha2VCb2xkKQogICAgICwgbV9mYWtlSXRhbGljKHNyYy5tX2Zh
a2VJdGFsaWMpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2UpCiB7CiAg
ICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3R5bGUoKTsKIH0KIAogRm9udFBs
YXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQpAQCAtMTAyLDEwICsxMDksMTIgQEAgRm9u
dFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0
Zm9ybURhdGEmIHNyYykKIHsKICAgICBTa1JlZkNudF9TYWZlQXNzaWduKG1fdHlwZWZhY2UsIHNy
Yy5tX3R5cGVmYWNlKTsKIAorICAgIG1fZmFtaWx5ID0gc3JjLm1fZmFtaWx5OwogICAgIG1fdGV4
dFNpemUgPSBzcmMubV90ZXh0U2l6ZTsKICAgICBtX2Zha2VCb2xkID0gc3JjLm1fZmFrZUJvbGQ7
CiAgICAgbV9mYWtlSXRhbGljID0gc3JjLm1fZmFrZUl0YWxpYzsKICAgICBtX2hhcmZidXp6RmFj
ZSA9IHNyYy5tX2hhcmZidXp6RmFjZTsKKyAgICBtX3N0eWxlID0gc3JjLm1fc3R5bGU7CiAKICAg
ICByZXR1cm4gKnRoaXM7CiB9CkBAIC0xMjEsMTMgKzEzMCwxNSBAQCB2b2lkIEZvbnRQbGF0Zm9y
bURhdGE6OnNldHVwUGFpbnQoU2tQYWludCogcGFpbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxv
YXQgdHMgPSBtX3RleHRTaXplID4gMCA/IG1fdGV4dFNpemUgOiAxMjsKIAotICAgIHBhaW50LT5z
ZXRBbnRpQWxpYXMoaXNTa2lhQW50aUFsaWFzKTsKLSAgICBwYWludC0+c2V0SGludGluZyhza2lh
SGludGluZyk7Ci0gICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoaXNTa2lhU3VicGl4ZWxHbHlw
aHMpOworICAgIHBhaW50LT5zZXRBbnRpQWxpYXMobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gMiA/
IGlzU2tpYUFudGlBbGlhcyA6IG1fc3R5bGUudXNlQW50aUFsaWFzKTsKKyAgICBwYWludC0+c2V0
SGludGluZyhtX3N0eWxlLnVzZUhpbnRpbmcgPT0gMiA/IHNraWFIaW50aW5nIDogKFNrUGFpbnQ6
OkhpbnRpbmcpIG1fc3R5bGUuaGludFN0eWxlKTsKICAgICBwYWludC0+c2V0VGV4dFNpemUoU2tG
bG9hdFRvU2NhbGFyKHRzKSk7CiAgICAgcGFpbnQtPnNldFR5cGVmYWNlKG1fdHlwZWZhY2UpOwog
ICAgIHBhaW50LT5zZXRGYWtlQm9sZFRleHQobV9mYWtlQm9sZCk7CiAgICAgcGFpbnQtPnNldFRl
eHRTa2V3WChtX2Zha2VJdGFsaWMgPyAtU0tfU2NhbGFyMSAvIDQgOiAwKTsKKworICAgIGlmICht
X3N0eWxlLnVzZUFudGlBbGlhcyA9PSAxIHx8IG1fc3R5bGUudXNlQW50aUFsaWFzID09IDIgJiYg
aXNTa2lhQW50aUFsaWFzKQorICAgICAgICBwYWludC0+c2V0TENEUmVuZGVyVGV4dChtX3N0eWxl
LnVzZVN1YnBpeGVsID09IDIgPyBpc1NraWFTdWJwaXhlbEdseXBocyA6IG1fc3R5bGUudXNlU3Vi
cGl4ZWwpOwogfQogCiBTa0ZvbnRJRCBGb250UGxhdGZvcm1EYXRhOjp1bmlxdWVJRCgpIGNvbnN0
CkBAIC0xODQsNCArMTk1LDIxIEBAIEhCX0ZhY2VSZWNfKiBGb250UGxhdGZvcm1EYXRhOjpoYXJm
YnV6ekZhY2UoKSBjb25zdAogICAgIHJldHVybiBtX2hhcmZidXp6RmFjZS0+ZmFjZSgpOwogfQog
Cit2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3R5bGUoKQoreworICAgIGlmIChtX2ZhbWls
eS5sZW5ndGgoKSkgeworICAgICAgICAvLyBXZSBkb24ndCBoYXZlIGEgZmFtaWx5IGZvciB0aGlz
LiBQcm9iYWJseSBiZWNhdXNlIGl0J3MgYSB3ZWJmb250LiBXZQorICAgICAgICAvLyBzZXQgYWxs
IHRoZSB2YWx1ZXMgdG8gJ25vIHByZWZlcmVuY2UnIGFuZCB0YWtlIHRoZSBkZWZhdWx0cyBwYXNz
ZWQKKyAgICAgICAgLy8gaW4gZnJvbSBYU0VUVElOR1MuCisgICAgICAgIG1fc3R5bGUudXNlQml0
bWFwcyA9IDI7CisgICAgICAgIG1fc3R5bGUudXNlQXV0b0hpbnQgPSAyOworICAgICAgICBtX3N0
eWxlLnVzZUhpbnRpbmcgPSAyOworICAgICAgICBtX3N0eWxlLnVzZUFudGlBbGlhcyA9IDI7Cisg
ICAgICAgIG1fc3R5bGUudXNlU3VicGl4ZWwgPSAyOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKCZtX3N0eWxlLCBt
X2ZhbWlseS5kYXRhKCksICgoKGludCltX3RleHRTaXplKSA8PCAyKSB8IChtX3R5cGVmYWNlLT5z
dHlsZSgpICYgMykpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXgu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxp
bnV4LmgKaW5kZXggMjljZThlNy4uMTM4NGU3YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5oCkBAIC0z
MSw2ICszMSw4IEBACiAjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFMaW51eF9oCiAjZGVmaW5lIEZv
bnRQbGF0Zm9ybURhdGFMaW51eF9oCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
Rm9udFJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDxTa1BhaW50Lmg+CkBAIC00Myw3ICs0NSw2IEBAIHN0cnVj
dCBIQl9GYWNlUmVjXzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2NyaXB0
aW9uOwotY2xhc3MgU3RyaW5nOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRm9udFBs
YXRmb3JtRGF0YSBpcyB0aGUgaGFuZGxlIHdoaWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZpYyBm
YWNlLiBBIGZhY2UKQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgICAgICB7IH0KIAogICAg
IEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIEZvbnRQbGF0
Zm9ybURhdGEoU2tUeXBlZmFjZSosIGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29s
IGZha2VJdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoU2tUeXBlZmFjZSosIGNvbnN0IGNo
YXIqIG5hbWUsIGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29sIGZha2VJdGFsaWMp
OwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3JjLCBmbG9h
dCB0ZXh0U2l6ZSk7CiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIApAQCAtMTQwLDExICsxNDEs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgSEJfRmFjZVJlY18qIG1faGFyZmJ1enpGYWNlOwogICAg
IH07CiAKKyAgICB2b2lkIHF1ZXJ5U3R5bGUoKTsKKwogICAgIC8vIEZJWE1FOiBDb3VsZCBTa0F1
dG9VbnJlZiBiZSB1c2VkIGhlcmU/CiAgICAgU2tUeXBlZmFjZSogbV90eXBlZmFjZTsKKyAgICBD
U3RyaW5nIG1fbmFtZTsKICAgICBmbG9hdCBtX3RleHRTaXplOwogICAgIGJvb2wgbV9mYWtlQm9s
ZDsKICAgICBib29sIG1fZmFrZUl0YWxpYzsKKyAgICBGb250UmVuZGVyU3R5bGUgbV9zdHlsZTsK
ICAgICBtdXRhYmxlIFJlZlB0cjxSZWZDb3VudGVkSGFyZmJ1enpGYWNlPiBtX2hhcmZidXp6RmFj
ZTsKIAogICAgIFNrVHlwZWZhY2UqIGhhc2hUYWJsZURlbGV0ZWRGb250VmFsdWUoKSBjb25zdCB7
IHJldHVybiByZWludGVycHJldF9jYXN0PFNrVHlwZWZhY2UqPigtMSk7IH0KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJlbmRlclN0eWxlLmggYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRSZW5kZXJTdHlsZS5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlOTQ5ZTEKLS0tIC9kZXYvbnVsbAorKysg
Yi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRSZW5kZXJTdHlsZS5oCkBA
IC0wLDAgKzEsNTIgQEAKKy8qIENvcHlyaWdodCAoYykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKiAKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaWZuZGVmIEZvbnRSZW5kZXJTdHlsZV9oCisjZGVmaW5lIEZvbnRSZW5k
ZXJTdHlsZV9oCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gRm9udFJlbmRlclN0eWxlIGRl
c2NyaWJlcyB0aGUgdXNlcidzIHByZWZlcmVuY2VzIGZvciByZW5kZXJpbmcgYSBmb250IGF0IGEK
Ky8vIGdpdmVuIHNpemUuCitzdHJ1Y3QgRm9udFJlbmRlclN0eWxlIHsKKyAgICAvLyBFYWNoIG9m
IHRoZSB1c2UqIG1lbWJlcnMgYmVsb3cgY2FuIHRha2Ugb25lIG9mIHRocmVlIHZhbHVlczoKKyAg
ICAvLyAgIDA6IG9mZgorICAgIC8vICAgMTogb24KKyAgICAvLyAgIDI6IG5vIHByZWZlcmVuY2Ug
ZXhwcmVzc2VkCisgICAgY2hhciB1c2VCaXRtYXBzOyAvLyB1c2UgZW1iZWRkZWQgYml0bWFwIHN0
cmlrZSBpZiBwb3NzaWJsZQorICAgIGNoYXIgdXNlQXV0b0hpbnQ7IC8vIHVzZSAnYXV0bycgaGlu
dGluZyAoRnJlZVR5cGUgc3BlY2lmaWMpCisgICAgY2hhciB1c2VIaW50aW5nOyAvLyBoaW50IGds
eXBocyB0byB0aGUgcGl4ZWwgZ3JpZAorICAgIGNoYXIgaGludFN0eWxlOyAvLyBsZXZlbCBvZiBo
aW50aW5nLCAwLi4zCisgICAgY2hhciB1c2VBbnRpQWxpYXM7IC8vIGFudGlhbGlhcyBnbHlwaCBz
aGFwZXMKKyAgICBjaGFyIHVzZVN1YnBpeGVsOyAvLyB1c2Ugc3VicGl4ZWwgYW50aWFsaWFzCit9
OworCit9CisKKyNlbmRpZiAvLyBGb250UmVuZGVyU3R5bGVfaApkaWZmIC0tZ2l0IGEvV2ViS2l0
L2Nocm9taXVtL0NoYW5nZUxvZyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKaW5kZXggN2Y2
MjMwOS4uZDY2YmI2NCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMDktMTItMzAg
IEFkYW0gTGFuZ2xleSAgPGFnbEBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIGZvbnRjb25maWcgb24gTGludXggY2FuIGNoYW5nZSB0
aGUgcmVuZGVyIHByZWZlcmVuY2VzIG9uIGEgcGVyIHN0cmlrZQorICAgICAgICBiYXNpcyAoYSBz
dHJpa2UgYSBjb21iaW5hdGlvbiBvZiBmYWNlIGFuZCBzaXplKS4gQmVjYXVzZSBvZiB0aGlzLCB3
ZQorICAgICAgICBuZWVkIHRvIHF1ZXJ5IGZvbnRjb25maWcgZWFjaCB0aW1lIGEgbmV3IEZvbnRQ
bGF0Zm9ybURhdGEgaXMgY3JlYXRlZAorICAgICAgICBmb3IgYSBuZXcgc2l6ZS4KKworICAgICAg
ICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgcXVlcnlpbmcgdGhpcyB2aWEgQ2hyb21pdW1C
cmlkZ2UuCisKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTMzMDY1CisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAgICAgICAqIHB1YmxpYy9ndGsvV2Vi
Rm9udEluZm8uaDoKKyAgICAgICAgKiBwdWJsaWMvbGludXgvV2ViU2FuZGJveFN1cHBvcnQuaDoK
KyAgICAgICAgKiBzcmMvQ2hyb21pdW1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hy
b21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKToKKyAgICAgICAgKiBzcmMvZ3Rr
L1dlYkZvbnRJbmZvLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRm9udEluZm86OnJlbmRlclN0
eWxlRm9yU3RyaWtlKToKKwogMjAwOS0xMi0yOCAgS2ludWtvIFlhc3VkYSAgPGtpbnVrb0BjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0YWNob3dpYWsuCmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktpdC9jaHJvbWl1bS9XZWJL
aXQuZ3lwCmluZGV4IDQ0YzQwYjkuLmI2ZmVkYzUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1
bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC04MCw2ICs4
MCw3IEBACiAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgICAgICAgICAncHVibGlj
L2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL2xp
bnV4L1dlYkZvbnRSZW5kZXJpbmcuaCcsCisgICAgICAgICAgICAgICAgJ3B1YmxpYy9saW51eC9X
ZWJGb250UmVuZGVyU3R5bGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy94MTEvV2ViU2Ny
ZWVuSW5mb0ZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViSW5wdXRF
dmVudEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9tYWMvV2ViU2NyZWVuSW5m
b0ZhY3RvcnkuaCcsCkBAIC0yMjQsNiArMjI1LDcgQEAKICAgICAgICAgICAgICAgICAnc3JjL0lu
c3BlY3RvckNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0luc3BlY3RvckNs
aWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9saW51eC9XZWJGb250UmVuZGVyaW5n
LmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuY3Bw
JywKICAgICAgICAgICAgICAgICAnc3JjL3gxMS9XZWJTY3JlZW5JbmZvRmFjdG9yeS5jcHAnLAog
ICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYklucHV0RXZlbnRGYWN0b3J5Lm1tJywKICAgICAg
ICAgICAgICAgICAnc3JjL21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5tbScsCmRpZmYgLS1naXQg
YS9XZWJLaXQvY2hyb21pdW0vcHVibGljL2d0ay9XZWJGb250SW5mby5oIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9ndGsvV2ViRm9udEluZm8uaAppbmRleCBhZDM3NjgwLi4yNjU2YTg1IDEwMDY0
NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL2d0ay9XZWJGb250SW5mby5oCisrKyBiL1dl
YktpdC9jaHJvbWl1bS9wdWJsaWMvZ3RrL1dlYkZvbnRJbmZvLmgKQEAgLTMyLDYgKzMyLDcgQEAK
ICNkZWZpbmUgV2ViRm9udEluZm9faAogCiAjaW5jbHVkZSAiLi4vV2ViQ1N0cmluZy5oIgorI2lu
Y2x1ZGUgIi4uL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5oIgogCiAjaW5jbHVkZSA8c3RyaW5n
Lmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC00OCw2ICs0OSwxOCBAQCBwdWJsaWM6CiAgICAg
Ly8gUmV0dXJuczogdGhlIGZvbnQgZmFtaWx5IG9yIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUgcmVx
dWVzdCBjb3VsZCBub3QgYmUKICAgICAvLyBzYXRpc2ZpZWQuCiAgICAgV0VCS0lUX0FQSSBzdGF0
aWMgV2ViQ1N0cmluZyBmYW1pbHlGb3JDaGFycyhjb25zdCBXZWJVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IG51bUNoYXJhY3RlcnMpOworICAgIC8vIEZpbGwgb3V0IHRoZSBnaXZlbiBXZWJGb250
UmVuZGVyU3R5bGUgd2l0aCB0aGUgdXNlcidzIHByZWZlcmVuY2VzIGZvcgorICAgIC8vIHJlbmRl
cmluZyB0aGUgZ2l2ZW4gZm9udCBhdCB0aGUgZ2l2ZW4gc2l6ZS4KKyAgICAvLyAgIGZhbWlseTog
aS5lLiAiVGltZXMgTmV3IFJvbWFuIgorICAgIC8vICAgc2l6ZUFuZFN0eWxlOgorICAgIC8vICAg
ICAgMzMyMjIyMjIyMjIyMTExMTExMTExMQorICAgIC8vICAgICAgMTA5ODc2NTQzMjEwOTg3NjU0
MzIxMDk4NzY1NDMyMTAKKyAgICAvLyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tKworICAgIC8vICAgICB8Li4uLi4uLi4uLi4uLi5TaXplLi4uLi4uLi4uLi4uSUJ8CisgICAg
Ly8gICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAvLyAgICAgSTog
aXRhbGljIGZsYWcKKyAgICAvLyAgICAgQjogYm9sZCBmbGFnCisgICAgV0VCS0lUX0FQSSBzdGF0
aWMgdm9pZCByZW5kZXJTdHlsZUZvclN0cmlrZShXZWJGb250UmVuZGVyU3R5bGUqIHJlc3VsdCwg
Y29uc3QgY2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlKTsKIH07CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYktpdApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9saW51eC9XZWJG
b250UmVuZGVyU3R5bGUuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbGludXgvV2ViRm9udFJl
bmRlclN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiMTgwZgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbGludXgvV2ViRm9udFJl
bmRlclN0eWxlLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgV2ViRm9udFJlbmRlclN0eWxlX2gK
KyNkZWZpbmUgV2ViRm9udFJlbmRlclN0eWxlX2gKKworI2luY2x1ZGUgIi4uL1dlYkNvbW1vbi5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7IHN0cnVjdCBGb250UmVuZGVyU3R5bGU7IH0KKworbmFt
ZXNwYWNlIFdlYktpdCB7CisKK3N0cnVjdCBXZWJGb250UmVuZGVyU3R5bGUgeworICAgIC8vIEVh
Y2ggb2YgdGhlIHVzZSogbWVtYmVycyBiZWxvdyBjYW4gdGFrZSBvbmUgb2YgdGhyZWUgdmFsdWVz
OgorICAgIC8vICAgMDogb2ZmCisgICAgLy8gICAxOiBvbgorICAgIC8vICAgMjogbm8gcHJlZmVy
ZW5jZSBleHByZXNzZWQKKyAgICBjaGFyIHVzZUJpdG1hcHM7IC8vIHVzZSBlbWJlZGRlZCBiaXRt
YXAgc3RyaWtlIGlmIHBvc3NpYmxlCisgICAgY2hhciB1c2VBdXRvSGludDsgLy8gdXNlICdhdXRv
JyBoaW50aW5nIChGcmVlVHlwZSBzcGVjaWZpYykKKyAgICBjaGFyIHVzZUhpbnRpbmc7IC8vIGhp
bnQgZ2x5cGhzIHRvIHRoZSBwaXhlbCBncmlkCisgICAgY2hhciBoaW50U3R5bGU7IC8vIGxldmVs
IG9mIGhpbnRpbmcsIDAuLjMKKyAgICBjaGFyIHVzZUFudGlBbGlhczsgLy8gYW50aWFsaWFzIGds
eXBoIHNoYXBlcworICAgIGNoYXIgdXNlU3VicGl4ZWw7IC8vIHVzZSBzdWJwaXhlbCBhbnRpYWxp
YXMKKworI2lmZGVmIFdFQktJVF9JTVBMRU1FTlRBVElPTgorICAgIC8vIFRyYW5zbGF0ZXMgdGhl
IG1lbWJlcnMgb2YgdGhpcyBzdHJ1Y3QgdG8gYSBGb250UmVuZGVyU3R5bGUKKyAgICB2b2lkIHRv
Rm9udFJlbmRlclN0eWxlKFdlYkNvcmU6OkZvbnRSZW5kZXJTdHlsZSopOworI2VuZGlmCisKKyAg
ICB2b2lkIHNldERlZmF1bHRzKCk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJLaXQKKworI2Vu
ZGlmIC8vIFdlYkZvbnRSZW5kZXJTdHlsZV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL2xpbnV4L1dlYlNhbmRib3hTdXBwb3J0LmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGlj
L2xpbnV4L1dlYlNhbmRib3hTdXBwb3J0LmgKaW5kZXggNWVkY2ViMi4uZDFhMWFiNCAxMDA2NDQK
LS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9saW51eC9XZWJTYW5kYm94U3VwcG9ydC5oCisr
KyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbGludXgvV2ViU2FuZGJveFN1cHBvcnQuaApAQCAt
MzYsNiArMzYsOCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAorc3RydWN0IFdlYkZvbnRSZW5k
ZXJTdHlsZTsKKwogLy8gUHV0IG1ldGhvZHMgaGVyZSB0aGF0IGFyZSByZXF1aXJlZCBkdWUgdG8g
c2FuZGJveCByZXN0cmljdGlvbnMuCiBjbGFzcyBXZWJTYW5kYm94U3VwcG9ydCB7CiBwdWJsaWM6
CkBAIC00OSw2ICs1MSw3IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zIGEgc3RyaW5nIHdpdGgg
dGhlIGZvbnQgZmFtaWx5IG9uIGFuIGVtcHR5IHN0cmluZyBpZiB0aGUKICAgICAvLyByZXF1ZXN0
IGNhbm5vdCBiZSBzYXRpc2ZpZWQuCiAgICAgdmlydHVhbCBXZWJTdHJpbmcgZ2V0Rm9udEZhbWls
eUZvckNoYXJhY3RlcnMoY29uc3QgV2ViVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFy
YWN0ZXJzKSA9IDA7CisgICAgdmlydHVhbCB2b2lkIGdldFJlbmRlclN0eWxlRm9yU3RyaWtlKFdl
YkZvbnRSZW5kZXJTdHlsZSogc3R5bGUsIGNvbnN0IGNoYXIqIGZhbWlseSwgaW50IHNpemVBbmRT
dHlsZSkgPSAwOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21pdW1CcmlkZ2UuY3BwCmluZGV4IDM5YTE1NWYuLjM4YjYzNzAgMTAwNjQ0Ci0tLSBhL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwCkBAIC02NCw2ICs2NCw3IEBACiAjaWYgUExBVEZPUk0o
TElOVVgpCiAjaW5jbHVkZSAiV2ViU2FuZGJveFN1cHBvcnQuaCIKICNpbmNsdWRlICJXZWJGb250
SW5mby5oIgorI2luY2x1ZGUgIldlYkZvbnRSZW5kZXJTdHlsZS5oIgogI2VuZGlmCiAKICNpZiBX
RUJLSVRfVVNJTkdfU0tJQQpAQCAtMzAyLDYgKzMwMywxOCBAQCBTdHJpbmcgQ2hyb21pdW1Ccmlk
Z2U6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBz
aXplXwogCiAgICAgcmV0dXJuIFdlYlN0cmluZygpOwogfQorCit2b2lkIENocm9taXVtQnJpZGdl
OjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShGb250UmVuZGVyU3R5bGUqIHJlc3VsdCwgY29uc3Qg
Y2hhciogZm9udCwgaW50IHNpemVBbmRTdHlsZSkKK3sKKyAgICBXZWJGb250UmVuZGVyU3R5bGUg
c3R5bGU7CisKKyAgICBpZiAod2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCkpCisgICAg
ICAgIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRSZW5kZXJTdHlsZUZvclN0
cmlrZSgmc3R5bGUsIGZvbnQsIHNpemVBbmRTdHlsZSk7CisgICAgZWxzZQorICAgICAgICBXZWJG
b250SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2UoJnN0eWxlLCBmb250LCBzaXplQW5kU3R5bGUp
OworCisgICAgc3R5bGUudG9Gb250UmVuZGVyU3R5bGUocmVzdWx0KTsKK30KICNlbmRpZgogCiAv
LyBIVE1MNSBEQiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vc3JjL2d0
ay9XZWJGb250SW5mby5jcHAgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2d0ay9XZWJGb250SW5mby5j
cHAKaW5kZXggNzZlZDYxOC4uMTA5ZTUyOSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9ndGsvV2ViRm9udEluZm8uY3BwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dlYkZv
bnRJbmZvLmNwcApAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiV2ViRm9udEluZm8uaCIKKyNpbmNsdWRlICJXZWJGb250UmVuZGVyU3R5bGUuaCIKIAog
I2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgpA
QCAtMTA0LDQgKzEwNSw2OCBAQCBXZWJDU3RyaW5nIFdlYkZvbnRJbmZvOjpmYW1pbHlGb3JDaGFy
cyhjb25zdCBXZWJVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYQogICAgIHJldHVybiBX
ZWJDU3RyaW5nKCk7CiB9CiAKK3ZvaWQgV2ViRm9udEluZm86OnJlbmRlclN0eWxlRm9yU3RyaWtl
KFdlYkZvbnRSZW5kZXJTdHlsZSogb3V0LCBjb25zdCBjaGFyKiBmYW1pbHksIGludCBzaXplQW5k
U3R5bGUpCit7CisgICAgYm9vbCBpc0JvbGQgPSBzaXplQW5kU3R5bGUgJiAxOworICAgIGJvb2wg
aXNJdGFsaWMgPSBzaXplQW5kU3R5bGUgJiAyOworICAgIGludCBwaXhlbFNpemUgPSBzaXplQW5k
U3R5bGUgPj4gMjsKKworICAgIEZjUGF0dGVybiogcGF0dGVybiA9IEZjUGF0dGVybkNyZWF0ZSgp
OworICAgIEZjVmFsdWUgZmN2YWx1ZTsKKworICAgIGZjdmFsdWUudHlwZSA9IEZjVHlwZVN0cmlu
ZzsKKyAgICBmY3ZhbHVlLnUucyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCAqPihm
YW1pbHkpOworICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19GQU1JTFksIGZjdmFsdWUsIDAp
OworCisgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBlSW50ZWdlcjsKKyAgICBmY3ZhbHVlLnUuaSA9
IGlzQm9sZCA/IEZDX1dFSUdIVF9CT0xEIDogRkNfV0VJR0hUX05PUk1BTDsKKyAgICBGY1BhdHRl
cm5BZGQocGF0dGVybiwgRkNfV0VJR0hULCBmY3ZhbHVlLCAwKTsKKworICAgIGZjdmFsdWUudHlw
ZSA9IEZjVHlwZUludGVnZXI7CisgICAgZmN2YWx1ZS51LmkgPSBpc0l0YWxpYyA/IEZDX1NMQU5U
X0lUQUxJQyA6IEZDX1NMQU5UX1JPTUFOOworICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19T
TEFOVCwgZmN2YWx1ZSwgMCk7CisKKyAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVCb29sOworICAg
IGZjdmFsdWUudS5iID0gRmNUcnVlOworICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19TQ0FM
QUJMRSwgZmN2YWx1ZSwgMCk7CisKKyAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVEb3VibGU7Cisg
ICAgZmN2YWx1ZS51LmQgPSBwaXhlbFNpemU7CisgICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZD
X1NJWkUsIGZjdmFsdWUsIDApOworCisgICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4s
IEZjTWF0Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOworCisg
ICAgRmNSZXN1bHQgcmVzdWx0OworICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgZm9udGNvbmZpZyBk
b24ndCBhY3R1YWxseSB3cml0ZSBhIHZhbHVlIGludG8gcmVzdWx0LgorICAgIC8vIEhvd2V2ZXIs
IGl0J3Mgbm90IGNsZWFyIGZyb20gdGhlIGRvY3VtZW50YXRpb24gaWYgcmVzdWx0IHNob3VsZCBi
ZSBhCisgICAgLy8gbm9uLU5VTEwgcG9pbnRlcjogZnV0dXJlIHZlcnNpb25zIG1pZ2h0IGV4cGVj
dCB0byBiZSBhYmxlIHRvIHdyaXRlIHRvCisgICAgLy8gaXQuIFNvIHdlIHBhc3MgaW4gYSB2YWxp
ZCBwb2ludGVyIGFuZCBpZ25vcmUgaXQuCisgICAgRmNQYXR0ZXJuKiBtYXRjaCA9IEZjRm9udE1h
dGNoKDAsIHBhdHRlcm4sICZyZXN1bHQpOworICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVybik7
CisKKyAgICBvdXQtPnNldERlZmF1bHRzKCk7CisKKyAgICBpZiAoIW1hdGNoKSB7CisgICAgICAg
IEZjUGF0dGVybkRlc3Ryb3kobWF0Y2gpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
RmNCb29sIGI7CisgICAgaW50IGk7CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChtYXRjaCwg
RkNfQU5USUFMSUFTLCAwLCAmYikgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAgb3V0LT51c2VB
bnRpQWxpYXMgPSBiOworICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKG1hdGNoLCBGQ19FTUJFRERF
RF9CSVRNQVAsIDAsICZiKSA9PSBGY1Jlc3VsdE1hdGNoKQorICAgICAgICBvdXQtPnVzZUJpdG1h
cHMgPSBiOworICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKG1hdGNoLCBGQ19BVVRPSElOVCwgMCwg
JmIpID09IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgIG91dC0+dXNlQXV0b0hpbnQgPSBiOworICAg
IGlmIChGY1BhdHRlcm5HZXRCb29sKG1hdGNoLCBGQ19ISU5USU5HLCAwLCAmYikgPT0gRmNSZXN1
bHRNYXRjaCkKKyAgICAgICAgb3V0LT51c2VIaW50aW5nID0gYjsKKyAgICBpZiAoRmNQYXR0ZXJu
R2V0SW50ZWdlcihtYXRjaCwgRkNfSElOVF9TVFlMRSwgMCwgJmkpID09IEZjUmVzdWx0TWF0Y2gp
CisgICAgICAgIG91dC0+aGludFN0eWxlID0gaTsKKworICAgIEZjUGF0dGVybkRlc3Ryb3kobWF0
Y2gpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zZDk5NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCisKKyNpbmNsdWRlICJG
b250UmVuZGVyU3R5bGUuaCIKKwordXNpbmcgV2ViQ29yZTo6Rm9udFJlbmRlclN0eWxlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJGb250UmVuZGVyU3R5bGU6OnRvRm9udFJlbmRl
clN0eWxlKFdlYkNvcmU6OkZvbnRSZW5kZXJTdHlsZSogb3V0KQoreworICAgIG91dC0+dXNlQml0
bWFwcyA9IHVzZUJpdG1hcHM7CisgICAgb3V0LT51c2VBdXRvSGludCA9IHVzZUF1dG9IaW50Owor
ICAgIG91dC0+dXNlSGludGluZyA9IHVzZUhpbnRpbmc7CisgICAgb3V0LT5oaW50U3R5bGUgPSBo
aW50U3R5bGU7CisgICAgb3V0LT51c2VBbnRpQWxpYXMgPSB1c2VBbnRpQWxpYXM7CisgICAgb3V0
LT51c2VTdWJwaXhlbCA9IHVzZVN1YnBpeGVsOworfQorCit2b2lkIFdlYkZvbnRSZW5kZXJTdHls
ZTo6c2V0RGVmYXVsdHMoKQoreworICAgIHVzZUJpdG1hcHMgPSAyOworICAgIHVzZUF1dG9IaW50
ID0gMjsKKyAgICB1c2VIaW50aW5nID0gMjsKKyAgICBoaW50U3R5bGUgPSAwOworICAgIHVzZUFu
dGlBbGlhcyA9IDI7CisgICAgdXNlU3VicGl4ZWwgPSAyOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45685</attachid>
            <date>2009-12-30 14:20:28 -0800</date>
            <delta_ts>2010-01-05 17:51:12 -0800</delta_ts>
            <desc>patch v3: two sided so please don&apos;t cq+</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25485</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWMwOWJmZC4uY2I2OGVmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0xMi0zMCAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgZm9udGNvbmZpZyBvbiBMaW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJl
ZmVyZW5jZXMgb24gYSBwZXIgc3RyaWtlCisgICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJp
bmF0aW9uIG9mIGZhY2UgYW5kIHNpemUpLiBCZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5l
ZWQgdG8gcXVlcnkgZm9udGNvbmZpZyBlYWNoIHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBp
cyBjcmVhdGVkCisgICAgICAgIGZvciBhIG5ldyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBzdXBwb3J0IGZvciBxdWVyeWluZyB0aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6IGFkZCBnZXRSZW5kZXJT
dHlsZUZvclN0cmlrZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
YWNoZUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpx
dWVyeVN0eWxlKToKKyAgICAgICAgICBhZGQgY29kZSB0byBxdWVyeSBmb250Y29uZmlnIHZpYSBD
aHJvbWl1bUJyaWRnZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQ
bGF0Zm9ybURhdGFMaW51eC5oOgorCiAyMDA5LTEyLTMwICBEaW1pdHJpIEdsYXprb3YgIDxkZ2xh
emtvdkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgYnVpbGQgZml4LgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IDM3MDlmN2MuLjcx
OTAwMDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKQEAg
LTYyLDYgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0IENvb2tpZTsK
ICAgICBzdHJ1Y3QgUGx1Z2luSW5mbzsKKyAgICBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiAg
ICAgLy8gQW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUg
YWJpbGl0eSB0byBhbnN3ZXIKICAgICAvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQg
c28gb24uLi4KQEAgLTEwOSw2ICsxMTAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyBib29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCk7CiAjZW5kaWYKICNpZiBQ
TEFURk9STShMSU5VWCkKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJp
a2UoRm9udFJlbmRlclN0eWxlKiByZXN1bHQsIGNvbnN0IGNoYXIqIGZhbWlseSwgaW50IHNpemVB
bmRTdHlsZSk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgZ2V0Rm9udEZhbWlseUZvckNoYXJhY3Rl
cnMoY29uc3QgVUNoYXIqLCBzaXplX3QgbnVtQ2hhcmFjdGVycyk7CiAjZW5kaWYKIApkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5j
cHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNw
cAppbmRleCAzZmUxNTYxLi42NzE4ODQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcApAQCAtMTQ1LDYgKzE0NSw3IEBA
IEZvbnRQbGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25z
dCBGb250RGVzY3JpcHRpb24mIGZvbnRECiAKICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQg
PQogICAgICAgICBuZXcgRm9udFBsYXRmb3JtRGF0YSh0ZiwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0
aW9uLmNvbXB1dGVkU2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUg
JiBTa1R5cGVmYWNlOjprQm9sZCkgJiYgIXRmLT5pc0JvbGQoKSwKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0l0YWxpYykgJiYgIXRmLT5pc0l0YWxp
YygpKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmluZGV4IGE5MDIwNTcuLjBmOWJmMzYgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBs
YXRmb3JtRGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIEZvbnRQbGF0Zm9y
bURhdGEgRm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwg
Ym9vbCBib2xkLCBiCiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNpemUpOwog
I2VsaWYgUExBVEZPUk0oTElOVVgpCiAgICAgQVNTRVJUKG1fZm9udFJlZmVyZW5jZSk7Ci0gICAg
cmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCBzaXplLCBib2xkICYmICFt
X2ZvbnRSZWZlcmVuY2UtPmlzQm9sZCgpLCBpdGFsaWMgJiYgIW1fZm9udFJlZmVyZW5jZS0+aXNJ
dGFsaWMoKSk7CisgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCAi
Iiwgc2l6ZSwgYm9sZCAmJiAhbV9mb250UmVmZXJlbmNlLT5pc0JvbGQoKSwgaXRhbGljICYmICFt
X2ZvbnRSZWZlcmVuY2UtPmlzSXRhbGljKCkpOwogI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgp
OwogICAgIHJldHVybiBGb250UGxhdGZvcm1EYXRhKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAK
aW5kZXggYmY0Njk3Zi4uYTc0YjU0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApAQCAtMzEs
NiArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURh
dGEuaCIKIAorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiSGFyZmJ1enpT
a2lhLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgpAQCAtNjYsMzEgKzY3LDM3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRI
YXJmYnV6ekZhY2U6On5SZWZDb3VudGVkSGFyZmJ1enpGYWNlKCkKIAogRm9udFBsYXRmb3JtRGF0
YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCiAgICAgOiBt
X3R5cGVmYWNlKHNyYy5tX3R5cGVmYWNlKQorICAgICwgbV9mYW1pbHkoc3JjLm1fZmFtaWx5KQog
ICAgICwgbV90ZXh0U2l6ZShzcmMubV90ZXh0U2l6ZSkKICAgICAsIG1fZmFrZUJvbGQoc3JjLm1f
ZmFrZUJvbGQpCiAgICAgLCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKKyAgICAsIG1f
c3R5bGUoc3JjLm1fc3R5bGUpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZh
Y2UpCiB7CiAgICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOwogfQogCi1Gb250UGxhdGZvcm1EYXRh
OjpGb250UGxhdGZvcm1EYXRhKFNrVHlwZWZhY2UqIHRmLCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBm
YWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3Jt
RGF0YShTa1R5cGVmYWNlKiB0ZiwgY29uc3QgY2hhciogZmFtaWx5LCBmbG9hdCB0ZXh0U2l6ZSwg
Ym9vbCBmYWtlQm9sZCwgYm9vbCBmYWtlSXRhbGljKQogICAgIDogbV90eXBlZmFjZSh0ZikKKyAg
ICAsIG1fZmFtaWx5KGZhbWlseSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAgICAgLCBt
X2Zha2VCb2xkKGZha2VCb2xkKQogICAgICwgbV9mYWtlSXRhbGljKGZha2VJdGFsaWMpCiB7CiAg
ICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUo
KTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxh
dGZvcm1EYXRhJiBzcmMsIGZsb2F0IHRleHRTaXplKQogICAgIDogbV90eXBlZmFjZShzcmMubV90
eXBlZmFjZSkKKyAgICAsIG1fZmFtaWx5KHNyYy5tX2ZhbWlseSkKICAgICAsIG1fdGV4dFNpemUo
dGV4dFNpemUpCiAgICAgLCBtX2Zha2VCb2xkKHNyYy5tX2Zha2VCb2xkKQogICAgICwgbV9mYWtl
SXRhbGljKHNyYy5tX2Zha2VJdGFsaWMpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJm
YnV6ekZhY2UpCiB7CiAgICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3lzdGVt
Rm9yUmVuZGVyU3R5bGUoKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURh
dGEoKQpAQCAtMTAyLDEwICsxMDksMTIgQEAgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3Jt
RGF0YTo6b3BlcmF0b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKIHsKICAgICBTa1Jl
ZkNudF9TYWZlQXNzaWduKG1fdHlwZWZhY2UsIHNyYy5tX3R5cGVmYWNlKTsKIAorICAgIG1fZmFt
aWx5ID0gc3JjLm1fZmFtaWx5OwogICAgIG1fdGV4dFNpemUgPSBzcmMubV90ZXh0U2l6ZTsKICAg
ICBtX2Zha2VCb2xkID0gc3JjLm1fZmFrZUJvbGQ7CiAgICAgbV9mYWtlSXRhbGljID0gc3JjLm1f
ZmFrZUl0YWxpYzsKICAgICBtX2hhcmZidXp6RmFjZSA9IHNyYy5tX2hhcmZidXp6RmFjZTsKKyAg
ICBtX3N0eWxlID0gc3JjLm1fc3R5bGU7CiAKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC0xMjEs
MTMgKzEzMCwxNSBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldHVwUGFpbnQoU2tQYWludCog
cGFpbnQpIGNvbnN0CiB7CiAgICAgY29uc3QgZmxvYXQgdHMgPSBtX3RleHRTaXplID4gMCA/IG1f
dGV4dFNpemUgOiAxMjsKIAotICAgIHBhaW50LT5zZXRBbnRpQWxpYXMoaXNTa2lhQW50aUFsaWFz
KTsKLSAgICBwYWludC0+c2V0SGludGluZyhza2lhSGludGluZyk7Ci0gICAgcGFpbnQtPnNldExD
RFJlbmRlclRleHQoaXNTa2lhU3VicGl4ZWxHbHlwaHMpOworICAgIHBhaW50LT5zZXRBbnRpQWxp
YXMobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gRm9udFJlbmRlclN0eWxlOjprTm9QcmVmZXJlbmNl
ID8gaXNTa2lhQW50aUFsaWFzIDogbV9zdHlsZS51c2VBbnRpQWxpYXMpOworICAgIHBhaW50LT5z
ZXRIaW50aW5nKG1fc3R5bGUudXNlSGludGluZyA9PSBGb250UmVuZGVyU3R5bGU6OmtOb1ByZWZl
cmVuY2UgPyBza2lhSGludGluZyA6IChTa1BhaW50OjpIaW50aW5nKSBtX3N0eWxlLmhpbnRTdHls
ZSk7CiAgICAgcGFpbnQtPnNldFRleHRTaXplKFNrRmxvYXRUb1NjYWxhcih0cykpOwogICAgIHBh
aW50LT5zZXRUeXBlZmFjZShtX3R5cGVmYWNlKTsKICAgICBwYWludC0+c2V0RmFrZUJvbGRUZXh0
KG1fZmFrZUJvbGQpOwogICAgIHBhaW50LT5zZXRUZXh0U2tld1gobV9mYWtlSXRhbGljID8gLVNL
X1NjYWxhcjEgLyA0IDogMCk7CisKKyAgICBpZiAobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gMSB8
fCBtX3N0eWxlLnVzZUFudGlBbGlhcyA9PSBGb250UmVuZGVyU3R5bGU6OmtOb1ByZWZlcmVuY2Ug
JiYgaXNTa2lhQW50aUFsaWFzKQorICAgICAgICBwYWludC0+c2V0TENEUmVuZGVyVGV4dChtX3N0
eWxlLnVzZVN1YnBpeGVsID09IEZvbnRSZW5kZXJTdHlsZTo6a05vUHJlZmVyZW5jZSA/IGlzU2tp
YVN1YnBpeGVsR2x5cGhzIDogbV9zdHlsZS51c2VTdWJwaXhlbCk7CiB9CiAKIFNrRm9udElEIEZv
bnRQbGF0Zm9ybURhdGE6OnVuaXF1ZUlEKCkgY29uc3QKQEAgLTE4NCw0ICsxOTUsMjEgQEAgSEJf
RmFjZVJlY18qIEZvbnRQbGF0Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CiAgICAgcmV0
dXJuIG1faGFyZmJ1enpGYWNlLT5mYWNlKCk7CiB9CiAKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6
cXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpCit7CisgICAgaWYgKG1fZmFtaWx5Lmxlbmd0aCgp
KSB7CisgICAgICAgIC8vIFdlIGRvbid0IGhhdmUgYSBmYW1pbHkgZm9yIHRoaXMuIFByb2JhYmx5
IGJlY2F1c2UgaXQncyBhIHdlYmZvbnQuIFdlCisgICAgICAgIC8vIHNldCBhbGwgdGhlIHZhbHVl
cyB0byAnbm8gcHJlZmVyZW5jZScgYW5kIHRha2UgdGhlIGRlZmF1bHRzIHBhc3NlZAorICAgICAg
ICAvLyBpbiBmcm9tIFhTRVRUSU5HUy4KKyAgICAgICAgbV9zdHlsZS51c2VCaXRtYXBzID0gRm9u
dFJlbmRlclN0eWxlOjprTm9QcmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZUF1dG9IaW50
ID0gRm9udFJlbmRlclN0eWxlOjprTm9QcmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZUhp
bnRpbmcgPSBGb250UmVuZGVyU3R5bGU6OmtOb1ByZWZlcmVuY2U7CisgICAgICAgIG1fc3R5bGUu
dXNlQW50aUFsaWFzID0gRm9udFJlbmRlclN0eWxlOjprTm9QcmVmZXJlbmNlOworICAgICAgICBt
X3N0eWxlLnVzZVN1YnBpeGVsID0gRm9udFJlbmRlclN0eWxlOjprTm9QcmVmZXJlbmNlOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxl
Rm9yU3RyaWtlKCZtX3N0eWxlLCBtX2ZhbWlseS5kYXRhKCksICgoKGludCltX3RleHRTaXplKSA8
PCAyKSB8IChtX3R5cGVmYWNlLT5zdHlsZSgpICYgMykpOworfQorCiB9ICAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250UGxhdGZvcm1EYXRhTGludXguaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmgKaW5kZXggMjljZThlNy4uNTg1NDcxZSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRh
TGludXguaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0
Zm9ybURhdGFMaW51eC5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIEZvbnRQbGF0Zm9ybURh
dGFMaW51eF9oCiAjZGVmaW5lIEZvbnRQbGF0Zm9ybURhdGFMaW51eF9oCiAKKyNpbmNsdWRlICJD
U3RyaW5nLmgiCisjaW5jbHVkZSAiRm9udFJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3RyaW5n
SW1wbC5oIgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDxTa1BhaW50Lmg+CkBA
IC00Myw3ICs0NSw2IEBAIHN0cnVjdCBIQl9GYWNlUmVjXzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgRm9udERlc2NyaXB0aW9uOwotY2xhc3MgU3RyaW5nOwogCiAvLyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQogLy8gRm9udFBsYXRmb3JtRGF0YSBpcyB0aGUgaGFuZGxlIHdoaWNoIFdlYktp
dCBoYXMgb24gYSBzcGVjaWZpYyBmYWNlLiBBIGZhY2UKQEAgLTc5LDcgKzgwLDcgQEAgcHVibGlj
OgogICAgICAgICB7IH0KIAogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3Jt
RGF0YSYpOwotICAgIEZvbnRQbGF0Zm9ybURhdGEoU2tUeXBlZmFjZSosIGZsb2F0IHRleHRTaXpl
LCBib29sIGZha2VCb2xkLCBib29sIGZha2VJdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEo
U2tUeXBlZmFjZSosIGNvbnN0IGNoYXIqIG5hbWUsIGZsb2F0IHRleHRTaXplLCBib29sIGZha2VC
b2xkLCBib29sIGZha2VJdGFsaWMpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBs
YXRmb3JtRGF0YSYgc3JjLCBmbG9hdCB0ZXh0U2l6ZSk7CiAgICAgfkZvbnRQbGF0Zm9ybURhdGEo
KTsKIApAQCAtMTQwLDExICsxNDEsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgSEJfRmFjZVJlY18q
IG1faGFyZmJ1enpGYWNlOwogICAgIH07CiAKKyAgICB2b2lkIHF1ZXJ5U3lzdGVtRm9yUmVuZGVy
U3R5bGUoKTsKKwogICAgIC8vIEZJWE1FOiBDb3VsZCBTa0F1dG9VbnJlZiBiZSB1c2VkIGhlcmU/
CiAgICAgU2tUeXBlZmFjZSogbV90eXBlZmFjZTsKKyAgICBDU3RyaW5nIG1fZmFtaWx5OwogICAg
IGZsb2F0IG1fdGV4dFNpemU7CiAgICAgYm9vbCBtX2Zha2VCb2xkOwogICAgIGJvb2wgbV9mYWtl
SXRhbGljOworICAgIEZvbnRSZW5kZXJTdHlsZSBtX3N0eWxlOwogICAgIG11dGFibGUgUmVmUHRy
PFJlZkNvdW50ZWRIYXJmYnV6ekZhY2U+IG1faGFyZmJ1enpGYWNlOwogCiAgICAgU2tUeXBlZmFj
ZSogaGFzaFRhYmxlRGVsZXRlZEZvbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8U2tUeXBlZmFjZSo+KC0xKTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UmVuZGVyU3R5bGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2hyb21pdW0vRm9udFJlbmRlclN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMC4uNDI5NTdhOAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vRm9udFJlbmRlclN0eWxlLmgKQEAgLTAsMCArMSw1NiBAQAorLyog
Q29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICog
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRp
c3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9y
IHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNl
IG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgRm9udFJlbmRlclN0eWxlX2gKKyNkZWZpbmUgRm9udFJlbmRlclN0eWxlX2gKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCisvLyBGb250UmVuZGVyU3R5bGUgZGVzY3JpYmVzIHRoZSB1c2VyJ3Mg
cHJlZmVyZW5jZXMgZm9yIHJlbmRlcmluZyBhIGZvbnQgYXQgYQorLy8gZ2l2ZW4gc2l6ZS4KK3N0
cnVjdCBGb250UmVuZGVyU3R5bGUgeworICAgIGVudW0geworICAgICAga05vUHJlZmVyZW5jZSA9
IDIsCisgICAgfTsKKworICAgIC8vIEVhY2ggb2YgdGhlIHVzZSogbWVtYmVycyBiZWxvdyBjYW4g
dGFrZSBvbmUgb2YgdGhyZWUgdmFsdWVzOgorICAgIC8vICAgMDogb2ZmCisgICAgLy8gICAxOiBv
bgorICAgIC8vICAga05vUHJlZmVyZW5jZTogbm8gcHJlZmVyZW5jZSBleHByZXNzZWQKKyAgICBj
aGFyIHVzZUJpdG1hcHM7IC8vIHVzZSBlbWJlZGRlZCBiaXRtYXAgc3RyaWtlIGlmIHBvc3NpYmxl
CisgICAgY2hhciB1c2VBdXRvSGludDsgLy8gdXNlICdhdXRvJyBoaW50aW5nIChGcmVlVHlwZSBz
cGVjaWZpYykKKyAgICBjaGFyIHVzZUhpbnRpbmc7IC8vIGhpbnQgZ2x5cGhzIHRvIHRoZSBwaXhl
bCBncmlkCisgICAgY2hhciBoaW50U3R5bGU7IC8vIGxldmVsIG9mIGhpbnRpbmcsIDAuLjMKKyAg
ICBjaGFyIHVzZUFudGlBbGlhczsgLy8gYW50aWFsaWFzIGdseXBoIHNoYXBlcworICAgIGNoYXIg
dXNlU3VicGl4ZWw7IC8vIHVzZSBzdWJwaXhlbCBhbnRpYWxpYXMKK307CisKK30KKworI2VuZGlm
IC8vIEZvbnRSZW5kZXJTdHlsZV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdl
TG9nIGIvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCA3ZjYyMzA5Li5kNjZiYjY0IDEw
MDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAwOS0xMi0zMCAgQWRhbSBMYW5nbGV5ICA8
YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgZm9udGNvbmZpZyBvbiBMaW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJlZmVy
ZW5jZXMgb24gYSBwZXIgc3RyaWtlCisgICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJpbmF0
aW9uIG9mIGZhY2UgYW5kIHNpemUpLiBCZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5lZWQg
dG8gcXVlcnkgZm9udGNvbmZpZyBlYWNoIHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBpcyBj
cmVhdGVkCisgICAgICAgIGZvciBhIG5ldyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRk
cyBzdXBwb3J0IGZvciBxdWVyeWluZyB0aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAgICAg
ICAqIFdlYktpdC5neXA6CisgICAgICAgICogcHVibGljL2d0ay9XZWJGb250SW5mby5oOgorICAg
ICAgICAqIHB1YmxpYy9saW51eC9XZWJTYW5kYm94U3VwcG9ydC5oOgorICAgICAgICAqIHNyYy9D
aHJvbWl1bUJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6Z2V0
UmVuZGVyU3R5bGVGb3JTdHJpa2UpOgorICAgICAgICAqIHNyYy9ndGsvV2ViRm9udEluZm8uY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJGb250SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2UpOgor
CiAyMDA5LTEyLTI4ICBLaW51a28gWWFzdWRhICA8a2ludWtvQGNocm9taXVtLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBNYWNpZWogU3RhY2hvd2lhay4KZGlmZiAtLWdpdCBhL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwIGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKaW5kZXggNDRj
NDBiOS4uYjZmZWRjNSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKQEAgLTgwLDYgKzgwLDcgQEAKICAgICAgICAg
ICAgICdzb3VyY2VzJzogWwogICAgICAgICAgICAgICAgICdwdWJsaWMvZ3RrL1dlYklucHV0RXZl
bnRGYWN0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJsaWMvbGludXgvV2ViRm9udFJlbmRl
cmluZy5oJywKKyAgICAgICAgICAgICAgICAncHVibGljL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHls
ZS5oJywKICAgICAgICAgICAgICAgICAncHVibGljL3gxMS9XZWJTY3JlZW5JbmZvRmFjdG9yeS5o
JywKICAgICAgICAgICAgICAgICAncHVibGljL21hYy9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywK
ICAgICAgICAgICAgICAgICAncHVibGljL21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5oJywKQEAg
LTIyNCw2ICsyMjUsNyBAQAogICAgICAgICAgICAgICAgICdzcmMvSW5zcGVjdG9yQ2xpZW50SW1w
bC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvSW5zcGVjdG9yQ2xpZW50SW1wbC5oJywKICAg
ICAgICAgICAgICAgICAnc3JjL2xpbnV4L1dlYkZvbnRSZW5kZXJpbmcuY3BwJywKKyAgICAgICAg
ICAgICAgICAnc3JjL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMveDExL1dlYlNjcmVlbkluZm9GYWN0b3J5LmNwcCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9tYWMvV2ViSW5wdXRFdmVudEZhY3RvcnkubW0nLAogICAgICAgICAgICAgICAgICdzcmMv
bWFjL1dlYlNjcmVlbkluZm9GYWN0b3J5Lm1tJywKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvZ3RrL1dlYkZvbnRJbmZvLmggYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL2d0ay9X
ZWJGb250SW5mby5oCmluZGV4IGFkMzc2ODAuLjI2NTZhODUgMTAwNjQ0Ci0tLSBhL1dlYktpdC9j
aHJvbWl1bS9wdWJsaWMvZ3RrL1dlYkZvbnRJbmZvLmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9ndGsvV2ViRm9udEluZm8uaApAQCAtMzIsNiArMzIsNyBAQAogI2RlZmluZSBXZWJGb250
SW5mb19oCiAKICNpbmNsdWRlICIuLi9XZWJDU3RyaW5nLmgiCisjaW5jbHVkZSAiLi4vbGludXgv
V2ViRm9udFJlbmRlclN0eWxlLmgiCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDx1
bmlzdGQuaD4KQEAgLTQ4LDYgKzQ5LDE4IEBAIHB1YmxpYzoKICAgICAvLyBSZXR1cm5zOiB0aGUg
Zm9udCBmYW1pbHkgb3IgYW4gZW1wdHkgc3RyaW5nIGlmIHRoZSByZXF1ZXN0IGNvdWxkIG5vdCBi
ZQogICAgIC8vIHNhdGlzZmllZC4KICAgICBXRUJLSVRfQVBJIHN0YXRpYyBXZWJDU3RyaW5nIGZh
bWlseUZvckNoYXJzKGNvbnN0IFdlYlVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hhcmFj
dGVycyk7CisgICAgLy8gRmlsbCBvdXQgdGhlIGdpdmVuIFdlYkZvbnRSZW5kZXJTdHlsZSB3aXRo
IHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yCisgICAgLy8gcmVuZGVyaW5nIHRoZSBnaXZlbiBm
b250IGF0IHRoZSBnaXZlbiBzaXplLgorICAgIC8vICAgZmFtaWx5OiBpLmUuICJUaW1lcyBOZXcg
Um9tYW4iCisgICAgLy8gICBzaXplQW5kU3R5bGU6CisgICAgLy8gICAgICAzMzIyMjIyMjIyMjIx
MTExMTExMTExCisgICAgLy8gICAgICAxMDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMAor
ICAgIC8vICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgLy8gICAg
IHwuLi4uLi4uLi4uLi4uLlNpemUuLi4uLi4uLi4uLi5JQnwKKyAgICAvLyAgICAgKy0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICAgIC8vICAgICBJOiBpdGFsaWMgZmxhZworICAg
IC8vICAgICBCOiBib2xkIGZsYWcKKyAgICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHJlbmRlclN0
eWxlRm9yU3RyaWtlKFdlYkZvbnRSZW5kZXJTdHlsZSogcmVzdWx0LCBjb25zdCBjaGFyKiBmYW1p
bHksIGludCBzaXplQW5kU3R5bGUpOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYg
LS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5o
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2IxODBmCi0tLSAvZGV2L251bGwKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaApAQCAt
MCwwICsxLDYyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBt
ZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBXZWJGb250UmVuZGVyU3R5bGVfaAorI2RlZmluZSBXZWJGb250
UmVuZGVyU3R5bGVfaAorCisjaW5jbHVkZSAiLi4vV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsgc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsgfQorCituYW1lc3BhY2UgV2ViS2l0IHsK
Kworc3RydWN0IFdlYkZvbnRSZW5kZXJTdHlsZSB7CisgICAgLy8gRWFjaCBvZiB0aGUgdXNlKiBt
ZW1iZXJzIGJlbG93IGNhbiB0YWtlIG9uZSBvZiB0aHJlZSB2YWx1ZXM6CisgICAgLy8gICAwOiBv
ZmYKKyAgICAvLyAgIDE6IG9uCisgICAgLy8gICAyOiBubyBwcmVmZXJlbmNlIGV4cHJlc3NlZAor
ICAgIGNoYXIgdXNlQml0bWFwczsgLy8gdXNlIGVtYmVkZGVkIGJpdG1hcCBzdHJpa2UgaWYgcG9z
c2libGUKKyAgICBjaGFyIHVzZUF1dG9IaW50OyAvLyB1c2UgJ2F1dG8nIGhpbnRpbmcgKEZyZWVU
eXBlIHNwZWNpZmljKQorICAgIGNoYXIgdXNlSGludGluZzsgLy8gaGludCBnbHlwaHMgdG8gdGhl
IHBpeGVsIGdyaWQKKyAgICBjaGFyIGhpbnRTdHlsZTsgLy8gbGV2ZWwgb2YgaGludGluZywgMC4u
MworICAgIGNoYXIgdXNlQW50aUFsaWFzOyAvLyBhbnRpYWxpYXMgZ2x5cGggc2hhcGVzCisgICAg
Y2hhciB1c2VTdWJwaXhlbDsgLy8gdXNlIHN1YnBpeGVsIGFudGlhbGlhcworCisjaWZkZWYgV0VC
S0lUX0lNUExFTUVOVEFUSU9OCisgICAgLy8gVHJhbnNsYXRlcyB0aGUgbWVtYmVycyBvZiB0aGlz
IHN0cnVjdCB0byBhIEZvbnRSZW5kZXJTdHlsZQorICAgIHZvaWQgdG9Gb250UmVuZGVyU3R5bGUo
V2ViQ29yZTo6Rm9udFJlbmRlclN0eWxlKik7CisjZW5kaWYKKworICAgIHZvaWQgc2V0RGVmYXVs
dHMoKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViRm9udFJl
bmRlclN0eWxlX2gKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbGludXgvV2Vi
U2FuZGJveFN1cHBvcnQuaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbGludXgvV2ViU2FuZGJv
eFN1cHBvcnQuaAppbmRleCA1ZWRjZWIyLi5kMWExYWI0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL2xpbnV4L1dlYlNhbmRib3hTdXBwb3J0LmgKKysrIGIvV2ViS2l0L2Nocm9t
aXVtL3B1YmxpYy9saW51eC9XZWJTYW5kYm94U3VwcG9ydC5oCkBAIC0zNiw2ICszNiw4IEBACiAK
IG5hbWVzcGFjZSBXZWJLaXQgewogCitzdHJ1Y3QgV2ViRm9udFJlbmRlclN0eWxlOworCiAvLyBQ
dXQgbWV0aG9kcyBoZXJlIHRoYXQgYXJlIHJlcXVpcmVkIGR1ZSB0byBzYW5kYm94IHJlc3RyaWN0
aW9ucy4KIGNsYXNzIFdlYlNhbmRib3hTdXBwb3J0IHsKIHB1YmxpYzoKQEAgLTQ5LDYgKzUxLDcg
QEAgcHVibGljOgogICAgIC8vIFJldHVybnMgYSBzdHJpbmcgd2l0aCB0aGUgZm9udCBmYW1pbHkg
b24gYW4gZW1wdHkgc3RyaW5nIGlmIHRoZQogICAgIC8vIHJlcXVlc3QgY2Fubm90IGJlIHNhdGlz
ZmllZC4KICAgICB2aXJ0dWFsIFdlYlN0cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhj
b25zdCBXZWJVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3RlcnMpID0gMDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoV2ViRm9udFJlbmRlclN0eWxl
KiBzdHlsZSwgY29uc3QgY2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlKSA9IDA7CiB9Owog
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMv
Q2hyb21pdW1CcmlkZ2UuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5j
cHAKaW5kZXggMzlhMTU1Zi4uMzhiNjM3MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9DaHJvbWl1bUJyaWRnZS5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJy
aWRnZS5jcHAKQEAgLTY0LDYgKzY0LDcgQEAKICNpZiBQTEFURk9STShMSU5VWCkKICNpbmNsdWRl
ICJXZWJTYW5kYm94U3VwcG9ydC5oIgogI2luY2x1ZGUgIldlYkZvbnRJbmZvLmgiCisjaW5jbHVk
ZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCiAjZW5kaWYKIAogI2lmIFdFQktJVF9VU0lOR19TS0lB
CkBAIC0zMDIsNiArMzAzLDE4IEBAIFN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Z2V0Rm9udEZhbWls
eUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfCiAKICAgICByZXR1
cm4gV2ViU3RyaW5nKCk7CiB9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxl
Rm9yU3RyaWtlKEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0LCBjb25zdCBjaGFyKiBmb250LCBpbnQg
c2l6ZUFuZFN0eWxlKQoreworICAgIFdlYkZvbnRSZW5kZXJTdHlsZSBzdHlsZTsKKworICAgIGlm
ICh3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKSkKKyAgICAgICAgd2ViS2l0Q2xpZW50
KCktPnNhbmRib3hTdXBwb3J0KCktPmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKCZzdHlsZSwgZm9u
dCwgc2l6ZUFuZFN0eWxlKTsKKyAgICBlbHNlCisgICAgICAgIFdlYkZvbnRJbmZvOjpyZW5kZXJT
dHlsZUZvclN0cmlrZSgmc3R5bGUsIGZvbnQsIHNpemVBbmRTdHlsZSk7CisKKyAgICBzdHlsZS50
b0ZvbnRSZW5kZXJTdHlsZShyZXN1bHQpOworfQogI2VuZGlmCiAKIC8vIEhUTUw1IERCIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dlYkZvbnRJbmZvLmNw
cCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dlYkZvbnRJbmZvLmNwcAppbmRleCA3NmVkNjE4
Li5iNzk0ZjE0IDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL2d0ay9XZWJGb250SW5m
by5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9ndGsvV2ViRm9udEluZm8uY3BwCkBAIC0z
MCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJXZWJGb250SW5m
by5oIgorI2luY2x1ZGUgIldlYkZvbnRSZW5kZXJTdHlsZS5oIgogCiAjaW5jbHVkZSA8Zm9udGNv
bmZpZy9mb250Y29uZmlnLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC01NSwxMSArNTYsMTEg
QEAgV2ViQ1N0cmluZyBXZWJGb250SW5mbzo6ZmFtaWx5Rm9yQ2hhcnMoY29uc3QgV2ViVUNoYXIq
IGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGEKICAgICBGY1ZhbHVlIGZjdmFsdWU7CiAgICAgZmN2
YWx1ZS50eXBlID0gRmNUeXBlQ2hhclNldDsKICAgICBmY3ZhbHVlLnUuYyA9IGNzZXQ7Ci0gICAg
RmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX0NIQVJTRVQsIGZjdmFsdWUsIDApOworICAgIEZjUGF0
dGVybkFkZChwYXR0ZXJuLCBGQ19DSEFSU0VULCBmY3ZhbHVlLCBGY0ZhbHNlKTsKIAogICAgIGZj
dmFsdWUudHlwZSA9IEZjVHlwZUJvb2w7CiAgICAgZmN2YWx1ZS51LmIgPSBGY1RydWU7Ci0gICAg
RmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX1NDQUxBQkxFLCBmY3ZhbHVlLCAwKTsKKyAgICBGY1Bh
dHRlcm5BZGQocGF0dGVybiwgRkNfU0NBTEFCTEUsIGZjdmFsdWUsIEZjRmFsc2UpOwogCiAgICAg
RmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKICAgICBGY0Rl
ZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOwpAQCAtMTA0LDQgKzEwNSw2OCBAQCBXZWJDU3RyaW5n
IFdlYkZvbnRJbmZvOjpmYW1pbHlGb3JDaGFycyhjb25zdCBXZWJVQ2hhciogY2hhcmFjdGVycywg
c2l6ZV90IG51bUNoYQogICAgIHJldHVybiBXZWJDU3RyaW5nKCk7CiB9CiAKK3ZvaWQgV2ViRm9u
dEluZm86OnJlbmRlclN0eWxlRm9yU3RyaWtlKFdlYkZvbnRSZW5kZXJTdHlsZSogb3V0LCBjb25z
dCBjaGFyKiBmYW1pbHksIGludCBzaXplQW5kU3R5bGUpCit7CisgICAgYm9vbCBpc0JvbGQgPSBz
aXplQW5kU3R5bGUgJiAxOworICAgIGJvb2wgaXNJdGFsaWMgPSBzaXplQW5kU3R5bGUgJiAyOwor
ICAgIGludCBwaXhlbFNpemUgPSBzaXplQW5kU3R5bGUgPj4gMjsKKworICAgIEZjUGF0dGVybiog
cGF0dGVybiA9IEZjUGF0dGVybkNyZWF0ZSgpOworICAgIEZjVmFsdWUgZmN2YWx1ZTsKKworICAg
IGZjdmFsdWUudHlwZSA9IEZjVHlwZVN0cmluZzsKKyAgICBmY3ZhbHVlLnUucyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCAqPihmYW1pbHkpOworICAgIEZjUGF0dGVybkFkZChwYXR0
ZXJuLCBGQ19GQU1JTFksIGZjdmFsdWUsIEZjRmFsc2UpOworCisgICAgZmN2YWx1ZS50eXBlID0g
RmNUeXBlSW50ZWdlcjsKKyAgICBmY3ZhbHVlLnUuaSA9IGlzQm9sZCA/IEZDX1dFSUdIVF9CT0xE
IDogRkNfV0VJR0hUX05PUk1BTDsKKyAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfV0VJR0hU
LCBmY3ZhbHVlLCBGY0ZhbHNlKTsKKworICAgIGZjdmFsdWUudHlwZSA9IEZjVHlwZUludGVnZXI7
CisgICAgZmN2YWx1ZS51LmkgPSBpc0l0YWxpYyA/IEZDX1NMQU5UX0lUQUxJQyA6IEZDX1NMQU5U
X1JPTUFOOworICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19TTEFOVCwgZmN2YWx1ZSwgRmNG
YWxzZSk7CisKKyAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVCb29sOworICAgIGZjdmFsdWUudS5i
ID0gRmNUcnVlOworICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19TQ0FMQUJMRSwgZmN2YWx1
ZSwgRmNGYWxzZSk7CisKKyAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVEb3VibGU7CisgICAgZmN2
YWx1ZS51LmQgPSBwaXhlbFNpemU7CisgICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX1NJWkUs
IGZjdmFsdWUsIEZjRmFsc2UpOworCisgICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4s
IEZjTWF0Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOworCisg
ICAgRmNSZXN1bHQgcmVzdWx0OworICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgZm9udGNvbmZpZyBk
b24ndCBhY3R1YWxseSB3cml0ZSBhIHZhbHVlIGludG8gcmVzdWx0LgorICAgIC8vIEhvd2V2ZXIs
IGl0J3Mgbm90IGNsZWFyIGZyb20gdGhlIGRvY3VtZW50YXRpb24gaWYgcmVzdWx0IHNob3VsZCBi
ZSBhCisgICAgLy8gbm9uLU5VTEwgcG9pbnRlcjogZnV0dXJlIHZlcnNpb25zIG1pZ2h0IGV4cGVj
dCB0byBiZSBhYmxlIHRvIHdyaXRlIHRvCisgICAgLy8gaXQuIFNvIHdlIHBhc3MgaW4gYSB2YWxp
ZCBwb2ludGVyIGFuZCBpZ25vcmUgaXQuCisgICAgRmNQYXR0ZXJuKiBtYXRjaCA9IEZjRm9udE1h
dGNoKDAsIHBhdHRlcm4sICZyZXN1bHQpOworICAgIEZjUGF0dGVybkRlc3Ryb3kocGF0dGVybik7
CisKKyAgICBvdXQtPnNldERlZmF1bHRzKCk7CisKKyAgICBpZiAoIW1hdGNoKSB7CisgICAgICAg
IEZjUGF0dGVybkRlc3Ryb3kobWF0Y2gpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
RmNCb29sIGI7CisgICAgaW50IGk7CisKKyAgICBpZiAoRmNQYXR0ZXJuR2V0Qm9vbChtYXRjaCwg
RkNfQU5USUFMSUFTLCAwLCAmYikgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAgb3V0LT51c2VB
bnRpQWxpYXMgPSBiOworICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKG1hdGNoLCBGQ19FTUJFRERF
RF9CSVRNQVAsIDAsICZiKSA9PSBGY1Jlc3VsdE1hdGNoKQorICAgICAgICBvdXQtPnVzZUJpdG1h
cHMgPSBiOworICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKG1hdGNoLCBGQ19BVVRPSElOVCwgMCwg
JmIpID09IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgIG91dC0+dXNlQXV0b0hpbnQgPSBiOworICAg
IGlmIChGY1BhdHRlcm5HZXRCb29sKG1hdGNoLCBGQ19ISU5USU5HLCAwLCAmYikgPT0gRmNSZXN1
bHRNYXRjaCkKKyAgICAgICAgb3V0LT51c2VIaW50aW5nID0gYjsKKyAgICBpZiAoRmNQYXR0ZXJu
R2V0SW50ZWdlcihtYXRjaCwgRkNfSElOVF9TVFlMRSwgMCwgJmkpID09IEZjUmVzdWx0TWF0Y2gp
CisgICAgICAgIG91dC0+aGludFN0eWxlID0gaTsKKworICAgIEZjUGF0dGVybkRlc3Ryb3kobWF0
Y2gpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9z
cmMvbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwLi4zZDk5NTg3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuY3BwCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCisKKyNpbmNsdWRlICJG
b250UmVuZGVyU3R5bGUuaCIKKwordXNpbmcgV2ViQ29yZTo6Rm9udFJlbmRlclN0eWxlOworCitu
YW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJGb250UmVuZGVyU3R5bGU6OnRvRm9udFJlbmRl
clN0eWxlKFdlYkNvcmU6OkZvbnRSZW5kZXJTdHlsZSogb3V0KQoreworICAgIG91dC0+dXNlQml0
bWFwcyA9IHVzZUJpdG1hcHM7CisgICAgb3V0LT51c2VBdXRvSGludCA9IHVzZUF1dG9IaW50Owor
ICAgIG91dC0+dXNlSGludGluZyA9IHVzZUhpbnRpbmc7CisgICAgb3V0LT5oaW50U3R5bGUgPSBo
aW50U3R5bGU7CisgICAgb3V0LT51c2VBbnRpQWxpYXMgPSB1c2VBbnRpQWxpYXM7CisgICAgb3V0
LT51c2VTdWJwaXhlbCA9IHVzZVN1YnBpeGVsOworfQorCit2b2lkIFdlYkZvbnRSZW5kZXJTdHls
ZTo6c2V0RGVmYXVsdHMoKQoreworICAgIHVzZUJpdG1hcHMgPSAyOworICAgIHVzZUF1dG9IaW50
ID0gMjsKKyAgICB1c2VIaW50aW5nID0gMjsKKyAgICBoaW50U3R5bGUgPSAwOworICAgIHVzZUFu
dGlBbGlhcyA9IDI7CisgICAgdXNlU3VicGl4ZWwgPSAyOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQK
</data>
<flag name="commit-queue"
          id="27789"
          type_id="3"
          status="-"
          setter="abarth"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45949</attachid>
            <date>2010-01-05 17:51:12 -0800</date>
            <delta_ts>2010-01-07 15:22:38 -0800</delta_ts>
            <desc>changing NULL to 0 in a comment</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25682</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
OWJjZGM4NC4uNzJiNmVkNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0xMi0zMCAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgZm9udGNvbmZpZyBvbiBMaW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJl
ZmVyZW5jZXMgb24gYSBwZXIgc3RyaWtlCisgICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJp
bmF0aW9uIG9mIGZhY2UgYW5kIHNpemUpLiBCZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5l
ZWQgdG8gcXVlcnkgZm9udGNvbmZpZyBlYWNoIHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBp
cyBjcmVhdGVkCisgICAgICAgIGZvciBhIG5ldyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBzdXBwb3J0IGZvciBxdWVyeWluZyB0aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6IGFkZCBnZXRSZW5kZXJT
dHlsZUZvclN0cmlrZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
YWNoZUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpx
dWVyeVN0eWxlKToKKyAgICAgICAgICBhZGQgY29kZSB0byBxdWVyeSBmb250Y29uZmlnIHZpYSBD
aHJvbWl1bUJyaWRnZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQ
bGF0Zm9ybURhdGFMaW51eC5oOgorCiAyMDEwLTAxLTA1ICBEYXJpbiBBZGxlciAgPGRhcmluQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYW4gQmVybnN0ZWluLgpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oIGIvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IDkyYjRjMTMuLjBiNjNiNjgg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKQEAgLTYyLDYg
KzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0IENvb2tpZTsKICAgICBz
dHJ1Y3QgUGx1Z2luSW5mbzsKKyAgICBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiAgICAgLy8g
QW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUgYWJpbGl0
eSB0byBhbnN3ZXIKICAgICAvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQgc28gb24u
Li4KQEAgLTExMCw2ICsxMTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIHN0YXRp
YyBib29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCk7CiAjZW5kaWYKICNpZiBPUyhMSU5V
WCkKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoRm9udFJlbmRl
clN0eWxlKiByZXN1bHQsIGNvbnN0IGNoYXIqIGZhbWlseSwgaW50IHNpemVBbmRTdHlsZSk7CiAg
ICAgICAgIHN0YXRpYyBTdHJpbmcgZ2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNo
YXIqLCBzaXplX3QgbnVtQ2hhcmFjdGVycyk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAppbmRleCAzZmUx
NTYxLi42NzE4ODQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcApAQCAtMTQ1LDYgKzE0NSw3IEBAIEZvbnRQbGF0Zm9y
bURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250RGVzY3Jp
cHRpb24mIGZvbnRECiAKICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPQogICAgICAgICBu
ZXcgRm9udFBsYXRmb3JtRGF0YSh0ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmFt
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmNvbXB1dGVk
U2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5cGVmYWNl
OjprQm9sZCkgJiYgIXRmLT5pc0JvbGQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
KHN0eWxlICYgU2tUeXBlZmFjZTo6a0l0YWxpYykgJiYgIXRmLT5pc0l0YWxpYygpKTsKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRm
b3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDdXN0
b21QbGF0Zm9ybURhdGEuY3BwCmluZGV4IDY0MzJlMTcuLjc0ZjFlMjYgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q3VzdG9tUGxh
dGZvcm1EYXRhLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEgRm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBib2xkLCBi
CiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNpemUpOwogI2VsaWYgT1MoTElO
VVgpCiAgICAgQVNTRVJUKG1fZm9udFJlZmVyZW5jZSk7Ci0gICAgcmV0dXJuIEZvbnRQbGF0Zm9y
bURhdGEobV9mb250UmVmZXJlbmNlLCBzaXplLCBib2xkICYmICFtX2ZvbnRSZWZlcmVuY2UtPmlz
Qm9sZCgpLCBpdGFsaWMgJiYgIW1fZm9udFJlZmVyZW5jZS0+aXNJdGFsaWMoKSk7CisgICAgcmV0
dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCAiIiwgc2l6ZSwgYm9sZCAmJiAh
bV9mb250UmVmZXJlbmNlLT5pc0JvbGQoKSwgaXRhbGljICYmICFtX2ZvbnRSZWZlcmVuY2UtPmlz
SXRhbGljKCkpOwogI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVybiBGb250
UGxhdGZvcm1EYXRhKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKaW5kZXggYmY0Njk3Zi4uYTc0
YjU0YSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
UGxhdGZvcm1EYXRhTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAorI2luY2x1ZGUg
IkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCiAjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAtNjYsMzEg
KzY3LDM3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRIYXJmYnV6ekZhY2U6On5SZWZD
b3VudGVkSGFyZmJ1enpGYWNlKCkKIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0
YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCiAgICAgOiBtX3R5cGVmYWNlKHNyYy5tX3R5
cGVmYWNlKQorICAgICwgbV9mYW1pbHkoc3JjLm1fZmFtaWx5KQogICAgICwgbV90ZXh0U2l6ZShz
cmMubV90ZXh0U2l6ZSkKICAgICAsIG1fZmFrZUJvbGQoc3JjLm1fZmFrZUJvbGQpCiAgICAgLCBt
X2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKKyAgICAsIG1fc3R5bGUoc3JjLm1fc3R5bGUp
CiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2UpCiB7CiAgICAgbV90eXBl
ZmFjZS0+c2FmZVJlZigpOwogfQogCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZvcm1EYXRh
KFNrVHlwZWZhY2UqIHRmLCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9vbCBmYWtl
SXRhbGljKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShTa1R5cGVmYWNlKiB0
ZiwgY29uc3QgY2hhciogZmFtaWx5LCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9v
bCBmYWtlSXRhbGljKQogICAgIDogbV90eXBlZmFjZSh0ZikKKyAgICAsIG1fZmFtaWx5KGZhbWls
eSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAgICAgLCBtX2Zha2VCb2xkKGZha2VCb2xk
KQogICAgICwgbV9mYWtlSXRhbGljKGZha2VJdGFsaWMpCiB7CiAgICAgbV90eXBlZmFjZS0+c2Fm
ZVJlZigpOworICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKIH0KIAogRm9udFBsYXRm
b3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMsIGZs
b2F0IHRleHRTaXplKQogICAgIDogbV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKKyAgICAsIG1f
ZmFtaWx5KHNyYy5tX2ZhbWlseSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAgICAgLCBt
X2Zha2VCb2xkKHNyYy5tX2Zha2VCb2xkKQogICAgICwgbV9mYWtlSXRhbGljKHNyYy5tX2Zha2VJ
dGFsaWMpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2UpCiB7CiAgICAg
bV90eXBlZmFjZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsK
IH0KIAogRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQpAQCAtMTAyLDEwICsx
MDksMTIgQEAgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0b3I9KGNv
bnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKIHsKICAgICBTa1JlZkNudF9TYWZlQXNzaWduKG1f
dHlwZWZhY2UsIHNyYy5tX3R5cGVmYWNlKTsKIAorICAgIG1fZmFtaWx5ID0gc3JjLm1fZmFtaWx5
OwogICAgIG1fdGV4dFNpemUgPSBzcmMubV90ZXh0U2l6ZTsKICAgICBtX2Zha2VCb2xkID0gc3Jj
Lm1fZmFrZUJvbGQ7CiAgICAgbV9mYWtlSXRhbGljID0gc3JjLm1fZmFrZUl0YWxpYzsKICAgICBt
X2hhcmZidXp6RmFjZSA9IHNyYy5tX2hhcmZidXp6RmFjZTsKKyAgICBtX3N0eWxlID0gc3JjLm1f
c3R5bGU7CiAKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC0xMjEsMTMgKzEzMCwxNSBAQCB2b2lk
IEZvbnRQbGF0Zm9ybURhdGE6OnNldHVwUGFpbnQoU2tQYWludCogcGFpbnQpIGNvbnN0CiB7CiAg
ICAgY29uc3QgZmxvYXQgdHMgPSBtX3RleHRTaXplID4gMCA/IG1fdGV4dFNpemUgOiAxMjsKIAot
ICAgIHBhaW50LT5zZXRBbnRpQWxpYXMoaXNTa2lhQW50aUFsaWFzKTsKLSAgICBwYWludC0+c2V0
SGludGluZyhza2lhSGludGluZyk7Ci0gICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQoaXNTa2lh
U3VicGl4ZWxHbHlwaHMpOworICAgIHBhaW50LT5zZXRBbnRpQWxpYXMobV9zdHlsZS51c2VBbnRp
QWxpYXMgPT0gRm9udFJlbmRlclN0eWxlOjprTm9QcmVmZXJlbmNlID8gaXNTa2lhQW50aUFsaWFz
IDogbV9zdHlsZS51c2VBbnRpQWxpYXMpOworICAgIHBhaW50LT5zZXRIaW50aW5nKG1fc3R5bGUu
dXNlSGludGluZyA9PSBGb250UmVuZGVyU3R5bGU6OmtOb1ByZWZlcmVuY2UgPyBza2lhSGludGlu
ZyA6IChTa1BhaW50OjpIaW50aW5nKSBtX3N0eWxlLmhpbnRTdHlsZSk7CiAgICAgcGFpbnQtPnNl
dFRleHRTaXplKFNrRmxvYXRUb1NjYWxhcih0cykpOwogICAgIHBhaW50LT5zZXRUeXBlZmFjZSht
X3R5cGVmYWNlKTsKICAgICBwYWludC0+c2V0RmFrZUJvbGRUZXh0KG1fZmFrZUJvbGQpOwogICAg
IHBhaW50LT5zZXRUZXh0U2tld1gobV9mYWtlSXRhbGljID8gLVNLX1NjYWxhcjEgLyA0IDogMCk7
CisKKyAgICBpZiAobV9zdHlsZS51c2VBbnRpQWxpYXMgPT0gMSB8fCBtX3N0eWxlLnVzZUFudGlB
bGlhcyA9PSBGb250UmVuZGVyU3R5bGU6OmtOb1ByZWZlcmVuY2UgJiYgaXNTa2lhQW50aUFsaWFz
KQorICAgICAgICBwYWludC0+c2V0TENEUmVuZGVyVGV4dChtX3N0eWxlLnVzZVN1YnBpeGVsID09
IEZvbnRSZW5kZXJTdHlsZTo6a05vUHJlZmVyZW5jZSA/IGlzU2tpYVN1YnBpeGVsR2x5cGhzIDog
bV9zdHlsZS51c2VTdWJwaXhlbCk7CiB9CiAKIFNrRm9udElEIEZvbnRQbGF0Zm9ybURhdGE6OnVu
aXF1ZUlEKCkgY29uc3QKQEAgLTE4NCw0ICsxOTUsMjEgQEAgSEJfRmFjZVJlY18qIEZvbnRQbGF0
Zm9ybURhdGE6OmhhcmZidXp6RmFjZSgpIGNvbnN0CiAgICAgcmV0dXJuIG1faGFyZmJ1enpGYWNl
LT5mYWNlKCk7CiB9CiAKK3ZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cXVlcnlTeXN0ZW1Gb3JSZW5k
ZXJTdHlsZSgpCit7CisgICAgaWYgKG1fZmFtaWx5Lmxlbmd0aCgpKSB7CisgICAgICAgIC8vIFdl
IGRvbid0IGhhdmUgYSBmYW1pbHkgZm9yIHRoaXMuIFByb2JhYmx5IGJlY2F1c2UgaXQncyBhIHdl
YmZvbnQuIFdlCisgICAgICAgIC8vIHNldCBhbGwgdGhlIHZhbHVlcyB0byAnbm8gcHJlZmVyZW5j
ZScgYW5kIHRha2UgdGhlIGRlZmF1bHRzIHBhc3NlZAorICAgICAgICAvLyBpbiBmcm9tIFhTRVRU
SU5HUy4KKyAgICAgICAgbV9zdHlsZS51c2VCaXRtYXBzID0gRm9udFJlbmRlclN0eWxlOjprTm9Q
cmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZUF1dG9IaW50ID0gRm9udFJlbmRlclN0eWxl
OjprTm9QcmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZUhpbnRpbmcgPSBGb250UmVuZGVy
U3R5bGU6OmtOb1ByZWZlcmVuY2U7CisgICAgICAgIG1fc3R5bGUudXNlQW50aUFsaWFzID0gRm9u
dFJlbmRlclN0eWxlOjprTm9QcmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZVN1YnBpeGVs
ID0gRm9udFJlbmRlclN0eWxlOjprTm9QcmVmZXJlbmNlOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKCZtX3N0eWxl
LCBtX2ZhbWlseS5kYXRhKCksICgoKGludCltX3RleHRTaXplKSA8PCAyKSB8IChtX3R5cGVmYWNl
LT5zdHlsZSgpICYgMykpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGlu
dXguaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0
YUxpbnV4LmgKaW5kZXggMjljZThlNy4uNTg1NDcxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5oCkBA
IC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFMaW51eF9oCiAjZGVmaW5l
IEZvbnRQbGF0Zm9ybURhdGFMaW51eF9oCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVk
ZSAiRm9udFJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgogI2luY2x1ZGUg
PHd0Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDxTa1BhaW50Lmg+CkBAIC00Myw3ICs0NSw2IEBAIHN0
cnVjdCBIQl9GYWNlUmVjXzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2Ny
aXB0aW9uOwotY2xhc3MgU3RyaW5nOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRm9u
dFBsYXRmb3JtRGF0YSBpcyB0aGUgaGFuZGxlIHdoaWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZp
YyBmYWNlLiBBIGZhY2UKQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgICAgICB7IH0KIAog
ICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIEZvbnRQ
bGF0Zm9ybURhdGEoU2tUeXBlZmFjZSosIGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBi
b29sIGZha2VJdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoU2tUeXBlZmFjZSosIGNvbnN0
IGNoYXIqIG5hbWUsIGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29sIGZha2VJdGFs
aWMpOwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3JjLCBm
bG9hdCB0ZXh0U2l6ZSk7CiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIApAQCAtMTQwLDExICsx
NDEsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgSEJfRmFjZVJlY18qIG1faGFyZmJ1enpGYWNlOwog
ICAgIH07CiAKKyAgICB2b2lkIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKKwogICAgIC8v
IEZJWE1FOiBDb3VsZCBTa0F1dG9VbnJlZiBiZSB1c2VkIGhlcmU/CiAgICAgU2tUeXBlZmFjZSog
bV90eXBlZmFjZTsKKyAgICBDU3RyaW5nIG1fZmFtaWx5OwogICAgIGZsb2F0IG1fdGV4dFNpemU7
CiAgICAgYm9vbCBtX2Zha2VCb2xkOwogICAgIGJvb2wgbV9mYWtlSXRhbGljOworICAgIEZvbnRS
ZW5kZXJTdHlsZSBtX3N0eWxlOwogICAgIG11dGFibGUgUmVmUHRyPFJlZkNvdW50ZWRIYXJmYnV6
ekZhY2U+IG1faGFyZmJ1enpGYWNlOwogCiAgICAgU2tUeXBlZmFjZSogaGFzaFRhYmxlRGVsZXRl
ZEZvbnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2tUeXBlZmFjZSo+
KC0xKTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9G
b250UmVuZGVyU3R5bGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFJlbmRlclN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI5NTdh
OAotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
Rm9udFJlbmRlclN0eWxlLmgKQEAgLTAsMCArMSw1NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEw
LCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqIAorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRm9udFJlbmRlclN0eWxl
X2gKKyNkZWZpbmUgRm9udFJlbmRlclN0eWxlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBGb250UmVuZGVyU3R5bGUgZGVzY3JpYmVzIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yIHJl
bmRlcmluZyBhIGZvbnQgYXQgYQorLy8gZ2l2ZW4gc2l6ZS4KK3N0cnVjdCBGb250UmVuZGVyU3R5
bGUgeworICAgIGVudW0geworICAgICAga05vUHJlZmVyZW5jZSA9IDIsCisgICAgfTsKKworICAg
IC8vIEVhY2ggb2YgdGhlIHVzZSogbWVtYmVycyBiZWxvdyBjYW4gdGFrZSBvbmUgb2YgdGhyZWUg
dmFsdWVzOgorICAgIC8vICAgMDogb2ZmCisgICAgLy8gICAxOiBvbgorICAgIC8vICAga05vUHJl
ZmVyZW5jZTogbm8gcHJlZmVyZW5jZSBleHByZXNzZWQKKyAgICBjaGFyIHVzZUJpdG1hcHM7IC8v
IHVzZSBlbWJlZGRlZCBiaXRtYXAgc3RyaWtlIGlmIHBvc3NpYmxlCisgICAgY2hhciB1c2VBdXRv
SGludDsgLy8gdXNlICdhdXRvJyBoaW50aW5nIChGcmVlVHlwZSBzcGVjaWZpYykKKyAgICBjaGFy
IHVzZUhpbnRpbmc7IC8vIGhpbnQgZ2x5cGhzIHRvIHRoZSBwaXhlbCBncmlkCisgICAgY2hhciBo
aW50U3R5bGU7IC8vIGxldmVsIG9mIGhpbnRpbmcsIDAuLjMKKyAgICBjaGFyIHVzZUFudGlBbGlh
czsgLy8gYW50aWFsaWFzIGdseXBoIHNoYXBlcworICAgIGNoYXIgdXNlU3VicGl4ZWw7IC8vIHVz
ZSBzdWJwaXhlbCBhbnRpYWxpYXMKK307CisKK30KKworI2VuZGlmIC8vIEZvbnRSZW5kZXJTdHls
ZV9oCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9t
aXVtL0NoYW5nZUxvZwppbmRleCBjMDNjNTU5Li41MDgzNTliIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAwOS0xMi0zMCAgQWRhbSBMYW5nbGV5ICA8YWdsQGdvb2dsZS5jb20+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgZm9udGNvbmZp
ZyBvbiBMaW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJlZmVyZW5jZXMgb24gYSBwZXIgc3Ry
aWtlCisgICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJpbmF0aW9uIG9mIGZhY2UgYW5kIHNp
emUpLiBCZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5lZWQgdG8gcXVlcnkgZm9udGNvbmZp
ZyBlYWNoIHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBpcyBjcmVhdGVkCisgICAgICAgIGZv
ciBhIG5ldyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBxdWVy
eWluZyB0aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAgICAgICAqIFdlYktpdC5neXA6Cisg
ICAgICAgICogcHVibGljL2d0ay9XZWJGb250SW5mby5oOgorICAgICAgICAqIHB1YmxpYy9saW51
eC9XZWJTYW5kYm94U3VwcG9ydC5oOgorICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJp
a2UpOgorICAgICAgICAqIHNyYy9ndGsvV2ViRm9udEluZm8uY3BwOgorICAgICAgICAoV2ViS2l0
OjpXZWJGb250SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2UpOgorCiAyMDEwLTAxLTA0ICBNYWNp
ZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFy
aW4gRmlzaGVyLgpAQCAtMTc0LDcgKzE5NSw2IEBACiAgICAgICAgIChXZWJLaXQ6OkF1dG9jb21w
bGV0ZVBvcHVwTWVudUNsaWVudDo6cmVzZXRMYXN0RmllbGRWYWx1ZSk6CiAgICAgICAgICogc3Jj
L0F1dG9jb21wbGV0ZVBvcHVwTWVudUNsaWVudC5oOgogCi0KIDIwMDktMTItMjggIEtpbnVrbyBZ
YXN1ZGEgIDxraW51a29AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2ll
aiBTdGFjaG93aWFrLgpkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAgYi9X
ZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCAzYzg0Y2I0Li4yZDIyZDlhIDEwMDY0NAot
LS0gYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAorKysgYi9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cApAQCAtODAsNiArODAsNyBAQAogICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCiAgICAg
ICAgICAgICAgICAgJ3B1YmxpYy9ndGsvV2ViSW5wdXRFdmVudEZhY3RvcnkuaCcsCiAgICAgICAg
ICAgICAgICAgJ3B1YmxpYy9saW51eC9XZWJGb250UmVuZGVyaW5nLmgnLAorICAgICAgICAgICAg
ICAgICdwdWJsaWMvbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmgnLAogICAgICAgICAgICAgICAg
ICdwdWJsaWMveDExL1dlYlNjcmVlbkluZm9GYWN0b3J5LmgnLAogICAgICAgICAgICAgICAgICdw
dWJsaWMvbWFjL1dlYklucHV0RXZlbnRGYWN0b3J5LmgnLAogICAgICAgICAgICAgICAgICdwdWJs
aWMvbWFjL1dlYlNjcmVlbkluZm9GYWN0b3J5LmgnLApAQCAtMjI1LDYgKzIyNiw3IEBACiAgICAg
ICAgICAgICAgICAgJ3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9JbnNwZWN0b3JDbGllbnRJbXBsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvbGlu
dXgvV2ViRm9udFJlbmRlcmluZy5jcHAnLAorICAgICAgICAgICAgICAgICdzcmMvbGludXgvV2Vi
Rm9udFJlbmRlclN0eWxlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy94MTEvV2ViU2NyZWVu
SW5mb0ZhY3RvcnkuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJJbnB1dEV2ZW50
RmFjdG9yeS5tbScsCiAgICAgICAgICAgICAgICAgJ3NyYy9tYWMvV2ViU2NyZWVuSW5mb0ZhY3Rv
cnkubW0nLApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9ndGsvV2ViRm9udElu
Zm8uaCBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvZ3RrL1dlYkZvbnRJbmZvLmgKaW5kZXggYWQz
NzY4MC4uMjY1NmE4NSAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9ndGsvV2Vi
Rm9udEluZm8uaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL2d0ay9XZWJGb250SW5mby5o
CkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIFdlYkZvbnRJbmZvX2gKIAogI2luY2x1ZGUgIi4u
L1dlYkNTdHJpbmcuaCIKKyNpbmNsdWRlICIuLi9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaCIK
IAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHVuaXN0ZC5oPgpAQCAtNDgsNiArNDks
MTggQEAgcHVibGljOgogICAgIC8vIFJldHVybnM6IHRoZSBmb250IGZhbWlseSBvciBhbiBlbXB0
eSBzdHJpbmcgaWYgdGhlIHJlcXVlc3QgY291bGQgbm90IGJlCiAgICAgLy8gc2F0aXNmaWVkLgog
ICAgIFdFQktJVF9BUEkgc3RhdGljIFdlYkNTdHJpbmcgZmFtaWx5Rm9yQ2hhcnMoY29uc3QgV2Vi
VUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFyYWN0ZXJzKTsKKyAgICAvLyBGaWxsIG91
dCB0aGUgZ2l2ZW4gV2ViRm9udFJlbmRlclN0eWxlIHdpdGggdGhlIHVzZXIncyBwcmVmZXJlbmNl
cyBmb3IKKyAgICAvLyByZW5kZXJpbmcgdGhlIGdpdmVuIGZvbnQgYXQgdGhlIGdpdmVuIHNpemUu
CisgICAgLy8gICBmYW1pbHk6IGkuZS4gIlRpbWVzIE5ldyBSb21hbiIKKyAgICAvLyAgIHNpemVB
bmRTdHlsZToKKyAgICAvLyAgICAgIDMzMjIyMjIyMjIyMjExMTExMTExMTEKKyAgICAvLyAgICAg
IDEwOTg3NjU0MzIxMDk4NzY1NDMyMTA5ODc2NTQzMjEwCisgICAgLy8gICAgICstLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAgICAvLyAgICAgfC4uLi4uLi4uLi4uLi4uU2l6ZS4u
Li4uLi4uLi4uLklCfAorICAgIC8vICAgICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0rCisgICAgLy8gICAgIEk6IGl0YWxpYyBmbGFnCisgICAgLy8gICAgIEI6IGJvbGQgZmxhZwor
ICAgIFdFQktJVF9BUEkgc3RhdGljIHZvaWQgcmVuZGVyU3R5bGVGb3JTdHJpa2UoV2ViRm9udFJl
bmRlclN0eWxlKiByZXN1bHQsIGNvbnN0IGNoYXIqIGZhbWlseSwgaW50IHNpemVBbmRTdHlsZSk7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1
bS9wdWJsaWMvbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmggYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLmEzYjE4MGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVi
bGljL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFdl
YkZvbnRSZW5kZXJTdHlsZV9oCisjZGVmaW5lIFdlYkZvbnRSZW5kZXJTdHlsZV9oCisKKyNpbmNs
dWRlICIuLi9XZWJDb21tb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeyBzdHJ1Y3QgRm9udFJl
bmRlclN0eWxlOyB9CisKK25hbWVzcGFjZSBXZWJLaXQgeworCitzdHJ1Y3QgV2ViRm9udFJlbmRl
clN0eWxlIHsKKyAgICAvLyBFYWNoIG9mIHRoZSB1c2UqIG1lbWJlcnMgYmVsb3cgY2FuIHRha2Ug
b25lIG9mIHRocmVlIHZhbHVlczoKKyAgICAvLyAgIDA6IG9mZgorICAgIC8vICAgMTogb24KKyAg
ICAvLyAgIDI6IG5vIHByZWZlcmVuY2UgZXhwcmVzc2VkCisgICAgY2hhciB1c2VCaXRtYXBzOyAv
LyB1c2UgZW1iZWRkZWQgYml0bWFwIHN0cmlrZSBpZiBwb3NzaWJsZQorICAgIGNoYXIgdXNlQXV0
b0hpbnQ7IC8vIHVzZSAnYXV0bycgaGludGluZyAoRnJlZVR5cGUgc3BlY2lmaWMpCisgICAgY2hh
ciB1c2VIaW50aW5nOyAvLyBoaW50IGdseXBocyB0byB0aGUgcGl4ZWwgZ3JpZAorICAgIGNoYXIg
aGludFN0eWxlOyAvLyBsZXZlbCBvZiBoaW50aW5nLCAwLi4zCisgICAgY2hhciB1c2VBbnRpQWxp
YXM7IC8vIGFudGlhbGlhcyBnbHlwaCBzaGFwZXMKKyAgICBjaGFyIHVzZVN1YnBpeGVsOyAvLyB1
c2Ugc3VicGl4ZWwgYW50aWFsaWFzCisKKyNpZmRlZiBXRUJLSVRfSU1QTEVNRU5UQVRJT04KKyAg
ICAvLyBUcmFuc2xhdGVzIHRoZSBtZW1iZXJzIG9mIHRoaXMgc3RydWN0IHRvIGEgRm9udFJlbmRl
clN0eWxlCisgICAgdm9pZCB0b0ZvbnRSZW5kZXJTdHlsZShXZWJDb3JlOjpGb250UmVuZGVyU3R5
bGUqKTsKKyNlbmRpZgorCisgICAgdm9pZCBzZXREZWZhdWx0cygpOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViS2l0CisKKyNlbmRpZiAvLyBXZWJGb250UmVuZGVyU3R5bGVfaApkaWZmIC0tZ2l0
IGEvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9saW51eC9XZWJTYW5kYm94U3VwcG9ydC5oIGIvV2Vi
S2l0L2Nocm9taXVtL3B1YmxpYy9saW51eC9XZWJTYW5kYm94U3VwcG9ydC5oCmluZGV4IDVlZGNl
YjIuLmQxYTFhYjQgMTAwNjQ0Ci0tLSBhL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbGludXgvV2Vi
U2FuZGJveFN1cHBvcnQuaAorKysgYi9XZWJLaXQvY2hyb21pdW0vcHVibGljL2xpbnV4L1dlYlNh
bmRib3hTdXBwb3J0LmgKQEAgLTM2LDYgKzM2LDggQEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAK
K3N0cnVjdCBXZWJGb250UmVuZGVyU3R5bGU7CisKIC8vIFB1dCBtZXRob2RzIGhlcmUgdGhhdCBh
cmUgcmVxdWlyZWQgZHVlIHRvIHNhbmRib3ggcmVzdHJpY3Rpb25zLgogY2xhc3MgV2ViU2FuZGJv
eFN1cHBvcnQgewogcHVibGljOgpAQCAtNDksNiArNTEsNyBAQCBwdWJsaWM6CiAgICAgLy8gUmV0
dXJucyBhIHN0cmluZyB3aXRoIHRoZSBmb250IGZhbWlseSBvbiBhbiBlbXB0eSBzdHJpbmcgaWYg
dGhlCiAgICAgLy8gcmVxdWVzdCBjYW5ub3QgYmUgc2F0aXNmaWVkLgogICAgIHZpcnR1YWwgV2Vi
U3RyaW5nIGdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFdlYlVDaGFyKiBjaGFyYWN0
ZXJzLCBzaXplX3QgbnVtQ2hhcmFjdGVycykgPSAwOworICAgIHZpcnR1YWwgdm9pZCBnZXRSZW5k
ZXJTdHlsZUZvclN0cmlrZShXZWJGb250UmVuZGVyU3R5bGUqIHN0eWxlLCBjb25zdCBjaGFyKiBm
YW1pbHksIGludCBzaXplQW5kU3R5bGUpID0gMDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAgYi9X
ZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAppbmRleCAwZmQwODI1Li43NmEx
ZDRkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAor
KysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcApAQCAtNjQsNiArNjQs
NyBAQAogI2lmIE9TKExJTlVYKQogI2luY2x1ZGUgIldlYlNhbmRib3hTdXBwb3J0LmgiCiAjaW5j
bHVkZSAiV2ViRm9udEluZm8uaCIKKyNpbmNsdWRlICJXZWJGb250UmVuZGVyU3R5bGUuaCIKICNl
bmRpZgogCiAjaWYgV0VCS0lUX1VTSU5HX1NLSUEKQEAgLTMwOCw2ICszMDksMTggQEAgU3RyaW5n
IENocm9taXVtQnJpZGdlOjpnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV8KIAogICAgIHJldHVybiBXZWJTdHJpbmcoKTsKIH0KKwordm9pZCBD
aHJvbWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoRm9udFJlbmRlclN0eWxlKiBy
ZXN1bHQsIGNvbnN0IGNoYXIqIGZvbnQsIGludCBzaXplQW5kU3R5bGUpCit7CisgICAgV2ViRm9u
dFJlbmRlclN0eWxlIHN0eWxlOworCisgICAgaWYgKHdlYktpdENsaWVudCgpLT5zYW5kYm94U3Vw
cG9ydCgpKQorICAgICAgICB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKS0+Z2V0UmVu
ZGVyU3R5bGVGb3JTdHJpa2UoJnN0eWxlLCBmb250LCBzaXplQW5kU3R5bGUpOworICAgIGVsc2UK
KyAgICAgICAgV2ViRm9udEluZm86OnJlbmRlclN0eWxlRm9yU3RyaWtlKCZzdHlsZSwgZm9udCwg
c2l6ZUFuZFN0eWxlKTsKKworICAgIHN0eWxlLnRvRm9udFJlbmRlclN0eWxlKHJlc3VsdCk7Cit9
CiAjZW5kaWYKIAogLy8gSFRNTDUgREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvV2ViS2l0L2No
cm9taXVtL3NyYy9ndGsvV2ViRm9udEluZm8uY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9ndGsv
V2ViRm9udEluZm8uY3BwCmluZGV4IDc2ZWQ2MTguLjU2NGRjNWMgMTAwNjQ0Ci0tLSBhL1dlYktp
dC9jaHJvbWl1bS9zcmMvZ3RrL1dlYkZvbnRJbmZvLmNwcAorKysgYi9XZWJLaXQvY2hyb21pdW0v
c3JjL2d0ay9XZWJGb250SW5mby5jcHAKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYkZvbnRJbmZvLmgiCisjaW5jbHVkZSAiV2ViRm9udFJlbmRl
clN0eWxlLmgiCiAKICNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KICNpbmNsdWRl
IDxzdHJpbmcuaD4KQEAgLTU1LDExICs1NiwxMSBAQCBXZWJDU3RyaW5nIFdlYkZvbnRJbmZvOjpm
YW1pbHlGb3JDaGFycyhjb25zdCBXZWJVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYQog
ICAgIEZjVmFsdWUgZmN2YWx1ZTsKICAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVDaGFyU2V0Owog
ICAgIGZjdmFsdWUudS5jID0gY3NldDsKLSAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfQ0hB
UlNFVCwgZmN2YWx1ZSwgMCk7CisgICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX0NIQVJTRVQs
IGZjdmFsdWUsIEZjRmFsc2UpOwogCiAgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBlQm9vbDsKICAg
ICBmY3ZhbHVlLnUuYiA9IEZjVHJ1ZTsKLSAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfU0NB
TEFCTEUsIGZjdmFsdWUsIDApOworICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19TQ0FMQUJM
RSwgZmN2YWx1ZSwgRmNGYWxzZSk7CiAKICAgICBGY0NvbmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVy
biwgRmNNYXRjaFBhdHRlcm4pOwogICAgIEZjRGVmYXVsdFN1YnN0aXR1dGUocGF0dGVybik7CkBA
IC0xMDQsNCArMTA1LDY4IEBAIFdlYkNTdHJpbmcgV2ViRm9udEluZm86OmZhbWlseUZvckNoYXJz
KGNvbnN0IFdlYlVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hhCiAgICAgcmV0dXJuIFdl
YkNTdHJpbmcoKTsKIH0KIAordm9pZCBXZWJGb250SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2Uo
V2ViRm9udFJlbmRlclN0eWxlKiBvdXQsIGNvbnN0IGNoYXIqIGZhbWlseSwgaW50IHNpemVBbmRT
dHlsZSkKK3sKKyAgICBib29sIGlzQm9sZCA9IHNpemVBbmRTdHlsZSAmIDE7CisgICAgYm9vbCBp
c0l0YWxpYyA9IHNpemVBbmRTdHlsZSAmIDI7CisgICAgaW50IHBpeGVsU2l6ZSA9IHNpemVBbmRT
dHlsZSA+PiAyOworCisgICAgRmNQYXR0ZXJuKiBwYXR0ZXJuID0gRmNQYXR0ZXJuQ3JlYXRlKCk7
CisgICAgRmNWYWx1ZSBmY3ZhbHVlOworCisgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBlU3RyaW5n
OworICAgIGZjdmFsdWUudS5zID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4ICo+KGZh
bWlseSk7CisgICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX0ZBTUlMWSwgZmN2YWx1ZSwgRmNG
YWxzZSk7CisKKyAgICBmY3ZhbHVlLnR5cGUgPSBGY1R5cGVJbnRlZ2VyOworICAgIGZjdmFsdWUu
dS5pID0gaXNCb2xkID8gRkNfV0VJR0hUX0JPTEQgOiBGQ19XRUlHSFRfTk9STUFMOworICAgIEZj
UGF0dGVybkFkZChwYXR0ZXJuLCBGQ19XRUlHSFQsIGZjdmFsdWUsIEZjRmFsc2UpOworCisgICAg
ZmN2YWx1ZS50eXBlID0gRmNUeXBlSW50ZWdlcjsKKyAgICBmY3ZhbHVlLnUuaSA9IGlzSXRhbGlj
ID8gRkNfU0xBTlRfSVRBTElDIDogRkNfU0xBTlRfUk9NQU47CisgICAgRmNQYXR0ZXJuQWRkKHBh
dHRlcm4sIEZDX1NMQU5ULCBmY3ZhbHVlLCBGY0ZhbHNlKTsKKworICAgIGZjdmFsdWUudHlwZSA9
IEZjVHlwZUJvb2w7CisgICAgZmN2YWx1ZS51LmIgPSBGY1RydWU7CisgICAgRmNQYXR0ZXJuQWRk
KHBhdHRlcm4sIEZDX1NDQUxBQkxFLCBmY3ZhbHVlLCBGY0ZhbHNlKTsKKworICAgIGZjdmFsdWUu
dHlwZSA9IEZjVHlwZURvdWJsZTsKKyAgICBmY3ZhbHVlLnUuZCA9IHBpeGVsU2l6ZTsKKyAgICBG
Y1BhdHRlcm5BZGQocGF0dGVybiwgRkNfU0laRSwgZmN2YWx1ZSwgRmNGYWxzZSk7CisKKyAgICBG
Y0NvbmZpZ1N1YnN0aXR1dGUoMCwgcGF0dGVybiwgRmNNYXRjaFBhdHRlcm4pOworICAgIEZjRGVm
YXVsdFN1YnN0aXR1dGUocGF0dGVybik7CisKKyAgICBGY1Jlc3VsdCByZXN1bHQ7CisgICAgLy8g
U29tZSB2ZXJzaW9ucyBvZiBmb250Y29uZmlnIGRvbid0IGFjdHVhbGx5IHdyaXRlIGEgdmFsdWUg
aW50byByZXN1bHQuCisgICAgLy8gSG93ZXZlciwgaXQncyBub3QgY2xlYXIgZnJvbSB0aGUgZG9j
dW1lbnRhdGlvbiBpZiByZXN1bHQgc2hvdWxkIGJlIGEKKyAgICAvLyBub24tMCBwb2ludGVyOiBm
dXR1cmUgdmVyc2lvbnMgbWlnaHQgZXhwZWN0IHRvIGJlIGFibGUgdG8gd3JpdGUgdG8KKyAgICAv
LyBpdC4gU28gd2UgcGFzcyBpbiBhIHZhbGlkIHBvaW50ZXIgYW5kIGlnbm9yZSBpdC4KKyAgICBG
Y1BhdHRlcm4qIG1hdGNoID0gRmNGb250TWF0Y2goMCwgcGF0dGVybiwgJnJlc3VsdCk7CisgICAg
RmNQYXR0ZXJuRGVzdHJveShwYXR0ZXJuKTsKKworICAgIG91dC0+c2V0RGVmYXVsdHMoKTsKKwor
ICAgIGlmICghbWF0Y2gpIHsKKyAgICAgICAgRmNQYXR0ZXJuRGVzdHJveShtYXRjaCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGY0Jvb2wgYjsKKyAgICBpbnQgaTsKKworICAgIGlm
IChGY1BhdHRlcm5HZXRCb29sKG1hdGNoLCBGQ19BTlRJQUxJQVMsIDAsICZiKSA9PSBGY1Jlc3Vs
dE1hdGNoKQorICAgICAgICBvdXQtPnVzZUFudGlBbGlhcyA9IGI7CisgICAgaWYgKEZjUGF0dGVy
bkdldEJvb2wobWF0Y2gsIEZDX0VNQkVEREVEX0JJVE1BUCwgMCwgJmIpID09IEZjUmVzdWx0TWF0
Y2gpCisgICAgICAgIG91dC0+dXNlQml0bWFwcyA9IGI7CisgICAgaWYgKEZjUGF0dGVybkdldEJv
b2wobWF0Y2gsIEZDX0FVVE9ISU5ULCAwLCAmYikgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAg
b3V0LT51c2VBdXRvSGludCA9IGI7CisgICAgaWYgKEZjUGF0dGVybkdldEJvb2wobWF0Y2gsIEZD
X0hJTlRJTkcsIDAsICZiKSA9PSBGY1Jlc3VsdE1hdGNoKQorICAgICAgICBvdXQtPnVzZUhpbnRp
bmcgPSBiOworICAgIGlmIChGY1BhdHRlcm5HZXRJbnRlZ2VyKG1hdGNoLCBGQ19ISU5UX1NUWUxF
LCAwLCAmaSkgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAgb3V0LT5oaW50U3R5bGUgPSBpOwor
CisgICAgRmNQYXR0ZXJuRGVzdHJveShtYXRjaCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dApkaWZmIC0tZ2l0IGEvV2ViS2l0L2Nocm9taXVtL3NyYy9saW51eC9XZWJGb250UmVuZGVyU3R5
bGUuY3BwIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkOTk1ODcKLS0tIC9kZXYvbnVs
bAorKysgYi9XZWJLaXQvY2hyb21pdW0vc3JjL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5jcHAK
QEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQor
ICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmln
aHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBu
YW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQor
ICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9M
REVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwK
KyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJXZWJGb250UmVu
ZGVyU3R5bGUuaCIKKworI2luY2x1ZGUgIkZvbnRSZW5kZXJTdHlsZS5oIgorCit1c2luZyBXZWJD
b3JlOjpGb250UmVuZGVyU3R5bGU7CisKK25hbWVzcGFjZSBXZWJLaXQgeworCit2b2lkIFdlYkZv
bnRSZW5kZXJTdHlsZTo6dG9Gb250UmVuZGVyU3R5bGUoV2ViQ29yZTo6Rm9udFJlbmRlclN0eWxl
KiBvdXQpCit7CisgICAgb3V0LT51c2VCaXRtYXBzID0gdXNlQml0bWFwczsKKyAgICBvdXQtPnVz
ZUF1dG9IaW50ID0gdXNlQXV0b0hpbnQ7CisgICAgb3V0LT51c2VIaW50aW5nID0gdXNlSGludGlu
ZzsKKyAgICBvdXQtPmhpbnRTdHlsZSA9IGhpbnRTdHlsZTsKKyAgICBvdXQtPnVzZUFudGlBbGlh
cyA9IHVzZUFudGlBbGlhczsKKyAgICBvdXQtPnVzZVN1YnBpeGVsID0gdXNlU3VicGl4ZWw7Cit9
CisKK3ZvaWQgV2ViRm9udFJlbmRlclN0eWxlOjpzZXREZWZhdWx0cygpCit7CisgICAgdXNlQml0
bWFwcyA9IDI7CisgICAgdXNlQXV0b0hpbnQgPSAyOworICAgIHVzZUhpbnRpbmcgPSAyOworICAg
IGhpbnRTdHlsZSA9IDA7CisgICAgdXNlQW50aUFsaWFzID0gMjsKKyAgICB1c2VTdWJwaXhlbCA9
IDI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYktpdAo=
</data>
<flag name="review"
          id="28128"
          type_id="1"
          status="-"
          setter="fishd"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46091</attachid>
            <date>2010-01-07 15:22:38 -0800</date>
            <delta_ts>2010-01-22 10:34:56 -0800</delta_ts>
            <desc>Addressing fishd&apos;s comments</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>25671</size>
            <attacher name="Adam Langley">agl</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
YmQxYjQ4MC4uYTk5MmIxMSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyOSBAQAorMjAwOS0wMS0wNyAgQWRhbSBMYW5nbGV5
ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgZm9udGNvbmZpZyBvbiBMaW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJl
ZmVyZW5jZXMgb24gYSBwZXIgc3RyaWtlCisgICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJp
bmF0aW9uIG9mIGZhY2UgYW5kIHNpemUpLiBCZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5l
ZWQgdG8gcXVlcnkgZm9udGNvbmZpZyBlYWNoIHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBp
cyBjcmVhdGVkCisgICAgICAgIGZvciBhIG5ldyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBzdXBwb3J0IGZvciBxdWVyeWluZyB0aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmg6IGFkZCBnZXRSZW5kZXJT
dHlsZUZvclN0cmlrZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRD
YWNoZUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYWNoZTo6Y3JlYXRlRm9udFBs
YXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1
c3RvbVBsYXRmb3JtRGF0YS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q3VzdG9tUGxhdGZv
cm1EYXRhOjpmb250UGxhdGZvcm1EYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpGb250
UGxhdGZvcm1EYXRhOjpvcGVyYXRvcj0pOgorICAgICAgICAoV2ViQ29yZTo6Rm9udFBsYXRmb3Jt
RGF0YTo6c2V0dXBQYWludCk6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpx
dWVyeVN0eWxlKToKKyAgICAgICAgICBhZGQgY29kZSB0byBxdWVyeSBmb250Y29uZmlnIHZpYSBD
aHJvbWl1bUJyaWRnZQorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQ
bGF0Zm9ybURhdGFMaW51eC5oOgorCiAyMDEwLTAxLTA3ICBOYXRlIENoYXBpbiAgPGphcGhldEBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oIGIvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCmluZGV4IDkyYjRjMTMuLmJj
MTg4YjkgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1Ccmlk
Z2UuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKQEAg
LTYyLDYgKzYyLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgc3RydWN0IENvb2tpZTsK
ICAgICBzdHJ1Y3QgUGx1Z2luSW5mbzsKKyAgICBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwogCiAg
ICAgLy8gQW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUg
YWJpbGl0eSB0byBhbnN3ZXIKICAgICAvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQg
c28gb24uLi4KQEAgLTExMCw2ICsxMTEsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHN0YXRpYyBib29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCk7CiAjZW5kaWYKICNpZiBP
UyhMSU5VWCkKKyAgICAgICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29u
c3QgY2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3Vs
dCk7CiAgICAgICAgIHN0YXRpYyBTdHJpbmcgZ2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29u
c3QgVUNoYXIqLCBzaXplX3QgbnVtQ2hhcmFjdGVycyk7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAgYi9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAppbmRl
eCAzZmUxNTYxLi42NzE4ODQ2IDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcApAQCAtMTQ1LDYgKzE0NSw3IEBAIEZvbnRQ
bGF0Zm9ybURhdGEqIEZvbnRDYWNoZTo6Y3JlYXRlRm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250
RGVzY3JpcHRpb24mIGZvbnRECiAKICAgICBGb250UGxhdGZvcm1EYXRhKiByZXN1bHQgPQogICAg
ICAgICBuZXcgRm9udFBsYXRmb3JtRGF0YSh0ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udERlc2NyaXB0aW9uLmNv
bXB1dGVkU2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3R5bGUgJiBTa1R5
cGVmYWNlOjprQm9sZCkgJiYgIXRmLT5pc0JvbGQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKHN0eWxlICYgU2tUeXBlZmFjZTo6a0l0YWxpYykgJiYgIXRmLT5pc0l0YWxpYygpKTsK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmluZGV4IDY0MzJlMTcuLjc0ZjFlMjYgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udEN1c3RvbVBsYXRmb3Jt
RGF0YS5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q3Vz
dG9tUGxhdGZvcm1EYXRhLmNwcApAQCAtMTAxLDcgKzEwMSw3IEBAIEZvbnRQbGF0Zm9ybURhdGEg
Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YShpbnQgc2l6ZSwgYm9vbCBi
b2xkLCBiCiAgICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEoaGZvbnQsIHNpemUpOwogI2VsaWYg
T1MoTElOVVgpCiAgICAgQVNTRVJUKG1fZm9udFJlZmVyZW5jZSk7Ci0gICAgcmV0dXJuIEZvbnRQ
bGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCBzaXplLCBib2xkICYmICFtX2ZvbnRSZWZlcmVu
Y2UtPmlzQm9sZCgpLCBpdGFsaWMgJiYgIW1fZm9udFJlZmVyZW5jZS0+aXNJdGFsaWMoKSk7Cisg
ICAgcmV0dXJuIEZvbnRQbGF0Zm9ybURhdGEobV9mb250UmVmZXJlbmNlLCAiIiwgc2l6ZSwgYm9s
ZCAmJiAhbV9mb250UmVmZXJlbmNlLT5pc0JvbGQoKSwgaXRhbGljICYmICFtX2ZvbnRSZWZlcmVu
Y2UtPmlzSXRhbGljKCkpOwogI2Vsc2UKICAgICBub3RJbXBsZW1lbnRlZCgpOwogICAgIHJldHVy
biBGb250UGxhdGZvcm1EYXRhKCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAgYi9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKaW5kZXggYmY0Njk3
Zi4uNmI0OWEyNCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcApAQCAtMzEsNiArMzEsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAorI2lu
Y2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgpAQCAt
NjYsMzEgKzY3LDM3IEBAIEZvbnRQbGF0Zm9ybURhdGE6OlJlZkNvdW50ZWRIYXJmYnV6ekZhY2U6
On5SZWZDb3VudGVkSGFyZmJ1enpGYWNlKCkKIAogRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRm
b3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBzcmMpCiAgICAgOiBtX3R5cGVmYWNlKHNy
Yy5tX3R5cGVmYWNlKQorICAgICwgbV9mYW1pbHkoc3JjLm1fZmFtaWx5KQogICAgICwgbV90ZXh0
U2l6ZShzcmMubV90ZXh0U2l6ZSkKICAgICAsIG1fZmFrZUJvbGQoc3JjLm1fZmFrZUJvbGQpCiAg
ICAgLCBtX2Zha2VJdGFsaWMoc3JjLm1fZmFrZUl0YWxpYykKKyAgICAsIG1fc3R5bGUoc3JjLm1f
c3R5bGUpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2UpCiB7CiAgICAg
bV90eXBlZmFjZS0+c2FmZVJlZigpOwogfQogCi1Gb250UGxhdGZvcm1EYXRhOjpGb250UGxhdGZv
cm1EYXRhKFNrVHlwZWZhY2UqIHRmLCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9sZCwgYm9v
bCBmYWtlSXRhbGljKQorRm9udFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShTa1R5cGVm
YWNlKiB0ZiwgY29uc3QgY2hhciogZmFtaWx5LCBmbG9hdCB0ZXh0U2l6ZSwgYm9vbCBmYWtlQm9s
ZCwgYm9vbCBmYWtlSXRhbGljKQogICAgIDogbV90eXBlZmFjZSh0ZikKKyAgICAsIG1fZmFtaWx5
KGZhbWlseSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAgICAgLCBtX2Zha2VCb2xkKGZh
a2VCb2xkKQogICAgICwgbV9mYWtlSXRhbGljKGZha2VJdGFsaWMpCiB7CiAgICAgbV90eXBlZmFj
ZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKIH0KIAogRm9u
dFBsYXRmb3JtRGF0YTo6Rm9udFBsYXRmb3JtRGF0YShjb25zdCBGb250UGxhdGZvcm1EYXRhJiBz
cmMsIGZsb2F0IHRleHRTaXplKQogICAgIDogbV90eXBlZmFjZShzcmMubV90eXBlZmFjZSkKKyAg
ICAsIG1fZmFtaWx5KHNyYy5tX2ZhbWlseSkKICAgICAsIG1fdGV4dFNpemUodGV4dFNpemUpCiAg
ICAgLCBtX2Zha2VCb2xkKHNyYy5tX2Zha2VCb2xkKQogICAgICwgbV9mYWtlSXRhbGljKHNyYy5t
X2Zha2VJdGFsaWMpCiAgICAgLCBtX2hhcmZidXp6RmFjZShzcmMubV9oYXJmYnV6ekZhY2UpCiB7
CiAgICAgbV90eXBlZmFjZS0+c2FmZVJlZigpOworICAgIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5
bGUoKTsKIH0KIAogRm9udFBsYXRmb3JtRGF0YTo6fkZvbnRQbGF0Zm9ybURhdGEoKQpAQCAtMTAy
LDEwICsxMDksMTIgQEAgRm9udFBsYXRmb3JtRGF0YSYgRm9udFBsYXRmb3JtRGF0YTo6b3BlcmF0
b3I9KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmIHNyYykKIHsKICAgICBTa1JlZkNudF9TYWZlQXNz
aWduKG1fdHlwZWZhY2UsIHNyYy5tX3R5cGVmYWNlKTsKIAorICAgIG1fZmFtaWx5ID0gc3JjLm1f
ZmFtaWx5OwogICAgIG1fdGV4dFNpemUgPSBzcmMubV90ZXh0U2l6ZTsKICAgICBtX2Zha2VCb2xk
ID0gc3JjLm1fZmFrZUJvbGQ7CiAgICAgbV9mYWtlSXRhbGljID0gc3JjLm1fZmFrZUl0YWxpYzsK
ICAgICBtX2hhcmZidXp6RmFjZSA9IHNyYy5tX2hhcmZidXp6RmFjZTsKKyAgICBtX3N0eWxlID0g
c3JjLm1fc3R5bGU7CiAKICAgICByZXR1cm4gKnRoaXM7CiB9CkBAIC0xMjEsMTMgKzEzMCwxNSBA
QCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnNldHVwUGFpbnQoU2tQYWludCogcGFpbnQpIGNvbnN0
CiB7CiAgICAgY29uc3QgZmxvYXQgdHMgPSBtX3RleHRTaXplID4gMCA/IG1fdGV4dFNpemUgOiAx
MjsKIAotICAgIHBhaW50LT5zZXRBbnRpQWxpYXMoaXNTa2lhQW50aUFsaWFzKTsKLSAgICBwYWlu
dC0+c2V0SGludGluZyhza2lhSGludGluZyk7Ci0gICAgcGFpbnQtPnNldExDRFJlbmRlclRleHQo
aXNTa2lhU3VicGl4ZWxHbHlwaHMpOworICAgIHBhaW50LT5zZXRBbnRpQWxpYXMobV9zdHlsZS51
c2VBbnRpQWxpYXMgPT0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2UgPyBpc1NraWFBbnRp
QWxpYXMgOiBtX3N0eWxlLnVzZUFudGlBbGlhcyk7CisgICAgcGFpbnQtPnNldEhpbnRpbmcobV9z
dHlsZS51c2VIaW50aW5nID09IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlID8gc2tpYUhp
bnRpbmcgOiAoU2tQYWludDo6SGludGluZykgbV9zdHlsZS5oaW50U3R5bGUpOwogICAgIHBhaW50
LT5zZXRUZXh0U2l6ZShTa0Zsb2F0VG9TY2FsYXIodHMpKTsKICAgICBwYWludC0+c2V0VHlwZWZh
Y2UobV90eXBlZmFjZSk7CiAgICAgcGFpbnQtPnNldEZha2VCb2xkVGV4dChtX2Zha2VCb2xkKTsK
ICAgICBwYWludC0+c2V0VGV4dFNrZXdYKG1fZmFrZUl0YWxpYyA/IC1TS19TY2FsYXIxIC8gNCA6
IDApOworCisgICAgaWYgKG1fc3R5bGUudXNlQW50aUFsaWFzID09IDEgfHwgbV9zdHlsZS51c2VB
bnRpQWxpYXMgPT0gRm9udFJlbmRlclN0eWxlOjpOb1ByZWZlcmVuY2UgJiYgaXNTa2lhQW50aUFs
aWFzKQorICAgICAgICBwYWludC0+c2V0TENEUmVuZGVyVGV4dChtX3N0eWxlLnVzZVN1YnBpeGVs
ID09IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlID8gaXNTa2lhU3VicGl4ZWxHbHlwaHMg
OiBtX3N0eWxlLnVzZVN1YnBpeGVsKTsKIH0KIAogU2tGb250SUQgRm9udFBsYXRmb3JtRGF0YTo6
dW5pcXVlSUQoKSBjb25zdApAQCAtMTg0LDQgKzE5NSwyMSBAQCBIQl9GYWNlUmVjXyogRm9udFBs
YXRmb3JtRGF0YTo6aGFyZmJ1enpGYWNlKCkgY29uc3QKICAgICByZXR1cm4gbV9oYXJmYnV6ekZh
Y2UtPmZhY2UoKTsKIH0KIAordm9pZCBGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJl
bmRlclN0eWxlKCkKK3sKKyAgICBpZiAobV9mYW1pbHkubGVuZ3RoKCkpIHsKKyAgICAgICAgLy8g
V2UgZG9uJ3QgaGF2ZSBhIGZhbWlseSBmb3IgdGhpcy4gUHJvYmFibHkgYmVjYXVzZSBpdCdzIGEg
d2ViZm9udC4gV2UKKyAgICAgICAgLy8gc2V0IGFsbCB0aGUgdmFsdWVzIHRvICdubyBwcmVmZXJl
bmNlJyBhbmQgdGFrZSB0aGUgZGVmYXVsdHMgcGFzc2VkCisgICAgICAgIC8vIGluIGZyb20gWFNF
VFRJTkdTLgorICAgICAgICBtX3N0eWxlLnVzZUJpdG1hcHMgPSBGb250UmVuZGVyU3R5bGU6Ok5v
UHJlZmVyZW5jZTsKKyAgICAgICAgbV9zdHlsZS51c2VBdXRvSGludCA9IEZvbnRSZW5kZXJTdHls
ZTo6Tm9QcmVmZXJlbmNlOworICAgICAgICBtX3N0eWxlLnVzZUhpbnRpbmcgPSBGb250UmVuZGVy
U3R5bGU6Ok5vUHJlZmVyZW5jZTsKKyAgICAgICAgbV9zdHlsZS51c2VBbnRpQWxpYXMgPSBGb250
UmVuZGVyU3R5bGU6Ok5vUHJlZmVyZW5jZTsKKyAgICAgICAgbV9zdHlsZS51c2VTdWJwaXhlbCA9
IEZvbnRSZW5kZXJTdHlsZTo6Tm9QcmVmZXJlbmNlOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKG1fZmFtaWx5LmRh
dGEoKSwgKCgoaW50KW1fdGV4dFNpemUpIDw8IDIpIHwgKG1fdHlwZWZhY2UtPnN0eWxlKCkgJiAz
KSwgJm1fc3R5bGUpOworfQorCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXgu
aCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxp
bnV4LmgKaW5kZXggMjljZThlNy4uNTg1NDcxZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5oCkBAIC0z
MSw2ICszMSw4IEBACiAjaWZuZGVmIEZvbnRQbGF0Zm9ybURhdGFMaW51eF9oCiAjZGVmaW5lIEZv
bnRQbGF0Zm9ybURhdGFMaW51eF9oCiAKKyNpbmNsdWRlICJDU3RyaW5nLmgiCisjaW5jbHVkZSAi
Rm9udFJlbmRlclN0eWxlLmgiCiAjaW5jbHVkZSAiU3RyaW5nSW1wbC5oIgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDxTa1BhaW50Lmg+CkBAIC00Myw3ICs0NSw2IEBAIHN0cnVj
dCBIQl9GYWNlUmVjXzsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgRm9udERlc2NyaXB0
aW9uOwotY2xhc3MgU3RyaW5nOwogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogLy8gRm9udFBs
YXRmb3JtRGF0YSBpcyB0aGUgaGFuZGxlIHdoaWNoIFdlYktpdCBoYXMgb24gYSBzcGVjaWZpYyBm
YWNlLiBBIGZhY2UKQEAgLTc5LDcgKzgwLDcgQEAgcHVibGljOgogICAgICAgICB7IH0KIAogICAg
IEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYpOwotICAgIEZvbnRQbGF0
Zm9ybURhdGEoU2tUeXBlZmFjZSosIGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29s
IGZha2VJdGFsaWMpOworICAgIEZvbnRQbGF0Zm9ybURhdGEoU2tUeXBlZmFjZSosIGNvbnN0IGNo
YXIqIG5hbWUsIGZsb2F0IHRleHRTaXplLCBib29sIGZha2VCb2xkLCBib29sIGZha2VJdGFsaWMp
OwogICAgIEZvbnRQbGF0Zm9ybURhdGEoY29uc3QgRm9udFBsYXRmb3JtRGF0YSYgc3JjLCBmbG9h
dCB0ZXh0U2l6ZSk7CiAgICAgfkZvbnRQbGF0Zm9ybURhdGEoKTsKIApAQCAtMTQwLDExICsxNDEs
MTUgQEAgcHJpdmF0ZToKICAgICAgICAgSEJfRmFjZVJlY18qIG1faGFyZmJ1enpGYWNlOwogICAg
IH07CiAKKyAgICB2b2lkIHF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUoKTsKKwogICAgIC8vIEZJ
WE1FOiBDb3VsZCBTa0F1dG9VbnJlZiBiZSB1c2VkIGhlcmU/CiAgICAgU2tUeXBlZmFjZSogbV90
eXBlZmFjZTsKKyAgICBDU3RyaW5nIG1fZmFtaWx5OwogICAgIGZsb2F0IG1fdGV4dFNpemU7CiAg
ICAgYm9vbCBtX2Zha2VCb2xkOwogICAgIGJvb2wgbV9mYWtlSXRhbGljOworICAgIEZvbnRSZW5k
ZXJTdHlsZSBtX3N0eWxlOwogICAgIG11dGFibGUgUmVmUHRyPFJlZkNvdW50ZWRIYXJmYnV6ekZh
Y2U+IG1faGFyZmJ1enpGYWNlOwogCiAgICAgU2tUeXBlZmFjZSogaGFzaFRhYmxlRGVsZXRlZEZv
bnRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8U2tUeXBlZmFjZSo+KC0x
KTsgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
UmVuZGVyU3R5bGUuaCBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFJl
bmRlclN0eWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEzYzczNgot
LS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFJlbmRlclN0eWxlLmgKQEAgLTAsMCArMSw1NiBAQAorLyogQ29weXJpZ2h0IChjKSAyMDEwLCBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
CisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRm9udFJlbmRlclN0eWxlX2gKKyNk
ZWZpbmUgRm9udFJlbmRlclN0eWxlX2gKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBGb250
UmVuZGVyU3R5bGUgZGVzY3JpYmVzIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMgZm9yIHJlbmRlcmlu
ZyBhIGZvbnQgYXQgYQorLy8gZ2l2ZW4gc2l6ZS4KK3N0cnVjdCBGb250UmVuZGVyU3R5bGUgewor
ICAgIGVudW0geworICAgICAgICBOb1ByZWZlcmVuY2UgPSAyLAorICAgIH07CisKKyAgICAvLyBF
YWNoIG9mIHRoZSB1c2UqIG1lbWJlcnMgYmVsb3cgY2FuIHRha2Ugb25lIG9mIHRocmVlIHZhbHVl
czoKKyAgICAvLyAgIDA6IG9mZgorICAgIC8vICAgMTogb24KKyAgICAvLyAgIE5vUHJlZmVyZW5j
ZTogbm8gcHJlZmVyZW5jZSBleHByZXNzZWQKKyAgICBjaGFyIHVzZUJpdG1hcHM7IC8vIHVzZSBl
bWJlZGRlZCBiaXRtYXAgc3RyaWtlIGlmIHBvc3NpYmxlCisgICAgY2hhciB1c2VBdXRvSGludDsg
Ly8gdXNlICdhdXRvJyBoaW50aW5nIChGcmVlVHlwZSBzcGVjaWZpYykKKyAgICBjaGFyIHVzZUhp
bnRpbmc7IC8vIGhpbnQgZ2x5cGhzIHRvIHRoZSBwaXhlbCBncmlkCisgICAgY2hhciBoaW50U3R5
bGU7IC8vIGxldmVsIG9mIGhpbnRpbmcsIDAuLjMKKyAgICBjaGFyIHVzZUFudGlBbGlhczsgLy8g
YW50aWFsaWFzIGdseXBoIHNoYXBlcworICAgIGNoYXIgdXNlU3VicGl4ZWw7IC8vIHVzZSBzdWJw
aXhlbCBhbnRpYWxpYXMKK307CisKK30KKworI2VuZGlmIC8vIEZvbnRSZW5kZXJTdHlsZV9oCmRp
ZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZwppbmRleCBkYjZlODViLi4xZTQ1NjNkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21p
dW0vQ2hhbmdlTG9nCisrKyBiL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwy
NCBAQAorMjAwOS0wMS0wNyAgQWRhbSBMYW5nbGV5ICA8YWdsQGdvb2dsZS5jb20+CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgZm9udGNvbmZpZyBvbiBM
aW51eCBjYW4gY2hhbmdlIHRoZSByZW5kZXIgcHJlZmVyZW5jZXMgb24gYSBwZXIgc3RyaWtlCisg
ICAgICAgIGJhc2lzIChhIHN0cmlrZSBhIGNvbWJpbmF0aW9uIG9mIGZhY2UgYW5kIHNpemUpLiBC
ZWNhdXNlIG9mIHRoaXMsIHdlCisgICAgICAgIG5lZWQgdG8gcXVlcnkgZm9udGNvbmZpZyBlYWNo
IHRpbWUgYSBuZXcgRm9udFBsYXRmb3JtRGF0YSBpcyBjcmVhdGVkCisgICAgICAgIGZvciBhIG5l
dyBzaXplLgorCisgICAgICAgIFRoaXMgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBxdWVyeWluZyB0
aGlzIHZpYSBDaHJvbWl1bUJyaWRnZS4KKworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MzMwNjUKKworICAgICAgICAqIFdlYktpdC5neXA6CisgICAgICAg
ICogcHVibGljL2d0ay9XZWJGb250SW5mby5oOgorICAgICAgICAqIHB1YmxpYy9saW51eC9XZWJT
YW5kYm94U3VwcG9ydC5oOgorICAgICAgICAqIHNyYy9DaHJvbWl1bUJyaWRnZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDaHJvbWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UpOgor
ICAgICAgICAqIHNyYy9ndGsvV2ViRm9udEluZm8uY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJG
b250SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2UpOgorCiAyMDEwLTAxLTA3ICBBZGFtIEJhcnRo
ICA8YWJhcnRoQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTm8gcmV2aWV3LCByb2xsaW5nIG91dCBy
NTI4NDcuCkBAIC0yNTIsNyArMjczLDYgQEAKICAgICAgICAgKFdlYktpdDo6QXV0b2NvbXBsZXRl
UG9wdXBNZW51Q2xpZW50OjpyZXNldExhc3RGaWVsZFZhbHVlKToKICAgICAgICAgKiBzcmMvQXV0
b2NvbXBsZXRlUG9wdXBNZW51Q2xpZW50Lmg6CiAKLQogMjAwOS0xMi0yOCAgS2ludWtvIFlhc3Vk
YSAgPGtpbnVrb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFjaWVqIFN0
YWNob3dpYWsuCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBiL1dlYktp
dC9jaHJvbWl1bS9XZWJLaXQuZ3lwCmluZGV4IDE2NjBkM2MuLmQ4OWVlMTcgMTAwNjQ0Ci0tLSBh
L1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCisrKyBiL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwCkBAIC04MCw2ICs4MCw3IEBACiAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAg
ICAgICAgICAncHVibGljL2d0ay9XZWJJbnB1dEV2ZW50RmFjdG9yeS5oJywKICAgICAgICAgICAg
ICAgICAncHVibGljL2xpbnV4L1dlYkZvbnRSZW5kZXJpbmcuaCcsCisgICAgICAgICAgICAgICAg
J3B1YmxpYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaCcsCiAgICAgICAgICAgICAgICAgJ3B1
YmxpYy94MTEvV2ViU2NyZWVuSW5mb0ZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1Ymxp
Yy9tYWMvV2ViSW5wdXRFdmVudEZhY3RvcnkuaCcsCiAgICAgICAgICAgICAgICAgJ3B1YmxpYy9t
YWMvV2ViU2NyZWVuSW5mb0ZhY3RvcnkuaCcsCkBAIC0yMjYsNiArMjI3LDcgQEAKICAgICAgICAg
ICAgICAgICAnc3JjL0luc3BlY3RvckNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAn
c3JjL0luc3BlY3RvckNsaWVudEltcGwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9saW51eC9X
ZWJGb250UmVuZGVyaW5nLmNwcCcsCisgICAgICAgICAgICAgICAgJ3NyYy9saW51eC9XZWJGb250
UmVuZGVyU3R5bGUuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL3gxMS9XZWJTY3JlZW5JbmZv
RmFjdG9yeS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvbWFjL1dlYklucHV0RXZlbnRGYWN0
b3J5Lm1tJywKICAgICAgICAgICAgICAgICAnc3JjL21hYy9XZWJTY3JlZW5JbmZvRmFjdG9yeS5t
bScsCmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL2d0ay9XZWJGb250SW5mby5o
IGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9ndGsvV2ViRm9udEluZm8uaAppbmRleCBhZDM3Njgw
Li5mYWU3OTJkIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL2d0ay9XZWJGb250
SW5mby5oCisrKyBiL1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvZ3RrL1dlYkZvbnRJbmZvLmgKQEAg
LTMyLDYgKzMyLDcgQEAKICNkZWZpbmUgV2ViRm9udEluZm9faAogCiAjaW5jbHVkZSAiLi4vV2Vi
Q1N0cmluZy5oIgorI2luY2x1ZGUgIi4uL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5oIgogCiAj
aW5jbHVkZSA8c3RyaW5nLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC00OCw2ICs0OSwxOSBA
QCBwdWJsaWM6CiAgICAgLy8gUmV0dXJuczogdGhlIGZvbnQgZmFtaWx5IG9yIGFuIGVtcHR5IHN0
cmluZyBpZiB0aGUgcmVxdWVzdCBjb3VsZCBub3QgYmUKICAgICAvLyBzYXRpc2ZpZWQuCiAgICAg
V0VCS0lUX0FQSSBzdGF0aWMgV2ViQ1N0cmluZyBmYW1pbHlGb3JDaGFycyhjb25zdCBXZWJVQ2hh
ciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3RlcnMpOworCisgICAgLy8gRmlsbCBvdXQg
dGhlIGdpdmVuIFdlYkZvbnRSZW5kZXJTdHlsZSB3aXRoIHRoZSB1c2VyJ3MgcHJlZmVyZW5jZXMg
Zm9yCisgICAgLy8gcmVuZGVyaW5nIHRoZSBnaXZlbiBmb250IGF0IHRoZSBnaXZlbiBzaXplLgor
ICAgIC8vICAgZmFtaWx5OiBpLmUuICJUaW1lcyBOZXcgUm9tYW4iCisgICAgLy8gICBzaXplQW5k
U3R5bGU6CisgICAgLy8gICAgICAzMzIyMjIyMjIyMjIxMTExMTExMTExCisgICAgLy8gICAgICAx
MDk4NzY1NDMyMTA5ODc2NTQzMjEwOTg3NjU0MzIxMAorICAgIC8vICAgICArLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0rCisgICAgLy8gICAgIHwuLi4uLi4uLi4uLi4uLlNpemUuLi4u
Li4uLi4uLi5JQnwKKyAgICAvLyAgICAgKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
KworICAgIC8vICAgICBJOiBpdGFsaWMgZmxhZworICAgIC8vICAgICBCOiBib2xkIGZsYWcKKyAg
ICBXRUJLSVRfQVBJIHN0YXRpYyB2b2lkIHJlbmRlclN0eWxlRm9yU3RyaWtlKGNvbnN0IGNoYXIq
IGZhbWlseSwgaW50IHNpemVBbmRTdHlsZSwgV2ViRm9udFJlbmRlclN0eWxlKiByZXN1bHQpOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CmRpZmYgLS1naXQgYS9XZWJLaXQvY2hyb21pdW0v
cHVibGljL2xpbnV4L1dlYkZvbnRSZW5kZXJTdHlsZS5oIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5hM2IxODBmCi0tLSAvZGV2L251bGwKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1Ymxp
Yy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1
dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBu
YW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHBy
b21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJB
UyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwK
KyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBXZWJG
b250UmVuZGVyU3R5bGVfaAorI2RlZmluZSBXZWJGb250UmVuZGVyU3R5bGVfaAorCisjaW5jbHVk
ZSAiLi4vV2ViQ29tbW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsgc3RydWN0IEZvbnRSZW5k
ZXJTdHlsZTsgfQorCituYW1lc3BhY2UgV2ViS2l0IHsKKworc3RydWN0IFdlYkZvbnRSZW5kZXJT
dHlsZSB7CisgICAgLy8gRWFjaCBvZiB0aGUgdXNlKiBtZW1iZXJzIGJlbG93IGNhbiB0YWtlIG9u
ZSBvZiB0aHJlZSB2YWx1ZXM6CisgICAgLy8gICAwOiBvZmYKKyAgICAvLyAgIDE6IG9uCisgICAg
Ly8gICAyOiBubyBwcmVmZXJlbmNlIGV4cHJlc3NlZAorICAgIGNoYXIgdXNlQml0bWFwczsgLy8g
dXNlIGVtYmVkZGVkIGJpdG1hcCBzdHJpa2UgaWYgcG9zc2libGUKKyAgICBjaGFyIHVzZUF1dG9I
aW50OyAvLyB1c2UgJ2F1dG8nIGhpbnRpbmcgKEZyZWVUeXBlIHNwZWNpZmljKQorICAgIGNoYXIg
dXNlSGludGluZzsgLy8gaGludCBnbHlwaHMgdG8gdGhlIHBpeGVsIGdyaWQKKyAgICBjaGFyIGhp
bnRTdHlsZTsgLy8gbGV2ZWwgb2YgaGludGluZywgMC4uMworICAgIGNoYXIgdXNlQW50aUFsaWFz
OyAvLyBhbnRpYWxpYXMgZ2x5cGggc2hhcGVzCisgICAgY2hhciB1c2VTdWJwaXhlbDsgLy8gdXNl
IHN1YnBpeGVsIGFudGlhbGlhcworCisjaWZkZWYgV0VCS0lUX0lNUExFTUVOVEFUSU9OCisgICAg
Ly8gVHJhbnNsYXRlcyB0aGUgbWVtYmVycyBvZiB0aGlzIHN0cnVjdCB0byBhIEZvbnRSZW5kZXJT
dHlsZQorICAgIHZvaWQgdG9Gb250UmVuZGVyU3R5bGUoV2ViQ29yZTo6Rm9udFJlbmRlclN0eWxl
Kik7CisjZW5kaWYKKworICAgIHZvaWQgc2V0RGVmYXVsdHMoKTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYktpdAorCisjZW5kaWYgLy8gV2ViRm9udFJlbmRlclN0eWxlX2gKZGlmZiAtLWdpdCBh
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvbGludXgvV2ViU2FuZGJveFN1cHBvcnQuaCBiL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvbGludXgvV2ViU2FuZGJveFN1cHBvcnQuaAppbmRleCA1ZWRjZWIy
Li42OTkwYWJlIDEwMDY0NAotLS0gYS9XZWJLaXQvY2hyb21pdW0vcHVibGljL2xpbnV4L1dlYlNh
bmRib3hTdXBwb3J0LmgKKysrIGIvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9saW51eC9XZWJTYW5k
Ym94U3VwcG9ydC5oCkBAIC0zNiw2ICszNiw4IEBACiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCitz
dHJ1Y3QgV2ViRm9udFJlbmRlclN0eWxlOworCiAvLyBQdXQgbWV0aG9kcyBoZXJlIHRoYXQgYXJl
IHJlcXVpcmVkIGR1ZSB0byBzYW5kYm94IHJlc3RyaWN0aW9ucy4KIGNsYXNzIFdlYlNhbmRib3hT
dXBwb3J0IHsKIHB1YmxpYzoKQEAgLTQ5LDYgKzUxLDcgQEAgcHVibGljOgogICAgIC8vIFJldHVy
bnMgYSBzdHJpbmcgd2l0aCB0aGUgZm9udCBmYW1pbHkgb24gYW4gZW1wdHkgc3RyaW5nIGlmIHRo
ZQogICAgIC8vIHJlcXVlc3QgY2Fubm90IGJlIHNhdGlzZmllZC4KICAgICB2aXJ0dWFsIFdlYlN0
cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBXZWJVQ2hhciogY2hhcmFjdGVy
cywgc2l6ZV90IG51bUNoYXJhY3RlcnMpID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgZ2V0UmVuZGVy
U3R5bGVGb3JTdHJpa2UoY29uc3QgY2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlLCBXZWJG
b250UmVuZGVyU3R5bGUqIHN0eWxlKSA9IDA7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwIGIvV2Vi
S2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKaW5kZXggMGZkMDgyNS4uYWZmYjNl
MCAxMDA2NDQKLS0tIGEvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKKysr
IGIvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAKQEAgLTY0LDYgKzY0LDcg
QEAKICNpZiBPUyhMSU5VWCkKICNpbmNsdWRlICJXZWJTYW5kYm94U3VwcG9ydC5oIgogI2luY2x1
ZGUgIldlYkZvbnRJbmZvLmgiCisjaW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCiAjZW5k
aWYKIAogI2lmIFdFQktJVF9VU0lOR19TS0lBCkBAIC0zMDgsNiArMzA5LDE4IEBAIFN0cmluZyBD
aHJvbWl1bUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfCiAKICAgICByZXR1cm4gV2ViU3RyaW5nKCk7CiB9CisKK3ZvaWQgQ2hy
b21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKGNvbnN0IGNoYXIqIGZvbnQsIGlu
dCBzaXplQW5kU3R5bGUsIEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0KQoreworICAgIFdlYkZvbnRS
ZW5kZXJTdHlsZSBzdHlsZTsKKworICAgIGlmICh3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBv
cnQoKSkKKyAgICAgICAgd2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCktPmdldFJlbmRl
clN0eWxlRm9yU3RyaWtlKGZvbnQsIHNpemVBbmRTdHlsZSwgJnN0eWxlKTsKKyAgICBlbHNlCisg
ICAgICAgIFdlYkZvbnRJbmZvOjpyZW5kZXJTdHlsZUZvclN0cmlrZShmb250LCBzaXplQW5kU3R5
bGUsICZzdHlsZSk7CisKKyAgICBzdHlsZS50b0ZvbnRSZW5kZXJTdHlsZShyZXN1bHQpOworfQog
I2VuZGlmCiAKIC8vIEhUTUw1IERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJv
bWl1bS9zcmMvZ3RrL1dlYkZvbnRJbmZvLmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvZ3RrL1dl
YkZvbnRJbmZvLmNwcAppbmRleCA3NmVkNjE4Li4zYWMwYjAwIDEwMDY0NAotLS0gYS9XZWJLaXQv
Y2hyb21pdW0vc3JjL2d0ay9XZWJGb250SW5mby5jcHAKKysrIGIvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9ndGsvV2ViRm9udEluZm8uY3BwCkBAIC0zMCw2ICszMCw3IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJXZWJGb250SW5mby5oIgorI2luY2x1ZGUgIldlYkZvbnRSZW5kZXJT
dHlsZS5oIgogCiAjaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+CiAjaW5jbHVkZSA8
c3RyaW5nLmg+CkBAIC01NSwxMSArNTYsMTEgQEAgV2ViQ1N0cmluZyBXZWJGb250SW5mbzo6ZmFt
aWx5Rm9yQ2hhcnMoY29uc3QgV2ViVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGEKICAg
ICBGY1ZhbHVlIGZjdmFsdWU7CiAgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBlQ2hhclNldDsKICAg
ICBmY3ZhbHVlLnUuYyA9IGNzZXQ7Ci0gICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX0NIQVJT
RVQsIGZjdmFsdWUsIDApOworICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19DSEFSU0VULCBm
Y3ZhbHVlLCBGY0ZhbHNlKTsKIAogICAgIGZjdmFsdWUudHlwZSA9IEZjVHlwZUJvb2w7CiAgICAg
ZmN2YWx1ZS51LmIgPSBGY1RydWU7Ci0gICAgRmNQYXR0ZXJuQWRkKHBhdHRlcm4sIEZDX1NDQUxB
QkxFLCBmY3ZhbHVlLCAwKTsKKyAgICBGY1BhdHRlcm5BZGQocGF0dGVybiwgRkNfU0NBTEFCTEUs
IGZjdmFsdWUsIEZjRmFsc2UpOwogCiAgICAgRmNDb25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4s
IEZjTWF0Y2hQYXR0ZXJuKTsKICAgICBGY0RlZmF1bHRTdWJzdGl0dXRlKHBhdHRlcm4pOwpAQCAt
MTA0LDQgKzEwNSw2OCBAQCBXZWJDU3RyaW5nIFdlYkZvbnRJbmZvOjpmYW1pbHlGb3JDaGFycyhj
b25zdCBXZWJVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYQogICAgIHJldHVybiBXZWJD
U3RyaW5nKCk7CiB9CiAKK3ZvaWQgV2ViRm9udEluZm86OnJlbmRlclN0eWxlRm9yU3RyaWtlKGNv
bnN0IGNoYXIqIGZhbWlseSwgaW50IHNpemVBbmRTdHlsZSwgV2ViRm9udFJlbmRlclN0eWxlKiBv
dXQpCit7CisgICAgYm9vbCBpc0JvbGQgPSBzaXplQW5kU3R5bGUgJiAxOworICAgIGJvb2wgaXNJ
dGFsaWMgPSBzaXplQW5kU3R5bGUgJiAyOworICAgIGludCBwaXhlbFNpemUgPSBzaXplQW5kU3R5
bGUgPj4gMjsKKworICAgIEZjUGF0dGVybiogcGF0dGVybiA9IEZjUGF0dGVybkNyZWF0ZSgpOwor
ICAgIEZjVmFsdWUgZmN2YWx1ZTsKKworICAgIGZjdmFsdWUudHlwZSA9IEZjVHlwZVN0cmluZzsK
KyAgICBmY3ZhbHVlLnUucyA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCAqPihmYW1p
bHkpOworICAgIEZjUGF0dGVybkFkZChwYXR0ZXJuLCBGQ19GQU1JTFksIGZjdmFsdWUsIEZjRmFs
c2UpOworCisgICAgZmN2YWx1ZS50eXBlID0gRmNUeXBlSW50ZWdlcjsKKyAgICBmY3ZhbHVlLnUu
aSA9IGlzQm9sZCA/IEZDX1dFSUdIVF9CT0xEIDogRkNfV0VJR0hUX05PUk1BTDsKKyAgICBGY1Bh
dHRlcm5BZGQocGF0dGVybiwgRkNfV0VJR0hULCBmY3ZhbHVlLCBGY0ZhbHNlKTsKKworICAgIGZj
dmFsdWUudHlwZSA9IEZjVHlwZUludGVnZXI7CisgICAgZmN2YWx1ZS51LmkgPSBpc0l0YWxpYyA/
IEZDX1NMQU5UX0lUQUxJQyA6IEZDX1NMQU5UX1JPTUFOOworICAgIEZjUGF0dGVybkFkZChwYXR0
ZXJuLCBGQ19TTEFOVCwgZmN2YWx1ZSwgRmNGYWxzZSk7CisKKyAgICBmY3ZhbHVlLnR5cGUgPSBG
Y1R5cGVCb29sOworICAgIGZjdmFsdWUudS5iID0gRmNUcnVlOworICAgIEZjUGF0dGVybkFkZChw
YXR0ZXJuLCBGQ19TQ0FMQUJMRSwgZmN2YWx1ZSwgRmNGYWxzZSk7CisKKyAgICBmY3ZhbHVlLnR5
cGUgPSBGY1R5cGVEb3VibGU7CisgICAgZmN2YWx1ZS51LmQgPSBwaXhlbFNpemU7CisgICAgRmNQ
YXR0ZXJuQWRkKHBhdHRlcm4sIEZDX1NJWkUsIGZjdmFsdWUsIEZjRmFsc2UpOworCisgICAgRmND
b25maWdTdWJzdGl0dXRlKDAsIHBhdHRlcm4sIEZjTWF0Y2hQYXR0ZXJuKTsKKyAgICBGY0RlZmF1
bHRTdWJzdGl0dXRlKHBhdHRlcm4pOworCisgICAgRmNSZXN1bHQgcmVzdWx0OworICAgIC8vIFNv
bWUgdmVyc2lvbnMgb2YgZm9udGNvbmZpZyBkb24ndCBhY3R1YWxseSB3cml0ZSBhIHZhbHVlIGlu
dG8gcmVzdWx0LgorICAgIC8vIEhvd2V2ZXIsIGl0J3Mgbm90IGNsZWFyIGZyb20gdGhlIGRvY3Vt
ZW50YXRpb24gaWYgcmVzdWx0IHNob3VsZCBiZSBhCisgICAgLy8gbm9uLTAgcG9pbnRlcjogZnV0
dXJlIHZlcnNpb25zIG1pZ2h0IGV4cGVjdCB0byBiZSBhYmxlIHRvIHdyaXRlIHRvCisgICAgLy8g
aXQuIFNvIHdlIHBhc3MgaW4gYSB2YWxpZCBwb2ludGVyIGFuZCBpZ25vcmUgaXQuCisgICAgRmNQ
YXR0ZXJuKiBtYXRjaCA9IEZjRm9udE1hdGNoKDAsIHBhdHRlcm4sICZyZXN1bHQpOworICAgIEZj
UGF0dGVybkRlc3Ryb3kocGF0dGVybik7CisKKyAgICBvdXQtPnNldERlZmF1bHRzKCk7CisKKyAg
ICBpZiAoIW1hdGNoKSB7CisgICAgICAgIEZjUGF0dGVybkRlc3Ryb3kobWF0Y2gpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgRmNCb29sIGI7CisgICAgaW50IGk7CisKKyAgICBpZiAo
RmNQYXR0ZXJuR2V0Qm9vbChtYXRjaCwgRkNfQU5USUFMSUFTLCAwLCAmYikgPT0gRmNSZXN1bHRN
YXRjaCkKKyAgICAgICAgb3V0LT51c2VBbnRpQWxpYXMgPSBiOworICAgIGlmIChGY1BhdHRlcm5H
ZXRCb29sKG1hdGNoLCBGQ19FTUJFRERFRF9CSVRNQVAsIDAsICZiKSA9PSBGY1Jlc3VsdE1hdGNo
KQorICAgICAgICBvdXQtPnVzZUJpdG1hcHMgPSBiOworICAgIGlmIChGY1BhdHRlcm5HZXRCb29s
KG1hdGNoLCBGQ19BVVRPSElOVCwgMCwgJmIpID09IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgIG91
dC0+dXNlQXV0b0hpbnQgPSBiOworICAgIGlmIChGY1BhdHRlcm5HZXRCb29sKG1hdGNoLCBGQ19I
SU5USU5HLCAwLCAmYikgPT0gRmNSZXN1bHRNYXRjaCkKKyAgICAgICAgb3V0LT51c2VIaW50aW5n
ID0gYjsKKyAgICBpZiAoRmNQYXR0ZXJuR2V0SW50ZWdlcihtYXRjaCwgRkNfSElOVF9TVFlMRSwg
MCwgJmkpID09IEZjUmVzdWx0TWF0Y2gpCisgICAgICAgIG91dC0+aGludFN0eWxlID0gaTsKKwor
ICAgIEZjUGF0dGVybkRlc3Ryb3kobWF0Y2gpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQK
ZGlmZiAtLWdpdCBhL1dlYktpdC9jaHJvbWl1bS9zcmMvbGludXgvV2ViRm9udFJlbmRlclN0eWxl
LmNwcCBiL1dlYktpdC9jaHJvbWl1bS9zcmMvbGludXgvV2ViRm9udFJlbmRlclN0eWxlLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjg2NGQxCi0tLSAvZGV2L251bGwK
KysrIGIvV2ViS2l0L2Nocm9taXVtL3NyYy9saW51eC9XZWJGb250UmVuZGVyU3R5bGUuY3BwCkBA
IC0wLDAgKzEsNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAq
IG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFt
ZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAq
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERF
UlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBD
T1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisg
KiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiV2ViRm9udFJlbmRl
clN0eWxlLmgiCisKKyNpbmNsdWRlICJGb250UmVuZGVyU3R5bGUuaCIKKwordXNpbmcgV2ViQ29y
ZTo6Rm9udFJlbmRlclN0eWxlOworCituYW1lc3BhY2UgV2ViS2l0IHsKKwordm9pZCBXZWJGb250
UmVuZGVyU3R5bGU6OnRvRm9udFJlbmRlclN0eWxlKEZvbnRSZW5kZXJTdHlsZSogb3V0KQorewor
ICAgIG91dC0+dXNlQml0bWFwcyA9IHVzZUJpdG1hcHM7CisgICAgb3V0LT51c2VBdXRvSGludCA9
IHVzZUF1dG9IaW50OworICAgIG91dC0+dXNlSGludGluZyA9IHVzZUhpbnRpbmc7CisgICAgb3V0
LT5oaW50U3R5bGUgPSBoaW50U3R5bGU7CisgICAgb3V0LT51c2VBbnRpQWxpYXMgPSB1c2VBbnRp
QWxpYXM7CisgICAgb3V0LT51c2VTdWJwaXhlbCA9IHVzZVN1YnBpeGVsOworfQorCit2b2lkIFdl
YkZvbnRSZW5kZXJTdHlsZTo6c2V0RGVmYXVsdHMoKQoreworICAgIHVzZUJpdG1hcHMgPSAyOwor
ICAgIHVzZUF1dG9IaW50ID0gMjsKKyAgICB1c2VIaW50aW5nID0gMjsKKyAgICBoaW50U3R5bGUg
PSAwOworICAgIHVzZUFudGlBbGlhcyA9IDI7CisgICAgdXNlU3VicGl4ZWwgPSAyOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJLaXQK
</data>
<flag name="review"
          id="28307"
          type_id="1"
          status="+"
          setter="fishd"
    />
    <flag name="commit-queue"
          id="28308"
          type_id="3"
          status="-"
          setter="agl"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49698</attachid>
            <date>2010-02-28 07:55:34 -0800</date>
            <delta_ts>2010-02-28 07:55:34 -0800</delta_ts>
            <desc>family checking fix in querySystemForRenderStyle</desc>
            <filename>family-check.patch</filename>
            <type>text/plain</type>
            <size>526</size>
            <attacher name="Roman Tsisyk">roman</attacher>
            
              <data encoding="base64">SW5kZXg6IEZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gRm9udFBsYXRm
b3JtRGF0YUxpbnV4LmNwcAkocmV2aXNpb24gNTUyNTApCisrKyBGb250UGxhdGZvcm1EYXRhTGlu
dXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTcsNyArMTk3LDcgQEAKIAogdm9pZCBGb250UGxh
dGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJlbmRlclN0eWxlKCkKIHsKLSAgICBpZiAobV9mYW1p
bHkubGVuZ3RoKCkpIHsKKyAgICBpZiAobV9mYW1pbHkubGVuZ3RoKCkgPT0gMCkgewogICAgICAg
ICAvLyBXZSBkb24ndCBoYXZlIGEgZmFtaWx5IGZvciB0aGlzLiBQcm9iYWJseSBiZWNhdXNlIGl0
J3MgYSB3ZWJmb250LiBXZQogICAgICAgICAvLyBzZXQgYWxsIHRoZSB2YWx1ZXMgdG8gJ25vIHBy
ZWZlcmVuY2UnIGFuZCB0YWtlIHRoZSBkZWZhdWx0cyBwYXNzZWQKICAgICAgICAgLy8gaW4gZnJv
bSBYU0VUVElOR1MuCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>