<?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>130811</bug_id>
          
          <creation_ts>2014-03-26 18:41:00 -0700</creation_ts>
          <short_desc>Convert more of HTMLConverter to C++</short_desc>
          <delta_ts>2014-03-26 20:23: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>New Bugs</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="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>994778</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-26 18:41:00 -0700</bug_when>
    <thetext>Convert more of HTMLConverter to C++</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994780</commentid>
    <comment_count>1</comment_count>
      <attachid>227907</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-26 18:42:03 -0700</bug_when>
    <thetext>Created attachment 227907
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994790</commentid>
    <comment_count>2</comment_count>
      <attachid>227907</attachid>
    <who name="Anders Carlsson">andersca</who>
    <bug_when>2014-03-26 19:11:50 -0700</bug_when>
    <thetext>Comment on attachment 227907
Patch

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

&gt; Source/WebCore/editing/cocoa/HTMLConverter.mm:1357
&gt; +    auto result = m_attributesForElements.add(&amp;coreElement, nullptr);
&gt; +    if (result.isNewEntry)
&gt; +        result.iterator-&gt;value = _computedAttributesForElement(coreElement);

I think you should do 

auto&amp; attributes = m_attributesForElements.add(&amp;coreElement, nullptr).iterator-&gt;value;
if (!attributes)
    attributes = _computedAttributesForElement(coreElement);

&gt; Source/WebCore/editing/cocoa/HTMLConverter.mm:1566
&gt; +    NSString *width = element.getAttribute(WebCore::HTMLNames::widthAttr);

Does this do the right thing for table cell elements now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994792</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-26 19:19:41 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 227907 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=227907&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/editing/cocoa/HTMLConverter.mm:1357
&gt; &gt; +    auto result = m_attributesForElements.add(&amp;coreElement, nullptr);
&gt; &gt; +    if (result.isNewEntry)
&gt; &gt; +        result.iterator-&gt;value = _computedAttributesForElement(coreElement);
&gt; 
&gt; I think you should do 
&gt; 
&gt; auto&amp; attributes = m_attributesForElements.add(&amp;coreElement, nullptr).iterator-&gt;value;
&gt; if (!attributes)
&gt;     attributes = _computedAttributesForElement(coreElement);

