<?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>116803</bug_id>
          
          <creation_ts>2013-05-26 18:09:55 -0700</creation_ts>
          <short_desc>Encapsulate FontGlyphs</short_desc>
          <delta_ts>2013-05-26 18:41:22 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>d-r</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>fmalita</cc>
    
    <cc>glenn</cc>
    
    <cc>kling</cc>
    
    <cc>pdr</cc>
    
    <cc>schenney</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>893856</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 18:09:55 -0700</bug_when>
    <thetext>Defriend Font.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893864</commentid>
    <comment_count>1</comment_count>
      <attachid>202942</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 18:24:36 -0700</bug_when>
    <thetext>Created attachment 202942
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893868</commentid>
    <comment_count>2</comment_count>
      <attachid>202942</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2013-05-26 18:36:43 -0700</bug_when>
    <thetext>Comment on attachment 202942
patch

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

r=me

&gt; Source/WebCore/ChangeLog:21
&gt; +            Helpers form FontFastPath.cpp.

Typo, from.

&gt; Source/WebCore/platform/graphics/FontFallbackList.cpp:62
&gt; +    m_realizedFontData.append(fontData);

You should .release() the RefPtr here. Or make it a one-liner.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>893871</commentid>
    <comment_count>3</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2013-05-26 18:41:22 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/150730</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>202942</attachid>
            <date>2013-05-26 18:24:36 -0700</date>
            <delta_ts>2013-05-26 18:36:43 -0700</delta_ts>
            <desc>patch</desc>
            <filename>unfriend-font.patch</filename>
            <type>text/plain</type>
            <size>38001</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MDcyOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQzIEBACisyMDEzLTA1LTI2ICBBbnR0aSBL
