<?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>148965</bug_id>
          
          <creation_ts>2015-09-08 10:19:13 -0700</creation_ts>
          <short_desc>Split mixed font GlyphPage functionality to separate class</short_desc>
          <delta_ts>2015-09-09 06:01:38 -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>Text</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>mmaxfield</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1124275</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-08 10:19:13 -0700</bug_when>
    <thetext>Currently GlyphPage class is used for both immutable single font case (in Font) and for caching mixed font mappings (in FontCascadeFonts). It is cleaner to use separate classed for these cases. This will also make future improvements easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124344</commentid>
    <comment_count>1</comment_count>
      <attachid>260779</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-08 11:59:28 -0700</bug_when>
    <thetext>Created attachment 260779
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124358</commentid>
    <comment_count>2</comment_count>
      <attachid>260783</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-08 12:46:36 -0700</bug_when>
    <thetext>Created attachment 260783
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124405</commentid>
    <comment_count>3</comment_count>
      <attachid>260783</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2015-09-08 14:47:36 -0700</bug_when>
    <thetext>Comment on attachment 260783
patch

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

I think this is fine.

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.cpp:56
&gt; +void FontCascadeFonts::GlyphPageCacheEntry::setSingleFontPage(RefPtr&lt;GlyphPage&gt;&amp;&amp; page)

Shouldn&apos;t this take a Ref?

&gt; Source/WebCore/platform/graphics/FontCascadeFonts.h:98
&gt; +        RefPtr&lt;GlyphPage&gt; m_singleFont;
&gt; +        std::unique_ptr&lt;MixedFontGlyphPage&gt; m_mixedFont;

Unclear why one is a RefPtr and the other one is a unique_ptr.

&gt; Source/WebCore/platform/graphics/GlyphPage.h:74
&gt;      static unsigned indexForCharacter(UChar32 c) { return c % GlyphPage::size; }

Shouldn&apos;t this be private (maybe with a friend of MixedFontGlyphPage?) Seems to me that external people don&apos;t need to know this.

&gt; Source/WebCore/platform/graphics/GlyphPage.h:83
&gt; +        return m_glyphs[indexForCharacter(c)];

Please add ASSERT_WITH_SECURITY_IMPLICATION() in all member functions which deal with this stuff

&gt; Source/WebCore/platform/graphics/GlyphPage.h:94
&gt; +    void setGlyphDataForIndex(unsigned index, Glyph glyph)

Looks to me like this function is just setting the glyph, not the GlyphData. Now that you are separating mixed parts from the non-mixed parts, I think it makes sense to give them different APIs.

