<?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>97993</bug_id>
          
          <creation_ts>2012-09-30 23:05:01 -0700</creation_ts>
          <short_desc>[Chromium] Introduce caches for HarfBuzzShaper</short_desc>
          <delta_ts>2013-04-04 08:33:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>98247</dependson>
          <blocked>97281</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenichi Ishibashi">bashi</reporter>
          <assigned_to name="Kenichi Ishibashi">bashi</assigned_to>
          <cc>behdad</cc>
    
    <cc>d-r</cc>
    
    <cc>senorblanco</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>731394</commentid>
    <comment_count>0</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-09-30 23:05:01 -0700</bug_when>
    <thetext>See https://bugs.webkit.org/show_bug.cgi?id=97281 for the context.

I used profiling tool to find which functions impact on performance. Findings are:

(1) SkPaint::textToGlyphs() and its callees took 3% of profiling samples. It doubled (compared with hb-old implementation).
(2) HarfBuzzShaper::collectHarfBuzzRuns() and its collees took 2% of profiling samples.

We can improve the performance by introducing cache for these functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731408</commentid>
    <comment_count>1</comment_count>
      <attachid>166412</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-09-30 23:49:20 -0700</bug_when>
    <thetext>Created attachment 166412
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731410</commentid>
    <comment_count>2</comment_count>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-09-30 23:51:33 -0700</bug_when>
    <thetext>performance_ui_tests (PageCyclerTest.Intl2File) results:
https://docs.google.com/spreadsheet/ccc?key=0AqNYyLPujP4TdHZ5MjZIWV9ISVpybDZPUnNfRFc3Nmc

It seems that memory consumption of hb-ng with the patch is less than hb-old implementation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731416</commentid>
    <comment_count>3</comment_count>
      <attachid>166412</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-10-01 00:03:12 -0700</bug_when>
    <thetext>Comment on attachment 166412
Patch

Attachment 166412 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/14107009</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731467</commentid>
    <comment_count>4</comment_count>
      <attachid>166424</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-10-01 01:25:48 -0700</bug_when>
    <thetext>Created attachment 166424
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>731818</commentid>
    <comment_count>5</comment_count>
      <attachid>166424</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-10-01 11:13:55 -0700</bug_when>
    <thetext>Comment on attachment 166424
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=166424&amp;action=review

Just some style nits.  The ownership of m_glyphCache is a little confusing.  It might be more clear if you named m_glyphCache more descriptively in HarfBuzzFontData and HarfBuzzNGFace.  Maybe something like m_glyphCacheForFaceCacheEntry?

&gt; Source/WebCore/ChangeLog:10
&gt; +        - Implement canRenderCombiningCharacterSequence() for ports which use
&gt; +        HarfBuzzShaper. This function caches the result and will improve the
&gt; +        performance of HarfBuzzShaper::collectHarfBuzzRuns.

Please include performance numbers in the ChangeLog.  E.g., this makes the intl2 page cycler X% faster.

&gt; Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp:176
&gt; +#if USE(HARFBUZZ_NG)
&gt; +bool SimpleFontData::canRenderCombiningCharacterSequence(const UChar*, size_t) const

