<?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>55974</bug_id>
          
          <creation_ts>2011-03-08 15:02:09 -0800</creation_ts>
          <short_desc>Move StyleChange and other global functions from ApplyStyleCommand to EditingStyle</short_desc>
          <delta_ts>2011-04-12 12:02:16 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>54932</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>morrita</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>364180</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-08 15:02:09 -0800</bug_when>
    <thetext>ApplyStyleCommand.cpp currently hosts many style-related functions but they should really be in EditingStyle instead.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>364186</commentid>
    <comment_count>1</comment_count>
      <attachid>85098</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-03-08 15:21:22 -0800</bug_when>
    <thetext>Created attachment 85098
cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383501</commentid>
    <comment_count>2</comment_count>
    <who name="Hajime Morrita">morrita</who>
    <bug_when>2011-04-11 14:10:41 -0700</bug_when>
    <thetext>Although I don&apos;t know the context of this change, The change itself looks trivial and ready to r+.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383567</commentid>
    <comment_count>3</comment_count>
      <attachid>85098</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-04-11 15:01:38 -0700</bug_when>
    <thetext>Comment on attachment 85098
cleanup

OK.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>383577</commentid>
    <comment_count>4</comment_count>
      <attachid>85098</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-04-11 15:08:26 -0700</bug_when>
    <thetext>Comment on attachment 85098
cleanup

Rejecting attachment 85098 from commit-queue.

Failed to run &quot;[&apos;./Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=cr-jail-4&apos;, &apos;apply-...&quot; exit_code: 2

Last 500 characters of output:
ce/WebCore/editing/ApplyStyleCommand.cpp
Hunk #2 FAILED at 49.
Hunk #3 succeeded at 111 (offset -2 lines).
1 out of 3 hunks FAILED -- saving rejects to file Source/WebCore/editing/ApplyStyleCommand.cpp.rej
patching file Source/WebCore/editing/ApplyStyleCommand.h
patching file Source/WebCore/editing/EditingStyle.cpp
patching file Source/WebCore/editing/EditingStyle.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--reviewer&apos;, u&apos;Eric Seidel&apos;, u&apos;--force&apos;]&quot; exit_code: 1

Full output: http://queues.webkit.org/results/8386637</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>384223</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-04-12 12:02:16 -0700</bug_when>
    <thetext>Committed r83618: &lt;http://trac.webkit.org/changeset/83618&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>85098</attachid>
            <date>2011-03-08 15:21:22 -0800</date>
            <delta_ts>2011-04-11 15:08:26 -0700</delta_ts>
            <desc>cleanup</desc>
            <filename>bug-55974-20110308152121.patch</filename>
            <type>text/plain</type>
            <size>34250</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDgwNTk2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNDkgQEAKKzIwMTEtMDMtMDggIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgTW92ZSBTdHlsZUNoYW5nZSBhbmQgb3RoZXIgZ2xvYmFsIGZ1bmN0