&gt; Source/WebCore/platform/graphics/GlyphPage.h:121
&gt; +class MixedFontGlyphPage {

Seems to me that this should get its own file.

&gt; Source/WebCore/platform/graphics/GlyphPage.h:124
&gt; +    MixedFontGlyphPage(RefPtr&lt;GlyphPage&gt;&amp;&amp; initialPage)

Judging from the function body, shouldn&apos;t this take a regular lvalue reference instead of an rvalue reference?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124605</commentid>
    <comment_count>4</comment_count>
      <attachid>260857</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-09 04:41:48 -0700</bug_when>
    <thetext>Created attachment 260857
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124606</commentid>
    <comment_count>5</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-09 04:43:36 -0700</bug_when>
    <thetext>&gt; Unclear why one is a RefPtr and the other one is a unique_ptr.

One is shared, other is not.

&gt;&gt; +class MixedFontGlyphPage { 
&gt; Seems to me that this should get its own file.

I moved it to FontCascadeFonts.cpp since it is really an implementation detail of that type.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124609</commentid>
    <comment_count>6</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2015-09-09 06:01:38 -0700</bug_when>
    <thetext>https://trac.webkit.org/r189539</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260779</attachid>
            <date>2015-09-08 11:59:28 -0700</date>
            <delta_ts>2015-09-08 12:46:36 -0700</delta_ts>
            <desc>patch</desc>
            <filename>glyph-page-split-2.patch</filename>
            <type>text/plain</type>
            <size>29114</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE1LTA5LTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBtaXhlZCBmb250IEds
eXBoUGFnZSBmdW5jdGlvbmFsaXR5IHRvIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5NjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgR2x5cGhQYWdlIGNsYXNz
IGlzIHVzZWQgZm9yIGJvdGggaW1tdXRhYmxlIHNpbmdsZSBmb250IGNhc2UgKGluIEZvbnQpIGFu
ZAorICAgICAgICBmb3IgY2FjaGluZyBtaXhlZCBmb250IG1hcHBpbmdzIChpbiBGb250Q2FzY2Fk
ZUZvbnRzKS4gSXQgaXMgY2xlYW5lciB0byB1c2Ugc2VwYXJhdGUKKyAgICAgICAgY2xhc3NlZCBm
b3IgdGhlc2UgY2FzZXMuIFRoaXMgd2lsbCBhbHNvIG1ha2UgZnV0dXJlIGltcHJvdmVtZW50cyBl
YXNpZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6On5Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxHbHlwaFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kRmlsbEdseXBoUGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpnbHlwaFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhG
b3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZUZvbnRzOjpHbHlwaFBhZ2VDYWNoZUVudHJ5OjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIpOgorCisgICAgICAgICAgICBDYWNoZSBlbnRyeSBpcyBlaXRoZXIgc2luZ2xlIGZvbnQgR2x5
cGhQYWdlIG9yIE1peGVkRm9udEdseXBoUGFnZS4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVGb250czo6R2x5cGhQYWdlQ2FjaGVFbnRyeTo6c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KToKKworICAgICAgICAgICAgU2V0dGluZyBhbiBpbmRpdmlkdWFsIGdseXBoIHN3aXRjaGVzIHRv
IE1peGVkRm9udEdseXBoUGFnZS4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250
czo6R2x5cGhQYWdlQ2FjaGVFbnRyeTo6c2V0U2luZ2xlRm9udFBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRm9udHM6OkdseXBoUGFnZUNhY2hlRW50cnk6OmlzTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpHbHlwaFBhZ2VDYWNoZUVudHJ5Ojppc01p
eGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoUGFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFn
ZTo6fkdseXBoUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6aW5kZXhGb3JDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhQYWdlOjpnbHlwaEZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFBhZ2U6OmdseXBoRGF0YUZvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFn
ZTo6c2V0R2x5cGhEYXRhRm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpm
b250KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6R2x5cGhQYWdlKToKKworICAgICAg
ICAgICAgR2x5cGhQYWdlIGlzIG5vdyBmb3Igc2luZ2xlIGZvbnQgbWFwcGluZ3Mgb25seS4KKyAg
ICAgICAgICAgIEl0IGNhbiBub3cgdXNlIHJlZ3VsYXIgYWxsb2NhdGlvbiBpbnN0ZWFkIG9mIHZh
cmlhYmxlIHNpemUgdHJpY2tzLgorICAgICAgICAgICAgSXQgaXMgYWx3YXlzIGltbXV0YWJsZSBh
ZnRlciBpbml0aWFsaXphdGlvbiAodGhvdWdoIGN1cnJlbnRseSBhIHNldHRlciBpcyBzdGlsbCBu
ZWVkZWQpLgorCisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6OmdseXBoRGF0YUZvckNoYXJh
Y3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6OnNldEdseXBoRGF0
YUZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6Ok1p
eGVkRm9udEdseXBoUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6
OmdseXBoRGF0YUZvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok1peGVkRm9udEdseXBoUGFn
ZTo6c2V0R2x5cGhEYXRhRm9ySW5kZXgpOgorCisgICAgICAgICAgICBOZXcgbXV0YWJsZSB0eXBl
IHdpdGggcGVyLWdseXBoIGZvbnQuCisKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Y3Jl
YXRlRm9yTWl4ZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoUGFnZTo6Y3JlYXRlRm9yU2luZ2xlRm9udCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaFBhZ2U6OmlzSW1tdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoUGFnZTo6c2V0SW1tdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBo
UGFnZTo6Z2x5cGhBdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZv
bnRGb3JDaGFyYWN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpz
ZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhQYWdlOjpoYXNQZXJHbHlwaEZvbnREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dseXBoUGFnZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZp
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGlj
YWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlVmVydGljYWxEYXRhOjpzdWJz
dGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBh
Z2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVl
Tm9kZUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRE
YXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRE
YXRhOjpmaWxsU1ZHR2x5cGhQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpm
aWxsQk1QR2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpmaWxsTm9uQk1Q
R2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZvbnREYXRhOjp2ZXJ0aWNhbEFkdmFuY2VZKToKKwogMjAxNS0wOS0wOCAgR3l1eW91bmcg
S2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVkdWNlIHVzZXMgb2Yg
UGFzc1JlZlB0ciBpbiBmaWxlYXBpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAkocmV2aXNpb24gMTg5NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwxMyArMTQ5LDEzIEBA
IEZvbnQ6On5Gb250KCkKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogfQog
Ci1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRvRmlsbCwgVUNoYXIq
IGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250KQorc3RhdGlj
IGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCYgZm9udCkKIHsKICNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQotICAgIGlmIChhdXRvKiBzdmdEYXRhID0gZm9udC0+c3ZnRGF0YSgpKQotICAg
ICAgICByZXR1cm4gc3ZnRGF0YS0+ZmlsbFNWR0dseXBoUGFnZSgmcGFnZVRvRmlsbCwgYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnQpOworICAgIGlmIChhdXRvKiBzdmdEYXRhID0gZm9udC5zdmdE
YXRhKCkpCisgICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9G
aWxsLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCk7CiAjZW5kaWYKLSAgICBib29sIGhhc0dseXBocyA9
IHBhZ2VUb0ZpbGwuZmlsbChidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CisgICAgYm9vbCBo
YXNHbHlwaHMgPSBwYWdlVG9GaWxsLmZpbGwoYnVmZmVyLCBidWZmZXJMZW5ndGgsICZmb250KTsK
ICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCiAgICAgaWYgKGhhc0dseXBocyAmJiBmb250
LT52ZXJ0aWNhbERhdGEoKSkKICAgICAgICAgZm9udC0+dmVydGljYWxEYXRhKCktPnN1YnN0aXR1
dGVXaXRoVmVydGljYWxHbHlwaHMoZm9udCwgJnBhZ2VUb0ZpbGwpOwpAQCAtMTYzLDcgKzE2Myw3
IEBAIHN0YXRpYyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWcKICAgICByZXR1cm4g
aGFzR2x5cGhzOwogfQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5kRmlsbEds
eXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250KiBmb250KQorc3RhdGljIFJl
ZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJl
ciwgY29uc3QgRm9udCYgZm9udCkKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8gRklYTUU6
IFRpbWVzIE5ldyBSb21hbiBjb250YWlucyBBcmFiaWMgZ2x5cGhzLCBidXQgQ29yZSBUZXh0IGRv
ZXNuJ3Qga25vdyBob3cgdG8gc2hhcGUgdGhlbS4gU2VlIDxyZGFyOi8vcHJvYmxlbS85ODIzOTc1
Pi4KQEAgLTIyNiwyNiArMjI2LDI1IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVB
bmRGaWxsR2wKICAgICAvLyByb3V0aW5lIG9mIG91ciBnbHlwaCBtYXAgZm9yIGFjdHVhbGx5IGZp
bGxpbmcgaW4gdGhlIHBhZ2Ugd2l0aCB0aGUgZ2x5cGhzLgogICAgIC8vIFN1Y2Nlc3MgaXMgbm90
IGd1YXJhbnRlZWQuIEZvciBleGFtcGxlLCBUaW1lcyBmYWlscyB0byBmaWxsIHBhZ2UgMjYwLCBn
aXZpbmcgZ2x5cGggZGF0YQogICAgIC8vIGZvciBvbmx5IDEyOCBvdXQgb2YgMjU2IGNoYXJhY3Rl
cnMuCi0gICAgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVG
b3JTaW5nbGVGb250KGZvbnQpOworICAgIFJlZjxHbHlwaFBhZ2U+IGdseXBoUGFnZSA9IEdseXBo
UGFnZTo6Y3JlYXRlKGZvbnQpOwogCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFn
ZSgqZ2x5cGhQYWdlLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CisgICAgYm9vbCBoYXZl
R2x5cGhzID0gZmlsbEdseXBoUGFnZShnbHlwaFBhZ2UsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBm
b250KTsKICAgICBpZiAoIWhhdmVHbHlwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0g
ICAgZ2x5cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOworICAg
IHJldHVybiBXVEY6Om1vdmUoZ2x5cGhQYWdlKTsKIH0KIAogY29uc3QgR2x5cGhQYWdlKiBGb250
OjpnbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKIHsKICAgICBpZiAoIXBhZ2VO
dW1iZXIpIHsKICAgICAgICAgaWYgKCFtX2dseXBoUGFnZVplcm8pCi0gICAgICAgICAgICBtX2ds
eXBoUGFnZVplcm8gPSBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKDAsIHRoaXMpOworICAgICAgICAg
ICAgbV9nbHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCAqdGhpcyk7CiAg
ICAgICAgIHJldHVybiBtX2dseXBoUGFnZVplcm8uZ2V0KCk7CiAgICAgfQogICAgIGF1dG8gYWRk
UmVzdWx0ID0gbV9nbHlwaFBhZ2VzLmFkZChwYWdlTnVtYmVyLCBudWxscHRyKTsKICAgICBpZiAo
YWRkUmVzdWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUg
PSBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKHBhZ2VOdW1iZXIsIHRoaXMpOworICAgICAgICBhZGRS
ZXN1bHQuaXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZShwYWdlTnVtYmVy
LCAqdGhpcyk7CiAKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsK
IH0KQEAgLTI1NSw3ICsyNTQsNyBAQCBHbHlwaCBGb250OjpnbHlwaEZvckNoYXJhY3RlcihVQ2hh
cjMyIGNoCiAgICAgYXV0byogcGFnZSA9IGdseXBoUGFnZShjaGFyYWN0ZXIgLyBHbHlwaFBhZ2U6
OnNpemUpOwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHBh
Z2UtPmdseXBoQXQoY2hhcmFjdGVyICUgR2x5cGhQYWdlOjpzaXplKTsKKyAgICByZXR1cm4gcGFn
ZS0+Z2x5cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKIH0KIAogR2x5cGhEYXRhIEZvbnQ6Omds
eXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE4OTQ2NSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
NzYsNyArNzYsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVG
b250KEZvbnQqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIGZsb2F0IHdp
ZHRoRm9yU1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCA9IDA7Ci0gICAgICAg
IHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopIGNvbnN0ID0gMDsKKyAgICAgICAg
dmlydHVhbCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoKSBjb25zdCA9IDA7CiAgICAgfTsKIAogICAgIC8vIFVzZWQg
dG8gY3JlYXRlIHBsYXRmb3JtIGZvbnRzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHJldmlzaW9uIDE4OTIw
NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwyOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKK0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpHbHlwaFBhZ2VDYWNoZUVudHJ5Ojpn
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgQVNTRVJUKCEo
bV9zaW5nbGVGb250ICYmIG1fbWl4ZWRGb250KSk7CisgICAgaWYgKG1fc2luZ2xlRm9udCkKKyAg
ICAgICAgcmV0dXJuIG1fc2luZ2xlRm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rl
cik7CisgICAgaWYgKG1fbWl4ZWRGb250KQorICAgICAgICByZXR1cm4gbV9taXhlZEZvbnQtPmds
eXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IEZvbnRDYXNjYWRlRm9udHM6OkdseXBoUGFnZUNhY2hlRW50cnk6OnNldEdseXBoRGF0YUZvckNo
YXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlciwgR2x5cGhEYXRhIGdseXBoRGF0YSkKK3sKKyAgICBB
U1NFUlQoIWdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpLmdseXBoKTsKKyAgICBpZiAo
IW1fbWl4ZWRGb250KQorICAgICAgICBtX21peGVkRm9udCA9IHN0ZDo6bWFrZV91bmlxdWU8TWl4
ZWRGb250R2x5cGhQYWdlPihXVEY6Om1vdmUobV9zaW5nbGVGb250KSk7CisgICAgbV9taXhlZEZv
bnQtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGdseXBoRGF0YSk7Cit9CisK
K3ZvaWQgRm9udENhc2NhZGVGb250czo6R2x5cGhQYWdlQ2FjaGVFbnRyeTo6c2V0U2luZ2xlRm9u
dFBhZ2UoUmVmUHRyPEdseXBoUGFnZT4mJiBwYWdlKQoreworICAgIEFTU0VSVChpc051bGwoKSk7
CisgICAgbV9zaW5nbGVGb250ID0gV1RGOjptb3ZlKHBhZ2UpOworfQogCiBGb250Q2FzY2FkZUZv
bnRzOjpGb250Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9y
KQogICAgIDogbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQpAQCAtMzcxLDIwICszOTQsMjAg
QEAgR2x5cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvcgogCiAgICAgY29uc3Qg
dW5zaWduZWQgcGFnZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7CiAKLSAgICBSZWZQdHI8
R2x5cGhQYWdlPiYgY2FjaGVkUGFnZSA9IHBhZ2VOdW1iZXIgPyBtX2NhY2hlZFBhZ2VzLmFkZChw
YWdlTnVtYmVyLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWUgOiBtX2NhY2hlZFBhZ2VaZXJvOwot
ICAgIGlmICghY2FjaGVkUGFnZSkKLSAgICAgICAgY2FjaGVkUGFnZSA9IGdseXBoUGFnZUZyb21G
b250UmFuZ2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9u
LCAwKSk7CisgICAgYXV0byYgY2FjaGVFbnRyeSA9IHBhZ2VOdW1iZXIgPyBtX2NhY2hlZFBhZ2Vz
LmFkZChwYWdlTnVtYmVyLCBHbHlwaFBhZ2VDYWNoZUVudHJ5KCkpLml0ZXJhdG9yLT52YWx1ZSA6
IG1fY2FjaGVkUGFnZVplcm87CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhID0gY2FjaGVkUGFn
ZSA/IGNhY2hlZFBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOwot
ICAgIGlmICghZ2x5cGhEYXRhLmdseXBoKSB7Ci0gICAgICAgIGlmICghY2FjaGVkUGFnZSkKLSAg
ICAgICAgICAgIGNhY2hlZFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udHMoKTsK
LSAgICAgICAgZWxzZSBpZiAoY2FjaGVkUGFnZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAg
IGNhY2hlZFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKCpjYWNoZWRQ
YWdlKTsKKyAgICAvLyBJbml0dWFsaXplIGNhY2hlIHdpdGggYSBmdWxsIHBhZ2Ugb2YgZ2x5cGgg
bWFwcGluZ3MgZnJvbSBhIHNpbmdsZSBmb250LgorICAgIGlmIChjYWNoZUVudHJ5LmlzTnVsbCgp
KQorICAgICAgICBjYWNoZUVudHJ5LnNldFNpbmdsZUZvbnRQYWdlKGdseXBoUGFnZUZyb21Gb250
UmFuZ2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAw
KSkpOwogCisgICAgR2x5cGhEYXRhIGdseXBoRGF0YSA9IGNhY2hlRW50cnkuZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGMpOworICAgIGlmICghZ2x5cGhEYXRhLmdseXBoKSB7CisgICAgICAgIC8vIE5v
IGdseXBoLCByZXNvbHZlIHBlci1jaGFyYWN0ZXIuCiAgICAgICAgIGdseXBoRGF0YSA9IGdseXBo
RGF0YUZvck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwotICAgICAgICBjYWNoZWRQYWdl
LT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEu
Zm9udCk7CisgICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHRzLgorICAgICAgICBjYWNoZUVudHJ5
LnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBnbHlwaERhdGEpOwogICAgIH0KKwogICAgIHJl
dHVybiBnbHlwaERhdGE7CiB9CiAKQEAgLTM5MywxMCArNDE2LDEwIEBAIHZvaWQgRm9udENhc2Nh
ZGVGb250czo6cHJ1bmVTeXN0ZW1GYWxsYmEKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRT
ZXQuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdl
cyBtYXkgcmVmZXJlbmNlIGZhbGxiYWNrIGZvbnRzLgotICAgIGlmIChtX2NhY2hlZFBhZ2VaZXJv
ICYmICFtX2NhY2hlZFBhZ2VaZXJvLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICBtX2NhY2hlZFBh
Z2VaZXJvID0gbnVsbHB0cjsKKyAgICBpZiAobV9jYWNoZWRQYWdlWmVyby5pc01peGVkKCkpCisg
ICAgICAgIG1fY2FjaGVkUGFnZVplcm8gPSB7IH07CiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJ
ZihbXShkZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFs
dWUpIHsKLSAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsK
KyAgICAgICAgcmV0dXJuIGtleUFuZFZhbHVlLnZhbHVlLmlzTWl4ZWQoKTsKICAgICB9KTsKICAg
ICBtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkocmV2aXNp
b24gMTg5MjA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2Nh
ZGVGb250cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4MiwyNCBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5z
aWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OwogCi0gICAgUmVmUHRyPEds
eXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVybzsKLSAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBo
UGFnZT4+IG1fY2FjaGVkUGFnZXM7CisgICAgY2xhc3MgR2x5cGhQYWdlQ2FjaGVFbnRyeSB7Cisg
ICAgcHVibGljOgorICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFy
MzIpOworCisgICAgICAgIHZvaWQgc2V0U2luZ2xlRm9udFBhZ2UoUmVmUHRyPEdseXBoUGFnZT4m
Jik7CisgICAgICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIEdseXBo
RGF0YSk7CisKKyAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9zaW5nbGVG
b250ICYmICFtX21peGVkRm9udDsgfQorICAgICAgICBib29sIGlzTWl4ZWQoKSBjb25zdCB7IHJl
dHVybiAhIW1fbWl4ZWRGb250OyB9CisgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gT25s
eSBvbmUgb2YgdGhlc2UgaXMgbm9uLW51bGwuCisgICAgICAgIFJlZlB0cjxHbHlwaFBhZ2U+IG1f
c2luZ2xlRm9udDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1peGVkRm9udEdseXBoUGFnZT4g
bV9taXhlZEZvbnQ7CisgICAgfTsKKworICAgIEdseXBoUGFnZUNhY2hlRW50cnkgbV9jYWNoZWRQ
YWdlWmVybzsKKyAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlQ2FjaGVFbnRyeT4gbV9jYWNoZWRQ
YWdlczsKIAogICAgIEhhc2hTZXQ8UmVmUHRyPEZvbnQ+PiBtX3N5c3RlbUZhbGxiYWNrRm9udFNl
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdl
LmgJKHJldmlzaW9uIDE4OTQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0dseXBoUGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywzNyArNTMsMTQgQEAgc3RydWN0IEds
eXBoRGF0YSB7CiAgICAgY29uc3QgRm9udCogZm9udDsKIH07CiAKLSNpZiBDT01QSUxFUihNU1ZD
KQotI3ByYWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDIwMCkg
Ly8gRGlzYWJsZSAiemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24iIHdhcm5pbmcKLSNl
bmRpZgotCiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZpeGVkLXNpemUgc2V0IG9mIEdseXBo
RGF0YSBtYXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyByYW5nZSBvZiBjaGFyYWN0ZXJzIGlu
IHRoZSBVbmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMgYXJlIGluZGV4ZWQKIC8vIHN0YXJ0
aW5nIGZyb20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNoIDI1NiBnbHlwaHMuCi0vLwotLy8g
T25lIHBhZ2UgbWF5IGFjdHVhbGx5IGluY2x1ZGUgZ2x5cGhzIGZyb20gb3RoZXIgZm9udHMgaWYg
dGhlIGNoYXJhY3RlcnMgYXJlCi0vLyBtaXNzaW5nIGluIHRoZSBwcmltYXJ5IGZvbnQuCiBjbGFz
cyBHbHlwaFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMoKQotICAg
IHsKLSAgICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFnZSkgKyBz
aXplb2YoRm9udCopICogR2x5cGhQYWdlOjpzaXplKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KG5ldyAoTm90TnVsbCwgc2xvdCkgR2x5cGhQYWdlKG51bGxwdHIpKTsKLSAgICB9Ci0KLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKGNvbnN0
IEdseXBoUGFnZSYgb3JpZ2luYWwpCi0gICAgewotICAgICAgICBSZWZQdHI8R2x5cGhQYWdlPiBw
YWdlID0gY3JlYXRlRm9yTWl4ZWRGb250cygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpCi0gICAgICAgICAgICBwYWdlLT5zZXRHbHlwaERh
dGFGb3JJbmRleChpLCBvcmlnaW5hbC5nbHlwaERhdGFGb3JJbmRleChpKSk7Ci0gICAgICAgIHJl
dHVybiBwYWdlLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlw
aFBhZ2U+IGNyZWF0ZUZvclNpbmdsZUZvbnQoY29uc3QgRm9udCogZm9udCkKKyAgICBzdGF0aWMg
UmVmPEdseXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAgewotICAgICAgICBB
U1NFUlQoZm9udCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2x5cGhQYWdlKGZvbnQp
KTsKKyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2x5cGhQYWdlKGZvbnQpKTsKICAgICB9
CiAKICAgICB+R2x5cGhQYWdlKCkKQEAgLTkxLDk5ICs2OCw5NyBAQCBwdWJsaWM6CiAgICAgICAg
IC0tc19jb3VudDsKICAgICB9CiAKLSAgICBib29sIGlzSW1tdXRhYmxlKCkgY29uc3QgeyByZXR1
cm4gbV9pc0ltbXV0YWJsZTsgfQotICAgIHZvaWQgc2V0SW1tdXRhYmxlKCkgeyBtX2lzSW1tdXRh
YmxlID0gdHJ1ZTsgfQotCiAgICAgc3RhdGljIHVuc2lnbmVkIGNvdW50KCkgeyByZXR1cm4gc19j
b3VudDsgfQogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBDb3ZlcnMg
TGF0aW4tMSBpbiBhIHNpbmdsZSBwYWdlLgotICAgIHN0YXRpY19hc3NlcnQoKCEoMHhEODAwICUg
c2l6ZSkpICYmICghKDB4REMwMCAlIHNpemUpKSAmJiAoISgweEUwMDAgJSBzaXplKSksICJHbHlw
aFBhZ2VzIG11c3QgbmV2ZXIgc3RyYWRkbGUgY29kZS11bml0IGxlbmd0aCBib3VuZGFyaWVzIik7
CiAgICAgc3RhdGljIHVuc2lnbmVkIGluZGV4Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgeyByZXR1
cm4gYyAlIEdseXBoUGFnZTo6c2l6ZTsgfQogCi0gICAgQUxXQVlTX0lOTElORSBHbHlwaERhdGEg
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKKyAgICBHbHlwaERhdGEgZ2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVy
biBnbHlwaERhdGFGb3JJbmRleChpbmRleEZvckNoYXJhY3RlcihjKSk7CiAgICAgfQogCi0gICAg
QUxXQVlTX0lOTElORSBHbHlwaERhdGEgZ2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgp
IGNvbnN0CisgICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1fZ2x5cGhzW2luZGV4Rm9yQ2hhcmFjdGVyKGMpXTsKKyAgICB9
CisKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0
CiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8
IHNpemUpOwogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4XTsKLSAgICAgICAg
aWYgKGhhc1BlckdseXBoRm9udERhdGEoKSkKLSAgICAgICAgICAgIHJldHVybiBHbHlwaERhdGEo
Z2x5cGgsIG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAgICAgICByZXR1cm4gR2x5cGhE
YXRhKGdseXBoLCBnbHlwaCA/IG1fZm9udEZvckFsbEdseXBocyA6IDApOworICAgICAgICByZXR1
cm4gR2x5cGhEYXRhKGdseXBoLCBnbHlwaCA/ICZtX2ZvbnQgOiBudWxscHRyKTsKICAgICB9CiAK
LSAgICBBTFdBWVNfSU5MSU5FIEdseXBoIGdseXBoQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0Cisg
ICAgLy8gRklYTUU6IFBhZ2VzIGFyZSBpbW11dGFibGUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIFRo
aXMgc2hvdWxkIGJlIHByaXZhdGUuCisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNp
Z25lZCBpbmRleCwgR2x5cGggZ2x5cGgpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihpbmRleCA8IHNpemUpOwotICAgICAgICByZXR1cm4gbV9nbHlwaHNb
aW5kZXhdOworICAgICAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaDsKICAgICB9CiAKLSAgICBB
TFdBWVNfSU5MSU5FIGNvbnN0IEZvbnQqIGZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25z
dAorICAgIGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWduZWQg
aW5kZXggPSBpbmRleEZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYgKGhhc1BlckdseXBoRm9u
dERhdGEoKSkKLSAgICAgICAgICAgIHJldHVybiBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdOwot
ICAgICAgICByZXR1cm4gbV9nbHlwaHNbaW5kZXhdID8gbV9mb250Rm9yQWxsR2x5cGhzIDogMDsK
KyAgICAgICAgcmV0dXJuIG1fZm9udDsKICAgICB9CiAKLSAgICB2b2lkIHNldEdseXBoRGF0YUZv
ckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnQqIGYpCisgICAgLy8gSW1w
bGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgorICAgIGJvb2wgZmlsbChVQ2hhciogY2hhcmFjdGVy
QnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqKTsKKworcHJpdmF0ZToK
KyAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCYgZm9udCkKKyAgICAgICAgOiBtX2Zv
bnQoZm9udCkKICAgICB7Ci0gICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGluZGV4Rm9yQ2hh
cmFjdGVyKGMpLCBnLCBmKTsKKyAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIHZvaWQg
c2V0R2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIEdseXBoIGdseXBoLCBjb25zdCBG
b250KiBmb250KQotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJ
T04oaW5kZXggPCBzaXplKTsKLSAgICAgICAgQVNTRVJUKCFtX2lzSW1tdXRhYmxlKTsKLSAgICAg
ICAgCi0gICAgICAgIG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoOworICAgIGNvbnN0IEZvbnQmIG1f
Zm9udDsKKyAgICBHbHlwaCBtX2dseXBoc1tzaXplXSB7IH07CiAKLSAgICAgICAgLy8gR2x5cGhQ
YWdlIGdldHRlcnMgd2lsbCBhbHdheXMgcmV0dXJuIGEgbnVsbCBGb250KiBmb3IgZ2x5cGggIzAg
aWYgdGhlcmUncyBubyBwZXItZ2x5cGggZm9udCBhcnJheS4KLSAgICAgICAgaWYgKGhhc1Blckds
eXBoRm9udERhdGEoKSkgewotICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9
IGdseXBoID8gZm9udCA6IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgdW5zaWduZWQgc19jb3VudDsKK307CiAKLSAgICAgICAgLy8g
QSBzaW5nbGUtZm9udCBHbHlwaFBhZ2UgYWxyZWFkeSBhc3NpZ25lZCBtX2ZvbnRGb3JBbGxHbHlw
aHMgaW4gdGhlIGNvbnN0cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZvbnQgPT0g
bV9mb250Rm9yQWxsR2x5cGhzKTsKK2NsYXNzIE1peGVkRm9udEdseXBoUGFnZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTWl4ZWRGb250R2x5cGhQYWdlKFJl
ZlB0cjxHbHlwaFBhZ2U+JiYgaW5pdGlhbFBhZ2UpCisgICAgeworICAgICAgICBpZiAoaW5pdGlh
bFBhZ2UpIHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6
OnNpemU7ICsraSkKKyAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBpbml0
aWFsUGFnZS0+Z2x5cGhEYXRhRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgaW5pdGlhbFBhZ2Ug
PSBudWxscHRyOworICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJ
bmRleCh1bnNpZ25lZCBpbmRleCwgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEpCisgICAgR2x5
cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAgICAgewotICAg
ICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRleCwgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERh
dGEuZm9udCk7CisgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JJbmRleChHbHlwaFBhZ2U6Omlu
ZGV4Rm9yQ2hhcmFjdGVyKGMpKTsKICAgICB9CiAKLSAgICAvLyBJbXBsZW1lbnRlZCBieSB0aGUg
cGxhdGZvcm0uCi0gICAgYm9vbCBmaWxsKFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEds
eXBoUGFnZShjb25zdCBGb250KiBmb250Rm9yQWxsR2x5cGhzKQotICAgICAgICA6IG1fZm9udEZv
ckFsbEdseXBocyhmb250Rm9yQWxsR2x5cGhzKQorICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIgYywgR2x5cGhEYXRhIGdseXBoRGF0YSkKICAgICB7Ci0gICAgICAgIG1l
bXNldChtX2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7Ci0gICAgICAgIGlmIChoYXNQZXJH
bHlwaEZvbnREYXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAw
LCBzaXplb2YoRm9udCopICogR2x5cGhQYWdlOjpzaXplKTsKLSAgICAgICAgKytzX2NvdW50Owor
ICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChHbHlwaFBhZ2U6OmluZGV4Rm9yQ2hhcmFjdGVy
KGMpLCBnbHlwaERhdGEpOwogICAgIH0KIAotICAgIGJvb2wgaGFzUGVyR2x5cGhGb250RGF0YSgp
IGNvbnN0IHsgcmV0dXJuICFtX2ZvbnRGb3JBbGxHbHlwaHM7IH0KK3ByaXZhdGU6CiAKLSAgICBj
b25zdCBGb250KiBtX2ZvbnRGb3JBbGxHbHlwaHM7Ci0gICAgR2x5cGggbV9nbHlwaHNbc2l6ZV07
CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAor
ICAgIHsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBH
bHlwaFBhZ2U6OnNpemUpOworICAgICAgICByZXR1cm4geyBtX2dseXBoc1tpbmRleF0sIG1fZm9u
dHNbaW5kZXhdIH07CisgICAgfQogCi0gICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFsc2UgfTsK
LSAgICAvLyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBp
ZiBtX2ZvbnRGb3JBbGxHbHlwaHMgaXMgbnVsbC4KLSAgICBjb25zdCBGb250KiBtX3BlckdseXBo
Rm9udERhdGFbMF07CisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCwgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEpCisgICAgeworICAgICAgICBBU1NFUlRfV0lU
SF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAg
IG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoRGF0YS5nbHlwaDsKKyAgICAgICAgbV9mb250c1tpbmRl
eF0gPSBnbHlwaERhdGEuZm9udDsKKyAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMg
dW5zaWduZWQgc19jb3VudDsKKyAgICBHbHlwaCBtX2dseXBoc1tHbHlwaFBhZ2U6OnNpemVdIHsg
fTsKKyAgICBjb25zdCBGb250KiBtX2ZvbnRzW0dseXBoUGFnZTo6c2l6ZV0geyB9OwogfTsKIAot
I2lmIENPTVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KIH0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEdseXBoUGFnZV9oCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVU
eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9m
cmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTg5NDY1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJl
ZU5vZGVGcmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDkgQEAgYm9vbCBH
bHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaQogCiAgICAgICAgIEdseXBoIGdseXBo
ID0gRmNGcmVlVHlwZUNoYXJJbmRleChmYWNlLCBjaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWds
eXBoKQotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCwgMCk7CisgICAgICAg
ICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCAwKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAg
ICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAgICAg
ICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGgpOwogICAgICAgICAgICAgaGF2ZUdseXBo
cyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAkocmV2aXNpb24gMTg5
NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1h
Yy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDggQEAgc3RhdGljIGJvb2wgc2hvdWxk
VXNlQ29yZVRleHQoY29uc3QgVUNoYQogCiBib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVm
ZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogeworICAg
IEFTU0VSVChmb250RGF0YSA9PSAmZm9udCgpKTsKKwogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZh
bHNlOwogCiAgICAgVmVjdG9yPENHR2x5cGgsIDUxMj4gZ2x5cGhzKGJ1ZmZlckxlbmd0aCk7CkBA
IC03MSw5ICs3Myw5IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kK
ICAgICAgICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udERhdGEtPnBsYXRmb3JtRGF0
YSgpLmNnRm9udCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkgewogICAg
ICAgICAgICAgaWYgKCFnbHlwaHNbaV0pCi0gICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9y
SW5kZXgoaSwgMCwgMCk7CisgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwg
MCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJ
bmRleChpLCBnbHlwaHNbaV0sIGZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICBzZXRHbHlwaERh
dGFGb3JJbmRleChpLCBnbHlwaHNbaV0pOwogICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0
cnVlOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MCw5ICs5Miw5IEBAIGJvb2wgR2x5
cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICAgICAgdW5zaWduZWQgZ2x5cGhT
dGVwID0gYnVmZmVyTGVuZ3RoIC8gR2x5cGhQYWdlOjpzaXplOwogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKICAgICAgICAgICAgIGlmICgh
Z2x5cGhzW2kgKiBnbHlwaFN0ZXBdKQotICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvcklu
ZGV4KGksIDAsIDApOworICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIDAp
OwogICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgoaSwgZ2x5cGhzW2kgKiBnbHlwaFN0ZXBdLCBmb250RGF0YSk7CisgICAgICAgICAgICAgICAg
c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhzW2kgKiBnbHlwaFN0ZXBdKTsKICAgICAgICAg
ICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0
aWNhbERhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL29wZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcAkocmV2aXNpb24gMTg5NDY1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0
aWNhbERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDQsMTAgKzU0NCwxMCBAQCB2b2lkIE9w
ZW5UeXBlVmVydGljYWxEYXRhOjpzdWJzdGl0dXRlV2l0CiAgICAgZm9yICh1bnNpZ25lZCBpbmRl
eCA9IDA7IGluZGV4IDwgR2x5cGhQYWdlOjpzaXplOyArK2luZGV4KSB7CiAgICAgICAgIEdseXBo
IGdseXBoID0gZ2x5cGhQYWdlLT5nbHlwaEF0KGluZGV4KTsKICAgICAgICAgaWYgKGdseXBoKSB7
Ci0gICAgICAgICAgICBBU1NFUlQoZ2x5cGhQYWdlLT5nbHlwaERhdGFGb3JJbmRleChpbmRleCku
Zm9udCA9PSBmb250KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm9udCwgJmdseXBoUGFn
ZS0+Zm9udCgpID09IGZvbnQpOwogICAgICAgICAgICAgR2x5cGggdG8gPSBtYXAuZ2V0KGdseXBo
KTsKICAgICAgICAgICAgIGlmICh0bykKLSAgICAgICAgICAgICAgICBnbHlwaFBhZ2UtPnNldEds
eXBoRGF0YUZvckluZGV4KGluZGV4LCB0bywgZm9udCk7CisgICAgICAgICAgICAgICAgZ2x5cGhQ
YWdlLT5zZXRHbHlwaERhdGFGb3JJbmRleChpbmRleCwgdG8pOwogICAgICAgICB9CiAgICAgfQog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRy
ZWVOb2RlQ0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcAkocmV2aXNpb24gMTg5NDY1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q0dXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0Nyw5IEBAIGJvb2wgR2x5cGhQYWdl
OjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R2x5cGhQYWdlOjpzaXplOyBpKyspIHsKICAgICAgICAgR2x5cGggZ2x5cGggPSBsb2NhbEdseXBo
QnVmZmVyW2ldOwogICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAgc2V0R2x5cGhEYXRh
Rm9ySW5kZXgoaSwgMCwgMCk7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCAw
KTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBn
bHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5
cGgpOwogICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVDYWlyb1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxODk0NjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5v
ZGVDYWlyb1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDkgQEAgYm9vbCBHbHlw
aFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKICAgICAgICAgICAgIEdseXBoIGdseXBo
ID0gbG9jYWxHbHlwaEJ1ZmZlcltpXTsKICAgICAgICAgICAgIGlmIChnbHlwaCA9PSAweGZmZmYp
Ci0gICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCwgMCk7CisgICAgICAg
ICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCk7CiAgICAgICAgICAgICBlbHNlIHsK
LSAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBnbHlwaCwgZm9udERhdGEp
OworICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIGdseXBoKTsKICAgICAg
ICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCShyZXZpc2lvbiAxODk0NjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQs
MTEgKzIwNCw4IEBAIGJvb2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24KICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlwaFBhZ2Uo
R2x5cGhQYWdlKiBwYWdlVG9GaWxsLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5n
dGgsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5
cGhQYWdlKEdseXBoUGFnZSogcGFnZVRvRmlsbCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoKSBjb25zdAogewotICAgIEFTU0VSVChmb250LT5pc0N1c3RvbUZvbnQoKSk7Ci0g
ICAgQVNTRVJUKGZvbnQtPmlzU1ZHRm9udCgpKTsKLQogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCog
Zm9udEZhY2VFbGVtZW50ID0gdGhpcy0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJU
KGZvbnRGYWNlRWxlbWVudCk7CiAKQEAgLTIxNiwxMyArMjEzLDEzIEBAIGJvb2wgU1ZHRm9udERh
dGE6OmZpbGxTVkdHbHlwaFBhZ2UoR2x5cGgKICAgICBBU1NFUlQoZm9udEVsZW1lbnQpOwogCiAg
ICAgaWYgKGJ1ZmZlckxlbmd0aCA9PSBHbHlwaFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBm
aWxsQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBidWZmZXIsIGZvbnQpOworICAg
ICAgICByZXR1cm4gZmlsbEJNUEdseXBocyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgYnVmZmVy
KTsKIAogICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gMiAqIEdseXBoUGFnZTo6c2l6ZSk7Ci0g
ICAgcmV0dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIGJ1ZmZl
ciwgZm9udCk7CisgICAgcmV0dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VU
b0ZpbGwsIGJ1ZmZlcik7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZH
Rm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIFVDaGFyKiBi
dWZmZXIsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsQk1Q
R2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxs
LCBVQ2hhciogYnVmZmVyKSBjb25zdAogewogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwog
ICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwpAQCAtMjMwLDcgKzIyNyw3IEBAIGJvb2wgU1ZH
Rm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEUKICAgICAgICAgU3RyaW5nIGxvb2t1cFN0
cmluZyhidWZmZXIgKyBpLCAxKTsKICAgICAgICAgZm9udEVsZW1lbnQtPmNvbGxlY3RHbHlwaHNG
b3JTdHJpbmcobG9va3VwU3RyaW5nLCBnbHlwaHMpOwogICAgICAgICBpZiAoZ2x5cGhzLmlzRW1w
dHkoKSkgewotICAgICAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwg
MCwgMCk7CisgICAgICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCAw
KTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTIzOSwxNCArMjM2LDE0
IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEUKICAgICAgICAgLy8g
Y2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25lcyBh
cmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRoaW4g
dGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAgICAg
ICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFG
b3JJbmRleChpLCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250KTsKKyAgICAgICAgcGFn
ZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRy
eSk7CiAgICAgICAgIGdseXBocy5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVybiBoYXZlR2x5
cGhzOwogfQogCi1ib29sIFNWR0ZvbnREYXRhOjpmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVt
ZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCBVQ2hhciogYnVmZmVyLCBj
b25zdCBGb250KiBmb250KSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBo
cyhTVkdGb250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgVUNo
YXIqIGJ1ZmZlcikgY29uc3QKIHsKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBW
ZWN0b3I8U1ZHR2x5cGg+IGdseXBoczsKQEAgLTI1NSw3ICsyNTIsNyBAQCBib29sIFNWR0ZvbnRE
YXRhOjpmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvCiAgICAgICAgIFN0cmluZyBsb29rdXBTdHJpbmco
YnVmZmVyICsgaSAqIDIsIDIpOwogICAgICAgICBmb250RWxlbWVudC0+Y29sbGVjdEdseXBoc0Zv
clN0cmluZyhsb29rdXBTdHJpbmcsIGdseXBocyk7CiAgICAgICAgIGlmIChnbHlwaHMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCAw
LCAwKTsKKyAgICAgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KGksIDAp
OwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjY0LDcgKzI2MSw3IEBA
IGJvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm8KICAgICAgICAgLy8gY2Fy
ZSBvZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25lcyBhcmUg
YXZhaWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRoaW4gdGhl
IGNvbnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAgICAgICAg
IGhhdmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJ
bmRleChpLCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250KTsKKyAgICAgICAgcGFnZVRv
RmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSk7
CiAgICAgICAgIGdseXBocy5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUv
c3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmgJKHJldmlzaW9uIDE4OTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250
RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKIAogICAgIHZp
cnR1YWwgdm9pZCBpbml0aWFsaXplRm9udChGb250KiwgZmxvYXQgZm9udFNpemUpIG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNp
emUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEds
eXBoUGFnZSosIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9u
dCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEds
eXBoUGFnZSosIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkgY29uc3Qgb3Zl
cnJpZGU7CiAKICAgICBib29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYs
IEdseXBoRGF0YSYsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQm
IGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBjb25z
dDsKIApAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgdmVydGljYWxBZHZhbmNl
WSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxBZHZhbmNlWTsgfQogCiBwcml2YXRlOgotICAg
IGJvb2wgZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSosIFVDaGFyKiBi
dWZmZXIsIGNvbnN0IEZvbnQqKSBjb25zdDsKLSAgICBib29sIGZpbGxOb25CTVBHbHlwaHMoU1ZH
Rm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KikgY29u
c3Q7CisgICAgYm9vbCBmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdlKiwg
VUNoYXIqIGJ1ZmZlcikgY29uc3Q7CisgICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRF
bGVtZW50KiwgR2x5cGhQYWdlKiwgVUNoYXIqIGJ1ZmZlcikgY29uc3Q7CiAKICAgICBib29sIGFw
cGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBoKiwgR2x5cGhCdWZmZXJBZHZhbmNlKiwgc2l6
ZV90LCBUeXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdCA9IGRlbGV0ZTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260783</attachid>
            <date>2015-09-08 12:46:36 -0700</date>
            <delta_ts>2015-09-09 04:41:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>glyph-page-split-3.patch</filename>
            <type>text/plain</type>
            <size>29507</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTQ5MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBACisyMDE1LTA5LTA4ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBtaXhlZCBmb250IEds
eXBoUGFnZSBmdW5jdGlvbmFsaXR5IHRvIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5NjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBDdXJyZW50bHkgR2x5cGhQYWdlIGNsYXNz
IGlzIHVzZWQgZm9yIGJvdGggaW1tdXRhYmxlIHNpbmdsZSBmb250IGNhc2UgKGluIEZvbnQpIGFu
ZAorICAgICAgICBmb3IgY2FjaGluZyBtaXhlZCBmb250IG1hcHBpbmdzIChpbiBGb250Q2FzY2Fk
ZUZvbnRzKS4gSXQgaXMgY2xlYW5lciB0byB1c2Ugc2VwYXJhdGUKKyAgICAgICAgY2xhc3NlZCBm
b3IgdGhlc2UgY2FzZXMuIFRoaXMgd2lsbCBhbHNvIG1ha2UgZnV0dXJlIGltcHJvdmVtZW50cyBl
YXNpZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6On5Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxHbHlwaFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kRmlsbEdseXBoUGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpnbHlwaFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhG
b3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250Q2FzY2FkZUZvbnRzOjpHbHlwaFBhZ2VDYWNoZUVudHJ5OjpnbHlwaERhdGFGb3JDaGFyYWN0
ZXIpOgorCisgICAgICAgICAgICBDYWNoZSBlbnRyeSBpcyBlaXRoZXIgc2luZ2xlIGZvbnQgR2x5
cGhQYWdlIG9yIE1peGVkRm9udEdseXBoUGFnZS4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENh
c2NhZGVGb250czo6R2x5cGhQYWdlQ2FjaGVFbnRyeTo6c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KToKKworICAgICAgICAgICAgU2V0dGluZyBhbiBpbmRpdmlkdWFsIGdseXBoIHN3aXRjaGVzIHRv
IE1peGVkRm9udEdseXBoUGFnZS4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250
czo6R2x5cGhQYWdlQ2FjaGVFbnRyeTo6c2V0U2luZ2xlRm9udFBhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGVGb250czo6Rm9udENhc2NhZGVGb250cyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6cHJ1bmVTeXN0ZW1GYWxsYmFja3MpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnRDYXNjYWRlRm9udHM6OkdseXBoUGFnZUNhY2hlRW50cnk6OmlzTnVsbCk6CisgICAg
ICAgIChXZWJDb3JlOjpGb250Q2FzY2FkZUZvbnRzOjpHbHlwaFBhZ2VDYWNoZUVudHJ5Ojppc01p
eGVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HbHlwaFBhZ2UuaDoKKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoUGFnZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFn
ZTo6fkdseXBoUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmNvdW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6aW5kZXhGb3JDaGFyYWN0ZXIpOgorICAgICAgICAo
V2ViQ29yZTo6R2x5cGhQYWdlOjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R2x5cGhQYWdlOjpnbHlwaEZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFBhZ2U6OmdseXBoRGF0YUZvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFn
ZTo6c2V0R2x5cGhEYXRhRm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpm
b250KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6R2x5cGhQYWdlKToKKworICAgICAg
ICAgICAgR2x5cGhQYWdlIGlzIG5vdyBmb3Igc2luZ2xlIGZvbnQgbWFwcGluZ3Mgb25seS4KKyAg
ICAgICAgICAgIEl0IGNhbiBub3cgdXNlIHJlZ3VsYXIgYWxsb2NhdGlvbiBpbnN0ZWFkIG9mIHZh
cmlhYmxlIHNpemUgdHJpY2tzLgorICAgICAgICAgICAgSXQgaXMgYWx3YXlzIGltbXV0YWJsZSBh
ZnRlciBpbml0aWFsaXphdGlvbiAodGhvdWdoIGN1cnJlbnRseSBhIHNldHRlciBpcyBzdGlsbCBu
ZWVkZWQpLgorCisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6OmdseXBoRGF0YUZvckNoYXJh
Y3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6OnNldEdseXBoRGF0
YUZvckNoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6Ok1p
eGVkRm9udEdseXBoUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6
OmdseXBoRGF0YUZvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6Ok1peGVkRm9udEdseXBoUGFn
ZTo6c2V0R2x5cGhEYXRhRm9ySW5kZXgpOgorCisgICAgICAgICAgICBOZXcgbXV0YWJsZSB0eXBl
IHdpdGggcGVyLWdseXBoIGZvbnQuCisKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Y3Jl
YXRlRm9yTWl4ZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6
OmNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoUGFnZTo6Y3JlYXRlRm9yU2luZ2xlRm9udCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHbHlwaFBhZ2U6OmlzSW1tdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoUGFnZTo6c2V0SW1tdXRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdseXBo
UGFnZTo6Z2x5cGhBdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZv
bnRGb3JDaGFyYWN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpz
ZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6R2x5
cGhQYWdlOjpoYXNQZXJHbHlwaEZvbnREYXRhKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0dseXBoUGFnZU1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZp
bGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBlVmVydGlj
YWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBlVmVydGljYWxEYXRhOjpzdWJz
dGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93
aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBh
Z2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HbHlwaFBhZ2VUcmVl
Tm9kZUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6Cisg
ICAgICAgICogc3ZnL1NWR0ZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRE
YXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnRE
YXRhOjpmaWxsU1ZHR2x5cGhQYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpm
aWxsQk1QR2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpmaWxsTm9uQk1Q
R2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udERhdGEuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ZvbnREYXRhOjp2ZXJ0aWNhbEFkdmFuY2VZKToKKwogMjAxNS0wOS0wOCAgR3l1eW91bmcg
S2ltICA8Z3l1eW91bmcua2ltQHdlYmtpdC5vcmc+CiAKICAgICAgICAgUmVkdWNlIHVzZXMgb2Yg
UGFzc1JlZlB0ciBpbiBmaWxlYXBpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAkocmV2aXNpb24gMTg5NDY2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OSwyNyArMTQ5LDI3IEBA
IEZvbnQ6On5Gb250KCkKICAgICByZW1vdmVGcm9tU3lzdGVtRmFsbGJhY2tDYWNoZSgpOwogfQog
Ci1zdGF0aWMgYm9vbCBmaWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRvRmlsbCwgVUNoYXIq
IGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250KQorc3RhdGlj
IGJvb2wgZmlsbEdseXBoUGFnZShHbHlwaFBhZ2UmIHBhZ2VUb0ZpbGwsIFVDaGFyKiBidWZmZXIs
IHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCYgZm9udCkKIHsKICNpZiBFTkFCTEUo
U1ZHX0ZPTlRTKQotICAgIGlmIChhdXRvKiBzdmdEYXRhID0gZm9udC0+c3ZnRGF0YSgpKQotICAg
ICAgICByZXR1cm4gc3ZnRGF0YS0+ZmlsbFNWR0dseXBoUGFnZSgmcGFnZVRvRmlsbCwgYnVmZmVy
LCBidWZmZXJMZW5ndGgsIGZvbnQpOworICAgIGlmIChhdXRvKiBzdmdEYXRhID0gZm9udC5zdmdE
YXRhKCkpCisgICAgICAgIHJldHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9G
aWxsLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCk7CiAjZW5kaWYKLSAgICBib29sIGhhc0dseXBocyA9
IHBhZ2VUb0ZpbGwuZmlsbChidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CisgICAgYm9vbCBo
YXNHbHlwaHMgPSBwYWdlVG9GaWxsLmZpbGwoYnVmZmVyLCBidWZmZXJMZW5ndGgsICZmb250KTsK
ICNpZiBFTkFCTEUoT1BFTlRZUEVfVkVSVElDQUwpCi0gICAgaWYgKGhhc0dseXBocyAmJiBmb250
LT52ZXJ0aWNhbERhdGEoKSkKLSAgICAgICAgZm9udC0+dmVydGljYWxEYXRhKCktPnN1YnN0aXR1
dGVXaXRoVmVydGljYWxHbHlwaHMoZm9udCwgJnBhZ2VUb0ZpbGwpOworICAgIGlmIChoYXNHbHlw
aHMgJiYgZm9udC52ZXJ0aWNhbERhdGEoKSkKKyAgICAgICAgZm9udC52ZXJ0aWNhbERhdGEoKS0+
c3Vic3RpdHV0ZVdpdGhWZXJ0aWNhbEdseXBocygmZm9udCwgJnBhZ2VUb0ZpbGwpOwogI2VuZGlm
CiAgICAgcmV0dXJuIGhhc0dseXBoczsKIH0KIAotc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNy
ZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFnZU51bWJlciwgY29uc3QgRm9udCogZm9u
dCkKK3N0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKHVuc2ln
bmVkIHBhZ2VOdW1iZXIsIGNvbnN0IEZvbnQmIGZvbnQpCiB7CiAjaWYgUExBVEZPUk0oSU9TKQog
ICAgIC8vIEZJWE1FOiBUaW1lcyBOZXcgUm9tYW4gY29udGFpbnMgQXJhYmljIGdseXBocywgYnV0
IENvcmUgVGV4dCBkb2Vzbid0IGtub3cgaG93IHRvIHNoYXBlIHRoZW0uIFNlZSA8cmRhcjovL3By
b2JsZW0vOTgyMzk3NT4uCiAgICAgLy8gT25jZSB3ZSBoYXZlIHRoZSBmaXggZm9yIDxyZGFyOi8v
cHJvYmxlbS85ODIzOTc1PiB0aGVuIHJlbW92ZSB0aGlzIGNvZGUgdG9nZXRoZXIgd2l0aCBGb250
OjpzaG91bGROb3RCZVVzZWRGb3JBcmFiaWMoKQogICAgIC8vIGluIDxyZGFyOi8vcHJvYmxlbS8x
MjA5NjgzNT4uCi0gICAgaWYgKHBhZ2VOdW1iZXIgPT0gNiAmJiBmb250LT5zaG91bGROb3RCZVVz
ZWRGb3JBcmFiaWMoKSkKKyAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIGZvbnQuc2hvdWxkTm90
QmVVc2VkRm9yQXJhYmljKCkpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogI2VuZGlmCiAKQEAg
LTIyNiwyNiArMjI2LDI1IEBAIHN0YXRpYyBSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVBbmRGaWxs
R2wKICAgICAvLyByb3V0aW5lIG9mIG91ciBnbHlwaCBtYXAgZm9yIGFjdHVhbGx5IGZpbGxpbmcg
aW4gdGhlIHBhZ2Ugd2l0aCB0aGUgZ2x5cGhzLgogICAgIC8vIFN1Y2Nlc3MgaXMgbm90IGd1YXJh
bnRlZWQuIEZvciBleGFtcGxlLCBUaW1lcyBmYWlscyB0byBmaWxsIHBhZ2UgMjYwLCBnaXZpbmcg
Z2x5cGggZGF0YQogICAgIC8vIGZvciBvbmx5IDEyOCBvdXQgb2YgMjU2IGNoYXJhY3RlcnMuCi0g
ICAgUmVmUHRyPEdseXBoUGFnZT4gZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JTaW5n
bGVGb250KGZvbnQpOworICAgIFJlZjxHbHlwaFBhZ2U+IGdseXBoUGFnZSA9IEdseXBoUGFnZTo6
Y3JlYXRlKGZvbnQpOwogCi0gICAgYm9vbCBoYXZlR2x5cGhzID0gZmlsbEdseXBoUGFnZSgqZ2x5
cGhQYWdlLCBidWZmZXIsIGJ1ZmZlckxlbmd0aCwgZm9udCk7CisgICAgYm9vbCBoYXZlR2x5cGhz
ID0gZmlsbEdseXBoUGFnZShnbHlwaFBhZ2UsIGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsK
ICAgICBpZiAoIWhhdmVHbHlwaHMpCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgZ2x5
cGhQYWdlLT5zZXRJbW11dGFibGUoKTsKLSAgICByZXR1cm4gZ2x5cGhQYWdlOworICAgIHJldHVy
biBXVEY6Om1vdmUoZ2x5cGhQYWdlKTsKIH0KIAogY29uc3QgR2x5cGhQYWdlKiBGb250OjpnbHlw
aFBhZ2UodW5zaWduZWQgcGFnZU51bWJlcikgY29uc3QKIHsKICAgICBpZiAoIXBhZ2VOdW1iZXIp
IHsKICAgICAgICAgaWYgKCFtX2dseXBoUGFnZVplcm8pCi0gICAgICAgICAgICBtX2dseXBoUGFn
ZVplcm8gPSBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKDAsIHRoaXMpOworICAgICAgICAgICAgbV9n
bHlwaFBhZ2VaZXJvID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZSgwLCAqdGhpcyk7CiAgICAgICAg
IHJldHVybiBtX2dseXBoUGFnZVplcm8uZ2V0KCk7CiAgICAgfQogICAgIGF1dG8gYWRkUmVzdWx0
ID0gbV9nbHlwaFBhZ2VzLmFkZChwYWdlTnVtYmVyLCBudWxscHRyKTsKICAgICBpZiAoYWRkUmVz
dWx0LmlzTmV3RW50cnkpCi0gICAgICAgIGFkZFJlc3VsdC5pdGVyYXRvci0+dmFsdWUgPSBjcmVh
dGVBbmRGaWxsR2x5cGhQYWdlKHBhZ2VOdW1iZXIsIHRoaXMpOworICAgICAgICBhZGRSZXN1bHQu
aXRlcmF0b3ItPnZhbHVlID0gY3JlYXRlQW5kRmlsbEdseXBoUGFnZShwYWdlTnVtYmVyLCAqdGhp
cyk7CiAKICAgICByZXR1cm4gYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS5nZXQoKTsKIH0KQEAg
LTI1NSw3ICsyNTQsNyBAQCBHbHlwaCBGb250OjpnbHlwaEZvckNoYXJhY3RlcihVQ2hhcjMyIGNo
CiAgICAgYXV0byogcGFnZSA9IGdseXBoUGFnZShjaGFyYWN0ZXIgLyBHbHlwaFBhZ2U6OnNpemUp
OwogICAgIGlmICghcGFnZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIHBhZ2UtPmds
eXBoQXQoY2hhcmFjdGVyICUgR2x5cGhQYWdlOjpzaXplKTsKKyAgICByZXR1cm4gcGFnZS0+Z2x5
cGhGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKIH0KIAogR2x5cGhEYXRhIEZvbnQ6OmdseXBoRGF0
YUZvckNoYXJhY3RlcihVQ2hhcjMyIGNoYXJhY3RlcikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE4OTQ2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtNzYsNyAr
NzYsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgdmlydHVhbCB2b2lkIGluaXRpYWxpemVGb250KEZv
bnQqLCBmbG9hdCBmb250U2l6ZSkgPSAwOwogICAgICAgICB2aXJ0dWFsIGZsb2F0IHdpZHRoRm9y
U1ZHR2x5cGgoR2x5cGgsIGZsb2F0IGZvbnRTaXplKSBjb25zdCA9IDA7Ci0gICAgICAgIHZpcnR1
YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIFVDaGFyKiBidWZmZXIsIHVuc2ln
bmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopIGNvbnN0ID0gMDsKKyAgICAgICAgdmlydHVh
bCBib29sIGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgVUNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoKSBjb25zdCA9IDA7CiAgICAgfTsKIAogICAgIC8vIFVzZWQgdG8gY3Jl
YXRlIHBsYXRmb3JtIGZvbnRzLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvRm9udENhc2NhZGVGb250cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHJldmlzaW9uIDE4OTIwNikKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSwyOSBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
K0dseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpHbHlwaFBhZ2VDYWNoZUVudHJ5OjpnbHlwaERh
dGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjaGFyYWN0ZXIpCit7CisgICAgQVNTRVJUKCEobV9zaW5n
bGVGb250ICYmIG1fbWl4ZWRGb250KSk7CisgICAgaWYgKG1fc2luZ2xlRm9udCkKKyAgICAgICAg
cmV0dXJuIG1fc2luZ2xlRm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7Cisg
ICAgaWYgKG1fbWl4ZWRGb250KQorICAgICAgICByZXR1cm4gbV9taXhlZEZvbnQtPmdseXBoRGF0
YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEZvbnRD
YXNjYWRlRm9udHM6OkdseXBoUGFnZUNhY2hlRW50cnk6OnNldEdseXBoRGF0YUZvckNoYXJhY3Rl
cihVQ2hhcjMyIGNoYXJhY3RlciwgR2x5cGhEYXRhIGdseXBoRGF0YSkKK3sKKyAgICBBU1NFUlQo
IWdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIpLmdseXBoKTsKKyAgICBpZiAoIW1fbWl4
ZWRGb250KQorICAgICAgICBtX21peGVkRm9udCA9IHN0ZDo6bWFrZV91bmlxdWU8TWl4ZWRGb250
R2x5cGhQYWdlPihXVEY6Om1vdmUobV9zaW5nbGVGb250KSk7CisgICAgbV9taXhlZEZvbnQtPnNl
dEdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGdseXBoRGF0YSk7Cit9CisKK3ZvaWQg
Rm9udENhc2NhZGVGb250czo6R2x5cGhQYWdlQ2FjaGVFbnRyeTo6c2V0U2luZ2xlRm9udFBhZ2Uo
UmVmUHRyPEdseXBoUGFnZT4mJiBwYWdlKQoreworICAgIEFTU0VSVChpc051bGwoKSk7CisgICAg
bV9zaW5nbGVGb250ID0gV1RGOjptb3ZlKHBhZ2UpOworfQogCiBGb250Q2FzY2FkZUZvbnRzOjpG
b250Q2FzY2FkZUZvbnRzKFJlZlB0cjxGb250U2VsZWN0b3I+JiYgZm9udFNlbGVjdG9yKQogICAg
IDogbV9jYWNoZWRQcmltYXJ5Rm9udChudWxscHRyKQpAQCAtMzcxLDIwICszOTQsMjAgQEAgR2x5
cGhEYXRhIEZvbnRDYXNjYWRlRm9udHM6OmdseXBoRGF0YUZvcgogCiAgICAgY29uc3QgdW5zaWdu
ZWQgcGFnZU51bWJlciA9IGMgLyBHbHlwaFBhZ2U6OnNpemU7CiAKLSAgICBSZWZQdHI8R2x5cGhQ
YWdlPiYgY2FjaGVkUGFnZSA9IHBhZ2VOdW1iZXIgPyBtX2NhY2hlZFBhZ2VzLmFkZChwYWdlTnVt
YmVyLCBudWxscHRyKS5pdGVyYXRvci0+dmFsdWUgOiBtX2NhY2hlZFBhZ2VaZXJvOwotICAgIGlm
ICghY2FjaGVkUGFnZSkKLSAgICAgICAgY2FjaGVkUGFnZSA9IGdseXBoUGFnZUZyb21Gb250UmFu
Z2VzKHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKSk7
CisgICAgYXV0byYgY2FjaGVFbnRyeSA9IHBhZ2VOdW1iZXIgPyBtX2NhY2hlZFBhZ2VzLmFkZChw
YWdlTnVtYmVyLCBHbHlwaFBhZ2VDYWNoZUVudHJ5KCkpLml0ZXJhdG9yLT52YWx1ZSA6IG1fY2Fj
aGVkUGFnZVplcm87CiAKLSAgICBHbHlwaERhdGEgZ2x5cGhEYXRhID0gY2FjaGVkUGFnZSA/IGNh
Y2hlZFBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKSA6IEdseXBoRGF0YSgpOwotICAgIGlm
ICghZ2x5cGhEYXRhLmdseXBoKSB7Ci0gICAgICAgIGlmICghY2FjaGVkUGFnZSkKLSAgICAgICAg
ICAgIGNhY2hlZFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udHMoKTsKLSAgICAg
ICAgZWxzZSBpZiAoY2FjaGVkUGFnZS0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgICAgIGNhY2hl
ZFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKCpjYWNoZWRQYWdlKTsK
KyAgICAvLyBJbml0dWFsaXplIGNhY2hlIHdpdGggYSBmdWxsIHBhZ2Ugb2YgZ2x5cGggbWFwcGlu
Z3MgZnJvbSBhIHNpbmdsZSBmb250LgorICAgIGlmIChjYWNoZUVudHJ5LmlzTnVsbCgpKQorICAg
ICAgICBjYWNoZUVudHJ5LnNldFNpbmdsZUZvbnRQYWdlKGdseXBoUGFnZUZyb21Gb250UmFuZ2Vz
KHBhZ2VOdW1iZXIsIHJlYWxpemVGYWxsYmFja1Jhbmdlc0F0KGRlc2NyaXB0aW9uLCAwKSkpOwog
CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YSA9IGNhY2hlRW50cnkuZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGMpOworICAgIGlmICghZ2x5cGhEYXRhLmdseXBoKSB7CisgICAgICAgIC8vIE5vIGdseXBo
LCByZXNvbHZlIHBlci1jaGFyYWN0ZXIuCiAgICAgICAgIGdseXBoRGF0YSA9IGdseXBoRGF0YUZv
ck5vcm1hbFZhcmlhbnQoYywgZGVzY3JpcHRpb24pOwotICAgICAgICBjYWNoZWRQYWdlLT5zZXRH
bHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7
CisgICAgICAgIC8vIENhY2hlIHRoZSByZXN1bHRzLgorICAgICAgICBjYWNoZUVudHJ5LnNldEds
eXBoRGF0YUZvckNoYXJhY3RlcihjLCBnbHlwaERhdGEpOwogICAgIH0KKwogICAgIHJldHVybiBn
bHlwaERhdGE7CiB9CiAKQEAgLTM5MywxMCArNDE2LDEwIEBAIHZvaWQgRm9udENhc2NhZGVGb250
czo6cHJ1bmVTeXN0ZW1GYWxsYmEKICAgICBpZiAobV9zeXN0ZW1GYWxsYmFja0ZvbnRTZXQuaXNF
bXB0eSgpKQogICAgICAgICByZXR1cm47CiAgICAgLy8gTXV0YWJsZSBnbHlwaCBwYWdlcyBtYXkg
cmVmZXJlbmNlIGZhbGxiYWNrIGZvbnRzLgotICAgIGlmIChtX2NhY2hlZFBhZ2VaZXJvICYmICFt
X2NhY2hlZFBhZ2VaZXJvLT5pc0ltbXV0YWJsZSgpKQotICAgICAgICBtX2NhY2hlZFBhZ2VaZXJv
ID0gbnVsbHB0cjsKKyAgICBpZiAobV9jYWNoZWRQYWdlWmVyby5pc01peGVkKCkpCisgICAgICAg
IG1fY2FjaGVkUGFnZVplcm8gPSB7IH07CiAgICAgbV9jYWNoZWRQYWdlcy5yZW1vdmVJZihbXShk
ZWNsdHlwZShtX2NhY2hlZFBhZ2VzKTo6S2V5VmFsdWVQYWlyVHlwZSYga2V5QW5kVmFsdWUpIHsK
LSAgICAgICAgcmV0dXJuICFrZXlBbmRWYWx1ZS52YWx1ZS0+aXNJbW11dGFibGUoKTsKKyAgICAg
ICAgcmV0dXJuIGtleUFuZFZhbHVlLnZhbHVlLmlzTWl4ZWQoKTsKICAgICB9KTsKICAgICBtX3N5
c3RlbUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMuaAkocmV2aXNpb24gMTg5
MjA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC04Miw4ICs4MiwyNCBAQCBwcml2YXRlOgogICAgIFZlY3Rv
cjxGb250UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5zaWduZWQg
bV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OwogCi0gICAgUmVmUHRyPEdseXBoUGFn
ZT4gbV9jYWNoZWRQYWdlWmVybzsKLSAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBoUGFnZT4+
IG1fY2FjaGVkUGFnZXM7CisgICAgY2xhc3MgR2x5cGhQYWdlQ2FjaGVFbnRyeSB7CisgICAgcHVi
bGljOgorICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIpOwor
CisgICAgICAgIHZvaWQgc2V0U2luZ2xlRm9udFBhZ2UoUmVmUHRyPEdseXBoUGFnZT4mJik7Cisg
ICAgICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIEdseXBoRGF0YSk7
CisKKyAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9zaW5nbGVGb250ICYm
ICFtX21peGVkRm9udDsgfQorICAgICAgICBib29sIGlzTWl4ZWQoKSBjb25zdCB7IHJldHVybiAh
IW1fbWl4ZWRGb250OyB9CisgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgLy8gT25seSBvbmUg
b2YgdGhlc2UgaXMgbm9uLW51bGwuCisgICAgICAgIFJlZlB0cjxHbHlwaFBhZ2U+IG1fc2luZ2xl
Rm9udDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPE1peGVkRm9udEdseXBoUGFnZT4gbV9taXhl
ZEZvbnQ7CisgICAgfTsKKworICAgIEdseXBoUGFnZUNhY2hlRW50cnkgbV9jYWNoZWRQYWdlWmVy
bzsKKyAgICBIYXNoTWFwPGludCwgR2x5cGhQYWdlQ2FjaGVFbnRyeT4gbV9jYWNoZWRQYWdlczsK
IAogICAgIEhhc2hTZXQ8UmVmUHRyPEZvbnQ+PiBtX3N5c3RlbUZhbGxiYWNrRm9udFNldDsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR2x5cGhQYWdlLmgJKHJl
dmlzaW9uIDE4OTQ2NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MywzNyArNTMsMTQgQEAgc3RydWN0IEdseXBoRGF0
YSB7CiAgICAgY29uc3QgRm9udCogZm9udDsKIH07CiAKLSNpZiBDT01QSUxFUihNU1ZDKQotI3By
YWdtYSB3YXJuaW5nKHB1c2gpCi0jcHJhZ21hIHdhcm5pbmcoZGlzYWJsZTogNDIwMCkgLy8gRGlz
YWJsZSAiemVyby1zaXplZCBhcnJheSBpbiBzdHJ1Y3QvdW5pb24iIHdhcm5pbmcKLSNlbmRpZgot
CiAvLyBBIEdseXBoUGFnZSBjb250YWlucyBhIGZpeGVkLXNpemUgc2V0IG9mIEdseXBoRGF0YSBt
YXBwaW5ncyBmb3IgYSBjb250aWd1b3VzCiAvLyByYW5nZSBvZiBjaGFyYWN0ZXJzIGluIHRoZSBV
bmljb2RlIGNvZGUgc3BhY2UuIEdseXBoUGFnZXMgYXJlIGluZGV4ZWQKIC8vIHN0YXJ0aW5nIGZy
b20gMCBhbmQgaW5jcmVtZW50aW5nIGZvciBlYWNoIDI1NiBnbHlwaHMuCi0vLwotLy8gT25lIHBh
Z2UgbWF5IGFjdHVhbGx5IGluY2x1ZGUgZ2x5cGhzIGZyb20gb3RoZXIgZm9udHMgaWYgdGhlIGNo
YXJhY3RlcnMgYXJlCi0vLyBtaXNzaW5nIGluIHRoZSBwcmltYXJ5IGZvbnQuCiBjbGFzcyBHbHlw
aFBhZ2UgOiBwdWJsaWMgUmVmQ291bnRlZDxHbHlwaFBhZ2U+IHsKIHB1YmxpYzoKLSAgICBzdGF0
aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUZvck1peGVkRm9udHMoKQotICAgIHsKLSAg
ICAgICAgdm9pZCogc2xvdCA9IGZhc3RNYWxsb2Moc2l6ZW9mKEdseXBoUGFnZSkgKyBzaXplb2Yo
Rm9udCopICogR2x5cGhQYWdlOjpzaXplKTsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyAo
Tm90TnVsbCwgc2xvdCkgR2x5cGhQYWdlKG51bGxwdHIpKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMg
UGFzc1JlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUNvcHlGb3JNaXhlZEZvbnRzKGNvbnN0IEdseXBo
UGFnZSYgb3JpZ2luYWwpCi0gICAgewotICAgICAgICBSZWZQdHI8R2x5cGhQYWdlPiBwYWdlID0g
Y3JlYXRlRm9yTWl4ZWRGb250cygpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
R2x5cGhQYWdlOjpzaXplOyArK2kpCi0gICAgICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JJ
bmRleChpLCBvcmlnaW5hbC5nbHlwaERhdGFGb3JJbmRleChpKSk7Ci0gICAgICAgIHJldHVybiBw
YWdlLnJlbGVhc2UoKTsKLSAgICB9Ci0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxHbHlwaFBhZ2U+
IGNyZWF0ZUZvclNpbmdsZUZvbnQoY29uc3QgRm9udCogZm9udCkKKyAgICBzdGF0aWMgUmVmPEds
eXBoUGFnZT4gY3JlYXRlKGNvbnN0IEZvbnQmIGZvbnQpCiAgICAgewotICAgICAgICBBU1NFUlQo
Zm9udCk7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgR2x5cGhQYWdlKGZvbnQpKTsKKyAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR2x5cGhQYWdlKGZvbnQpKTsKICAgICB9CiAKICAg
ICB+R2x5cGhQYWdlKCkKQEAgLTkxLDk5ICs2OCw5NyBAQCBwdWJsaWM6CiAgICAgICAgIC0tc19j
b3VudDsKICAgICB9CiAKLSAgICBib29sIGlzSW1tdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9p
c0ltbXV0YWJsZTsgfQotICAgIHZvaWQgc2V0SW1tdXRhYmxlKCkgeyBtX2lzSW1tdXRhYmxlID0g
dHJ1ZTsgfQotCiAgICAgc3RhdGljIHVuc2lnbmVkIGNvdW50KCkgeyByZXR1cm4gc19jb3VudDsg
fQogCiAgICAgc3RhdGljIGNvbnN0IHNpemVfdCBzaXplID0gMjU2OyAvLyBDb3ZlcnMgTGF0aW4t
MSBpbiBhIHNpbmdsZSBwYWdlLgotICAgIHN0YXRpY19hc3NlcnQoKCEoMHhEODAwICUgc2l6ZSkp
ICYmICghKDB4REMwMCAlIHNpemUpKSAmJiAoISgweEUwMDAgJSBzaXplKSksICJHbHlwaFBhZ2Vz
IG11c3QgbmV2ZXIgc3RyYWRkbGUgY29kZS11bml0IGxlbmd0aCBib3VuZGFyaWVzIik7CiAgICAg
c3RhdGljIHVuc2lnbmVkIGluZGV4Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgeyByZXR1cm4gYyAl
IEdseXBoUGFnZTo6c2l6ZTsgfQogCi0gICAgQUxXQVlTX0lOTElORSBHbHlwaERhdGEgZ2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRh
Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKICAgICB7CiAgICAgICAgIHJldHVybiBnbHlw
aERhdGFGb3JJbmRleChpbmRleEZvckNoYXJhY3RlcihjKSk7CiAgICAgfQogCi0gICAgQUxXQVlT
X0lOTElORSBHbHlwaERhdGEgZ2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0
CisgICAgR2x5cGggZ2x5cGhGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fZ2x5cGhzW2luZGV4Rm9yQ2hhcmFjdGVyKGMpXTsKKyAgICB9CisKKyAg
ICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpIGNvbnN0CiAgICAg
ewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8IHNpemUp
OwogICAgICAgICBHbHlwaCBnbHlwaCA9IG1fZ2x5cGhzW2luZGV4XTsKLSAgICAgICAgaWYgKGhh
c1BlckdseXBoRm9udERhdGEoKSkKLSAgICAgICAgICAgIHJldHVybiBHbHlwaERhdGEoZ2x5cGgs
IG1fcGVyR2x5cGhGb250RGF0YVtpbmRleF0pOwotICAgICAgICByZXR1cm4gR2x5cGhEYXRhKGds
eXBoLCBnbHlwaCA/IG1fZm9udEZvckFsbEdseXBocyA6IDApOworICAgICAgICByZXR1cm4gR2x5
cGhEYXRhKGdseXBoLCBnbHlwaCA/ICZtX2ZvbnQgOiBudWxscHRyKTsKICAgICB9CiAKLSAgICBB
TFdBWVNfSU5MSU5FIEdseXBoIGdseXBoQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgLy8g
RklYTUU6IFBhZ2VzIGFyZSBpbW11dGFibGUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIFRoaXMgc2hv
dWxkIGJlIHByaXZhdGUuCisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBp
bmRleCwgR2x5cGggZ2x5cGgpCiAgICAgewogICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9J
TVBMSUNBVElPTihpbmRleCA8IHNpemUpOwotICAgICAgICByZXR1cm4gbV9nbHlwaHNbaW5kZXhd
OworICAgICAgICBtX2dseXBoc1tpbmRleF0gPSBnbHlwaDsKICAgICB9CiAKLSAgICBBTFdBWVNf
SU5MSU5FIGNvbnN0IEZvbnQqIGZvbnRGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjKSBjb25zdAorICAg
IGNvbnN0IEZvbnQmIGZvbnQoKSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBpbmRleEZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEo
KSkKLSAgICAgICAgICAgIHJldHVybiBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdOwotICAgICAg
ICByZXR1cm4gbV9nbHlwaHNbaW5kZXhdID8gbV9mb250Rm9yQWxsR2x5cGhzIDogMDsKKyAgICAg
ICAgcmV0dXJuIG1fZm9udDsKICAgICB9CiAKLSAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJh
Y3RlcihVQ2hhcjMyIGMsIEdseXBoIGcsIGNvbnN0IEZvbnQqIGYpCisgICAgLy8gSW1wbGVtZW50
ZWQgYnkgdGhlIHBsYXRmb3JtLgorICAgIGJvb2wgZmlsbChVQ2hhciogY2hhcmFjdGVyQnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqKTsKKworcHJpdmF0ZToKKyAgICBl
eHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCYgZm9udCkKKyAgICAgICAgOiBtX2ZvbnQoZm9u
dCkKICAgICB7Ci0gICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGluZGV4Rm9yQ2hhcmFjdGVy
KGMpLCBnLCBmKTsKKyAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIHZvaWQgc2V0R2x5
cGhEYXRhRm9ySW5kZXgodW5zaWduZWQgaW5kZXgsIEdseXBoIGdseXBoLCBjb25zdCBGb250KiBm
b250KQotICAgIHsKLSAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5k
ZXggPCBzaXplKTsKLSAgICAgICAgQVNTRVJUKCFtX2lzSW1tdXRhYmxlKTsKLSAgICAgICAgCi0g
ICAgICAgIG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoOworICAgIGNvbnN0IEZvbnQmIG1fZm9udDsK
KyAgICBHbHlwaCBtX2dseXBoc1tzaXplXSB7IH07CiAKLSAgICAgICAgLy8gR2x5cGhQYWdlIGdl
dHRlcnMgd2lsbCBhbHdheXMgcmV0dXJuIGEgbnVsbCBGb250KiBmb3IgZ2x5cGggIzAgaWYgdGhl
cmUncyBubyBwZXItZ2x5cGggZm9udCBhcnJheS4KLSAgICAgICAgaWYgKGhhc1BlckdseXBoRm9u
dERhdGEoKSkgewotICAgICAgICAgICAgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSA9IGdseXBo
ID8gZm9udCA6IDA7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KKyAgICBXRUJDT1JF
X0VYUE9SVCBzdGF0aWMgdW5zaWduZWQgc19jb3VudDsKK307CiAKLSAgICAgICAgLy8gQSBzaW5n
bGUtZm9udCBHbHlwaFBhZ2UgYWxyZWFkeSBhc3NpZ25lZCBtX2ZvbnRGb3JBbGxHbHlwaHMgaW4g
dGhlIGNvbnN0cnVjdG9yLgotICAgICAgICBBU1NFUlQoIWdseXBoIHx8IGZvbnQgPT0gbV9mb250
Rm9yQWxsR2x5cGhzKTsKK2NsYXNzIE1peGVkRm9udEdseXBoUGFnZSB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTWl4ZWRGb250R2x5cGhQYWdlKFJlZlB0cjxH
bHlwaFBhZ2U+JiYgaW5pdGlhbFBhZ2UpCisgICAgeworICAgICAgICBpZiAoaW5pdGlhbFBhZ2Up
IHsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7
ICsraSkKKyAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBpbml0aWFsUGFn
ZS0+Z2x5cGhEYXRhRm9ySW5kZXgoaSkpOworICAgICAgICAgICAgaW5pdGlhbFBhZ2UgPSBudWxs
cHRyOworICAgICAgICB9CiAgICAgfQogCi0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1
bnNpZ25lZCBpbmRleCwgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEpCisgICAgR2x5cGhEYXRh
IGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAgICAgewotICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChpbmRleCwgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9u
dCk7CisgICAgICAgIHJldHVybiBnbHlwaERhdGFGb3JJbmRleChHbHlwaFBhZ2U6OmluZGV4Rm9y
Q2hhcmFjdGVyKGMpKTsKICAgICB9CiAKLSAgICAvLyBJbXBsZW1lbnRlZCBieSB0aGUgcGxhdGZv
cm0uCi0gICAgYm9vbCBmaWxsKFVDaGFyKiBjaGFyYWN0ZXJCdWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgY29uc3QgRm9udCopOwotCi1wcml2YXRlOgotICAgIGV4cGxpY2l0IEdseXBoUGFn
ZShjb25zdCBGb250KiBmb250Rm9yQWxsR2x5cGhzKQotICAgICAgICA6IG1fZm9udEZvckFsbEds
eXBocyhmb250Rm9yQWxsR2x5cGhzKQorICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KFVDaGFyMzIgYywgR2x5cGhEYXRhIGdseXBoRGF0YSkKICAgICB7Ci0gICAgICAgIG1lbXNldCht
X2dseXBocywgMCwgc2l6ZW9mKG1fZ2x5cGhzKSk7Ci0gICAgICAgIGlmIChoYXNQZXJHbHlwaEZv
bnREYXRhKCkpCi0gICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXpl
b2YoRm9udCopICogR2x5cGhQYWdlOjpzaXplKTsKLSAgICAgICAgKytzX2NvdW50OworICAgICAg
ICBzZXRHbHlwaERhdGFGb3JJbmRleChHbHlwaFBhZ2U6OmluZGV4Rm9yQ2hhcmFjdGVyKGMpLCBn
bHlwaERhdGEpOwogICAgIH0KIAotICAgIGJvb2wgaGFzUGVyR2x5cGhGb250RGF0YSgpIGNvbnN0
IHsgcmV0dXJuICFtX2ZvbnRGb3JBbGxHbHlwaHM7IH0KK3ByaXZhdGU6CiAKLSAgICBjb25zdCBG
b250KiBtX2ZvbnRGb3JBbGxHbHlwaHM7Ci0gICAgR2x5cGggbV9nbHlwaHNbc2l6ZV07CisgICAg
R2x5cGhEYXRhIGdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAorICAgIHsK
KyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBHbHlwaFBh
Z2U6OnNpemUpOworICAgICAgICByZXR1cm4geyBtX2dseXBoc1tpbmRleF0sIG1fZm9udHNbaW5k
ZXhdIH07CisgICAgfQogCi0gICAgYm9vbCBtX2lzSW1tdXRhYmxlIHsgZmFsc2UgfTsKLSAgICAv
LyBOT1RFOiBUaGlzIGFycmF5IGhhcyAoR2x5cGhQYWdlOjpzaXplKSBlbGVtZW50cyBpZiBtX2Zv
bnRGb3JBbGxHbHlwaHMgaXMgbnVsbC4KLSAgICBjb25zdCBGb250KiBtX3BlckdseXBoRm9udERh
dGFbMF07CisgICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgY29u
c3QgR2x5cGhEYXRhJiBnbHlwaERhdGEpCisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNV
UklUWV9JTVBMSUNBVElPTihpbmRleCA8IEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAgIG1fZ2x5
cGhzW2luZGV4XSA9IGdseXBoRGF0YS5nbHlwaDsKKyAgICAgICAgbV9mb250c1tpbmRleF0gPSBn
bHlwaERhdGEuZm9udDsKKyAgICB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdW5zaWdu
ZWQgc19jb3VudDsKKyAgICBHbHlwaCBtX2dseXBoc1tHbHlwaFBhZ2U6OnNpemVdIHsgfTsKKyAg
ICBjb25zdCBGb250KiBtX2ZvbnRzW0dseXBoUGFnZTo6c2l6ZV0geyB9OwogfTsKIAotI2lmIENP
TVBJTEVSKE1TVkMpCi0jcHJhZ21hIHdhcm5pbmcocG9wKQotI2VuZGlmCi0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEdseXBoUGFnZV9oCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlw
ZS9HbHlwaFBhZ2VUcmVlTm9kZUZyZWVUeXBlLmNwcAkocmV2aXNpb24gMTg5NDY1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVG
cmVlVHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDkgKzU3LDkgQEAgYm9vbCBHbHlwaFBh
Z2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaQogCiAgICAgICAgIEdseXBoIGdseXBoID0gRmNG
cmVlVHlwZUNoYXJJbmRleChmYWNlLCBjaGFyYWN0ZXIpOwogICAgICAgICBpZiAoIWdseXBoKQot
ICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCwgMCk7CisgICAgICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChpLCAwKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBz
ZXRHbHlwaERhdGFGb3JJbmRleChpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAgc2V0
R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGgpOwogICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRy
dWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAkocmV2aXNpb24gMTg5NDY2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTYwLDYgKzYwLDggQEAgc3RhdGljIGJvb2wgc2hvdWxkVXNlQ29y
ZVRleHQoY29uc3QgVUNoYQogCiBib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnREYXRhKQogeworICAgIEFTU0VS
VChmb250RGF0YSA9PSAmZm9udCgpKTsKKwogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwog
CiAgICAgVmVjdG9yPENHR2x5cGgsIDUxMj4gZ2x5cGhzKGJ1ZmZlckxlbmd0aCk7CkBAIC03MSw5
ICs3Myw5IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICAg
ICAgQ0dGb250R2V0R2x5cGhzRm9yVW5pY2hhcnMoZm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLmNn
Rm9udCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZlckxlbmd0aCk7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkgewogICAgICAgICAg
ICAgaWYgKCFnbHlwaHNbaV0pCi0gICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgo
aSwgMCwgMCk7CisgICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCk7CiAg
ICAgICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChp
LCBnbHlwaHNbaV0sIGZvbnREYXRhKTsKKyAgICAgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJ
bmRleChpLCBnbHlwaHNbaV0pOwogICAgICAgICAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC05MCw5ICs5Miw5IEBAIGJvb2wgR2x5cGhQYWdl
OjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICAgICAgdW5zaWduZWQgZ2x5cGhTdGVwID0g
YnVmZmVyTGVuZ3RoIC8gR2x5cGhQYWdlOjpzaXplOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKICAgICAgICAgICAgIGlmICghZ2x5cGhz
W2kgKiBnbHlwaFN0ZXBdKQotICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGks
IDAsIDApOworICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIDApOwogICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwg
Z2x5cGhzW2kgKiBnbHlwaFN0ZXBdLCBmb250RGF0YSk7CisgICAgICAgICAgICAgICAgc2V0R2x5
cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhzW2kgKiBnbHlwaFN0ZXBdKTsKICAgICAgICAgICAgICAg
ICBoYXZlR2x5cGhzID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERh
dGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29w
ZW50eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcAkocmV2aXNpb24gMTg5NDY1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERh
dGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NDQsMTAgKzU0NCwxMCBAQCB2b2lkIE9wZW5UeXBl
VmVydGljYWxEYXRhOjpzdWJzdGl0dXRlV2l0CiAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IDA7
IGluZGV4IDwgR2x5cGhQYWdlOjpzaXplOyArK2luZGV4KSB7CiAgICAgICAgIEdseXBoIGdseXBo
ID0gZ2x5cGhQYWdlLT5nbHlwaEF0KGluZGV4KTsKICAgICAgICAgaWYgKGdseXBoKSB7Ci0gICAg
ICAgICAgICBBU1NFUlQoZ2x5cGhQYWdlLT5nbHlwaERhdGFGb3JJbmRleChpbmRleCkuZm9udCA9
PSBmb250KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm9udCwgJmdseXBoUGFnZS0+Zm9u
dCgpID09IGZvbnQpOwogICAgICAgICAgICAgR2x5cGggdG8gPSBtYXAuZ2V0KGdseXBoKTsKICAg
ICAgICAgICAgIGlmICh0bykKLSAgICAgICAgICAgICAgICBnbHlwaFBhZ2UtPnNldEdseXBoRGF0
YUZvckluZGV4KGluZGV4LCB0bywgZm9udCk7CisgICAgICAgICAgICAgICAgZ2x5cGhQYWdlLT5z
ZXRHbHlwaERhdGFGb3JJbmRleChpbmRleCwgdG8pOwogICAgICAgICB9CiAgICAgfQogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2Rl
Q0dXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNHV2luLmNwcAkocmV2aXNpb24gMTg5NDY1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw5ICs0Nyw5IEBAIGJvb2wgR2x5cGhQYWdlOjpmaWxs
KFVDaGFyKiBidWZmZXIsIHVuc2kKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQ
YWdlOjpzaXplOyBpKyspIHsKICAgICAgICAgR2x5cGggZ2x5cGggPSBsb2NhbEdseXBoQnVmZmVy
W2ldOwogICAgICAgICBpZiAoIWdseXBoKQotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5k
ZXgoaSwgMCwgMCk7CisgICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCAwKTsKICAg
ICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBnbHlwaCwg
Zm9udERhdGEpOworICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGgpOwog
ICAgICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWly
b1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dseXBoUGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxODk0NjUpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWly
b1dpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDkgQEAgYm9vbCBHbHlwaFBhZ2U6
OmZpbGwoVUNoYXIqIGJ1ZmZlciwgdW5zaQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgR2x5cGhQYWdlOjpzaXplOyBpKyspIHsKICAgICAgICAgICAgIEdseXBoIGdseXBoID0gbG9j
YWxHbHlwaEJ1ZmZlcltpXTsKICAgICAgICAgICAgIGlmIChnbHlwaCA9PSAweGZmZmYpCi0gICAg
ICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCwgMCk7CisgICAgICAgICAgICAg
ICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCk7CiAgICAgICAgICAgICBlbHNlIHsKLSAgICAg
ICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBnbHlwaCwgZm9udERhdGEpOworICAg
ICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIGdseXBoKTsKICAgICAgICAgICAg
ICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDog
U291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCShyZXZpc2lvbiAxODk0NjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDQsMTEgKzIw
NCw4IEBAIGJvb2wgU1ZHRm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24KICAgICByZXR1
cm4gZmFsc2U7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQ
YWdlKiBwYWdlVG9GaWxsLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqIGZvbnQpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdl
KEdseXBoUGFnZSogcGFnZVRvRmlsbCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVu
Z3RoKSBjb25zdAogewotICAgIEFTU0VSVChmb250LT5pc0N1c3RvbUZvbnQoKSk7Ci0gICAgQVNT
RVJUKGZvbnQtPmlzU1ZHRm9udCgpKTsKLQogICAgIFNWR0ZvbnRGYWNlRWxlbWVudCogZm9udEZh
Y2VFbGVtZW50ID0gdGhpcy0+c3ZnRm9udEZhY2VFbGVtZW50KCk7CiAgICAgQVNTRVJUKGZvbnRG
YWNlRWxlbWVudCk7CiAKQEAgLTIxNiwxMyArMjEzLDEzIEBAIGJvb2wgU1ZHRm9udERhdGE6OmZp
bGxTVkdHbHlwaFBhZ2UoR2x5cGgKICAgICBBU1NFUlQoZm9udEVsZW1lbnQpOwogCiAgICAgaWYg
KGJ1ZmZlckxlbmd0aCA9PSBHbHlwaFBhZ2U6OnNpemUpCi0gICAgICAgIHJldHVybiBmaWxsQk1Q
R2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBidWZmZXIsIGZvbnQpOworICAgICAgICBy
ZXR1cm4gZmlsbEJNUEdseXBocyhmb250RWxlbWVudCwgcGFnZVRvRmlsbCwgYnVmZmVyKTsKIAog
ICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gMiAqIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgcmV0
dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIGJ1ZmZlciwgZm9u
dCk7CisgICAgcmV0dXJuIGZpbGxOb25CTVBHbHlwaHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGws
IGJ1ZmZlcik7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEVs
ZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBhZ2VUb0ZpbGwsIFVDaGFyKiBidWZmZXIs
IGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0Citib29sIFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhz
KFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCBVQ2hh
ciogYnVmZmVyKSBjb25zdAogewogICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOwogICAgIFZl
Y3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwpAQCAtMjMwLDcgKzIyNyw3IEBAIGJvb2wgU1ZHRm9udERh
dGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEUKICAgICAgICAgU3RyaW5nIGxvb2t1cFN0cmluZyhi
dWZmZXIgKyBpLCAxKTsKICAgICAgICAgZm9udEVsZW1lbnQtPmNvbGxlY3RHbHlwaHNGb3JTdHJp
bmcobG9va3VwU3RyaW5nLCBnbHlwaHMpOwogICAgICAgICBpZiAoZ2x5cGhzLmlzRW1wdHkoKSkg
ewotICAgICAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCwgMCk7
CisgICAgICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCAwKTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CiAKQEAgLTIzOSwxNCArMjM2LDE0IEBAIGJv
b2wgU1ZHRm9udERhdGE6OmZpbGxCTVBHbHlwaHMoU1ZHRm9udEUKICAgICAgICAgLy8gY2FyZSBv
ZiBtYXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZh
aWxhYmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNv
bnRleHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhh
dmVHbHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRl
eChpLCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250KTsKKyAgICAgICAgcGFnZVRvRmls
bC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSk7CiAg
ICAgICAgIGdseXBocy5jbGVhcigpOwogICAgIH0KIAogICAgIHJldHVybiBoYXZlR2x5cGhzOwog
fQogCi1ib29sIFNWR0ZvbnREYXRhOjpmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBm
b250RWxlbWVudCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCBVQ2hhciogYnVmZmVyLCBjb25zdCBG
b250KiBmb250KSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6ZmlsbE5vbkJNUEdseXBocyhTVkdG
b250RWxlbWVudCogZm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgVUNoYXIqIGJ1
ZmZlcikgY29uc3QKIHsKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBWZWN0b3I8
U1ZHR2x5cGg+IGdseXBoczsKQEAgLTI1NSw3ICsyNTIsNyBAQCBib29sIFNWR0ZvbnREYXRhOjpm
aWxsTm9uQk1QR2x5cGhzKFNWR0ZvCiAgICAgICAgIFN0cmluZyBsb29rdXBTdHJpbmcoYnVmZmVy
ICsgaSAqIDIsIDIpOwogICAgICAgICBmb250RWxlbWVudC0+Y29sbGVjdEdseXBoc0ZvclN0cmlu
Zyhsb29rdXBTdHJpbmcsIGdseXBocyk7CiAgICAgICAgIGlmIChnbHlwaHMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCAwLCAwKTsK
KyAgICAgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KGksIDApOwogICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KIApAQCAtMjY0LDcgKzI2MSw3IEBAIGJvb2wg
U1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm8KICAgICAgICAgLy8gY2FyZSBvZiBt
YXRjaGluZyB0byB0aGUgY29ycmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxh
YmxlLCBhcyB0aGF0J3MKICAgICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRl
eHQgb2YgYSBzdHJpbmcgKGVnLiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVH
bHlwaHMgPSB0cnVlOwotICAgICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChp
LCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5LCBmb250KTsKKyAgICAgICAgcGFnZVRvRmlsbC0+
c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSk7CiAgICAg
ICAgIGdseXBocy5jbGVhcigpOwogICAgIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRh
LmgJKHJldmlzaW9uIDE4OTQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwg
dm9pZCBpbml0aWFsaXplRm9udChGb250KiwgZmxvYXQgZm9udFNpemUpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNv
bnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFn
ZSosIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgRm9udCopIGNv
bnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFn
ZSosIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICBib29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24oV2lkdGhJdGVyYXRvciYsIEdseXBo
RGF0YSYsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENoYXJhY3RlciwgdW5zaWduZWQmIGFkdmFu
Y2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNlc1N0cmluZ0NhY2hlKSBjb25zdDsKIApA
QCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAgZmxvYXQgdmVydGljYWxBZHZhbmNlWSgpIGNv
bnN0IHsgcmV0dXJuIG1fdmVydGljYWxBZHZhbmNlWTsgfQogCiBwcml2YXRlOgotICAgIGJvb2wg
ZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEdseXBoUGFnZSosIFVDaGFyKiBidWZmZXIs
IGNvbnN0IEZvbnQqKSBjb25zdDsKLSAgICBib29sIGZpbGxOb25CTVBHbHlwaHMoU1ZHRm9udEVs
ZW1lbnQqLCBHbHlwaFBhZ2UqLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KikgY29uc3Q7Cisg
ICAgYm9vbCBmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdlKiwgVUNoYXIq
IGJ1ZmZlcikgY29uc3Q7CisgICAgYm9vbCBmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50
KiwgR2x5cGhQYWdlKiwgVUNoYXIqIGJ1ZmZlcikgY29uc3Q7CiAKICAgICBib29sIGFwcGx5VHJh
bnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBoKiwgR2x5cGhCdWZmZXJBZHZhbmNlKiwgc2l6ZV90LCBU
eXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdCA9IGRlbGV0ZTsKIAo=
</data>
<flag name="review"
          id="285976"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260857</attachid>
            <date>2015-09-09 04:41:48 -0700</date>
            <delta_ts>2015-09-09 04:41:48 -0700</delta_ts>
            <desc>patch</desc>
            <filename>glyph-page-split-4.patch</filename>
            <type>text/plain</type>
            <size>31241</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE4OTUzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg3IEBACisyMDE1LTA5LTA5ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBTcGxpdCBtaXhlZCBmb250IEds
eXBoUGFnZSBmdW5jdGlvbmFsaXR5IHRvIHNlcGFyYXRlIGNsYXNzCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg5NjUKKworICAgICAgICBSZXZpZXdl
ZCBieSBNeWxlcyBNYXhmaWVsZC4KKworICAgICAgICBDdXJyZW50bHkgR2x5cGhQYWdlIGNsYXNz
IGlzIHVzZWQgZm9yIGJvdGggaW1tdXRhYmxlIHNpbmdsZSBmb250IGNhc2UgKGluIEZvbnQpIGFu
ZAorICAgICAgICBmb3IgY2FjaGluZyBtaXhlZCBmb250IG1hcHBpbmdzIChpbiBGb250Q2FzY2Fk
ZUZvbnRzKS4gSXQgaXMgY2xlYW5lciB0byB1c2Ugc2VwYXJhdGUKKyAgICAgICAgY2xhc3NlZCBm
b3IgdGhlc2UgY2FzZXMuIFRoaXMgd2lsbCBhbHNvIG1ha2UgZnV0dXJlIGltcHJvdmVtZW50cyBl
YXNpZXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnQ6On5Gb250KToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxHbHlwaFBhZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQW5kRmlsbEdseXBoUGFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250OjpnbHlwaFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhG
b3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpN
aXhlZEZvbnRHbHlwaFBhZ2U6Ok1peGVkRm9udEdseXBoUGFnZSk6CisgICAgICAgIChXZWJDb3Jl
OjpNaXhlZEZvbnRHbHlwaFBhZ2U6OmdseXBoRGF0YUZvckNoYXJhY3Rlcik6CisgICAgICAgIChX
ZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6OnNldEdseXBoRGF0YUZvckNoYXJhY3Rlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpNaXhlZEZvbnRHbHlwaFBhZ2U6OnNldEdseXBoRGF0YUZvckluZGV4
KToKKworICAgICAgICAgICAgTWl4ZWQgZm9udCBwYWdlcyBhcmUgbm93IGFuIGltcGxlbWVudGF0
aW9uIGRldGFpbCBvZiBGb250Q2FzY2FkZUZvbnRzLgorCisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZUZvbnRzOjpHbHlwaFBhZ2VDYWNoZUVudHJ5OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6Rm9udENhc2NhZGVGb250czo6R2x5cGhQYWdlQ2FjaGVFbnRy
eTo6c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDYXNj
YWRlRm9udHM6OkdseXBoUGFnZUNhY2hlRW50cnk6OnNldFNpbmdsZUZvbnRQYWdlKToKKworICAg
ICAgICAgICAgQ2FjaGUgZW50cnkgaXMgZWl0aGVyIHNoYXJlZCBzaW5nbGUgZm9udCBHbHlwaFBh
Z2Ugb3IgbXV0YWJsZSBNaXhlZEZvbnRHbHlwaFBhZ2UuCisKKyAgICAgICAgKFdlYkNvcmU6OkZv
bnRDYXNjYWRlRm9udHM6OkZvbnRDYXNjYWRlRm9udHMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9u
dENhc2NhZGVGb250czo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZvbnRDYXNjYWRlRm9udHM6OnBydW5lU3lzdGVtRmFsbGJhY2tzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmg6CisgICAgICAgIChXZWJDb3JlOjpGb250
Q2FzY2FkZUZvbnRzOjpHbHlwaFBhZ2VDYWNoZUVudHJ5Ojppc051bGwpOgorICAgICAgICAoV2Vi
Q29yZTo6Rm9udENhc2NhZGVGb250czo6R2x5cGhQYWdlQ2FjaGVFbnRyeTo6aXNNaXhlZEZvbnQp
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFnZS5oOgorCisgICAgICAgICAg
ICBHbHlwaFBhZ2UgaXMgbm93IGZvciBzaW5nbGUgZm9udCBtYXBwaW5ncyBvbmx5LgorICAgICAg
ICAgICAgVXNlIHJlZ3VsYXIgYWxsb2NhdGlvbiBpbnN0ZWFkIG9mIHZhcmlhYmxlIHNpemUgdHJp
Y2tzLgorICAgICAgICAgICAgSXQgaXMgYWx3YXlzIGltbXV0YWJsZSBhZnRlciBpbml0aWFsaXph
dGlvbiAodGhvdWdoIGN1cnJlbnRseSBhIHNldHRlciBpcyBzdGlsbCBuZWVkZWQpLgorCisgICAg
ICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHbHlw
aFBhZ2U6On5HbHlwaFBhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpjb3VudCk6
CisgICAgICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OmluZGV4Rm9yQ2hhcmFjdGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoUGFnZTo6Z2x5cGhGb3JDaGFyYWN0ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R2x5cGhQYWdlOjpnbHlwaERhdGFGb3JJbmRleCk6CisgICAgICAgIChXZWJDb3JlOjpHbHlw
aFBhZ2U6OmdseXBoRm9ySW5kZXgpOgorICAgICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpzZXRH
bHlwaEZvckluZGV4KToKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6Zm9udCk6CisgICAg
ICAgIChXZWJDb3JlOjpHbHlwaFBhZ2U6OkdseXBoUGFnZSk6CisgICAgICAgIChXZWJDb3JlOjpH
bHlwaFBhZ2U6OmNyZWF0ZUZvck1peGVkRm9udHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R2x5cGhQYWdlOjpjcmVhdGVDb3B5Rm9yTWl4ZWRGb250cyk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHbHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjppc0ltbXV0YWJsZSk6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpHbHlwaFBhZ2U6OnNldEltbXV0YWJsZSk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHbHlwaFBhZ2U6OmdseXBoQXQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
R2x5cGhQYWdlOjpmb250Rm9yQ2hhcmFjdGVyKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdseXBoUGFnZTo6c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdseXBoUGFnZTo6c2V0R2x5cGhEYXRhRm9ySW5kZXgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R2x5cGhQYWdlOjpoYXNQZXJHbHlwaEZvbnREYXRhKTogRGVsZXRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9mcmVldHlwZS9HbHlwaFBhZ2VUcmVlTm9kZUZy
ZWVUeXBlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdseXBoUGFnZTo6ZmlsbCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dseXBoUGFnZU1hYy5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHbHlwaFBhZ2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL29wZW50
eXBlL09wZW5UeXBlVmVydGljYWxEYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok9wZW5UeXBl
VmVydGljYWxEYXRhOjpzdWJzdGl0dXRlV2l0aFZlcnRpY2FsR2x5cGhzKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpHbHlwaFBhZ2U6OmZpbGwpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L3dpbi9HbHlwaFBhZ2VUcmVlTm9kZUNhaXJvV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okds
eXBoUGFnZTo6ZmlsbCk6CisgICAgICAgICogc3ZnL1NWR0ZvbnREYXRhLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZvbnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zv
bnREYXRhOjpmaWxsTm9uQk1QR2x5cGhzKToKKyAgICAgICAgKiBzdmcvU1ZHRm9udERhdGEuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0ZvbnREYXRhOjp2ZXJ0aWNhbEFkdmFuY2VZKToKKwogMjAx
NS0wOS0wOSAgTWFudWVsIFJlZ28gQ2FzYXNub3ZhcyAgPHJlZ29AaWdhbGlhLmNvbT4KIAogICAg
ICAgICBbY3NzLWdyaWRdIFBlcmNlbnRhZ2UgY29sdW1ucyBzaG91bGRuJ3QgaW5jbHVkZSBib3Jk
ZXIgYW5kIHBhZGRpbmcKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwCShyZXZpc2lvbiAxODk0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDI3ICsxNDksMjcgQEAgRm9udDo6
fkZvbnQoKQogICAgIHJlbW92ZUZyb21TeXN0ZW1GYWxsYmFja0NhY2hlKCk7CiB9CiAKLXN0YXRp
YyBib29sIGZpbGxHbHlwaFBhZ2UoR2x5cGhQYWdlJiBwYWdlVG9GaWxsLCBVQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNvbnN0IEZvbnQqIGZvbnQpCitzdGF0aWMgYm9vbCBm
aWxsR2x5cGhQYWdlKEdseXBoUGFnZSYgcGFnZVRvRmlsbCwgVUNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250JiBmb250KQogewogI2lmIEVOQUJMRShTVkdfRk9O
VFMpCi0gICAgaWYgKGF1dG8qIHN2Z0RhdGEgPSBmb250LT5zdmdEYXRhKCkpCi0gICAgICAgIHJl
dHVybiBzdmdEYXRhLT5maWxsU1ZHR2x5cGhQYWdlKCZwYWdlVG9GaWxsLCBidWZmZXIsIGJ1ZmZl
ckxlbmd0aCwgZm9udCk7CisgICAgaWYgKGF1dG8qIHN2Z0RhdGEgPSBmb250LnN2Z0RhdGEoKSkK
KyAgICAgICAgcmV0dXJuIHN2Z0RhdGEtPmZpbGxTVkdHbHlwaFBhZ2UoJnBhZ2VUb0ZpbGwsIGJ1
ZmZlciwgYnVmZmVyTGVuZ3RoKTsKICNlbmRpZgotICAgIGJvb2wgaGFzR2x5cGhzID0gcGFnZVRv
RmlsbC5maWxsKGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKKyAgICBib29sIGhhc0dseXBo
cyA9IHBhZ2VUb0ZpbGwuZmlsbChidWZmZXIsIGJ1ZmZlckxlbmd0aCwgJmZvbnQpOwogI2lmIEVO
QUJMRShPUEVOVFlQRV9WRVJUSUNBTCkKLSAgICBpZiAoaGFzR2x5cGhzICYmIGZvbnQtPnZlcnRp
Y2FsRGF0YSgpKQotICAgICAgICBmb250LT52ZXJ0aWNhbERhdGEoKS0+c3Vic3RpdHV0ZVdpdGhW
ZXJ0aWNhbEdseXBocyhmb250LCAmcGFnZVRvRmlsbCk7CisgICAgaWYgKGhhc0dseXBocyAmJiBm
b250LnZlcnRpY2FsRGF0YSgpKQorICAgICAgICBmb250LnZlcnRpY2FsRGF0YSgpLT5zdWJzdGl0
dXRlV2l0aFZlcnRpY2FsR2x5cGhzKCZmb250LCAmcGFnZVRvRmlsbCk7CiAjZW5kaWYKICAgICBy
ZXR1cm4gaGFzR2x5cGhzOwogfQogCi1zdGF0aWMgUmVmUHRyPEdseXBoUGFnZT4gY3JlYXRlQW5k
RmlsbEdseXBoUGFnZSh1bnNpZ25lZCBwYWdlTnVtYmVyLCBjb25zdCBGb250KiBmb250KQorc3Rh
dGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UodW5zaWduZWQgcGFn
ZU51bWJlciwgY29uc3QgRm9udCYgZm9udCkKIHsKICNpZiBQTEFURk9STShJT1MpCiAgICAgLy8g
RklYTUU6IFRpbWVzIE5ldyBSb21hbiBjb250YWlucyBBcmFiaWMgZ2x5cGhzLCBidXQgQ29yZSBU
ZXh0IGRvZXNuJ3Qga25vdyBob3cgdG8gc2hhcGUgdGhlbS4gU2VlIDxyZGFyOi8vcHJvYmxlbS85
ODIzOTc1Pi4KICAgICAvLyBPbmNlIHdlIGhhdmUgdGhlIGZpeCBmb3IgPHJkYXI6Ly9wcm9ibGVt
Lzk4MjM5NzU+IHRoZW4gcmVtb3ZlIHRoaXMgY29kZSB0b2dldGhlciB3aXRoIEZvbnQ6OnNob3Vs
ZE5vdEJlVXNlZEZvckFyYWJpYygpCiAgICAgLy8gaW4gPHJkYXI6Ly9wcm9ibGVtLzEyMDk2ODM1
Pi4KLSAgICBpZiAocGFnZU51bWJlciA9PSA2ICYmIGZvbnQtPnNob3VsZE5vdEJlVXNlZEZvckFy
YWJpYygpKQorICAgIGlmIChwYWdlTnVtYmVyID09IDYgJiYgZm9udC5zaG91bGROb3RCZVVzZWRG
b3JBcmFiaWMoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAjZW5kaWYKIApAQCAtMjI2LDI2
ICsyMjYsMjUgQEAgc3RhdGljIFJlZlB0cjxHbHlwaFBhZ2U+IGNyZWF0ZUFuZEZpbGxHbAogICAg
IC8vIHJvdXRpbmUgb2Ygb3VyIGdseXBoIG1hcCBmb3IgYWN0dWFsbHkgZmlsbGluZyBpbiB0aGUg
cGFnZSB3aXRoIHRoZSBnbHlwaHMuCiAgICAgLy8gU3VjY2VzcyBpcyBub3QgZ3VhcmFudGVlZC4g
Rm9yIGV4YW1wbGUsIFRpbWVzIGZhaWxzIHRvIGZpbGwgcGFnZSAyNjAsIGdpdmluZyBnbHlwaCBk
YXRhCiAgICAgLy8gZm9yIG9ubHkgMTI4IG91dCBvZiAyNTYgY2hhcmFjdGVycy4KLSAgICBSZWZQ
dHI8R2x5cGhQYWdlPiBnbHlwaFBhZ2UgPSBHbHlwaFBhZ2U6OmNyZWF0ZUZvclNpbmdsZUZvbnQo
Zm9udCk7CisgICAgUmVmPEdseXBoUGFnZT4gZ2x5cGhQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGUo
Zm9udCk7CiAKLSAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxsR2x5cGhQYWdlKCpnbHlwaFBhZ2Us
IGJ1ZmZlciwgYnVmZmVyTGVuZ3RoLCBmb250KTsKKyAgICBib29sIGhhdmVHbHlwaHMgPSBmaWxs
R2x5cGhQYWdlKGdseXBoUGFnZSwgYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnQpOwogICAgIGlm
ICghaGF2ZUdseXBocykKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKLSAgICBnbHlwaFBhZ2Ut
PnNldEltbXV0YWJsZSgpOwotICAgIHJldHVybiBnbHlwaFBhZ2U7CisgICAgcmV0dXJuIFdURjo6
bW92ZShnbHlwaFBhZ2UpOwogfQogCiBjb25zdCBHbHlwaFBhZ2UqIEZvbnQ6OmdseXBoUGFnZSh1
bnNpZ25lZCBwYWdlTnVtYmVyKSBjb25zdAogewogICAgIGlmICghcGFnZU51bWJlcikgewogICAg
ICAgICBpZiAoIW1fZ2x5cGhQYWdlWmVybykKLSAgICAgICAgICAgIG1fZ2x5cGhQYWdlWmVybyA9
IGNyZWF0ZUFuZEZpbGxHbHlwaFBhZ2UoMCwgdGhpcyk7CisgICAgICAgICAgICBtX2dseXBoUGFn
ZVplcm8gPSBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKDAsICp0aGlzKTsKICAgICAgICAgcmV0dXJu
IG1fZ2x5cGhQYWdlWmVyby5nZXQoKTsKICAgICB9CiAgICAgYXV0byBhZGRSZXN1bHQgPSBtX2ds
eXBoUGFnZXMuYWRkKHBhZ2VOdW1iZXIsIG51bGxwdHIpOwogICAgIGlmIChhZGRSZXN1bHQuaXNO
ZXdFbnRyeSkKLSAgICAgICAgYWRkUmVzdWx0Lml0ZXJhdG9yLT52YWx1ZSA9IGNyZWF0ZUFuZEZp
bGxHbHlwaFBhZ2UocGFnZU51bWJlciwgdGhpcyk7CisgICAgICAgIGFkZFJlc3VsdC5pdGVyYXRv
ci0+dmFsdWUgPSBjcmVhdGVBbmRGaWxsR2x5cGhQYWdlKHBhZ2VOdW1iZXIsICp0aGlzKTsKIAog
ICAgIHJldHVybiBhZGRSZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQpAQCAtMjU1LDcg
KzI1NCw3IEBAIEdseXBoIEZvbnQ6OmdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2gKICAgICBh
dXRvKiBwYWdlID0gZ2x5cGhQYWdlKGNoYXJhY3RlciAvIEdseXBoUGFnZTo6c2l6ZSk7CiAgICAg
aWYgKCFwYWdlKQogICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gcGFnZS0+Z2x5cGhBdChj
aGFyYWN0ZXIgJSBHbHlwaFBhZ2U6OnNpemUpOworICAgIHJldHVybiBwYWdlLT5nbHlwaEZvckNo
YXJhY3RlcihjaGFyYWN0ZXIpOwogfQogCiBHbHlwaERhdGEgRm9udDo6Z2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMTg5NDY1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw3ICs3Niw3IEBA
IHB1YmxpYzoKIAogICAgICAgICB2aXJ0dWFsIHZvaWQgaW5pdGlhbGl6ZUZvbnQoRm9udCosIGZs
b2F0IGZvbnRTaXplKSA9IDA7CiAgICAgICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlw
aChHbHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0ID0gMDsKLSAgICAgICAgdmlydHVhbCBib29s
IGZpbGxTVkdHbHlwaFBhZ2UoR2x5cGhQYWdlKiwgVUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVm
ZmVyTGVuZ3RoLCBjb25zdCBGb250KikgY29uc3QgPSAwOworICAgICAgICB2aXJ0dWFsIGJvb2wg
ZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqLCBVQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBidWZm
ZXJMZW5ndGgpIGNvbnN0ID0gMDsKICAgICB9OwogCiAgICAgLy8gVXNlZCB0byBjcmVhdGUgcGxh
dGZvcm0gZm9udHMuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250
Q2FzY2FkZUZvbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Gb250Q2FzY2FkZUZvbnRzLmNwcAkocmV2aXNpb24gMTg5MjA2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDY2IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3Mg
TWl4ZWRGb250R2x5cGhQYWdlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBNaXhlZEZvbnRHbHlwaFBhZ2UoY29uc3QgR2x5cGhQYWdlKiBpbml0aWFsUGFnZSkK
KyAgICB7CisgICAgICAgIGlmIChpbml0aWFsUGFnZSkgeworICAgICAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IEdseXBoUGFnZTo6c2l6ZTsgKytpKQorICAgICAgICAgICAgICAgIHNl
dEdseXBoRGF0YUZvckluZGV4KGksIGluaXRpYWxQYWdlLT5nbHlwaERhdGFGb3JJbmRleChpKSk7
CisgICAgICAgIH0KKyAgICB9CisKKyAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KFVDaGFyMzIgYykgY29uc3QKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGluZGV4ID0gR2x5cGhQ
YWdlOjppbmRleEZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlf
SU1QTElDQVRJT04oaW5kZXggPCBHbHlwaFBhZ2U6OnNpemUpOworICAgICAgICByZXR1cm4geyBt
X2dseXBoc1tpbmRleF0sIG1fZm9udHNbaW5kZXhdIH07CisgICAgfQorCisgICAgdm9pZCBzZXRH
bHlwaERhdGFGb3JDaGFyYWN0ZXIoVUNoYXIzMiBjLCBHbHlwaERhdGEgZ2x5cGhEYXRhKQorICAg
IHsKKyAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoR2x5cGhQYWdlOjppbmRleEZvckNoYXJh
Y3RlcihjKSwgZ2x5cGhEYXRhKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgdm9pZCBzZXRHbHlw
aERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEp
CisgICAgeworICAgICAgICBBU1NFUlRfV0lUSF9TRUNVUklUWV9JTVBMSUNBVElPTihpbmRleCA8
IEdseXBoUGFnZTo6c2l6ZSk7CisgICAgICAgIG1fZ2x5cGhzW2luZGV4XSA9IGdseXBoRGF0YS5n
bHlwaDsKKyAgICAgICAgbV9mb250c1tpbmRleF0gPSBnbHlwaERhdGEuZm9udDsKKyAgICB9CisK
KyAgICBHbHlwaCBtX2dseXBoc1tHbHlwaFBhZ2U6OnNpemVdIHsgfTsKKyAgICBjb25zdCBGb250
KiBtX2ZvbnRzW0dseXBoUGFnZTo6c2l6ZV0geyB9OworfTsKKworR2x5cGhEYXRhIEZvbnRDYXNj
YWRlRm9udHM6OkdseXBoUGFnZUNhY2hlRW50cnk6OmdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hh
cjMyIGNoYXJhY3RlcikKK3sKKyAgICBBU1NFUlQoIShtX3NpbmdsZUZvbnQgJiYgbV9taXhlZEZv
bnQpKTsKKyAgICBpZiAobV9zaW5nbGVGb250KQorICAgICAgICByZXR1cm4gbV9zaW5nbGVGb250
LT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKKyAgICBpZiAobV9taXhlZEZvbnQp
CisgICAgICAgIHJldHVybiBtX21peGVkRm9udC0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJh
Y3Rlcik7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgRm9udENhc2NhZGVGb250czo6R2x5cGhQ
YWdlQ2FjaGVFbnRyeTo6c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVy
LCBHbHlwaERhdGEgZ2x5cGhEYXRhKQoreworICAgIEFTU0VSVCghZ2x5cGhEYXRhRm9yQ2hhcmFj
dGVyKGNoYXJhY3RlcikuZ2x5cGgpOworICAgIGlmICghbV9taXhlZEZvbnQpIHsKKyAgICAgICAg
bV9taXhlZEZvbnQgPSBzdGQ6Om1ha2VfdW5pcXVlPE1peGVkRm9udEdseXBoUGFnZT4obV9zaW5n
bGVGb250LmdldCgpKTsKKyAgICAgICAgbV9zaW5nbGVGb250ID0gbnVsbHB0cjsKKyAgICB9Cisg
ICAgbV9taXhlZEZvbnQtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIGdseXBo
RGF0YSk7Cit9CisKK3ZvaWQgRm9udENhc2NhZGVGb250czo6R2x5cGhQYWdlQ2FjaGVFbnRyeTo6
c2V0U2luZ2xlRm9udFBhZ2UoUmVmUHRyPEdseXBoUGFnZT4mJiBwYWdlKQoreworICAgIEFTU0VS
VChpc051bGwoKSk7CisgICAgbV9zaW5nbGVGb250ID0gcGFnZTsKK30KIAogRm9udENhc2NhZGVG
b250czo6Rm9udENhc2NhZGVGb250cyhSZWZQdHI8Rm9udFNlbGVjdG9yPiYmIGZvbnRTZWxlY3Rv
cikKICAgICA6IG1fY2FjaGVkUHJpbWFyeUZvbnQobnVsbHB0cikKQEAgLTM3MSwyMCArNDMxLDIw
IEBAIEdseXBoRGF0YSBGb250Q2FzY2FkZUZvbnRzOjpnbHlwaERhdGFGb3IKIAogICAgIGNvbnN0
IHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSBjIC8gR2x5cGhQYWdlOjpzaXplOwogCi0gICAgUmVmUHRy
PEdseXBoUGFnZT4mIGNhY2hlZFBhZ2UgPSBwYWdlTnVtYmVyID8gbV9jYWNoZWRQYWdlcy5hZGQo
cGFnZU51bWJlciwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlIDogbV9jYWNoZWRQYWdlWmVybzsK
LSAgICBpZiAoIWNhY2hlZFBhZ2UpCi0gICAgICAgIGNhY2hlZFBhZ2UgPSBnbHlwaFBhZ2VGcm9t
Rm9udFJhbmdlcyhwYWdlTnVtYmVyLCByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlv
biwgMCkpOworICAgIGF1dG8mIGNhY2hlRW50cnkgPSBwYWdlTnVtYmVyID8gbV9jYWNoZWRQYWdl
cy5hZGQocGFnZU51bWJlciwgR2x5cGhQYWdlQ2FjaGVFbnRyeSgpKS5pdGVyYXRvci0+dmFsdWUg
OiBtX2NhY2hlZFBhZ2VaZXJvOwogCi0gICAgR2x5cGhEYXRhIGdseXBoRGF0YSA9IGNhY2hlZFBh
Z2UgPyBjYWNoZWRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoYykgOiBHbHlwaERhdGEoKTsK
LSAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkgewotICAgICAgICBpZiAoIWNhY2hlZFBhZ2UpCi0g
ICAgICAgICAgICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVGb3JNaXhlZEZvbnRzKCk7
Ci0gICAgICAgIGVsc2UgaWYgKGNhY2hlZFBhZ2UtPmlzSW1tdXRhYmxlKCkpCi0gICAgICAgICAg
ICBjYWNoZWRQYWdlID0gR2x5cGhQYWdlOjpjcmVhdGVDb3B5Rm9yTWl4ZWRGb250cygqY2FjaGVk
UGFnZSk7CisgICAgLy8gSW5pdGlhbGl6ZSBjYWNoZSB3aXRoIGEgZnVsbCBwYWdlIG9mIGdseXBo
IG1hcHBpbmdzIGZyb20gYSBzaW5nbGUgZm9udC4KKyAgICBpZiAoY2FjaGVFbnRyeS5pc051bGwo
KSkKKyAgICAgICAgY2FjaGVFbnRyeS5zZXRTaW5nbGVGb250UGFnZShnbHlwaFBhZ2VGcm9tRm9u
dFJhbmdlcyhwYWdlTnVtYmVyLCByZWFsaXplRmFsbGJhY2tSYW5nZXNBdChkZXNjcmlwdGlvbiwg
MCkpKTsKIAorICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBjYWNoZUVudHJ5LmdseXBoRGF0YUZv
ckNoYXJhY3RlcihjKTsKKyAgICBpZiAoIWdseXBoRGF0YS5nbHlwaCkgeworICAgICAgICAvLyBO
byBnbHlwaCwgcmVzb2x2ZSBwZXItY2hhcmFjdGVyLgogICAgICAgICBnbHlwaERhdGEgPSBnbHlw
aERhdGFGb3JOb3JtYWxWYXJpYW50KGMsIGRlc2NyaXB0aW9uKTsKLSAgICAgICAgY2FjaGVkUGFn
ZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGdseXBoRGF0YS5nbHlwaCwgZ2x5cGhEYXRh
LmZvbnQpOworICAgICAgICAvLyBDYWNoZSB0aGUgcmVzdWx0cy4KKyAgICAgICAgY2FjaGVFbnRy
eS5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZ2x5cGhEYXRhKTsKICAgICB9CisKICAgICBy
ZXR1cm4gZ2x5cGhEYXRhOwogfQogCkBAIC0zOTMsMTAgKzQ1MywxMCBAQCB2b2lkIEZvbnRDYXNj
YWRlRm9udHM6OnBydW5lU3lzdGVtRmFsbGJhCiAgICAgaWYgKG1fc3lzdGVtRmFsbGJhY2tGb250
U2V0LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuOwogICAgIC8vIE11dGFibGUgZ2x5cGggcGFn
ZXMgbWF5IHJlZmVyZW5jZSBmYWxsYmFjayBmb250cy4KLSAgICBpZiAobV9jYWNoZWRQYWdlWmVy
byAmJiAhbV9jYWNoZWRQYWdlWmVyby0+aXNJbW11dGFibGUoKSkKLSAgICAgICAgbV9jYWNoZWRQ
YWdlWmVybyA9IG51bGxwdHI7CisgICAgaWYgKG1fY2FjaGVkUGFnZVplcm8uaXNNaXhlZEZvbnQo
KSkKKyAgICAgICAgbV9jYWNoZWRQYWdlWmVybyA9IHsgfTsKICAgICBtX2NhY2hlZFBhZ2VzLnJl
bW92ZUlmKFtdKGRlY2x0eXBlKG1fY2FjaGVkUGFnZXMpOjpLZXlWYWx1ZVBhaXJUeXBlJiBrZXlB
bmRWYWx1ZSkgewotICAgICAgICByZXR1cm4gIWtleUFuZFZhbHVlLnZhbHVlLT5pc0ltbXV0YWJs
ZSgpOworICAgICAgICByZXR1cm4ga2V5QW5kVmFsdWUudmFsdWUuaXNNaXhlZEZvbnQoKTsKICAg
ICB9KTsKICAgICBtX3N5c3RlbUZhbGxiYWNrRm9udFNldC5jbGVhcigpOwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udENhc2NhZGVGb250cy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRDYXNjYWRlRm9udHMu
aAkocmV2aXNpb24gMTg5MjA2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Rm9udENhc2NhZGVGb250cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMSArMzUsMTIgQEAKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci1jbGFzcyBJbnRS
ZWN0OwogY2xhc3MgRm9udERlc2NyaXB0aW9uOwogY2xhc3MgRm9udFBsYXRmb3JtRGF0YTsKIGNs
YXNzIEZvbnRTZWxlY3RvcjsKK2NsYXNzIEdyYXBoaWNzQ29udGV4dDsKK2NsYXNzIEludFJlY3Q7
CitjbGFzcyBNaXhlZEZvbnRHbHlwaFBhZ2U7CiAKIGNsYXNzIEZvbnRDYXNjYWRlRm9udHMgOiBw
dWJsaWMgUmVmQ291bnRlZDxGb250Q2FzY2FkZUZvbnRzPiB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoRm9udENhc2NhZGVGb250cyk7CkBAIC04Miw4ICs4MywyNCBAQCBwcml2YXRlOgogICAg
IFZlY3RvcjxGb250UmFuZ2VzLCAxPiBtX3JlYWxpemVkRmFsbGJhY2tSYW5nZXM7CiAgICAgdW5z
aWduZWQgbV9sYXN0UmVhbGl6ZWRGYWxsYmFja0luZGV4IHsgMCB9OwogCi0gICAgUmVmUHRyPEds
eXBoUGFnZT4gbV9jYWNoZWRQYWdlWmVybzsKLSAgICBIYXNoTWFwPGludCwgUmVmUHRyPEdseXBo
UGFnZT4+IG1fY2FjaGVkUGFnZXM7CisgICAgY2xhc3MgR2x5cGhQYWdlQ2FjaGVFbnRyeSB7Cisg
ICAgcHVibGljOgorICAgICAgICBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFy
MzIpOworCisgICAgICAgIHZvaWQgc2V0U2luZ2xlRm9udFBhZ2UoUmVmUHRyPEdseXBoUGFnZT4m
Jik7CisgICAgICAgIHZvaWQgc2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKFVDaGFyMzIsIEdseXBo
RGF0YSk7CisKKyAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7IHJldHVybiAhbV9zaW5nbGVG
b250ICYmICFtX21peGVkRm9udDsgfQorICAgICAgICBib29sIGlzTWl4ZWRGb250KCkgY29uc3Qg
eyByZXR1cm4gISFtX21peGVkRm9udDsgfQorICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIC8v
IE9ubHkgb25lIG9mIHRoZXNlIGlzIG5vbi1udWxsLgorICAgICAgICBSZWZQdHI8R2x5cGhQYWdl
PiBtX3NpbmdsZUZvbnQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxNaXhlZEZvbnRHbHlwaFBh
Z2U+IG1fbWl4ZWRGb250OworICAgIH07CisKKyAgICBHbHlwaFBhZ2VDYWNoZUVudHJ5IG1fY2Fj
aGVkUGFnZVplcm87CisgICAgSGFzaE1hcDxpbnQsIEdseXBoUGFnZUNhY2hlRW50cnk+IG1fY2Fj
aGVkUGFnZXM7CiAKICAgICBIYXNoU2V0PFJlZlB0cjxGb250Pj4gbV9zeXN0ZW1GYWxsYmFja0Zv
bnRTZXQ7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBoUGFn
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dseXBo
UGFnZS5oCShyZXZpc2lvbiAxODk0NjYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9HbHlwaFBhZ2UuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsMzcgKzUzLDE0IEBAIHN0cnVj
dCBHbHlwaERhdGEgewogICAgIGNvbnN0IEZvbnQqIGZvbnQ7CiB9OwogCi0jaWYgQ09NUElMRVIo
TVNWQykKLSNwcmFnbWEgd2FybmluZyhwdXNoKQotI3ByYWdtYSB3YXJuaW5nKGRpc2FibGU6IDQy
MDApIC8vIERpc2FibGUgInplcm8tc2l6ZWQgYXJyYXkgaW4gc3RydWN0L3VuaW9uIiB3YXJuaW5n
Ci0jZW5kaWYKLQogLy8gQSBHbHlwaFBhZ2UgY29udGFpbnMgYSBmaXhlZC1zaXplIHNldCBvZiBH
bHlwaERhdGEgbWFwcGluZ3MgZm9yIGEgY29udGlndW91cwogLy8gcmFuZ2Ugb2YgY2hhcmFjdGVy
cyBpbiB0aGUgVW5pY29kZSBjb2RlIHNwYWNlLiBHbHlwaFBhZ2VzIGFyZSBpbmRleGVkCiAvLyBz
dGFydGluZyBmcm9tIDAgYW5kIGluY3JlbWVudGluZyBmb3IgZWFjaCAyNTYgZ2x5cGhzLgotLy8K
LS8vIE9uZSBwYWdlIG1heSBhY3R1YWxseSBpbmNsdWRlIGdseXBocyBmcm9tIG90aGVyIGZvbnRz
IGlmIHRoZSBjaGFyYWN0ZXJzIGFyZQotLy8gbWlzc2luZyBpbiB0aGUgcHJpbWFyeSBmb250Lgog
Y2xhc3MgR2x5cGhQYWdlIDogcHVibGljIFJlZkNvdW50ZWQ8R2x5cGhQYWdlPiB7CiBwdWJsaWM6
Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVGb3JNaXhlZEZvbnRzKCkK
LSAgICB7Ci0gICAgICAgIHZvaWQqIHNsb3QgPSBmYXN0TWFsbG9jKHNpemVvZihHbHlwaFBhZ2Up
ICsgc2l6ZW9mKEZvbnQqKSAqIEdseXBoUGFnZTo6c2l6ZSk7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgKE5vdE51bGwsIHNsb3QpIEdseXBoUGFnZShudWxscHRyKSk7Ci0gICAgfQotCi0g
ICAgc3RhdGljIFBhc3NSZWZQdHI8R2x5cGhQYWdlPiBjcmVhdGVDb3B5Rm9yTWl4ZWRGb250cyhj
b25zdCBHbHlwaFBhZ2UmIG9yaWdpbmFsKQorICAgIHN0YXRpYyBSZWY8R2x5cGhQYWdlPiBjcmVh
dGUoY29uc3QgRm9udCYgZm9udCkKICAgICB7Ci0gICAgICAgIFJlZlB0cjxHbHlwaFBhZ2U+IHBh
Z2UgPSBjcmVhdGVGb3JNaXhlZEZvbnRzKCk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkKLSAgICAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0
YUZvckluZGV4KGksIG9yaWdpbmFsLmdseXBoRGF0YUZvckluZGV4KGkpKTsKLSAgICAgICAgcmV0
dXJuIHBhZ2UucmVsZWFzZSgpOwotICAgIH0KLQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEdseXBo
UGFnZT4gY3JlYXRlRm9yU2luZ2xlRm9udChjb25zdCBGb250KiBmb250KQotICAgIHsKLSAgICAg
ICAgQVNTRVJUKGZvbnQpOwotICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEdseXBoUGFnZShm
b250KSk7CisgICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEdseXBoUGFnZShmb250KSk7CiAg
ICAgfQogCiAgICAgfkdseXBoUGFnZSgpCkBAIC05MSw5OSArNjgsNjEgQEAgcHVibGljOgogICAg
ICAgICAtLXNfY291bnQ7CiAgICAgfQogCi0gICAgYm9vbCBpc0ltbXV0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1faXNJbW11dGFibGU7IH0KLSAgICB2b2lkIHNldEltbXV0YWJsZSgpIHsgbV9pc0lt
bXV0YWJsZSA9IHRydWU7IH0KLQogICAgIHN0YXRpYyB1bnNpZ25lZCBjb3VudCgpIHsgcmV0dXJu
IHNfY291bnQ7IH0KIAogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZSA9IDI1NjsgLy8gQ292
ZXJzIExhdGluLTEgaW4gYSBzaW5nbGUgcGFnZS4KLSAgICBzdGF0aWNfYXNzZXJ0KCghKDB4RDgw
MCAlIHNpemUpKSAmJiAoISgweERDMDAgJSBzaXplKSkgJiYgKCEoMHhFMDAwICUgc2l6ZSkpLCAi
R2x5cGhQYWdlcyBtdXN0IG5ldmVyIHN0cmFkZGxlIGNvZGUtdW5pdCBsZW5ndGggYm91bmRhcmll
cyIpOwogICAgIHN0YXRpYyB1bnNpZ25lZCBpbmRleEZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIHsg
cmV0dXJuIGMgJSBHbHlwaFBhZ2U6OnNpemU7IH0KIAotICAgIEFMV0FZU19JTkxJTkUgR2x5cGhE
YXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CisgICAgR2x5cGhEYXRh
IGdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMpIGNvbnN0CiAgICAgewogICAgICAgICBy
ZXR1cm4gZ2x5cGhEYXRhRm9ySW5kZXgoaW5kZXhGb3JDaGFyYWN0ZXIoYykpOwogICAgIH0KIAot
ICAgIEFMV0FZU19JTkxJTkUgR2x5cGhEYXRhIGdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdAorICAgIEdseXBoIGdseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QK
ICAgICB7Ci0gICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwg
c2l6ZSk7Ci0gICAgICAgIEdseXBoIGdseXBoID0gbV9nbHlwaHNbaW5kZXhdOwotICAgICAgICBp
ZiAoaGFzUGVyR2x5cGhGb250RGF0YSgpKQotICAgICAgICAgICAgcmV0dXJuIEdseXBoRGF0YShn
bHlwaCwgbV9wZXJHbHlwaEZvbnREYXRhW2luZGV4XSk7Ci0gICAgICAgIHJldHVybiBHbHlwaERh
dGEoZ2x5cGgsIGdseXBoID8gbV9mb250Rm9yQWxsR2x5cGhzIDogMCk7CisgICAgICAgIHJldHVy
biBnbHlwaEZvckluZGV4KGluZGV4Rm9yQ2hhcmFjdGVyKGMpKTsKICAgICB9CiAKLSAgICBBTFdB
WVNfSU5MSU5FIEdseXBoIGdseXBoQXQodW5zaWduZWQgaW5kZXgpIGNvbnN0CisgICAgR2x5cGhE
YXRhIGdseXBoRGF0YUZvckluZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIHsKLSAgICAg
ICAgQVNTRVJUX1dJVEhfU0VDVVJJVFlfSU1QTElDQVRJT04oaW5kZXggPCBzaXplKTsKLSAgICAg
ICAgcmV0dXJuIG1fZ2x5cGhzW2luZGV4XTsKKyAgICAgICAgR2x5cGggZ2x5cGggPSBnbHlwaEZv
ckluZGV4KGluZGV4KTsKKyAgICAgICAgcmV0dXJuIEdseXBoRGF0YShnbHlwaCwgZ2x5cGggPyAm
bV9mb250IDogbnVsbHB0cik7CiAgICAgfQogCi0gICAgQUxXQVlTX0lOTElORSBjb25zdCBGb250
KiBmb250Rm9yQ2hhcmFjdGVyKFVDaGFyMzIgYykgY29uc3QKKyAgICBHbHlwaCBnbHlwaEZvcklu
ZGV4KHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIHsKLSAgICAgICAgdW5zaWduZWQgaW5kZXgg
PSBpbmRleEZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgaWYgKGhhc1BlckdseXBoRm9udERhdGEo
KSkKLSAgICAgICAgICAgIHJldHVybiBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdOwotICAgICAg
ICByZXR1cm4gbV9nbHlwaHNbaW5kZXhdID8gbV9mb250Rm9yQWxsR2x5cGhzIDogMDsKLSAgICB9
Ci0KLSAgICB2b2lkIHNldEdseXBoRGF0YUZvckNoYXJhY3RlcihVQ2hhcjMyIGMsIEdseXBoIGcs
IGNvbnN0IEZvbnQqIGYpCi0gICAgewotICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRl
eEZvckNoYXJhY3RlcihjKSwgZywgZik7CisgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lN
UExJQ0FUSU9OKGluZGV4IDwgc2l6ZSk7CisgICAgICAgIHJldHVybiBtX2dseXBoc1tpbmRleF07
CiAgICAgfQogCi0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1bnNpZ25lZCBpbmRleCwg
R2x5cGggZ2x5cGgsIGNvbnN0IEZvbnQqIGZvbnQpCisgICAgLy8gRklYTUU6IFBhZ2VzIGFyZSBp
bW11dGFibGUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24uIFRoaXMgc2hvdWxkIGJlIHByaXZhdGUuCisg
ICAgdm9pZCBzZXRHbHlwaEZvckluZGV4KHVuc2lnbmVkIGluZGV4LCBHbHlwaCBnbHlwaCkKICAg
ICB7CiAgICAgICAgIEFTU0VSVF9XSVRIX1NFQ1VSSVRZX0lNUExJQ0FUSU9OKGluZGV4IDwgc2l6
ZSk7Ci0gICAgICAgIEFTU0VSVCghbV9pc0ltbXV0YWJsZSk7Ci0gICAgICAgIAogICAgICAgICBt
X2dseXBoc1tpbmRleF0gPSBnbHlwaDsKLQotICAgICAgICAvLyBHbHlwaFBhZ2UgZ2V0dGVycyB3
aWxsIGFsd2F5cyByZXR1cm4gYSBudWxsIEZvbnQqIGZvciBnbHlwaCAjMCBpZiB0aGVyZSdzIG5v
IHBlci1nbHlwaCBmb250IGFycmF5LgotICAgICAgICBpZiAoaGFzUGVyR2x5cGhGb250RGF0YSgp
KSB7Ci0gICAgICAgICAgICBtX3BlckdseXBoRm9udERhdGFbaW5kZXhdID0gZ2x5cGggPyBmb250
IDogMDsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIC8vIEEgc2lu
Z2xlLWZvbnQgR2x5cGhQYWdlIGFscmVhZHkgYXNzaWduZWQgbV9mb250Rm9yQWxsR2x5cGhzIGlu
IHRoZSBjb25zdHJ1Y3Rvci4KLSAgICAgICAgQVNTRVJUKCFnbHlwaCB8fCBmb250ID09IG1fZm9u
dEZvckFsbEdseXBocyk7CiAgICAgfQogCi0gICAgdm9pZCBzZXRHbHlwaERhdGFGb3JJbmRleCh1
bnNpZ25lZCBpbmRleCwgY29uc3QgR2x5cGhEYXRhJiBnbHlwaERhdGEpCisgICAgY29uc3QgRm9u
dCYgZm9udCgpIGNvbnN0CiAgICAgewotICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRleChpbmRl
eCwgZ2x5cGhEYXRhLmdseXBoLCBnbHlwaERhdGEuZm9udCk7CisgICAgICAgIHJldHVybiBtX2Zv
bnQ7CiAgICAgfQogCiAgICAgLy8gSW1wbGVtZW50ZWQgYnkgdGhlIHBsYXRmb3JtLgogICAgIGJv
b2wgZmlsbChVQ2hhciogY2hhcmFjdGVyQnVmZmVyLCB1bnNpZ25lZCBidWZmZXJMZW5ndGgsIGNv
bnN0IEZvbnQqKTsKIAogcHJpdmF0ZToKLSAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9u
dCogZm9udEZvckFsbEdseXBocykKLSAgICAgICAgOiBtX2ZvbnRGb3JBbGxHbHlwaHMoZm9udEZv
ckFsbEdseXBocykKKyAgICBleHBsaWNpdCBHbHlwaFBhZ2UoY29uc3QgRm9udCYgZm9udCkKKyAg
ICAgICAgOiBtX2ZvbnQoZm9udCkKICAgICB7Ci0gICAgICAgIG1lbXNldChtX2dseXBocywgMCwg
c2l6ZW9mKG1fZ2x5cGhzKSk7Ci0gICAgICAgIGlmIChoYXNQZXJHbHlwaEZvbnREYXRhKCkpCi0g
ICAgICAgICAgICBtZW1zZXQobV9wZXJHbHlwaEZvbnREYXRhLCAwLCBzaXplb2YoRm9udCopICog
R2x5cGhQYWdlOjpzaXplKTsKICAgICAgICAgKytzX2NvdW50OwogICAgIH0KIAotICAgIGJvb2wg
aGFzUGVyR2x5cGhGb250RGF0YSgpIGNvbnN0IHsgcmV0dXJuICFtX2ZvbnRGb3JBbGxHbHlwaHM7
IH0KLQotICAgIGNvbnN0IEZvbnQqIG1fZm9udEZvckFsbEdseXBoczsKLSAgICBHbHlwaCBtX2ds
eXBoc1tzaXplXTsKLQotICAgIGJvb2wgbV9pc0ltbXV0YWJsZSB7IGZhbHNlIH07Ci0gICAgLy8g
Tk9URTogVGhpcyBhcnJheSBoYXMgKEdseXBoUGFnZTo6c2l6ZSkgZWxlbWVudHMgaWYgbV9mb250
Rm9yQWxsR2x5cGhzIGlzIG51bGwuCi0gICAgY29uc3QgRm9udCogbV9wZXJHbHlwaEZvbnREYXRh
WzBdOworICAgIGNvbnN0IEZvbnQmIG1fZm9udDsKKyAgICBHbHlwaCBtX2dseXBoc1tzaXplXSB7
IH07CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgdW5zaWduZWQgc19jb3VudDsKIH07CiAK
LSNpZiBDT01QSUxFUihNU1ZDKQotI3ByYWdtYSB3YXJuaW5nKHBvcCkKLSNlbmRpZgotCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBHbHlwaFBhZ2VfaApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVl
VHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
ZnJlZXR5cGUvR2x5cGhQYWdlVHJlZU5vZGVGcmVlVHlwZS5jcHAJKHJldmlzaW9uIDE4OTQ2NSkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2ZyZWV0eXBlL0dseXBoUGFnZVRy
ZWVOb2RlRnJlZVR5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw5ICs1Nyw5IEBAIGJvb2wg
R2x5cGhQYWdlOjpmaWxsKFVDaGFyKiBidWZmZXIsIHVuc2kKIAogICAgICAgICBHbHlwaCBnbHlw
aCA9IEZjRnJlZVR5cGVDaGFySW5kZXgoZmFjZSwgY2hhcmFjdGVyKTsKICAgICAgICAgaWYgKCFn
bHlwaCkKLSAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4KGksIDAsIDApOworICAgICAg
ICAgICAgc2V0R2x5cGhGb3JJbmRleChpLCAwKTsKICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAg
ICBzZXRHbHlwaERhdGFGb3JJbmRleChpLCBnbHlwaCwgZm9udERhdGEpOworICAgICAgICAgICAg
c2V0R2x5cGhGb3JJbmRleChpLCBnbHlwaCk7CiAgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1
ZTsKICAgICAgICAgfQogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL21hYy9HbHlwaFBhZ2VNYWMuY3BwCShyZXZpc2lvbiAxODk0NjYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR2x5cGhQYWdlTWFjLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNjAsMjMgKzYwLDE4IEBAIHN0YXRpYyBib29sIHNob3VsZFVzZUNv
cmVUZXh0KGNvbnN0IFVDaGEKIAogYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250RGF0YSkKIHsKLSAgICBib29s
IGhhdmVHbHlwaHMgPSBmYWxzZTsKKyAgICBBU1NFUlQoZm9udERhdGEgPT0gJmZvbnQoKSk7Cisg
ICAgQVNTRVJUKGJ1ZmZlckxlbmd0aCA9PSBHbHlwaFBhZ2U6OnNpemUgfHwgYnVmZmVyTGVuZ3Ro
ID09IDIgKiBHbHlwaFBhZ2U6OnNpemUpOwogCiAgICAgVmVjdG9yPENHR2x5cGgsIDUxMj4gZ2x5
cGhzKGJ1ZmZlckxlbmd0aCk7CisgICAgdW5zaWduZWQgZ2x5cGhTdGVwOwogICAgIGlmICghc2hv
dWxkVXNlQ29yZVRleHQoYnVmZmVyLCBidWZmZXJMZW5ndGgsIGZvbnREYXRhKSkgewogICAgICAg
ICAvLyBXZSBwYXNzIGluIGVpdGhlciAyNTYgb3IgNTEyIFVURi0xNiBjaGFyYWN0ZXJzOiAyNTYg
Zm9yIFUrRkZGRiBhbmQgbGVzcywgNTEyIChkb3VibGUgY2hhcmFjdGVyIHN1cnJvZ2F0ZXMpCiAg
ICAgICAgIC8vIGZvciBVKzEwMDAwIGFuZCBhYm92ZS4gSXQgaXMgaW5kZWVkIHBvc3NpYmxlIHRv
IGdldCBiYWNrIDUxMiBnbHlwaHMgYmFjayBmcm9tIHRoZSBBUEksIHNvIHRoZSBnbHlwaCBidWZm
ZXIKICAgICAgICAgLy8gd2UgcGFzcyBpbiBtdXN0IGJlIDUxMi4gSWYgd2UgZ2V0IGJhY2sgbW9y
ZSB0aGFuIDI1NiBnbHlwaHMgdGhvdWdoIHdlJ2xsIGlnbm9yZSBhbGwgdGhlIG9uZXMgYWZ0ZXIg
MjU2LAogICAgICAgICAvLyB0aGlzIHNob3VsZCBub3QgaGFwcGVuIGFzIHRoZSBvbmx5IHRpbWUg
d2UgcGFzcyBpbiA1MTIgY2hhcmFjdGVycyBpcyB3aGVuIHRoZXkgYXJlIHN1cnJvZ2F0ZXMuCiAg
ICAgICAgIENHRm9udEdldEdseXBoc0ZvclVuaWNoYXJzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5jZ0ZvbnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJMZW5ndGgpOwotICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKLSAgICAg
ICAgICAgIGlmICghZ2x5cGhzW2ldKQotICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvcklu
ZGV4KGksIDAsIDApOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0R2x5
cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhzW2ldLCBmb250RGF0YSk7Ci0gICAgICAgICAgICAgICAg
aGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAgICAgICAgZ2x5
cGhTdGVwID0gMTsKICAgICB9IGVsc2UgewogICAgICAgICAvLyBCZWNhdXNlIHdlIGtub3cgdGhl
IGltcGxlbWVudGF0aW9uIG9mIHNob3VsZFVzZUNvcmVUZXh0KCksIGlmIHRoZSBmb250IGlzbid0
IGZvciB0ZXh0IGNvbWJpbmUgYW5kIGl0IGlzbid0IGEgc3lzdGVtIGZvbnQsCiAgICAgICAgIC8v
IHdlIGtub3cgaXQgbXVzdCBoYXZlIHZlcnRpY2FsIGdseXBocy4KQEAgLTg0LDIwICs3OSwxOSBA
QCBib29sIEdseXBoUGFnZTo6ZmlsbChVQ2hhciogYnVmZmVyLCB1bnNpCiAgICAgICAgICAgICBD
VEZvbnRHZXRHbHlwaHNGb3JDaGFyYWN0ZXJzKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5jdEZv
bnQoKSwgYnVmZmVyLCBnbHlwaHMuZGF0YSgpLCBidWZmZXJMZW5ndGgpOwogICAgICAgICBlbHNl
CiAgICAgICAgICAgICBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMoZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLmN0Rm9udCgpLCBidWZmZXIsIGdseXBocy5kYXRhKCksIGJ1ZmZl
ckxlbmd0aCk7CisKICAgICAgICAgLy8gV2hlbiBidWZmZXIgY29uc2lzdHMgb2Ygc3Vycm9nYXRl
IHBhaXJzLCBDVEZvbnRHZXRWZXJ0aWNhbEdseXBoc0ZvckNoYXJhY3RlcnMgYW5kIENURm9udEdl
dEdseXBoc0ZvckNoYXJhY3RlcnMKICAgICAgICAgLy8gcGxhY2UgdGhlIGdseXBocyBhdCBpbmRp
Y2VzIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGZpcnN0IGNoYXJhY3RlciBvZiBlYWNoIHBhaXIuCi0g
ICAgICAgIEFTU0VSVChidWZmZXJMZW5ndGggPT0gR2x5cGhQYWdlOjpzaXplIHx8IGJ1ZmZlckxl
bmd0aCA9PSAyICogR2x5cGhQYWdlOjpzaXplKTsKLSAgICAgICAgdW5zaWduZWQgZ2x5cGhTdGVw
ID0gYnVmZmVyTGVuZ3RoIC8gR2x5cGhQYWdlOjpzaXplOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgR2x5cGhQYWdlOjpzaXplOyArK2kpIHsKLSAgICAgICAgICAgIGlmICghZ2x5
cGhzW2kgKiBnbHlwaFN0ZXBdKQotICAgICAgICAgICAgICAgIHNldEdseXBoRGF0YUZvckluZGV4
KGksIDAsIDApOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2V0R2x5cGhE
YXRhRm9ySW5kZXgoaSwgZ2x5cGhzW2kgKiBnbHlwaFN0ZXBdLCBmb250RGF0YSk7Ci0gICAgICAg
ICAgICAgICAgaGF2ZUdseXBocyA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KKyAg
ICAgICAgZ2x5cGhTdGVwID0gYnVmZmVyTGVuZ3RoIC8gR2x5cGhQYWdlOjpzaXplOwogICAgIH0K
IAorICAgIGJvb2wgaGF2ZUdseXBocyA9IGZhbHNlOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBHbHlwaFBhZ2U6OnNpemU7ICsraSkgeworICAgICAgICBpZiAoZ2x5cGhzW2kgKiBnbHlw
aFN0ZXBdKSB7CisgICAgICAgICAgICBzZXRHbHlwaEZvckluZGV4KGksIGdseXBoc1tpICogZ2x5
cGhTdGVwXSk7CisgICAgICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKKyAgICAgICAgfQorICAg
IH0KICAgICByZXR1cm4gaGF2ZUdseXBoczsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW50eXBlL09wZW5UeXBl
VmVydGljYWxEYXRhLmNwcAkocmV2aXNpb24gMTg5NDY1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvb3BlbnR5cGUvT3BlblR5cGVWZXJ0aWNhbERhdGEuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC01NDIsMTIgKzU0MiwxMiBAQCB2b2lkIE9wZW5UeXBlVmVydGljYWxEYXRhOjpz
dWJzdGl0dXRlV2l0CiAgICAgICAgIHJldHVybjsKIAogICAgIGZvciAodW5zaWduZWQgaW5kZXgg
PSAwOyBpbmRleCA8IEdseXBoUGFnZTo6c2l6ZTsgKytpbmRleCkgewotICAgICAgICBHbHlwaCBn
bHlwaCA9IGdseXBoUGFnZS0+Z2x5cGhBdChpbmRleCk7CisgICAgICAgIEdseXBoIGdseXBoID0g
Z2x5cGhQYWdlLT5nbHlwaEZvckluZGV4KGluZGV4KTsKICAgICAgICAgaWYgKGdseXBoKSB7Ci0g
ICAgICAgICAgICBBU1NFUlQoZ2x5cGhQYWdlLT5nbHlwaERhdGFGb3JJbmRleChpbmRleCkuZm9u
dCA9PSBmb250KTsKKyAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoZm9udCwgJmdseXBoUGFnZS0+
Zm9udCgpID09IGZvbnQpOwogICAgICAgICAgICAgR2x5cGggdG8gPSBtYXAuZ2V0KGdseXBoKTsK
ICAgICAgICAgICAgIGlmICh0bykKLSAgICAgICAgICAgICAgICBnbHlwaFBhZ2UtPnNldEdseXBo
RGF0YUZvckluZGV4KGluZGV4LCB0bywgZm9udCk7CisgICAgICAgICAgICAgICAgZ2x5cGhQYWdl
LT5zZXRHbHlwaEZvckluZGV4KGluZGV4LCB0byk7CiAgICAgICAgIH0KICAgICB9CiB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVD
R1dpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL0dseXBoUGFnZVRyZWVOb2RlQ0dXaW4uY3BwCShyZXZpc2lvbiAxODk0NjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDR1dpbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDkgKzQ3LDkgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwo
VUNoYXIqIGJ1ZmZlciwgdW5zaQogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBHbHlwaFBh
Z2U6OnNpemU7IGkrKykgewogICAgICAgICBHbHlwaCBnbHlwaCA9IGxvY2FsR2x5cGhCdWZmZXJb
aV07CiAgICAgICAgIGlmICghZ2x5cGgpCi0gICAgICAgICAgICBzZXRHbHlwaERhdGFGb3JJbmRl
eChpLCAwLCAwKTsKKyAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgMCk7CiAgICAgICAg
IGVsc2UgewotICAgICAgICAgICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGgsIGZvbnRE
YXRhKTsKKyAgICAgICAgICAgIHNldEdseXBoRm9ySW5kZXgoaSwgZ2x5cGgpOwogICAgICAgICAg
ICAgaGF2ZUdseXBocyA9IHRydWU7CiAgICAgICAgIH0KICAgICB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dseXBo
UGFnZVRyZWVOb2RlQ2Fpcm9XaW4uY3BwCShyZXZpc2lvbiAxODk0NjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR2x5cGhQYWdlVHJlZU5vZGVDYWlyb1dpbi5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTU0LDkgKzU0LDkgQEAgYm9vbCBHbHlwaFBhZ2U6OmZpbGwoVUNo
YXIqIGJ1ZmZlciwgdW5zaQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgR2x5cGhQ
YWdlOjpzaXplOyBpKyspIHsKICAgICAgICAgICAgIEdseXBoIGdseXBoID0gbG9jYWxHbHlwaEJ1
ZmZlcltpXTsKICAgICAgICAgICAgIGlmIChnbHlwaCA9PSAweGZmZmYpCi0gICAgICAgICAgICAg
ICAgc2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgMCwgMCk7CisgICAgICAgICAgICAgICAgc2V0R2x5
cGhGb3JJbmRleChpLCAwKTsKICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIHNl
dEdseXBoRGF0YUZvckluZGV4KGksIGdseXBoLCBmb250RGF0YSk7CisgICAgICAgICAgICAgICAg
c2V0R2x5cGhGb3JJbmRleChpLCBnbHlwaCk7CiAgICAgICAgICAgICAgICAgaGF2ZUdseXBocyA9
IHRydWU7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3N2
Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmNwcAkocmV2aXNpb24gMTg5NDY1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NWR0Zv
bnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA0LDExICsyMDQsOCBAQCBib29sIFNWR0Zv
bnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1i
b29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSogcGFnZVRvRmlsbCwg
VUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3RoLCBjb25zdCBGb250KiBmb250KSBj
b25zdAorYm9vbCBTVkdGb250RGF0YTo6ZmlsbFNWR0dseXBoUGFnZShHbHlwaFBhZ2UqIHBhZ2VU
b0ZpbGwsIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCkgY29uc3QKIHsKLSAg
ICBBU1NFUlQoZm9udC0+aXNDdXN0b21Gb250KCkpOwotICAgIEFTU0VSVChmb250LT5pc1NWR0Zv
bnQoKSk7Ci0KICAgICBTVkdGb250RmFjZUVsZW1lbnQqIGZvbnRGYWNlRWxlbWVudCA9IHRoaXMt
PnN2Z0ZvbnRGYWNlRWxlbWVudCgpOwogICAgIEFTU0VSVChmb250RmFjZUVsZW1lbnQpOwogCkBA
IC0yMTYsMTMgKzIxMywxMyBAQCBib29sIFNWR0ZvbnREYXRhOjpmaWxsU1ZHR2x5cGhQYWdlKEds
eXBoCiAgICAgQVNTRVJUKGZvbnRFbGVtZW50KTsKIAogICAgIGlmIChidWZmZXJMZW5ndGggPT0g
R2x5cGhQYWdlOjpzaXplKQotICAgICAgICByZXR1cm4gZmlsbEJNUEdseXBocyhmb250RWxlbWVu
dCwgcGFnZVRvRmlsbCwgYnVmZmVyLCBmb250KTsKKyAgICAgICAgcmV0dXJuIGZpbGxCTVBHbHlw
aHMoZm9udEVsZW1lbnQsIHBhZ2VUb0ZpbGwsIGJ1ZmZlcik7CiAKICAgICBBU1NFUlQoYnVmZmVy
TGVuZ3RoID09IDIgKiBHbHlwaFBhZ2U6OnNpemUpOwotICAgIHJldHVybiBmaWxsTm9uQk1QR2x5
cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBidWZmZXIsIGZvbnQpOworICAgIHJldHVybiBm
aWxsTm9uQk1QR2x5cGhzKGZvbnRFbGVtZW50LCBwYWdlVG9GaWxsLCBidWZmZXIpOwogfQogCi1i
b29sIFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVu
dCwgR2x5cGhQYWdlKiBwYWdlVG9GaWxsLCBVQ2hhciogYnVmZmVyLCBjb25zdCBGb250KiBmb250
KSBjb25zdAorYm9vbCBTVkdGb250RGF0YTo6ZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCog
Zm9udEVsZW1lbnQsIEdseXBoUGFnZSogcGFnZVRvRmlsbCwgVUNoYXIqIGJ1ZmZlcikgY29uc3QK
IHsKICAgICBib29sIGhhdmVHbHlwaHMgPSBmYWxzZTsKICAgICBWZWN0b3I8U1ZHR2x5cGg+IGds
eXBoczsKQEAgLTIzMCw3ICsyMjcsNyBAQCBib29sIFNWR0ZvbnREYXRhOjpmaWxsQk1QR2x5cGhz
KFNWR0ZvbnRFCiAgICAgICAgIFN0cmluZyBsb29rdXBTdHJpbmcoYnVmZmVyICsgaSwgMSk7CiAg
ICAgICAgIGZvbnRFbGVtZW50LT5jb2xsZWN0R2x5cGhzRm9yU3RyaW5nKGxvb2t1cFN0cmluZywg
Z2x5cGhzKTsKICAgICAgICAgaWYgKGdseXBocy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHBh
Z2VUb0ZpbGwtPnNldEdseXBoRGF0YUZvckluZGV4KGksIDAsIDApOworICAgICAgICAgICAgcGFn
ZVRvRmlsbC0+c2V0R2x5cGhGb3JJbmRleChpLCAwKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CiAKQEAgLTIzOSwxNCArMjM2LDE0IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxC
TVBHbHlwaHMoU1ZHRm9udEUKICAgICAgICAgLy8gY2FyZSBvZiBtYXRjaGluZyB0byB0aGUgY29y
cmVjdCBnbHlwaCwgaWYgbXVsdGlwbGUgb25lcyBhcmUgYXZhaWxhYmxlLCBhcyB0aGF0J3MKICAg
ICAgICAgLy8gb25seSBwb3NzaWJsZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYSBzdHJpbmcgKGVn
LiBhcmFiaWMgZm9ybSBtYXRjaGluZykuCiAgICAgICAgIGhhdmVHbHlwaHMgPSB0cnVlOwotICAg
ICAgICBwYWdlVG9GaWxsLT5zZXRHbHlwaERhdGFGb3JJbmRleChpLCBnbHlwaHMuZmlyc3QoKS50
YWJsZUVudHJ5LCBmb250KTsKKyAgICAgICAgcGFnZVRvRmlsbC0+c2V0R2x5cGhGb3JJbmRleChp
LCBnbHlwaHMuZmlyc3QoKS50YWJsZUVudHJ5KTsKICAgICAgICAgZ2x5cGhzLmNsZWFyKCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIGhhdmVHbHlwaHM7CiB9CiAKLWJvb2wgU1ZHRm9udERhdGE6OmZp
bGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqIGZvbnRFbGVtZW50LCBHbHlwaFBhZ2UqIHBh
Z2VUb0ZpbGwsIFVDaGFyKiBidWZmZXIsIGNvbnN0IEZvbnQqIGZvbnQpIGNvbnN0Citib29sIFNW
R0ZvbnREYXRhOjpmaWxsTm9uQk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiBmb250RWxlbWVudCwg
R2x5cGhQYWdlKiBwYWdlVG9GaWxsLCBVQ2hhciogYnVmZmVyKSBjb25zdAogewogICAgIGJvb2wg
aGF2ZUdseXBocyA9IGZhbHNlOwogICAgIFZlY3RvcjxTVkdHbHlwaD4gZ2x5cGhzOwpAQCAtMjU1
LDcgKzI1Miw3IEBAIGJvb2wgU1ZHRm9udERhdGE6OmZpbGxOb25CTVBHbHlwaHMoU1ZHRm8KICAg
ICAgICAgU3RyaW5nIGxvb2t1cFN0cmluZyhidWZmZXIgKyBpICogMiwgMik7CiAgICAgICAgIGZv
bnRFbGVtZW50LT5jb2xsZWN0R2x5cGhzRm9yU3RyaW5nKGxvb2t1cFN0cmluZywgZ2x5cGhzKTsK
ICAgICAgICAgaWYgKGdseXBocy5pc0VtcHR5KCkpIHsKLSAgICAgICAgICAgIHBhZ2VUb0ZpbGwt
PnNldEdseXBoRGF0YUZvckluZGV4KGksIDAsIDApOworICAgICAgICAgICAgcGFnZVRvRmlsbC0+
c2V0R2x5cGhGb3JJbmRleChpLCAwKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9
CiAKQEAgLTI2NCw3ICsyNjEsNyBAQCBib29sIFNWR0ZvbnREYXRhOjpmaWxsTm9uQk1QR2x5cGhz
KFNWR0ZvCiAgICAgICAgIC8vIGNhcmUgb2YgbWF0Y2hpbmcgdG8gdGhlIGNvcnJlY3QgZ2x5cGgs
IGlmIG11bHRpcGxlIG9uZXMgYXJlIGF2YWlsYWJsZSwgYXMgdGhhdCdzCiAgICAgICAgIC8vIG9u
bHkgcG9zc2libGUgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgc3RyaW5nIChlZy4gYXJhYmljIGZv
cm0gbWF0Y2hpbmcpLgogICAgICAgICBoYXZlR2x5cGhzID0gdHJ1ZTsKLSAgICAgICAgcGFnZVRv
RmlsbC0+c2V0R2x5cGhEYXRhRm9ySW5kZXgoaSwgZ2x5cGhzLmZpcnN0KCkudGFibGVFbnRyeSwg
Zm9udCk7CisgICAgICAgIHBhZ2VUb0ZpbGwtPnNldEdseXBoRm9ySW5kZXgoaSwgZ2x5cGhzLmZp
cnN0KCkudGFibGVFbnRyeSk7CiAgICAgICAgIGdseXBocy5jbGVhcigpOwogICAgIH0KIApJbmRl
eDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmgJKHJldmlzaW9uIDE4OTQ2NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3N2Zy9TVkdGb250RGF0YS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBA
IHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBpbml0aWFsaXplRm9udChGb250KiwgZmxvYXQg
Zm9udFNpemUpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgZmxvYXQgd2lkdGhGb3JTVkdHbHlwaChH
bHlwaCwgZmxvYXQgZm9udFNpemUpIGNvbnN0IG92ZXJyaWRlOwotICAgIHZpcnR1YWwgYm9vbCBm
aWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgY29uc3QgRm9udCopIGNvbnN0IG92ZXJyaWRlOworICAgIHZpcnR1YWwgYm9vbCBm
aWxsU1ZHR2x5cGhQYWdlKEdseXBoUGFnZSosIFVDaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCkgY29uc3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIGFwcGx5U1ZHR2x5cGhTZWxlY3Rp
b24oV2lkdGhJdGVyYXRvciYsIEdseXBoRGF0YSYsIGJvb2wgbWlycm9yLCBpbnQgY3VycmVudENo
YXJhY3RlciwgdW5zaWduZWQmIGFkdmFuY2VMZW5ndGgsIFN0cmluZyYgbm9ybWFsaXplZFNwYWNl
c1N0cmluZ0NhY2hlKSBjb25zdDsKIApAQCAtNTAsOCArNTAsOCBAQCBwdWJsaWM6CiAgICAgZmxv
YXQgdmVydGljYWxBZHZhbmNlWSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVydGljYWxBZHZhbmNlWTsg
fQogCiBwcml2YXRlOgotICAgIGJvb2wgZmlsbEJNUEdseXBocyhTVkdGb250RWxlbWVudCosIEds
eXBoUGFnZSosIFVDaGFyKiBidWZmZXIsIGNvbnN0IEZvbnQqKSBjb25zdDsKLSAgICBib29sIGZp
bGxOb25CTVBHbHlwaHMoU1ZHRm9udEVsZW1lbnQqLCBHbHlwaFBhZ2UqLCBVQ2hhciogYnVmZmVy
LCBjb25zdCBGb250KikgY29uc3Q7CisgICAgYm9vbCBmaWxsQk1QR2x5cGhzKFNWR0ZvbnRFbGVt
ZW50KiwgR2x5cGhQYWdlKiwgVUNoYXIqIGJ1ZmZlcikgY29uc3Q7CisgICAgYm9vbCBmaWxsTm9u
Qk1QR2x5cGhzKFNWR0ZvbnRFbGVtZW50KiwgR2x5cGhQYWdlKiwgVUNoYXIqIGJ1ZmZlcikgY29u
c3Q7CiAKICAgICBib29sIGFwcGx5VHJhbnNmb3JtcyhHbHlwaEJ1ZmZlckdseXBoKiwgR2x5cGhC
dWZmZXJBZHZhbmNlKiwgc2l6ZV90LCBUeXBlc2V0dGluZ0ZlYXR1cmVzKSBjb25zdCA9IGRlbGV0
ZTsKIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>