Which build uses this file?  I thought Blackberry and Chromium use the SimpleFontDataSkia.cpp.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:47
&gt; +struct FaceCacheEntry {
&gt; +    unsigned m_refCount;

Can we use RefCounted rather than doing our own ref counting?  The HashMap would have RefPtr&apos;s holding 1 ref.  You could use ref/deref directly and when the ref becomes 1, remove it from the cache (which should cause the destructor to run and delete m_face).

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:68
&gt; +        result.iterator-&gt;second = WTF::adoptPtr(new FaceCacheEntry);
&gt; +        result.iterator-&gt;second-&gt;m_refCount = 0;
&gt; +        result.iterator-&gt;second-&gt;m_face = createFace();

I would put this into a static create() method.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFaceSkia.cpp:179
&gt; +    HarfBuzzFontData* hbFontData = new HarfBuzzFontData;
&gt; +    hbFontData-&gt;m_glyphCache = m_glyphCache;

I would make a constructor for HarfBuzzFontData that takes m_glyphCache as a parameter.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732236</commentid>
    <comment_count>6</comment_count>
      <attachid>166595</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-10-01 20:49:43 -0700</bug_when>
    <thetext>Created attachment 166595
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732238</commentid>
    <comment_count>7</comment_count>
      <attachid>166424</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-10-01 20:50:22 -0700</bug_when>
    <thetext>Comment on attachment 166424
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=166424&amp;action=review

Thank you for review!

&gt;&gt; Source/WebCore/ChangeLog:10
&gt;&gt; +        performance of HarfBuzzShaper::collectHarfBuzzRuns.
&gt; 
&gt; Please include performance numbers in the ChangeLog.  E.g., this makes the intl2 page cycler X% faster.

Added.

&gt;&gt; Source/WebCore/platform/graphics/freetype/SimpleFontDataFreeType.cpp:176
&gt;&gt; +bool SimpleFontData::canRenderCombiningCharacterSequence(const UChar*, size_t) const
&gt; 
&gt; Which build uses this file?  I thought Blackberry and Chromium use the SimpleFontDataSkia.cpp.

efl port uses this file. It enables WTF_USE_HARFBUZZ_NG (in Source/cmake/OptionsEfl.cmake).

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:47
&gt;&gt; +    unsigned m_refCount;
&gt; 
&gt; Can we use RefCounted rather than doing our own ref counting?  The HashMap would have RefPtr&apos;s holding 1 ref.  You could use ref/deref directly and when the ref becomes 1, remove it from the cache (which should cause the destructor to run and delete m_face).

Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:68
&gt;&gt; +        result.iterator-&gt;second-&gt;m_face = createFace();
&gt; 
&gt; I would put this into a static create() method.

Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFaceSkia.cpp:179
&gt;&gt; +    hbFontData-&gt;m_glyphCache = m_glyphCache;
&gt; 
&gt; I would make a constructor for HarfBuzzFontData that takes m_glyphCache as a parameter.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>732763</commentid>
    <comment_count>8</comment_count>
      <attachid>166595</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-10-02 10:02:22 -0700</bug_when>
    <thetext>Comment on attachment 166595
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=166595&amp;action=review

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:60
&gt; +    FaceCacheEntry(hb_face_t* face)

Nit: explicit

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.h:63
&gt; +    WTF::HashMap&lt;uint32_t, uint16_t&gt;* m_glyphCacheForFaceCaheEntry;

Typo: Cahe -&gt; Cache.

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFaceSkia.cpp:58
&gt; +    WTF::HashMap&lt;uint32_t, uint16_t&gt;* m_glyphCacheForFaceCaheEntry;

Typo here too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733172</commentid>
    <comment_count>9</comment_count>
      <attachid>166769</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-10-02 16:05:27 -0700</bug_when>
    <thetext>Created attachment 166769
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733174</commentid>
    <comment_count>10</comment_count>
      <attachid>166595</attachid>
    <who name="Kenichi Ishibashi">bashi</who>
    <bug_when>2012-10-02 16:06:11 -0700</bug_when>
    <thetext>Comment on attachment 166595
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=166595&amp;action=review

Thank you for review!

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.cpp:60
&gt;&gt; +    FaceCacheEntry(hb_face_t* face)
&gt; 
&gt; Nit: explicit

Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFace.h:63
&gt;&gt; +    WTF::HashMap&lt;uint32_t, uint16_t&gt;* m_glyphCacheForFaceCaheEntry;
&gt; 
&gt; Typo: Cahe -&gt; Cache.

Thanks. Done.

&gt;&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzNGFaceSkia.cpp:58
&gt;&gt; +    WTF::HashMap&lt;uint32_t, uint16_t&gt;* m_glyphCacheForFaceCaheEntry;
&gt; 
&gt; Typo here too.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733209</commentid>
    <comment_count>11</comment_count>
      <attachid>166769</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-02 16:40:13 -0700</bug_when>
    <thetext>Comment on attachment 166769
Patch for landing

Clearing flags on attachment: 166769

Committed r130231: &lt;http://trac.webkit.org/changeset/130231&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733211</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-10-02 16:40:16 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>868752</commentid>
    <comment_count>13</comment_count>
      <attachid>166769</attachid>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-04-03 09:08:45 -0700</bug_when>
    <thetext>Comment on attachment 166769
Patch for landing

View in context: https://bugs.webkit.org/attachment.cgi?id=166769&amp;action=review

&gt; Source/WebCore/platform/graphics/harfbuzz/ng/HarfBuzzShaper.cpp:-90
&gt; -

Why was this code removed? Looks like after r130231 when this patch was landed, m_glyphToCharacterIndexes doesn&apos;t get initialized anymore.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>869165</commentid>
    <comment_count>14</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2013-04-04 08:33:08 -0700</bug_when>
    <thetext>(In reply to comment #13)

&gt; Why was this code removed? Looks like after r130231 when this patch was landed, m_glyphToCharacterIndexes doesn&apos;t get initialized anymore.

Never mind, I found 
+    uint16_t* glyphToCharacterIndexes = currentRun-&gt;glyphToCharacterIndexes();
where it actually does get initialized.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166412</attachid>
            <date>2012-09-30 23:49:20 -0700</date>
            <delta_ts>2012-10-01 01:25:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97993-20121001154834.patch</filename>
            <type>text/plain</type>
            <size>19354</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y1MmIxZWYxMDFiZjVi
NDUyYzA0N2Q1ODViZDE5NzM4YjhjNzJiMy4uYjI4YTUzMWRmNjM2Y2Y2YjU2NjE2OWExNGJmNGZi
NTVhN2NhYWIxZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDEyLTA5LTMwICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEludHJvZHVjZSBjYWNoZXMgZm9yIEhhcmZCdXp6U2hhcGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzk5MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gSW1wbGVtZW50IGNhblJlbmRlckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKCkgZm9yIHBvcnRzIHdoaWNoIHVzZQorICAgICAgICBIYXJmQnV6
elNoYXBlci4gVGhpcyBmdW5jdGlvbiBjYWNoZXMgdGhlIHJlc3VsdCBhbmQgd2lsbCBpbXByb3Zl
IHRoZQorICAgICAgICBwZXJmb3JtYW5jZSBvZiBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZC
dXp6UnVucy4KKyAgICAgICAgLSBBZGQgYSBIYXNoTWFwIHRvIEhhcmZCdXp6TkdGYWNlLiBJdCBp
cyB1c2VkIGFzIGEgY2FjaGUgdGhhdCBob2xkcworICAgICAgICBnbHlwaCBpbmRleGVzIG9mIGNv
ZGVwb2ludHMuIEl0IHJlZHVjZXMgdGhlIG51bWJlciBvZgorICAgICAgICBTa1BhaW50Ojp0ZXh0
VG9HbHlwaHMoKSBjYWxscy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZXMgaW4g
YmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5o
OgorICAgICAgICAoU2ltcGxlRm9udERhdGEpOiBFbmFibGVkIGNhblJlbmRlckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKCkgaWYgVVNFKEhBUkZCVVpaX05HKSBpcyBlbmFibGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRmFjZUNhY2hlRW50cnkpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjpIYXJmQnV6ek5HRmFjZSk6CisgICAgICAgIExv
b2t1cCB0aGUgY2FjaGUgZW50cnkgaW4gaGFyZkJ1enpGYWNlQ2FjaGUuIENyZWF0ZSB0aGUgZW50
cnkgaWYgdGhlcmUgaXMgbm8gZW50cnkgaW4gdGhlIGNhY2hlLgorICAgICAgICBJbmNyZW1lbnQg
dGhlIHJlZiBjb3VudCBvZiB0aGUgZW50cnkgYW5kIHNldCBjYWNoZSBlbnRyeSB2YWx1ZXMgdG8g
bWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjp+SGFy
ZkJ1enpOR0ZhY2UpOgorICAgICAgICBEZWNyZW1lbnQgdGhlIHJlZiBjb3VudCBvZiB0aGUgY2Fj
aGUgZW50cnkuIFJlbW92ZSB0aGUgZW50cnkgaWYgbm8gb25lIHJlZmVycyB0aGUgY2FjaGUuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaDoK
KyAgICAgICAgKEhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVNraWEuY3BwOgorICAgICAgICAoSGFyZkJ1enpGb250
RGF0YSk6IEFkZGVkLiBVc2VkIGFzIHx1c2VyRGF0YXwgb2YgaGFyZmJ1enogY2FsbGJhY2sgZnVu
Y3Rpb25zLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTa2lhR2V0R2x5
cGhXaWR0aEFuZEV4dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpHZXRHbHlwaCk6
CisgICAgICAgIExvb2sgdXAgdGhlIGdseXBoQ2hhY2hlIGZpcnN0LiBJZiB0aGUgY2FjaGUgZW50
cnkgZG9lc24ndCBleGlzdCwgY2FsbAorICAgICAgICBTa1BhaW50Ojp0ZXh0VG9HbHlwaHMoKSB0
byBnZXQgZ2x5cGggaW5kZXggYW5kIHN0b3JlIGl0IHRvIHRoZSBjYWNoZS4KKyAgICAgICAgKFdl
YkNvcmU6OmhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSk6CisgICAgICAgIChXZWJD
b3JlOjpoYXJmYnV6ekdldEdseXBoRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpkZXN0cm95
SGFyZkJ1enpGb250RGF0YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0Zh
Y2U6OmNyZWF0ZUZvbnQpOgorICAgICAgICBDcmVhdGUgSGFyZkJ1enpGb250RGF0YSBhbmQgcGFz
cyBpdCB0byBoYXJmYnV6ei4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9u
Zy9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6
SGFyZkJ1enpSdW46OmFwcGx5U2hhcGVSZXN1bHQpOgorICAgICAgICBEb24ndCBpbml0aWFsaXpl
IG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMgaGVyZS4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZC
dXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKToKKyAgICAgICAgVXNlIFNpbXBsZUZvbnRE
YXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSgpIGluc3RlYWQgb2YKKyAg
ICAgICAgZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSgpLgorICAgICAgICAo
V2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4p
OgorICAgICAgICBTZXQgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMgb2YgdGhlIGN1cnJlbnQgSGFy
ZkJ1enpSdW4uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0
YVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVG
b250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UpOiBBZGRlZC4KKwog
MjAxMi0wOS0zMCAgQW5kcmVhcyBLbGluZyAgPGtsaW5nQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
NDQ0a0IgYmVsb3cgQ1NTUGFyc2VyOjpwYXJzZURlcHJlY2F0ZWRHcmFkaWVudCgpIG9uIE1lbWJ1
c3RlcjMuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1w
bGVGb250RGF0YS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuaAppbmRleCA2NjIwODgzN2NjMjY4YmFjZDljNGE2ZjdkY2E0OGM4OTdiNjU4NGVmLi43
MTNjNzBhZWZhYzQxYjQxZDI1NzM5NzBlN2E4OTg4YzBjZWVjZGVlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmgKQEAgLTE3OCw2ICsx
NzgsOSBAQCBwdWJsaWM6CiAKICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlV
TSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKQogICAgIENG
RGljdGlvbmFyeVJlZiBnZXRDRlN0cmluZ0F0dHJpYnV0ZXMoVHlwZXNldHRpbmdGZWF0dXJlcywg
Rm9udE9yaWVudGF0aW9uKSBjb25zdDsKKyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCAo
UExBVEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpIHx8IChQTEFURk9STShXWCkgJiYgT1Mo
REFSV0lOKSkgfHwgVVNFKEhBUkZCVVpaX05HKQogICAgIGJvb2wgY2FuUmVuZGVyQ29tYmluaW5n
Q2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIqLCBzaXplX3QpIGNvbnN0OwogI2VuZGlmCiAK
QEAgLTI3OCw2ICsyODEsOSBAQCBwcml2YXRlOgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExB
VEZPUk0oQ0hST01JVU0pICYmIE9TKERBUldJTikpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFS
V0lOKSkKICAgICBtdXRhYmxlIEhhc2hNYXA8dW5zaWduZWQsIFJldGFpblB0cjxDRkRpY3Rpb25h
cnlSZWY+ID4gbV9DRlN0cmluZ0F0dHJpYnV0ZXM7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1B
QykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gp
ICYmIE9TKERBUldJTikpIHx8IFVTRShIQVJGQlVaWl9ORykKICAgICBtdXRhYmxlIE93blB0cjxI
YXNoTWFwPFN0cmluZywgYm9vbD4gPiBtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9y
dDsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKaW5kZXggN2RkMDQ4YjNi
NDNmZjU5Mzg4ZWFmNGU3MjEwZWUyY2NiZDU1NDIyMy4uN2ZlMjI5ODE4ZDM5YzU1MzliMTZlMzM3
ZGVlYWFjZDFiYmM0MmU3MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcApAQCAtMzMs
NyArMzMsOCBAQAogCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgImhi
LmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00
MSw4ICs0MiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAvLyBXZWJLaXQncyBmb250IG9iamVj
dHMsIHdlIGFsc28gbmVlZCBhZGRpdGlvbmFsIGNhY2hpbmcgbGF5ZXIgZm9yIEhhcmZCdXp6CiAv
LyB0byByZWR1Y2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBiZWNhdXNlIGhiX2ZhY2VfdCBzaG91
bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAvLyB1bmRlcmxpbmcgZm9udCBkYXRhIChlLmcuIENURm9u
dFJlZiwgRlRGYWNlKS4KLXR5cGVkZWYgcGFpcjxoYl9mYWNlX3QqLCB1bnNpZ25lZD4gRmFjZUNh
Y2hlRW50cnk7Ci10eXBlZGVmIEhhc2hNYXA8dWludDY0X3QsIEZhY2VDYWNoZUVudHJ5LCBXVEY6
OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVp
bnQ2NF90PiA+IEhhcmZCdXp6TkdGYWNlQ2FjaGU7CisKK3N0cnVjdCBGYWNlQ2FjaGVFbnRyeSB7
CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKKyAgICBoYl9mYWNlX3QqIG1fZmFjZTsKKyAgICBI
YXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4gbV9nbHlwaENhY2hlOworfTsKKwordHlwZWRlZiBI
YXNoTWFwPHVpbnQ2NF90LCBPd25QdHI8RmFjZUNhY2hlRW50cnk+LCBXVEY6OkludEhhc2g8dWlu
dDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IEhh
cmZCdXp6TkdGYWNlQ2FjaGU7CiAKIHN0YXRpYyBIYXJmQnV6ek5HRmFjZUNhY2hlKiBoYXJmYnV6
ekZhY2VDYWNoZSgpCiB7CkBAIC01NCwyNSArNjEsMjYgQEAgSGFyZkJ1enpOR0ZhY2U6OkhhcmZC
dXp6TkdGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3JtRGF0YSwgdWludDY0X3QgdW5pcXVl
SUQKICAgICA6IG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0YSkKICAgICAsIG1fdW5pcXVlSUQo
dW5pcXVlSUQpCiB7Ci0gICAgSGFyZkJ1enpOR0ZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0g
aGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlEKTsKLSAgICBpZiAocmVzdWx0ID09
IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKSB7Ci0gICAgICAgIG1fZmFjZSA9IGNyZWF0ZUZh
Y2UoKTsKLSAgICAgICAgQVNTRVJUKG1fZmFjZSk7Ci0gICAgICAgIGhhcmZidXp6RmFjZUNhY2hl
KCktPnNldChtX3VuaXF1ZUlELCBGYWNlQ2FjaGVFbnRyeShtX2ZhY2UsIDEpKTsKLSAgICB9IGVs
c2UgewotICAgICAgICArKyhyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgICAgICBt
X2ZhY2UgPSByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsKKyAgICBIYXJmQnV6ek5HRmFjZUNh
Y2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+YWRkKG1fdW5pcXVl
SUQsIG51bGxwdHIpOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkgeworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdURjo6YWRvcHRQdHIobmV3IEZhY2VDYWNoZUVudHJ5KTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPm1fcmVmQ291bnQgPSAwOworICAgICAg
ICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV9mYWNlID0gY3JlYXRlRmFjZSgpOworICAgICAg
ICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPm1fZmFjZSk7CiAgICAgfQorICAgICsr
KHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5tX3JlZkNvdW50KTsKKyAgICBtX2ZhY2UgPSByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZC0+bV9mYWNlOworICAgIG1fZ2x5cGhDYWNoZSA9ICZyZXN1bHQu
aXRlcmF0b3ItPnNlY29uZC0+bV9nbHlwaENhY2hlOwogfQogCiBIYXJmQnV6ek5HRmFjZTo6fkhh
cmZCdXp6TkdGYWNlKCkKIHsKICAgICBIYXJmQnV6ek5HRmFjZUNhY2hlOjppdGVyYXRvciByZXN1
bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5pcXVlSUQpOwogICAgIEFTU0VSVChy
ZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkpOwotICAgIEFTU0VSVChyZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC5z
ZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkpIHsKLSAgICAg
ICAgaGJfZmFjZV9kZXN0cm95KHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsKKyAgICBBU1NF
UlQocmVzdWx0LmdldCgpLT5zZWNvbmQtPm1fcmVmQ291bnQgPiAwKTsKKyAgICAtLShyZXN1bHQu
Z2V0KCktPnNlY29uZC0+bV9yZWZDb3VudCk7CisgICAgaWYgKCEocmVzdWx0LmdldCgpLT5zZWNv
bmQtPm1fcmVmQ291bnQpKSB7CisgICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQuZ2V0KCkt
PnNlY29uZC0+bV9mYWNlKTsKICAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVtb3ZlKG1f
dW5pcXVlSUQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oCmluZGV4IGNiYzhm
OGVkNGYzNTlkNTc1OTU1YWQ5NWIzNjdmOTlhZDM2MGY4YWEuLjBhZDFkODhiNGQwODBiOWNiOTY1
YTY2M2RmODY0ODg0Y2IyYzEzMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaApAQCAtMzMs
NiArMzMsNyBAQAogCiAjaW5jbHVkZSA8aGIuaD4KIAorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU5LDYgKzYwLDcgQEAgcHJpdmF0ZToKICAg
ICBGb250UGxhdGZvcm1EYXRhKiBtX3BsYXRmb3JtRGF0YTsKICAgICB1aW50NjRfdCBtX3VuaXF1
ZUlEOwogICAgIGhiX2ZhY2VfdCogbV9mYWNlOworICAgIFdURjo6SGFzaE1hcDx1aW50MzJfdCwg
dWludDE2X3Q+KiBtX2dseXBoQ2FjaGU7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVNraWEuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpO
R0ZhY2VTa2lhLmNwcAppbmRleCA1M2FjYjI5MmNkYmYwOTg4YzQwNDA0NGUxMTkwOGY4MjFiYzk3
ODA0Li5hOTQ3N2M5NGYyNGQxYTZmZWQwOGUxYTYwMWRjZTYxZDJlODk2OWI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5H
RmFjZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5jcHAKQEAgLTQzLDEyICs0MywxOCBAQAogI2luY2x1
ZGUgIlNrVXRpbHMuaCIKIAogI2luY2x1ZGUgImhiLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBPdXIgaW1wbGVtZW50YXRpb24gb2YgdGhl
IGNhbGxiYWNrcyB3aGljaCBIYXJmYnV6eiByZXF1aXJlcyBieSB1c2luZyBTa2lhCiAvLyBjYWxs
cy4gU2VlIHRoZSBIYXJmYnV6eiBzb3VyY2UgZm9yIHJlZmVyZW5jZXMgYWJvdXQgd2hhdCB0aGVz
ZSBjYWxsYmFja3MgZG8uCiAKK3N0cnVjdCBIYXJmQnV6ekZvbnREYXRhIHsKKyAgICBTa1BhaW50
IG1fcGFpbnQ7CisgICAgV1RGOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4qIG1fZ2x5cGhD
YWNoZTsKK307CisKIHN0YXRpYyBoYl9wb3NpdGlvbl90IFNraWFTY2FsYXJUb0hhcmZidXp6UG9z
aXRpb24oU2tTY2FsYXIgdmFsdWUpCiB7CiAgICAgcmV0dXJuIFNrU2NhbGFyVG9GaXhlZCh2YWx1
ZSk7CkBAIC01Niw4ICs2Miw3IEBAIHN0YXRpYyBoYl9wb3NpdGlvbl90IFNraWFTY2FsYXJUb0hh
cmZidXp6UG9zaXRpb24oU2tTY2FsYXIgdmFsdWUpCiAKIHN0YXRpYyB2b2lkIFNraWFHZXRHbHlw
aFdpZHRoQW5kRXh0ZW50cyhTa1BhaW50KiBwYWludCwgaGJfY29kZXBvaW50X3QgY29kZXBvaW50
LCBoYl9wb3NpdGlvbl90KiB3aWR0aCwgaGJfZ2x5cGhfZXh0ZW50c190KiBleHRlbnRzKQogewot
ICAgIGlmIChjb2RlcG9pbnQgPiAweEZGRkYpCi0gICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQo
Y29kZXBvaW50IDw9IDB4RkZGRik7CiAgICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1BhaW50
OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwogCiAgICAgU2tTY2FsYXIgc2tXaWR0aDsKQEAgLTc4
LDIzICs4MywyNyBAQCBzdGF0aWMgdm9pZCBTa2lhR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMoU2tQ
YWludCogcGFpbnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2ludAogCiBzdGF0aWMgaGJfYm9vbF90
IGhhcmZidXp6R2V0R2x5cGgoaGJfZm9udF90KiBoYkZvbnQsIHZvaWQqIGZvbnREYXRhLCBoYl9j
b2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRfdCB2YXJpYXRpb25TZWxlY3RvciwgaGJf
Y29kZXBvaW50X3QqIGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKIHsKLSAgICBTa1BhaW50KiBwYWlu
dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KGZvbnREYXRhKTsKLQotICAgIHBhaW50LT5z
ZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7Ci0gICAgdWludDE2
X3QgdGV4dFs0XTsKLSAgICBzaXplX3QgbGVuZ3RoID0gU2tVVEYxNl9Gcm9tVW5pY2hhcih1bmlj
b2RlLCB0ZXh0KTsKLSAgICB1aW50MTZfdCBnbHlwaDE2OwotICAgIHBhaW50LT50ZXh0VG9HbHlw
aHModGV4dCwgbGVuZ3RoLCAmZ2x5cGgxNik7Ci0gICAgKmdseXBoID0gZ2x5cGgxNjsKKyAgICBI
YXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJmQnV6ekZv
bnREYXRhKj4oZm9udERhdGEpOworCisgICAgV1RGOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZf
dD46OkFkZFJlc3VsdCByZXN1bHQgPSBoYkZvbnREYXRhLT5tX2dseXBoQ2FjaGUtPmFkZCh1bmlj
b2RlLCAwKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkpIHsKKyAgICAgICAgU2tQYWludCog
cGFpbnQgPSAmaGJGb250RGF0YS0+bV9wYWludDsKKyAgICAgICAgcGFpbnQtPnNldFRleHRFbmNv
ZGluZyhTa1BhaW50OjprVVRGMzJfVGV4dEVuY29kaW5nKTsKKyAgICAgICAgdWludDE2X3QgZ2x5
cGgxNjsKKyAgICAgICAgcGFpbnQtPnRleHRUb0dseXBocygmdW5pY29kZSwgc2l6ZW9mKGhiX2Nv
ZGVwb2ludF90KSwgJmdseXBoMTYpOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9
IGdseXBoMTY7CisgICAgICAgICpnbHlwaCA9IGdseXBoMTY7CisgICAgfQorICAgICpnbHlwaCA9
IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwogICAgIHJldHVybiAhISpnbHlwaDsKIH0KIAogc3Rh
dGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKGhiX2Zv
bnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIHZvaWQq
IHVzZXJEYXRhKQogewotICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1Bh
aW50Kj4oZm9udERhdGEpOworICAgIEhhcmZCdXp6Rm9udERhdGEqIGhiRm9udERhdGEgPSByZWlu
dGVycHJldF9jYXN0PEhhcmZCdXp6Rm9udERhdGEqPihmb250RGF0YSk7CiAgICAgaGJfcG9zaXRp
b25fdCBhZHZhbmNlID0gMDsKIAotICAgIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhwYWlu
dCwgZ2x5cGgsICZhZHZhbmNlLCAwKTsKKyAgICBTa2lhR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMo
JmhiRm9udERhdGEtPm1fcGFpbnQsIGdseXBoLCAmYWR2YW5jZSwgMCk7CiAgICAgcmV0dXJuIGFk
dmFuY2U7CiB9CiAKQEAgLTEwNyw5ICsxMTYsOSBAQCBzdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6
R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RAog
CiBzdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGhFeHRlbnRzKGhiX2ZvbnRfdCogaGJG
b250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3QgZ2x5cGgsIGhiX2dseXBoX2V4dGVu
dHNfdCogZXh0ZW50cywgdm9pZCogdXNlckRhdGEpCiB7Ci0gICAgU2tQYWludCogcGFpbnQgPSBy
ZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihmb250RGF0YSk7CisgICAgSGFyZkJ1enpGb250RGF0
YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFyZkJ1enpGb250RGF0YSo+KGZvbnRE
YXRhKTsKIAotICAgIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhwYWludCwgZ2x5cGgsIDAs
IGV4dGVudHMpOworICAgIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cygmaGJGb250RGF0YS0+
bV9wYWludCwgZ2x5cGgsIDAsIGV4dGVudHMpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
NTEsMTAgKzE2MCwxMCBAQCBzdGF0aWMgaGJfYmxvYl90KiBoYXJmYnV6elNraWFHZXRUYWJsZSho
Yl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9pZCogdXNlcgogICAgICAgICAgICAgICAg
ICAgICAgICAgICBIQl9NRU1PUllfTU9ERV9XUklUQUJMRSwgYnVmZmVyLCBmYXN0RnJlZSk7CiB9
CiAKLXN0YXRpYyB2b2lkIGRlc3Ryb3lQYWludCh2b2lkKiB1c2VyRGF0YSkKK3N0YXRpYyB2b2lk
IGRlc3Ryb3lIYXJmQnV6ekZvbnREYXRhKHZvaWQqIHVzZXJEYXRhKQogewotICAgIFNrUGFpbnQq
IHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4odXNlckRhdGEpOwotICAgIGRlbGV0
ZSBwYWludDsKKyAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRf
Y2FzdDxIYXJmQnV6ekZvbnREYXRhKj4odXNlckRhdGEpOworICAgIGRlbGV0ZSBoYkZvbnREYXRh
OwogfQogCiBoYl9mYWNlX3QqIEhhcmZCdXp6TkdGYWNlOjpjcmVhdGVGYWNlKCkKQEAgLTE2Niwx
MCArMTc1LDExIEBAIGhiX2ZhY2VfdCogSGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZhY2UoKQogCiBo
Yl9mb250X3QqIEhhcmZCdXp6TkdGYWNlOjpjcmVhdGVGb250KCkKIHsKKyAgICBIYXJmQnV6ekZv
bnREYXRhKiBoYkZvbnREYXRhID0gbmV3IEhhcmZCdXp6Rm9udERhdGE7CisgICAgaGJGb250RGF0
YS0+bV9nbHlwaENhY2hlID0gbV9nbHlwaENhY2hlOworICAgIG1fcGxhdGZvcm1EYXRhLT5zZXR1
cFBhaW50KCZoYkZvbnREYXRhLT5tX3BhaW50KTsKICAgICBoYl9mb250X3QqIGZvbnQgPSBoYl9m
b250X2NyZWF0ZShtX2ZhY2UpOwotICAgIFNrUGFpbnQqIHBhaW50ID0gbmV3IFNrUGFpbnQ7Ci0g
ICAgbV9wbGF0Zm9ybURhdGEtPnNldHVwUGFpbnQocGFpbnQpOwotICAgIGhiX2ZvbnRfc2V0X2Z1
bmNzKGZvbnQsIGhhcmZidXp6U2tpYUdldEZvbnRGdW5jcygpLCBwYWludCwgZGVzdHJveVBhaW50
KTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6elNraWFHZXRGb250RnVuY3Mo
KSwgaGJGb250RGF0YSwgZGVzdHJveUhhcmZCdXp6Rm9udERhdGEpOwogICAgIGZsb2F0IHNpemUg
PSBtX3BsYXRmb3JtRGF0YS0+c2l6ZSgpOwogICAgIGludCBzY2FsZSA9IFNraWFTY2FsYXJUb0hh
cmZidXp6UG9zaXRpb24oc2l6ZSk7CiAgICAgaGJfZm9udF9zZXRfc2NhbGUoZm9udCwgc2NhbGUs
IHNjYWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hh
cmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcAppbmRleCA5ZTU1ZmM0MTFhNmNm
YjdiYzc4ZDI4MDY0ZDc5YzI2YTRmMGM1MTJiLi5mM2ZlNDY3Zjc1NjIwYzY5ZmEyODA5ZGU4YjNl
ZTZjMzc2NmNmNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwCkBAIC04NywxMCAr
ODcsNiBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6YXBwbHlTaGFwZVJlc3Vs
dChoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCiAgICAgbV9hZHZhbmNlcy5yZXNpemUobV9u
dW1HbHlwaHMpOwogICAgIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMucmVzaXplKG1fbnVtR2x5
cGhzKTsKICAgICBtX29mZnNldHMucmVzaXplKG1fbnVtR2x5cGhzKTsKLQotICAgIGhiX2dseXBo
X2luZm9fdCogaW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX2luZm9zKGhhcmZidXp6QnVmZmVy
LCAwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9udW1HbHlwaHM7ICsraSkKLSAg
ICAgICAgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tpXSA9IGluZm9zW2ldLmNsdXN0ZXI7CiB9
CiAKIHZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpzZXRHbHlwaEFuZFBvc2l0aW9u
cyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxvYXQgYWR2YW5jZSwgZmxvYXQg
b2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSkKQEAgLTI0MCwyMCArMjM2LDYgQEAgRmxvYXRQb2ludCBI
YXJmQnV6elNoYXBlcjo6YWRqdXN0U3RhcnRQb2ludChjb25zdCBGbG9hdFBvaW50JiBwb2ludCkK
ICAgICByZXR1cm4gcG9pbnQgKyBtX3N0YXJ0T2Zmc2V0OwogfQogCi1zdGF0aWMgY29uc3QgU2lt
cGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3Qg
Rm9udCogZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpCi17Ci0g
ICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLSAgICBWZWN0b3I8VUNoYXIsIDQ+
IG5vcm1hbGl6ZWRDaGFyYWN0ZXJzKGxlbmd0aCk7Ci0gICAgaW50MzJfdCBub3JtYWxpemVkTGVu
Z3RoID0gdW5vcm1fbm9ybWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0aCwgVU5PUk1fTkZDLCBVTk9S
TV9VTklDT0RFXzNfMiwgJm5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzBdLCBsZW5ndGgsICZlcnJvcik7
Ci0gICAgLy8gU2hvdWxkIGZhbGxiYWNrIGlmIHdlIGhhdmUgYW4gZXJyb3Igb3Igbm8gY29tcG9z
aXRpb24gb2NjdXJyZWQuCi0gICAgaWYgKFVfRkFJTFVSRShlcnJvcikgfHwgKHN0YXRpY19jYXN0
PHNpemVfdD4obm9ybWFsaXplZExlbmd0aCkgPT0gbGVuZ3RoKSkKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgVUNoYXIzMiBub3JtYWxpemVkQ2hhcmFjdGVyOwotICAgIHNpemVfdCBpbmRleCA9IDA7
Ci0gICAgVTE2X05FWFQoJm5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzBdLCBpbmRleCwgc3RhdGljX2Nh
c3Q8c2l6ZV90Pihub3JtYWxpemVkTGVuZ3RoKSwgbm9ybWFsaXplZENoYXJhY3Rlcik7Ci0gICAg
cmV0dXJuIGZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihub3JtYWxpemVkQ2hhcmFjdGVyLCBm
YWxzZSkuZm9udERhdGE7Ci19Ci0KIGJvb2wgSGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6
elJ1bnMoKQogewogICAgIGNvbnN0IFVDaGFyKiBub3JtYWxpemVkQnVmZmVyRW5kID0gbV9ub3Jt
YWxpemVkQnVmZmVyLmdldCgpICsgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoOwpAQCAtMjc4LDYg
KzI2MCw3IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMoKQogICAg
ICAgICBmb3IgKGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmNvbnN1
bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3IuYWR2YW5jZShjbHVzdGVyTGVu
Z3RoKSkgewogICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShjaGFy
YWN0ZXIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAgICAgICAgICAgICBpZiAoVV9H
RVRfR0NfTUFTSyhjaGFyYWN0ZXIpICYgVV9HQ19NX01BU0spIHsKICAgICAgICAgICAgICAgICBp
bnQgbWFya0xlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAgY29uc3QgVUNo
YXIqIG1hcmtDaGFyYWN0ZXJzRW5kID0gaXRlcmF0b3IuY2hhcmFjdGVycygpICsgY2x1c3Rlckxl
bmd0aDsKQEAgLTI5MCwxMSArMjczLDEyIEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RI
YXJmQnV6elJ1bnMoKQogICAgICAgICAgICAgICAgICAgICBtYXJrTGVuZ3RoICs9IG5leHRDaGFy
YWN0ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIG1hcmtDaGFyYWN0ZXJzRW5kICs9IG5l
eHRDaGFyYWN0ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG5l
eHRGb250RGF0YSA9IGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UobV9mb250
LCBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24sIG1hcmtDaGFyYWN0ZXJzRW5kIC0gY3VycmVudENo
YXJhY3RlclBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAobmV4dEZvbnREYXRhKQorCisg
ICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+Y2FuUmVuZGVyQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY3VycmVudENoYXJhY3RlclBvc2l0aW9uLCBtYXJrQ2hhcmFjdGVyc0Vu
ZCAtIGN1cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbikpIHsKICAgICAgICAgICAgICAgICAgICAgY2x1
c3Rlckxlbmd0aCA9IG1hcmtMZW5ndGg7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihj
aGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9u
dC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOwogICAg
ICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbmV4dEZvbnREYXRhID0gbV9mb250LT5n
bHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7CiAKQEAgLTMw
NSw2ICsyODksNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKCkK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlmIChuZXh0U2NyaXB0ID09IFVT
Q1JJUFRfSU5IRVJJVEVEKQogICAgICAgICAgICAgICAgIG5leHRTY3JpcHQgPSBjdXJyZW50U2Ny
aXB0OworICAgICAgICAgICAgY3VycmVudENoYXJhY3RlclBvc2l0aW9uID0gaXRlcmF0b3IuY2hh
cmFjdGVycygpOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVkIG51bUNoYXJhY3RlcnNPZkN1
cnJlbnRSdW4gPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkgLSBzdGFydEluZGV4T2ZDdXJy
ZW50UnVuOwogICAgICAgICBtX2hhcmZidXp6UnVucy5hcHBlbmQoSGFyZkJ1enpSdW46OmNyZWF0
ZShjdXJyZW50Rm9udERhdGEsIHN0YXJ0SW5kZXhPZkN1cnJlbnRSdW4sIG51bUNoYXJhY3RlcnNP
ZkN1cnJlbnRSdW4sIG1fcnVuLmRpcmVjdGlvbigpKSk7CkBAIC0zNjEsNiArMzQ2LDcgQEAgdm9p
ZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JIYXJmQnV6elJ1bihIYXJmQnV6
elJ1biogY3VycmVudFJ1biwgaGIKICAgICBoYl9nbHlwaF9wb3NpdGlvbl90KiBnbHlwaFBvc2l0
aW9ucyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKGhhcmZidXp6QnVmZmVyLCAwKTsK
IAogICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGN1cnJlbnRSdW4tPm51bUdseXBocygpOworICAg
IHVpbnQxNl90KiBnbHlwaFRvQ2hhcmFjdGVySW5kZXhlcyA9IGN1cnJlbnRSdW4tPmdseXBoVG9D
aGFyYWN0ZXJJbmRleGVzKCk7CiAgICAgZmxvYXQgdG90YWxBZHZhbmNlID0gMDsKIAogICAgIC8v
IEhhcmZCdXp6IHJldHVybnMgdGhlIHNoYXBpbmcgcmVzdWx0IGluIHZpc3VhbCBvcmRlci4gV2Ug
bmVlZCBub3QgdG8gZmxpcCBmb3IgUlRMLgpAQCAtMzc0LDYgKzM2MCw5IEBAIHZvaWQgSGFyZkJ1
enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oSGFyZkJ1enpSdW4qIGN1
cnJlbnRSdW4sIGhiCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRDaGFyYWN0ZXJJbmRleCA9IGN1
cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSArIGdseXBoSW5mb3NbaV0uY2x1c3RlcjsKICAgICAgICAg
Ym9vbCBpc0NsdXN0ZXJFbmQgPSBydW5FbmQgfHwgZ2x5cGhJbmZvc1tpXS5jbHVzdGVyICE9IGds
eXBoSW5mb3NbaSArIDFdLmNsdXN0ZXI7CiAgICAgICAgIGZsb2F0IHNwYWNpbmcgPSAwOworCisg
ICAgICAgIGdseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2ldID0gZ2x5cGhJbmZvc1tpXS5jbHVzdGVy
OworCiAgICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgIUZvbnQ6OnRyZWF0QXNaZXJvV2lkdGhT
cGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbY3VycmVudENoYXJhY3RlckluZGV4XSkpCiAgICAgICAg
ICAgICBzcGFjaW5nICs9IG1fbGV0dGVyU3BhY2luZzsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEuY3Bw
CmluZGV4IDU0NDg2YzNhYTRlNjk0ODMxNTgwYTkyMjk1NjU5MDBlY2YwN2MwODcuLjc3ODk0Y2Q2
ZmRjYmVhY2UyZDQxODg4Zjg3NWM1Y2FmYjg5ZDEyNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5j
cHAKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCiAjaW5jbHVkZSAi
U2tUeXBlcy5oIgogI2luY2x1ZGUgIlZETVhQYXJzZXIuaCIKKyNpbmNsdWRlIDx1bmljb2RlL25v
cm1senIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIApAQCAtMjUwLDQgKzI1MiwzMiBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxh
dGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiBTa1NjYWxh
clRvRmxvYXQod2lkdGgpOwogfQogCisjaWYgVVNFKEhBUkZCVVpaX05HKQorYm9vbCBTaW1wbGVG
b250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKKyAgICAgICAgbV9jb21iaW5pbmdDaGFyYWN0ZXJT
ZXF1ZW5jZVN1cHBvcnQgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDxTdHJpbmcsIGJvb2w+KTsKKwor
ICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV9j
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChTdHJpbmcoY2hhcmFjdGVycywg
bGVuZ3RoKSwgZmFsc2UpOworICAgIGlmICghYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAg
IHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKworICAgIFVFcnJvckNvZGUgZXJy
b3IgPSBVX1pFUk9fRVJST1I7CisgICAgVmVjdG9yPFVDaGFyLCA0PiBub3JtYWxpemVkQ2hhcmFj
dGVycyhsZW5ndGgpOworICAgIGludDMyX3Qgbm9ybWFsaXplZExlbmd0aCA9IHVub3JtX25vcm1h
bGl6ZShjaGFyYWN0ZXJzLCBsZW5ndGgsIFVOT1JNX05GQywgVU5PUk1fVU5JQ09ERV8zXzIsICZu
b3JtYWxpemVkQ2hhcmFjdGVyc1swXSwgbGVuZ3RoLCAmZXJyb3IpOworICAgIC8vIENhbid0IHJl
bmRlciBpZiB3ZSBoYXZlIGFuIGVycm9yIG9yIG5vIGNvbXBvc2l0aW9uIG9jY3VycmVkLgorICAg
IGlmIChVX0ZBSUxVUkUoZXJyb3IpIHx8IChzdGF0aWNfY2FzdDxzaXplX3Q+KG5vcm1hbGl6ZWRM
ZW5ndGgpID09IGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNrUGFpbnQg
cGFpbnQ7CisgICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQYWludCgmcGFpbnQpOworICAgIHBhaW50
LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4dEVuY29kaW5nKTsKKyAgICBpZiAo
cGFpbnQudGV4dFRvR2x5cGhzKCZub3JtYWxpemVkQ2hhcmFjdGVyc1swXSwgbm9ybWFsaXplZExl
bmd0aCAqIDIsIDApKSB7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kID0gdHJ1
ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxzZTsKK30KKyNl
bmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166424</attachid>
            <date>2012-10-01 01:25:48 -0700</date>
            <delta_ts>2012-10-01 20:50:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97993-20121001172501.patch</filename>
            <type>text/plain</type>
            <size>20173</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTI5OTk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2Y1MmIxZWYxMDFiZjVi
NDUyYzA0N2Q1ODViZDE5NzM4YjhjNzJiMy4uMGJmNjk2Yzk2MzljOGFiNWQzNjIxZDg0NmJjM2Rk
OTQ2MTc3M2NmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU4IEBACisyMDEyLTEwLTAxICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEludHJvZHVjZSBjYWNoZXMgZm9yIEhhcmZCdXp6U2hhcGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzk5MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gSW1wbGVtZW50IGNhblJlbmRlckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKCkgZm9yIHBvcnRzIHdoaWNoIHVzZQorICAgICAgICBIYXJmQnV6
elNoYXBlci4gVGhpcyBmdW5jdGlvbiBjYWNoZXMgdGhlIHJlc3VsdCBhbmQgd2lsbCBpbXByb3Zl
IHRoZQorICAgICAgICBwZXJmb3JtYW5jZSBvZiBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZC
dXp6UnVucy4KKyAgICAgICAgLSBBZGQgYSBIYXNoTWFwIHRvIEhhcmZCdXp6TkdGYWNlLiBJdCBp
cyB1c2VkIGFzIGEgY2FjaGUgdGhhdCBob2xkcworICAgICAgICBnbHlwaCBpbmRleGVzIG9mIGNv
ZGVwb2ludHMuIEl0IHJlZHVjZXMgdGhlIG51bWJlciBvZgorICAgICAgICBTa1BhaW50Ojp0ZXh0
VG9HbHlwaHMoKSBjYWxscy4KKworICAgICAgICBObyBuZXcgdGVzdHMuIE5vIGNoYW5nZXMgaW4g
YmVoYXZpb3IuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5o
OgorICAgICAgICAoU2ltcGxlRm9udERhdGEpOiBFbmFibGVkIGNhblJlbmRlckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKCkgaWYgVVNFKEhBUkZCVVpaX05HKSBpcyBlbmFibGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5cGUuY3Bw
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UpOiBBZGRlZC4KKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHA6CisgICAgICAg
IChXZWJDb3JlKToKKyAgICAgICAgKEZhY2VDYWNoZUVudHJ5KTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpIYXJmQnV6ek5HRmFjZTo6SGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICBMb29rdXAg
dGhlIGNhY2hlIGVudHJ5IGluIGhhcmZCdXp6RmFjZUNhY2hlLiBDcmVhdGUgdGhlIGVudHJ5IGlm
IHRoZXJlIGlzIG5vIGVudHJ5IGluIHRoZSBjYWNoZS4KKyAgICAgICAgSW5jcmVtZW50IHRoZSBy
ZWYgY291bnQgb2YgdGhlIGVudHJ5IGFuZCBzZXQgY2FjaGUgZW50cnkgdmFsdWVzIHRvIG1lbWJl
ciB2YXJpYWJsZXMuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6ek5HRmFjZTo6fkhhcmZCdXp6
TkdGYWNlKToKKyAgICAgICAgRGVjcmVtZW50IHRoZSByZWYgY291bnQgb2YgdGhlIGNhY2hlIGVu
dHJ5LiBSZW1vdmUgdGhlIGVudHJ5IGlmIG5vIG9uZSByZWZlcnMgdGhlIGNhY2hlLgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmg6CisgICAg
ICAgIChIYXJmQnV6ek5HRmFjZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1
enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNwcDoKKyAgICAgICAgKEhhcmZCdXp6Rm9udERhdGEp
OiBBZGRlZC4gVXNlZCBhcyB8dXNlckRhdGF8IG9mIGhhcmZidXp6IGNhbGxiYWNrIGZ1bmN0aW9u
cy4KKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2tpYUdldEdseXBoV2lk
dGhBbmRFeHRlbnRzKToKKyAgICAgICAgKFdlYkNvcmU6OmhhcmZidXp6R2V0R2x5cGgpOgorICAg
ICAgICBMb29rIHVwIHRoZSBnbHlwaENoYWNoZSBmaXJzdC4gSWYgdGhlIGNhY2hlIGVudHJ5IGRv
ZXNuJ3QgZXhpc3QsIGNhbGwKKyAgICAgICAgU2tQYWludDo6dGV4dFRvR2x5cGhzKCkgdG8gZ2V0
IGdseXBoIGluZGV4IGFuZCBzdG9yZSBpdCB0byB0aGUgY2FjaGUuCisgICAgICAgIChXZWJDb3Jl
OjpoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbEFkdmFuY2UpOgorICAgICAgICAoV2ViQ29yZTo6
aGFyZmJ1enpHZXRHbHlwaEV4dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzdHJveUhhcmZC
dXp6Rm9udERhdGEpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjpj
cmVhdGVGb250KToKKyAgICAgICAgQ3JlYXRlIEhhcmZCdXp6Rm9udERhdGEgYW5kIHBhc3MgaXQg
dG8gaGFyZmJ1enouCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpTaGFwZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OkhhcmZC
dXp6UnVuOjphcHBseVNoYXBlUmVzdWx0KToKKyAgICAgICAgRG9uJ3QgaW5pdGlhbGl6ZSBtX2ds
eXBoVG9DaGFyYWN0ZXJJbmRleGVzIGhlcmUuCisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucyk6CisgICAgICAgIFVzZSBTaW1wbGVGb250RGF0YTo6
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoKSBpbnN0ZWFkIG9mCisgICAgICAg
IGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoKS4KKyAgICAgICAgKFdlYkNv
cmU6OkhhcmZCdXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKToKKyAg
ICAgICAgU2V0IGdseXBoVG9DaGFyYWN0ZXJJbmRleGVzIG9mIHRoZSBjdXJyZW50IEhhcmZCdXp6
UnVuLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lh
LmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERh
dGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKTogQWRkZWQuCisKIDIwMTIt
MDktMzAgIEFuZHJlYXMgS2xpbmcgIDxrbGluZ0B3ZWJraXQub3JnPgogCiAgICAgICAgIDQ0NGtC
IGJlbG93IENTU1BhcnNlcjo6cGFyc2VEZXByZWNhdGVkR3JhZGllbnQoKSBvbiBNZW1idXN0ZXIz
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9u
dERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRh
LmgKaW5kZXggNjYyMDg4MzdjYzI2OGJhY2Q5YzRhNmY3ZGNhNDhjODk3YjY1ODRlZi4uNzEzYzcw
YWVmYWM0MWI0MWQyNTczOTcwZTdhODk4OGMwY2VlY2RlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCkBAIC0xNzgsNiArMTc4LDkg
QEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYm
IE9TKERBUldJTikpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkKICAgICBDRkRpY3Rp
b25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMsIEZvbnRP
cmllbnRhdGlvbikgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRG
T1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJ
TikpIHx8IFVTRShIQVJGQlVaWl9ORykKICAgICBib29sIGNhblJlbmRlckNvbWJpbmluZ0NoYXJh
Y3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKICNlbmRpZgogCkBAIC0y
NzgsNiArMjgxLDkgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBMQVRGT1JN
KENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERBUldJTikp
CiAgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0aW9uYXJ5UmVm
PiA+IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzOworI2VuZGlmCisKKyNpZiBQTEFURk9STShNQUMpIHx8
IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFdYKSAmJiBP
UyhEQVJXSU4pKSB8fCBVU0UoSEFSRkJVWlpfTkcpCiAgICAgbXV0YWJsZSBPd25QdHI8SGFzaE1h
cDxTdHJpbmcsIGJvb2w+ID4gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQ7CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJl
ZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAppbmRleCBkN2Qy
MjQyNjQ4NmI5YjkzYTAxMTQzNTViMzllYWZiNWIxZjY1ODYyLi43NjNjZDljYjNkOWYzMzRlNDFh
MWY5N2RjZDRiZDdmMDRhZjkzMGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVU
eXBlLmNwcApAQCAtMTcyLDQgKzE3MiwxMSBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZv
cm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiB3OyAgICAKIH0K
IAorI2lmIFVTRShIQVJGQlVaWl9ORykKK2Jvb2wgU2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNv
bWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdAorewor
ICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFj
ZS5jcHAKaW5kZXggN2RkMDQ4YjNiNDNmZjU5Mzg4ZWFmNGU3MjEwZWUyY2NiZDU1NDIyMy4uN2Zl
MjI5ODE4ZDM5YzU1MzliMTZlMzM3ZGVlYWFjZDFiYmM0MmU3MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZC
dXp6TkdGYWNlLmNwcApAQCAtMzMsNyArMzMsOCBAQAogCiAjaW5jbHVkZSAiRm9udFBsYXRmb3Jt
RGF0YS5oIgogI2luY2x1ZGUgImhiLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKyNpbmNs
dWRlIDx3dGYvT3duUHRyLmg+CisjaW5jbHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC00MSw4ICs0MiwxNCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAv
LyBXZWJLaXQncyBmb250IG9iamVjdHMsIHdlIGFsc28gbmVlZCBhZGRpdGlvbmFsIGNhY2hpbmcg
bGF5ZXIgZm9yIEhhcmZCdXp6CiAvLyB0byByZWR1Y2UgdGhlIG1lbW9yeSBjb25zdW1wdGlvbiBi
ZWNhdXNlIGhiX2ZhY2VfdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAvLyB1bmRlcmxpbmcg
Zm9udCBkYXRhIChlLmcuIENURm9udFJlZiwgRlRGYWNlKS4KLXR5cGVkZWYgcGFpcjxoYl9mYWNl
X3QqLCB1bnNpZ25lZD4gRmFjZUNhY2hlRW50cnk7Ci10eXBlZGVmIEhhc2hNYXA8dWludDY0X3Qs
IEZhY2VDYWNoZUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IEhhcmZCdXp6TkdGYWNlQ2FjaGU7CisKK3N0
cnVjdCBGYWNlQ2FjaGVFbnRyeSB7CisgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKKyAgICBoYl9m
YWNlX3QqIG1fZmFjZTsKKyAgICBIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4gbV9nbHlwaENh
Y2hlOworfTsKKwordHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBPd25QdHI8RmFjZUNhY2hlRW50
cnk+LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVuc2lnbmVkV2l0aFplcm9LZXlIYXNo
VHJhaXRzPHVpbnQ2NF90PiA+IEhhcmZCdXp6TkdGYWNlQ2FjaGU7CiAKIHN0YXRpYyBIYXJmQnV6
ek5HRmFjZUNhY2hlKiBoYXJmYnV6ekZhY2VDYWNoZSgpCiB7CkBAIC01NCwyNSArNjEsMjYgQEAg
SGFyZkJ1enpOR0ZhY2U6OkhhcmZCdXp6TkdGYWNlKEZvbnRQbGF0Zm9ybURhdGEqIHBsYXRmb3Jt
RGF0YSwgdWludDY0X3QgdW5pcXVlSUQKICAgICA6IG1fcGxhdGZvcm1EYXRhKHBsYXRmb3JtRGF0
YSkKICAgICAsIG1fdW5pcXVlSUQodW5pcXVlSUQpCiB7Ci0gICAgSGFyZkJ1enpOR0ZhY2VDYWNo
ZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZmluZChtX3VuaXF1ZUlE
KTsKLSAgICBpZiAocmVzdWx0ID09IGhhcmZidXp6RmFjZUNhY2hlKCktPmVuZCgpKSB7Ci0gICAg
ICAgIG1fZmFjZSA9IGNyZWF0ZUZhY2UoKTsKLSAgICAgICAgQVNTRVJUKG1fZmFjZSk7Ci0gICAg
ICAgIGhhcmZidXp6RmFjZUNhY2hlKCktPnNldChtX3VuaXF1ZUlELCBGYWNlQ2FjaGVFbnRyeSht
X2ZhY2UsIDEpKTsKLSAgICB9IGVsc2UgewotICAgICAgICArKyhyZXN1bHQuZ2V0KCktPnNlY29u
ZC5zZWNvbmQpOwotICAgICAgICBtX2ZhY2UgPSByZXN1bHQuZ2V0KCktPnNlY29uZC5maXJzdDsK
KyAgICBIYXJmQnV6ek5HRmFjZUNhY2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gaGFyZmJ1enpGYWNl
Q2FjaGUoKS0+YWRkKG1fdW5pcXVlSUQsIG51bGxwdHIpOworICAgIGlmIChyZXN1bHQuaXNOZXdF
bnRyeSkgeworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IFdURjo6YWRvcHRQdHIo
bmV3IEZhY2VDYWNoZUVudHJ5KTsKKyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPm1f
cmVmQ291bnQgPSAwOworICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV9mYWNlID0g
Y3JlYXRlRmFjZSgpOworICAgICAgICBBU1NFUlQocmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPm1f
ZmFjZSk7CiAgICAgfQorICAgICsrKHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kLT5tX3JlZkNvdW50
KTsKKyAgICBtX2ZhY2UgPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV9mYWNlOworICAgIG1f
Z2x5cGhDYWNoZSA9ICZyZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+bV9nbHlwaENhY2hlOwogfQog
CiBIYXJmQnV6ek5HRmFjZTo6fkhhcmZCdXp6TkdGYWNlKCkKIHsKICAgICBIYXJmQnV6ek5HRmFj
ZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5p
cXVlSUQpOwogICAgIEFTU0VSVChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkp
OwotICAgIEFTU0VSVChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShy
ZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vj
b25kLnNlY29uZCkpIHsKLSAgICAgICAgaGJfZmFjZV9kZXN0cm95KHJlc3VsdC5nZXQoKS0+c2Vj
b25kLmZpcnN0KTsKKyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQtPm1fcmVmQ291bnQg
PiAwKTsKKyAgICAtLShyZXN1bHQuZ2V0KCktPnNlY29uZC0+bV9yZWZDb3VudCk7CisgICAgaWYg
KCEocmVzdWx0LmdldCgpLT5zZWNvbmQtPm1fcmVmQ291bnQpKSB7CisgICAgICAgIGhiX2ZhY2Vf
ZGVzdHJveShyZXN1bHQuZ2V0KCktPnNlY29uZC0+bV9mYWNlKTsKICAgICAgICAgaGFyZmJ1enpG
YWNlQ2FjaGUoKS0+cmVtb3ZlKG1fdW5pcXVlSUQpOwogICAgIH0KIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNl
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
ek5HRmFjZS5oCmluZGV4IGNiYzhmOGVkNGYzNTlkNTc1OTU1YWQ5NWIzNjdmOTlhZDM2MGY4YWEu
LjBhZDFkODhiNGQwODBiOWNiOTY1YTY2M2RmODY0ODg0Y2IyYzEzMmEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNl
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2UuaApAQCAtMzMsNiArMzMsNyBAQAogCiAjaW5jbHVkZSA8aGIuaD4KIAorI2lu
Y2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNs
dWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU5LDYg
KzYwLDcgQEAgcHJpdmF0ZToKICAgICBGb250UGxhdGZvcm1EYXRhKiBtX3BsYXRmb3JtRGF0YTsK
ICAgICB1aW50NjRfdCBtX3VuaXF1ZUlEOwogICAgIGhiX2ZhY2VfdCogbV9mYWNlOworICAgIFdU
Rjo6SGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+KiBtX2dseXBoQ2FjaGU7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9I
YXJmQnV6ek5HRmFjZVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
aGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNwcAppbmRleCA1M2FjYjI5MmNkYmYwOTg4
YzQwNDA0NGUxMTkwOGY4MjFiYzk3ODA0Li5hOTQ3N2M5NGYyNGQxYTZmZWQwOGUxYTYwMWRjZTYx
ZDJlODk2OWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVNraWEuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5jcHAKQEAgLTQz
LDEyICs0MywxOCBAQAogI2luY2x1ZGUgIlNrVXRpbHMuaCIKIAogI2luY2x1ZGUgImhiLmgiCisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBPdXIg
aW1wbGVtZW50YXRpb24gb2YgdGhlIGNhbGxiYWNrcyB3aGljaCBIYXJmYnV6eiByZXF1aXJlcyBi
eSB1c2luZyBTa2lhCiAvLyBjYWxscy4gU2VlIHRoZSBIYXJmYnV6eiBzb3VyY2UgZm9yIHJlZmVy
ZW5jZXMgYWJvdXQgd2hhdCB0aGVzZSBjYWxsYmFja3MgZG8uCiAKK3N0cnVjdCBIYXJmQnV6ekZv
bnREYXRhIHsKKyAgICBTa1BhaW50IG1fcGFpbnQ7CisgICAgV1RGOjpIYXNoTWFwPHVpbnQzMl90
LCB1aW50MTZfdD4qIG1fZ2x5cGhDYWNoZTsKK307CisKIHN0YXRpYyBoYl9wb3NpdGlvbl90IFNr
aWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oU2tTY2FsYXIgdmFsdWUpCiB7CiAgICAgcmV0dXJu
IFNrU2NhbGFyVG9GaXhlZCh2YWx1ZSk7CkBAIC01Niw4ICs2Miw3IEBAIHN0YXRpYyBoYl9wb3Np
dGlvbl90IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oU2tTY2FsYXIgdmFsdWUpCiAKIHN0
YXRpYyB2b2lkIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhTa1BhaW50KiBwYWludCwgaGJf
Y29kZXBvaW50X3QgY29kZXBvaW50LCBoYl9wb3NpdGlvbl90KiB3aWR0aCwgaGJfZ2x5cGhfZXh0
ZW50c190KiBleHRlbnRzKQogewotICAgIGlmIChjb2RlcG9pbnQgPiAweEZGRkYpCi0gICAgICAg
IHJldHVybjsKKyAgICBBU1NFUlQoY29kZXBvaW50IDw9IDB4RkZGRik7CiAgICAgcGFpbnQtPnNl
dFRleHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwogCiAgICAgU2tT
Y2FsYXIgc2tXaWR0aDsKQEAgLTc4LDIzICs4MywyNyBAQCBzdGF0aWMgdm9pZCBTa2lhR2V0R2x5
cGhXaWR0aEFuZEV4dGVudHMoU2tQYWludCogcGFpbnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2lu
dAogCiBzdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGgoaGJfZm9udF90KiBoYkZvbnQs
IHZvaWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRfdCB2
YXJpYXRpb25TZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lkKiB1c2VyRGF0YSkK
IHsKLSAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KGZvbnRE
YXRhKTsKLQotICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRF
bmNvZGluZyk7Ci0gICAgdWludDE2X3QgdGV4dFs0XTsKLSAgICBzaXplX3QgbGVuZ3RoID0gU2tV
VEYxNl9Gcm9tVW5pY2hhcih1bmljb2RlLCB0ZXh0KTsKLSAgICB1aW50MTZfdCBnbHlwaDE2Owot
ICAgIHBhaW50LT50ZXh0VG9HbHlwaHModGV4dCwgbGVuZ3RoLCAmZ2x5cGgxNik7Ci0gICAgKmds
eXBoID0gZ2x5cGgxNjsKKyAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4oZm9udERhdGEpOworCisgICAgV1RGOjpIYXNo
TWFwPHVpbnQzMl90LCB1aW50MTZfdD46OkFkZFJlc3VsdCByZXN1bHQgPSBoYkZvbnREYXRhLT5t
X2dseXBoQ2FjaGUtPmFkZCh1bmljb2RlLCAwKTsKKyAgICBpZiAocmVzdWx0LmlzTmV3RW50cnkp
IHsKKyAgICAgICAgU2tQYWludCogcGFpbnQgPSAmaGJGb250RGF0YS0+bV9wYWludDsKKyAgICAg
ICAgcGFpbnQtPnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMzJfVGV4dEVuY29kaW5nKTsK
KyAgICAgICAgdWludDE2X3QgZ2x5cGgxNjsKKyAgICAgICAgcGFpbnQtPnRleHRUb0dseXBocygm
dW5pY29kZSwgc2l6ZW9mKGhiX2NvZGVwb2ludF90KSwgJmdseXBoMTYpOworICAgICAgICByZXN1
bHQuaXRlcmF0b3ItPnNlY29uZCA9IGdseXBoMTY7CisgICAgICAgICpnbHlwaCA9IGdseXBoMTY7
CisgICAgfQorICAgICpnbHlwaCA9IHJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOwogICAgIHJldHVy
biAhISpnbHlwaDsKIH0KIAogc3RhdGljIGhiX3Bvc2l0aW9uX3QgaGFyZmJ1enpHZXRHbHlwaEhv
cml6b250YWxBZHZhbmNlKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29k
ZXBvaW50X3QgZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQogewotICAgIFNrUGFpbnQqIHBhaW50ID0g
cmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4oZm9udERhdGEpOworICAgIEhhcmZCdXp6Rm9udERh
dGEqIGhiRm9udERhdGEgPSByZWludGVycHJldF9jYXN0PEhhcmZCdXp6Rm9udERhdGEqPihmb250
RGF0YSk7CiAgICAgaGJfcG9zaXRpb25fdCBhZHZhbmNlID0gMDsKIAotICAgIFNraWFHZXRHbHlw
aFdpZHRoQW5kRXh0ZW50cyhwYWludCwgZ2x5cGgsICZhZHZhbmNlLCAwKTsKKyAgICBTa2lhR2V0
R2x5cGhXaWR0aEFuZEV4dGVudHMoJmhiRm9udERhdGEtPm1fcGFpbnQsIGdseXBoLCAmYWR2YW5j
ZSwgMCk7CiAgICAgcmV0dXJuIGFkdmFuY2U7CiB9CiAKQEAgLTEwNyw5ICsxMTYsOSBAQCBzdGF0
aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsT3JpZ2luKGhiX2ZvbnRfdCog
aGJGb250LCB2b2lkKiBmb250RAogCiBzdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGhF
eHRlbnRzKGhiX2ZvbnRfdCogaGJGb250LCB2b2lkKiBmb250RGF0YSwgaGJfY29kZXBvaW50X3Qg
Z2x5cGgsIGhiX2dseXBoX2V4dGVudHNfdCogZXh0ZW50cywgdm9pZCogdXNlckRhdGEpCiB7Ci0g
ICAgU2tQYWludCogcGFpbnQgPSByZWludGVycHJldF9jYXN0PFNrUGFpbnQqPihmb250RGF0YSk7
CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFy
ZkJ1enpGb250RGF0YSo+KGZvbnREYXRhKTsKIAotICAgIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0
ZW50cyhwYWludCwgZ2x5cGgsIDAsIGV4dGVudHMpOworICAgIFNraWFHZXRHbHlwaFdpZHRoQW5k
RXh0ZW50cygmaGJGb250RGF0YS0+bV9wYWludCwgZ2x5cGgsIDAsIGV4dGVudHMpOwogICAgIHJl
dHVybiB0cnVlOwogfQogCkBAIC0xNTEsMTAgKzE2MCwxMCBAQCBzdGF0aWMgaGJfYmxvYl90KiBo
YXJmYnV6elNraWFHZXRUYWJsZShoYl9mYWNlX3QqIGZhY2UsIGhiX3RhZ190IHRhZywgdm9pZCog
dXNlcgogICAgICAgICAgICAgICAgICAgICAgICAgICBIQl9NRU1PUllfTU9ERV9XUklUQUJMRSwg
YnVmZmVyLCBmYXN0RnJlZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRlc3Ryb3lQYWludCh2b2lkKiB1
c2VyRGF0YSkKK3N0YXRpYyB2b2lkIGRlc3Ryb3lIYXJmQnV6ekZvbnREYXRhKHZvaWQqIHVzZXJE
YXRhKQogewotICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4o
dXNlckRhdGEpOwotICAgIGRlbGV0ZSBwYWludDsKKyAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZv
bnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4odXNlckRhdGEpOwor
ICAgIGRlbGV0ZSBoYkZvbnREYXRhOwogfQogCiBoYl9mYWNlX3QqIEhhcmZCdXp6TkdGYWNlOjpj
cmVhdGVGYWNlKCkKQEAgLTE2NiwxMCArMTc1LDExIEBAIGhiX2ZhY2VfdCogSGFyZkJ1enpOR0Zh
Y2U6OmNyZWF0ZUZhY2UoKQogCiBoYl9mb250X3QqIEhhcmZCdXp6TkdGYWNlOjpjcmVhdGVGb250
KCkKIHsKKyAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gbmV3IEhhcmZCdXp6Rm9u
dERhdGE7CisgICAgaGJGb250RGF0YS0+bV9nbHlwaENhY2hlID0gbV9nbHlwaENhY2hlOworICAg
IG1fcGxhdGZvcm1EYXRhLT5zZXR1cFBhaW50KCZoYkZvbnREYXRhLT5tX3BhaW50KTsKICAgICBo
Yl9mb250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOwotICAgIFNrUGFpbnQqIHBh
aW50ID0gbmV3IFNrUGFpbnQ7Ci0gICAgbV9wbGF0Zm9ybURhdGEtPnNldHVwUGFpbnQocGFpbnQp
OwotICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6U2tpYUdldEZvbnRGdW5jcygp
LCBwYWludCwgZGVzdHJveVBhaW50KTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJm
YnV6elNraWFHZXRGb250RnVuY3MoKSwgaGJGb250RGF0YSwgZGVzdHJveUhhcmZCdXp6Rm9udERh
dGEpOwogICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS0+c2l6ZSgpOwogICAgIGludCBz
Y2FsZSA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2l6ZSk7CiAgICAgaGJfZm9udF9z
ZXRfc2NhbGUoZm9udCwgc2NhbGUsIHNjYWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNw
cAppbmRleCA5ZTU1ZmM0MTFhNmNmYjdiYzc4ZDI4MDY0ZDc5YzI2YTRmMGM1MTJiLi5mM2ZlNDY3
Zjc1NjIwYzY5ZmEyODA5ZGU4YjNlZTZjMzc2NmNmNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpT
aGFwZXIuY3BwCkBAIC04NywxMCArODcsNiBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elJ1bjo6YXBwbHlTaGFwZVJlc3VsdChoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCiAgICAg
bV9hZHZhbmNlcy5yZXNpemUobV9udW1HbHlwaHMpOwogICAgIG1fZ2x5cGhUb0NoYXJhY3Rlcklu
ZGV4ZXMucmVzaXplKG1fbnVtR2x5cGhzKTsKICAgICBtX29mZnNldHMucmVzaXplKG1fbnVtR2x5
cGhzKTsKLQotICAgIGhiX2dseXBoX2luZm9fdCogaW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBo
X2luZm9zKGhhcmZidXp6QnVmZmVyLCAwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bV9udW1HbHlwaHM7ICsraSkKLSAgICAgICAgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tpXSA9
IGluZm9zW2ldLmNsdXN0ZXI7CiB9CiAKIHZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVu
OjpzZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwg
ZmxvYXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSkKQEAgLTI0MCwyMCAr
MjM2LDYgQEAgRmxvYXRQb2ludCBIYXJmQnV6elNoYXBlcjo6YWRqdXN0U3RhcnRQb2ludChjb25z
dCBGbG9hdFBvaW50JiBwb2ludCkKICAgICByZXR1cm4gcG9pbnQgKyBtX3N0YXJ0T2Zmc2V0Owog
fQogCi1zdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoY29uc3QgRm9udCogZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMs
IHNpemVfdCBsZW5ndGgpCi17Ci0gICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsK
LSAgICBWZWN0b3I8VUNoYXIsIDQ+IG5vcm1hbGl6ZWRDaGFyYWN0ZXJzKGxlbmd0aCk7Ci0gICAg
aW50MzJfdCBub3JtYWxpemVkTGVuZ3RoID0gdW5vcm1fbm9ybWFsaXplKGNoYXJhY3RlcnMsIGxl
bmd0aCwgVU5PUk1fTkZDLCBVTk9STV9VTklDT0RFXzNfMiwgJm5vcm1hbGl6ZWRDaGFyYWN0ZXJz
WzBdLCBsZW5ndGgsICZlcnJvcik7Ci0gICAgLy8gU2hvdWxkIGZhbGxiYWNrIGlmIHdlIGhhdmUg
YW4gZXJyb3Igb3Igbm8gY29tcG9zaXRpb24gb2NjdXJyZWQuCi0gICAgaWYgKFVfRkFJTFVSRShl
cnJvcikgfHwgKHN0YXRpY19jYXN0PHNpemVfdD4obm9ybWFsaXplZExlbmd0aCkgPT0gbGVuZ3Ro
KSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgVUNoYXIzMiBub3JtYWxpemVkQ2hhcmFjdGVyOwot
ICAgIHNpemVfdCBpbmRleCA9IDA7Ci0gICAgVTE2X05FWFQoJm5vcm1hbGl6ZWRDaGFyYWN0ZXJz
WzBdLCBpbmRleCwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihub3JtYWxpemVkTGVuZ3RoKSwgbm9ybWFs
aXplZENoYXJhY3Rlcik7Ci0gICAgcmV0dXJuIGZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihu
b3JtYWxpemVkQ2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7Ci19Ci0KIGJvb2wgSGFyZkJ1enpT
aGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMoKQogewogICAgIGNvbnN0IFVDaGFyKiBub3JtYWxp
emVkQnVmZmVyRW5kID0gbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9ub3JtYWxpemVkQnVm
ZmVyTGVuZ3RoOwpAQCAtMjc4LDYgKzI2MCw3IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OmNvbGxl
Y3RIYXJmQnV6elJ1bnMoKQogICAgICAgICBmb3IgKGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxl
bmd0aCk7IGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0
b3IuYWR2YW5jZShjbHVzdGVyTGVuZ3RoKSkgewogICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0
QXNaZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
CiAgICAgICAgICAgICBpZiAoVV9HRVRfR0NfTUFTSyhjaGFyYWN0ZXIpICYgVV9HQ19NX01BU0sp
IHsKICAgICAgICAgICAgICAgICBpbnQgbWFya0xlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAg
ICAgICAgICAgICAgY29uc3QgVUNoYXIqIG1hcmtDaGFyYWN0ZXJzRW5kID0gaXRlcmF0b3IuY2hh
cmFjdGVycygpICsgY2x1c3Rlckxlbmd0aDsKQEAgLTI5MCwxMSArMjczLDEyIEBAIGJvb2wgSGFy
ZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMoKQogICAgICAgICAgICAgICAgICAgICBt
YXJrTGVuZ3RoICs9IG5leHRDaGFyYWN0ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIG1h
cmtDaGFyYWN0ZXJzRW5kICs9IG5leHRDaGFyYWN0ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIG5leHRGb250RGF0YSA9IGZvbnREYXRhRm9yQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UobV9mb250LCBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24sIG1hcmtDaGFy
YWN0ZXJzRW5kIC0gY3VycmVudENoYXJhY3RlclBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBp
ZiAobmV4dEZvbnREYXRhKQorCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3VycmVudENoYXJhY3RlclBvc2l0
aW9uLCBtYXJrQ2hhcmFjdGVyc0VuZCAtIGN1cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbikpIHsKICAg
ICAgICAgICAgICAgICAgICAgY2x1c3Rlckxlbmd0aCA9IG1hcmtMZW5ndGg7Ci0gICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IG5leHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlciwg
ZmFsc2UpLmZvbnREYXRhOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbmV4
dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxz
ZSkuZm9udERhdGE7CiAKQEAgLTMwNSw2ICsyODksNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpj
b2xsZWN0SGFyZkJ1enpSdW5zKCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGlmIChuZXh0U2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVEKQogICAgICAgICAgICAgICAgIG5l
eHRTY3JpcHQgPSBjdXJyZW50U2NyaXB0OworICAgICAgICAgICAgY3VycmVudENoYXJhY3RlclBv
c2l0aW9uID0gaXRlcmF0b3IuY2hhcmFjdGVycygpOwogICAgICAgICB9CiAgICAgICAgIHVuc2ln
bmVkIG51bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4gPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVy
KCkgLSBzdGFydEluZGV4T2ZDdXJyZW50UnVuOwogICAgICAgICBtX2hhcmZidXp6UnVucy5hcHBl
bmQoSGFyZkJ1enpSdW46OmNyZWF0ZShjdXJyZW50Rm9udERhdGEsIHN0YXJ0SW5kZXhPZkN1cnJl
bnRSdW4sIG51bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIG1fcnVuLmRpcmVjdGlvbigpKSk7CkBA
IC0zNjEsNiArMzQ2LDcgQEAgdm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNG
b3JIYXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3VycmVudFJ1biwgaGIKICAgICBoYl9nbHlwaF9w
b3NpdGlvbl90KiBnbHlwaFBvc2l0aW9ucyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25z
KGhhcmZidXp6QnVmZmVyLCAwKTsKIAogICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGN1cnJlbnRS
dW4tPm51bUdseXBocygpOworICAgIHVpbnQxNl90KiBnbHlwaFRvQ2hhcmFjdGVySW5kZXhlcyA9
IGN1cnJlbnRSdW4tPmdseXBoVG9DaGFyYWN0ZXJJbmRleGVzKCk7CiAgICAgZmxvYXQgdG90YWxB
ZHZhbmNlID0gMDsKIAogICAgIC8vIEhhcmZCdXp6IHJldHVybnMgdGhlIHNoYXBpbmcgcmVzdWx0
IGluIHZpc3VhbCBvcmRlci4gV2UgbmVlZCBub3QgdG8gZmxpcCBmb3IgUlRMLgpAQCAtMzc0LDYg
KzM2MCw5IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1
enpSdW4oSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4sIGhiCiAgICAgICAgIHVuc2lnbmVkIGN1cnJl
bnRDaGFyYWN0ZXJJbmRleCA9IGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSArIGdseXBoSW5mb3Nb
aV0uY2x1c3RlcjsKICAgICAgICAgYm9vbCBpc0NsdXN0ZXJFbmQgPSBydW5FbmQgfHwgZ2x5cGhJ
bmZvc1tpXS5jbHVzdGVyICE9IGdseXBoSW5mb3NbaSArIDFdLmNsdXN0ZXI7CiAgICAgICAgIGZs
b2F0IHNwYWNpbmcgPSAwOworCisgICAgICAgIGdseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2ldID0g
Z2x5cGhJbmZvc1tpXS5jbHVzdGVyOworCiAgICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgIUZv
bnQ6OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbY3VycmVudENoYXJh
Y3RlckluZGV4XSkpCiAgICAgICAgICAgICBzcGFjaW5nICs9IG1fbGV0dGVyU3BhY2luZzsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVG
b250RGF0YVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9T
aW1wbGVGb250RGF0YVNraWEuY3BwCmluZGV4IDU0NDg2YzNhYTRlNjk0ODMxNTgwYTkyMjk1NjU5
MDBlY2YwN2MwODcuLjc3ODk0Y2Q2ZmRjYmVhY2UyZDQxODg4Zjg3NWM1Y2FmYjg5ZDEyNzYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9u
dERhdGFTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lh
L1NpbXBsZUZvbnREYXRhU2tpYS5jcHAKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlICJTa1R5
cGVmYWNlLmgiCiAjaW5jbHVkZSAiU2tUeXBlcy5oIgogI2luY2x1ZGUgIlZETVhQYXJzZXIuaCIK
KyNpbmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjUwLDQgKzI1MiwzMiBAQCBmbG9h
dCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25z
dAogICAgIHJldHVybiBTa1NjYWxhclRvRmxvYXQod2lkdGgpOwogfQogCisjaWYgVVNFKEhBUkZC
VVpaX05HKQorYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7
CisgICAgaWYgKCFtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKKyAgICAgICAg
bV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBhZG9wdFB0cihuZXcgSGFzaE1h
cDxTdHJpbmcsIGJvb2w+KTsKKworICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRS
ZXN1bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFk
ZChTdHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2UpOworICAgIGlmICghYWRkUmVzdWx0
LmlzTmV3RW50cnkpCisgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsK
KworICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgVmVjdG9yPFVDaGFy
LCA0PiBub3JtYWxpemVkQ2hhcmFjdGVycyhsZW5ndGgpOworICAgIGludDMyX3Qgbm9ybWFsaXpl
ZExlbmd0aCA9IHVub3JtX25vcm1hbGl6ZShjaGFyYWN0ZXJzLCBsZW5ndGgsIFVOT1JNX05GQywg
VU5PUk1fVU5JQ09ERV8zXzIsICZub3JtYWxpemVkQ2hhcmFjdGVyc1swXSwgbGVuZ3RoLCAmZXJy
b3IpOworICAgIC8vIENhbid0IHJlbmRlciBpZiB3ZSBoYXZlIGFuIGVycm9yIG9yIG5vIGNvbXBv
c2l0aW9uIG9jY3VycmVkLgorICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpIHx8IChzdGF0aWNfY2Fz
dDxzaXplX3Q+KG5vcm1hbGl6ZWRMZW5ndGgpID09IGxlbmd0aCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQYWlu
dCgmcGFpbnQpOworICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4
dEVuY29kaW5nKTsKKyAgICBpZiAocGFpbnQudGV4dFRvR2x5cGhzKCZub3JtYWxpemVkQ2hhcmFj
dGVyc1swXSwgbm9ybWFsaXplZExlbmd0aCAqIDIsIDApKSB7CisgICAgICAgIGFkZFJlc3VsdC5p
dGVyYXRvci0+c2Vjb25kID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAg
IHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166595</attachid>
            <date>2012-10-01 20:49:43 -0700</date>
            <delta_ts>2012-10-02 16:06:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-97993-20121002124856.patch</filename>
            <type>text/plain</type>
            <size>20626</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOWExZDFhNjM5OGJiOWI5
OGEzNDNlN2I3ZjA2NTlkOTEzMzc4OWQ3My4uMGExZjY4NGRmYjY4NWJjZDdkN2M4MDMzYjkzMjc5
NGY4ZTgzZTgzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTEwLTAyICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEludHJvZHVjZSBjYWNoZXMgZm9yIEhhcmZCdXp6U2hhcGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzk5MworCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIC0gSW1wbGVtZW50IGNhblJlbmRlckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKCkgZm9yIHBvcnRzIHdoaWNoIHVzZQorICAgICAgICBIYXJmQnV6
elNoYXBlci4gVGhpcyBmdW5jdGlvbiBjYWNoZXMgdGhlIHJlc3VsdCBhbmQgd2lsbCBpbXByb3Zl
IHRoZQorICAgICAgICBwZXJmb3JtYW5jZSBvZiBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZC
dXp6UnVucy4KKyAgICAgICAgLSBBZGQgYSBIYXNoTWFwIHRvIEhhcmZCdXp6TkdGYWNlLiBJdCBp
cyB1c2VkIGFzIGEgY2FjaGUgdGhhdCBob2xkcworICAgICAgICBnbHlwaCBpbmRleGVzIG9mIGNv
ZGVwb2ludHMuIEl0IHJlZHVjZXMgdGhlIG51bWJlciBvZgorICAgICAgICBTa1BhaW50Ojp0ZXh0
VG9HbHlwaHMoKSBjYWxscy4KKworICAgICAgICBUaGlzIHBhdGNoIG1ha2VzIHRoZSBpbnRsMiBw
YWdlIGN5Y2xlciA0LjQlIGZhc3RlciBvbiBteSBtYWNoaW5lLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cy4gTm8gY2hhbmdlcyBpbiBiZWhhdmlvci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL1NpbXBsZUZvbnREYXRhLmg6CisgICAgICAgIChTaW1wbGVGb250RGF0YSk6IEVuYWJsZWQg
Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoKSBpZiBVU0UoSEFSRkJVWlpfTkcp
IGlzIGVuYWJsZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxl
Rm9udERhdGFGcmVlVHlwZS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6
TkdGYWNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoRmFjZUNhY2hlRW50cnkp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZCdXp6TkdGYWNlOjpIYXJmQnV6ek5HRmFj
ZSk6CisgICAgICAgIExvb2t1cCB0aGUgY2FjaGUgZW50cnkgaW4gaGFyZkJ1enpGYWNlQ2FjaGUu
IENyZWF0ZSB0aGUgZW50cnkgaWYgdGhlcmUgaXMgbm8gZW50cnkgaW4gdGhlIGNhY2hlLgorICAg
ICAgICBJbmNyZW1lbnQgdGhlIHJlZiBjb3VudCBvZiB0aGUgZW50cnkgYW5kIHNldCBjYWNoZSBl
bnRyeSB2YWx1ZXMgdG8gbWVtYmVyIHZhcmlhYmxlcy4KKyAgICAgICAgKFdlYkNvcmU6OkhhcmZC
dXp6TkdGYWNlOjp+SGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICBEZWNyZW1lbnQgdGhlIHJlZiBj
b3VudCBvZiB0aGUgY2FjaGUgZW50cnkuIFJlbW92ZSB0aGUgZW50cnkgaWYgbm8gb25lIHJlZmVy
cyB0aGUgY2FjaGUuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpOR0ZhY2UuaDoKKyAgICAgICAgKEhhcmZCdXp6TkdGYWNlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVNraWEuY3BwOgorICAgICAg
ICAoSGFyZkJ1enpGb250RGF0YSk6IEFkZGVkLiBVc2VkIGFzIHx1c2VyRGF0YXwgb2YgaGFyZmJ1
enogY2FsbGJhY2sgZnVuY3Rpb25zLgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJD
b3JlOjpTa2lhR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMpOgorICAgICAgICAoV2ViQ29yZTo6aGFy
ZmJ1enpHZXRHbHlwaCk6CisgICAgICAgIExvb2sgdXAgdGhlIGdseXBoQ2hhY2hlIGZpcnN0LiBJ
ZiB0aGUgY2FjaGUgZW50cnkgZG9lc24ndCBleGlzdCwgY2FsbAorICAgICAgICBTa1BhaW50Ojp0
ZXh0VG9HbHlwaHMoKSB0byBnZXQgZ2x5cGggaW5kZXggYW5kIHN0b3JlIGl0IHRvIHRoZSBjYWNo
ZS4KKyAgICAgICAgKFdlYkNvcmU6OmhhcmZidXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZSk6
CisgICAgICAgIChXZWJDb3JlOjpoYXJmYnV6ekdldEdseXBoRXh0ZW50cyk6CisgICAgICAgIChX
ZWJDb3JlOjpkZXN0cm95SGFyZkJ1enpGb250RGF0YSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SGFyZkJ1enpOR0ZhY2U6OmNyZWF0ZUZvbnQpOgorICAgICAgICBDcmVhdGUgSGFyZkJ1enpG
b250RGF0YSBhbmQgcGFzcyBpdCB0byBoYXJmYnV6ei4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpI
YXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFwcGx5U2hhcGVSZXN1bHQpOgorICAgICAgICBE
b24ndCBpbml0aWFsaXplIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMgaGVyZS4KKyAgICAgICAg
KFdlYkNvcmU6OkhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKToKKyAgICAgICAg
VXNlIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSgp
IGluc3RlYWQgb2YKKyAgICAgICAgZm9udERhdGFGb3JDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5j
ZSgpLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25z
Rm9ySGFyZkJ1enpSdW4pOgorICAgICAgICBTZXQgZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMgb2Yg
dGhlIGN1cnJlbnQgSGFyZkJ1enpSdW4uCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tp
YS9TaW1wbGVGb250RGF0YVNraWEuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVu
Y2UpOiBBZGRlZC4KKwogMjAxMi0xMC0wMSAgU3RlcGhlbiBDaGVubmV5ICA8c2NoZW5uZXlAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJlbmFtZSBGb250OjptX2ZvbnRMaXN0IHRvIGF2b2lkIGNv
bmZ1c2lvbgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZv
bnREYXRhLmgKaW5kZXggY2I2ZmI4NTM5NzNmNDRkMTQ5ZmUyZDI1YjM0YjlmNjMwNDBkZWU5YS4u
NTM0MDljMzY2NGMwYThjMDg3NWFjZjA1ZWNjYTg4MWYwZWM5ZGI2ZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2ltcGxlRm9udERhdGEuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCkBAIC0xODQsNiAr
MTg0LDkgQEAgcHVibGljOgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01J
VU0pICYmIE9TKERBUldJTikpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkKICAgICBD
RkRpY3Rpb25hcnlSZWYgZ2V0Q0ZTdHJpbmdBdHRyaWJ1dGVzKFR5cGVzZXR0aW5nRmVhdHVyZXMs
IEZvbnRPcmllbnRhdGlvbikgY29uc3Q7CisjZW5kaWYKKworI2lmIFBMQVRGT1JNKE1BQykgfHwg
KFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9T
KERBUldJTikpIHx8IFVTRShIQVJGQlVaWl9ORykKICAgICBib29sIGNhblJlbmRlckNvbWJpbmlu
Z0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBjb25zdDsKICNlbmRpZgog
CkBAIC0yODgsNiArMjkxLDkgQEAgcHJpdmF0ZToKIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgKFBM
QVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0oV1gpICYmIE9TKERB
UldJTikpCiAgICAgbXV0YWJsZSBIYXNoTWFwPHVuc2lnbmVkLCBSZXRhaW5QdHI8Q0ZEaWN0aW9u
YXJ5UmVmPiA+IG1fQ0ZTdHJpbmdBdHRyaWJ1dGVzOworI2VuZGlmCisKKyNpZiBQTEFURk9STShN
QUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkgfHwgKFBMQVRGT1JNKFdY
KSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoSEFSRkJVWlpfTkcpCiAgICAgbXV0YWJsZSBPd25QdHI8
SGFzaE1hcDxTdHJpbmcsIGJvb2w+ID4gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBv
cnQ7CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAppbmRl
eCBkMWExYWM3YjYzNDA1ZGM4ODhkZWRiZTFiZDdmNTI0ODA3NjNjMDRmLi5lZDk3NWM3MDU3MTEz
NjIwYzU2M2JmMmY0ZjIyZDRhYzkxYmQ4MjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0YUZyZWVUeXBlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250RGF0
YUZyZWVUeXBlLmNwcApAQCAtMTcxLDQgKzE3MSwxMSBAQCBmbG9hdCBTaW1wbGVGb250RGF0YTo6
cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAogICAgIHJldHVybiB3OyAg
ICAKIH0KIAorI2lmIFVTRShIQVJGQlVaWl9ORykKK2Jvb2wgU2ltcGxlRm9udERhdGE6OmNhblJl
bmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90KSBjb25z
dAoreworICAgIHJldHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
ek5HRmFjZS5jcHAKaW5kZXggN2RkMDQ4YjNiNDNmZjU5Mzg4ZWFmNGU3MjEwZWUyY2NiZDU1NDIy
My4uM2RkNGFlNDBlMjUzZWFmZDRjZGI3MDc2ZjU5NmFkOWM5MDhkMzg2OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0Zh
Y2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6TkdGYWNlLmNwcApAQCAtMzMsNyArMzMsNiBAQAogCiAjaW5jbHVkZSAiRm9udFBs
YXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgImhiLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00MSw4ICs0MCwzMiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAvLyBXZWJLaXQncyBmb250IG9iamVjdHMsIHdlIGFsc28gbmVlZCBhZGRpdGlvbmFs
IGNhY2hpbmcgbGF5ZXIgZm9yIEhhcmZCdXp6CiAvLyB0byByZWR1Y2UgdGhlIG1lbW9yeSBjb25z
dW1wdGlvbiBiZWNhdXNlIGhiX2ZhY2VfdCBzaG91bGQgYmUgYXNzb2NpYXRlZCB3aXRoCiAvLyB1
bmRlcmxpbmcgZm9udCBkYXRhIChlLmcuIENURm9udFJlZiwgRlRGYWNlKS4KLXR5cGVkZWYgcGFp
cjxoYl9mYWNlX3QqLCB1bnNpZ25lZD4gRmFjZUNhY2hlRW50cnk7Ci10eXBlZGVmIEhhc2hNYXA8
dWludDY0X3QsIEZhY2VDYWNoZUVudHJ5LCBXVEY6OkludEhhc2g8dWludDY0X3Q+LCBXVEY6OlVu
c2lnbmVkV2l0aFplcm9LZXlIYXNoVHJhaXRzPHVpbnQ2NF90PiA+IEhhcmZCdXp6TkdGYWNlQ2Fj
aGU7CisKK2NsYXNzIEZhY2VDYWNoZUVudHJ5IDogcHVibGljIFJlZkNvdW50ZWQ8RmFjZUNhY2hl
RW50cnk+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxGYWNlQ2FjaGVFbnRyeT4g
Y3JlYXRlKGhiX2ZhY2VfdCogZmFjZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChmYWNlKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGYWNlQ2FjaGVFbnRyeShmYWNlKSk7CisgICAgfQor
ICAgIH5GYWNlQ2FjaGVFbnRyeSgpCisgICAgeworICAgICAgICBoYl9mYWNlX2Rlc3Ryb3kobV9m
YWNlKTsKKyAgICB9CisKKyAgICBoYl9mYWNlX3QqIGZhY2UoKSB7IHJldHVybiBtX2ZhY2U7IH0K
KyAgICBIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4qIGdseXBoQ2FjaGUoKSB7IHJldHVybiAm
bV9nbHlwaENhY2hlOyB9CisKK3ByaXZhdGU6CisgICAgRmFjZUNhY2hlRW50cnkoaGJfZmFjZV90
KiBmYWNlKQorICAgICAgICA6IG1fZmFjZShmYWNlKQorICAgIHsgfQorCisgICAgaGJfZmFjZV90
KiBtX2ZhY2U7CisgICAgSGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+IG1fZ2x5cGhDYWNoZTsK
K307CisKK3R5cGVkZWYgSGFzaE1hcDx1aW50NjRfdCwgUmVmUHRyPEZhY2VDYWNoZUVudHJ5Piwg
V1RGOjpJbnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0
czx1aW50NjRfdD4gPiBIYXJmQnV6ek5HRmFjZUNhY2hlOwogCiBzdGF0aWMgSGFyZkJ1enpOR0Zh
Y2VDYWNoZSogaGFyZmJ1enpGYWNlQ2FjaGUoKQogewpAQCAtNTQsMjcgKzc3LDIyIEBAIEhhcmZC
dXp6TkdGYWNlOjpIYXJmQnV6ek5HRmFjZShGb250UGxhdGZvcm1EYXRhKiBwbGF0Zm9ybURhdGEs
IHVpbnQ2NF90IHVuaXF1ZUlECiAgICAgOiBtX3BsYXRmb3JtRGF0YShwbGF0Zm9ybURhdGEpCiAg
ICAgLCBtX3VuaXF1ZUlEKHVuaXF1ZUlEKQogewotICAgIEhhcmZCdXp6TkdGYWNlQ2FjaGU6Oml0
ZXJhdG9yIHJlc3VsdCA9IGhhcmZidXp6RmFjZUNhY2hlKCktPmZpbmQobV91bmlxdWVJRCk7Ci0g
ICAgaWYgKHJlc3VsdCA9PSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5lbmQoKSkgewotICAgICAgICBt
X2ZhY2UgPSBjcmVhdGVGYWNlKCk7Ci0gICAgICAgIEFTU0VSVChtX2ZhY2UpOwotICAgICAgICBo
YXJmYnV6ekZhY2VDYWNoZSgpLT5zZXQobV91bmlxdWVJRCwgRmFjZUNhY2hlRW50cnkobV9mYWNl
LCAxKSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgKysocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vj
b25kKTsKLSAgICAgICAgbV9mYWNlID0gcmVzdWx0LmdldCgpLT5zZWNvbmQuZmlyc3Q7Ci0gICAg
fQorICAgIEhhcmZCdXp6TkdGYWNlQ2FjaGU6OkFkZFJlc3VsdCByZXN1bHQgPSBoYXJmYnV6ekZh
Y2VDYWNoZSgpLT5hZGQobV91bmlxdWVJRCwgMCk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5
KQorICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IEZhY2VDYWNoZUVudHJ5OjpjcmVh
dGUoY3JlYXRlRmFjZSgpKTsKKyAgICByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+cmVmKCk7Cisg
ICAgbV9mYWNlID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmZhY2UoKTsKKyAgICBtX2dseXBo
Q2FjaGVGb3JGYWNlQ2FoZUVudHJ5ID0gcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPmdseXBoQ2Fj
aGUoKTsKIH0KIAogSGFyZkJ1enpOR0ZhY2U6On5IYXJmQnV6ek5HRmFjZSgpCiB7CiAgICAgSGFy
ZkJ1enpOR0ZhY2VDYWNoZTo6aXRlcmF0b3IgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+
ZmluZChtX3VuaXF1ZUlEKTsKICAgICBBU1NFUlQocmVzdWx0ICE9IGhhcmZidXp6RmFjZUNhY2hl
KCktPmVuZCgpKTsKLSAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kID4gMCk7
Ci0gICAgLS0ocmVzdWx0LmdldCgpLT5zZWNvbmQuc2Vjb25kKTsKLSAgICBpZiAoIShyZXN1bHQu
Z2V0KCktPnNlY29uZC5zZWNvbmQpKSB7Ci0gICAgICAgIGhiX2ZhY2VfZGVzdHJveShyZXN1bHQu
Z2V0KCktPnNlY29uZC5maXJzdCk7CisgICAgQVNTRVJUKHJlc3VsdC5nZXQoKS0+c2Vjb25kLT5y
ZWZDb3VudCgpID4gMSk7CisgICAgcmVzdWx0LmdldCgpLT5zZWNvbmQtPmRlcmVmKCk7CisgICAg
aWYgKHJlc3VsdC5nZXQoKS0+c2Vjb25kLT5yZWZDb3VudCgpID09IDEpCiAgICAgICAgIGhhcmZi
dXp6RmFjZUNhY2hlKCktPnJlbW92ZShtX3VuaXF1ZUlEKTsKLSAgICB9CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5oCmluZGV4IGNiYzhmOGVkNGYz
NTlkNTc1OTU1YWQ5NWIzNjdmOTlhZDM2MGY4YWEuLmE4NGJjMTExOTU0M2MzNTJhYTBlNjVlM2Jk
YjM4YzZmN2U1NGEzMzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuaApAQCAtMzMsNiArMzMs
NyBAQAogCiAjaW5jbHVkZSA8aGIuaD4KIAorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2lu
Y2x1ZGUgPHd0Zi9SZWZQdHIuaD4KQEAgLTU5LDYgKzYwLDcgQEAgcHJpdmF0ZToKICAgICBGb250
UGxhdGZvcm1EYXRhKiBtX3BsYXRmb3JtRGF0YTsKICAgICB1aW50NjRfdCBtX3VuaXF1ZUlEOwog
ICAgIGhiX2ZhY2VfdCogbV9mYWNlOworICAgIFdURjo6SGFzaE1hcDx1aW50MzJfdCwgdWludDE2
X3Q+KiBtX2dseXBoQ2FjaGVGb3JGYWNlQ2FoZUVudHJ5OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0Zh
Y2VTa2lhLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6TkdGYWNlU2tpYS5jcHAKaW5kZXggNTNhY2IyOTJjZGJmMDk4OGM0MDQwNDRlMTE5
MDhmODIxYmM5NzgwNC4uN2MzMzdkNzI1MTFjNjZlYWM0Nzk1OTNlZmU5MTMyMzU3NjU1MjJlYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcv
SGFyZkJ1enpOR0ZhY2VTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZVNraWEuY3BwCkBAIC00MywxMiArNDMsMjEg
QEAKICNpbmNsdWRlICJTa1V0aWxzLmgiCiAKICNpbmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0
Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogLy8gT3VyIGltcGxlbWVudGF0
aW9uIG9mIHRoZSBjYWxsYmFja3Mgd2hpY2ggSGFyZmJ1enogcmVxdWlyZXMgYnkgdXNpbmcgU2tp
YQogLy8gY2FsbHMuIFNlZSB0aGUgSGFyZmJ1enogc291cmNlIGZvciByZWZlcmVuY2VzIGFib3V0
IHdoYXQgdGhlc2UgY2FsbGJhY2tzIGRvLgogCitzdHJ1Y3QgSGFyZkJ1enpGb250RGF0YSB7Cisg
ICAgSGFyZkJ1enpGb250RGF0YShXVEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogZ2x5
cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5KQorICAgICAgICA6IG1fZ2x5cGhDYWNoZUZvckZhY2VD
YWhlRW50cnkoZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5KQorICAgIHsgfQorICAgIFNrUGFp
bnQgbV9wYWludDsKKyAgICBXVEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogbV9nbHlw
aENhY2hlRm9yRmFjZUNhaGVFbnRyeTsKK307CisKIHN0YXRpYyBoYl9wb3NpdGlvbl90IFNraWFT
Y2FsYXJUb0hhcmZidXp6UG9zaXRpb24oU2tTY2FsYXIgdmFsdWUpCiB7CiAgICAgcmV0dXJuIFNr
U2NhbGFyVG9GaXhlZCh2YWx1ZSk7CkBAIC01Niw4ICs2NSw3IEBAIHN0YXRpYyBoYl9wb3NpdGlv
bl90IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oU2tTY2FsYXIgdmFsdWUpCiAKIHN0YXRp
YyB2b2lkIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhTa1BhaW50KiBwYWludCwgaGJfY29k
ZXBvaW50X3QgY29kZXBvaW50LCBoYl9wb3NpdGlvbl90KiB3aWR0aCwgaGJfZ2x5cGhfZXh0ZW50
c190KiBleHRlbnRzKQogewotICAgIGlmIChjb2RlcG9pbnQgPiAweEZGRkYpCi0gICAgICAgIHJl
dHVybjsKKyAgICBBU1NFUlQoY29kZXBvaW50IDw9IDB4RkZGRik7CiAgICAgcGFpbnQtPnNldFRl
eHRFbmNvZGluZyhTa1BhaW50OjprR2x5cGhJRF9UZXh0RW5jb2RpbmcpOwogCiAgICAgU2tTY2Fs
YXIgc2tXaWR0aDsKQEAgLTc4LDIzICs4NiwyNyBAQCBzdGF0aWMgdm9pZCBTa2lhR2V0R2x5cGhX
aWR0aEFuZEV4dGVudHMoU2tQYWludCogcGFpbnQsIGhiX2NvZGVwb2ludF90IGNvZGVwb2ludAog
CiBzdGF0aWMgaGJfYm9vbF90IGhhcmZidXp6R2V0R2x5cGgoaGJfZm9udF90KiBoYkZvbnQsIHZv
aWQqIGZvbnREYXRhLCBoYl9jb2RlcG9pbnRfdCB1bmljb2RlLCBoYl9jb2RlcG9pbnRfdCB2YXJp
YXRpb25TZWxlY3RvciwgaGJfY29kZXBvaW50X3QqIGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKIHsK
LSAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KGZvbnREYXRh
KTsKLQotICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNv
ZGluZyk7Ci0gICAgdWludDE2X3QgdGV4dFs0XTsKLSAgICBzaXplX3QgbGVuZ3RoID0gU2tVVEYx
Nl9Gcm9tVW5pY2hhcih1bmljb2RlLCB0ZXh0KTsKLSAgICB1aW50MTZfdCBnbHlwaDE2OwotICAg
IHBhaW50LT50ZXh0VG9HbHlwaHModGV4dCwgbGVuZ3RoLCAmZ2x5cGgxNik7Ci0gICAgKmdseXBo
ID0gZ2x5cGgxNjsKKyAgICBIYXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4oZm9udERhdGEpOworCisgICAgV1RGOjpIYXNoTWFw
PHVpbnQzMl90LCB1aW50MTZfdD46OkFkZFJlc3VsdCByZXN1bHQgPSBoYkZvbnREYXRhLT5tX2ds
eXBoQ2FjaGVGb3JGYWNlQ2FoZUVudHJ5LT5hZGQodW5pY29kZSwgMCk7CisgICAgaWYgKHJlc3Vs
dC5pc05ld0VudHJ5KSB7CisgICAgICAgIFNrUGFpbnQqIHBhaW50ID0gJmhiRm9udERhdGEtPm1f
cGFpbnQ7CisgICAgICAgIHBhaW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjMyX1Rl
eHRFbmNvZGluZyk7CisgICAgICAgIHVpbnQxNl90IGdseXBoMTY7CisgICAgICAgIHBhaW50LT50
ZXh0VG9HbHlwaHMoJnVuaWNvZGUsIHNpemVvZihoYl9jb2RlcG9pbnRfdCksICZnbHlwaDE2KTsK
KyAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQgPSBnbHlwaDE2OworICAgICAgICAqZ2x5
cGggPSBnbHlwaDE2OworICAgIH0KKyAgICAqZ2x5cGggPSByZXN1bHQuaXRlcmF0b3ItPnNlY29u
ZDsKICAgICByZXR1cm4gISEqZ2x5cGg7CiB9CiAKIHN0YXRpYyBoYl9wb3NpdGlvbl90IGhhcmZi
dXp6R2V0R2x5cGhIb3Jpem9udGFsQWR2YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9u
dERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKIHsKLSAgICBTa1Bh
aW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KGZvbnREYXRhKTsKKyAgICBI
YXJmQnV6ekZvbnREYXRhKiBoYkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJmQnV6ekZv
bnREYXRhKj4oZm9udERhdGEpOwogICAgIGhiX3Bvc2l0aW9uX3QgYWR2YW5jZSA9IDA7CiAKLSAg
ICBTa2lhR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMocGFpbnQsIGdseXBoLCAmYWR2YW5jZSwgMCk7
CisgICAgU2tpYUdldEdseXBoV2lkdGhBbmRFeHRlbnRzKCZoYkZvbnREYXRhLT5tX3BhaW50LCBn
bHlwaCwgJmFkdmFuY2UsIDApOwogICAgIHJldHVybiBhZHZhbmNlOwogfQogCkBAIC0xMDcsOSAr
MTE5LDkgQEAgc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdp
bihoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udEQKIAogc3RhdGljIGhiX2Jvb2xfdCBoYXJm
YnV6ekdldEdseXBoRXh0ZW50cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhi
X2NvZGVwb2ludF90IGdseXBoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMsIHZvaWQqIHVz
ZXJEYXRhKQogewotICAgIFNrUGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50
Kj4oZm9udERhdGEpOworICAgIEhhcmZCdXp6Rm9udERhdGEqIGhiRm9udERhdGEgPSByZWludGVy
cHJldF9jYXN0PEhhcmZCdXp6Rm9udERhdGEqPihmb250RGF0YSk7CiAKLSAgICBTa2lhR2V0R2x5
cGhXaWR0aEFuZEV4dGVudHMocGFpbnQsIGdseXBoLCAwLCBleHRlbnRzKTsKKyAgICBTa2lhR2V0
R2x5cGhXaWR0aEFuZEV4dGVudHMoJmhiRm9udERhdGEtPm1fcGFpbnQsIGdseXBoLCAwLCBleHRl
bnRzKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTUxLDEwICsxNjMsMTAgQEAgc3RhdGlj
IGhiX2Jsb2JfdCogaGFyZmJ1enpTa2lhR2V0VGFibGUoaGJfZmFjZV90KiBmYWNlLCBoYl90YWdf
dCB0YWcsIHZvaWQqIHVzZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJfTUVNT1JZX01P
REVfV1JJVEFCTEUsIGJ1ZmZlciwgZmFzdEZyZWUpOwogfQogCi1zdGF0aWMgdm9pZCBkZXN0cm95
UGFpbnQodm9pZCogdXNlckRhdGEpCitzdGF0aWMgdm9pZCBkZXN0cm95SGFyZkJ1enpGb250RGF0
YSh2b2lkKiB1c2VyRGF0YSkKIHsKLSAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8U2tQYWludCo+KHVzZXJEYXRhKTsKLSAgICBkZWxldGUgcGFpbnQ7CisgICAgSGFyZkJ1enpG
b250RGF0YSogaGJGb250RGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFyZkJ1enpGb250RGF0YSo+
KHVzZXJEYXRhKTsKKyAgICBkZWxldGUgaGJGb250RGF0YTsKIH0KIAogaGJfZmFjZV90KiBIYXJm
QnV6ek5HRmFjZTo6Y3JlYXRlRmFjZSgpCkBAIC0xNjYsMTAgKzE3OCwxMCBAQCBoYl9mYWNlX3Qq
IEhhcmZCdXp6TkdGYWNlOjpjcmVhdGVGYWNlKCkKIAogaGJfZm9udF90KiBIYXJmQnV6ek5HRmFj
ZTo6Y3JlYXRlRm9udCgpCiB7CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IG5l
dyBIYXJmQnV6ekZvbnREYXRhKG1fZ2x5cGhDYWNoZUZvckZhY2VDYWhlRW50cnkpOworICAgIG1f
cGxhdGZvcm1EYXRhLT5zZXR1cFBhaW50KCZoYkZvbnREYXRhLT5tX3BhaW50KTsKICAgICBoYl9m
b250X3QqIGZvbnQgPSBoYl9mb250X2NyZWF0ZShtX2ZhY2UpOwotICAgIFNrUGFpbnQqIHBhaW50
ID0gbmV3IFNrUGFpbnQ7Ci0gICAgbV9wbGF0Zm9ybURhdGEtPnNldHVwUGFpbnQocGFpbnQpOwot
ICAgIGhiX2ZvbnRfc2V0X2Z1bmNzKGZvbnQsIGhhcmZidXp6U2tpYUdldEZvbnRGdW5jcygpLCBw
YWludCwgZGVzdHJveVBhaW50KTsKKyAgICBoYl9mb250X3NldF9mdW5jcyhmb250LCBoYXJmYnV6
elNraWFHZXRGb250RnVuY3MoKSwgaGJGb250RGF0YSwgZGVzdHJveUhhcmZCdXp6Rm9udERhdGEp
OwogICAgIGZsb2F0IHNpemUgPSBtX3BsYXRmb3JtRGF0YS0+c2l6ZSgpOwogICAgIGludCBzY2Fs
ZSA9IFNraWFTY2FsYXJUb0hhcmZidXp6UG9zaXRpb24oc2l6ZSk7CiAgICAgaGJfZm9udF9zZXRf
c2NhbGUoZm9udCwgc2NhbGUsIHNjYWxlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApp
bmRleCA5ZTU1ZmM0MTFhNmNmYjdiYzc4ZDI4MDY0ZDc5YzI2YTRmMGM1MTJiLi5mM2ZlNDY3Zjc1
NjIwYzY5ZmEyODA5ZGU4YjNlZTZjMzc2NmNmNDM5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFw
ZXIuY3BwCkBAIC04NywxMCArODcsNiBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1
bjo6YXBwbHlTaGFwZVJlc3VsdChoYl9idWZmZXJfdCogaGFyZmJ1enpCdWZmZXIpCiAgICAgbV9h
ZHZhbmNlcy5yZXNpemUobV9udW1HbHlwaHMpOwogICAgIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4
ZXMucmVzaXplKG1fbnVtR2x5cGhzKTsKICAgICBtX29mZnNldHMucmVzaXplKG1fbnVtR2x5cGhz
KTsKLQotICAgIGhiX2dseXBoX2luZm9fdCogaW5mb3MgPSBoYl9idWZmZXJfZ2V0X2dseXBoX2lu
Zm9zKGhhcmZidXp6QnVmZmVyLCAwKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9u
dW1HbHlwaHM7ICsraSkKLSAgICAgICAgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tpXSA9IGlu
Zm9zW2ldLmNsdXN0ZXI7CiB9CiAKIHZvaWQgSGFyZkJ1enpTaGFwZXI6OkhhcmZCdXp6UnVuOjpz
ZXRHbHlwaEFuZFBvc2l0aW9ucyh1bnNpZ25lZCBpbmRleCwgdWludDE2X3QgZ2x5cGhJZCwgZmxv
YXQgYWR2YW5jZSwgZmxvYXQgb2Zmc2V0WCwgZmxvYXQgb2Zmc2V0WSkKQEAgLTI0MCwyMCArMjM2
LDYgQEAgRmxvYXRQb2ludCBIYXJmQnV6elNoYXBlcjo6YWRqdXN0U3RhcnRQb2ludChjb25zdCBG
bG9hdFBvaW50JiBwb2ludCkKICAgICByZXR1cm4gcG9pbnQgKyBtX3N0YXJ0T2Zmc2V0OwogfQog
Ci1zdGF0aWMgY29uc3QgU2ltcGxlRm9udERhdGEqIGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UoY29uc3QgRm9udCogZm9udCwgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNp
emVfdCBsZW5ndGgpCi17Ci0gICAgVUVycm9yQ29kZSBlcnJvciA9IFVfWkVST19FUlJPUjsKLSAg
ICBWZWN0b3I8VUNoYXIsIDQ+IG5vcm1hbGl6ZWRDaGFyYWN0ZXJzKGxlbmd0aCk7Ci0gICAgaW50
MzJfdCBub3JtYWxpemVkTGVuZ3RoID0gdW5vcm1fbm9ybWFsaXplKGNoYXJhY3RlcnMsIGxlbmd0
aCwgVU5PUk1fTkZDLCBVTk9STV9VTklDT0RFXzNfMiwgJm5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzBd
LCBsZW5ndGgsICZlcnJvcik7Ci0gICAgLy8gU2hvdWxkIGZhbGxiYWNrIGlmIHdlIGhhdmUgYW4g
ZXJyb3Igb3Igbm8gY29tcG9zaXRpb24gb2NjdXJyZWQuCi0gICAgaWYgKFVfRkFJTFVSRShlcnJv
cikgfHwgKHN0YXRpY19jYXN0PHNpemVfdD4obm9ybWFsaXplZExlbmd0aCkgPT0gbGVuZ3RoKSkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgVUNoYXIzMiBub3JtYWxpemVkQ2hhcmFjdGVyOwotICAg
IHNpemVfdCBpbmRleCA9IDA7Ci0gICAgVTE2X05FWFQoJm5vcm1hbGl6ZWRDaGFyYWN0ZXJzWzBd
LCBpbmRleCwgc3RhdGljX2Nhc3Q8c2l6ZV90Pihub3JtYWxpemVkTGVuZ3RoKSwgbm9ybWFsaXpl
ZENoYXJhY3Rlcik7Ci0gICAgcmV0dXJuIGZvbnQtPmdseXBoRGF0YUZvckNoYXJhY3Rlcihub3Jt
YWxpemVkQ2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7Ci19Ci0KIGJvb2wgSGFyZkJ1enpTaGFw
ZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMoKQogewogICAgIGNvbnN0IFVDaGFyKiBub3JtYWxpemVk
QnVmZmVyRW5kID0gbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpICsgbV9ub3JtYWxpemVkQnVmZmVy
TGVuZ3RoOwpAQCAtMjc4LDYgKzI2MCw3IEBAIGJvb2wgSGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RI
YXJmQnV6elJ1bnMoKQogICAgICAgICBmb3IgKGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxlbmd0
aCk7IGl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKTsgaXRlcmF0b3Iu
YWR2YW5jZShjbHVzdGVyTGVuZ3RoKSkgewogICAgICAgICAgICAgaWYgKEZvbnQ6OnRyZWF0QXNa
ZXJvV2lkdGhTcGFjZShjaGFyYWN0ZXIpKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCiAg
ICAgICAgICAgICBpZiAoVV9HRVRfR0NfTUFTSyhjaGFyYWN0ZXIpICYgVV9HQ19NX01BU0spIHsK
ICAgICAgICAgICAgICAgICBpbnQgbWFya0xlbmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAgICAg
ICAgICAgICAgY29uc3QgVUNoYXIqIG1hcmtDaGFyYWN0ZXJzRW5kID0gaXRlcmF0b3IuY2hhcmFj
dGVycygpICsgY2x1c3Rlckxlbmd0aDsKQEAgLTI5MCwxMSArMjczLDEyIEBAIGJvb2wgSGFyZkJ1
enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMoKQogICAgICAgICAgICAgICAgICAgICBtYXJr
TGVuZ3RoICs9IG5leHRDaGFyYWN0ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAgICAgIG1hcmtD
aGFyYWN0ZXJzRW5kICs9IG5leHRDaGFyYWN0ZXJMZW5ndGg7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIG5leHRGb250RGF0YSA9IGZvbnREYXRhRm9yQ29tYmluaW5nQ2hhcmFj
dGVyU2VxdWVuY2UobV9mb250LCBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24sIG1hcmtDaGFyYWN0
ZXJzRW5kIC0gY3VycmVudENoYXJhY3RlclBvc2l0aW9uKTsKLSAgICAgICAgICAgICAgICBpZiAo
bmV4dEZvbnREYXRhKQorCisgICAgICAgICAgICAgICAgaWYgKGN1cnJlbnRGb250RGF0YS0+Y2Fu
UmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2UoY3VycmVudENoYXJhY3RlclBvc2l0aW9u
LCBtYXJrQ2hhcmFjdGVyc0VuZCAtIGN1cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbikpIHsKICAgICAg
ICAgICAgICAgICAgICAgY2x1c3Rlckxlbmd0aCA9IG1hcmtMZW5ndGg7Ci0gICAgICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2ZvbnQtPmdseXBo
RGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG5l
eHRGb250RGF0YSA9IG1fZm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFs
c2UpLmZvbnREYXRhOwogICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgbmV4dEZv
bnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBmYWxzZSku
Zm9udERhdGE7CiAKQEAgLTMwNSw2ICsyODksNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xs
ZWN0SGFyZkJ1enpSdW5zKCkKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGlm
IChuZXh0U2NyaXB0ID09IFVTQ1JJUFRfSU5IRVJJVEVEKQogICAgICAgICAgICAgICAgIG5leHRT
Y3JpcHQgPSBjdXJyZW50U2NyaXB0OworICAgICAgICAgICAgY3VycmVudENoYXJhY3RlclBvc2l0
aW9uID0gaXRlcmF0b3IuY2hhcmFjdGVycygpOwogICAgICAgICB9CiAgICAgICAgIHVuc2lnbmVk
IG51bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4gPSBpdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCkg
LSBzdGFydEluZGV4T2ZDdXJyZW50UnVuOwogICAgICAgICBtX2hhcmZidXp6UnVucy5hcHBlbmQo
SGFyZkJ1enpSdW46OmNyZWF0ZShjdXJyZW50Rm9udERhdGEsIHN0YXJ0SW5kZXhPZkN1cnJlbnRS
dW4sIG51bUNoYXJhY3RlcnNPZkN1cnJlbnRSdW4sIG1fcnVuLmRpcmVjdGlvbigpKSk7CkBAIC0z
NjEsNiArMzQ2LDcgQEAgdm9pZCBIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JI
YXJmQnV6elJ1bihIYXJmQnV6elJ1biogY3VycmVudFJ1biwgaGIKICAgICBoYl9nbHlwaF9wb3Np
dGlvbl90KiBnbHlwaFBvc2l0aW9ucyA9IGhiX2J1ZmZlcl9nZXRfZ2x5cGhfcG9zaXRpb25zKGhh
cmZidXp6QnVmZmVyLCAwKTsKIAogICAgIHVuc2lnbmVkIG51bUdseXBocyA9IGN1cnJlbnRSdW4t
Pm51bUdseXBocygpOworICAgIHVpbnQxNl90KiBnbHlwaFRvQ2hhcmFjdGVySW5kZXhlcyA9IGN1
cnJlbnRSdW4tPmdseXBoVG9DaGFyYWN0ZXJJbmRleGVzKCk7CiAgICAgZmxvYXQgdG90YWxBZHZh
bmNlID0gMDsKIAogICAgIC8vIEhhcmZCdXp6IHJldHVybnMgdGhlIHNoYXBpbmcgcmVzdWx0IGlu
IHZpc3VhbCBvcmRlci4gV2UgbmVlZCBub3QgdG8gZmxpcCBmb3IgUlRMLgpAQCAtMzc0LDYgKzM2
MCw5IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpS
dW4oSGFyZkJ1enpSdW4qIGN1cnJlbnRSdW4sIGhiCiAgICAgICAgIHVuc2lnbmVkIGN1cnJlbnRD
aGFyYWN0ZXJJbmRleCA9IGN1cnJlbnRSdW4tPnN0YXJ0SW5kZXgoKSArIGdseXBoSW5mb3NbaV0u
Y2x1c3RlcjsKICAgICAgICAgYm9vbCBpc0NsdXN0ZXJFbmQgPSBydW5FbmQgfHwgZ2x5cGhJbmZv
c1tpXS5jbHVzdGVyICE9IGdseXBoSW5mb3NbaSArIDFdLmNsdXN0ZXI7CiAgICAgICAgIGZsb2F0
IHNwYWNpbmcgPSAwOworCisgICAgICAgIGdseXBoVG9DaGFyYWN0ZXJJbmRleGVzW2ldID0gZ2x5
cGhJbmZvc1tpXS5jbHVzdGVyOworCiAgICAgICAgIGlmIChpc0NsdXN0ZXJFbmQgJiYgIUZvbnQ6
OnRyZWF0QXNaZXJvV2lkdGhTcGFjZShtX25vcm1hbGl6ZWRCdWZmZXJbY3VycmVudENoYXJhY3Rl
ckluZGV4XSkpCiAgICAgICAgICAgICBzcGFjaW5nICs9IG1fbGV0dGVyU3BhY2luZzsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250
RGF0YVNraWEuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1w
bGVGb250RGF0YVNraWEuY3BwCmluZGV4IDMwMjdlMDU3MmI4NjVkNDE0N2Q4NTU2ZDRlNGEyZWY3
NDk5MTI3YTUuLjM1NmFkMDdhODM4NDRlN2FlNzBmOWMyYTZhNWIyYTU5MTVkMDY4NmEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERh
dGFTa2lhLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Np
bXBsZUZvbnREYXRhU2tpYS5jcHAKQEAgLTQyLDYgKzQyLDggQEAKICNpbmNsdWRlICJTa1R5cGVm
YWNlLmgiCiAjaW5jbHVkZSAiU2tUeXBlcy5oIgogI2luY2x1ZGUgIlZETVhQYXJzZXIuaCIKKyNp
bmNsdWRlIDx1bmljb2RlL25vcm1senIuaD4KKyNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2Rl
Lmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMjUwLDQgKzI1MiwzMiBAQCBmbG9hdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBoKSBjb25zdAog
ICAgIHJldHVybiBTa1NjYWxhclRvRmxvYXQod2lkdGgpOwogfQogCisjaWYgVVNFKEhBUkZCVVpa
X05HKQorYm9vbCBTaW1wbGVGb250RGF0YTo6Y2FuUmVuZGVyQ29tYmluaW5nQ2hhcmFjdGVyU2Vx
dWVuY2UoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgpIGNvbnN0Cit7Cisg
ICAgaWYgKCFtX2NvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlU3VwcG9ydCkKKyAgICAgICAgbV9j
b21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQgPSBhZG9wdFB0cihuZXcgSGFzaE1hcDxT
dHJpbmcsIGJvb2w+KTsKKworICAgIFdURjo6SGFzaE1hcDxTdHJpbmcsIGJvb2w+OjpBZGRSZXN1
bHQgYWRkUmVzdWx0ID0gbV9jb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQtPmFkZChT
dHJpbmcoY2hhcmFjdGVycywgbGVuZ3RoKSwgZmFsc2UpOworICAgIGlmICghYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKKwor
ICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7CisgICAgVmVjdG9yPFVDaGFyLCA0
PiBub3JtYWxpemVkQ2hhcmFjdGVycyhsZW5ndGgpOworICAgIGludDMyX3Qgbm9ybWFsaXplZExl
bmd0aCA9IHVub3JtX25vcm1hbGl6ZShjaGFyYWN0ZXJzLCBsZW5ndGgsIFVOT1JNX05GQywgVU5P
Uk1fVU5JQ09ERV8zXzIsICZub3JtYWxpemVkQ2hhcmFjdGVyc1swXSwgbGVuZ3RoLCAmZXJyb3Ip
OworICAgIC8vIENhbid0IHJlbmRlciBpZiB3ZSBoYXZlIGFuIGVycm9yIG9yIG5vIGNvbXBvc2l0
aW9uIG9jY3VycmVkLgorICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpIHx8IChzdGF0aWNfY2FzdDxz
aXplX3Q+KG5vcm1hbGl6ZWRMZW5ndGgpID09IGxlbmd0aCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIFNrUGFpbnQgcGFpbnQ7CisgICAgbV9wbGF0Zm9ybURhdGEuc2V0dXBQYWludCgm
cGFpbnQpOworICAgIHBhaW50LnNldFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4dEVu
Y29kaW5nKTsKKyAgICBpZiAocGFpbnQudGV4dFRvR2x5cGhzKCZub3JtYWxpemVkQ2hhcmFjdGVy
c1swXSwgbm9ybWFsaXplZExlbmd0aCAqIDIsIDApKSB7CisgICAgICAgIGFkZFJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBmYWxzZTsKK30KKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166769</attachid>
            <date>2012-10-02 16:05:27 -0700</date>
            <delta_ts>2013-04-03 09:08:45 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-97993-20121003080439.patch</filename>
            <type>text/plain</type>
            <size>20666</size>
            <attacher name="Kenichi Ishibashi">bashi</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMjIyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYTA1OGRlZDcxNTUxMDJi
ODk1MjBlM2M1ZDFjOTg4ZGM0YTljZTRiYy4uZjJhYmU1YzhkN2E2NDc5NTE4NTdhNWQwNzVmNTI4
ZmUzMjQzN2JiYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDEyLTEwLTAyICBLZW5p
Y2hpIElzaGliYXNoaSAgPGJhc2hpQGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW1d
IEludHJvZHVjZSBjYWNoZXMgZm9yIEhhcmZCdXp6U2hhcGVyCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05Nzk5MworCisgICAgICAgIFJldmlld2VkIGJ5
IFRvbnkgQ2hhbmcuCisKKyAgICAgICAgLSBJbXBsZW1lbnQgY2FuUmVuZGVyQ29tYmluaW5nQ2hh
cmFjdGVyU2VxdWVuY2UoKSBmb3IgcG9ydHMgd2hpY2ggdXNlCisgICAgICAgIEhhcmZCdXp6U2hh
cGVyLiBUaGlzIGZ1bmN0aW9uIGNhY2hlcyB0aGUgcmVzdWx0IGFuZCB3aWxsIGltcHJvdmUgdGhl
CisgICAgICAgIHBlcmZvcm1hbmNlIG9mIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpS
dW5zLgorICAgICAgICAtIEFkZCBhIEhhc2hNYXAgdG8gSGFyZkJ1enpOR0ZhY2UuIEl0IGlzIHVz
ZWQgYXMgYSBjYWNoZSB0aGF0IGhvbGRzCisgICAgICAgIGdseXBoIGluZGV4ZXMgb2YgY29kZXBv
aW50cy4gSXQgcmVkdWNlcyB0aGUgbnVtYmVyIG9mCisgICAgICAgIFNrUGFpbnQ6OnRleHRUb0ds
eXBocygpIGNhbGxzLgorCisgICAgICAgIFRoaXMgcGF0Y2ggbWFrZXMgdGhlIGludGwyIHBhZ2Ug
Y3ljbGVyIDQuNCUgZmFzdGVyIG9uIG15IG1hY2hpbmUuCisKKyAgICAgICAgTm8gbmV3IHRlc3Rz
LiBObyBjaGFuZ2VzIGluIGJlaGF2aW9yLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
U2ltcGxlRm9udERhdGEuaDoKKyAgICAgICAgKFNpbXBsZUZvbnREYXRhKTogRW5hYmxlZCBjYW5S
ZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSgpIGlmIFVTRShIQVJGQlVaWl9ORykgaXMg
ZW5hYmxlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9TaW1wbGVGb250
RGF0YUZyZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6
U2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKTogQWRk
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0Zh
Y2UuY3BwOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChGYWNlQ2FjaGVFbnRyeSk6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpOR0ZhY2U6OkhhcmZCdXp6TkdGYWNlKToK
KyAgICAgICAgTG9va3VwIHRoZSBjYWNoZSBlbnRyeSBpbiBoYXJmQnV6ekZhY2VDYWNoZS4gQ3Jl
YXRlIHRoZSBlbnRyeSBpZiB0aGVyZSBpcyBubyBlbnRyeSBpbiB0aGUgY2FjaGUuCisgICAgICAg
IEluY3JlbWVudCB0aGUgcmVmIGNvdW50IG9mIHRoZSBlbnRyeSBhbmQgc2V0IGNhY2hlIGVudHJ5
IHZhbHVlcyB0byBtZW1iZXIgdmFyaWFibGVzLgorICAgICAgICAoV2ViQ29yZTo6SGFyZkJ1enpO
R0ZhY2U6On5IYXJmQnV6ek5HRmFjZSk6CisgICAgICAgIERlY3JlbWVudCB0aGUgcmVmIGNvdW50
IG9mIHRoZSBjYWNoZSBlbnRyeS4gUmVtb3ZlIHRoZSBlbnRyeSBpZiBubyBvbmUgcmVmZXJzIHRo
ZSBjYWNoZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
ek5HRmFjZS5oOgorICAgICAgICAoSGFyZkJ1enpOR0ZhY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5jcHA6CisgICAgICAgIChI
YXJmQnV6ekZvbnREYXRhKTogQWRkZWQuIFVzZWQgYXMgfHVzZXJEYXRhfCBvZiBoYXJmYnV6eiBj
YWxsYmFjayBmdW5jdGlvbnMuCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpoYXJmYnV6
ekdldEdseXBoKToKKyAgICAgICAgTG9vayB1cCB0aGUgZ2x5cGhDaGFjaGUgZmlyc3QuIElmIHRo
ZSBjYWNoZSBlbnRyeSBkb2Vzbid0IGV4aXN0LCBjYWxsCisgICAgICAgIFNrUGFpbnQ6OnRleHRU
b0dseXBocygpIHRvIGdldCBnbHlwaCBpbmRleCBhbmQgc3RvcmUgaXQgdG8gdGhlIGNhY2hlLgor
ICAgICAgICAoV2ViQ29yZTo6aGFyZmJ1enpHZXRHbHlwaEhvcml6b250YWxBZHZhbmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OmhhcmZidXp6R2V0R2x5cGhFeHRlbnRzKToKKyAgICAgICAgKFdlYkNv
cmU6OmRlc3Ryb3lIYXJmQnV6ekZvbnREYXRhKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpI
YXJmQnV6ek5HRmFjZTo6Y3JlYXRlRm9udCk6CisgICAgICAgIENyZWF0ZSBIYXJmQnV6ekZvbnRE
YXRhIGFuZCBwYXNzIGl0IHRvIGhhcmZidXp6LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhhcmZC
dXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6YXBwbHlTaGFwZVJlc3VsdCk6CisgICAgICAgIERvbid0
IGluaXRpYWxpemUgbV9nbHlwaFRvQ2hhcmFjdGVySW5kZXhlcyBoZXJlLgorICAgICAgICAoV2Vi
Q29yZTo6SGFyZkJ1enpTaGFwZXI6OmNvbGxlY3RIYXJmQnV6elJ1bnMpOgorICAgICAgICBVc2Ug
U2ltcGxlRm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKCkgaW5z
dGVhZCBvZgorICAgICAgICBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKCku
CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNoYXBlcjo6c2V0R2x5cGhQb3NpdGlvbnNGb3JI
YXJmQnV6elJ1bik6CisgICAgICAgIFNldCBnbHlwaFRvQ2hhcmFjdGVySW5kZXhlcyBvZiB0aGUg
Y3VycmVudCBIYXJmQnV6elJ1bi4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL1Np
bXBsZUZvbnREYXRhU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZSk6
IEFkZGVkLgorCiAyMDEyLTEwLTAyICBPamFuIFZhZmFpICA8b2phbkBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgaXNNYWluVGhyZWFkKCkgc2hvdWxkIG9ubHkgYmUgY2FsbGVkIGJ5IE5vRXZlbnRE
aXNwYXRjaEFzc2VydGlvbiBpbiBkZWJ1ZyBidWlsZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NpbXBsZUZvbnREYXRhLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9TaW1wbGVGb250RGF0YS5oCmluZGV4IGNiNmZiODUzOTczZjQ0ZDE0
OWZlMmQyNWIzNGI5ZjYzMDQwZGVlOWEuLjUzNDA5YzM2NjRjMGE4YzA4NzVhY2YwNWVjY2E4ODFm
MGVjOWRiNmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1Np
bXBsZUZvbnREYXRhLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU2lt
cGxlRm9udERhdGEuaApAQCAtMTg0LDYgKzE4NCw5IEBAIHB1YmxpYzoKIAogI2lmIFBMQVRGT1JN
KE1BQykgfHwgKFBMQVRGT1JNKENIUk9NSVVNKSAmJiBPUyhEQVJXSU4pKSB8fCAoUExBVEZPUk0o
V1gpICYmIE9TKERBUldJTikpCiAgICAgQ0ZEaWN0aW9uYXJ5UmVmIGdldENGU3RyaW5nQXR0cmli
dXRlcyhUeXBlc2V0dGluZ0ZlYXR1cmVzLCBGb250T3JpZW50YXRpb24pIGNvbnN0OworI2VuZGlm
CisKKyNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lO
KSkgfHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKSB8fCBVU0UoSEFSRkJVWlpfTkcpCiAg
ICAgYm9vbCBjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShjb25zdCBVQ2hhcios
IHNpemVfdCkgY29uc3Q7CiAjZW5kaWYKIApAQCAtMjg4LDYgKzI5MSw5IEBAIHByaXZhdGU6CiAK
ICNpZiBQTEFURk9STShNQUMpIHx8IChQTEFURk9STShDSFJPTUlVTSkgJiYgT1MoREFSV0lOKSkg
fHwgKFBMQVRGT1JNKFdYKSAmJiBPUyhEQVJXSU4pKQogICAgIG11dGFibGUgSGFzaE1hcDx1bnNp
Z25lZCwgUmV0YWluUHRyPENGRGljdGlvbmFyeVJlZj4gPiBtX0NGU3RyaW5nQXR0cmlidXRlczsK
KyNlbmRpZgorCisjaWYgUExBVEZPUk0oTUFDKSB8fCAoUExBVEZPUk0oQ0hST01JVU0pICYmIE9T
KERBUldJTikpIHx8IChQTEFURk9STShXWCkgJiYgT1MoREFSV0lOKSkgfHwgVVNFKEhBUkZCVVpa
X05HKQogICAgIG11dGFibGUgT3duUHRyPEhhc2hNYXA8U3RyaW5nLCBib29sPiA+IG1fY29tYmlu
aW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0OwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL1NpbXBsZUZvbnREYXRhRnJlZVR5
cGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxl
Rm9udERhdGFGcmVlVHlwZS5jcHAKaW5kZXggZDFhMWFjN2I2MzQwNWRjODg4ZGVkYmUxYmQ3ZjUy
NDgwNzYzYzA0Zi4uZWQ5NzVjNzA1NzExMzYyMGM1NjNiZjJmNGYyMmQ0YWM5MWJkODI1ZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvU2ltcGxl
Rm9udERhdGFGcmVlVHlwZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZnJlZXR5cGUvU2ltcGxlRm9udERhdGFGcmVlVHlwZS5jcHAKQEAgLTE3MSw0ICsxNzEsMTEg
QEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlw
aCkgY29uc3QKICAgICByZXR1cm4gdzsgICAgCiB9CiAKKyNpZiBVU0UoSEFSRkJVWlpfTkcpCiti
b29sIFNpbXBsZUZvbnREYXRhOjpjYW5SZW5kZXJDb21iaW5pbmdDaGFyYWN0ZXJTZXF1ZW5jZShj
b25zdCBVQ2hhciosIHNpemVfdCkgY29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisjZW5k
aWYKKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2UuY3BwCmluZGV4IDdkZDA0OGIzYjQzZmY1
OTM4OGVhZjRlNzIxMGVlMmNjYmQ1NTQyMjMuLjFlNTRhZTM4ZDhjODA0OGMyYmZjNjRmN2ZkOTZl
YmIzYWI4MGZlYTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6ek5HRmFjZS5jcHAKQEAgLTMzLDcgKzMz
LDYgQEAKIAogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJoYi5oIgot
I2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNDEs
OCArNDAsMzIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogLy8gV2ViS2l0J3MgZm9udCBvYmplY3Rz
LCB3ZSBhbHNvIG5lZWQgYWRkaXRpb25hbCBjYWNoaW5nIGxheWVyIGZvciBIYXJmQnV6egogLy8g
dG8gcmVkdWNlIHRoZSBtZW1vcnkgY29uc3VtcHRpb24gYmVjYXVzZSBoYl9mYWNlX3Qgc2hvdWxk
IGJlIGFzc29jaWF0ZWQgd2l0aAogLy8gdW5kZXJsaW5nIGZvbnQgZGF0YSAoZS5nLiBDVEZvbnRS
ZWYsIEZURmFjZSkuCi10eXBlZGVmIHBhaXI8aGJfZmFjZV90KiwgdW5zaWduZWQ+IEZhY2VDYWNo
ZUVudHJ5OwotdHlwZWRlZiBIYXNoTWFwPHVpbnQ2NF90LCBGYWNlQ2FjaGVFbnRyeSwgV1RGOjpJ
bnRIYXNoPHVpbnQ2NF90PiwgV1RGOjpVbnNpZ25lZFdpdGhaZXJvS2V5SGFzaFRyYWl0czx1aW50
NjRfdD4gPiBIYXJmQnV6ek5HRmFjZUNhY2hlOworCitjbGFzcyBGYWNlQ2FjaGVFbnRyeSA6IHB1
YmxpYyBSZWZDb3VudGVkPEZhY2VDYWNoZUVudHJ5PiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBh
c3NSZWZQdHI8RmFjZUNhY2hlRW50cnk+IGNyZWF0ZShoYl9mYWNlX3QqIGZhY2UpCisgICAgewor
ICAgICAgICBBU1NFUlQoZmFjZSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRmFjZUNh
Y2hlRW50cnkoZmFjZSkpOworICAgIH0KKyAgICB+RmFjZUNhY2hlRW50cnkoKQorICAgIHsKKyAg
ICAgICAgaGJfZmFjZV9kZXN0cm95KG1fZmFjZSk7CisgICAgfQorCisgICAgaGJfZmFjZV90KiBm
YWNlKCkgeyByZXR1cm4gbV9mYWNlOyB9CisgICAgSGFzaE1hcDx1aW50MzJfdCwgdWludDE2X3Q+
KiBnbHlwaENhY2hlKCkgeyByZXR1cm4gJm1fZ2x5cGhDYWNoZTsgfQorCitwcml2YXRlOgorICAg
IGV4cGxpY2l0IEZhY2VDYWNoZUVudHJ5KGhiX2ZhY2VfdCogZmFjZSkKKyAgICAgICAgOiBtX2Zh
Y2UoZmFjZSkKKyAgICB7IH0KKworICAgIGhiX2ZhY2VfdCogbV9mYWNlOworICAgIEhhc2hNYXA8
dWludDMyX3QsIHVpbnQxNl90PiBtX2dseXBoQ2FjaGU7Cit9OworCit0eXBlZGVmIEhhc2hNYXA8
dWludDY0X3QsIFJlZlB0cjxGYWNlQ2FjaGVFbnRyeT4sIFdURjo6SW50SGFzaDx1aW50NjRfdD4s
IFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dWludDY0X3Q+ID4gSGFyZkJ1enpO
R0ZhY2VDYWNoZTsKIAogc3RhdGljIEhhcmZCdXp6TkdGYWNlQ2FjaGUqIGhhcmZidXp6RmFjZUNh
Y2hlKCkKIHsKQEAgLTU0LDI3ICs3NywyMiBAQCBIYXJmQnV6ek5HRmFjZTo6SGFyZkJ1enpOR0Zh
Y2UoRm9udFBsYXRmb3JtRGF0YSogcGxhdGZvcm1EYXRhLCB1aW50NjRfdCB1bmlxdWVJRAogICAg
IDogbV9wbGF0Zm9ybURhdGEocGxhdGZvcm1EYXRhKQogICAgICwgbV91bmlxdWVJRCh1bmlxdWVJ
RCkKIHsKLSAgICBIYXJmQnV6ek5HRmFjZUNhY2hlOjppdGVyYXRvciByZXN1bHQgPSBoYXJmYnV6
ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5pcXVlSUQpOwotICAgIGlmIChyZXN1bHQgPT0gaGFyZmJ1
enpGYWNlQ2FjaGUoKS0+ZW5kKCkpIHsKLSAgICAgICAgbV9mYWNlID0gY3JlYXRlRmFjZSgpOwot
ICAgICAgICBBU1NFUlQobV9mYWNlKTsKLSAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+c2V0
KG1fdW5pcXVlSUQsIEZhY2VDYWNoZUVudHJ5KG1fZmFjZSwgMSkpOwotICAgIH0gZWxzZSB7Ci0g
ICAgICAgICsrKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCk7Ci0gICAgICAgIG1fZmFjZSA9
IHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0OwotICAgIH0KKyAgICBIYXJmQnV6ek5HRmFjZUNh
Y2hlOjpBZGRSZXN1bHQgcmVzdWx0ID0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+YWRkKG1fdW5pcXVl
SUQsIDApOworICAgIGlmIChyZXN1bHQuaXNOZXdFbnRyeSkKKyAgICAgICAgcmVzdWx0Lml0ZXJh
dG9yLT5zZWNvbmQgPSBGYWNlQ2FjaGVFbnRyeTo6Y3JlYXRlKGNyZWF0ZUZhY2UoKSk7CisgICAg
cmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQtPnJlZigpOworICAgIG1fZmFjZSA9IHJlc3VsdC5pdGVy
YXRvci0+c2Vjb25kLT5mYWNlKCk7CisgICAgbV9nbHlwaENhY2hlRm9yRmFjZUNhY2hlRW50cnkg
PSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZC0+Z2x5cGhDYWNoZSgpOwogfQogCiBIYXJmQnV6ek5H
RmFjZTo6fkhhcmZCdXp6TkdGYWNlKCkKIHsKICAgICBIYXJmQnV6ek5HRmFjZUNhY2hlOjppdGVy
YXRvciByZXN1bHQgPSBoYXJmYnV6ekZhY2VDYWNoZSgpLT5maW5kKG1fdW5pcXVlSUQpOwogICAg
IEFTU0VSVChyZXN1bHQgIT0gaGFyZmJ1enpGYWNlQ2FjaGUoKS0+ZW5kKCkpOwotICAgIEFTU0VS
VChyZXN1bHQuZ2V0KCktPnNlY29uZC5zZWNvbmQgPiAwKTsKLSAgICAtLShyZXN1bHQuZ2V0KCkt
PnNlY29uZC5zZWNvbmQpOwotICAgIGlmICghKHJlc3VsdC5nZXQoKS0+c2Vjb25kLnNlY29uZCkp
IHsKLSAgICAgICAgaGJfZmFjZV9kZXN0cm95KHJlc3VsdC5nZXQoKS0+c2Vjb25kLmZpcnN0KTsK
KyAgICBBU1NFUlQocmVzdWx0LmdldCgpLT5zZWNvbmQtPnJlZkNvdW50KCkgPiAxKTsKKyAgICBy
ZXN1bHQuZ2V0KCktPnNlY29uZC0+ZGVyZWYoKTsKKyAgICBpZiAocmVzdWx0LmdldCgpLT5zZWNv
bmQtPnJlZkNvdW50KCkgPT0gMSkKICAgICAgICAgaGFyZmJ1enpGYWNlQ2FjaGUoKS0+cmVtb3Zl
KG1fdW5pcXVlSUQpOwotICAgIH0KIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpOR0ZhY2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25n
L0hhcmZCdXp6TkdGYWNlLmgKaW5kZXggY2JjOGY4ZWQ0ZjM1OWQ1NzU5NTVhZDk1YjM2N2Y5OWFk
MzYwZjhhYS4uYmNiMGI4ZjRjYzVhMmUyYmJjMjhlYjM0ZmNkODg2YzcxYmY1OGEyZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1
enpOR0ZhY2UuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6
ei9uZy9IYXJmQnV6ek5HRmFjZS5oCkBAIC0zMyw2ICszMyw3IEBACiAKICNpbmNsdWRlIDxoYi5o
PgogCisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5o
PgogI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgpA
QCAtNTksNiArNjAsNyBAQCBwcml2YXRlOgogICAgIEZvbnRQbGF0Zm9ybURhdGEqIG1fcGxhdGZv
cm1EYXRhOwogICAgIHVpbnQ2NF90IG1fdW5pcXVlSUQ7CiAgICAgaGJfZmFjZV90KiBtX2ZhY2U7
CisgICAgV1RGOjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4qIG1fZ2x5cGhDYWNoZUZvckZh
Y2VDYWNoZUVudHJ5OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6TkdGYWNlU2tpYS5j
cHAKaW5kZXggNTNhY2IyOTJjZGJmMDk4OGM0MDQwNDRlMTE5MDhmODIxYmM5NzgwNC4uNWY5YzNm
YmU4ZGEwNmFkNDQ3YWUzZDg0YWM2MjI1NGMyYWZlOTVkMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFyZkJ1enpOR0ZhY2VTa2lhLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJm
QnV6ek5HRmFjZVNraWEuY3BwCkBAIC00MywxMiArNDMsMjEgQEAKICNpbmNsdWRlICJTa1V0aWxz
LmgiCiAKICNpbmNsdWRlICJoYi5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAogLy8gT3VyIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjYWxsYmFja3Mg
d2hpY2ggSGFyZmJ1enogcmVxdWlyZXMgYnkgdXNpbmcgU2tpYQogLy8gY2FsbHMuIFNlZSB0aGUg
SGFyZmJ1enogc291cmNlIGZvciByZWZlcmVuY2VzIGFib3V0IHdoYXQgdGhlc2UgY2FsbGJhY2tz
IGRvLgogCitzdHJ1Y3QgSGFyZkJ1enpGb250RGF0YSB7CisgICAgSGFyZkJ1enpGb250RGF0YShX
VEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90PiogZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVu
dHJ5KQorICAgICAgICA6IG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5KGdseXBoQ2FjaGVG
b3JGYWNlQ2FjaGVFbnRyeSkKKyAgICB7IH0KKyAgICBTa1BhaW50IG1fcGFpbnQ7CisgICAgV1RG
OjpIYXNoTWFwPHVpbnQzMl90LCB1aW50MTZfdD4qIG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVu
dHJ5OworfTsKKwogc3RhdGljIGhiX3Bvc2l0aW9uX3QgU2tpYVNjYWxhclRvSGFyZmJ1enpQb3Np
dGlvbihTa1NjYWxhciB2YWx1ZSkKIHsKICAgICByZXR1cm4gU2tTY2FsYXJUb0ZpeGVkKHZhbHVl
KTsKQEAgLTU2LDggKzY1LDcgQEAgc3RhdGljIGhiX3Bvc2l0aW9uX3QgU2tpYVNjYWxhclRvSGFy
ZmJ1enpQb3NpdGlvbihTa1NjYWxhciB2YWx1ZSkKIAogc3RhdGljIHZvaWQgU2tpYUdldEdseXBo
V2lkdGhBbmRFeHRlbnRzKFNrUGFpbnQqIHBhaW50LCBoYl9jb2RlcG9pbnRfdCBjb2RlcG9pbnQs
IGhiX3Bvc2l0aW9uX3QqIHdpZHRoLCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMpCiB7Ci0g
ICAgaWYgKGNvZGVwb2ludCA+IDB4RkZGRikKLSAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChj
b2RlcG9pbnQgPD0gMHhGRkZGKTsKICAgICBwYWludC0+c2V0VGV4dEVuY29kaW5nKFNrUGFpbnQ6
OmtHbHlwaElEX1RleHRFbmNvZGluZyk7CiAKICAgICBTa1NjYWxhciBza1dpZHRoOwpAQCAtNzgs
MjMgKzg2LDI3IEBAIHN0YXRpYyB2b2lkIFNraWFHZXRHbHlwaFdpZHRoQW5kRXh0ZW50cyhTa1Bh
aW50KiBwYWludCwgaGJfY29kZXBvaW50X3QgY29kZXBvaW50CiAKIHN0YXRpYyBoYl9ib29sX3Qg
aGFyZmJ1enpHZXRHbHlwaChoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2Nv
ZGVwb2ludF90IHVuaWNvZGUsIGhiX2NvZGVwb2ludF90IHZhcmlhdGlvblNlbGVjdG9yLCBoYl9j
b2RlcG9pbnRfdCogZ2x5cGgsIHZvaWQqIHVzZXJEYXRhKQogewotICAgIFNrUGFpbnQqIHBhaW50
ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4oZm9udERhdGEpOwotCi0gICAgcGFpbnQtPnNl
dFRleHRFbmNvZGluZyhTa1BhaW50OjprVVRGMTZfVGV4dEVuY29kaW5nKTsKLSAgICB1aW50MTZf
dCB0ZXh0WzRdOwotICAgIHNpemVfdCBsZW5ndGggPSBTa1VURjE2X0Zyb21VbmljaGFyKHVuaWNv
ZGUsIHRleHQpOwotICAgIHVpbnQxNl90IGdseXBoMTY7Ci0gICAgcGFpbnQtPnRleHRUb0dseXBo
cyh0ZXh0LCBsZW5ndGgsICZnbHlwaDE2KTsKLSAgICAqZ2x5cGggPSBnbHlwaDE2OworICAgIEhh
cmZCdXp6Rm9udERhdGEqIGhiRm9udERhdGEgPSByZWludGVycHJldF9jYXN0PEhhcmZCdXp6Rm9u
dERhdGEqPihmb250RGF0YSk7CisKKyAgICBXVEY6Okhhc2hNYXA8dWludDMyX3QsIHVpbnQxNl90
Pjo6QWRkUmVzdWx0IHJlc3VsdCA9IGhiRm9udERhdGEtPm1fZ2x5cGhDYWNoZUZvckZhY2VDYWNo
ZUVudHJ5LT5hZGQodW5pY29kZSwgMCk7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KSB7Cisg
ICAgICAgIFNrUGFpbnQqIHBhaW50ID0gJmhiRm9udERhdGEtPm1fcGFpbnQ7CisgICAgICAgIHBh
aW50LT5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjMyX1RleHRFbmNvZGluZyk7CisgICAg
ICAgIHVpbnQxNl90IGdseXBoMTY7CisgICAgICAgIHBhaW50LT50ZXh0VG9HbHlwaHMoJnVuaWNv
ZGUsIHNpemVvZihoYl9jb2RlcG9pbnRfdCksICZnbHlwaDE2KTsKKyAgICAgICAgcmVzdWx0Lml0
ZXJhdG9yLT5zZWNvbmQgPSBnbHlwaDE2OworICAgICAgICAqZ2x5cGggPSBnbHlwaDE2OworICAg
IH0KKyAgICAqZ2x5cGggPSByZXN1bHQuaXRlcmF0b3ItPnNlY29uZDsKICAgICByZXR1cm4gISEq
Z2x5cGg7CiB9CiAKIHN0YXRpYyBoYl9wb3NpdGlvbl90IGhhcmZidXp6R2V0R2x5cGhIb3Jpem9u
dGFsQWR2YW5jZShoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2lu
dF90IGdseXBoLCB2b2lkKiB1c2VyRGF0YSkKIHsKLSAgICBTa1BhaW50KiBwYWludCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KGZvbnREYXRhKTsKKyAgICBIYXJmQnV6ekZvbnREYXRhKiBo
YkZvbnREYXRhID0gcmVpbnRlcnByZXRfY2FzdDxIYXJmQnV6ekZvbnREYXRhKj4oZm9udERhdGEp
OwogICAgIGhiX3Bvc2l0aW9uX3QgYWR2YW5jZSA9IDA7CiAKLSAgICBTa2lhR2V0R2x5cGhXaWR0
aEFuZEV4dGVudHMocGFpbnQsIGdseXBoLCAmYWR2YW5jZSwgMCk7CisgICAgU2tpYUdldEdseXBo
V2lkdGhBbmRFeHRlbnRzKCZoYkZvbnREYXRhLT5tX3BhaW50LCBnbHlwaCwgJmFkdmFuY2UsIDAp
OwogICAgIHJldHVybiBhZHZhbmNlOwogfQogCkBAIC0xMDcsOSArMTE5LDkgQEAgc3RhdGljIGhi
X2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoSG9yaXpvbnRhbE9yaWdpbihoYl9mb250X3QqIGhiRm9u
dCwgdm9pZCogZm9udEQKIAogc3RhdGljIGhiX2Jvb2xfdCBoYXJmYnV6ekdldEdseXBoRXh0ZW50
cyhoYl9mb250X3QqIGhiRm9udCwgdm9pZCogZm9udERhdGEsIGhiX2NvZGVwb2ludF90IGdseXBo
LCBoYl9nbHlwaF9leHRlbnRzX3QqIGV4dGVudHMsIHZvaWQqIHVzZXJEYXRhKQogewotICAgIFNr
UGFpbnQqIHBhaW50ID0gcmVpbnRlcnByZXRfY2FzdDxTa1BhaW50Kj4oZm9udERhdGEpOworICAg
IEhhcmZCdXp6Rm9udERhdGEqIGhiRm9udERhdGEgPSByZWludGVycHJldF9jYXN0PEhhcmZCdXp6
Rm9udERhdGEqPihmb250RGF0YSk7CiAKLSAgICBTa2lhR2V0R2x5cGhXaWR0aEFuZEV4dGVudHMo
cGFpbnQsIGdseXBoLCAwLCBleHRlbnRzKTsKKyAgICBTa2lhR2V0R2x5cGhXaWR0aEFuZEV4dGVu
dHMoJmhiRm9udERhdGEtPm1fcGFpbnQsIGdseXBoLCAwLCBleHRlbnRzKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTUxLDEwICsxNjMsMTAgQEAgc3RhdGljIGhiX2Jsb2JfdCogaGFyZmJ1
enpTa2lhR2V0VGFibGUoaGJfZmFjZV90KiBmYWNlLCBoYl90YWdfdCB0YWcsIHZvaWQqIHVzZXIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSEJfTUVNT1JZX01PREVfV1JJVEFCTEUsIGJ1ZmZl
ciwgZmFzdEZyZWUpOwogfQogCi1zdGF0aWMgdm9pZCBkZXN0cm95UGFpbnQodm9pZCogdXNlckRh
dGEpCitzdGF0aWMgdm9pZCBkZXN0cm95SGFyZkJ1enpGb250RGF0YSh2b2lkKiB1c2VyRGF0YSkK
IHsKLSAgICBTa1BhaW50KiBwYWludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8U2tQYWludCo+KHVzZXJE
YXRhKTsKLSAgICBkZWxldGUgcGFpbnQ7CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8SGFyZkJ1enpGb250RGF0YSo+KHVzZXJEYXRhKTsKKyAgICBk
ZWxldGUgaGJGb250RGF0YTsKIH0KIAogaGJfZmFjZV90KiBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRl
RmFjZSgpCkBAIC0xNjYsMTAgKzE3OCwxMCBAQCBoYl9mYWNlX3QqIEhhcmZCdXp6TkdGYWNlOjpj
cmVhdGVGYWNlKCkKIAogaGJfZm9udF90KiBIYXJmQnV6ek5HRmFjZTo6Y3JlYXRlRm9udCgpCiB7
CisgICAgSGFyZkJ1enpGb250RGF0YSogaGJGb250RGF0YSA9IG5ldyBIYXJmQnV6ekZvbnREYXRh
KG1fZ2x5cGhDYWNoZUZvckZhY2VDYWNoZUVudHJ5KTsKKyAgICBtX3BsYXRmb3JtRGF0YS0+c2V0
dXBQYWludCgmaGJGb250RGF0YS0+bV9wYWludCk7CiAgICAgaGJfZm9udF90KiBmb250ID0gaGJf
Zm9udF9jcmVhdGUobV9mYWNlKTsKLSAgICBTa1BhaW50KiBwYWludCA9IG5ldyBTa1BhaW50Owot
ICAgIG1fcGxhdGZvcm1EYXRhLT5zZXR1cFBhaW50KHBhaW50KTsKLSAgICBoYl9mb250X3NldF9m
dW5jcyhmb250LCBoYXJmYnV6elNraWFHZXRGb250RnVuY3MoKSwgcGFpbnQsIGRlc3Ryb3lQYWlu
dCk7CisgICAgaGJfZm9udF9zZXRfZnVuY3MoZm9udCwgaGFyZmJ1enpTa2lhR2V0Rm9udEZ1bmNz
KCksIGhiRm9udERhdGEsIGRlc3Ryb3lIYXJmQnV6ekZvbnREYXRhKTsKICAgICBmbG9hdCBzaXpl
ID0gbV9wbGF0Zm9ybURhdGEtPnNpemUoKTsKICAgICBpbnQgc2NhbGUgPSBTa2lhU2NhbGFyVG9I
YXJmYnV6elBvc2l0aW9uKHNpemUpOwogICAgIGhiX2ZvbnRfc2V0X3NjYWxlKGZvbnQsIHNjYWxl
LCBzY2FsZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9o
YXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKaW5kZXggOWU1NWZjNDExYTZj
ZmI3YmM3OGQyODA2NGQ3OWMyNmE0ZjBjNTEyYi4uZjNmZTQ2N2Y3NTYyMGM2OWZhMjgwOWRlOGIz
ZWU2YzM3NjZjZjQzOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvaGFyZmJ1enovbmcvSGFyZkJ1enpTaGFwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcApAQCAtODcsMTAg
Kzg3LDYgQEAgdm9pZCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpSdW46OmFwcGx5U2hhcGVSZXN1
bHQoaGJfYnVmZmVyX3QqIGhhcmZidXp6QnVmZmVyKQogICAgIG1fYWR2YW5jZXMucmVzaXplKG1f
bnVtR2x5cGhzKTsKICAgICBtX2dseXBoVG9DaGFyYWN0ZXJJbmRleGVzLnJlc2l6ZShtX251bUds
eXBocyk7CiAgICAgbV9vZmZzZXRzLnJlc2l6ZShtX251bUdseXBocyk7Ci0KLSAgICBoYl9nbHlw
aF9pbmZvX3QqIGluZm9zID0gaGJfYnVmZmVyX2dldF9nbHlwaF9pbmZvcyhoYXJmYnV6ekJ1ZmZl
ciwgMCk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fbnVtR2x5cGhzOyArK2kpCi0g
ICAgICAgIG1fZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXNbaV0gPSBpbmZvc1tpXS5jbHVzdGVyOwog
fQogCiB2b2lkIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elJ1bjo6c2V0R2x5cGhBbmRQb3NpdGlv
bnModW5zaWduZWQgaW5kZXgsIHVpbnQxNl90IGdseXBoSWQsIGZsb2F0IGFkdmFuY2UsIGZsb2F0
IG9mZnNldFgsIGZsb2F0IG9mZnNldFkpCkBAIC0yNDAsMjAgKzIzNiw2IEBAIEZsb2F0UG9pbnQg
SGFyZkJ1enpTaGFwZXI6OmFkanVzdFN0YXJ0UG9pbnQoY29uc3QgRmxvYXRQb2ludCYgcG9pbnQp
CiAgICAgcmV0dXJuIHBvaW50ICsgbV9zdGFydE9mZnNldDsKIH0KIAotc3RhdGljIGNvbnN0IFNp
bXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0
IEZvbnQqIGZvbnQsIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKQotewot
ICAgIFVFcnJvckNvZGUgZXJyb3IgPSBVX1pFUk9fRVJST1I7Ci0gICAgVmVjdG9yPFVDaGFyLCA0
PiBub3JtYWxpemVkQ2hhcmFjdGVycyhsZW5ndGgpOwotICAgIGludDMyX3Qgbm9ybWFsaXplZExl
bmd0aCA9IHVub3JtX25vcm1hbGl6ZShjaGFyYWN0ZXJzLCBsZW5ndGgsIFVOT1JNX05GQywgVU5P
Uk1fVU5JQ09ERV8zXzIsICZub3JtYWxpemVkQ2hhcmFjdGVyc1swXSwgbGVuZ3RoLCAmZXJyb3Ip
OwotICAgIC8vIFNob3VsZCBmYWxsYmFjayBpZiB3ZSBoYXZlIGFuIGVycm9yIG9yIG5vIGNvbXBv
c2l0aW9uIG9jY3VycmVkLgotICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpIHx8IChzdGF0aWNfY2Fz
dDxzaXplX3Q+KG5vcm1hbGl6ZWRMZW5ndGgpID09IGxlbmd0aCkpCi0gICAgICAgIHJldHVybiAw
OwotICAgIFVDaGFyMzIgbm9ybWFsaXplZENoYXJhY3RlcjsKLSAgICBzaXplX3QgaW5kZXggPSAw
OwotICAgIFUxNl9ORVhUKCZub3JtYWxpemVkQ2hhcmFjdGVyc1swXSwgaW5kZXgsIHN0YXRpY19j
YXN0PHNpemVfdD4obm9ybWFsaXplZExlbmd0aCksIG5vcm1hbGl6ZWRDaGFyYWN0ZXIpOwotICAg
IHJldHVybiBmb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIobm9ybWFsaXplZENoYXJhY3Rlciwg
ZmFsc2UpLmZvbnREYXRhOwotfQotCiBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1
enpSdW5zKCkKIHsKICAgICBjb25zdCBVQ2hhciogbm9ybWFsaXplZEJ1ZmZlckVuZCA9IG1fbm9y
bWFsaXplZEJ1ZmZlci5nZXQoKSArIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aDsKQEAgLTI3OCw2
ICsyNjAsNyBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0SGFyZkJ1enpSdW5zKCkKICAg
ICAgICAgZm9yIChpdGVyYXRvci5hZHZhbmNlKGNsdXN0ZXJMZW5ndGgpOyBpdGVyYXRvci5jb25z
dW1lKGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCk7IGl0ZXJhdG9yLmFkdmFuY2UoY2x1c3Rlckxl
bmd0aCkpIHsKICAgICAgICAgICAgIGlmIChGb250Ojp0cmVhdEFzWmVyb1dpZHRoU3BhY2UoY2hh
cmFjdGVyKSkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKKwogICAgICAgICAgICAgaWYgKFVf
R0VUX0dDX01BU0soY2hhcmFjdGVyKSAmIFVfR0NfTV9NQVNLKSB7CiAgICAgICAgICAgICAgICAg
aW50IG1hcmtMZW5ndGggPSBjbHVzdGVyTGVuZ3RoOwogICAgICAgICAgICAgICAgIGNvbnN0IFVD
aGFyKiBtYXJrQ2hhcmFjdGVyc0VuZCA9IGl0ZXJhdG9yLmNoYXJhY3RlcnMoKSArIGNsdXN0ZXJM
ZW5ndGg7CkBAIC0yOTAsMTEgKzI3MywxMiBAQCBib29sIEhhcmZCdXp6U2hhcGVyOjpjb2xsZWN0
SGFyZkJ1enpSdW5zKCkKICAgICAgICAgICAgICAgICAgICAgbWFya0xlbmd0aCArPSBuZXh0Q2hh
cmFjdGVyTGVuZ3RoOwogICAgICAgICAgICAgICAgICAgICBtYXJrQ2hhcmFjdGVyc0VuZCArPSBu
ZXh0Q2hhcmFjdGVyTGVuZ3RoOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBu
ZXh0Rm9udERhdGEgPSBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKG1fZm9u
dCwgY3VycmVudENoYXJhY3RlclBvc2l0aW9uLCBtYXJrQ2hhcmFjdGVyc0VuZCAtIGN1cnJlbnRD
aGFyYWN0ZXJQb3NpdGlvbik7Ci0gICAgICAgICAgICAgICAgaWYgKG5leHRGb250RGF0YSkKKwor
ICAgICAgICAgICAgICAgIGlmIChjdXJyZW50Rm9udERhdGEtPmNhblJlbmRlckNvbWJpbmluZ0No
YXJhY3RlclNlcXVlbmNlKGN1cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbiwgbWFya0NoYXJhY3RlcnNF
bmQgLSBjdXJyZW50Q2hhcmFjdGVyUG9zaXRpb24pKSB7CiAgICAgICAgICAgICAgICAgICAgIGNs
dXN0ZXJMZW5ndGggPSBtYXJrTGVuZ3RoOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgbmV4dEZvbnREYXRhID0gbV9mb250LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyLCBmYWxzZSkuZm9udERhdGE7CisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBuZXh0Rm9udERhdGEgPSBtX2Zv
bnQtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGZhbHNlKS5mb250RGF0YTsKICAg
ICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgIG5leHRGb250RGF0YSA9IG1fZm9udC0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgZmFsc2UpLmZvbnREYXRhOwogCkBAIC0z
MDUsNiArMjg5LDcgQEAgYm9vbCBIYXJmQnV6elNoYXBlcjo6Y29sbGVjdEhhcmZCdXp6UnVucygp
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpZiAobmV4dFNjcmlwdCA9PSBV
U0NSSVBUX0lOSEVSSVRFRCkKICAgICAgICAgICAgICAgICBuZXh0U2NyaXB0ID0gY3VycmVudFNj
cmlwdDsKKyAgICAgICAgICAgIGN1cnJlbnRDaGFyYWN0ZXJQb3NpdGlvbiA9IGl0ZXJhdG9yLmNo
YXJhY3RlcnMoKTsKICAgICAgICAgfQogICAgICAgICB1bnNpZ25lZCBudW1DaGFyYWN0ZXJzT2ZD
dXJyZW50UnVuID0gaXRlcmF0b3IuY3VycmVudENoYXJhY3RlcigpIC0gc3RhcnRJbmRleE9mQ3Vy
cmVudFJ1bjsKICAgICAgICAgbV9oYXJmYnV6elJ1bnMuYXBwZW5kKEhhcmZCdXp6UnVuOjpjcmVh
dGUoY3VycmVudEZvbnREYXRhLCBzdGFydEluZGV4T2ZDdXJyZW50UnVuLCBudW1DaGFyYWN0ZXJz
T2ZDdXJyZW50UnVuLCBtX3J1bi5kaXJlY3Rpb24oKSkpOwpAQCAtMzYxLDYgKzM0Niw3IEBAIHZv
aWQgSGFyZkJ1enpTaGFwZXI6OnNldEdseXBoUG9zaXRpb25zRm9ySGFyZkJ1enpSdW4oSGFyZkJ1
enpSdW4qIGN1cnJlbnRSdW4sIGhiCiAgICAgaGJfZ2x5cGhfcG9zaXRpb25fdCogZ2x5cGhQb3Np
dGlvbnMgPSBoYl9idWZmZXJfZ2V0X2dseXBoX3Bvc2l0aW9ucyhoYXJmYnV6ekJ1ZmZlciwgMCk7
CiAKICAgICB1bnNpZ25lZCBudW1HbHlwaHMgPSBjdXJyZW50UnVuLT5udW1HbHlwaHMoKTsKKyAg
ICB1aW50MTZfdCogZ2x5cGhUb0NoYXJhY3RlckluZGV4ZXMgPSBjdXJyZW50UnVuLT5nbHlwaFRv
Q2hhcmFjdGVySW5kZXhlcygpOwogICAgIGZsb2F0IHRvdGFsQWR2YW5jZSA9IDA7CiAKICAgICAv
LyBIYXJmQnV6eiByZXR1cm5zIHRoZSBzaGFwaW5nIHJlc3VsdCBpbiB2aXN1YWwgb3JkZXIuIFdl
IG5lZWQgbm90IHRvIGZsaXAgZm9yIFJUTC4KQEAgLTM3NCw2ICszNjAsOSBAQCB2b2lkIEhhcmZC
dXp6U2hhcGVyOjpzZXRHbHlwaFBvc2l0aW9uc0ZvckhhcmZCdXp6UnVuKEhhcmZCdXp6UnVuKiBj
dXJyZW50UnVuLCBoYgogICAgICAgICB1bnNpZ25lZCBjdXJyZW50Q2hhcmFjdGVySW5kZXggPSBj
dXJyZW50UnVuLT5zdGFydEluZGV4KCkgKyBnbHlwaEluZm9zW2ldLmNsdXN0ZXI7CiAgICAgICAg
IGJvb2wgaXNDbHVzdGVyRW5kID0gcnVuRW5kIHx8IGdseXBoSW5mb3NbaV0uY2x1c3RlciAhPSBn
bHlwaEluZm9zW2kgKyAxXS5jbHVzdGVyOwogICAgICAgICBmbG9hdCBzcGFjaW5nID0gMDsKKwor
ICAgICAgICBnbHlwaFRvQ2hhcmFjdGVySW5kZXhlc1tpXSA9IGdseXBoSW5mb3NbaV0uY2x1c3Rl
cjsKKwogICAgICAgICBpZiAoaXNDbHVzdGVyRW5kICYmICFGb250Ojp0cmVhdEFzWmVyb1dpZHRo
U3BhY2UobV9ub3JtYWxpemVkQnVmZmVyW2N1cnJlbnRDaGFyYWN0ZXJJbmRleF0pKQogICAgICAg
ICAgICAgc3BhY2luZyArPSBtX2xldHRlclNwYWNpbmc7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvU2ltcGxlRm9udERhdGFTa2lhLmNw
cAppbmRleCAzMDI3ZTA1NzJiODY1ZDQxNDdkODU1NmQ0ZTRhMmVmNzQ5OTEyN2E1Li4zNTZhZDA3
YTgzODQ0ZTdhZTcwZjljMmE2YTViMmE1OTE1ZDA2ODZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL1NpbXBsZUZvbnREYXRhU2tpYS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9TaW1wbGVGb250RGF0YVNraWEu
Y3BwCkBAIC00Miw2ICs0Miw4IEBACiAjaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgogI2luY2x1ZGUg
IlNrVHlwZXMuaCIKICNpbmNsdWRlICJWRE1YUGFyc2VyLmgiCisjaW5jbHVkZSA8dW5pY29kZS9u
b3JtbHpyLmg+CisjaW5jbHVkZSA8d3RmL3VuaWNvZGUvVW5pY29kZS5oPgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKQEAgLTI1MCw0ICsyNTIsMzIgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6OnBs
YXRmb3JtV2lkdGhGb3JHbHlwaChHbHlwaCBnbHlwaCkgY29uc3QKICAgICByZXR1cm4gU2tTY2Fs
YXJUb0Zsb2F0KHdpZHRoKTsKIH0KIAorI2lmIFVTRShIQVJGQlVaWl9ORykKK2Jvb2wgU2ltcGxl
Rm9udERhdGE6OmNhblJlbmRlckNvbWJpbmluZ0NoYXJhY3RlclNlcXVlbmNlKGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoKSBjb25zdAoreworICAgIGlmICghbV9jb21iaW5p
bmdDaGFyYWN0ZXJTZXF1ZW5jZVN1cHBvcnQpCisgICAgICAgIG1fY29tYmluaW5nQ2hhcmFjdGVy
U2VxdWVuY2VTdXBwb3J0ID0gYWRvcHRQdHIobmV3IEhhc2hNYXA8U3RyaW5nLCBib29sPik7CisK
KyAgICBXVEY6Okhhc2hNYXA8U3RyaW5nLCBib29sPjo6QWRkUmVzdWx0IGFkZFJlc3VsdCA9IG1f
Y29tYmluaW5nQ2hhcmFjdGVyU2VxdWVuY2VTdXBwb3J0LT5hZGQoU3RyaW5nKGNoYXJhY3RlcnMs
IGxlbmd0aCksIGZhbHNlKTsKKyAgICBpZiAoIWFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAg
ICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisKKyAgICBVRXJyb3JDb2RlIGVy
cm9yID0gVV9aRVJPX0VSUk9SOworICAgIFZlY3RvcjxVQ2hhciwgND4gbm9ybWFsaXplZENoYXJh
Y3RlcnMobGVuZ3RoKTsKKyAgICBpbnQzMl90IG5vcm1hbGl6ZWRMZW5ndGggPSB1bm9ybV9ub3Jt
YWxpemUoY2hhcmFjdGVycywgbGVuZ3RoLCBVTk9STV9ORkMsIFVOT1JNX1VOSUNPREVfM18yLCAm
bm9ybWFsaXplZENoYXJhY3RlcnNbMF0sIGxlbmd0aCwgJmVycm9yKTsKKyAgICAvLyBDYW4ndCBy
ZW5kZXIgaWYgd2UgaGF2ZSBhbiBlcnJvciBvciBubyBjb21wb3NpdGlvbiBvY2N1cnJlZC4KKyAg
ICBpZiAoVV9GQUlMVVJFKGVycm9yKSB8fCAoc3RhdGljX2Nhc3Q8c2l6ZV90Pihub3JtYWxpemVk
TGVuZ3RoKSA9PSBsZW5ndGgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBTa1BhaW50
IHBhaW50OworICAgIG1fcGxhdGZvcm1EYXRhLnNldHVwUGFpbnQoJnBhaW50KTsKKyAgICBwYWlu
dC5zZXRUZXh0RW5jb2RpbmcoU2tQYWludDo6a1VURjE2X1RleHRFbmNvZGluZyk7CisgICAgaWYg
KHBhaW50LnRleHRUb0dseXBocygmbm9ybWFsaXplZENoYXJhY3RlcnNbMF0sIG5vcm1hbGl6ZWRM
ZW5ndGggKiAyLCAwKSkgeworICAgICAgICBhZGRSZXN1bHQuaXRlcmF0b3ItPnNlY29uZCA9IHRy
dWU7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9Cisj
ZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>