b2l2aXN0byAgPGFudHRpQGFwcGxlLmNvbT4KKworICAgICAgICBFbmNhcHN1bGF0ZSBGb250R2x5
cGhzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY4
MDMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGb250
R2x5cGhzIGlzIHVuZnJpZW5kaW5nIEZvbnQuIEdpdmUgaXQgYSByZWFsIGNsYXNzIGludGVyZmFj
ZSBhbmQgc29tZSBhY3R1YWwgY29kZS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0Zv
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Rm9udCk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Z2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmdseXBoRGF0YUFuZFBhZ2VGb3JD
aGFyYWN0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3Qu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6Rm9udEdseXBocyk6CisgICAgICAg
IChXZWJDb3JlOjppc0luUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2hvdWxkSWdub3JlUm90
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Z2x5cGhEYXRhQW5kUGFnZUZvck5vbkNKS0NoYXJh
Y3RlcldpdGhHbHlwaE9yaWVudGF0aW9uKToKKyAgICAgICAgCisgICAgICAgICAgICBIZWxwZXJz
IGZvcm0gRm9udEZhc3RQYXRoLmNwcC4KKworICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6
Z2x5cGhEYXRhQW5kUGFnZUZvckNoYXJhY3Rlcik6CisgICAgICAgIAorICAgICAgICAgICAgVGhp
cyBpcyB0aGUgcHJpbWFyeSBpbnRlcmZhY2UuIFRoZSBjb2RlIG1vdmVzIGhlcmUgZnJvbSBGb250
RmFzdFBhdGguY3BwLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhbGxiYWNr
TGlzdC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEdseXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1E
YXRhKToKKyAgICAgICAgCisgICAgICAgICAgICBSZW1vdmUgc2V0UGxhdGZvcm1EYXRhIGluIGZh
dm9yIG9mIGNvbnN0cnVjdG9yLgorCisgICAgICAgIChXZWJDb3JlOjpGb250R2x5cGhzOjpwcmlt
YXJ5U2ltcGxlRm9udERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYXN0
UGF0aC5jcHA6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0Lmg6
CisKKyAgICAgICAgICAgIFJlbW92ZSBhIHN0cmF5IGZ1bmN0aW9uIGRlZmluaXRpb24gYWxzbyBj
YWxsZWQgc2V0UGxhdGZvcm1Gb250KCkuCisKKyAgICAgICAgKiByZW5kZXJpbmcvc3ZnL1NWR1Rl
eHRSdW5SZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1RleHRSdW5S
ZW5kZXJpbmdDb250ZXh0OjpnbHlwaERhdGFGb3JDaGFyYWN0ZXIpOgorCiAyMDEzLTA1LTI2ICBT
ZW9ranUgS3dvbiAgPHNlb2tqdS5rd29uQGdtYWlsLmNvbT4KIAogICAgICAgICBSZW1vdmUgYSBs
ZWZ0b3ZlciBDQUxFTkRBUl9QSUNLRVIgZnJvbSBMb2NhbGVOb25lLmNwcApJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHJldmlzaW9uIDE1MDcyNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04OSw3ICs4OSw3IEBAIEZvbnQ6OkZvbnQoY29uc3QgRm9udERlc2NyaXB0aW9uJiBmZCwg
c2gKIH0KIAogRm9udDo6Rm9udChjb25zdCBGb250UGxhdGZvcm1EYXRhJiBmb250RGF0YSwgYm9v
bCBpc1ByaW50ZXJGb250LCBGb250U21vb3RoaW5nTW9kZSBmb250U21vb3RoaW5nTW9kZSkKLSAg
ICA6IG1fZ2x5cGhzKEZvbnRHbHlwaHM6OmNyZWF0ZSgpKQorICAgIDogbV9nbHlwaHMoRm9udEds
eXBoczo6Y3JlYXRlRm9yUGxhdGZvcm1EYXRhKGZvbnREYXRhKSkKICAgICAsIG1fbGV0dGVyU3Bh
Y2luZygwKQogICAgICwgbV93b3JkU3BhY2luZygwKQogICAgICwgbV9pc1BsYXRmb3JtRm9udCh0
cnVlKQpAQCAtOTgsNyArOTgsNiBAQCBGb250OjpGb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEm
IGZvbnRECiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0VXNlUHJpbnRlckZvbnQoaXNQcmludGVy
Rm9udCk7CiAgICAgbV9mb250RGVzY3JpcHRpb24uc2V0Rm9udFNtb290aGluZyhmb250U21vb3Ro
aW5nTW9kZSk7CiAgICAgbV9uZWVkc1RyYW5zY29kaW5nID0gZm9udFRyYW5zY29kZXIoKS5uZWVk
c1RyYW5zY29kaW5nKGZvbnREZXNjcmlwdGlvbigpKTsKLSAgICBtX2dseXBocy0+c2V0UGxhdGZv
cm1Gb250KGZvbnREYXRhKTsKIH0KIAogRm9udDo6Rm9udChjb25zdCBGb250JiBvdGhlcikKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDE1MDcy
NykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBj
b3B5KQpAQCAtMTUxLDE0ICsxNTEsMTcgQEAgcHVibGljOgogCiAgICAgY29uc3QgU2ltcGxlRm9u
dERhdGEqIHByaW1hcnlGb250KCkgY29uc3Q7CiAgICAgY29uc3QgRm9udERhdGEqIGZvbnREYXRh
QXQodW5zaWduZWQpIGNvbnN0OwotICAgIGlubGluZSBHbHlwaERhdGEgZ2x5cGhEYXRhRm9yQ2hh
cmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50ID0g
QXV0b1ZhcmlhbnQpIGNvbnN0CisgICAgR2x5cGhEYXRhIGdseXBoRGF0YUZvckNoYXJhY3RlcihV
Q2hhcjMyIGMsIGJvb2wgbWlycm9yLCBGb250RGF0YVZhcmlhbnQgdmFyaWFudCA9IEF1dG9WYXJp
YW50KSBjb25zdAogICAgIHsKICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUFuZFBhZ2VGb3JDaGFy
YWN0ZXIoYywgbWlycm9yLCB2YXJpYW50KS5maXJzdDsKICAgICB9CiAjaWYgUExBVEZPUk0oTUFD
KQogICAgIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBmb250RGF0YUZvckNvbWJpbmluZ0NoYXJhY3Rl
clNlcXVlbmNlKGNvbnN0IFVDaGFyKiwgc2l6ZV90IGxlbmd0aCwgRm9udERhdGFWYXJpYW50KSBj
b25zdDsKICNlbmRpZgotICAgIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IGdseXBo
RGF0YUFuZFBhZ2VGb3JDaGFyYWN0ZXIoVUNoYXIzMiwgYm9vbCBtaXJyb3IsIEZvbnREYXRhVmFy
aWFudCA9IEF1dG9WYXJpYW50KSBjb25zdDsKKyAgICBzdGQ6OnBhaXI8R2x5cGhEYXRhLCBHbHlw
aFBhZ2UqPiBnbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKFVDaGFyMzIgYywgYm9vbCBtaXJy
b3IsIEZvbnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJu
IG1fZ2x5cGhzLT5nbHlwaERhdGFBbmRQYWdlRm9yQ2hhcmFjdGVyKCp0aGlzLCBjLCBtaXJyb3Is
IHZhcmlhbnQpOworICAgIH0KICAgICBib29sIHByaW1hcnlGb250SGFzR2x5cGhGb3JDaGFyYWN0
ZXIoVUNoYXIzMikgY29uc3Q7CiAKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hh
cjMyKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFj
a0xpc3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L0ZvbnRGYWxsYmFja0xpc3QuY3BwCShyZXZpc2lvbiAxNTA3MjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFsbGJhY2tMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUu
aCIKICNpbmNsdWRlICJTZWdtZW50ZWRGb250RGF0YS5oIgorI2luY2x1ZGUgPHd0Zi91bmljb2Rl
L1VuaWNvZGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC00Nyw2ICs0OCwyMCBAQCBG
b250R2x5cGhzOjpGb250R2x5cGhzKCkKIHsKIH0KIAorRm9udEdseXBoczo6Rm9udEdseXBocyhj
b25zdCBGb250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpCisgICAgOiBtX3BhZ2VaZXJvKDAp
CisgICAgLCBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSgwKQorICAgICwgbV9mb250U2Vs
ZWN0b3IoMCkKKyAgICAsIG1fZm9udFNlbGVjdG9yVmVyc2lvbigwKQorICAgICwgbV9mYW1pbHlJ
bmRleChjQWxsRmFtaWxpZXNTY2FubmVkKQorICAgICwgbV9nZW5lcmF0aW9uKGZvbnRDYWNoZSgp
LT5nZW5lcmF0aW9uKCkpCisgICAgLCBtX3BpdGNoKFVua25vd25QaXRjaCkKKyAgICAsIG1fbG9h
ZGluZ0N1c3RvbUZvbnRzKGZhbHNlKQoreworICAgIFJlZlB0cjxGb250RGF0YT4gZm9udERhdGEg
PSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnBsYXRmb3JtRGF0YSk7CisgICAgbV9y
ZWFsaXplZEZvbnREYXRhLmFwcGVuZChmb250RGF0YSk7Cit9CisKIHZvaWQgRm9udEdseXBoczo6
aW52YWxpZGF0ZShQYXNzUmVmUHRyPEZvbnRTZWxlY3Rvcj4gZm9udFNlbGVjdG9yKQogewogICAg
IHJlbGVhc2VGb250RGF0YSgpOwpAQCAtMTE0LDEyICsxMjksMjkwIEBAIGNvbnN0IEZvbnREYXRh
KiBGb250R2x5cGhzOjpyZWFsaXplRm9udEQKICAgICByZXR1cm4gcmVzdWx0LmdldCgpOwogfQog
Ci12b2lkIEZvbnRHbHlwaHM6OnNldFBsYXRmb3JtRm9udChjb25zdCBGb250UGxhdGZvcm1EYXRh
JiBwbGF0Zm9ybURhdGEpCitzdGF0aWMgaW5saW5lIGJvb2wgaXNJblJhbmdlKFVDaGFyMzIgY2hh
cmFjdGVyLCBVQ2hhcjMyIGxvd2VyQm91bmQsIFVDaGFyMzIgdXBwZXJCb3VuZCkKIHsKLSAgICBt
X2ZhbWlseUluZGV4ID0gY0FsbEZhbWlsaWVzU2Nhbm5lZDsKLSAgICBBU1NFUlQoZm9udENhY2hl
KCktPmdlbmVyYXRpb24oKSA9PSBtX2dlbmVyYXRpb24pOwotICAgIFJlZlB0cjxGb250RGF0YT4g
Zm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Q2FjaGVkRm9udERhdGEoJnBsYXRmb3JtRGF0YSk7
Ci0gICAgbV9yZWFsaXplZEZvbnREYXRhLmFwcGVuZChmb250RGF0YSk7CisgICAgcmV0dXJuIGNo
YXJhY3RlciA+PSBsb3dlckJvdW5kICYmIGNoYXJhY3RlciA8PSB1cHBlckJvdW5kOwogfQogCitz
dGF0aWMgYm9vbCBzaG91bGRJZ25vcmVSb3RhdGlvbihVQ2hhcjMyIGNoYXJhY3RlcikKK3sKKyAg
ICBpZiAoY2hhcmFjdGVyID09IDB4MDAwQTcgfHwgY2hhcmFjdGVyID09IDB4MDAwQTkgfHwgY2hh
cmFjdGVyID09IDB4MDAwQUUpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNoYXJh
Y3RlciA9PSAweDAwMEI2IHx8IGNoYXJhY3RlciA9PSAweDAwMEJDIHx8IGNoYXJhY3RlciA9PSAw
eDAwMEJEIHx8IGNoYXJhY3RlciA9PSAweDAwMEJFKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKwor
ICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAwMkU1LCAweDAwMkVCKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgCisgICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDExMDAs
IDB4MDExRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE0MDEsIDB4MDE2N0YpIHx8IGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE4MDAsIDB4MDE4RkYpKQorICAgICAgICByZXR1cm4gdHJ1
ZTsKKworICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMjAxNiB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAx
OCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAxOSB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAyMCB8fCBjaGFy
YWN0ZXIgPT0gMHgwMjAyMQorICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gMHgyMDMwIHx8IGNoYXJh
Y3RlciA9PSAweDAyMDMxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDAyMDNCLCAweDAyMDNEKSB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0MiB8
fCBjaGFyYWN0ZXIgPT0gMHgwMjA0NCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0NworICAgICAgICB8
fCBjaGFyYWN0ZXIgPT0gMHgwMjA0OCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0OSB8fCBjaGFyYWN0
ZXIgPT0gMHgyMDUxKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDAyMDY1LCAweDAyMDY5KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAy
MERELCAweDAyMEUwKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMEUyLCAw
eDAyMEU0KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTAwLCAweDAyMTE3KQorICAgICAg
ICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTE5LCAweDAyMTMxKSB8fCBpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDAyMTMzLCAweDAyMTNGKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAg
ICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjE0NSwgMHgwMjE0QSkgfHwgY2hhcmFjdGVy
ID09IDB4MDIxNEMgfHwgY2hhcmFjdGVyID09IDB4MDIxNEQKKyAgICAgICAgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwMjE0RiwgMHgwMjE4RikpCisgICAgICAgIHJldHVybiB0cnVlOworCisg
ICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMDAsIDB4MDIzMDcpIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MDIzMEMsIDB4MDIzMUYpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MDIzMjIsIDB4MDIzMkIpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzN0Qs
IDB4MDIzOUEpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzQjQsIDB4MDIz
QjYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzQkEsIDB4MDIzQ0YpCisgICAgICAgIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzRDEsIDB4MDIzREIpIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MDIzRTIsIDB4MDI0RkYpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlm
IChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyNUEwLCAweDAyNjE5KSB8fCBpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDAyNjIwLCAweDAyNzY3KQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDAyNzc2LCAweDAyNzkzKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyQjEyLCAweDAy
QjJGKQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyQjRELCAweDAyQkZGKSB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyRTgwLCAweDAzMDA3KSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICBpZiAoY2hhcmFjdGVyID09IDB4MDMwMTIgfHwgY2hhcmFjdGVyID09IDB4
MDMwMTMgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAyMCwgMHgwMzAyRikKKyAgICAgICAg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAzMSwgMHgwMzA5RikgfHwgaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwMzBBMSwgMHgwMzBGQikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3Rl
ciwgMHgwMzBGRCwgMHgwQTRDRikpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGlz
SW5SYW5nZShjaGFyYWN0ZXIsIDB4MEE4NDAsIDB4MEE4N0YpIHx8IGlzSW5SYW5nZShjaGFyYWN0
ZXIsIDB4MEE5NjAsIDB4MEE5N0YpCisgICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4
MEFDMDAsIDB4MEQ3RkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEUwMDAsIDB4MEZBRkYp
KQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAw
eDBGRTEwLCAweDBGRTFGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTMwLCAweDBGRTQ4
KQorICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTUwLCAweDBGRTU3KSB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTVGLCAweDBGRTYyKQorICAgICAgICB8fCBpc0luUmFu
Z2UoY2hhcmFjdGVyLCAweDBGRTY3LCAweDBGRTZGKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisK
KyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwMSwgMHgwRkYwNykgfHwgaXNJblJh
bmdlKGNoYXJhY3RlciwgMHgwRkYwQSwgMHgwRkYwQykKKyAgICAgICAgfHwgaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgwRkYwRSwgMHgwRkYxOSkgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYx
RiwgMHgwRkYzQSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKGNoYXJhY3RlciA9
PSAweDBGRjNDIHx8IGNoYXJhY3RlciA9PSAweDBGRjNFKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjQwLCAweDBGRjVBKSB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDBGRkUwLCAweDBGRkUyKQorICAgICAgICB8fCBpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDBGRkU0LCAweDBGRkU3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBG
RkYwLCAweDBGRkY4KQorICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gMHgwRkZGRCkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxMzAwMCwgMHgx
MzQyRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxQjAwMCwgMHgxQjBGRikKKyAgICAgICAg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRDAwMCwgMHgxRDFGRikgfHwgaXNJblJhbmdlKGNo
YXJhY3RlciwgMHgxRDMwMCwgMHgxRDM3RikKKyAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3Rl
ciwgMHgxRjAwMCwgMHgxRjY0RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRjY4MCwgMHgx
Rjc3RikpCisgICAgICAgIHJldHVybiB0cnVlOworICAgIAorICAgIGlmIChpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDIwMDAwLCAweDJGRkZEKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDMwMDAw
LCAweDNGRkZEKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisgICAgCitzdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IGds
eXBoRGF0YUFuZFBhZ2VGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRhdGlvbihVQ2hh
cjMyIGNoYXJhY3RlciwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlvbiwgR2x5cGhE
YXRhJiBkYXRhLCBHbHlwaFBhZ2UqIHBhZ2UsIHVuc2lnbmVkIHBhZ2VOdW1iZXIpCit7CisgICAg
aWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0IHx8IHNob3Vs
ZElnbm9yZVJvdGF0aW9uKGNoYXJhY3RlcikpIHsKKyAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnRE
YXRhPiB1cHJpZ2h0Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3JpZW50YXRpb25G
b250RGF0YSgpOworICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdXByaWdodE5vZGUgPSBHbHlw
aFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHVwcmlnaHRGb250RGF0YS5nZXQoKSwgcGFnZU51
bWJlcik7CisgICAgICAgIEdseXBoUGFnZSogdXByaWdodFBhZ2UgPSB1cHJpZ2h0Tm9kZS0+cGFn
ZSgpOworICAgICAgICBpZiAodXByaWdodFBhZ2UpIHsKKyAgICAgICAgICAgIEdseXBoRGF0YSB1
cHJpZ2h0RGF0YSA9IHVwcmlnaHRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVy
KTsKKyAgICAgICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIHRoZSBzYW1lLCB0aGVuIHdlIGtu
b3cgd2UgY2FuIGp1c3QgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoIHJvdGF0ZWQgdmVydGljYWxs
eSB0byBiZSB1cHJpZ2h0LgorICAgICAgICAgICAgaWYgKGRhdGEuZ2x5cGggPT0gdXByaWdodERh
dGEuZ2x5cGgpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGRhdGEsIHBh
Z2UpOworICAgICAgICAgICAgLy8gVGhlIGdseXBocyBhcmUgZGlzdGluY3QsIG1lYW5pbmcgdGhh
dCB0aGUgZm9udCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZCBpbnRvIGl0LiBXZSBj
YW4ndCB1c2UgdGhhdAorICAgICAgICAgICAgLy8gZ2x5cGgsIHNvIHdlIGZhbGwgYmFjayB0byB0
aGUgdXByaWdodCBkYXRhIGFuZCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGguCisgICAgICAgICAg
ICBpZiAodXByaWdodERhdGEuZm9udERhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6
bWFrZV9wYWlyKHVwcmlnaHREYXRhLCB1cHJpZ2h0UGFnZSk7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgaWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25WZXJ0aWNhbFJpZ2h0
KSB7CisgICAgICAgIFJlZlB0cjxTaW1wbGVGb250RGF0YT4gdmVydGljYWxSaWdodEZvbnREYXRh
ID0gZGF0YS5mb250RGF0YS0+dmVydGljYWxSaWdodE9yaWVudGF0aW9uRm9udERhdGEoKTsKKyAg
ICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHZlcnRpY2FsUmlnaHROb2RlID0gR2x5cGhQYWdlVHJl
ZU5vZGU6OmdldFJvb3RDaGlsZCh2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEuZ2V0KCksIHBhZ2VOdW1i
ZXIpOworICAgICAgICBHbHlwaFBhZ2UqIHZlcnRpY2FsUmlnaHRQYWdlID0gdmVydGljYWxSaWdo
dE5vZGUtPnBhZ2UoKTsKKyAgICAgICAgaWYgKHZlcnRpY2FsUmlnaHRQYWdlKSB7CisgICAgICAg
ICAgICBHbHlwaERhdGEgdmVydGljYWxSaWdodERhdGEgPSB2ZXJ0aWNhbFJpZ2h0UGFnZS0+Z2x5
cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3Rlcik7CisgICAgICAgICAgICAvLyBJZiB0aGUgZ2x5
cGhzIGFyZSBkaXN0aW5jdCwgd2Ugd2lsbCBtYWtlIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhlIGZv
bnQgaGFzIGEgdmVydGljYWwtcmlnaHQgZ2x5cGggYmFrZWQKKyAgICAgICAgICAgIC8vIGludG8g
aXQuCisgICAgICAgICAgICBpZiAoZGF0YS5nbHlwaCAhPSB2ZXJ0aWNhbFJpZ2h0RGF0YS5nbHlw
aCkKKyAgICAgICAgICAgICAgICByZXR1cm4gc3RkOjptYWtlX3BhaXIoZGF0YSwgcGFnZSk7Cisg
ICAgICAgICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBz
aG91bGQganVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGguCisgICAgICAgICAgICBpZiAodmVy
dGljYWxSaWdodERhdGEuZm9udERhdGEpCisgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHZlcnRpY2FsUmlnaHREYXRhLCB2ZXJ0aWNhbFJpZ2h0UGFnZSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOworfQorCitzdGQ6
OnBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBGb250R2x5cGhzOjpnbHlwaERhdGFBbmRQYWdl
Rm9yQ2hhcmFjdGVyKGNvbnN0IEZvbnQmIGZvbnQsIFVDaGFyMzIgYywgYm9vbCBtaXJyb3IsIEZv
bnREYXRhVmFyaWFudCB2YXJpYW50KSBjb25zdAoreworICAgIEFTU0VSVChpc01haW5UaHJlYWQo
KSk7CisKKyAgICBjb25zdCBGb250RGVzY3JpcHRpb24mIGZvbnREZXNjcmlwdGlvbiA9IGZvbnQu
Zm9udERlc2NyaXB0aW9uKCk7CisgICAgaWYgKHZhcmlhbnQgPT0gQXV0b1ZhcmlhbnQpIHsKKyAg
ICAgICAgaWYgKGZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeVNpbXBsZUZv
bnREYXRhKCZmb250KS0+aXNTVkdGb250KCkpIHsKKyAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJD
ID0gV1RGOjpVbmljb2RlOjp0b1VwcGVyKGMpOworICAgICAgICAgICAgaWYgKHVwcGVyQyAhPSBj
KSB7CisgICAgICAgICAgICAgICAgYyA9IHVwcGVyQzsKKyAgICAgICAgICAgICAgICB2YXJpYW50
ID0gU21hbGxDYXBzVmFyaWFudDsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBOb3JtYWxWYXJpYW50OworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHZh
cmlhbnQgPSBOb3JtYWxWYXJpYW50OworICAgIH0KKworICAgIGlmIChtaXJyb3IpCisgICAgICAg
IGMgPSBXVEY6OlVuaWNvZGU6Om1pcnJvcmVkQ2hhcihjKTsKKworICAgIHVuc2lnbmVkIHBhZ2VO
dW1iZXIgPSAoYyAvIEdseXBoUGFnZTo6c2l6ZSk7CisKKyAgICBHbHlwaFBhZ2VUcmVlTm9kZSog
bm9kZSA9IHBhZ2VOdW1iZXIgPyBtX3BhZ2VzLmdldChwYWdlTnVtYmVyKSA6IG1fcGFnZVplcm87
CisgICAgaWYgKCFub2RlKSB7CisgICAgICAgIG5vZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0
Um9vdENoaWxkKHJlYWxpemVGb250RGF0YUF0KCZmb250LCAwKSwgcGFnZU51bWJlcik7CisgICAg
ICAgIGlmIChwYWdlTnVtYmVyKQorICAgICAgICAgICAgbV9wYWdlcy5zZXQocGFnZU51bWJlciwg
bm9kZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGFnZVplcm8gPSBub2RlOworICAg
IH0KKworICAgIEdseXBoUGFnZSogcGFnZSA9IDA7CisgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFs
VmFyaWFudCkgeworICAgICAgICAvLyBGYXN0ZXN0IGxvb3AsIGZvciB0aGUgY29tbW9uIGNhc2Ug
KG5vcm1hbCB2YXJpYW50KS4KKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIHBh
Z2UgPSBub2RlLT5wYWdlKCk7CisgICAgICAgICAgICBpZiAocGFnZSkgeworICAgICAgICAgICAg
ICAgIEdseXBoRGF0YSBkYXRhID0gcGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAg
ICAgICAgICAgICAgIGlmIChkYXRhLmZvbnREYXRhICYmIChkYXRhLmZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5vcmllbnRhdGlvbigpID09IEhvcml6b250YWwgfHwgZGF0YS5mb250RGF0YS0+aXNU
ZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0
ZDo6bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOworCisgICAgICAgICAgICAgICAgaWYgKGRhdGEuZm9u
dERhdGEpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JT
eW1ib2woYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICghZGF0YS5mb250RGF0YS0+
aGFzVmVydGljYWxHbHlwaHMoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFVz
ZSB0aGUgYnJva2VuIGlkZW9ncmFwaCBmb250IGRhdGEuIFRoZSBicm9rZW4gaWRlb2dyYXBoIGZv
bnQgd2lsbCB1c2UgdGhlIGhvcml6b250YWwgd2lkdGggb2YgZ2x5cGhzCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHlvdSBnZXQgYSBzcXVhcmUgKGV2ZW4gZm9y
IGJyb2tlbiBnbHlwaHMgbGlrZSBzeW1ib2xzIHVzZWQgZm9yIHB1bmN0dWF0aW9uKS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBoVmFyaWFudDsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gZ2x5cGhEYXRhQW5kUGFnZUZvck5vbkNKS0NoYXJhY3RlcldpdGhHbHlwaE9yaWVu
dGF0aW9uKGMsIGZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVudGF0aW9uKCksIGRhdGEs
IHBhZ2UsIHBhZ2VOdW1iZXIpOworCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBzdGQ6Om1h
a2VfcGFpcihkYXRhLCBwYWdlKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg
ICBpZiAobm9kZS0+aXNTeXN0ZW1GYWxsYmFjaygpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbm9kZSA9IG5vZGUtPmdldENoaWxkKHJl
YWxpemVGb250RGF0YUF0KCZmb250LCBub2RlLT5sZXZlbCgpKSwgcGFnZU51bWJlcik7CisgICAg
ICAgICAgICBpZiAocGFnZU51bWJlcikKKyAgICAgICAgICAgICAgICBtX3BhZ2VzLnNldChwYWdl
TnVtYmVyLCBub2RlKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX3BhZ2Va
ZXJvID0gbm9kZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAodmFyaWFudCAhPSBOb3JtYWxW
YXJpYW50KSB7CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICBwYWdlID0gbm9k
ZS0+cGFnZSgpOworICAgICAgICAgICAgaWYgKHBhZ2UpIHsKKyAgICAgICAgICAgICAgICBHbHlw
aERhdGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKKyAgICAgICAgICAg
ICAgICBpZiAoZGF0YS5mb250RGF0YSkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGUgdmFy
aWFudEZvbnREYXRhIGZ1bmN0aW9uIHNob3VsZCBub3Qgbm9ybWFsbHkgcmV0dXJuIDAuCisgICAg
ICAgICAgICAgICAgICAgIC8vIEJ1dCBpZiBpdCBkb2VzLCB3ZSB3aWxsIGp1c3QgcmVuZGVyIHRo
ZSBjYXBpdGFsIGxldHRlciBiaWcuCisgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxTaW1wbGVG
b250RGF0YT4gdmFyaWFudEZvbnREYXRhID0gZGF0YS5mb250RGF0YS0+dmFyaWFudEZvbnREYXRh
KGZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCk7CisgICAgICAgICAgICAgICAgICAgIGlmICghdmFy
aWFudEZvbnREYXRhKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFrZV9w
YWlyKGRhdGEsIHBhZ2UpOworCisgICAgICAgICAgICAgICAgICAgIEdseXBoUGFnZVRyZWVOb2Rl
KiB2YXJpYW50Tm9kZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRSb290Q2hpbGQodmFyaWFudEZv
bnREYXRhLmdldCgpLCBwYWdlTnVtYmVyKTsKKyAgICAgICAgICAgICAgICAgICAgR2x5cGhQYWdl
KiB2YXJpYW50UGFnZSA9IHZhcmlhbnROb2RlLT5wYWdlKCk7CisgICAgICAgICAgICAgICAgICAg
IGlmICh2YXJpYW50UGFnZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgR2x5cGhEYXRhIGRh
dGEgPSB2YXJpYW50UGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOworICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKGRhdGEuZm9udERhdGEpCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGRhdGEsIHZhcmlhbnRQYWdlKTsKKyAgICAgICAgICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgIC8vIERvIG5vdCBhdHRlbXB0IHN5c3Rl
bSBmYWxsYmFjayBvZmYgdGhlIHZhcmlhbnRGb250RGF0YS4gVGhpcyBpcyB0aGUgdmVyeSB1bmxp
a2VseSBjYXNlIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gYSBmb250IGhhcyB0aGUgbG93
ZXJjYXNlIGNoYXJhY3RlciBidXQgdGhlIHNtYWxsIGNhcHMgZm9udCBkb2VzIG5vdCBoYXZlIGl0
cyB1cHBlcmNhc2UgdmVyc2lvbi4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0ZDo6bWFr
ZV9wYWlyKHZhcmlhbnRGb250RGF0YS0+bWlzc2luZ0dseXBoRGF0YSgpLCBwYWdlKTsKKyAgICAg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+aXNTeXN0ZW1GYWxsYmFj
aygpKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgbm9kZSA9IG5vZGUtPmdldENoaWxkKHJlYWxpemVGb250RGF0YUF0KCZmb250LCBub2Rl
LT5sZXZlbCgpKSwgcGFnZU51bWJlcik7CisgICAgICAgICAgICBpZiAocGFnZU51bWJlcikKKyAg
ICAgICAgICAgICAgICBtX3BhZ2VzLnNldChwYWdlTnVtYmVyLCBub2RlKTsKKyAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICBtX3BhZ2VaZXJvID0gbm9kZTsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEFTU0VSVChwYWdlKTsKKyAgICBBU1NFUlQobm9kZS0+aXNTeXN0ZW1GYWxsYmFj
aygpKTsKKworICAgIC8vIFN5c3RlbSBmYWxsYmFjayBpcyBjaGFyYWN0ZXItZGVwZW5kZW50LiBX
aGVuIHdlIGdldCBoZXJlLCB3ZQorICAgIC8vIGtub3cgdGhhdCB0aGUgY2hhcmFjdGVyIGluIHF1
ZXN0aW9uIGlzbid0IGluIHRoZSBzeXN0ZW0gZmFsbGJhY2sKKyAgICAvLyBmb250J3MgZ2x5cGgg
cGFnZS4gVHJ5IHRvIGxhemlseSBjcmVhdGUgaXQgaGVyZS4KKyAgICBVQ2hhciBjb2RlVW5pdHNb
Ml07CisgICAgaW50IGNvZGVVbml0c0xlbmd0aDsKKyAgICBpZiAoYyA8PSAweEZGRkYpIHsKKyAg
ICAgICAgY29kZVVuaXRzWzBdID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKGMpOworICAgICAgICBj
b2RlVW5pdHNMZW5ndGggPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGNvZGVVbml0c1swXSA9
IFUxNl9MRUFEKGMpOworICAgICAgICBjb2RlVW5pdHNbMV0gPSBVMTZfVFJBSUwoYyk7CisgICAg
ICAgIGNvZGVVbml0c0xlbmd0aCA9IDI7CisgICAgfQorICAgIFJlZlB0cjxTaW1wbGVGb250RGF0
YT4gY2hhcmFjdGVyRm9udERhdGEgPSBmb250Q2FjaGUoKS0+Z2V0Rm9udERhdGFGb3JDaGFyYWN0
ZXJzKGZvbnQsIGNvZGVVbml0cywgY29kZVVuaXRzTGVuZ3RoKTsKKyAgICBpZiAoY2hhcmFjdGVy
Rm9udERhdGEpIHsKKyAgICAgICAgaWYgKGNoYXJhY3RlckZvbnREYXRhLT5wbGF0Zm9ybURhdGEo
KS5vcmllbnRhdGlvbigpID09IFZlcnRpY2FsICYmICFjaGFyYWN0ZXJGb250RGF0YS0+aGFzVmVy
dGljYWxHbHlwaHMoKSAmJiBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpKQorICAgICAg
ICAgICAgdmFyaWFudCA9IEJyb2tlbklkZW9ncmFwaFZhcmlhbnQ7CisgICAgICAgIGlmICh2YXJp
YW50ICE9IE5vcm1hbFZhcmlhbnQpCisgICAgICAgICAgICBjaGFyYWN0ZXJGb250RGF0YSA9IGNo
YXJhY3RlckZvbnREYXRhLT52YXJpYW50Rm9udERhdGEoZm9udERlc2NyaXB0aW9uLCB2YXJpYW50
KTsKKyAgICB9CisgICAgaWYgKGNoYXJhY3RlckZvbnREYXRhKSB7CisgICAgICAgIC8vIEdvdCB0
aGUgZmFsbGJhY2sgZ2x5cGggYW5kIGZvbnQuCisgICAgICAgIEdseXBoUGFnZSogZmFsbGJhY2tQ
YWdlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZChjaGFyYWN0ZXJGb250RGF0YS5n
ZXQoKSwgcGFnZU51bWJlciktPnBhZ2UoKTsKKyAgICAgICAgR2x5cGhEYXRhIGRhdGEgPSBmYWxs
YmFja1BhZ2UgJiYgZmFsbGJhY2tQYWdlLT5mb250RGF0YUZvckNoYXJhY3RlcihjKSA/IGZhbGxi
YWNrUGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpIDogY2hhcmFjdGVyRm9udERhdGEtPm1p
c3NpbmdHbHlwaERhdGEoKTsKKyAgICAgICAgLy8gQ2FjaGUgaXQgc28gd2UgZG9uJ3QgaGF2ZSB0
byBkbyBzeXN0ZW0gZmFsbGJhY2sgYWdhaW4gbmV4dCB0aW1lLgorICAgICAgICBpZiAodmFyaWFu
dCA9PSBOb3JtYWxWYXJpYW50KSB7CisjaWYgT1MoV0lOQ0UpCisgICAgICAgICAgICAvLyBtaXNz
aW5nR2x5cGhEYXRhIHJldHVybnMgYSBudWxsIGNoYXJhY3Rlciwgd2hpY2ggaXMgbm90IHN1aXRh
YmxlIGZvciBHREkgdG8gZGlzcGxheS4KKyAgICAgICAgICAgIC8vIEFsc28sIHNvbWV0aW1lcyB3
ZSBjYW5ub3QgbWFwIGEgZm9udCBmb3IgdGhlIGNoYXJhY3RlciBvbiBXSU5DRSwgYnV0IEdESSBj
YW4gc3RpbGwKKyAgICAgICAgICAgIC8vIGRpc3BsYXkgdGhlIGNoYXJhY3RlciwgcHJvYmFibHkg
YmVjYXVzZSB0aGUgZm9udCBwYWNrYWdlIGlzIG5vdCBpbnN0YWxsZWQgY29ycmVjdGx5LgorICAg
ICAgICAgICAgLy8gU28gd2UganVzdCBhbHdheXMgc2V0IHRoZSBnbHlwaCB0byBiZSBzYW1lIGFz
IHRoZSBjaGFyYWN0ZXIsIGFuZCBsZXQgR0RJIHNvbHZlIGl0LgorICAgICAgICAgICAgcGFnZS0+
c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMsIGMsIGNoYXJhY3RlckZvbnREYXRhLmdldCgpKTsK
KyAgICAgICAgICAgIGNoYXJhY3RlckZvbnREYXRhLT5zZXRNYXhHbHlwaFBhZ2VUcmVlTGV2ZWwo
bWF4KGNoYXJhY3RlckZvbnREYXRhLT5tYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2
ZWwoKSkpOworICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcihwYWdlLT5nbHlwaERhdGFGb3JD
aGFyYWN0ZXIoYyksIHBhZ2UpOworI2Vsc2UKKyAgICAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0
YUZvckNoYXJhY3RlcihjLCBkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRhKTsKKyAgICAgICAgICAg
IGRhdGEuZm9udERhdGEtPnNldE1heEdseXBoUGFnZVRyZWVMZXZlbChzdGQ6Om1heChkYXRhLmZv
bnREYXRhLT5tYXhHbHlwaFBhZ2VUcmVlTGV2ZWwoKSwgbm9kZS0+bGV2ZWwoKSkpOworICAgICAg
ICAgICAgaWYgKCFGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKGMpICYmIGRhdGEuZm9udERh
dGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgIT0gSG9yaXpvbnRhbCAmJiAhZGF0YS5m
b250RGF0YS0+aXNUZXh0T3JpZW50YXRpb25GYWxsYmFjaygpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBnbHlwaERhdGFBbmRQYWdlRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRp
b24oYywgZm9udERlc2NyaXB0aW9uLm5vbkNKS0dseXBoT3JpZW50YXRpb24oKSwgZGF0YSwgZmFs
bGJhY2tQYWdlLCBwYWdlTnVtYmVyKTsKKyNlbmRpZgorICAgICAgICB9CisgICAgICAgIHJldHVy
biBzdGQ6Om1ha2VfcGFpcihkYXRhLCBwYWdlKTsKKyAgICB9CisKKyAgICAvLyBFdmVuIHN5c3Rl
bSBmYWxsYmFjayBjYW4gZmFpbDsgdXNlIHRoZSBtaXNzaW5nIGdseXBoIGluIHRoYXQgY2FzZS4K
KyAgICAvLyBGSVhNRTogSXQgd291bGQgYmUgbmljZXIgdG8gdXNlIHRoZSBtaXNzaW5nIGdseXBo
IGZyb20gdGhlIGxhc3QgcmVzb3J0IGZvbnQgaW5zdGVhZC4KKyAgICBHbHlwaERhdGEgZGF0YSA9
IHByaW1hcnlTaW1wbGVGb250RGF0YSgmZm9udCktPm1pc3NpbmdHbHlwaERhdGEoKTsKKyAgICBp
ZiAodmFyaWFudCA9PSBOb3JtYWxWYXJpYW50KSB7CisjaWYgT1MoV0lOQ0UpCisgICAgICAgIC8v
IFNlZSBjb21tZW50IGFib3V0IFdJTkNFIEdESSBoYW5kbGluZyBuZWFyIHNldEdseXBoRGF0YUZv
ckNoYXJhY3RlciBhYm92ZS4KKyAgICAgICAgcGFnZS0+c2V0R2x5cGhEYXRhRm9yQ2hhcmFjdGVy
KGMsIGMsIGRhdGEuZm9udERhdGEpOworICAgICAgICBkYXRhLmZvbnREYXRhLT5zZXRNYXhHbHlw
aFBhZ2VUcmVlTGV2ZWwobWF4KGRhdGEuZm9udERhdGEtPm1heEdseXBoUGFnZVRyZWVMZXZlbCgp
LCBub2RlLT5sZXZlbCgpKSk7CisgICAgICAgIHJldHVybiBtYWtlX3BhaXIocGFnZS0+Z2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGMpLCBwYWdlKTsKKyNlbHNlCisgICAgICAgIHBhZ2UtPnNldEdseXBo
RGF0YUZvckNoYXJhY3RlcihjLCBkYXRhLmdseXBoLCBkYXRhLmZvbnREYXRhKTsKKyAgICAgICAg
ZGF0YS5mb250RGF0YS0+c2V0TWF4R2x5cGhQYWdlVHJlZUxldmVsKHN0ZDo6bWF4KGRhdGEuZm9u
dERhdGEtPm1heEdseXBoUGFnZVRyZWVMZXZlbCgpLCBub2RlLT5sZXZlbCgpKSk7CisjZW5kaWYK
KyAgICB9CisgICAgcmV0dXJuIHN0ZDo6bWFrZV9wYWlyKGRhdGEsIHBhZ2UpOworfQorCisKIH0K
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250RmFs
bGJhY2tMaXN0LmgJKHJldmlzaW9uIDE1MDcyNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYWxsYmFja0xpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtNjYsOSArNjYs
MTIgQEAgcHVibGljOgogICAgIH07CiAKICAgICBzdGF0aWMgUGFzc1JlZlB0cjxGb250R2x5cGhz
PiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZihuZXcgRm9udEdseXBocygpKTsgfQorICAgIHN0
YXRpYyBQYXNzUmVmUHRyPEZvbnRHbHlwaHM+IGNyZWF0ZUZvclBsYXRmb3JtRGF0YShjb25zdCBG
b250UGxhdGZvcm1EYXRhJiBwbGF0Zm9ybURhdGEpIHsgcmV0dXJuIGFkb3B0UmVmKG5ldyBGb250
R2x5cGhzKHBsYXRmb3JtRGF0YSkpOyB9CiAKICAgICB+Rm9udEdseXBocygpIHsgcmVsZWFzZUZv
bnREYXRhKCk7IH0KICAgICB2b2lkIGludmFsaWRhdGUoUGFzc1JlZlB0cjxGb250U2VsZWN0b3I+
KTsKKworICAgIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBoUGFnZSo+IGdseXBoRGF0YUFuZFBh
Z2VGb3JDaGFyYWN0ZXIoY29uc3QgRm9udCYsIFVDaGFyMzIsIGJvb2wgbWlycm9yLCBGb250RGF0
YVZhcmlhbnQpIGNvbnN0OwogICAgIAogICAgIGJvb2wgaXNGaXhlZFBpdGNoKGNvbnN0IEZvbnQq
IGYpIGNvbnN0IHsgaWYgKG1fcGl0Y2ggPT0gVW5rbm93blBpdGNoKSBkZXRlcm1pbmVQaXRjaChm
KTsgcmV0dXJuIG1fcGl0Y2ggPT0gRml4ZWRQaXRjaDsgfTsKICAgICB2b2lkIGRldGVybWluZVBp
dGNoKGNvbnN0IEZvbnQqKSBjb25zdDsKQEAgLTgyLDIxICs4NSwxMyBAQCBwdWJsaWM6CiAKICAg
ICBXaWR0aENhY2hlJiB3aWR0aENhY2hlKCkgY29uc3QgeyByZXR1cm4gbV93aWR0aENhY2hlOyB9
CiAKLXByaXZhdGU6Ci0gICAgRm9udEdseXBocygpOwotCi0gICAgY29uc3QgU2ltcGxlRm9udERh
dGEqIHByaW1hcnlTaW1wbGVGb250RGF0YShjb25zdCBGb250KiBmKQotICAgIHsgCi0gICAgICAg
IEFTU0VSVChpc01haW5UaHJlYWQoKSk7Ci0gICAgICAgIGlmICghbV9jYWNoZWRQcmltYXJ5U2lt
cGxlRm9udERhdGEpCi0gICAgICAgICAgICBtX2NhY2hlZFByaW1hcnlTaW1wbGVGb250RGF0YSA9
IHByaW1hcnlGb250RGF0YShmKS0+Zm9udERhdGFGb3JDaGFyYWN0ZXIoJyAnKTsKLSAgICAgICAg
cmV0dXJuIG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhOwotICAgIH0KLQorICAgIGNvbnN0
IFNpbXBsZUZvbnREYXRhKiBwcmltYXJ5U2ltcGxlRm9udERhdGEoY29uc3QgRm9udCopIGNvbnN0
OwogICAgIGNvbnN0IEZvbnREYXRhKiBwcmltYXJ5Rm9udERhdGEoY29uc3QgRm9udCogZikgY29u
c3QgeyByZXR1cm4gcmVhbGl6ZUZvbnREYXRhQXQoZiwgMCk7IH0KICAgICBjb25zdCBGb250RGF0
YSogcmVhbGl6ZUZvbnREYXRhQXQoY29uc3QgRm9udCosIHVuc2lnbmVkIGluZGV4KSBjb25zdDsK
IAotICAgIHZvaWQgc2V0UGxhdGZvcm1Gb250KGNvbnN0IEZvbnRQbGF0Zm9ybURhdGEmKTsKK3By
aXZhdGU6CisgICAgRm9udEdseXBocygpOworICAgIEZvbnRHbHlwaHMoY29uc3QgRm9udFBsYXRm
b3JtRGF0YSYpOwogCiAgICAgdm9pZCByZWxlYXNlRm9udERhdGEoKTsKICAgICAKQEAgLTExMSwx
MCArMTA2LDE2IEBAIHByaXZhdGU6CiAgICAgdW5zaWduZWQgc2hvcnQgbV9nZW5lcmF0aW9uOwog
ICAgIG11dGFibGUgdW5zaWduZWQgbV9waXRjaCA6IDM7IC8vIFBpdGNoCiAgICAgbXV0YWJsZSBi
b29sIG1fbG9hZGluZ0N1c3RvbUZvbnRzIDogMTsKLQotICAgIGZyaWVuZCBjbGFzcyBGb250Owog
fTsKIAoraW5saW5lIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250R2x5cGhzOjpwcmltYXJ5U2lt
cGxlRm9udERhdGEoY29uc3QgRm9udCogZikgY29uc3QKK3sKKyAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgIGlmICghbV9jYWNoZWRQcmltYXJ5U2ltcGxlRm9udERhdGEpCisgICAgICAg
IG1fY2FjaGVkUHJpbWFyeVNpbXBsZUZvbnREYXRhID0gcHJpbWFyeUZvbnREYXRhKGYpLT5mb250
RGF0YUZvckNoYXJhY3RlcignICcpOworICAgIHJldHVybiBtX2NhY2hlZFByaW1hcnlTaW1wbGVG
b250RGF0YTsKK30KKwogfQogCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0ZvbnRGYXN0UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkocmV2aXNpb24gMTUwNzI3KQorKysg
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udEZhc3RQYXRoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDIsMjkwICs0Miw2IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGlubGluZSBib29sIGlzSW5SYW5nZShVQ2hhcjMyIGNo
YXJhY3RlciwgVUNoYXIzMiBsb3dlckJvdW5kLCBVQ2hhcjMyIHVwcGVyQm91bmQpCi17Ci0gICAg
cmV0dXJuIGNoYXJhY3RlciA+PSBsb3dlckJvdW5kICYmIGNoYXJhY3RlciA8PSB1cHBlckJvdW5k
OwotfQotCi1zdGF0aWMgYm9vbCBzaG91bGRJZ25vcmVSb3RhdGlvbihVQ2hhcjMyIGNoYXJhY3Rl
cikKLXsKLSAgICBpZiAoY2hhcmFjdGVyID09IDB4MDAwQTcgfHwgY2hhcmFjdGVyID09IDB4MDAw
QTkgfHwgY2hhcmFjdGVyID09IDB4MDAwQUUpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
aWYgKGNoYXJhY3RlciA9PSAweDAwMEI2IHx8IGNoYXJhY3RlciA9PSAweDAwMEJDIHx8IGNoYXJh
Y3RlciA9PSAweDAwMEJEIHx8IGNoYXJhY3RlciA9PSAweDAwMEJFKQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAwMkU1LCAweDAwMkVCKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MDExMDAsIDB4MDExRkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE0MDEsIDB4MDE2
N0YpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDE4MDAsIDB4MDE4RkYpKQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChjaGFyYWN0ZXIgPT0gMHgwMjAxNiB8fCBjaGFyYWN0ZXIg
PT0gMHgwMjAxOCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAxOSB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAy
MCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjAyMQotICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gMHgyMDMw
IHx8IGNoYXJhY3RlciA9PSAweDAyMDMxKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlm
IChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMDNCLCAweDAyMDNEKSB8fCBjaGFyYWN0ZXIgPT0g
MHgwMjA0MiB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0NCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0Nwot
ICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0OCB8fCBjaGFyYWN0ZXIgPT0gMHgwMjA0OSB8
fCBjaGFyYWN0ZXIgPT0gMHgyMDUxKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMDY1LCAweDAyMDY5KSB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDAyMERELCAweDAyMEUwKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAw
eDAyMEUyLCAweDAyMEU0KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTAwLCAweDAyMTE3
KQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTE5LCAweDAyMTMxKSB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyMTMzLCAweDAyMTNGKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjE0NSwgMHgwMjE0QSkgfHwg
Y2hhcmFjdGVyID09IDB4MDIxNEMgfHwgY2hhcmFjdGVyID09IDB4MDIxNEQKLSAgICAgICAgfHwg
aXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMjE0RiwgMHgwMjE4RikpCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMDAsIDB4MDIzMDcpIHx8
IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzMEMsIDB4MDIzMUYpCi0gICAgICAgIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MDIzMjIsIDB4MDIzMkIpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIs
IDB4MDIzN0QsIDB4MDIzOUEpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIz
QjQsIDB4MDIzQjYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzQkEsIDB4MDIzQ0YpCi0g
ICAgICAgIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MDIzRDEsIDB4MDIzREIpIHx8IGlzSW5S
YW5nZShjaGFyYWN0ZXIsIDB4MDIzRTIsIDB4MDI0RkYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyNUEwLCAweDAyNjE5KSB8fCBpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDAyNjIwLCAweDAyNzY3KQotICAgICAgICB8fCBpc0luUmFuZ2Uo
Y2hhcmFjdGVyLCAweDAyNzc2LCAweDAyNzkzKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAy
QjEyLCAweDAyQjJGKQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyQjRELCAw
eDAyQkZGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDAyRTgwLCAweDAzMDA3KSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoY2hhcmFjdGVyID09IDB4MDMwMTIgfHwgY2hhcmFj
dGVyID09IDB4MDMwMTMgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAyMCwgMHgwMzAyRikK
LSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwMzAzMSwgMHgwMzA5RikgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwMzBBMSwgMHgwMzBGQikKLSAgICAgICAgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgwMzBGRCwgMHgwQTRDRikpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgaWYgKGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEE4NDAsIDB4MEE4N0YpIHx8IGlzSW5SYW5n
ZShjaGFyYWN0ZXIsIDB4MEE5NjAsIDB4MEE5N0YpCi0gICAgICAgIHx8IGlzSW5SYW5nZShjaGFy
YWN0ZXIsIDB4MEFDMDAsIDB4MEQ3RkYpIHx8IGlzSW5SYW5nZShjaGFyYWN0ZXIsIDB4MEUwMDAs
IDB4MEZBRkYpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hh
cmFjdGVyLCAweDBGRTEwLCAweDBGRTFGKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTMw
LCAweDBGRTQ4KQotICAgICAgICB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTUwLCAweDBG
RTU3KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTVGLCAweDBGRTYyKQotICAgICAgICB8
fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRTY3LCAweDBGRTZGKSkKLSAgICAgICAgcmV0dXJu
IHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwMSwgMHgwRkYwNykg
fHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgwRkYwQSwgMHgwRkYwQykKLSAgICAgICAgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgwRkYwRSwgMHgwRkYxOSkgfHxpc0luUmFuZ2UgKGNoYXJhY3Rl
ciwgMHgwRkYxRiwgMHgwRkYzQSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKGNo
YXJhY3RlciA9PSAweDBGRjNDIHx8IGNoYXJhY3RlciA9PSAweDBGRjNFKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRjQwLCAweDBGRjVB
KSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRkUwLCAweDBGRkUyKQotICAgICAgICB8fCBp
c0luUmFuZ2UoY2hhcmFjdGVyLCAweDBGRkU0LCAweDBGRkU3KSB8fCBpc0luUmFuZ2UoY2hhcmFj
dGVyLCAweDBGRkYwLCAweDBGRkY4KQotICAgICAgICB8fCBjaGFyYWN0ZXIgPT0gMHgwRkZGRCkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoaXNJblJhbmdlKGNoYXJhY3RlciwgMHgx
MzAwMCwgMHgxMzQyRikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxQjAwMCwgMHgxQjBGRikK
LSAgICAgICAgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgxRDAwMCwgMHgxRDFGRikgfHwgaXNJ
blJhbmdlKGNoYXJhY3RlciwgMHgxRDMwMCwgMHgxRDM3RikKLSAgICAgICAgfHwgaXNJblJhbmdl
KGNoYXJhY3RlciwgMHgxRjAwMCwgMHgxRjY0RikgfHwgaXNJblJhbmdlKGNoYXJhY3RlciwgMHgx
RjY4MCwgMHgxRjc3RikpCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIAotICAgIGlmIChpc0lu
UmFuZ2UoY2hhcmFjdGVyLCAweDIwMDAwLCAweDJGRkZEKSB8fCBpc0luUmFuZ2UoY2hhcmFjdGVy
LCAweDMwMDAwLCAweDNGRkZEKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0gICAgCi1zdGF0aWMgaW5saW5lIHN0ZDo6cGFpcjxHbHlwaERhdGEsIEdseXBo
UGFnZSo+IGdseXBoRGF0YUFuZFBhZ2VGb3JOb25DSktDaGFyYWN0ZXJXaXRoR2x5cGhPcmllbnRh
dGlvbihVQ2hhcjMyIGNoYXJhY3RlciwgTm9uQ0pLR2x5cGhPcmllbnRhdGlvbiBvcmllbnRhdGlv
biwgR2x5cGhEYXRhJiBkYXRhLCBHbHlwaFBhZ2UqIHBhZ2UsIHVuc2lnbmVkIHBhZ2VOdW1iZXIp
Ci17Ci0gICAgaWYgKG9yaWVudGF0aW9uID09IE5vbkNKS0dseXBoT3JpZW50YXRpb25VcHJpZ2h0
IHx8IHNob3VsZElnbm9yZVJvdGF0aW9uKGNoYXJhY3RlcikpIHsKLSAgICAgICAgUmVmUHRyPFNp
bXBsZUZvbnREYXRhPiB1cHJpZ2h0Rm9udERhdGEgPSBkYXRhLmZvbnREYXRhLT51cHJpZ2h0T3Jp
ZW50YXRpb25Gb250RGF0YSgpOwotICAgICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdXByaWdodE5v
ZGUgPSBHbHlwaFBhZ2VUcmVlTm9kZTo6Z2V0Um9vdENoaWxkKHVwcmlnaHRGb250RGF0YS5nZXQo
KSwgcGFnZU51bWJlcik7Ci0gICAgICAgIEdseXBoUGFnZSogdXByaWdodFBhZ2UgPSB1cHJpZ2h0
Tm9kZS0+cGFnZSgpOwotICAgICAgICBpZiAodXByaWdodFBhZ2UpIHsKLSAgICAgICAgICAgIEds
eXBoRGF0YSB1cHJpZ2h0RGF0YSA9IHVwcmlnaHRQYWdlLT5nbHlwaERhdGFGb3JDaGFyYWN0ZXIo
Y2hhcmFjdGVyKTsKLSAgICAgICAgICAgIC8vIElmIHRoZSBnbHlwaHMgYXJlIHRoZSBzYW1lLCB0
aGVuIHdlIGtub3cgd2UgY2FuIGp1c3QgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoIHJvdGF0ZWQg
dmVydGljYWxseSB0byBiZSB1cHJpZ2h0LgotICAgICAgICAgICAgaWYgKGRhdGEuZ2x5cGggPT0g
dXByaWdodERhdGEuZ2x5cGgpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcihkYXRh
LCBwYWdlKTsKLSAgICAgICAgICAgIC8vIFRoZSBnbHlwaHMgYXJlIGRpc3RpbmN0LCBtZWFuaW5n
IHRoYXQgdGhlIGZvbnQgaGFzIGEgdmVydGljYWwtcmlnaHQgZ2x5cGggYmFrZWQgaW50byBpdC4g
V2UgY2FuJ3QgdXNlIHRoYXQKLSAgICAgICAgICAgIC8vIGdseXBoLCBzbyB3ZSBmYWxsIGJhY2sg
dG8gdGhlIHVwcmlnaHQgZGF0YSBhbmQgdXNlIHRoZSBob3Jpem9udGFsIGdseXBoLgotICAgICAg
ICAgICAgaWYgKHVwcmlnaHREYXRhLmZvbnREYXRhKQotICAgICAgICAgICAgICAgIHJldHVybiBt
YWtlX3BhaXIodXByaWdodERhdGEsIHVwcmlnaHRQYWdlKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSBpZiAob3JpZW50YXRpb24gPT0gTm9uQ0pLR2x5cGhPcmllbnRhdGlvblZlcnRpY2FsUmlnaHQp
IHsKLSAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2ZXJ0aWNhbFJpZ2h0Rm9udERhdGEg
PSBkYXRhLmZvbnREYXRhLT52ZXJ0aWNhbFJpZ2h0T3JpZW50YXRpb25Gb250RGF0YSgpOwotICAg
ICAgICBHbHlwaFBhZ2VUcmVlTm9kZSogdmVydGljYWxSaWdodE5vZGUgPSBHbHlwaFBhZ2VUcmVl
Tm9kZTo6Z2V0Um9vdENoaWxkKHZlcnRpY2FsUmlnaHRGb250RGF0YS5nZXQoKSwgcGFnZU51bWJl
cik7Ci0gICAgICAgIEdseXBoUGFnZSogdmVydGljYWxSaWdodFBhZ2UgPSB2ZXJ0aWNhbFJpZ2h0
Tm9kZS0+cGFnZSgpOwotICAgICAgICBpZiAodmVydGljYWxSaWdodFBhZ2UpIHsKLSAgICAgICAg
ICAgIEdseXBoRGF0YSB2ZXJ0aWNhbFJpZ2h0RGF0YSA9IHZlcnRpY2FsUmlnaHRQYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyKTsKLSAgICAgICAgICAgIC8vIElmIHRoZSBnbHlw
aHMgYXJlIGRpc3RpbmN0LCB3ZSB3aWxsIG1ha2UgdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUgZm9u
dCBoYXMgYSB2ZXJ0aWNhbC1yaWdodCBnbHlwaCBiYWtlZAotICAgICAgICAgICAgLy8gaW50byBp
dC4KLSAgICAgICAgICAgIGlmIChkYXRhLmdseXBoICE9IHZlcnRpY2FsUmlnaHREYXRhLmdseXBo
KQotICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX3BhaXIoZGF0YSwgcGFnZSk7Ci0gICAgICAg
ICAgICAvLyBUaGUgZ2x5cGhzIGFyZSBpZGVudGljYWwsIG1lYW5pbmcgdGhhdCB3ZSBzaG91bGQg
anVzdCB1c2UgdGhlIGhvcml6b250YWwgZ2x5cGguCi0gICAgICAgICAgICBpZiAodmVydGljYWxS
aWdodERhdGEuZm9udERhdGEpCi0gICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcih2ZXJ0
aWNhbFJpZ2h0RGF0YSwgdmVydGljYWxSaWdodFBhZ2UpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiBtYWtlX3BhaXIoZGF0YSwgcGFnZSk7Ci19Ci0KLXN0ZDo6cGFpcjxHbHlwaERhdGEs
IEdseXBoUGFnZSo+IEZvbnQ6OmdseXBoRGF0YUFuZFBhZ2VGb3JDaGFyYWN0ZXIoVUNoYXIzMiBj
LCBib29sIG1pcnJvciwgRm9udERhdGFWYXJpYW50IHZhcmlhbnQpIGNvbnN0Ci17Ci0gICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKLQotICAgIGlmICh2YXJpYW50ID09IEF1dG9WYXJpYW50KSB7
Ci0gICAgICAgIGlmIChtX2ZvbnREZXNjcmlwdGlvbi5zbWFsbENhcHMoKSAmJiAhcHJpbWFyeUZv
bnQoKS0+aXNTVkdGb250KCkpIHsKLSAgICAgICAgICAgIFVDaGFyMzIgdXBwZXJDID0gdG9VcHBl
cihjKTsKLSAgICAgICAgICAgIGlmICh1cHBlckMgIT0gYykgewotICAgICAgICAgICAgICAgIGMg
PSB1cHBlckM7Ci0gICAgICAgICAgICAgICAgdmFyaWFudCA9IFNtYWxsQ2Fwc1ZhcmlhbnQ7Ci0g
ICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFu
dDsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2YXJpYW50ID0gTm9ybWFsVmFyaWFudDsK
LSAgICB9Ci0KLSAgICBpZiAobWlycm9yKQotICAgICAgICBjID0gbWlycm9yZWRDaGFyKGMpOwot
Ci0gICAgdW5zaWduZWQgcGFnZU51bWJlciA9IChjIC8gR2x5cGhQYWdlOjpzaXplKTsKLQotICAg
IEdseXBoUGFnZVRyZWVOb2RlKiBub2RlID0gcGFnZU51bWJlciA/IG1fZ2x5cGhzLT5tX3BhZ2Vz
LmdldChwYWdlTnVtYmVyKSA6IG1fZ2x5cGhzLT5tX3BhZ2VaZXJvOwotICAgIGlmICghbm9kZSkg
ewotICAgICAgICBub2RlID0gR2x5cGhQYWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZChmb250RGF0
YUF0KDApLCBwYWdlTnVtYmVyKTsKLSAgICAgICAgaWYgKHBhZ2VOdW1iZXIpCi0gICAgICAgICAg
ICBtX2dseXBocy0+bV9wYWdlcy5zZXQocGFnZU51bWJlciwgbm9kZSk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fZ2x5cGhzLT5tX3BhZ2VaZXJvID0gbm9kZTsKLSAgICB9Ci0KLSAgICBH
bHlwaFBhZ2UqIHBhZ2UgPSAwOwotICAgIGlmICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsK
LSAgICAgICAgLy8gRmFzdGVzdCBsb29wLCBmb3IgdGhlIGNvbW1vbiBjYXNlIChub3JtYWwgdmFy
aWFudCkuCi0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICBwYWdlID0gbm9kZS0+
cGFnZSgpOwotICAgICAgICAgICAgaWYgKHBhZ2UpIHsKLSAgICAgICAgICAgICAgICBHbHlwaERh
dGEgZGF0YSA9IHBhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3RlcihjKTsKLSAgICAgICAgICAgICAg
ICBpZiAoZGF0YS5mb250RGF0YSAmJiAoZGF0YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3Jp
ZW50YXRpb24oKSA9PSBIb3Jpem9udGFsIHx8IGRhdGEuZm9udERhdGEtPmlzVGV4dE9yaWVudGF0
aW9uRmFsbGJhY2soKSkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX3BhaXIoZGF0
YSwgcGFnZSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoZGF0YS5mb250RGF0YSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNDSktJZGVvZ3JhcGhPclN5bWJvbChjKSkgewotICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFkYXRhLmZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gVXNlIHRoZSBicm9rZW4gaWRlb2dyYXBo
IGZvbnQgZGF0YS4gVGhlIGJyb2tlbiBpZGVvZ3JhcGggZm9udCB3aWxsIHVzZSB0aGUgaG9yaXpv
bnRhbCB3aWR0aCBvZiBnbHlwaHMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0byBt
YWtlIHN1cmUgeW91IGdldCBhIHNxdWFyZSAoZXZlbiBmb3IgYnJva2VuIGdseXBocyBsaWtlIHN5
bWJvbHMgdXNlZCBmb3IgcHVuY3R1YXRpb24pLgotICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHZhcmlhbnQgPSBCcm9rZW5JZGVvZ3JhcGhWYXJpYW50OwotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbHlwaERhdGFBbmRQ
YWdlRm9yTm9uQ0pLQ2hhcmFjdGVyV2l0aEdseXBoT3JpZW50YXRpb24oYywgbV9mb250RGVzY3Jp
cHRpb24ubm9uQ0pLR2x5cGhPcmllbnRhdGlvbigpLCBkYXRhLCBwYWdlLCBwYWdlTnVtYmVyKTsK
LQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwotICAg
ICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChub2RlLT5pc1N5c3RlbUZhbGxi
YWNrKCkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBub2RlID0gbm9kZS0+Z2V0Q2hpbGQoZm9udERhdGFBdChub2RlLT5sZXZlbCgpKSwg
cGFnZU51bWJlcik7Ci0gICAgICAgICAgICBpZiAocGFnZU51bWJlcikKLSAgICAgICAgICAgICAg
ICBtX2dseXBocy0+bV9wYWdlcy5zZXQocGFnZU51bWJlciwgbm9kZSk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbV9nbHlwaHMtPm1fcGFnZVplcm8gPSBub2RlOwotICAgICAg
ICB9Ci0gICAgfQotICAgIGlmICh2YXJpYW50ICE9IE5vcm1hbFZhcmlhbnQpIHsKLSAgICAgICAg
d2hpbGUgKHRydWUpIHsKLSAgICAgICAgICAgIHBhZ2UgPSBub2RlLT5wYWdlKCk7Ci0gICAgICAg
ICAgICBpZiAocGFnZSkgewotICAgICAgICAgICAgICAgIEdseXBoRGF0YSBkYXRhID0gcGFnZS0+
Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpOwotICAgICAgICAgICAgICAgIGlmIChkYXRhLmZvbnRE
YXRhKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFRoZSB2YXJpYW50Rm9udERhdGEgZnVuY3Rp
b24gc2hvdWxkIG5vdCBub3JtYWxseSByZXR1cm4gMC4KLSAgICAgICAgICAgICAgICAgICAgLy8g
QnV0IGlmIGl0IGRvZXMsIHdlIHdpbGwganVzdCByZW5kZXIgdGhlIGNhcGl0YWwgbGV0dGVyIGJp
Zy4KLSAgICAgICAgICAgICAgICAgICAgUmVmUHRyPFNpbXBsZUZvbnREYXRhPiB2YXJpYW50Rm9u
dERhdGEgPSBkYXRhLmZvbnREYXRhLT52YXJpYW50Rm9udERhdGEobV9mb250RGVzY3JpcHRpb24s
IHZhcmlhbnQpOwotICAgICAgICAgICAgICAgICAgICBpZiAoIXZhcmlhbnRGb250RGF0YSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBtYWtlX3BhaXIoZGF0YSwgcGFnZSk7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgR2x5cGhQYWdlVHJlZU5vZGUqIHZhcmlhbnROb2RlID0gR2x5cGhQ
YWdlVHJlZU5vZGU6OmdldFJvb3RDaGlsZCh2YXJpYW50Rm9udERhdGEuZ2V0KCksIHBhZ2VOdW1i
ZXIpOwotICAgICAgICAgICAgICAgICAgICBHbHlwaFBhZ2UqIHZhcmlhbnRQYWdlID0gdmFyaWFu
dE5vZGUtPnBhZ2UoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhbnRQYWdlKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBHbHlwaERhdGEgZGF0YSA9IHZhcmlhbnRQYWdlLT5nbHlw
aERhdGFGb3JDaGFyYWN0ZXIoYyk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YS5m
b250RGF0YSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbWFrZV9wYWlyKGRh
dGEsIHZhcmlhbnRQYWdlKTsKLSAgICAgICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIERvIG5vdCBhdHRlbXB0IHN5c3RlbSBmYWxsYmFjayBvZmYgdGhlIHZhcmlhbnRG
b250RGF0YS4gVGhpcyBpcyB0aGUgdmVyeSB1bmxpa2VseSBjYXNlIHRoYXQKLSAgICAgICAgICAg
ICAgICAgICAgLy8gYSBmb250IGhhcyB0aGUgbG93ZXJjYXNlIGNoYXJhY3RlciBidXQgdGhlIHNt
YWxsIGNhcHMgZm9udCBkb2VzIG5vdCBoYXZlIGl0cyB1cHBlcmNhc2UgdmVyc2lvbi4KLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIG1ha2VfcGFpcih2YXJpYW50Rm9udERhdGEtPm1pc3NpbmdH
bHlwaERhdGEoKSwgcGFnZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
aWYgKG5vZGUtPmlzU3lzdGVtRmFsbGJhY2soKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5vZGUgPSBub2RlLT5nZXRDaGlsZChmb250
RGF0YUF0KG5vZGUtPmxldmVsKCkpLCBwYWdlTnVtYmVyKTsKLSAgICAgICAgICAgIGlmIChwYWdl
TnVtYmVyKQotICAgICAgICAgICAgICAgIG1fZ2x5cGhzLT5tX3BhZ2VzLnNldChwYWdlTnVtYmVy
LCBub2RlKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBtX2dseXBocy0+bV9w
YWdlWmVybyA9IG5vZGU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBBU1NFUlQocGFnZSk7Ci0g
ICAgQVNTRVJUKG5vZGUtPmlzU3lzdGVtRmFsbGJhY2soKSk7Ci0KLSAgICAvLyBTeXN0ZW0gZmFs
bGJhY2sgaXMgY2hhcmFjdGVyLWRlcGVuZGVudC4gV2hlbiB3ZSBnZXQgaGVyZSwgd2UKLSAgICAv
LyBrbm93IHRoYXQgdGhlIGNoYXJhY3RlciBpbiBxdWVzdGlvbiBpc24ndCBpbiB0aGUgc3lzdGVt
IGZhbGxiYWNrCi0gICAgLy8gZm9udCdzIGdseXBoIHBhZ2UuIFRyeSB0byBsYXppbHkgY3JlYXRl
IGl0IGhlcmUuCi0gICAgVUNoYXIgY29kZVVuaXRzWzJdOwotICAgIGludCBjb2RlVW5pdHNMZW5n
dGg7Ci0gICAgaWYgKGMgPD0gMHhGRkZGKSB7Ci0gICAgICAgIGNvZGVVbml0c1swXSA9IEZvbnQ6
Om5vcm1hbGl6ZVNwYWNlcyhjKTsKLSAgICAgICAgY29kZVVuaXRzTGVuZ3RoID0gMTsKLSAgICB9
IGVsc2UgewotICAgICAgICBjb2RlVW5pdHNbMF0gPSBVMTZfTEVBRChjKTsKLSAgICAgICAgY29k
ZVVuaXRzWzFdID0gVTE2X1RSQUlMKGMpOwotICAgICAgICBjb2RlVW5pdHNMZW5ndGggPSAyOwot
ICAgIH0KLSAgICBSZWZQdHI8U2ltcGxlRm9udERhdGE+IGNoYXJhY3RlckZvbnREYXRhID0gZm9u
dENhY2hlKCktPmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycygqdGhpcywgY29kZVVuaXRzLCBjb2Rl
VW5pdHNMZW5ndGgpOwotICAgIGlmIChjaGFyYWN0ZXJGb250RGF0YSkgewotICAgICAgICBpZiAo
Y2hhcmFjdGVyRm9udERhdGEtPnBsYXRmb3JtRGF0YSgpLm9yaWVudGF0aW9uKCkgPT0gVmVydGlj
YWwgJiYgIWNoYXJhY3RlckZvbnREYXRhLT5oYXNWZXJ0aWNhbEdseXBocygpICYmIGlzQ0pLSWRl
b2dyYXBoT3JTeW1ib2woYykpCi0gICAgICAgICAgICB2YXJpYW50ID0gQnJva2VuSWRlb2dyYXBo
VmFyaWFudDsKLSAgICAgICAgaWYgKHZhcmlhbnQgIT0gTm9ybWFsVmFyaWFudCkKLSAgICAgICAg
ICAgIGNoYXJhY3RlckZvbnREYXRhID0gY2hhcmFjdGVyRm9udERhdGEtPnZhcmlhbnRGb250RGF0
YShtX2ZvbnREZXNjcmlwdGlvbiwgdmFyaWFudCk7Ci0gICAgfQotICAgIGlmIChjaGFyYWN0ZXJG
b250RGF0YSkgewotICAgICAgICAvLyBHb3QgdGhlIGZhbGxiYWNrIGdseXBoIGFuZCBmb250Lgot
ICAgICAgICBHbHlwaFBhZ2UqIGZhbGxiYWNrUGFnZSA9IEdseXBoUGFnZVRyZWVOb2RlOjpnZXRS
b290Q2hpbGQoY2hhcmFjdGVyRm9udERhdGEuZ2V0KCksIHBhZ2VOdW1iZXIpLT5wYWdlKCk7Ci0g
ICAgICAgIEdseXBoRGF0YSBkYXRhID0gZmFsbGJhY2tQYWdlICYmIGZhbGxiYWNrUGFnZS0+Zm9u
dERhdGFGb3JDaGFyYWN0ZXIoYykgPyBmYWxsYmFja1BhZ2UtPmdseXBoRGF0YUZvckNoYXJhY3Rl
cihjKSA6IGNoYXJhY3RlckZvbnREYXRhLT5taXNzaW5nR2x5cGhEYXRhKCk7Ci0gICAgICAgIC8v
IENhY2hlIGl0IHNvIHdlIGRvbid0IGhhdmUgdG8gZG8gc3lzdGVtIGZhbGxiYWNrIGFnYWluIG5l
eHQgdGltZS4KLSAgICAgICAgaWYgKHZhcmlhbnQgPT0gTm9ybWFsVmFyaWFudCkgewotI2lmIE9T
KFdJTkNFKQotICAgICAgICAgICAgLy8gbWlzc2luZ0dseXBoRGF0YSByZXR1cm5zIGEgbnVsbCBj
aGFyYWN0ZXIsIHdoaWNoIGlzIG5vdCBzdWl0YWJsZSBmb3IgR0RJIHRvIGRpc3BsYXkuCi0gICAg
ICAgICAgICAvLyBBbHNvLCBzb21ldGltZXMgd2UgY2Fubm90IG1hcCBhIGZvbnQgZm9yIHRoZSBj
aGFyYWN0ZXIgb24gV0lOQ0UsIGJ1dCBHREkgY2FuIHN0aWxsCi0gICAgICAgICAgICAvLyBkaXNw
bGF5IHRoZSBjaGFyYWN0ZXIsIHByb2JhYmx5IGJlY2F1c2UgdGhlIGZvbnQgcGFja2FnZSBpcyBu
b3QgaW5zdGFsbGVkIGNvcnJlY3RseS4KLSAgICAgICAgICAgIC8vIFNvIHdlIGp1c3QgYWx3YXlz
IHNldCB0aGUgZ2x5cGggdG8gYmUgc2FtZSBhcyB0aGUgY2hhcmFjdGVyLCBhbmQgbGV0IEdESSBz
b2x2ZSBpdC4KLSAgICAgICAgICAgIHBhZ2UtPnNldEdseXBoRGF0YUZvckNoYXJhY3RlcihjLCBj
LCBjaGFyYWN0ZXJGb250RGF0YS5nZXQoKSk7Ci0gICAgICAgICAgICBjaGFyYWN0ZXJGb250RGF0
YS0+c2V0TWF4R2x5cGhQYWdlVHJlZUxldmVsKG1heChjaGFyYWN0ZXJGb250RGF0YS0+bWF4R2x5
cGhQYWdlVHJlZUxldmVsKCksIG5vZGUtPmxldmVsKCkpKTsKLSAgICAgICAgICAgIHJldHVybiBt
YWtlX3BhaXIocGFnZS0+Z2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGMpLCBwYWdlKTsKLSNlbHNlCi0g
ICAgICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIoYywgZGF0YS5nbHlwaCwg
ZGF0YS5mb250RGF0YSk7Ci0gICAgICAgICAgICBkYXRhLmZvbnREYXRhLT5zZXRNYXhHbHlwaFBh
Z2VUcmVlTGV2ZWwobWF4KGRhdGEuZm9udERhdGEtPm1heEdseXBoUGFnZVRyZWVMZXZlbCgpLCBu
b2RlLT5sZXZlbCgpKSk7Ci0gICAgICAgICAgICBpZiAoIWlzQ0pLSWRlb2dyYXBoT3JTeW1ib2wo
YykgJiYgZGF0YS5mb250RGF0YS0+cGxhdGZvcm1EYXRhKCkub3JpZW50YXRpb24oKSAhPSBIb3Jp
em9udGFsICYmICFkYXRhLmZvbnREYXRhLT5pc1RleHRPcmllbnRhdGlvbkZhbGxiYWNrKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGdseXBoRGF0YUFuZFBhZ2VGb3JOb25DSktDaGFyYWN0ZXJX
aXRoR2x5cGhPcmllbnRhdGlvbihjLCBtX2ZvbnREZXNjcmlwdGlvbi5ub25DSktHbHlwaE9yaWVu
dGF0aW9uKCksIGRhdGEsIGZhbGxiYWNrUGFnZSwgcGFnZU51bWJlcik7Ci0jZW5kaWYKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gbWFrZV9wYWlyKGRhdGEsIHBhZ2UpOwotICAgIH0KLQotICAg
IC8vIEV2ZW4gc3lzdGVtIGZhbGxiYWNrIGNhbiBmYWlsOyB1c2UgdGhlIG1pc3NpbmcgZ2x5cGgg
aW4gdGhhdCBjYXNlLgotICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBiZSBuaWNlciB0byB1c2UgdGhl
IG1pc3NpbmcgZ2x5cGggZnJvbSB0aGUgbGFzdCByZXNvcnQgZm9udCBpbnN0ZWFkLgotICAgIEds
eXBoRGF0YSBkYXRhID0gcHJpbWFyeUZvbnQoKS0+bWlzc2luZ0dseXBoRGF0YSgpOwotICAgIGlm
ICh2YXJpYW50ID09IE5vcm1hbFZhcmlhbnQpIHsKLSNpZiBPUyhXSU5DRSkKLSAgICAgICAgLy8g
U2VlIGNvbW1lbnQgYWJvdXQgV0lOQ0UgR0RJIGhhbmRsaW5nIG5lYXIgc2V0R2x5cGhEYXRhRm9y
Q2hhcmFjdGVyIGFib3ZlLgotICAgICAgICBwYWdlLT5zZXRHbHlwaERhdGFGb3JDaGFyYWN0ZXIo
YywgYywgZGF0YS5mb250RGF0YSk7Ci0gICAgICAgIGRhdGEuZm9udERhdGEtPnNldE1heEdseXBo
UGFnZVRyZWVMZXZlbChtYXgoZGF0YS5mb250RGF0YS0+bWF4R2x5cGhQYWdlVHJlZUxldmVsKCks
IG5vZGUtPmxldmVsKCkpKTsKLSAgICAgICAgcmV0dXJuIG1ha2VfcGFpcihwYWdlLT5nbHlwaERh
dGFGb3JDaGFyYWN0ZXIoYyksIHBhZ2UpOwotI2Vsc2UKLSAgICAgICAgcGFnZS0+c2V0R2x5cGhE
YXRhRm9yQ2hhcmFjdGVyKGMsIGRhdGEuZ2x5cGgsIGRhdGEuZm9udERhdGEpOwotICAgICAgICBk
YXRhLmZvbnREYXRhLT5zZXRNYXhHbHlwaFBhZ2VUcmVlTGV2ZWwobWF4KGRhdGEuZm9udERhdGEt
Pm1heEdseXBoUGFnZVRyZWVMZXZlbCgpLCBub2RlLT5sZXZlbCgpKSk7Ci0jZW5kaWYKLSAgICB9
Ci0gICAgcmV0dXJuIG1ha2VfcGFpcihkYXRhLCBwYWdlKTsKLX0KLQogYm9vbCBGb250Ojpwcmlt
YXJ5Rm9udEhhc0dseXBoRm9yQ2hhcmFjdGVyKFVDaGFyMzIgY2hhcmFjdGVyKSBjb25zdAogewog
ICAgIHVuc2lnbmVkIHBhZ2VOdW1iZXIgPSAoY2hhcmFjdGVyIC8gR2x5cGhQYWdlOjpzaXplKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNz
Q29udGV4dC5oCShyZXZpc2lvbiAxNTA3MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDcgKzUwMiw2
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgdm9pZCByZXN0b3JlUGxhdGZvcm1TdGF0
ZSgpOwogCiAgICAgICAgIHZvaWQgc2V0UGxhdGZvcm1UZXh0RHJhd2luZ01vZGUoVGV4dERyYXdp
bmdNb2RlRmxhZ3MpOwotICAgICAgICB2b2lkIHNldFBsYXRmb3JtRm9udChjb25zdCBGb250JiBm
b250KTsKIAogICAgICAgICB2b2lkIHNldFBsYXRmb3JtU3Ryb2tlQ29sb3IoY29uc3QgQ29sb3Im
LCBDb2xvclNwYWNlKTsKICAgICAgICAgdm9pZCBzZXRQbGF0Zm9ybVN0cm9rZVN0eWxlKFN0cm9r
ZVN0eWxlKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dFJ1blJl
bmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9zdmcvU1ZHVGV4dFJ1blJlbmRlcmluZ0NvbnRleHQuY3BwCShyZXZpc2lvbiAxNTA3MjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRSdW5SZW5kZXJpbmdDb250ZXh0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc0LDcgKzE3NCw3IEBAIEdseXBoRGF0YSBTVkdUZXh0
UnVuUmVuZGVyaW5nQ29udGV4dDo6Z2wKICAgICBjb25zdCBTaW1wbGVGb250RGF0YSogcHJpbWFy
eUZvbnQgPSBmb250LnByaW1hcnlGb250KCk7CiAgICAgQVNTRVJUKHByaW1hcnlGb250KTsKIAot
ICAgIHBhaXI8R2x5cGhEYXRhLCBHbHlwaFBhZ2UqPiBwYWlyID0gZm9udC5nbHlwaERhdGFBbmRQ
YWdlRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgbWlycm9yKTsKKyAgICBwYWlyPEdseXBoRGF0YSwg
R2x5cGhQYWdlKj4gcGFpciA9IGZvbnQuZ2x5cGhEYXRhQW5kUGFnZUZvckNoYXJhY3RlcihjaGFy
YWN0ZXIsIG1pcnJvciwgQXV0b1ZhcmlhbnQpOwogICAgIEdseXBoRGF0YSBnbHlwaERhdGEgPSBw
YWlyLmZpcnN0OwogCiAgICAgLy8gQ2hlY2sgaWYgd2UgaGF2ZSB0aGUgbWlzc2luZyBnbHlwaCBk
YXRhLCBpbiB3aGljaCBjYXNlIHdlIGNhbiBqdXN0IHJldHVybi4K
</data>
<flag name="review"
          id="224372"
          type_id="1"
          status="+"
          setter="kling"
    />
          </attachment>
      

    </bug>

</bugzilla>