aW9ucyBmcm9tIEFwcGx5U3R5bGVDb21tYW5kIHRvIEVkaXRpbmdTdHlsZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTU5NzQKKworICAgICAgICBNb3Zl
ZCBTdHlsZUNoYW5nZSwgZ2V0SWRlbnRpZmllclZhbHVlLCBhbmQgbGVnYWN5Rm9udFNpemVGcm9t
Q1NTVmFsdWUgZnJvbSBBcHBseVN0eWxlQ29tbWFuZAorICAgICAgICB0byBFZGl0aW5nU3R5bGUu
IEFsc28gbW92ZWQgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzLCBnZXRJZGVudGlm
aWVyVmFsdWUsCisgICAgICAgIHNldFRleHREZWNvcmF0aW9uUHJvcGVydHksIGlzQ1NTVmFsdWVM
ZW5ndGgsIGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlLCBleHRyYWN0VGV4dFN0eWxlcywKKyAg
ICAgICAgZGlmZlRleHREZWNvcmF0aW9ucywgZm9udFdlaWdodElzQm9sZCwgZ2V0VGV4dEFsaWdu
bWVudCwgYW5kIGdldFByb3BlcnRpZXNOb3RJbi4KKworICAgICAgICBCZWNhdXNlIG9mIHRoaXMg
bW92ZSwgZ2V0UHJvcGVydGllc05vdEluIGlzIG5vIGxvbmdlciB2aXNpYmxlIG91dHNpZGUgb2Yg
RWRpdGluZ1N0eWxlLmNwcAorCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5j
cHA6CisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOgorICAgICAgICAqIGVk
aXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnJlY29uY2lsZVRleHRE
ZWNvcmF0aW9uUHJvcGVydGllcyk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6U3R5
bGVDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6c2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eSk6
CisgICAgICAgIChXZWJDb3JlOjpnZXRSR0JBRm9udENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlQ2hhbmdlOjpleHRyYWN0VGV4dFN0eWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpkaWZm
VGV4dERlY29yYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRXZWlnaHRJc0JvbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6Z2V0VGV4dEFsaWdubWVudCk6CisgICAgICAgIChXZWJDb3JlOjpn
ZXRQcm9wZXJ0aWVzTm90SW4pOgorICAgICAgICAoV2ViQ29yZTo6Z2V0SWRlbnRpZmllclZhbHVl
KToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ1NTVmFsdWVMZW5ndGgpOgorICAgICAgICAoV2ViQ29y
ZTo6bGVnYWN5Rm9udFNpemVGcm9tQ1NTVmFsdWUpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdGlu
Z1N0eWxlLmg6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6Y3NzU3R5bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmFwcGx5Qm9sZCk6CisgICAgICAgIChXZWJDb3Jl
OjpTdHlsZUNoYW5nZTo6YXBwbHlJdGFsaWMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFu
Z2U6OmFwcGx5VW5kZXJsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjphcHBs
eUxpbmVUaHJvdWdoKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjphcHBseVN1YnNj
cmlwdCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6YXBwbHlTdXBlcnNjcmlwdCk6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6YXBwbHlGb250Q29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmFwcGx5Rm9udEZhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVDaGFuZ2U6OmFwcGx5Rm9udFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVD
aGFuZ2U6OmZvbnRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZUNoYW5nZTo6Zm9udEZh
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVDaGFuZ2U6OmZvbnRTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlQ2hhbmdlOjpvcGVyYXRvcj09KToKKyAgICAgICAgKFdlYkNvcmU6OlN0
eWxlQ2hhbmdlOjpvcGVyYXRvciE9KToKKwogMjAxMS0wMy0wOCAgQnJlbnQgRnVsZ2hhbSAgPGJm
dWxnaGFtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTW9yZSBidWlsZCBidXN0YWdlIGZpeC4KSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCShyZXZp
c2lvbiA4MDU4MSkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxNyArMjgsMTIgQEAKIAogI2luY2x1ZGUgIkNTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHku
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxl
Y3Rvci5oIgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKLSNpbmNsdWRlICJDU1NWYWx1
ZUxpc3QuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRpbmdTdHlsZS5o
IgogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiSFRN
TEZvbnRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTEludGVyY2hhbmdlLmgiCiAjaW5jbHVkZSAi
SFRNTE5hbWVzLmgiCiAjaW5jbHVkZSAiTm9kZUxpc3QuaCIKQEAgLTU0LDI0NCArNDksNiBAQCBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHVzaW5nIG5hbWVzcGFjZSBIVE1MTmFtZXM7CiAKLXN0YXRp
YyBSR0JBMzIgZ2V0UkdCQUZvbnRDb2xvcihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKLXsK
LSAgICBSZWZQdHI8Q1NTVmFsdWU+IGNvbG9yVmFsdWUgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NW
YWx1ZShDU1NQcm9wZXJ0eUNvbG9yKTsKLSAgICBpZiAoIWNvbG9yVmFsdWUpCi0gICAgICAgIHJl
dHVybiBDb2xvcjo6dHJhbnNwYXJlbnQ7Ci0KLSAgICBBU1NFUlQoY29sb3JWYWx1ZS0+aXNQcmlt
aXRpdmVWYWx1ZSgpKTsKLQotICAgIENTU1ByaW1pdGl2ZVZhbHVlKiBwcmltaXRpdmVDb2xvciA9
IHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oY29sb3JWYWx1ZS5nZXQoKSk7Ci0gICAg
UkdCQTMyIHJnYmEgPSAwOwotICAgIGlmIChwcmltaXRpdmVDb2xvci0+cHJpbWl0aXZlVHlwZSgp
ICE9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUkdCQ09MT1IpIHsKLSAgICAgICAgQ1NTUGFyc2Vy
OjpwYXJzZUNvbG9yKHJnYmEsIGNvbG9yVmFsdWUtPmNzc1RleHQoKSk7Ci0gICAgICAgIC8vIE5l
ZWQgdG8gdGFrZSBjYXJlIG9mIG5hbWVkIGNvbG9yIHN1Y2ggYXMgZ3JlZW4gYW5kIGJsYWNrCi0g
ICAgICAgIC8vIFRoaXMgY29kZSBzaG91bGQgYmUgcmVtb3ZlZCBhZnRlciBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjgyODIgaXMgZml4ZWQuCi0gICAgfSBlbHNlCi0g
ICAgICAgIHJnYmEgPSBwcmltaXRpdmVDb2xvci0+Z2V0UkdCQTMyVmFsdWUoKTsKLQotICAgIHJl
dHVybiByZ2JhOwotfQotCi1jbGFzcyBTdHlsZUNoYW5nZSB7Ci1wdWJsaWM6Ci0gICAgU3R5bGVD
aGFuZ2UoRWRpdGluZ1N0eWxlKiwgY29uc3QgUG9zaXRpb24mKTsKLQotICAgIFN0cmluZyBjc3NT
dHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY3NzU3R5bGU7IH0KLSAgICBib29sIGFwcGx5Qm9sZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlCb2xkOyB9Ci0gICAgYm9vbCBhcHBseUl0YWxpYygpIGNv
bnN0IHsgcmV0dXJuIG1fYXBwbHlJdGFsaWM7IH0KLSAgICBib29sIGFwcGx5VW5kZXJsaW5lKCkg
Y29uc3QgeyByZXR1cm4gbV9hcHBseVVuZGVybGluZTsgfQotICAgIGJvb2wgYXBwbHlMaW5lVGhy
b3VnaCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlMaW5lVGhyb3VnaDsgfQotICAgIGJvb2wgYXBw
bHlTdWJzY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5U3Vic2NyaXB0OyB9Ci0gICAgYm9v
bCBhcHBseVN1cGVyc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9hcHBseVN1cGVyc2NyaXB0OyB9
Ci0gICAgYm9vbCBhcHBseUZvbnRDb2xvcigpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlGb250Q29s
b3IubGVuZ3RoKCkgPiAwOyB9Ci0gICAgYm9vbCBhcHBseUZvbnRGYWNlKCkgY29uc3QgeyByZXR1
cm4gbV9hcHBseUZvbnRGYWNlLmxlbmd0aCgpID4gMDsgfQotICAgIGJvb2wgYXBwbHlGb250U2l6
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlGb250U2l6ZS5sZW5ndGgoKSA+IDA7IH0KLQotICAg
IFN0cmluZyBmb250Q29sb3IoKSB7IHJldHVybiBtX2FwcGx5Rm9udENvbG9yOyB9Ci0gICAgU3Ry
aW5nIGZvbnRGYWNlKCkgeyByZXR1cm4gbV9hcHBseUZvbnRGYWNlOyB9Ci0gICAgU3RyaW5nIGZv
bnRTaXplKCkgeyByZXR1cm4gbV9hcHBseUZvbnRTaXplOyB9Ci0KLSAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgU3R5bGVDaGFuZ2UmIG90aGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fY3Nz
U3R5bGUgPT0gb3RoZXIubV9jc3NTdHlsZQotICAgICAgICAgICAgJiYgbV9hcHBseUJvbGQgPT0g
b3RoZXIubV9hcHBseUJvbGQKLSAgICAgICAgICAgICYmIG1fYXBwbHlJdGFsaWMgPT0gb3RoZXIu
bV9hcHBseUl0YWxpYwotICAgICAgICAgICAgJiYgbV9hcHBseVVuZGVybGluZSA9PSBvdGhlci5t
X2FwcGx5VW5kZXJsaW5lCi0gICAgICAgICAgICAmJiBtX2FwcGx5TGluZVRocm91Z2ggPT0gb3Ro
ZXIubV9hcHBseUxpbmVUaHJvdWdoCi0gICAgICAgICAgICAmJiBtX2FwcGx5U3Vic2NyaXB0ID09
IG90aGVyLm1fYXBwbHlTdWJzY3JpcHQKLSAgICAgICAgICAgICYmIG1fYXBwbHlTdXBlcnNjcmlw
dCA9PSBvdGhlci5tX2FwcGx5U3VwZXJzY3JpcHQKLSAgICAgICAgICAgICYmIG1fYXBwbHlGb250
Q29sb3IgPT0gb3RoZXIubV9hcHBseUZvbnRDb2xvcgotICAgICAgICAgICAgJiYgbV9hcHBseUZv
bnRGYWNlID09IG90aGVyLm1fYXBwbHlGb250RmFjZQotICAgICAgICAgICAgJiYgbV9hcHBseUZv
bnRTaXplID09IG90aGVyLm1fYXBwbHlGb250U2l6ZTsKLSAgICB9Ci0gICAgYm9vbCBvcGVyYXRv
ciE9KGNvbnN0IFN0eWxlQ2hhbmdlJiBvdGhlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiAhKCp0
aGlzID09IG90aGVyKTsKLSAgICB9Ci1wcml2YXRlOgotICAgIHZvaWQgaW5pdChFZGl0aW5nU3R5
bGUqLCBjb25zdCBQb3NpdGlvbiYpOwotICAgIHZvaWQgcmVjb25jaWxlVGV4dERlY29yYXRpb25Q
cm9wZXJ0aWVzKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKik7Ci0gICAgdm9pZCBleHRyYWN0
VGV4dFN0eWxlcyhEb2N1bWVudCosIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBz
aG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7Ci0KLSAgICBTdHJpbmcgbV9jc3NTdHlsZTsK
LSAgICBib29sIG1fYXBwbHlCb2xkOwotICAgIGJvb2wgbV9hcHBseUl0YWxpYzsKLSAgICBib29s
IG1fYXBwbHlVbmRlcmxpbmU7Ci0gICAgYm9vbCBtX2FwcGx5TGluZVRocm91Z2g7Ci0gICAgYm9v
bCBtX2FwcGx5U3Vic2NyaXB0OwotICAgIGJvb2wgbV9hcHBseVN1cGVyc2NyaXB0OwotICAgIFN0
cmluZyBtX2FwcGx5Rm9udENvbG9yOwotICAgIFN0cmluZyBtX2FwcGx5Rm9udEZhY2U7Ci0gICAg
U3RyaW5nIG1fYXBwbHlGb250U2l6ZTsKLX07Ci0KLQotU3R5bGVDaGFuZ2U6OlN0eWxlQ2hhbmdl
KEVkaXRpbmdTdHlsZSogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBwb3NpdGlvbikKLSAgICA6IG1f
YXBwbHlCb2xkKGZhbHNlKQotICAgICwgbV9hcHBseUl0YWxpYyhmYWxzZSkKLSAgICAsIG1fYXBw
bHlVbmRlcmxpbmUoZmFsc2UpCi0gICAgLCBtX2FwcGx5TGluZVRocm91Z2goZmFsc2UpCi0gICAg
LCBtX2FwcGx5U3Vic2NyaXB0KGZhbHNlKQotICAgICwgbV9hcHBseVN1cGVyc2NyaXB0KGZhbHNl
KQotewotICAgIGluaXQoc3R5bGUsIHBvc2l0aW9uKTsKLX0KLQotdm9pZCBTdHlsZUNoYW5nZTo6
aW5pdChFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3NpdGlvbiYgcG9zaXRpb24pCi17Ci0g
ICAgRG9jdW1lbnQqIGRvY3VtZW50ID0gcG9zaXRpb24uYW5jaG9yTm9kZSgpID8gcG9zaXRpb24u
YW5jaG9yTm9kZSgpLT5kb2N1bWVudCgpIDogMDsKLSAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+
c3R5bGUoKSB8fCAhZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0
eWxlID0gcG9zaXRpb24uY29tcHV0ZWRTdHlsZSgpOwotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5
bGVEZWNsYXJhdGlvbj4gbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKHN0eWxlLT5z
dHlsZSgpLCBjb21wdXRlZFN0eWxlLmdldCgpKTsKLQotICAgIHJlY29uY2lsZVRleHREZWNvcmF0
aW9uUHJvcGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOwotICAgIGlmICghZG9jdW1lbnQtPmZy
YW1lKCktPmVkaXRvcigpLT5zaG91bGRTdHlsZVdpdGhDU1MoKSkKLSAgICAgICAgZXh0cmFjdFRl
eHRTdHlsZXMoZG9jdW1lbnQsIG11dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS0+dXNl
Rml4ZWRGb250RGVmYXVsdFNpemUoKSk7Ci0KLSAgICAvLyBDaGFuZ2luZyB0aGUgd2hpdGVzcGFj
ZSBzdHlsZSBpbiBhIHRhYiBzcGFuIHdvdWxkIGNvbGxhcHNlIHRoZSB0YWIgaW50byBhIHNwYWNl
LgotICAgIGlmIChpc1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB8
fCBpc1RhYlNwYW5Ob2RlKChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkpCi0gICAgICAgIG11
dGFibGVTdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlKTsKLQotICAg
IC8vIElmIHVuaWNvZGUtYmlkaSBpcyBwcmVzZW50IGluIG11dGFibGVTdHlsZSBhbmQgZGlyZWN0
aW9uIGlzIG5vdCwgdGhlbiBhZGQgZGlyZWN0aW9uIHRvIG11dGFibGVTdHlsZS4KLSAgICAvLyBG
SVhNRTogU2hvdWxkbid0IHRoaXMgYmUgZG9uZSBpbiBnZXRQcm9wZXJ0aWVzTm90SW4/Ci0gICAg
aWYgKG11dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVC
aWRpKSAmJiAhc3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlE
aXJlY3Rpb24pKQotICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5
RGlyZWN0aW9uLCBzdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eURp
cmVjdGlvbikpOwotCi0gICAgLy8gU2F2ZSB0aGUgcmVzdWx0IGZvciBsYXRlcgotICAgIG1fY3Nz
U3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNzc1RleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKLX0KLQot
dm9pZCBTdHlsZUNoYW5nZTo6cmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzKENTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKLXsgICAgCi0gICAgUmVmUHRyPENTU1ZhbHVl
PiB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENT
U1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QpOwotICAgIFJlZlB0cjxDU1NW
YWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uKTsKLSAgICAvLyBXZSBzaG91bGRuJ3QgaGF2ZSBib3RoIHRleHQt
ZGVjb3JhdGlvbiBhbmQgLXdlYmtpdC10ZXh0LWRlY29yYXRpb25zLWluLWVmZmVjdCBiZWNhdXNl
IHRoYXQgd291bGRuJ3QgbWFrZSBzZW5zZS4KLSAgICBBU1NFUlQoIXRleHREZWNvcmF0aW9uc0lu
RWZmZWN0IHx8ICF0ZXh0RGVjb3JhdGlvbik7Ci0gICAgaWYgKHRleHREZWNvcmF0aW9uc0luRWZm
ZWN0KSB7Ci0gICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHREZWNvcmF0
aW9uLCB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC0+Y3NzVGV4dCgpKTsKLSAgICAgICAgc3R5bGUt
PnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3Qp
OwotICAgICAgICB0ZXh0RGVjb3JhdGlvbiA9IHRleHREZWNvcmF0aW9uc0luRWZmZWN0OwotICAg
IH0KLQotICAgIC8vIElmIHRleHQtZGVjb3JhdGlvbiBpcyBzZXQgdG8gIm5vbmUiLCByZW1vdmUg
dGhlIHByb3BlcnR5IGJlY2F1c2Ugd2UgZG9uJ3Qgd2FudCB0byBhZGQgcmVkdW5kYW50ICJ0ZXh0
LWRlY29yYXRpb246IG5vbmUiLgotICAgIGlmICh0ZXh0RGVjb3JhdGlvbiAmJiAhdGV4dERlY29y
YXRpb24tPmlzVmFsdWVMaXN0KCkpCi0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKLX0KLQotc3RhdGljIGludCBnZXRJZGVudGlmaWVyVmFs
dWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGludCBwcm9wZXJ0eUlEKQotewotICAgIGlm
ICghc3R5bGUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1
ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOwotICAgIGlmICghdmFs
dWUgfHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUuZ2V0KCkpLT5n
ZXRJZGVudCgpOwotfQotCi1zdGF0aWMgdm9pZCBzZXRUZXh0RGVjb3JhdGlvblByb3BlcnR5KENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgQ1NTVmFsdWVMaXN0KiBuZXdU
ZXh0RGVjb3JhdGlvbiwgaW50IHByb3BlcnR5SUQpCi17Ci0gICAgaWYgKG5ld1RleHREZWNvcmF0
aW9uLT5sZW5ndGgoKSkKLSAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5SUQsIG5l
d1RleHREZWNvcmF0aW9uLT5jc3NUZXh0KCksIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KHBy
b3BlcnR5SUQpKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gdGV4dC1kZWNvcmF0aW9uOiBub25l
IGlzIHJlZHVuZGFudCBzaW5jZSBpdCBkb2VzIG5vdCByZW1vdmUgYW55IHRleHQgZGVjb3JhdGlv
bnMuCi0gICAgICAgIEFTU0VSVCghc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHkocHJvcGVydHlJ
RCkpOwotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlJRCk7Ci0gICAgfQot
fQotCi1zdGF0aWMgYm9vbCBpc0NTU1ZhbHVlTGVuZ3RoKENTU1ByaW1pdGl2ZVZhbHVlKiB2YWx1
ZSkKLXsKLSAgICByZXR1cm4gdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA+PSBDU1NQcmltaXRpdmVW
YWx1ZTo6Q1NTX1BYICYmIHZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPD0gQ1NTUHJpbWl0aXZlVmFs
dWU6OkNTU19QQzsKLX0KLQotaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3VtZW50
KiBkb2N1bWVudCwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIHNob3VsZFVzZUZpeGVk
Rm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUgbW9kZSkKLXsKLSAgICBpZiAoaXND
U1NWYWx1ZUxlbmd0aCh2YWx1ZSkpIHsKLSAgICAgICAgaW50IHBpeGVsRm9udFNpemUgPSB2YWx1
ZS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7Ci0gICAgICAgIGludCBs
ZWdhY3lGb250U2l6ZSA9IENTU1N0eWxlU2VsZWN0b3I6OmxlZ2FjeUZvbnRTaXplKGRvY3VtZW50
LCBwaXhlbEZvbnRTaXplLCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7Ci0gICAgICAg
IC8vIFVzZSBsZWdhY3kgZm9udCBzaXplIG9ubHkgaWYgcGl4ZWwgdmFsdWUgbWF0Y2hlcyBleGFj
dGx5IHRvIHRoYXQgb2YgbGVnYWN5IGZvbnQgc2l6ZS4KLSAgICAgICAgaW50IGNzc1ByaW1pdGl2
ZUVxdWl2YWxlbnQgPSBsZWdhY3lGb250U2l6ZSAtIDEgKyBDU1NWYWx1ZVhTbWFsbDsKLSAgICAg
ICAgaWYgKG1vZGUgPT0gQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUgfHwgQ1NTU3R5bGVTZWxlY3Rv
cjo6Zm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50LCBjc3NQcmltaXRpdmVFcXVpdmFsZW50LCBz
aG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSkgPT0gcGl4ZWxGb250U2l6ZSkKLSAgICAgICAg
ICAgIHJldHVybiBsZWdhY3lGb250U2l6ZTsKLQotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0K
LSAgICBpZiAoQ1NTVmFsdWVYU21hbGwgPD0gdmFsdWUtPmdldElkZW50KCkgJiYgdmFsdWUtPmdl
dElkZW50KCkgPD0gQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSkKLSAgICAgICAgcmV0dXJuIHZhbHVl
LT5nZXRJZGVudCgpIC0gQ1NTVmFsdWVYU21hbGwgKyAxOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0K
LXZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RUZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIHNob3VsZFVzZUZpeGVkRm9u
dERlZmF1bHRTaXplKQotewotICAgIEFTU0VSVChzdHlsZSk7Ci0KLSAgICBpZiAoZ2V0SWRlbnRp
ZmllclZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpID09IENTU1ZhbHVlQm9sZCkg
ewotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsK
LSAgICAgICAgbV9hcHBseUJvbGQgPSB0cnVlOwotICAgIH0KLQotICAgIGludCBmb250U3R5bGUg
PSBnZXRJZGVudGlmaWVyVmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKLSAgICBp
ZiAoZm9udFN0eWxlID09IENTU1ZhbHVlSXRhbGljIHx8IGZvbnRTdHlsZSA9PSBDU1NWYWx1ZU9i
bGlxdWUpIHsKLSAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0
eWxlKTsKLSAgICAgICAgbV9hcHBseUl0YWxpYyA9IHRydWU7Ci0gICAgfQotCi0gICAgLy8gQXNz
dW1pbmcgcmVjb25jaWxlVGV4dERlY29yYXRpb25Qcm9wZXJ0aWVzIGhhcyBiZWVuIGNhbGxlZCwg
dGhlcmUgc2hvdWxkIG5vdCBiZSAtd2Via2l0LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0Ci0g
ICAgLy8gRnVydGhlcm1vcmUsIHRleHQtZGVjb3JhdGlvbjogbm9uZSBoYXMgYmVlbiB0cmltbWVk
IHNvIHRoYXQgdGV4dC1kZWNvcmF0aW9uIHByb3BlcnR5IGlzIGFsd2F5cyBhIENTU1ZhbHVlTGlz
dC4KLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3Bl
cnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbik7Ci0gICAgaWYgKHRleHREZWNv
cmF0aW9uICYmIHRleHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpKSB7Ci0gICAgICAgIERFRklO
RV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiwgdW5kZXJsaW5lLCAoQ1NT
UHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVVbmRlcmxpbmUpKSk7Ci0g
ICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiwgbGlu
ZVRocm91Z2gsIChDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUxp
bmVUaHJvdWdoKSkpOwotCi0gICAgICAgIFJlZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld1RleHREZWNv
cmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4odGV4dERlY29yYXRpb24uZ2V0KCkp
LT5jb3B5KCk7Ci0gICAgICAgIGlmIChuZXdUZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKHVuZGVy
bGluZS5nZXQoKSkpCi0gICAgICAgICAgICBtX2FwcGx5VW5kZXJsaW5lID0gdHJ1ZTsKLSAgICAg
ICAgaWYgKG5ld1RleHREZWNvcmF0aW9uLT5yZW1vdmVBbGwobGluZVRocm91Z2guZ2V0KCkpKQot
ICAgICAgICAgICAgbV9hcHBseUxpbmVUaHJvdWdoID0gdHJ1ZTsKLQotICAgICAgICAvLyBJZiB0
cmltVGV4dERlY29yYXRpb25zLCBkZWxldGUgdW5kZXJsaW5lIGFuZCBsaW5lLXRocm91Z2gKLSAg
ICAgICAgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShzdHlsZSwgbmV3VGV4dERlY29yYXRpb24u
Z2V0KCksIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24pOwotICAgIH0KLQotICAgIGludCB2ZXJ0
aWNhbEFsaWduID0gZ2V0SWRlbnRpZmllclZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0eVZlcnRpY2Fs
QWxpZ24pOwotICAgIHN3aXRjaCAodmVydGljYWxBbGlnbikgewotICAgIGNhc2UgQ1NTVmFsdWVT
dWI6Ci0gICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVZlcnRpY2FsQWxp
Z24pOwotICAgICAgICBtX2FwcGx5U3Vic2NyaXB0ID0gdHJ1ZTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgY2FzZSBDU1NWYWx1ZVN1cGVyOgotICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NT
UHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKLSAgICAgICAgbV9hcHBseVN1cGVyc2NyaXB0ID0gdHJ1
ZTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlLT5nZXRQcm9wZXJ0eUNT
U1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpKSB7Ci0gICAgICAgIG1fYXBwbHlGb250Q29sb3IgPSBD
b2xvcihnZXRSR0JBRm9udENvbG9yKHN0eWxlKSkuc2VyaWFsaXplZCgpOwotICAgICAgICBzdHls
ZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7Ci0gICAgfQotCi0gICAgbV9hcHBs
eUZvbnRGYWNlID0gc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5
KTsKLSAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKLQot
ICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZvbnRTaXplID0gc3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkpIHsKLSAgICAgICAgaWYgKCFmb250U2l6ZS0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQotICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1By
b3BlcnR5Rm9udFNpemUpOyAvLyBDYW4ndCBtYWtlIHNlbnNlIG9mIHRoZSBudW1iZXIuIFB1dCBu
byBmb250IHNpemUuCi0gICAgICAgIGVsc2UgaWYgKGludCBsZWdhY3lGb250U2l6ZSA9IGxlZ2Fj
eUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3VtZW50LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVW
YWx1ZSo+KGZvbnRTaXplLmdldCgpKSwKLSAgICAgICAgICAgICAgICBzaG91bGRVc2VGaXhlZEZv
bnREZWZhdWx0U2l6ZSwgVXNlTGVnYWN5Rm9udFNpemVPbmx5SWZQaXhlbFZhbHVlc01hdGNoKSkg
ewotICAgICAgICAgICAgbV9hcHBseUZvbnRTaXplID0gU3RyaW5nOjpudW1iZXIobGVnYWN5Rm9u
dFNpemUpOwotICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9u
dFNpemUpOwotICAgICAgICB9Ci0gICAgfQotfQotCiBzdGF0aWMgU3RyaW5nJiBzdHlsZVNwYW5D
bGFzc1N0cmluZygpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHN0eWxlU3Bh
bkNsYXNzU3RyaW5nLCAoKEFwcGxlU3R5bGVTcGFuQ2xhc3MpKSk7CkBAIC0zNTYsOTUgKzExMyw2
IEBAIFBhc3NSZWZQdHI8SFRNTEVsZW1lbnQ+IGNyZWF0ZVN0eWxlU3BhbkUKICAgICByZXR1cm4g
c3R5bGVFbGVtZW50LnJlbGVhc2UoKTsKIH0KIAotc3RhdGljIHZvaWQgZGlmZlRleHREZWNvcmF0
aW9ucyhDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGludCBwcm9wZXJ0SUQsIENT
U1ZhbHVlKiByZWZUZXh0RGVjb3JhdGlvbikKLXsKLSAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHRE
ZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUocHJvcGVydElEKTsKLSAgICBp
ZiAoIXRleHREZWNvcmF0aW9uIHx8ICF0ZXh0RGVjb3JhdGlvbi0+aXNWYWx1ZUxpc3QoKSB8fCAh
cmVmVGV4dERlY29yYXRpb24gfHwgIXJlZlRleHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICBSZWZQdHI8Q1NTVmFsdWVMaXN0PiBuZXdUZXh0RGVjb3Jh
dGlvbiA9IHN0YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHRleHREZWNvcmF0aW9uLmdldCgpKS0+
Y29weSgpOwotICAgIENTU1ZhbHVlTGlzdCogdmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbiA9IHN0
YXRpY19jYXN0PENTU1ZhbHVlTGlzdCo+KHJlZlRleHREZWNvcmF0aW9uKTsKLQotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgdmFsdWVzSW5SZWZUZXh0RGVjb3JhdGlvbi0+bGVuZ3RoKCk7IGkr
KykKLSAgICAgICAgbmV3VGV4dERlY29yYXRpb24tPnJlbW92ZUFsbCh2YWx1ZXNJblJlZlRleHRE
ZWNvcmF0aW9uLT5pdGVtKGkpKTsKLQotICAgIHNldFRleHREZWNvcmF0aW9uUHJvcGVydHkoc3R5
bGUsIG5ld1RleHREZWNvcmF0aW9uLmdldCgpLCBwcm9wZXJ0SUQpOwotfQotCi1zdGF0aWMgYm9v
bCBmb250V2VpZ2h0SXNCb2xkKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQotewotICAgIEFT
U0VSVChzdHlsZSk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBmb250V2VpZ2h0ID0gc3R5bGUtPmdl
dFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKLQotICAgIGlmICghZm9u
dFdlaWdodCkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICghZm9udFdlaWdodC0+aXNQ
cmltaXRpdmVWYWx1ZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBCZWNhdXNl
IGIgdGFnIGNhbiBvbmx5IGJvbGQgdGV4dCwgdGhlcmUgYXJlIG9ubHkgdHdvIHN0YXRlcyBpbiBw
bGFpbiBodG1sOiBib2xkIGFuZCBub3QgYm9sZC4KLSAgICAvLyBDb2xsYXBzZSBhbGwgb3RoZXIg
dmFsdWVzIHRvIGVpdGhlciBvbmUgb2YgdGhlc2UgdHdvIHN0YXRlcyBmb3IgZWRpdGluZyBwdXJw
b3Nlcy4KLSAgICBzd2l0Y2ggKHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4oZm9udFdl
aWdodC5nZXQoKSktPmdldElkZW50KCkpIHsKLSAgICAgICAgY2FzZSBDU1NWYWx1ZTEwMDoKLSAg
ICAgICAgY2FzZSBDU1NWYWx1ZTIwMDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZTMwMDoKLSAgICAg
ICAgY2FzZSBDU1NWYWx1ZTQwMDoKLSAgICAgICAgY2FzZSBDU1NWYWx1ZTUwMDoKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZU5vcm1hbDoKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Y2FzZSBDU1NWYWx1ZUJvbGQ6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWU2MDA6Ci0gICAgICAgIGNh
c2UgQ1NTVmFsdWU3MDA6Ci0gICAgICAgIGNhc2UgQ1NTVmFsdWU4MDA6Ci0gICAgICAgIGNhc2Ug
Q1NTVmFsdWU5MDA6Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgLy8gRm9yIENTU1ZhbHVlQm9sZGVyIGFuZCBDU1NWYWx1ZUxpZ2h0
ZXIKLSAgICByZXR1cm4gZmFsc2U7IC8vIE1ha2UgY29tcGlsZXIgaGFwcHkKLX0KLQotc3RhdGlj
IGludCBnZXRUZXh0QWxpZ25tZW50KENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQotewotICAg
IGludCB0ZXh0QWxpZ24gPSBnZXRJZGVudGlmaWVyVmFsdWUoc3R5bGUsIENTU1Byb3BlcnR5VGV4
dEFsaWduKTsKLSAgICBzd2l0Y2ggKHRleHRBbGlnbikgewotICAgIGNhc2UgQ1NTVmFsdWVDZW50
ZXI6Ci0gICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENlbnRlcjoKLSAgICAgICAgcmV0dXJuIENTU1Zh
bHVlQ2VudGVyOwotICAgIGNhc2UgQ1NTVmFsdWVKdXN0aWZ5OgotICAgICAgICByZXR1cm4gQ1NT
VmFsdWVKdXN0aWZ5OwotICAgIGNhc2UgQ1NTVmFsdWVMZWZ0OgotICAgIGNhc2UgQ1NTVmFsdWVX
ZWJraXRMZWZ0OgotICAgICAgICByZXR1cm4gQ1NTVmFsdWVMZWZ0OwotICAgIGNhc2UgQ1NTVmFs
dWVSaWdodDoKLSAgICBjYXNlIENTU1ZhbHVlV2Via2l0UmlnaHQ6Ci0gICAgICAgIHJldHVybiBD
U1NWYWx1ZVJpZ2h0OwotICAgIH0KLSAgICByZXR1cm4gQ1NTVmFsdWVJbnZhbGlkOwotfQotCi1S
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdldFByb3BlcnRpZXNOb3RJbihDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9wZXJ0aWVzLCBDU1NTdHlsZURl
Y2xhcmF0aW9uKiBiYXNlU3R5bGUpCi17Ci0gICAgQVNTRVJUKHN0eWxlV2l0aFJlZHVuZGFudFBy
b3BlcnRpZXMpOwotICAgIEFTU0VSVChiYXNlU3R5bGUpOwotICAgIFJlZlB0cjxDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbj4gcmVzdWx0ID0gc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcy0+
Y29weSgpOwotICAgIGJhc2VTdHlsZS0+ZGlmZihyZXN1bHQuZ2V0KCkpOwotCi0gICAgUmVmUHRy
PENTU1ZhbHVlPiBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZlY3QgPSBiYXNlU3R5bGUtPmdldFBy
b3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCk7
Ci0gICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1bHQuZ2V0KCksIENTU1Byb3BlcnR5VGV4dERl
Y29yYXRpb24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7Ci0gICAgZGlmZlRl
eHREZWNvcmF0aW9ucyhyZXN1bHQuZ2V0KCksIENTU1Byb3BlcnR5V2Via2l0VGV4dERlY29yYXRp
b25zSW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVjdC5nZXQoKSk7Ci0KLSAgICBp
ZiAoZm9udFdlaWdodElzQm9sZChyZXN1bHQuZ2V0KCkpID09IGZvbnRXZWlnaHRJc0JvbGQoYmFz
ZVN0eWxlKSkKLSAgICAgICAgcmVzdWx0LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eUZvbnRX
ZWlnaHQpOwotCi0gICAgaWYgKGdldFJHQkFGb250Q29sb3IocmVzdWx0LmdldCgpKSA9PSBnZXRS
R0JBRm9udENvbG9yKGJhc2VTdHlsZSkpCi0gICAgICAgIHJlc3VsdC0+cmVtb3ZlUHJvcGVydHko
Q1NTUHJvcGVydHlDb2xvcik7Ci0KLSAgICBpZiAoZ2V0VGV4dEFsaWdubWVudChyZXN1bHQuZ2V0
KCkpID09IGdldFRleHRBbGlnbm1lbnQoYmFzZVN0eWxlKSkKLSAgICAgICAgcmVzdWx0LT5yZW1v
dmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbik7ICAgICAgICAKLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEVkaXRpbmdTdHlsZSogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbiwgRVByb3BlcnR5TGV2ZWwgcHJvcGVydHlMZXZlbCkKICAgICA6IENvbXBvc2l0ZUVk
aXRDb21tYW5kKGRvY3VtZW50KQogICAgICwgbV9zdHlsZShzdHlsZS0+Y29weSgpKQpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuaAkocmV2aXNpb24gODA1
ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDcgKzM0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBD
U1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIEVkaXRpbmdTdHlsZTsKLWNsYXNzIEhUTUxFbGVtZW50
OwogY2xhc3MgU3R5bGVDaGFuZ2U7CiAKIGVudW0gU2hvdWxkSW5jbHVkZVR5cGluZ1N0eWxlIHsK
QEAgLTEzMCwxMSArMTI5LDggQEAgcHJpdmF0ZToKICAgICBJc0lubGluZUVsZW1lbnRUb1JlbW92
ZUZ1bmN0aW9uIG1faXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbjsKIH07CiAKLWVudW0g
TGVnYWN5Rm9udFNpemVNb2RlIHsgQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUsIFVzZUxlZ2FjeUZv
bnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRjaCB9OwotaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNT
U1ZhbHVlKERvY3VtZW50KiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29sIHNob3VsZFVzZUZpeGVk
Rm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUpOwogYm9vbCBpc1N0eWxlU3Bhbihj
b25zdCBOb2RlKik7CiBQYXNzUmVmUHRyPEhUTUxFbGVtZW50PiBjcmVhdGVTdHlsZVNwYW5FbGVt
ZW50KERvY3VtZW50Kik7Ci1SZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdldFBy
b3BlcnRpZXNOb3RJbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVdpdGhSZWR1bmRhbnRQcm9w
ZXJ0aWVzLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBiYXNlU3R5bGUpOwogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJ
KHJldmlzaW9uIDgwNTgxKQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAjaW5jbHVkZSAiQXBwbHlTdHls
ZUNvbW1hbmQuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNp
bmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVMaXN0LmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
QEAgLTg3LDYgKzg5LDggQEAgc3RhdGljIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YQogICAgIHJldHVybiBjb3B5RWRpdGluZ1Byb3BlcnRpZXMoc3R5bGUuZ2V0KCkpOwogfQogCitz
dGF0aWMgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBnZXRQcm9wZXJ0aWVzTm90
SW4oQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVXaXRoUmVkdW5kYW50UHJvcGVydGllcywgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogYmFzZVN0eWxlKTsKKwogY2xhc3MgSFRNTEVsZW1lbnRFcXVpdmFs
ZW50IHsKIHB1YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxIVE1MRWxlbWVudEVxdWl2YWxl
bnQ+IGNyZWF0ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGludCBwcmltaXRpdmVWYWx1ZSwg
Y29uc3QgUXVhbGlmaWVkTmFtZSYgdGFnTmFtZSkKQEAgLTc3Myw0ICs3NzcsMjY5IEBAIHZvaWQg
RWRpdGluZ1N0eWxlOjptZXJnZVN0eWxlKENTU011dGFibGUKICAgICB9CiB9CiAKK3N0YXRpYyB2
b2lkIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJvcGVydGllcyhDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogc3R5bGUpCit7ICAgIAorICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRp
b25zSW5FZmZlY3QgPSBzdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVdlYmtp
dFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRleHREZWNv
cmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0RGVjb3Jh
dGlvbik7CisgICAgLy8gV2Ugc2hvdWxkbid0IGhhdmUgYm90aCB0ZXh0LWRlY29yYXRpb24gYW5k
IC13ZWJraXQtdGV4dC1kZWNvcmF0aW9ucy1pbi1lZmZlY3QgYmVjYXVzZSB0aGF0IHdvdWxkbid0
IG1ha2Ugc2Vuc2UuCisgICAgQVNTRVJUKCF0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCB8fCAhdGV4
dERlY29yYXRpb24pOworICAgIGlmICh0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdCkgeworICAgICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvbiwgdGV4dERlY29y
YXRpb25zSW5FZmZlY3QtPmNzc1RleHQoKSk7CisgICAgICAgIHN0eWxlLT5yZW1vdmVQcm9wZXJ0
eShDU1NQcm9wZXJ0eVdlYmtpdFRleHREZWNvcmF0aW9uc0luRWZmZWN0KTsKKyAgICAgICAgdGV4
dERlY29yYXRpb24gPSB0ZXh0RGVjb3JhdGlvbnNJbkVmZmVjdDsKKyAgICB9CisgICAgCisgICAg
Ly8gSWYgdGV4dC1kZWNvcmF0aW9uIGlzIHNldCB0byAibm9uZSIsIHJlbW92ZSB0aGUgcHJvcGVy
dHkgYmVjYXVzZSB3ZSBkb24ndCB3YW50IHRvIGFkZCByZWR1bmRhbnQgInRleHQtZGVjb3JhdGlv
bjogbm9uZSIuCisgICAgaWYgKHRleHREZWNvcmF0aW9uICYmICF0ZXh0RGVjb3JhdGlvbi0+aXNW
YWx1ZUxpc3QoKSkKKyAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5VGV4
dERlY29yYXRpb24pOworfQorCitTdHlsZUNoYW5nZTo6U3R5bGVDaGFuZ2UoRWRpdGluZ1N0eWxl
KiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHBvc2l0aW9uKQorICAgIDogbV9hcHBseUJvbGQoZmFs
c2UpCisgICAgLCBtX2FwcGx5SXRhbGljKGZhbHNlKQorICAgICwgbV9hcHBseVVuZGVybGluZShm
YWxzZSkKKyAgICAsIG1fYXBwbHlMaW5lVGhyb3VnaChmYWxzZSkKKyAgICAsIG1fYXBwbHlTdWJz
Y3JpcHQoZmFsc2UpCisgICAgLCBtX2FwcGx5U3VwZXJzY3JpcHQoZmFsc2UpCit7CisgICAgRG9j
dW1lbnQqIGRvY3VtZW50ID0gcG9zaXRpb24uYW5jaG9yTm9kZSgpID8gcG9zaXRpb24uYW5jaG9y
Tm9kZSgpLT5kb2N1bWVudCgpIDogMDsKKyAgICBpZiAoIXN0eWxlIHx8ICFzdHlsZS0+c3R5bGUo
KSB8fCAhZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBSZWZQdHI8Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uPiBjb21wdXRlZFN0eWxlID0g
cG9zaXRpb24uY29tcHV0ZWRTdHlsZSgpOworICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gbXV0YWJsZVN0eWxlID0gZ2V0UHJvcGVydGllc05vdEluKHN0eWxlLT5zdHlsZSgp
LCBjb21wdXRlZFN0eWxlLmdldCgpKTsKKworICAgIHJlY29uY2lsZVRleHREZWNvcmF0aW9uUHJv
cGVydGllcyhtdXRhYmxlU3R5bGUuZ2V0KCkpOworICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkt
PmVkaXRvcigpLT5zaG91bGRTdHlsZVdpdGhDU1MoKSkKKyAgICAgICAgZXh0cmFjdFRleHRTdHls
ZXMoZG9jdW1lbnQsIG11dGFibGVTdHlsZS5nZXQoKSwgY29tcHV0ZWRTdHlsZS0+dXNlRml4ZWRG
b250RGVmYXVsdFNpemUoKSk7CisKKyAgICAvLyBDaGFuZ2luZyB0aGUgd2hpdGVzcGFjZSBzdHls
ZSBpbiBhIHRhYiBzcGFuIHdvdWxkIGNvbGxhcHNlIHRoZSB0YWIgaW50byBhIHNwYWNlLgorICAg
IGlmIChpc1RhYlNwYW5UZXh0Tm9kZShwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSB8fCBpc1Rh
YlNwYW5Ob2RlKChwb3NpdGlvbi5kZXByZWNhdGVkTm9kZSgpKSkpCisgICAgICAgIG11dGFibGVT
dHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlXaGl0ZVNwYWNlKTsKKworICAgIC8vIElm
IHVuaWNvZGUtYmlkaSBpcyBwcmVzZW50IGluIG11dGFibGVTdHlsZSBhbmQgZGlyZWN0aW9uIGlz
IG5vdCwgdGhlbiBhZGQgZGlyZWN0aW9uIHRvIG11dGFibGVTdHlsZS4KKyAgICAvLyBGSVhNRTog
U2hvdWxkbid0IHRoaXMgYmUgZG9uZSBpbiBnZXRQcm9wZXJ0aWVzTm90SW4/CisgICAgaWYgKG11
dGFibGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eVVuaWNvZGVCaWRpKSAm
JiAhc3R5bGUtPnN0eWxlKCktPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlEaXJlY3Rp
b24pKQorICAgICAgICBtdXRhYmxlU3R5bGUtPnNldFByb3BlcnR5KENTU1Byb3BlcnR5RGlyZWN0
aW9uLCBzdHlsZS0+c3R5bGUoKS0+Z2V0UHJvcGVydHlWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlv
bikpOworCisgICAgLy8gU2F2ZSB0aGUgcmVzdWx0IGZvciBsYXRlcgorICAgIG1fY3NzU3R5bGUg
PSBtdXRhYmxlU3R5bGUtPmNzc1RleHQoKS5zdHJpcFdoaXRlU3BhY2UoKTsKK30KKworc3RhdGlj
IHZvaWQgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIGNvbnN0IENTU1ZhbHVlTGlzdCogbmV3VGV4dERlY29yYXRpb24sIGludCBwcm9w
ZXJ0eUlEKQoreworICAgIGlmIChuZXdUZXh0RGVjb3JhdGlvbi0+bGVuZ3RoKCkpCisgICAgICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCBuZXdUZXh0RGVjb3JhdGlvbi0+Y3NzVGV4
dCgpLCBzdHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eUlEKSk7CisgICAgZWxzZSB7
CisgICAgICAgIC8vIHRleHQtZGVjb3JhdGlvbjogbm9uZSBpcyByZWR1bmRhbnQgc2luY2UgaXQg
ZG9lcyBub3QgcmVtb3ZlIGFueSB0ZXh0IGRlY29yYXRpb25zLgorICAgICAgICBBU1NFUlQoIXN0
eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KHByb3BlcnR5SUQpKTsKKyAgICAgICAgc3R5bGUtPnJl
bW92ZVByb3BlcnR5KHByb3BlcnR5SUQpOworICAgIH0KK30KKworc3RhdGljIFJHQkEzMiBnZXRS
R0JBRm9udENvbG9yKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQoreworICAgIFJlZlB0cjxD
U1NWYWx1ZT4gY29sb3JWYWx1ZSA9IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3Bl
cnR5Q29sb3IpOworICAgIGlmICghY29sb3JWYWx1ZSkKKyAgICAgICAgcmV0dXJuIENvbG9yOjp0
cmFuc3BhcmVudDsKKworICAgIEFTU0VSVChjb2xvclZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
OworCisgICAgQ1NTUHJpbWl0aXZlVmFsdWUqIHByaW1pdGl2ZUNvbG9yID0gc3RhdGljX2Nhc3Q8
Q1NTUHJpbWl0aXZlVmFsdWUqPihjb2xvclZhbHVlLmdldCgpKTsKKyAgICBpZiAocHJpbWl0aXZl
Q29sb3ItPnByaW1pdGl2ZVR5cGUoKSA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX1JHQkNPTE9S
KQorICAgICAgICByZXR1cm4gcHJpbWl0aXZlQ29sb3ItPmdldFJHQkEzMlZhbHVlKCk7CisKKyAg
ICAvLyBUYWtlIGNhcmUgb2YgbmFtZWQgY29sb3Igc3VjaCBhcyBncmVlbiBhbmQgYmxhY2sKKyAg
ICAvLyBUaGlzIGNvZGUgc2hvdWxkIGJlIHJlbW92ZWQgYWZ0ZXIgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTI4MjgyIGlzIGZpeGVkLgorICAgIFJHQkEzMiByZ2JhID0g
MDsKKyAgICBDU1NQYXJzZXI6OnBhcnNlQ29sb3IocmdiYSwgY29sb3JWYWx1ZS0+Y3NzVGV4dCgp
KTsKKyAgICByZXR1cm4gcmdiYTsKK30KKyAgICAKK3ZvaWQgU3R5bGVDaGFuZ2U6OmV4dHJhY3RU
ZXh0U3R5bGVzKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IHN0eWxlLCBib29sIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKQoreworICAgIEFTU0VS
VChzdHlsZSk7CisKKyAgICBpZiAoZ2V0SWRlbnRpZmllclZhbHVlKHN0eWxlLCBDU1NQcm9wZXJ0
eUZvbnRXZWlnaHQpID09IENTU1ZhbHVlQm9sZCkgeworICAgICAgICBzdHlsZS0+cmVtb3ZlUHJv
cGVydHkoQ1NTUHJvcGVydHlGb250V2VpZ2h0KTsKKyAgICAgICAgbV9hcHBseUJvbGQgPSB0cnVl
OworICAgIH0KKworICAgIGludCBmb250U3R5bGUgPSBnZXRJZGVudGlmaWVyVmFsdWUoc3R5bGUs
IENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKKyAgICBpZiAoZm9udFN0eWxlID09IENTU1ZhbHVlSXRh
bGljIHx8IGZvbnRTdHlsZSA9PSBDU1NWYWx1ZU9ibGlxdWUpIHsKKyAgICAgICAgc3R5bGUtPnJl
bW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFN0eWxlKTsKKyAgICAgICAgbV9hcHBseUl0YWxp
YyA9IHRydWU7CisgICAgfQorCisgICAgLy8gQXNzdW1pbmcgcmVjb25jaWxlVGV4dERlY29yYXRp
b25Qcm9wZXJ0aWVzIGhhcyBiZWVuIGNhbGxlZCwgdGhlcmUgc2hvdWxkIG5vdCBiZSAtd2Via2l0
LXRleHQtZGVjb3JhdGlvbnMtaW4tZWZmZWN0CisgICAgLy8gRnVydGhlcm1vcmUsIHRleHQtZGVj
b3JhdGlvbjogbm9uZSBoYXMgYmVlbiB0cmltbWVkIHNvIHRoYXQgdGV4dC1kZWNvcmF0aW9uIHBy
b3BlcnR5IGlzIGFsd2F5cyBhIENTU1ZhbHVlTGlzdC4KKyAgICBSZWZQdHI8Q1NTVmFsdWU+IHRl
eHREZWNvcmF0aW9uID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlUZXh0
RGVjb3JhdGlvbik7CisgICAgaWYgKHRleHREZWNvcmF0aW9uICYmIHRleHREZWNvcmF0aW9uLT5p
c1ZhbHVlTGlzdCgpKSB7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwoUmVmUHRyPENTU1By
aW1pdGl2ZVZhbHVlPiwgdW5kZXJsaW5lLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50
aWZpZXIoQ1NTVmFsdWVVbmRlcmxpbmUpKSk7CisgICAgICAgIERFRklORV9TVEFUSUNfTE9DQUwo
UmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiwgbGluZVRocm91Z2gsIChDU1NQcmltaXRpdmVWYWx1
ZTo6Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZUxpbmVUaHJvdWdoKSkpOworCisgICAgICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld1RleHREZWNvcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVmFs
dWVMaXN0Kj4odGV4dERlY29yYXRpb24uZ2V0KCkpLT5jb3B5KCk7CisgICAgICAgIGlmIChuZXdU
ZXh0RGVjb3JhdGlvbi0+cmVtb3ZlQWxsKHVuZGVybGluZS5nZXQoKSkpCisgICAgICAgICAgICBt
X2FwcGx5VW5kZXJsaW5lID0gdHJ1ZTsKKyAgICAgICAgaWYgKG5ld1RleHREZWNvcmF0aW9uLT5y
ZW1vdmVBbGwobGluZVRocm91Z2guZ2V0KCkpKQorICAgICAgICAgICAgbV9hcHBseUxpbmVUaHJv
dWdoID0gdHJ1ZTsKKworICAgICAgICAvLyBJZiB0cmltVGV4dERlY29yYXRpb25zLCBkZWxldGUg
dW5kZXJsaW5lIGFuZCBsaW5lLXRocm91Z2gKKyAgICAgICAgc2V0VGV4dERlY29yYXRpb25Qcm9w
ZXJ0eShzdHlsZSwgbmV3VGV4dERlY29yYXRpb24uZ2V0KCksIENTU1Byb3BlcnR5VGV4dERlY29y
YXRpb24pOworICAgIH0KKworICAgIGludCB2ZXJ0aWNhbEFsaWduID0gZ2V0SWRlbnRpZmllclZh
bHVlKHN0eWxlLCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOworICAgIHN3aXRjaCAodmVydGlj
YWxBbGlnbikgeworICAgIGNhc2UgQ1NTVmFsdWVTdWI6CisgICAgICAgIHN0eWxlLT5yZW1vdmVQ
cm9wZXJ0eShDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOworICAgICAgICBtX2FwcGx5U3Vic2Ny
aXB0ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDU1NWYWx1ZVN1cGVyOgorICAg
ICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKKyAg
ICAgICAgbV9hcHBseVN1cGVyc2NyaXB0ID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
CisgICAgaWYgKHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKENTU1Byb3BlcnR5Q29sb3IpKSB7
CisgICAgICAgIG1fYXBwbHlGb250Q29sb3IgPSBDb2xvcihnZXRSR0JBRm9udENvbG9yKHN0eWxl
KSkuc2VyaWFsaXplZCgpOworICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVy
dHlDb2xvcik7CisgICAgfQorCisgICAgbV9hcHBseUZvbnRGYWNlID0gc3R5bGUtPmdldFByb3Bl
cnR5VmFsdWUoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKKyAgICBzdHlsZS0+cmVtb3ZlUHJvcGVy
dHkoQ1NTUHJvcGVydHlGb250RmFtaWx5KTsKKworICAgIGlmIChSZWZQdHI8Q1NTVmFsdWU+IGZv
bnRTaXplID0gc3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlGb250U2l6ZSkp
IHsKKyAgICAgICAgaWYgKCFmb250U2l6ZS0+aXNQcmltaXRpdmVWYWx1ZSgpKQorICAgICAgICAg
ICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KENTU1Byb3BlcnR5Rm9udFNpemUpOyAvLyBDYW4ndCBt
YWtlIHNlbnNlIG9mIHRoZSBudW1iZXIuIFB1dCBubyBmb250IHNpemUuCisgICAgICAgIGVsc2Ug
aWYgKGludCBsZWdhY3lGb250U2l6ZSA9IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVlKGRvY3Vt
ZW50LCBzdGF0aWNfY2FzdDxDU1NQcmltaXRpdmVWYWx1ZSo+KGZvbnRTaXplLmdldCgpKSwKKyAg
ICAgICAgICAgIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBVc2VMZWdhY3lGb250U2l6
ZU9ubHlJZlBpeGVsVmFsdWVzTWF0Y2gpKSB7CisgICAgICAgICAgICBtX2FwcGx5Rm9udFNpemUg
PSBTdHJpbmc6Om51bWJlcihsZWdhY3lGb250U2l6ZSk7CisgICAgICAgICAgICBzdHlsZS0+cmVt
b3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlGb250U2l6ZSk7CisgICAgICAgIH0KKyAgICB9Cit9Cisg
ICAgCitzdGF0aWMgdm9pZCBkaWZmVGV4dERlY29yYXRpb25zKENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgaW50IHByb3BlcnRJRCwgQ1NTVmFsdWUqIHJlZlRleHREZWNvcmF0aW9u
KQoreworICAgIFJlZlB0cjxDU1NWYWx1ZT4gdGV4dERlY29yYXRpb24gPSBzdHlsZS0+Z2V0UHJv
cGVydHlDU1NWYWx1ZShwcm9wZXJ0SUQpOworICAgIGlmICghdGV4dERlY29yYXRpb24gfHwgIXRl
eHREZWNvcmF0aW9uLT5pc1ZhbHVlTGlzdCgpIHx8ICFyZWZUZXh0RGVjb3JhdGlvbiB8fCAhcmVm
VGV4dERlY29yYXRpb24tPmlzVmFsdWVMaXN0KCkpCisgICAgICAgIHJldHVybjsKKworICAgIFJl
ZlB0cjxDU1NWYWx1ZUxpc3Q+IG5ld1RleHREZWNvcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVmFs
dWVMaXN0Kj4odGV4dERlY29yYXRpb24uZ2V0KCkpLT5jb3B5KCk7CisgICAgQ1NTVmFsdWVMaXN0
KiB2YWx1ZXNJblJlZlRleHREZWNvcmF0aW9uID0gc3RhdGljX2Nhc3Q8Q1NTVmFsdWVMaXN0Kj4o
cmVmVGV4dERlY29yYXRpb24pOworCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB2YWx1ZXNJ
blJlZlRleHREZWNvcmF0aW9uLT5sZW5ndGgoKTsgaSsrKQorICAgICAgICBuZXdUZXh0RGVjb3Jh
dGlvbi0+cmVtb3ZlQWxsKHZhbHVlc0luUmVmVGV4dERlY29yYXRpb24tPml0ZW0oaSkpOworCisg
ICAgc2V0VGV4dERlY29yYXRpb25Qcm9wZXJ0eShzdHlsZSwgbmV3VGV4dERlY29yYXRpb24uZ2V0
KCksIHByb3BlcnRJRCk7Cit9CisKK3N0YXRpYyBib29sIGZvbnRXZWlnaHRJc0JvbGQoQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgQVNTRVJUKHN0eWxlKTsKKyAgICBpbnQgZm9u
dFdlaWdodCA9IGdldElkZW50aWZpZXJWYWx1ZShzdHlsZSwgQ1NTUHJvcGVydHlGb250V2VpZ2h0
KTsKKworICAgIGlmICghZm9udFdlaWdodCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
Ly8gQmVjYXVzZSBiIHRhZyBjYW4gb25seSBib2xkIHRleHQsIHRoZXJlIGFyZSBvbmx5IHR3byBz
dGF0ZXMgaW4gcGxhaW4gaHRtbDogYm9sZCBhbmQgbm90IGJvbGQuCisgICAgLy8gQ29sbGFwc2Ug
YWxsIG90aGVyIHZhbHVlcyB0byBlaXRoZXIgb25lIG9mIHRoZXNlIHR3byBzdGF0ZXMgZm9yIGVk
aXRpbmcgcHVycG9zZXMuCisgICAgc3dpdGNoIChmb250V2VpZ2h0KSB7CisgICAgY2FzZSBDU1NW
YWx1ZTEwMDoKKyAgICBjYXNlIENTU1ZhbHVlMjAwOgorICAgIGNhc2UgQ1NTVmFsdWUzMDA6Cisg
ICAgY2FzZSBDU1NWYWx1ZTQwMDoKKyAgICBjYXNlIENTU1ZhbHVlNTAwOgorICAgIGNhc2UgQ1NT
VmFsdWVOb3JtYWw6CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBjYXNlIENTU1ZhbHVlQm9s
ZDoKKyAgICBjYXNlIENTU1ZhbHVlNjAwOgorICAgIGNhc2UgQ1NTVmFsdWU3MDA6CisgICAgY2Fz
ZSBDU1NWYWx1ZTgwMDoKKyAgICBjYXNlIENTU1ZhbHVlOTAwOgorICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsgLy8gRm9yIENTU1ZhbHVlQm9s
ZGVyIGFuZCBDU1NWYWx1ZUxpZ2h0ZXIKKyAgICByZXR1cm4gZmFsc2U7IC8vIE1ha2UgY29tcGls
ZXIgaGFwcHkKK30KKworc3RhdGljIGludCBnZXRUZXh0QWxpZ25tZW50KENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKQoreworICAgIGludCB0ZXh0QWxpZ24gPSBnZXRJZGVudGlmaWVyVmFsdWUo
c3R5bGUsIENTU1Byb3BlcnR5VGV4dEFsaWduKTsKKyAgICBzd2l0Y2ggKHRleHRBbGlnbikgewor
ICAgIGNhc2UgQ1NTVmFsdWVDZW50ZXI6CisgICAgY2FzZSBDU1NWYWx1ZVdlYmtpdENlbnRlcjoK
KyAgICAgICAgcmV0dXJuIENTU1ZhbHVlQ2VudGVyOworICAgIGNhc2UgQ1NTVmFsdWVKdXN0aWZ5
OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVKdXN0aWZ5OworICAgIGNhc2UgQ1NTVmFsdWVMZWZ0
OgorICAgIGNhc2UgQ1NTVmFsdWVXZWJraXRMZWZ0OgorICAgICAgICByZXR1cm4gQ1NTVmFsdWVM
ZWZ0OworICAgIGNhc2UgQ1NTVmFsdWVSaWdodDoKKyAgICBjYXNlIENTU1ZhbHVlV2Via2l0Umln
aHQ6CisgICAgICAgIHJldHVybiBDU1NWYWx1ZVJpZ2h0OworICAgIH0KKyAgICByZXR1cm4gQ1NT
VmFsdWVJbnZhbGlkOworfQorCitSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGdl
dFByb3BlcnRpZXNOb3RJbihDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZVdpdGhSZWR1bmRhbnRQ
cm9wZXJ0aWVzLCBDU1NTdHlsZURlY2xhcmF0aW9uKiBiYXNlU3R5bGUpCit7CisgICAgQVNTRVJU
KHN0eWxlV2l0aFJlZHVuZGFudFByb3BlcnRpZXMpOworICAgIEFTU0VSVChiYXNlU3R5bGUpOwor
ICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gcmVzdWx0ID0gc3R5bGVXaXRo
UmVkdW5kYW50UHJvcGVydGllcy0+Y29weSgpOworICAgIGJhc2VTdHlsZS0+ZGlmZihyZXN1bHQu
Z2V0KCkpOworCisgICAgUmVmUHRyPENTU1ZhbHVlPiBiYXNlVGV4dERlY29yYXRpb25zSW5FZmZl
Y3QgPSBiYXNlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RGVjb3JhdGlvbnNJbkVmZmVjdCk7CisgICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1bHQuZ2V0
KCksIENTU1Byb3BlcnR5VGV4dERlY29yYXRpb24sIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVmZmVj
dC5nZXQoKSk7CisgICAgZGlmZlRleHREZWNvcmF0aW9ucyhyZXN1bHQuZ2V0KCksIENTU1Byb3Bl
cnR5V2Via2l0VGV4dERlY29yYXRpb25zSW5FZmZlY3QsIGJhc2VUZXh0RGVjb3JhdGlvbnNJbkVm
ZmVjdC5nZXQoKSk7CisKKyAgICBpZiAoZm9udFdlaWdodElzQm9sZChyZXN1bHQuZ2V0KCkpID09
IGZvbnRXZWlnaHRJc0JvbGQoYmFzZVN0eWxlKSkKKyAgICAgICAgcmVzdWx0LT5yZW1vdmVQcm9w
ZXJ0eShDU1NQcm9wZXJ0eUZvbnRXZWlnaHQpOworCisgICAgaWYgKGdldFJHQkFGb250Q29sb3Io
cmVzdWx0LmdldCgpKSA9PSBnZXRSR0JBRm9udENvbG9yKGJhc2VTdHlsZSkpCisgICAgICAgIHJl
c3VsdC0+cmVtb3ZlUHJvcGVydHkoQ1NTUHJvcGVydHlDb2xvcik7CisKKyAgICBpZiAoZ2V0VGV4
dEFsaWdubWVudChyZXN1bHQuZ2V0KCkpID09IGdldFRleHRBbGlnbm1lbnQoYmFzZVN0eWxlKSkK
KyAgICAgICAgcmVzdWx0LT5yZW1vdmVQcm9wZXJ0eShDU1NQcm9wZXJ0eVRleHRBbGlnbik7ICAg
ICAgICAKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCBnZXRJZGVudGlmaWVyVmFsdWUo
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGludCBwcm9wZXJ0eUlEKQoreworICAgIGlmICgh
c3R5bGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgUmVmUHRyPENTU1ZhbHVlPiB2YWx1ZSA9
IHN0eWxlLT5nZXRQcm9wZXJ0eUNTU1ZhbHVlKHByb3BlcnR5SUQpOworICAgIGlmICghdmFsdWUg
fHwgIXZhbHVlLT5pc1ByaW1pdGl2ZVZhbHVlKCkpCisgICAgICAgIHJldHVybiAwOworCisgICAg
cmV0dXJuIHN0YXRpY19jYXN0PENTU1ByaW1pdGl2ZVZhbHVlKj4odmFsdWUuZ2V0KCkpLT5nZXRJ
ZGVudCgpOworfQorCitzdGF0aWMgYm9vbCBpc0NTU1ZhbHVlTGVuZ3RoKENTU1ByaW1pdGl2ZVZh
bHVlKiB2YWx1ZSkKK3sKKyAgICByZXR1cm4gdmFsdWUtPnByaW1pdGl2ZVR5cGUoKSA+PSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Q1NTX1BYICYmIHZhbHVlLT5wcmltaXRpdmVUeXBlKCkgPD0gQ1NTUHJp
bWl0aXZlVmFsdWU6OkNTU19QQzsKK30KKworaW50IGxlZ2FjeUZvbnRTaXplRnJvbUNTU1ZhbHVl
KERvY3VtZW50KiBkb2N1bWVudCwgQ1NTUHJpbWl0aXZlVmFsdWUqIHZhbHVlLCBib29sIHNob3Vs
ZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUgbW9kZSkKK3sKKyAg
ICBpZiAoaXNDU1NWYWx1ZUxlbmd0aCh2YWx1ZSkpIHsKKyAgICAgICAgaW50IHBpeGVsRm9udFNp
emUgPSB2YWx1ZS0+Z2V0SW50VmFsdWUoQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19QWCk7CisgICAg
ICAgIGludCBsZWdhY3lGb250U2l6ZSA9IENTU1N0eWxlU2VsZWN0b3I6OmxlZ2FjeUZvbnRTaXpl
KGRvY3VtZW50LCBwaXhlbEZvbnRTaXplLCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSk7
CisgICAgICAgIC8vIFVzZSBsZWdhY3kgZm9udCBzaXplIG9ubHkgaWYgcGl4ZWwgdmFsdWUgbWF0
Y2hlcyBleGFjdGx5IHRvIHRoYXQgb2YgbGVnYWN5IGZvbnQgc2l6ZS4KKyAgICAgICAgaW50IGNz
c1ByaW1pdGl2ZUVxdWl2YWxlbnQgPSBsZWdhY3lGb250U2l6ZSAtIDEgKyBDU1NWYWx1ZVhTbWFs
bDsKKyAgICAgICAgaWYgKG1vZGUgPT0gQWx3YXlzVXNlTGVnYWN5Rm9udFNpemUgfHwgQ1NTU3R5
bGVTZWxlY3Rvcjo6Zm9udFNpemVGb3JLZXl3b3JkKGRvY3VtZW50LCBjc3NQcmltaXRpdmVFcXVp
dmFsZW50LCBzaG91bGRVc2VGaXhlZEZvbnREZWZhdWx0U2l6ZSkgPT0gcGl4ZWxGb250U2l6ZSkK
KyAgICAgICAgICAgIHJldHVybiBsZWdhY3lGb250U2l6ZTsKKworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBpZiAoQ1NTVmFsdWVYU21hbGwgPD0gdmFsdWUtPmdldElkZW50KCkgJiYg
dmFsdWUtPmdldElkZW50KCkgPD0gQ1NTVmFsdWVXZWJraXRYeHhMYXJnZSkKKyAgICAgICAgcmV0
dXJuIHZhbHVlLT5nZXRJZGVudCgpIC0gQ1NTVmFsdWVYU21hbGwgKyAxOworCisgICAgcmV0dXJu
IDA7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2
aXNpb24gODA1ODEpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjZGVmaW5lIEVkaXRpbmdTdHlsZV9oCiAK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcu
aCIKICNpbmNsdWRlICJXcml0aW5nRGlyZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0ZvcndhcmQu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgpAQCAtNDMsNiArNDQsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiBjbGFzcyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247Citj
bGFzcyBDU1NQcmltaXRpdmVWYWx1ZTsKIGNsYXNzIERvY3VtZW50OwogY2xhc3MgSFRNTEVsZW1l
bnQ7CiBjbGFzcyBOb2RlOwpAQCAtMTQ0LDYgKzE0Niw2MiBAQCBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBIVE1MQXR0cmlidXRlRXF1aXZhbGVudDsKIH07CiAKK2NsYXNzIFN0eWxlQ2hhbmdl
IHsKK3B1YmxpYzoKKyAgICBTdHlsZUNoYW5nZShFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlv
biYpOworCisgICAgU3RyaW5nIGNzc1N0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9jc3NTdHlsZTsg
fQorICAgIGJvb2wgYXBwbHlCb2xkKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseUJvbGQ7IH0KKyAg
ICBib29sIGFwcGx5SXRhbGljKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseUl0YWxpYzsgfQorICAg
IGJvb2wgYXBwbHlVbmRlcmxpbmUoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5VW5kZXJsaW5lOyB9
CisgICAgYm9vbCBhcHBseUxpbmVUaHJvdWdoKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseUxpbmVU
aHJvdWdoOyB9CisgICAgYm9vbCBhcHBseVN1YnNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fYXBw
bHlTdWJzY3JpcHQ7IH0KKyAgICBib29sIGFwcGx5U3VwZXJzY3JpcHQoKSBjb25zdCB7IHJldHVy
biBtX2FwcGx5U3VwZXJzY3JpcHQ7IH0KKyAgICBib29sIGFwcGx5Rm9udENvbG9yKCkgY29uc3Qg
eyByZXR1cm4gbV9hcHBseUZvbnRDb2xvci5sZW5ndGgoKSA+IDA7IH0KKyAgICBib29sIGFwcGx5
Rm9udEZhY2UoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5Rm9udEZhY2UubGVuZ3RoKCkgPiAwOyB9
CisgICAgYm9vbCBhcHBseUZvbnRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9hcHBseUZvbnRTaXpl
Lmxlbmd0aCgpID4gMDsgfQorCisgICAgU3RyaW5nIGZvbnRDb2xvcigpIHsgcmV0dXJuIG1fYXBw
bHlGb250Q29sb3I7IH0KKyAgICBTdHJpbmcgZm9udEZhY2UoKSB7IHJldHVybiBtX2FwcGx5Rm9u
dEZhY2U7IH0KKyAgICBTdHJpbmcgZm9udFNpemUoKSB7IHJldHVybiBtX2FwcGx5Rm9udFNpemU7
IH0KKworICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHlsZUNoYW5nZSYgb3RoZXIpCisgICAg
eworICAgICAgICByZXR1cm4gbV9jc3NTdHlsZSA9PSBvdGhlci5tX2Nzc1N0eWxlCisgICAgICAg
ICYmIG1fYXBwbHlCb2xkID09IG90aGVyLm1fYXBwbHlCb2xkCisgICAgICAgICYmIG1fYXBwbHlJ
dGFsaWMgPT0gb3RoZXIubV9hcHBseUl0YWxpYworICAgICAgICAmJiBtX2FwcGx5VW5kZXJsaW5l
ID09IG90aGVyLm1fYXBwbHlVbmRlcmxpbmUKKyAgICAgICAgJiYgbV9hcHBseUxpbmVUaHJvdWdo
ID09IG90aGVyLm1fYXBwbHlMaW5lVGhyb3VnaAorICAgICAgICAmJiBtX2FwcGx5U3Vic2NyaXB0
ID09IG90aGVyLm1fYXBwbHlTdWJzY3JpcHQKKyAgICAgICAgJiYgbV9hcHBseVN1cGVyc2NyaXB0
ID09IG90aGVyLm1fYXBwbHlTdXBlcnNjcmlwdAorICAgICAgICAmJiBtX2FwcGx5Rm9udENvbG9y
ID09IG90aGVyLm1fYXBwbHlGb250Q29sb3IKKyAgICAgICAgJiYgbV9hcHBseUZvbnRGYWNlID09
IG90aGVyLm1fYXBwbHlGb250RmFjZQorICAgICAgICAmJiBtX2FwcGx5Rm9udFNpemUgPT0gb3Ro
ZXIubV9hcHBseUZvbnRTaXplOworICAgIH0KKyAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgU3R5
bGVDaGFuZ2UmIG90aGVyKQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIp
OworICAgIH0KK3ByaXZhdGU6CisgICAgdm9pZCBleHRyYWN0VGV4dFN0eWxlcyhEb2N1bWVudCos
IENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCBzaG91bGRVc2VGaXhlZEZvbnREZWZh
dWx0U2l6ZSk7CisKKyAgICBTdHJpbmcgbV9jc3NTdHlsZTsKKyAgICBib29sIG1fYXBwbHlCb2xk
OworICAgIGJvb2wgbV9hcHBseUl0YWxpYzsKKyAgICBib29sIG1fYXBwbHlVbmRlcmxpbmU7Cisg
ICAgYm9vbCBtX2FwcGx5TGluZVRocm91Z2g7CisgICAgYm9vbCBtX2FwcGx5U3Vic2NyaXB0Owor
ICAgIGJvb2wgbV9hcHBseVN1cGVyc2NyaXB0OworICAgIFN0cmluZyBtX2FwcGx5Rm9udENvbG9y
OworICAgIFN0cmluZyBtX2FwcGx5Rm9udEZhY2U7CisgICAgU3RyaW5nIG1fYXBwbHlGb250U2l6
ZTsKK307CisKKy8vIEZJWE1FOiBSZW1vdmUgdGhlc2UgZnVuY3Rpb25zIG9yIG1ha2UgdGhlbSBu
b24tZ2xvYmFsIHRvIGRpc2NvdXJhZ2UgdXNpbmcgQ1NTU3R5bGVEZWNsYXJhdGlvbiBkaXJlY3Rs
eS4KK2ludCBnZXRJZGVudGlmaWVyVmFsdWUoQ1NTU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9w
ZXJ0eUlEKTsKK2VudW0gTGVnYWN5Rm9udFNpemVNb2RlIHsgQWx3YXlzVXNlTGVnYWN5Rm9udFNp
emUsIFVzZUxlZ2FjeUZvbnRTaXplT25seUlmUGl4ZWxWYWx1ZXNNYXRjaCB9OworaW50IGxlZ2Fj
eUZvbnRTaXplRnJvbUNTU1ZhbHVlKERvY3VtZW50KiwgQ1NTUHJpbWl0aXZlVmFsdWUqLCBib29s
IHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplLCBMZWdhY3lGb250U2l6ZU1vZGUpOworCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBFZGl0aW5nU3R5bGVfaAo=
</data>
<flag name="review"
          id="77173"
          type_id="1"
          status="+"
          setter="eric"
    />
    <flag name="commit-queue"
          id="81730"
          type_id="3"
          status="-"
          setter="commit-queue"
    />
          </attachment>
      

    </bug>

</bugzilla>