Will do! Though I really want to add my m_attributesForElements.add(key, [] { return computeNewValue(); }); patch one day when we can think of a good name for add() :(.

&gt; 
&gt; &gt; Source/WebCore/editing/cocoa/HTMLConverter.mm:1566
&gt; &gt; +    NSString *width = element.getAttribute(WebCore::HTMLNames::widthAttr);
&gt; 
&gt; Does this do the right thing for table cell elements now?

Yeah, [(DOMHTMLTableCellElement *)element width] just called getAttribute(WebCore::HTMLNames::widthAttr);</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>994798</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-03-26 20:23:22 -0700</bug_when>
    <thetext>Committed r166335: &lt;http://trac.webkit.org/changeset/166335&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>227907</attachid>
            <date>2014-03-26 18:42:03 -0700</date>
            <delta_ts>2014-03-26 19:11:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-130811-20140326184142.patch</filename>
            <type>text/plain</type>
            <size>35037</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2NjMzMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE0LTAzLTI2ICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQ29udmVydCBtb3JlIG9mIEhUTUxDb252
ZXJ0ZXIgdG8gQysrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xMzA4MTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIGVkaXRpbmcvY29jb2EvSFRNTENvbnZlcnRlci5tbToKKyAgICAgICAgKEhUTUxDb252
ZXJ0ZXI6OkhUTUxDb252ZXJ0ZXIpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6fkhUTUxDb252
ZXJ0ZXIpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9k
ZSk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfY29sb3JGb3JFbGVtZW50KToKKyAgICAgICAg
KEhUTUxDb252ZXJ0ZXI6Ol9jb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50KToKKyAgICAgICAg
KEhUTUxDb252ZXJ0ZXI6Ol9hdHRyaWJ1dGVzRm9yRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29u
dmVydGVyOjpfZmlsbEluQmxvY2spOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2VudGVyRWxl
bWVudCk6CisgICAgICAgIChIVE1MQ29udmVydGVyOjpfYWRkVGFibGVGb3JFbGVtZW50KToKKyAg
ICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9hZGRUYWJsZUNlbGxGb3JFbGVtZW50KToKKyAgICAgICAg
KEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxlbWVudCk6CisgICAgICAgIChIVE1MQ29udmVydGVy
OjpfZXhpdEVsZW1lbnQpOgorICAgICAgICAoSFRNTENvbnZlcnRlcjo6X2dldEZsb2F0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9lbGVtZW50SXNCbG9ja0xldmVsKTogRGVs
ZXRlZC4KKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9lbGVtZW50SGFzT3duQmFja2dyb3VuZENv
bG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEhUTUxDb252ZXJ0ZXI6Ol9jb2xvckZvck5vZGUpOiBE
ZWxldGVkLgorCiAyMDE0LTAzLTI2ICBUaW1vdGh5IEhhdGNoZXIgIDx0aW1vdGh5QGFwcGxlLmNv
bT4KIAogICAgICAgICBNb2Rlcm5pemUgdGhlIGxvb3BzIGluIEluc3BlY3RvclBhZ2VBZ2VudC5j
cHAuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hUTUxDb252ZXJ0ZXIubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9IVE1MQ29udmVydGVy
Lm1tCShyZXZpc2lvbiAxNjYzMzApCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL0hU
TUxDb252ZXJ0ZXIubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0Nyw2ICs0NDcsOCBAQCBwdWJsaWM6
CiAgICAgfQogICAgIAogcHJpdmF0ZToKKyAgICBIYXNoTWFwPFJlZlB0cjxFbGVtZW50PiwgUmV0
YWluUHRyPE5TRGljdGlvbmFyeT4+IG1fYXR0cmlidXRlc0ZvckVsZW1lbnRzOworICAgIAogICAg
IE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKl9hdHRyU3RyOwogICAgIE5TTXV0YWJsZURpY3Rp
b25hcnkgKl9kb2N1bWVudEF0dHJzOwogICAgIE5TVVJMICpfYmFzZVVSTDsKQEAgLTQ2Myw3ICs0
NjUsNiBAQCBwcml2YXRlOgogICAgIE5TTXV0YWJsZUFycmF5ICpfdGV4dFRhYmxlUm93czsKICAg
ICBOU011dGFibGVBcnJheSAqX3RleHRUYWJsZVJvd0FycmF5czsKICAgICBOU011dGFibGVBcnJh
eSAqX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnM7Ci0gICAgTlNNdXRhYmxlRGljdGlvbmFy
eSAqX2F0dHJpYnV0ZXNGb3JFbGVtZW50czsKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICpfZm9u
dENhY2hlOwogICAgIE5TTXV0YWJsZUFycmF5ICpfd3JpdGluZ0RpcmVjdGlvbkFycmF5OwogICAg
IApAQCAtNDg0LDE4ICs0ODUsMTUgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIF9sb2FkRnJv
bURPTVJhbmdlKCk7CiAKLSAgICBQbGF0Zm9ybUNvbG9yICpfY29sb3JGb3JOb2RlKERPTU5vZGUg
KiwgQ1NTUHJvcGVydHlJRCk7Ci0gICAgQk9PTCBfZ2V0RmxvYXQoQ0dGbG9hdCAqdmFsLCBET01O
b2RlICosIENTU1Byb3BlcnR5SUQpOwotCisgICAgUGxhdGZvcm1Db2xvciAqX2NvbG9yRm9yRWxl
bWVudChFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCk7CisgICAgCiAgICAgdm9pZCBfdHJhdmVyc2VO
b2RlKERPTU5vZGUgKm5vZGUsIE5TSW50ZWdlciBkZXB0aCwgQk9PTCBlbWJlZGRlZCk7CiAgICAg
dm9pZCBfdHJhdmVyc2VGb290ZXJOb2RlKERPTU5vZGUgKm5vZGUsIE5TSW50ZWdlciBkZXB0aCk7
CiAgICAgCi0gICAgTlNEaWN0aW9uYXJ5ICpfY29tcHV0ZWRBdHRyaWJ1dGVzRm9yRWxlbWVudChE
T01FbGVtZW50ICopOworICAgIE5TRGljdGlvbmFyeSAqX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVs
ZW1lbnQoRWxlbWVudCYpOwogICAgIE5TRGljdGlvbmFyeSAqX2F0dHJpYnV0ZXNGb3JFbGVtZW50
KERPTUVsZW1lbnQgKik7CiAgICAgCi0gICAgYm9vbCBfZWxlbWVudElzQmxvY2tMZXZlbChET01F
bGVtZW50ICopOwotICAgIGJvb2wgX2VsZW1lbnRIYXNPd25CYWNrZ3JvdW5kQ29sb3IoRE9NRWxl
bWVudCAqKTsKLSAgICBET01FbGVtZW50ICogX2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZShET01O
b2RlICopOworICAgIEVsZW1lbnQqIF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoTm9kZSopOwog
ICAgIAogICAgIHZvaWQgX25ld1BhcmFncmFwaEZvckVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVu
dCwgTlNTdHJpbmcgKnRhZywgQk9PTCBmbGFnLCBCT09MIHN1cHByZXNzVHJhaWxpbmdTcGFjZSk7
CiAgICAgdm9pZCBfbmV3TGluZUZvckVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCk7CkBAIC01
MDMsMTEgKzUwMSwxMSBAQCBwcml2YXRlOgogICAgIEJPT0wgX2FkZEF0dGFjaG1lbnRGb3JFbGVt
ZW50KERPTUVsZW1lbnQgKmVsZW1lbnQsIE5TVVJMICp1cmwsIEJPT0wgbmVlZHNQYXJhZ3JhcGgs
IEJPT0wgdXNlUGxhY2Vob2xkZXIpOwogICAgIHZvaWQgX2FkZFF1b3RlRm9yRWxlbWVudChET01F
bGVtZW50ICplbGVtZW50LCBCT09MIG9wZW5pbmcsIE5TSW50ZWdlciBsZXZlbCk7CiAgICAgdm9p
ZCBfYWRkVmFsdWUoTlNTdHJpbmcgKnZhbHVlLCBET01FbGVtZW50ICplbGVtZW50KTsKLSAgICB2
b2lkIF9maWxsSW5CbG9jayhOU1RleHRCbG9jayAqYmxvY2ssIERPTUVsZW1lbnQgKmVsZW1lbnQs
IFBsYXRmb3JtQ29sb3IgKmJhY2tncm91bmRDb2xvciwgQ0dGbG9hdCBleHRyYU1hcmdpbiwgQ0dG
bG9hdCBleHRyYVBhZGRpbmcsIEJPT0wgaXNUYWJsZSk7CisgICAgdm9pZCBfZmlsbEluQmxvY2so
TlNUZXh0QmxvY2sgKmJsb2NrLCBFbGVtZW50JiwgUGxhdGZvcm1Db2xvciAqYmFja2dyb3VuZENv
bG9yLCBDR0Zsb2F0IGV4dHJhTWFyZ2luLCBDR0Zsb2F0IGV4dHJhUGFkZGluZywgQk9PTCBpc1Rh
YmxlKTsKICAgICB2b2lkIF9wcm9jZXNzTWV0YUVsZW1lbnRXaXRoTmFtZShOU1N0cmluZyAqbmFt
ZSwgTlNTdHJpbmcgKmNvbnRlbnQpOwogICAgIHZvaWQgX3Byb2Nlc3NIZWFkRWxlbWVudChET01F
bGVtZW50ICplbGVtZW50KTsKICAgICBCT09MIF9lbnRlckVsZW1lbnQoRE9NRWxlbWVudCAqZWxl
bWVudCwgQk9PTCBlbWJlZGRlZCk7Ci0gICAgdm9pZCBfYWRkVGFibGVGb3JFbGVtZW50KERPTUVs
ZW1lbnQgKnRhYmxlRWxlbWVudCk7CisgICAgdm9pZCBfYWRkVGFibGVGb3JFbGVtZW50KEVsZW1l
bnQgKnRhYmxlRWxlbWVudCk7CiAgICAgdm9pZCBfYWRkVGFibGVDZWxsRm9yRWxlbWVudChET01F
bGVtZW50ICp0YWJsZUNlbGxFbGVtZW50KTsKICAgICBCT09MIF9wcm9jZXNzRWxlbWVudChET01F
bGVtZW50ICplbGVtZW50LCBOU0ludGVnZXIgZGVwdGgpOwogICAgIHZvaWQgX2FkZE1hcmtlcnNU
b0xpc3QoTlNUZXh0TGlzdCAqbGlzdCwgTlNSYW5nZSByYW5nZSk7CkBAIC01MzQsNyArNTMyLDYg
QEAgSFRNTENvbnZlcnRlcjo6SFRNTENvbnZlcnRlcihET01SYW5nZSogZAogICAgIF90ZXh0VGFi
bGVSb3dzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07CiAgICAgX3RleHRUYWJsZVJv
d0FycmF5cyA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGluaXRdOwogICAgIF90ZXh0VGFibGVS
b3dCYWNrZ3JvdW5kQ29sb3JzID0gW1tOU011dGFibGVBcnJheSBhbGxvY10gaW5pdF07Ci0gICAg
X2F0dHJpYnV0ZXNGb3JFbGVtZW50cyA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5p
dF07CiAgICAgX2ZvbnRDYWNoZSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07
CiAgICAgX3dyaXRpbmdEaXJlY3Rpb25BcnJheSA9IFtbTlNNdXRhYmxlQXJyYXkgYWxsb2NdIGlu
aXRdOwogCkBAIC01NjUsNyArNTYyLDYgQEAgSFRNTENvbnZlcnRlcjo6fkhUTUxDb252ZXJ0ZXIo
KQogICAgIFtfdGV4dFRhYmxlUm93cyByZWxlYXNlXTsKICAgICBbX3RleHRUYWJsZVJvd0FycmF5
cyByZWxlYXNlXTsKICAgICBbX3RleHRUYWJsZVJvd0JhY2tncm91bmRDb2xvcnMgcmVsZWFzZV07
Ci0gICAgW19hdHRyaWJ1dGVzRm9yRWxlbWVudHMgcmVsZWFzZV07CiAgICAgW19mb250Q2FjaGUg
cmVsZWFzZV07CiAgICAgW193cml0aW5nRGlyZWN0aW9uQXJyYXkgcmVsZWFzZV07CiB9CkBAIC05
MjksMjAgKzkyNSw2IEBAIGJvb2wgSFRNTENvbnZlcnRlckNhY2hlczo6ZmxvYXRQcm9wZXJ0eVYK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLUJPT0wgSFRNTENvbnZlcnRlcjo6X2dldEZsb2F0KENH
RmxvYXQgKnZhbCwgRE9NTm9kZSAqbm9kZSwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQotewot
ICAgIE5vZGUqIGNvcmVOb2RlID0gY29yZShub2RlKTsKLSAgICBpZiAoIWNvcmVOb2RlKQotICAg
ICAgICByZXR1cm4gTk87Ci0gICAgZmxvYXQgcmVzdWx0OwotICAgIGlmICghX2NhY2hlcy0+Zmxv
YXRQcm9wZXJ0eVZhbHVlRm9yTm9kZSgqY29yZU5vZGUsIHByb3BlcnR5SWQsIHJlc3VsdCkpCi0g
ICAgICAgIHJldHVybiBOTzsKLSAgICBpZiAodmFsKQotICAgICAgICAqdmFsID0gcmVzdWx0Owot
ICAgIHJldHVybiBZRVM7Ci19Ci0KLQogI2lmIFBMQVRGT1JNKElPUykKIHN0YXRpYyBOU1N0cmlu
ZyAqX05TRmlyc3RQYXRoRm9yRGlyZWN0b3JpZXNJbkRvbWFpbnMoTlNTZWFyY2hQYXRoRGlyZWN0
b3J5IGRpcmVjdG9yeSwgTlNTZWFyY2hQYXRoRG9tYWluTWFzayBkb21haW5NYXNrLCBCT09MIGV4
cGFuZFRpbGRlKQogewpAQCAtMTA0OSwyMyArMTAzMSwxMSBAQCBib29sIEhUTUxDb252ZXJ0ZXJD
YWNoZXM6OmVsZW1lbnRIYXNPd25CCiAgICAgcmV0dXJuIGVsZW1lbnQuaGFzVGFnTmFtZShodG1s
VGFnKSB8fCBlbGVtZW50Lmhhc1RhZ05hbWUoYm9keVRhZykgfHwgcHJvcGVydHlWYWx1ZUZvck5v
ZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlEaXNwbGF5KS5zdGFydHNXaXRoKCJ0YWJsZSIpOwogfQog
Ci1ib29sIEhUTUxDb252ZXJ0ZXI6Ol9lbGVtZW50SXNCbG9ja0xldmVsKERPTUVsZW1lbnQgKmVs
ZW1lbnQpCitFbGVtZW50KiBIVE1MQ29udmVydGVyOjpfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2Rl
KE5vZGUqIG5vZGUpCiB7Ci0gICAgcmV0dXJuIGVsZW1lbnQgJiYgX2NhY2hlcy0+aXNCbG9ja0Vs
ZW1lbnQoKmNvcmUoZWxlbWVudCkpOwotfQotCi1ib29sIEhUTUxDb252ZXJ0ZXI6Ol9lbGVtZW50
SGFzT3duQmFja2dyb3VuZENvbG9yKERPTUVsZW1lbnQgKmVsZW1lbnQpCi17Ci0gICAgcmV0dXJu
IGVsZW1lbnQgJiYgX2NhY2hlcy0+ZWxlbWVudEhhc093bkJhY2tncm91bmRDb2xvcigqY29yZShl
bGVtZW50KSk7Ci19Ci0KLURPTUVsZW1lbnQgKiBIVE1MQ29udmVydGVyOjpfYmxvY2tMZXZlbEVs
ZW1lbnRGb3JOb2RlKERPTU5vZGUgKm5vZGUpCi17Ci0gICAgRE9NRWxlbWVudCAqZWxlbWVudCA9
IChET01FbGVtZW50ICopbm9kZTsKLSAgICB3aGlsZSAoZWxlbWVudCAmJiBbZWxlbWVudCBub2Rl
VHlwZV0gIT0gRE9NX0VMRU1FTlRfTk9ERSkKLSAgICAgICAgZWxlbWVudCA9IChET01FbGVtZW50
ICopW2VsZW1lbnQgcGFyZW50Tm9kZV07Ci0gICAgaWYgKGVsZW1lbnQgJiYgIV9lbGVtZW50SXNC
bG9ja0xldmVsKGVsZW1lbnQpKQotICAgICAgICBlbGVtZW50ID0gX2Jsb2NrTGV2ZWxFbGVtZW50
Rm9yTm9kZShbZWxlbWVudCBwYXJlbnROb2RlXSk7CisgICAgRWxlbWVudCogZWxlbWVudCA9IG5v
ZGUtPnBhcmVudEVsZW1lbnQoKTsKKyAgICBpZiAoZWxlbWVudCAmJiAhX2NhY2hlcy0+aXNCbG9j
a0VsZW1lbnQoKmVsZW1lbnQpKQorICAgICAgICBlbGVtZW50ID0gX2Jsb2NrTGV2ZWxFbGVtZW50
Rm9yTm9kZShlbGVtZW50LT5wYXJlbnROb2RlKCkpOwogICAgIHJldHVybiBlbGVtZW50OwogfQog
CkBAIC0xMTI3LDEyICsxMDk3LDkgQEAgQ29sb3IgSFRNTENvbnZlcnRlckNhY2hlczo6Y29sb3JQ
cm9wZXJ0eQogICAgIHJldHVybiBDb2xvcigpOwogfQogCi1QbGF0Zm9ybUNvbG9yICpIVE1MQ29u
dmVydGVyOjpfY29sb3JGb3JOb2RlKERPTU5vZGUgKm5vZGUsIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJZCkKK1BsYXRmb3JtQ29sb3IgKkhUTUxDb252ZXJ0ZXI6Ol9jb2xvckZvckVsZW1lbnQoRWxl
bWVudCYgZWxlbWVudCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQogewotICAgIE5vZGUqIGNv
cmVOb2RlID0gY29yZShub2RlKTsKLSAgICBpZiAoIWNvcmVOb2RlKQotICAgICAgICByZXR1cm4g
bmlsOwotICAgIENvbG9yIHJlc3VsdCA9IF9jYWNoZXMtPmNvbG9yUHJvcGVydHlWYWx1ZUZvck5v
ZGUoKmNvcmVOb2RlLCBwcm9wZXJ0eUlkKTsKKyAgICBDb2xvciByZXN1bHQgPSBfY2FjaGVzLT5j
b2xvclByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIHByb3BlcnR5SWQpOwogICAgIGlmICgh
cmVzdWx0LmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICBQbGF0Zm9ybUNvbG9y
ICpwbGF0Zm9ybVJlc3VsdCA9IF9wbGF0Zm9ybUNvbG9yKHJlc3VsdCk7CkBAIC0xMTQxLDI3ICsx
MTA4LDQxIEBAIFBsYXRmb3JtQ29sb3IgKkhUTUxDb252ZXJ0ZXI6Ol9jb2xvckZvck4KICAgICBy
ZXR1cm4gcGxhdGZvcm1SZXN1bHQ7CiB9CiAKKyNpZiAhUExBVEZPUk0oSU9TKQorc3RhdGljIFBs
YXRmb3JtRm9udCAqX2ZvbnQoRWxlbWVudCYgZWxlbWVudCkKK3sKKyAgICBhdXRvIHJlbmRlcmVy
ID0gZWxlbWVudC5yZW5kZXJlcigpOworICAgIGlmICghcmVuZGVyZXIpCisgICAgICAgIHJldHVy
biBuaWw7CisgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpLmZvbnQoKS5wcmltYXJ5Rm9udCgp
LT5nZXROU0ZvbnQoKTsKK30KKyNlbHNlCitzdGF0aWMgUGxhdGZvcm1Gb250ICpfZm9udChFbGVt
ZW50JiBlbGVtZW50KQoreworICAgIGF1dG8gcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7
CisgICAgaWYgKCFyZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIG5pbDsKKyAgICByZXR1cm4gcmVu
ZGVyZXItPnN0eWxlKCkuZm9udCgpLnByaW1hcnlGb250KCktPmdldENURm9udCgpOworfQorI2Vu
ZGlmCisKICNkZWZpbmUgVUlGbG9hdElzWmVybyhudW1iZXIpIChmYWJzKG51bWJlciAtIDApIDwg
RkxUX0VQU0lMT04pCiAKLU5TRGljdGlvbmFyeSAqSFRNTENvbnZlcnRlcjo6X2NvbXB1dGVkQXR0
cmlidXRlc0ZvckVsZW1lbnQoRE9NRWxlbWVudCAqZWxlbWVudCkKK05TRGljdGlvbmFyeSAqSFRN
TENvbnZlcnRlcjo6X2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVu
dCkKIHsKICAgICBOU011dGFibGVEaWN0aW9uYXJ5ICphdHRycyA9IFtOU011dGFibGVEaWN0aW9u
YXJ5IGRpY3Rpb25hcnldOwotICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgcmV0dXJuIGF0dHJz
OwotICAgIAotICAgIEVsZW1lbnQmIGNvcmVFbGVtZW50ID0gKmNvcmUoZWxlbWVudCk7CiAjaWYg
IVBMQVRGT1JNKElPUykKICAgICBOU0ZvbnRNYW5hZ2VyICpmb250TWFuYWdlciA9IFtOU0ZvbnRN
YW5hZ2VyIHNoYXJlZEZvbnRNYW5hZ2VyXTsKICNlbmRpZgogCiAgICAgUGxhdGZvcm1Gb250ICpm
b250ID0gbmlsOwotICAgIFBsYXRmb3JtRm9udCAqYWN0dWFsRm9udCA9IChQbGF0Zm9ybUZvbnQg
KilbZWxlbWVudCBfZm9udF07Ci0gICAgUGxhdGZvcm1Db2xvciAqZm9yZWdyb3VuZENvbG9yID0g
X2NvbG9yRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUNvbG9yKTsKLSAgICBQbGF0Zm9ybUNv
bG9yICpiYWNrZ3JvdW5kQ29sb3IgPSBfY29sb3JGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5
QmFja2dyb3VuZENvbG9yKTsKLSAgICBQbGF0Zm9ybUNvbG9yICpzdHJva2VDb2xvciA9IF9jb2xv
ckZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IpOworICAg
IFBsYXRmb3JtRm9udCAqYWN0dWFsRm9udCA9IF9mb250KGVsZW1lbnQpOworICAgIFBsYXRmb3Jt
Q29sb3IgKmZvcmVncm91bmRDb2xvciA9IF9jb2xvckZvckVsZW1lbnQoZWxlbWVudCwgQ1NTUHJv
cGVydHlDb2xvcik7CisgICAgUGxhdGZvcm1Db2xvciAqYmFja2dyb3VuZENvbG9yID0gX2NvbG9y
Rm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgUGxh
dGZvcm1Db2xvciAqc3Ryb2tlQ29sb3IgPSBfY29sb3JGb3JFbGVtZW50KGVsZW1lbnQsIENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yKTsKIAogICAgIGZsb2F0IGZvbnRTaXplID0gMDsK
LSAgICBpZiAoIV9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZUVsZW1lbnQs
IENTU1Byb3BlcnR5Rm9udFNpemUsIGZvbnRTaXplKSB8fCBmb250U2l6ZSA8PSAwLjApCisgICAg
aWYgKCFfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3Bl
cnR5Rm9udFNpemUsIGZvbnRTaXplKSB8fCBmb250U2l6ZSA8PSAwLjApCiAgICAgICAgIGZvbnRT
aXplID0gZGVmYXVsdEZvbnRTaXplOwogICAgIGlmIChmb250U2l6ZSA8IG1pbmltdW1Gb250U2l6
ZSkKICAgICAgICAgZm9udFNpemUgPSBtaW5pbXVtRm9udFNpemU7CkBAIC0xMTgxLDEzICsxMTYy
LDEzIEBAIE5TRGljdGlvbmFyeSAqSFRNTENvbnZlcnRlcjo6X2NvbXB1dGVkQXQKICAgICAgICAg
Zm9udCA9IFtmb250TWFuYWdlciBjb252ZXJ0Rm9udDphY3R1YWxGb250IHRvU2l6ZTpmb250U2l6
ZV07CiAjZW5kaWYKICAgICBpZiAoIWZvbnQpIHsKLSAgICAgICAgU3RyaW5nIGZvbnROYW1lID0g
X2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZUVsZW1lbnQsIENTU1Byb3BlcnR5Rm9u
dEZhbWlseSk7CisgICAgICAgIFN0cmluZyBmb250TmFtZSA9IF9jYWNoZXMtPnByb3BlcnR5VmFs
dWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5Rm9udEZhbWlseSk7CiAgICAgICAgIGlmIChm
b250TmFtZS5sZW5ndGgoKSkKICAgICAgICAgICAgIGZvbnQgPSBfZm9udEZvck5hbWVBbmRTaXpl
KGZvbnROYW1lLnVwcGVyKCksIGZvbnRTaXplLCBfZm9udENhY2hlKTsKICAgICAgICAgaWYgKCFm
b250KQogICAgICAgICAgICAgZm9udCA9IFtQbGF0Zm9ybUZvbnRDbGFzcyBmb250V2l0aE5hbWU6
QCJUaW1lcyIgc2l6ZTpmb250U2l6ZV07CiAKLSAgICAgICAgU3RyaW5nIGZvbnRTdHlsZSA9IF9j
YWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50LCBDU1NQcm9wZXJ0eUZvbnRT
dHlsZSk7CisgICAgICAgIFN0cmluZyBmb250U3R5bGUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVl
Rm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eUZvbnRTdHlsZSk7CiAgICAgICAgIGlmIChmb250
U3R5bGUgPT0gIml0YWxpYyIgfHwgZm9udFN0eWxlID09ICJvYmxpcXVlIikgewogICAgICAgICAg
ICAgUGxhdGZvcm1Gb250ICpvcmlnaW5hbEZvbnQgPSBmb250OwogI2lmIFBMQVRGT1JNKElPUykK
QEAgLTExOTksNyArMTE4MCw3IEBAIE5TRGljdGlvbmFyeSAqSFRNTENvbnZlcnRlcjo6X2NvbXB1
dGVkQXQKICAgICAgICAgICAgICAgICBmb250ID0gb3JpZ2luYWxGb250OwogICAgICAgICB9CiAK
LSAgICAgICAgU3RyaW5nIGZvbnRXZWlnaHQgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9k
ZShjb3JlRWxlbWVudCwgQ1NTUHJvcGVydHlGb250U3R5bGUpOworICAgICAgICBTdHJpbmcgZm9u
dFdlaWdodCA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3Bl
cnR5Rm9udFN0eWxlKTsKICAgICAgICAgaWYgKGZvbnRXZWlnaHQuc3RhcnRzV2l0aCgiYm9sZCIp
IHx8IGZvbnRXZWlnaHQudG9JbnQoKSA+PSA3MDApIHsKICAgICAgICAgICAgIC8vID8/PyBoYW5k
bGUgd2VpZ2h0IHByb3Blcmx5IHVzaW5nIE5TRm9udE1hbmFnZXIKICAgICAgICAgICAgIFBsYXRm
b3JtRm9udCAqb3JpZ2luYWxGb250ID0gZm9udDsKQEAgLTEyMTIsNyArMTE5Myw3IEBAIE5TRGlj
dGlvbmFyeSAqSFRNTENvbnZlcnRlcjo6X2NvbXB1dGVkQXQKICAgICAgICAgICAgICAgICBmb250
ID0gb3JpZ2luYWxGb250OwogICAgICAgICB9CiAjaWYgIVBMQVRGT1JNKElPUykgLy8gSUpCOiBO
byBzbWFsbCBjYXBzIHN1cHBvcnQgb24gaU9TCi0gICAgICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0
eVZhbHVlRm9yTm9kZShjb3JlRWxlbWVudCwgQ1NTUHJvcGVydHlGb250VmFyaWFudCkgPT0gInNt
YWxsLWNhcHMiKSB7CisgICAgICAgIGlmIChfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShl
bGVtZW50LCBDU1NQcm9wZXJ0eUZvbnRWYXJpYW50KSA9PSAic21hbGwtY2FwcyIpIHsKICAgICAg
ICAgICAgIC8vID8/PyBzeW50aGVzaXplIHNtYWxsLWNhcHMgaWYgW2ZvbnQgaXNFcXVhbDpvcmln
aW5hbEZvbnRdCiAgICAgICAgICAgICBOU0ZvbnQgKm9yaWdpbmFsRm9udCA9IGZvbnQ7CiAgICAg
ICAgICAgICBmb250ID0gW2ZvbnRNYW5hZ2VyIGNvbnZlcnRGb250OmZvbnQgdG9IYXZlVHJhaXQ6
TlNTbWFsbENhcHNGb250TWFza107CkBAIC0xMjI1LDE5ICsxMjA2LDE5IEBAIE5TRGljdGlvbmFy
eSAqSFRNTENvbnZlcnRlcjo6X2NvbXB1dGVkQXQKICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpm
b250IGZvcktleTpOU0ZvbnRBdHRyaWJ1dGVOYW1lXTsKICAgICBpZiAoZm9yZWdyb3VuZENvbG9y
KQogICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmZvcmVncm91bmRDb2xvciBmb3JLZXk6TlNGb3Jl
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKLSAgICBpZiAoYmFja2dyb3VuZENvbG9yICYmICFf
ZWxlbWVudEhhc093bkJhY2tncm91bmRDb2xvcihlbGVtZW50KSkKKyAgICBpZiAoYmFja2dyb3Vu
ZENvbG9yICYmICFfY2FjaGVzLT5lbGVtZW50SGFzT3duQmFja2dyb3VuZENvbG9yKGVsZW1lbnQp
KQogICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OmJhY2tncm91bmRDb2xvciBmb3JLZXk6TlNCYWNr
Z3JvdW5kQ29sb3JBdHRyaWJ1dGVOYW1lXTsKIAogICAgIGZsb2F0IHN0cm9rZVdpZHRoID0gMC4w
OwotICAgIGlmIChfY2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50
LCBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VXaWR0aCwgc3Ryb2tlV2lkdGgpKSB7CisgICAg
aWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0U3Ryb2tlV2lkdGgsIHN0cm9rZVdpZHRoKSkgewogICAgICAgICBmbG9hdCB0
ZXh0U3Ryb2tlV2lkdGggPSBzdHJva2VXaWR0aCAvIChbZm9udCBwb2ludFNpemVdICogMC4wMSk7
CiAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhEb3VibGU6dGV4
dFN0cm9rZVdpZHRoXSBmb3JLZXk6TlNTdHJva2VXaWR0aEF0dHJpYnV0ZU5hbWVdOwogICAgIH0K
ICAgICBpZiAoc3Ryb2tlQ29sb3IpCiAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6c3Ryb2tlQ29s
b3IgZm9yS2V5Ok5TU3Ryb2tlQ29sb3JBdHRyaWJ1dGVOYW1lXTsKIAotICAgIFN0cmluZyBmb250
S2VybmluZyA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50LCBDU1NQ
cm9wZXJ0eVdlYmtpdEZvbnRLZXJuaW5nKTsKLSAgICBTdHJpbmcgbGV0dGVyU3BhY2luZyA9IF9j
YWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50LCBDU1NQcm9wZXJ0eUxldHRl
clNwYWNpbmcpOworICAgIFN0cmluZyBmb250S2VybmluZyA9IF9jYWNoZXMtPnByb3BlcnR5VmFs
dWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5V2Via2l0Rm9udEtlcm5pbmcpOworICAgIFN0
cmluZyBsZXR0ZXJTcGFjaW5nID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVu
dCwgQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nKTsKICAgICBpZiAoZm9udEtlcm5pbmcubGVuZ3Ro
KCkgfHwgbGV0dGVyU3BhY2luZy5sZW5ndGgoKSkgewogICAgICAgICBpZiAoZm9udEtlcm5pbmcg
PT0gIm5vbmUiKQogICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpAMC4wIGZvcktleTpOU0tl
cm5BdHRyaWJ1dGVOYW1lXTsKQEAgLTEyNTAsNyArMTIzMSw3IEBAIE5TRGljdGlvbmFyeSAqSFRN
TENvbnZlcnRlcjo6X2NvbXB1dGVkQXQKICAgICAgICAgfQogICAgIH0KIAotICAgIFN0cmluZyBm
b250TGlnYXR1cmVzID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZUVsZW1lbnQs
IENTU1Byb3BlcnR5V2Via2l0Rm9udFZhcmlhbnRMaWdhdHVyZXMpOworICAgIFN0cmluZyBmb250
TGlnYXR1cmVzID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJv
cGVydHlXZWJraXRGb250VmFyaWFudExpZ2F0dXJlcyk7CiAgICAgaWYgKGZvbnRMaWdhdHVyZXMu
bGVuZ3RoKCkpIHsKICAgICAgICAgaWYgKGZvbnRMaWdhdHVyZXMuY29udGFpbnMoIm5vcm1hbCIp
KQogICAgICAgICAgICAgOyAgIC8vIGRlZmF1bHQ6IHdoYXRldmVyIHRoZSBzeXN0ZW0gZGVjaWRl
cyB0byBkbwpAQCAtMTI2MCw3ICsxMjQxLDcgQEAgTlNEaWN0aW9uYXJ5ICpIVE1MQ29udmVydGVy
OjpfY29tcHV0ZWRBdAogICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpAMCBmb3JLZXk6TlNM
aWdhdHVyZUF0dHJpYnV0ZU5hbWVdOyAgLy8gZXhwbGljaXRseSBkaXNhYmxlZAogICAgIH0KIAot
ICAgIFN0cmluZyB0ZXh0RGVjb3JhdGlvbiA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2Rl
KGNvcmVFbGVtZW50LCBDU1NQcm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKKyAgICBTdHJpbmcgdGV4
dERlY29yYXRpb24gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uKTsKICAgICBpZiAodGV4dERlY29yYXRpb24ubGVuZ3RoKCkp
IHsKICAgICAgICAgaWYgKHRleHREZWNvcmF0aW9uLmNvbnRhaW5zKCJ1bmRlcmxpbmUiKSkKICAg
ICAgICAgICAgIFthdHRycyBzZXRPYmplY3Q6W05TTnVtYmVyIG51bWJlcldpdGhJbnRlZ2VyOk5T
VW5kZXJsaW5lU3R5bGVTaW5nbGVdIGZvcktleTpOU1VuZGVybGluZVN0eWxlQXR0cmlidXRlTmFt
ZV07CkBAIC0xMjY4LDcgKzEyNDksNyBAQCBOU0RpY3Rpb25hcnkgKkhUTUxDb252ZXJ0ZXI6Ol9j
b21wdXRlZEF0CiAgICAgICAgICAgICBbYXR0cnMgc2V0T2JqZWN0OltOU051bWJlciBudW1iZXJX
aXRoSW50ZWdlcjpOU1VuZGVybGluZVN0eWxlU2luZ2xlXSBmb3JLZXk6TlNTdHJpa2V0aHJvdWdo
U3R5bGVBdHRyaWJ1dGVOYW1lXTsKICAgICB9CiAKLSAgICBTdHJpbmcgdmVydGljYWxBbGlnbiA9
IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50LCBDU1NQcm9wZXJ0eVZl
cnRpY2FsQWxpZ24pOworICAgIFN0cmluZyB2ZXJ0aWNhbEFsaWduID0gX2NhY2hlcy0+cHJvcGVy
dHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKICAgICBp
ZiAodmVydGljYWxBbGlnbi5sZW5ndGgoKSkgewogICAgICAgICBpZiAodmVydGljYWxBbGlnbiA9
PSAic3VwZXIiKQogICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVy
V2l0aEludGVnZXI6MV0gZm9yS2V5Ok5TU3VwZXJzY3JpcHRBdHRyaWJ1dGVOYW1lXTsKQEAgLTEy
NzcsMjIgKzEyNTgsMjIgQEAgTlNEaWN0aW9uYXJ5ICpIVE1MQ29udmVydGVyOjpfY29tcHV0ZWRB
dAogICAgIH0KIAogICAgIGZsb2F0IGJhc2VsaW5lT2Zmc2V0ID0gMC4wOwotICAgIGlmIChfY2Fj
aGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVFbGVtZW50LCBDU1NQcm9wZXJ0eVZl
cnRpY2FsQWxpZ24sIGJhc2VsaW5lT2Zmc2V0KSkKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9w
ZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24sIGJhc2Vs
aW5lT2Zmc2V0KSkKICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpbTlNOdW1iZXIgbnVtYmVyV2l0
aERvdWJsZTpiYXNlbGluZU9mZnNldF0gZm9yS2V5Ok5TQmFzZWxpbmVPZmZzZXRBdHRyaWJ1dGVO
YW1lXTsKIAotICAgIFN0cmluZyB0ZXh0U2hhZG93ID0gX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZv
ck5vZGUoY29yZUVsZW1lbnQsIENTU1Byb3BlcnR5VGV4dFNoYWRvdyk7CisgICAgU3RyaW5nIHRl
eHRTaGFkb3cgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9w
ZXJ0eVRleHRTaGFkb3cpOwogICAgIGlmICh0ZXh0U2hhZG93Lmxlbmd0aCgpID4gNCkgewogICAg
ICAgICBOU1NoYWRvdyAqc2hhZG93ID0gX3NoYWRvd0ZvclNoYWRvd1N0eWxlKHRleHRTaGFkb3cp
OwogICAgICAgICBpZiAoc2hhZG93KQogICAgICAgICAgICAgW2F0dHJzIHNldE9iamVjdDpzaGFk
b3cgZm9yS2V5Ok5TU2hhZG93QXR0cmlidXRlTmFtZV07CiAgICAgfQogCi0gICAgRE9NRWxlbWVu
dCAqYmxvY2tFbGVtZW50ID0gX2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZShlbGVtZW50KTsKLSAg
ICBpZiAoZWxlbWVudCAhPSBibG9ja0VsZW1lbnQgJiYgW193cml0aW5nRGlyZWN0aW9uQXJyYXkg
Y291bnRdID4gMCkKKyAgICBFbGVtZW50KiBibG9ja0VsZW1lbnQgPSBfYmxvY2tMZXZlbEVsZW1l
bnRGb3JOb2RlKCZlbGVtZW50KTsKKyAgICBpZiAoJmVsZW1lbnQgIT0gYmxvY2tFbGVtZW50ICYm
IFtfd3JpdGluZ0RpcmVjdGlvbkFycmF5IGNvdW50XSA+IDApCiAgICAgICAgIFthdHRycyBzZXRP
YmplY3Q6W05TQXJyYXkgYXJyYXlXaXRoQXJyYXk6X3dyaXRpbmdEaXJlY3Rpb25BcnJheV0gZm9y
S2V5Ok5TV3JpdGluZ0RpcmVjdGlvbkF0dHJpYnV0ZU5hbWVdOwogCiAgICAgaWYgKGJsb2NrRWxl
bWVudCkgewotICAgICAgICBFbGVtZW50JiBjb3JlQmxvY2tFbGVtZW50ID0gKmNvcmUoYmxvY2tF
bGVtZW50KTsKKyAgICAgICAgRWxlbWVudCYgY29yZUJsb2NrRWxlbWVudCA9ICpibG9ja0VsZW1l
bnQ7CiAgICAgICAgIE5TTXV0YWJsZVBhcmFncmFwaFN0eWxlICpwYXJhZ3JhcGhTdHlsZSA9IFtk
ZWZhdWx0UGFyYWdyYXBoU3R5bGUoKSBtdXRhYmxlQ29weV07CiAgICAgICAgIHVuc2lnbmVkIGhl
YWRpbmcgPSAwOwogICAgICAgICBpZiAoY29yZUJsb2NrRWxlbWVudC5oYXNUYWdOYW1lKGgxVGFn
KSkKQEAgLTEzNjYsMTcgKzEzNDcsMTUgQEAgTlNEaWN0aW9uYXJ5ICpIVE1MQ29udmVydGVyOjpf
Y29tcHV0ZWRBdAogCiBOU0RpY3Rpb25hcnkgKkhUTUxDb252ZXJ0ZXI6Ol9hdHRyaWJ1dGVzRm9y
RWxlbWVudChET01FbGVtZW50ICplbGVtZW50KQogewotICAgIE5TRGljdGlvbmFyeSAqcmVzdWx0
OwotICAgIGlmIChlbGVtZW50KSB7Ci0gICAgICAgIHJlc3VsdCA9IFtfYXR0cmlidXRlc0ZvckVs
ZW1lbnRzIG9iamVjdEZvcktleTplbGVtZW50XTsKLSAgICAgICAgaWYgKCFyZXN1bHQpIHsKLSAg
ICAgICAgICAgIHJlc3VsdCA9IF9jb21wdXRlZEF0dHJpYnV0ZXNGb3JFbGVtZW50KGVsZW1lbnQp
OwotICAgICAgICAgICAgW19hdHRyaWJ1dGVzRm9yRWxlbWVudHMgc2V0T2JqZWN0OnJlc3VsdCBm
b3JLZXk6ZWxlbWVudF07Ci0gICAgICAgIH0KLSAgICB9IGVsc2UKLSAgICAgICAgcmVzdWx0ID0g
W05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKLSAgICByZXR1cm4gcmVzdWx0OwotCisgICAgaWYg
KCFlbGVtZW50KQorICAgICAgICByZXR1cm4gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5XTsKKyAg
ICAKKyAgICBFbGVtZW50JiBjb3JlRWxlbWVudCA9ICpjb3JlKGVsZW1lbnQpOworICAgIAorICAg
IGF1dG8gcmVzdWx0ID0gbV9hdHRyaWJ1dGVzRm9yRWxlbWVudHMuYWRkKCZjb3JlRWxlbWVudCwg
bnVsbHB0cik7CisgICAgaWYgKHJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICByZXN1bHQuaXRl
cmF0b3ItPnZhbHVlID0gX2NvbXB1dGVkQXR0cmlidXRlc0ZvckVsZW1lbnQoY29yZUVsZW1lbnQp
OworICAgIHJldHVybiByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLmdldCgpOwogfQogCiB2b2lkIEhU
TUxDb252ZXJ0ZXI6Ol9uZXdQYXJhZ3JhcGhGb3JFbGVtZW50KERPTUVsZW1lbnQgKmVsZW1lbnQs
IE5TU3RyaW5nICp0YWcsIEJPT0wgZmxhZywgQk9PTCBzdXBwcmVzc1RyYWlsaW5nU3BhY2UpCkBA
IC0xNTgwLDY3ICsxNTU5LDg1IEBAIHZvaWQgSFRNTENvbnZlcnRlcjo6X2FkZFZhbHVlKE5TU3Ry
aW5nICoKICAgICB9CiB9CiAKLXZvaWQgSFRNTENvbnZlcnRlcjo6X2ZpbGxJbkJsb2NrKE5TVGV4
dEJsb2NrICpibG9jaywgRE9NRWxlbWVudCAqZWxlbWVudCwgUGxhdGZvcm1Db2xvciAqYmFja2dy
b3VuZENvbG9yLCBDR0Zsb2F0IGV4dHJhTWFyZ2luLCBDR0Zsb2F0IGV4dHJhUGFkZGluZywgQk9P
TCBpc1RhYmxlKQordm9pZCBIVE1MQ29udmVydGVyOjpfZmlsbEluQmxvY2soTlNUZXh0QmxvY2sg
KmJsb2NrLCBFbGVtZW50JiBlbGVtZW50LCBQbGF0Zm9ybUNvbG9yICpiYWNrZ3JvdW5kQ29sb3Is
IENHRmxvYXQgZXh0cmFNYXJnaW4sIENHRmxvYXQgZXh0cmFQYWRkaW5nLCBCT09MIGlzVGFibGUp
CiB7Ci0gICAgQ0dGbG9hdCB2YWwgPSAwOwotICAgIFBsYXRmb3JtQ29sb3IgKmNvbG9yID0gbmls
OwotICAgIEJPT0wgaXNUYWJsZUNlbGxFbGVtZW50ID0gW2VsZW1lbnQgaXNLaW5kT2ZDbGFzczpb
RE9NSFRNTFRhYmxlQ2VsbEVsZW1lbnQgY2xhc3NdXTsKLSAgICBOU1N0cmluZyAqd2lkdGggPSBp
c1RhYmxlQ2VsbEVsZW1lbnQgPyBbKERPTUhUTUxUYWJsZUNlbGxFbGVtZW50ICopZWxlbWVudCB3
aWR0aF0gOiBbZWxlbWVudCBnZXRBdHRyaWJ1dGU6QCJ3aWR0aCJdOwotCisgICAgZmxvYXQgcmVz
dWx0ID0gMDsKKyAgICAKKyAgICBOU1N0cmluZyAqd2lkdGggPSBlbGVtZW50LmdldEF0dHJpYnV0
ZShXZWJDb3JlOjpIVE1MTmFtZXM6OndpZHRoQXR0cik7CiAgICAgaWYgKCh3aWR0aCAmJiBbd2lk
dGggbGVuZ3RoXSkgfHwgIWlzVGFibGUpIHsKLSAgICAgICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBl
bGVtZW50LCBDU1NQcm9wZXJ0eVdpZHRoKSkKLSAgICAgICAgICAgIFtibG9jayBzZXRWYWx1ZTp2
YWwgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckRpbWVuc2lvbjpOU1RleHRC
bG9ja1dpZHRoXTsKKyAgICAgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5v
ZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlXaWR0aCwgcmVzdWx0KSkKKyAgICAgICAgICAgIFtibG9j
ayBzZXRWYWx1ZTpyZXN1bHQgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckRp
bWVuc2lvbjpOU1RleHRCbG9ja1dpZHRoXTsKICAgICB9CiAgICAgCi0gICAgaWYgKF9nZXRGbG9h
dCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0eU1pbldpZHRoKSkKLSAgICAgICAgW2Jsb2NrIHNl
dFZhbHVlOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9u
Ok5TVGV4dEJsb2NrTWluaW11bVdpZHRoXTsKLSAgICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1l
bnQsIENTU1Byb3BlcnR5TWF4V2lkdGgpKQotICAgICAgICBbYmxvY2sgc2V0VmFsdWU6dmFsIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tN
YXhpbXVtV2lkdGhdOwotICAgIGlmIChfZ2V0RmxvYXQoJnZhbCwgZWxlbWVudCwgQ1NTUHJvcGVy
dHlNaW5IZWlnaHQpKQotICAgICAgICBbYmxvY2sgc2V0VmFsdWU6dmFsIHR5cGU6TlNUZXh0Qmxv
Y2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tNaW5pbXVtSGVpZ2h0
XTsKLSAgICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1lbnQsIENTU1Byb3BlcnR5TWF4SGVpZ2h0
KSkKLSAgICAgICAgW2Jsb2NrIHNldFZhbHVlOnZhbCB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVW
YWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJsb2NrTWF4aW11bUhlaWdodF07CisgICAgaWYg
KF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlN
aW5XaWR0aCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFZhbHVlOnJlc3VsdCB0eXBlOk5T
VGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJsb2NrTWluaW11
bVdpZHRoXTsKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVt
ZW50LCBDU1NQcm9wZXJ0eU1heFdpZHRoLCByZXN1bHQpKQorICAgICAgICBbYmxvY2sgc2V0VmFs
dWU6cmVzdWx0IHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JEaW1lbnNpb246
TlNUZXh0QmxvY2tNYXhpbXVtV2lkdGhdOworICAgIGlmIChfY2FjaGVzLT5mbG9hdFByb3BlcnR5
VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5TWluSGVpZ2h0LCByZXN1bHQpKQorICAg
ICAgICBbYmxvY2sgc2V0VmFsdWU6cmVzdWx0IHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVl
VHlwZSBmb3JEaW1lbnNpb246TlNUZXh0QmxvY2tNaW5pbXVtSGVpZ2h0XTsKKyAgICBpZiAoX2Nh
Y2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eU1heEhl
aWdodCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFZhbHVlOnJlc3VsdCB0eXBlOk5TVGV4
dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yRGltZW5zaW9uOk5TVGV4dEJsb2NrTWF4aW11bUhl
aWdodF07CiAKLSAgICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1lbnQsIENTU1Byb3BlcnR5UGFk
ZGluZ0xlZnQpKQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6dmFsICsgZXh0cmFQYWRkaW5nIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRp
bmcgZWRnZTpOU01pblhFZGdlXTsKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVl
Rm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCByZXN1bHQpKQorICAgICAg
ICBbYmxvY2sgc2V0V2lkdGg6cmVzdWx0ICsgZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tB
YnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01pblhF
ZGdlXTsKICAgICBlbHNlCiAgICAgICAgIFtibG9jayBzZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlw
ZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrUGFkZGlu
ZyBlZGdlOk5TTWluWEVkZ2VdOwotICAgIGlmIChfZ2V0RmxvYXQoJnZhbCwgZWxlbWVudCwgQ1NT
UHJvcGVydHlQYWRkaW5nVG9wKSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJh
UGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0
QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5ZRWRnZV07IGVsc2UgW2Jsb2NrIHNldFdpZHRoOmV4dHJh
UGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0
QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5ZRWRnZV07Ci0gICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBl
bGVtZW50LCBDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCkpCi0gICAgICAgIFtibG9jayBzZXRXaWR0
aDp2YWwgKyBleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZv
ckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWF4WEVkZ2VdOyBlbHNlIFtibG9jayBz
ZXRXaWR0aDpleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZv
ckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWF4WEVkZ2VdOwotICAgIGlmIChfZ2V0
RmxvYXQoJnZhbCwgZWxlbWVudCwgQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tKSkKLSAgICAgICAg
W2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1
dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhZRWRnZV07
IGVsc2UgW2Jsb2NrIHNldFdpZHRoOmV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1
dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhZRWRnZV07
Ci0gICAgCi0gICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRl
ckxlZnRXaWR0aCkpCi0gICAgICAgIFtibG9jayBzZXRXaWR0aDp2YWwgdHlwZTpOU1RleHRCbG9j
a0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrQm9yZGVyIGVkZ2U6TlNNaW5Y
RWRnZV07Ci0gICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRl
clRvcFdpZHRoKSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCB0eXBlOk5TVGV4dEJsb2Nr
QWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01pbllF
ZGdlXTsKLSAgICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1lbnQsIENTU1Byb3BlcnR5Qm9yZGVy
UmlnaHRXaWR0aCkpCi0gICAgICAgIFtibG9jayBzZXRXaWR0aDp2YWwgdHlwZTpOU1RleHRCbG9j
a0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrQm9yZGVyIGVkZ2U6TlNNYXhY
RWRnZV07Ci0gICAgaWYgKF9nZXRGbG9hdCgmdmFsLCBlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRl
ckJvdHRvbVdpZHRoKSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCB0eXBlOk5TVGV4dEJs
b2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01h
eFlFZGdlXTsKLQotICAgIGlmIChfZ2V0RmxvYXQoJnZhbCwgZWxlbWVudCwgQ1NTUHJvcGVydHlN
YXJnaW5MZWZ0KSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhTWFyZ2luIHR5
cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja01hcmdp
biBlZGdlOk5TTWluWEVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0eXBl
Ok5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4g
ZWRnZTpOU01pblhFZGdlXTsKLSAgICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1lbnQsIENTU1By
b3BlcnR5TWFyZ2luVG9wKSkKLSAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnZhbCArIGV4dHJhTWFy
Z2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1RleHRCbG9j
a01hcmdpbiBlZGdlOk5TTWluWUVkZ2VdOyBlbHNlIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdp
biB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tN
YXJnaW4gZWRnZTpOU01pbllFZGdlXTsKLSAgICBpZiAoX2dldEZsb2F0KCZ2YWwsIGVsZW1lbnQs
IENTU1Byb3BlcnR5TWFyZ2luUmlnaHQpKQotICAgICAgICBbYmxvY2sgc2V0V2lkdGg6dmFsICsg
ZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5T
VGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhYRWRnZV07IGVsc2UgW2Jsb2NrIHNldFdpZHRoOmV4
dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JMYXllcjpOU1Rl
eHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WEVkZ2VdOwotICAgIGlmIChfZ2V0RmxvYXQoJnZhbCwg
ZWxlbWVudCwgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20pKQotICAgICAgICBbYmxvY2sgc2V0V2lk
dGg6dmFsICsgZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZv
ckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhZRWRnZV07IGVsc2UgW2Jsb2NrIHNl
dFdpZHRoOmV4dHJhTWFyZ2luIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBmb3JM
YXllcjpOU1RleHRCbG9ja01hcmdpbiBlZGdlOk5TTWF4WUVkZ2VdOworICAgIAorICAgIGlmIChf
Y2FjaGVzLT5mbG9hdFByb3BlcnR5VmFsdWVGb3JOb2RlKGVsZW1lbnQsIENTU1Byb3BlcnR5UGFk
ZGluZ1RvcCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCArIGV4dHJh
UGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0
QmxvY2tQYWRkaW5nIGVkZ2U6TlNNaW5ZRWRnZV07CisgICAgZWxzZQorICAgICAgICBbYmxvY2sg
c2V0V2lkdGg6ZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVlVHlwZSBm
b3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01pbllFZGdlXTsKKyAgICAKKyAgICBp
ZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0
eVBhZGRpbmdSaWdodCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCAr
IGV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6
TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhYRWRnZV07CisgICAgZWxzZQorICAgICAgICBb
YmxvY2sgc2V0V2lkdGg6ZXh0cmFQYWRkaW5nIHR5cGU6TlNUZXh0QmxvY2tBYnNvbHV0ZVZhbHVl
VHlwZSBmb3JMYXllcjpOU1RleHRCbG9ja1BhZGRpbmcgZWRnZTpOU01heFhFZGdlXTsKKyAgICAK
KyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVtZW50LCBDU1NQ
cm9wZXJ0eVBhZGRpbmdCb3R0b20sIHJlc3VsdCkpCisgICAgICAgIFtibG9jayBzZXRXaWR0aDpy
ZXN1bHQgKyBleHRyYVBhZGRpbmcgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZv
ckxheWVyOk5TVGV4dEJsb2NrUGFkZGluZyBlZGdlOk5TTWF4WUVkZ2VdOworICAgIGVsc2UKKyAg
ICAgICAgW2Jsb2NrIHNldFdpZHRoOmV4dHJhUGFkZGluZyB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1
dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tQYWRkaW5nIGVkZ2U6TlNNYXhZRWRnZV07
CisgICAgCisgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVu
dCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsIHJlc3VsdCkpCisgICAgICAgIFtibG9jayBz
ZXRXaWR0aDpyZXN1bHQgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVy
Ok5TVGV4dEJsb2NrQm9yZGVyIGVkZ2U6TlNNaW5YRWRnZV07CisgICAgaWYgKF9jYWNoZXMtPmZs
b2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0
aCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCB0eXBlOk5TVGV4dEJs
b2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRnZTpOU01p
bllFZGdlXTsKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9yTm9kZShlbGVt
ZW50LCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsIHJlc3VsdCkpCisgICAgICAgIFtibG9j
ayBzZXRXaWR0aDpyZXN1bHQgdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxh
eWVyOk5TVGV4dEJsb2NrQm9yZGVyIGVkZ2U6TlNNYXhYRWRnZV07CisgICAgaWYgKF9jYWNoZXMt
PmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0
b21XaWR0aCwgcmVzdWx0KSkKKyAgICAgICAgW2Jsb2NrIHNldFdpZHRoOnJlc3VsdCB0eXBlOk5T
VGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tCb3JkZXIgZWRn
ZTpOU01heFlFZGdlXTsKIAotICAgIGlmICgoY29sb3IgPSBfY29sb3JGb3JOb2RlKGVsZW1lbnQs
IENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKSkpCisgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJv
cGVydHlWYWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCByZXN1bHQp
KQorICAgICAgICBbYmxvY2sgc2V0V2lkdGg6cmVzdWx0ICsgZXh0cmFNYXJnaW4gdHlwZTpOU1Rl
eHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6
TlNNaW5YRWRnZV07CisgICAgZWxzZQorICAgICAgICBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFNYXJn
aW4gdHlwZTpOU1RleHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2Nr
TWFyZ2luIGVkZ2U6TlNNaW5YRWRnZV07CisgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlW
YWx1ZUZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlNYXJnaW5Ub3AsIHJlc3VsdCkpCisgICAg
ICAgIFtibG9jayBzZXRXaWR0aDpyZXN1bHQgKyBleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2Nr
QWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01pbllF
ZGdlXTsKKyAgICBlbHNlCisgICAgICAgIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0eXBl
Ok5TVGV4dEJsb2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4g
ZWRnZTpOU01pbllFZGdlXTsKKyAgICBpZiAoX2NhY2hlcy0+ZmxvYXRQcm9wZXJ0eVZhbHVlRm9y
Tm9kZShlbGVtZW50LCBDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCByZXN1bHQpKQorICAgICAgICBb
YmxvY2sgc2V0V2lkdGg6cmVzdWx0ICsgZXh0cmFNYXJnaW4gdHlwZTpOU1RleHRCbG9ja0Fic29s
dXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6TlNNYXhYRWRnZV07
CisgICAgZWxzZQorICAgICAgICBbYmxvY2sgc2V0V2lkdGg6ZXh0cmFNYXJnaW4gdHlwZTpOU1Rl
eHRCbG9ja0Fic29sdXRlVmFsdWVUeXBlIGZvckxheWVyOk5TVGV4dEJsb2NrTWFyZ2luIGVkZ2U6
TlNNYXhYRWRnZV07CisgICAgaWYgKF9jYWNoZXMtPmZsb2F0UHJvcGVydHlWYWx1ZUZvck5vZGUo
ZWxlbWVudCwgQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sIHJlc3VsdCkpCisgICAgICAgIFtibG9j
ayBzZXRXaWR0aDpyZXN1bHQgKyBleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJsb2NrQWJzb2x1dGVW
YWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01heFlFZGdlXTsKKyAg
ICBlbHNlCisgICAgICAgIFtibG9jayBzZXRXaWR0aDpleHRyYU1hcmdpbiB0eXBlOk5TVGV4dEJs
b2NrQWJzb2x1dGVWYWx1ZVR5cGUgZm9yTGF5ZXI6TlNUZXh0QmxvY2tNYXJnaW4gZWRnZTpOU01h
eFlFZGdlXTsKKyAgICAKKyAgICBQbGF0Zm9ybUNvbG9yICpjb2xvciA9IG5pbDsKKyAgICBpZiAo
KGNvbG9yID0gX2NvbG9yRm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJhY2tncm91bmRD
b2xvcikpKQogICAgICAgICBbYmxvY2sgc2V0QmFja2dyb3VuZENvbG9yOmNvbG9yXTsKICAgICBp
ZiAoIWNvbG9yICYmIGJhY2tncm91bmRDb2xvcikKICAgICAgICAgW2Jsb2NrIHNldEJhY2tncm91
bmRDb2xvcjpiYWNrZ3JvdW5kQ29sb3JdOwotICAgIGlmICgoY29sb3IgPSBfY29sb3JGb3JOb2Rl
KGVsZW1lbnQsIENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yKSkpCisgICAgCisgICAgaWYgKChj
b2xvciA9IF9jb2xvckZvckVsZW1lbnQoZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29s
b3IpKSkKICAgICAgICAgW2Jsb2NrIHNldEJvcmRlckNvbG9yOmNvbG9yIGZvckVkZ2U6TlNNaW5Y
RWRnZV07Ci0gICAgaWYgKChjb2xvciA9IF9jb2xvckZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVy
dHlCb3JkZXJUb3BDb2xvcikpKQorICAgIAorICAgIGlmICgoY29sb3IgPSBfY29sb3JGb3JFbGVt
ZW50KGVsZW1lbnQsIENTU1Byb3BlcnR5Qm9yZGVyVG9wQ29sb3IpKSkKICAgICAgICAgW2Jsb2Nr
IHNldEJvcmRlckNvbG9yOmNvbG9yIGZvckVkZ2U6TlNNaW5ZRWRnZV07Ci0gICAgaWYgKChjb2xv
ciA9IF9jb2xvckZvck5vZGUoZWxlbWVudCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yKSkp
CisgICAgaWYgKChjb2xvciA9IF9jb2xvckZvckVsZW1lbnQoZWxlbWVudCwgQ1NTUHJvcGVydHlC
b3JkZXJSaWdodENvbG9yKSkpCiAgICAgICAgIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBm
b3JFZGdlOk5TTWF4WEVkZ2VdOwotICAgIGlmICgoY29sb3IgPSBfY29sb3JGb3JOb2RlKGVsZW1l
bnQsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IpKSkKKyAgICBpZiAoKGNvbG9yID0gX2Nv
bG9yRm9yRWxlbWVudChlbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yKSkpCiAg
ICAgICAgIFtibG9jayBzZXRCb3JkZXJDb2xvcjpjb2xvciBmb3JFZGdlOk5TTWF4WUVkZ2VdOwog
fQogCkBAIC0xODAzLDcgKzE4MDAsNyBAQCBCT09MIEhUTUxDb252ZXJ0ZXI6Ol9lbnRlckVsZW1l
bnQoRE9NRWxlCiAgICAgaWYgKGNvcmVFbGVtZW50Lmhhc1RhZ05hbWUoaGVhZFRhZykgJiYgIWVt
YmVkZGVkKQogICAgICAgICBfcHJvY2Vzc0hlYWRFbGVtZW50KGVsZW1lbnQpOwogICAgIGVsc2Ug
aWYgKCFkaXNwbGF5VmFsdWUubGVuZ3RoKCkgfHwgIShkaXNwbGF5VmFsdWUgPT0gIm5vbmUiIHx8
IGRpc3BsYXlWYWx1ZSA9PSAidGFibGUtY29sdW1uIiB8fCBkaXNwbGF5VmFsdWUgPT0gInRhYmxl
LWNvbHVtbi1ncm91cCIpKSB7Ci0gICAgICAgIGlmIChfZWxlbWVudElzQmxvY2tMZXZlbChlbGVt
ZW50KSAmJiAhY29yZUVsZW1lbnQuaGFzVGFnTmFtZShiclRhZykgJiYgIShkaXNwbGF5VmFsdWUg
PT0gInRhYmxlLWNlbGwiICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPT0gMCkKKyAgICAgICAgaWYg
KF9jYWNoZXMtPmlzQmxvY2tFbGVtZW50KGNvcmVFbGVtZW50KSAmJiAhY29yZUVsZW1lbnQuaGFz
VGFnTmFtZShiclRhZykgJiYgIShkaXNwbGF5VmFsdWUgPT0gInRhYmxlLWNlbGwiICYmIFtfdGV4
dFRhYmxlcyBjb3VudF0gPT0gMCkKICAgICAgICAgICAgICYmICEoW190ZXh0TGlzdHMgY291bnRd
ID4gMCAmJiBkaXNwbGF5VmFsdWUgPT0gImJsb2NrIiAmJiAhY29yZUVsZW1lbnQuaGFzVGFnTmFt
ZShsaVRhZykgJiYgIWNvcmVFbGVtZW50Lmhhc1RhZ05hbWUodWxUYWcpICYmICFjb3JlRWxlbWVu
dC5oYXNUYWdOYW1lKG9sVGFnKSkpCiAgICAgICAgICAgICBfbmV3UGFyYWdyYXBoRm9yRWxlbWVu
dChlbGVtZW50LCBbZWxlbWVudCB0YWdOYW1lXSwgTk8sIFlFUyk7CiAgICAgICAgIHJldHVybiBZ
RVM7CkBAIC0xODExLDcgKzE4MDgsNyBAQCBCT09MIEhUTUxDb252ZXJ0ZXI6Ol9lbnRlckVsZW1l
bnQoRE9NRWxlCiAgICAgcmV0dXJuIE5POwogfQogCi12b2lkIEhUTUxDb252ZXJ0ZXI6Ol9hZGRU
YWJsZUZvckVsZW1lbnQoRE9NRWxlbWVudCAqdGFibGVFbGVtZW50KQordm9pZCBIVE1MQ29udmVy
dGVyOjpfYWRkVGFibGVGb3JFbGVtZW50KEVsZW1lbnQgKnRhYmxlRWxlbWVudCkKIHsKICAgICBS
ZXRhaW5QdHI8TlNUZXh0VGFibGU+IHRhYmxlID0gYWRvcHROUyhbW1BsYXRmb3JtTlNUZXh0VGFi
bGUgYWxsb2NdIGluaXRdKTsKICAgICBDR0Zsb2F0IGNlbGxTcGFjaW5nVmFsID0gMTsKQEAgLTE4
MjAsMjEgKzE4MTcsMjAgQEAgdm9pZCBIVE1MQ29udmVydGVyOjpfYWRkVGFibGVGb3JFbGVtZW50
KAogICAgIFt0YWJsZSBzZXRMYXlvdXRBbGdvcml0aG06TlNUZXh0VGFibGVBdXRvbWF0aWNMYXlv
dXRBbGdvcml0aG1dOwogICAgIFt0YWJsZSBzZXRDb2xsYXBzZXNCb3JkZXJzOk5PXTsKICAgICBb
dGFibGUgc2V0SGlkZXNFbXB0eUNlbGxzOk5PXTsKKyAgICAKICAgICBpZiAodGFibGVFbGVtZW50
KSB7Ci0gICAgICAgIGlmIChbdGFibGVFbGVtZW50IHJlc3BvbmRzVG9TZWxlY3RvcjpAc2VsZWN0
b3IoY2VsbFNwYWNpbmcpXSkgewotICAgICAgICAgICAgTlNTdHJpbmcgKmNlbGxTcGFjaW5nID0g
WyhET01IVE1MVGFibGVFbGVtZW50ICopdGFibGVFbGVtZW50IGNlbGxTcGFjaW5nXTsKLSAgICAg
ICAgICAgIGlmIChjZWxsU3BhY2luZyAmJiBbY2VsbFNwYWNpbmcgbGVuZ3RoXSA+IDAgJiYgIVtj
ZWxsU3BhY2luZyBoYXNTdWZmaXg6QCIlIl0pCi0gICAgICAgICAgICAgICAgY2VsbFNwYWNpbmdW
YWwgPSBbY2VsbFNwYWNpbmcgZmxvYXRWYWx1ZV07Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKFt0
YWJsZUVsZW1lbnQgcmVzcG9uZHNUb1NlbGVjdG9yOkBzZWxlY3RvcihjZWxsUGFkZGluZyldKSB7
Ci0gICAgICAgICAgICBOU1N0cmluZyAqY2VsbFBhZGRpbmcgPSBbKERPTUhUTUxUYWJsZUVsZW1l
bnQgKil0YWJsZUVsZW1lbnQgY2VsbFBhZGRpbmddOwotICAgICAgICAgICAgaWYgKGNlbGxQYWRk
aW5nICYmIFtjZWxsUGFkZGluZyBsZW5ndGhdID4gMCAmJiAhW2NlbGxQYWRkaW5nIGhhc1N1ZmZp
eDpAIiUiXSkKLSAgICAgICAgICAgICAgICBjZWxsUGFkZGluZ1ZhbCA9IFtjZWxsUGFkZGluZyBm
bG9hdFZhbHVlXTsKLSAgICAgICAgfQotICAgICAgICBfZmlsbEluQmxvY2sodGFibGUuZ2V0KCks
IHRhYmxlRWxlbWVudCwgbmlsLCAwLCAwLCBZRVMpOwotCiAgICAgICAgIEFTU0VSVCh0YWJsZUVs
ZW1lbnQpOwotICAgICAgICBFbGVtZW50JiBjb3JlVGFibGVFbGVtZW50ID0gKmNvcmUodGFibGVF
bGVtZW50KTsKKyAgICAgICAgRWxlbWVudCYgY29yZVRhYmxlRWxlbWVudCA9ICp0YWJsZUVsZW1l
bnQ7CisgICAgICAgIAorICAgICAgICBOU1N0cmluZyAqY2VsbFNwYWNpbmcgPSBjb3JlVGFibGVF
bGVtZW50LmdldEF0dHJpYnV0ZShjZWxsc3BhY2luZ0F0dHIpOworICAgICAgICBpZiAoY2VsbFNw
YWNpbmcgJiYgW2NlbGxTcGFjaW5nIGxlbmd0aF0gPiAwICYmICFbY2VsbFNwYWNpbmcgaGFzU3Vm
Zml4OkAiJSJdKQorICAgICAgICAgICAgY2VsbFNwYWNpbmdWYWwgPSBbY2VsbFNwYWNpbmcgZmxv
YXRWYWx1ZV07CisgICAgICAgIE5TU3RyaW5nICpjZWxsUGFkZGluZyA9IGNvcmVUYWJsZUVsZW1l
bnQuZ2V0QXR0cmlidXRlKGNlbGxwYWRkaW5nQXR0cik7CisgICAgICAgIGlmIChjZWxsUGFkZGlu
ZyAmJiBbY2VsbFBhZGRpbmcgbGVuZ3RoXSA+IDAgJiYgIVtjZWxsUGFkZGluZyBoYXNTdWZmaXg6
QCIlIl0pCisgICAgICAgICAgICBjZWxsUGFkZGluZ1ZhbCA9IFtjZWxsUGFkZGluZyBmbG9hdFZh
bHVlXTsKKyAgICAgICAgCisgICAgICAgIF9maWxsSW5CbG9jayh0YWJsZS5nZXQoKSwgY29yZVRh
YmxlRWxlbWVudCwgbmlsLCAwLCAwLCBZRVMpOworCiAgICAgICAgIGlmIChfY2FjaGVzLT5wcm9w
ZXJ0eVZhbHVlRm9yTm9kZShjb3JlVGFibGVFbGVtZW50LCBDU1NQcm9wZXJ0eUJvcmRlckNvbGxh
cHNlKSA9PSAiY29sbGFwc2UiKSB7CiAgICAgICAgICAgICBbdGFibGUgc2V0Q29sbGFwc2VzQm9y
ZGVyczpZRVNdOwogICAgICAgICAgICAgY2VsbFNwYWNpbmdWYWwgPSAwOwpAQCAtMTg0NCw2ICsx
ODQwLDcgQEAgdm9pZCBIVE1MQ29udmVydGVyOjpfYWRkVGFibGVGb3JFbGVtZW50KAogICAgICAg
ICBpZiAoX2NhY2hlcy0+cHJvcGVydHlWYWx1ZUZvck5vZGUoY29yZVRhYmxlRWxlbWVudCwgQ1NT
UHJvcGVydHlUYWJsZUxheW91dCkgPT0gImZpeGVkIikKICAgICAgICAgICAgIFt0YWJsZSBzZXRM
YXlvdXRBbGdvcml0aG06TlNUZXh0VGFibGVGaXhlZExheW91dEFsZ29yaXRobV07CiAgICAgfQor
ICAgIAogICAgIFtfdGV4dFRhYmxlcyBhZGRPYmplY3Q6dGFibGUuZ2V0KCldOwogICAgIFtfdGV4
dFRhYmxlU3BhY2luZ3MgYWRkT2JqZWN0OltOU051bWJlciBudW1iZXJXaXRoRG91YmxlOmNlbGxT
cGFjaW5nVmFsXV07CiAgICAgW190ZXh0VGFibGVQYWRkaW5ncyBhZGRPYmplY3Q6W05TTnVtYmVy
IG51bWJlcldpdGhEb3VibGU6Y2VsbFBhZGRpbmdWYWxdXTsKQEAgLTE4ODMsOCArMTg4MCwxMSBA
QCB2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9hZGRUYWJsZUNlbGxGb3JFbGVtCiAgICAgfQogICAgIFJl
dGFpblB0cjxOU1RleHRUYWJsZUJsb2NrPiBibG9jayA9IGFkb3B0TlMoW1tQbGF0Zm9ybU5TVGV4
dFRhYmxlQmxvY2sgYWxsb2NdIGluaXRXaXRoVGFibGU6dGFibGUgc3RhcnRpbmdSb3c6cm93TnVt
YmVyIHJvd1NwYW46cm93U3BhbiBzdGFydGluZ0NvbHVtbjpjb2x1bW5OdW1iZXIgY29sdW1uU3Bh
bjpjb2xTcGFuXSk7CiAgICAgaWYgKHRhYmxlQ2VsbEVsZW1lbnQpIHsKLSAgICAgICAgU3RyaW5n
IHZlcnRpY2FsQWxpZ24gPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZSgqY29yZSh0YWJs
ZUNlbGxFbGVtZW50KSwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduKTsKLSAgICAgICAgX2ZpbGxJ
bkJsb2NrKGJsb2NrLmdldCgpLCB0YWJsZUNlbGxFbGVtZW50LCBjb2xvciwgY2VsbFNwYWNpbmdW
YWwgLyAyLCAwLCBOTyk7CisgICAgICAgIEVsZW1lbnQmIGNvcmVUYWJsZUNlbGxFbGVtZW50ID0g
KmNvcmUodGFibGVDZWxsRWxlbWVudCk7CisgICAgICAgIAorICAgICAgICBTdHJpbmcgdmVydGlj
YWxBbGlnbiA9IF9jYWNoZXMtPnByb3BlcnR5VmFsdWVGb3JOb2RlKGNvcmVUYWJsZUNlbGxFbGVt
ZW50LCBDU1NQcm9wZXJ0eVZlcnRpY2FsQWxpZ24pOworICAgICAgICAKKyAgICAgICAgX2ZpbGxJ
bkJsb2NrKGJsb2NrLmdldCgpLCBjb3JlVGFibGVDZWxsRWxlbWVudCwgY29sb3IsIGNlbGxTcGFj
aW5nVmFsIC8gMiwgMCwgTk8pOwogICAgICAgICBpZiAodmVydGljYWxBbGlnbiA9PSAibWlkZGxl
IikKICAgICAgICAgICAgIFtibG9jayBzZXRWZXJ0aWNhbEFsaWdubWVudDpOU1RleHRCbG9ja01p
ZGRsZUFsaWdubWVudF07CiAgICAgICAgIGVsc2UgaWYgKHZlcnRpY2FsQWxpZ24gPT0gImJvdHRv
bSIpCkBAIC0xOTA0LDggKzE5MDQsOCBAQCBCT09MIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxl
bWVudChET01FCiAgICAgaWYgKCFlbGVtZW50KQogICAgICAgICByZXR1cm4gTk87CiAgICAgQk9P
TCByZXR2YWwgPSBZRVM7Ci0gICAgQk9PTCBpc0Jsb2NrTGV2ZWwgPSBfZWxlbWVudElzQmxvY2tM
ZXZlbChlbGVtZW50KTsKICAgICBFbGVtZW50JiBjb3JlRWxlbWVudCA9ICpjb3JlKGVsZW1lbnQp
OworICAgIEJPT0wgaXNCbG9ja0xldmVsID0gX2NhY2hlcy0+aXNCbG9ja0VsZW1lbnQoY29yZUVs
ZW1lbnQpOwogICAgIFN0cmluZyBkaXNwbGF5VmFsdWUgPSBfY2FjaGVzLT5wcm9wZXJ0eVZhbHVl
Rm9yTm9kZShjb3JlRWxlbWVudCwgQ1NTUHJvcGVydHlEaXNwbGF5KTsKICAgICBpZiAoaXNCbG9j
a0xldmVsKQogICAgICAgICBbX3dyaXRpbmdEaXJlY3Rpb25BcnJheSByZW1vdmVBbGxPYmplY3Rz
XTsKQEAgLTE5MjQsMTIgKzE5MjQsMTIgQEAgQk9PTCBIVE1MQ29udmVydGVyOjpfcHJvY2Vzc0Vs
ZW1lbnQoRE9NRQogICAgICAgICB9CiAgICAgfQogICAgIGlmIChkaXNwbGF5VmFsdWUgPT0gInRh
YmxlIiB8fCAoW190ZXh0VGFibGVzIGNvdW50XSA9PSAwICYmIGRpc3BsYXlWYWx1ZSA9PSAidGFi
bGUtcm93LWdyb3VwIikpIHsKLSAgICAgICAgRE9NRWxlbWVudCAqdGFibGVFbGVtZW50ID0gZWxl
bWVudDsKKyAgICAgICAgRWxlbWVudCogdGFibGVFbGVtZW50ID0gJmNvcmVFbGVtZW50OwogICAg
ICAgICBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1yb3ctZ3JvdXAiKSB7CiAgICAgICAgICAg
ICAvLyBJZiB3ZSBhcmUgc3RhcnRpbmcgaW4gbWVkaWFzIHJlcywgdGhlIGZpcnN0IHRoaW5nIHdl
IHNlZSBtYXkgYmUgdGhlIHRib2R5LCBzbyBnbyB1cCB0byB0aGUgdGFibGUKLSAgICAgICAgICAg
IHRhYmxlRWxlbWVudCA9IF9ibG9ja0xldmVsRWxlbWVudEZvck5vZGUoW2VsZW1lbnQgcGFyZW50
Tm9kZV0pOwotICAgICAgICAgICAgaWYgKCF0YWJsZUVsZW1lbnQgfHwgX2NhY2hlcy0+cHJvcGVy
dHlWYWx1ZUZvck5vZGUoKmNvcmUodGFibGVFbGVtZW50KSwgQ1NTUHJvcGVydHlEaXNwbGF5KSAh
PSAidGFibGUiKQotICAgICAgICAgICAgICAgIHRhYmxlRWxlbWVudCA9IGVsZW1lbnQ7CisgICAg
ICAgICAgICB0YWJsZUVsZW1lbnQgPSBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlKGNvcmVFbGVt
ZW50LnBhcmVudE5vZGUoKSk7CisgICAgICAgICAgICBpZiAoIXRhYmxlRWxlbWVudCB8fCBfY2Fj
aGVzLT5wcm9wZXJ0eVZhbHVlRm9yTm9kZSgqdGFibGVFbGVtZW50LCBDU1NQcm9wZXJ0eURpc3Bs
YXkpICE9ICJ0YWJsZSIpCisgICAgICAgICAgICAgICAgdGFibGVFbGVtZW50ID0gJmNvcmVFbGVt
ZW50OwogICAgICAgICB9CiAgICAgICAgIHdoaWxlIChbX3RleHRUYWJsZXMgY291bnRdID4gW190
ZXh0QmxvY2tzIGNvdW50XSkKICAgICAgICAgICAgIF9hZGRUYWJsZUNlbGxGb3JFbGVtZW50KG5p
bCk7CkBAIC0xOTM4LDcgKzE5MzgsNyBAQCBCT09MIEhUTUxDb252ZXJ0ZXI6Ol9wcm9jZXNzRWxl
bWVudChET01FCiAgICAgICAgIFtfdGV4dFRhYmxlRm9vdGVycyBzZXRPYmplY3Q6ZWxlbWVudCBm
b3JLZXk6W05TVmFsdWUgdmFsdWVXaXRoTm9ucmV0YWluZWRPYmplY3Q6W190ZXh0VGFibGVzIGxh
c3RPYmplY3RdXV07CiAgICAgICAgIHJldHZhbCA9IE5POwogICAgIH0gZWxzZSBpZiAoZGlzcGxh
eVZhbHVlID09ICJ0YWJsZS1yb3ciICYmIFtfdGV4dFRhYmxlcyBjb3VudF0gPiAwKSB7Ci0gICAg
ICAgIFBsYXRmb3JtQ29sb3IgKmNvbG9yID0gX2NvbG9yRm9yTm9kZShlbGVtZW50LCBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRDb2xvcik7CisgICAgICAgIFBsYXRmb3JtQ29sb3IgKmNvbG9yID0gX2Nv
bG9yRm9yRWxlbWVudChjb3JlRWxlbWVudCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwog
ICAgICAgICBpZiAoIWNvbG9yKSBjb2xvciA9IFtQbGF0Zm9ybUNvbG9yQ2xhc3MgY2xlYXJDb2xv
cl07CiAgICAgICAgIFtfdGV4dFRhYmxlUm93QmFja2dyb3VuZENvbG9ycyBhZGRPYmplY3Q6Y29s
b3JdOwogICAgIH0gZWxzZSBpZiAoZGlzcGxheVZhbHVlID09ICJ0YWJsZS1jZWxsIikgewpAQCAt
MTk5Niw5ICsxOTk2LDExIEBAIEJPT0wgSFRNTENvbnZlcnRlcjo6X3Byb2Nlc3NFbGVtZW50KERP
TUUKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAoY29yZUVsZW1lbnQu
aGFzVGFnTmFtZShiclRhZykpIHsKLSAgICAgICAgRE9NRWxlbWVudCAqYmxvY2tFbGVtZW50ID0g
X2Jsb2NrTGV2ZWxFbGVtZW50Rm9yTm9kZShbZWxlbWVudCBwYXJlbnROb2RlXSk7Ci0gICAgICAg
IE5TU3RyaW5nICpicmVha0NsYXNzID0gW2VsZW1lbnQgZ2V0QXR0cmlidXRlOkAiY2xhc3MiXSwg
KmJsb2NrVGFnID0gW2Jsb2NrRWxlbWVudCB0YWdOYW1lXTsKLSAgICAgICAgQk9PTCBpc0V4dHJh
QnJlYWsgPSBbQCJBcHBsZS1pbnRlcmNoYW5nZS1uZXdsaW5lIiBpc0VxdWFsVG9TdHJpbmc6YnJl
YWtDbGFzc10sIGJsb2NrRWxlbWVudElzUGFyYWdyYXBoID0gKFtAIlAiIGlzRXF1YWxUb1N0cmlu
ZzpibG9ja1RhZ10gfHwgW0AiTEkiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10gfHwgKFtibG9j
a1RhZyBoYXNQcmVmaXg6QCJIIl0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkpOworICAgICAg
ICBFbGVtZW50KiBibG9ja0VsZW1lbnQgPSBfYmxvY2tMZXZlbEVsZW1lbnRGb3JOb2RlKGNvcmVF
bGVtZW50LnBhcmVudE5vZGUoKSk7CisgICAgICAgIE5TU3RyaW5nICpicmVha0NsYXNzID0gW2Vs
ZW1lbnQgZ2V0QXR0cmlidXRlOkAiY2xhc3MiXTsKKyAgICAgICAgTlNTdHJpbmcgKmJsb2NrVGFn
ID0gYmxvY2tFbGVtZW50ID8gKE5TU3RyaW5nICopYmxvY2tFbGVtZW50LT50YWdOYW1lKCkgOiBu
aWw7CisgICAgICAgIEJPT0wgaXNFeHRyYUJyZWFrID0gW0AiQXBwbGUtaW50ZXJjaGFuZ2UtbmV3
bGluZSIgaXNFcXVhbFRvU3RyaW5nOmJyZWFrQ2xhc3NdOworICAgICAgICBCT09MIGJsb2NrRWxl
bWVudElzUGFyYWdyYXBoID0gKFtAIlAiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10gfHwgW0Ai
TEkiIGlzRXF1YWxUb1N0cmluZzpibG9ja1RhZ10gfHwgKFtibG9ja1RhZyBoYXNQcmVmaXg6QCJI
Il0gJiYgMiA9PSBbYmxvY2tUYWcgbGVuZ3RoXSkpOwogICAgICAgICBpZiAoaXNFeHRyYUJyZWFr
KQogICAgICAgICAgICAgX2ZsYWdzLmhhc1RyYWlsaW5nTmV3bGluZSA9IFlFUzsKICAgICAgICAg
ZWxzZSB7CkBAIC0yMTQ5LDcgKzIxNTEsNyBAQCB2b2lkIEhUTUxDb252ZXJ0ZXI6Ol9leGl0RWxl
bWVudChET01FbGVtCiAgICAgICAgICAgICBbX2F0dHJTdHIgYWRkQXR0cmlidXRlOk5TTGlua0F0
dHJpYnV0ZU5hbWUgdmFsdWU6dXJsID8gKGlkKXVybCA6IChpZCl1cmxTdHJpbmcgcmFuZ2U6cmFu
Z2VdOwogICAgICAgICB9CiAgICAgfQotICAgIGlmICghX2ZsYWdzLnJlYWNoZWRFbmQgJiYgX2Vs
ZW1lbnRJc0Jsb2NrTGV2ZWwoZWxlbWVudCkpIHsKKyAgICBpZiAoIV9mbGFncy5yZWFjaGVkRW5k
ICYmIF9jYWNoZXMtPmlzQmxvY2tFbGVtZW50KGNvcmVFbGVtZW50KSkgewogICAgICAgICBbX3dy
aXRpbmdEaXJlY3Rpb25BcnJheSByZW1vdmVBbGxPYmplY3RzXTsKICAgICAgICAgaWYgKGRpc3Bs
YXlWYWx1ZSA9PSAidGFibGUtY2VsbCIgJiYgW190ZXh0QmxvY2tzIGNvdW50XSA9PSAwKSB7CiAg
ICAgICAgICAgICBfbmV3VGFiRm9yRWxlbWVudChlbGVtZW50KTsK
</data>
<flag name="review"
          id="252160"
          type_id="1"
          status="+"
          setter="andersca"
    />
          </attachment>
      

    </bug>

</bugzilla>