<?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>4925</bug_id>
          
          <creation_ts>2005-09-10 14:56:48 -0700</creation_ts>
          <short_desc>HTMLMapElementImpl::mapMouseEvent can be implemented without a stack</short_desc>
          <delta_ts>2005-11-29 09:02:03 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>19310</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-10 14:56:48 -0700</bug_when>
    <thetext> </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19311</commentid>
    <comment_count>1</comment_count>
      <attachid>3852</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-10 14:57:48 -0700</bug_when>
    <thetext>Created attachment 3852
clean up of html_imageimpl.cpp, including eliminating that unnecessary stack</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19561</commentid>
    <comment_count>2</comment_count>
      <attachid>3852</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-13 03:31:07 -0700</bug_when>
    <thetext>Comment on attachment 3852
clean up of html_imageimpl.cpp, including eliminating that unnecessary stack

Since this patch is all about code cleanup, I&apos;m going to be more nitpicky about
style than I would be ordinarily:

-    if (m_image)
-	 m_image-&gt;deref(this);
+    if (CachedImage *image = m_image)
+	 image-&gt;deref(this);

Is this type of change really a cleanup? It looks less legible and I don&apos;t
think it will help performance in this case, since there&apos;s nothing between one
access to m_image and the next that would force the compiler to reload it. I&apos;d
prefer not to see this type of change unless profiling tools show it matters
(assuming performance was the motivation).

I&apos;m not going to complain about the similar changes to updateFromElement since
they don&apos;t render the code less legible; but they too smack of premature
optimization. I don&apos;t think we should go crazy putting things into local
variables except on code paths where it&apos;s hot enough to matter.


+    CachedImage *newImage = NULL;

Is NULL instead of 0 our official style for null pointers in C++ code? We used
to change stuff in the other direction, from NULL to 0. I&apos;m happy to go with
either style and stick with it, if we codify it in our coding style guidelines.


-    if (attrName == widthAttr ||
-	 attrName == heightAttr ||
-	 attrName == vspaceAttr ||
-	 attrName == hspaceAttr ||
-	 attrName == valignAttr) {
+    if (attrName == widthAttr || attrName == heightAttr || attrName ==
vspaceAttr || attrName == hspaceAttr || attrName == valignAttr) {

Highly debatable that this change (and the similar ones below) is a cleanup,
the former is easier to read for me.


-    if (attr-&gt;name() == altAttr) {
+    const QualifiedName &amp;attrName = attr-&gt;name();
+    if (attrName == altAttr) {

Again probably a premature optimization, but it doesn&apos;t make the code less
readable and makes it a bit more compact, so no objection from me.


in  void HTMLImageElementImpl::parseMappedAttribute(MappedAttributeImpl *attr),
WebKit coding style calls for no braces around the single-line if clauses; I
know this isn&apos;t really something you&apos;re changing, but perhaps worth taking care
of? I admit I doubt the appropriateness of skipping the braces in long if
chains like this where some cases have braces...


+	int width = getAttribute(widthAttr).qstring().toInt(&amp;ok);

Looks like there are tabs in the patch around this line.


I love the replacement of the nodeStack code with traversNextNode. *kisses
fingers into the air* c&apos;est magnifique!

I like all the other code changes besides the ones I complained about.

r- for the tabs, the ImageLoader destructor changes, and combining attr name
tests in ifs in single blocks. But make it an r+ if you fix those or convince
me they are actually good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19564</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-09-13 04:00:35 -0700</bug_when>
    <thetext>I should say that I find this style:

-    if (m_image)
-	 m_image-&gt;deref(this);
+    if (CachedImage *image = m_image)
+	 image-&gt;deref(this);

to be exceptionally ugly.  I don&apos;t think we should do this unless it really matters for performance.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19565</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2005-09-13 04:01:18 -0700</bug_when>
    <thetext>I prefer 0 over NULL, and that is the current convention (well-established for some time) in KHTML.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19581</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-13 09:53:00 -0700</bug_when>
    <thetext>OK.

Re: NULL vs. 0 -- I&apos;ve always used 0 in my own C++ programs. I was actually using NULL because I 
thought Maciej preferred it (seemed to recall it in a patch) and because it gives you an error if you 
accidentally mix it with 0. I&apos;d be happy to go the other way and just use 0 all the time.

Re: variables declared in an if statement: If you guys don&apos;t like it, I&apos;d be happy to forgo it. I think it looks 
great and it&apos;s cool how it scopes the variable so you can&apos;t accidentally use it if it&apos;s null. But this is very 
unimportant to me and it seems we have consensus against it!

Point taken from you two about local variables. While I do think we should go crazy putting things into 
local variables, I don&apos;t feel strongly enough about it to try to convince the two of you; I can&apos;t think of 
any compelling arguments either way.

Re: the long multi-line if statements with || on the end -- I find them hard to read but I see now that 
it&apos;s only my personal preference with no consensus.

Since my editor will never let me type a tab, the tabs must come from copy and paste.

I&apos;ll fix it all and put up a new patch for review some day.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19582</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-13 09:56:37 -0700</bug_when>
    <thetext>Meant to say &quot;gives you an error if you accidentally use it as an int&quot;, but I&apos;m not really sure about that 
anyway.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>21808</commentid>
    <comment_count>7</comment_count>
      <attachid>4311</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-10-11 09:19:44 -0700</bug_when>
    <thetext>Created attachment 4311
patch with Maciej&apos;s requested changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>22056</commentid>
    <comment_count>8</comment_count>
      <attachid>4311</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-10-13 23:28:11 -0700</bug_when>
    <thetext>Comment on attachment 4311
patch with Maciej&apos;s requested changes

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>24833</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-11-29 02:21:05 -0800</bug_when>
    <thetext>No longer merges cleanly... I didn&apos;t bother to fight with it long given that darin is a commiter anyway.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3852</attachid>
            <date>2005-09-10 14:57:48 -0700</date>
            <delta_ts>2005-10-11 09:19:44 -0700</delta_ts>
            <desc>clean up of html_imageimpl.cpp, including eliminating that unnecessary stack</desc>
            <filename>HTMLImageCleanupPatch.txt</filename>
            <type>text/plain</type>
            <size>23967</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjUwCmRpZmYgLXAgLXUgLXIxLjUwIGtodG1sL2h0bWwvaHRtbF9pbWFn
ZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAkzMSBBdWcgMjAwNSAw
NDozODozOCAtMDAwMAkxLjUwCisrKyBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAk0IFNl
cCAyMDA1IDE5OjE4OjM0IC0wMDAwCkBAIC0yMiw2ICsyMiw3IEBACiAgKi8KIAogI2luY2x1ZGUg
Imh0bWwvaHRtbF9pbWFnZWltcGwuaCIKKwogI2luY2x1ZGUgImh0bWwvaHRtbF9mb3JtaW1wbC5o
IgogI2luY2x1ZGUgImh0bWwvaHRtbF9kb2N1bWVudGltcGwuaCIKIApAQCAtNDIsOTggKzQzLDg4
IEBACiAjaW5jbHVkZSAieG1sL0V2ZW50TmFtZXMuaCIKIAogI2luY2x1ZGUgPHFzdHJpbmcuaD4K
LSNpbmNsdWRlIDxxcG9pbnQuaD4KICNpbmNsdWRlIDxxcmVnaW9uLmg+Ci0jaW5jbHVkZSA8cXB0
cnN0YWNrLmg+CiAjaW5jbHVkZSA8cWltYWdlLmg+CiAjaW5jbHVkZSA8cXBvaW50YXJyYXkuaD4K
IAotdXNpbmcgbmFtZXNwYWNlIERPTTsKLXVzaW5nIG5hbWVzcGFjZSBET006OkV2ZW50TmFtZXM7
Ci11c2luZyBuYW1lc3BhY2UgSFRNTE5hbWVzOworLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9V
VF9TQ0hFRFVMSU5HIDEKKwogdXNpbmcgbmFtZXNwYWNlIGtodG1sOwogCi0vLyAjZGVmaW5lIElO
U1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJTkcgMQorbmFtZXNwYWNlIERPTSB7CisKK3VzaW5nIG5h
bWVzcGFjZSBFdmVudE5hbWVzOwordXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKIAogSFRNTElt
YWdlTG9hZGVyOjpIVE1MSW1hZ2VMb2FkZXIoRWxlbWVudEltcGwqIGVsdCkKLTptX2VsZW1lbnQo
ZWx0KSwgbV9pbWFnZSgwKSwgbV9maXJlZExvYWQodHJ1ZSksIG1faW1hZ2VDb21wbGV0ZSh0cnVl
KQorICAgIDogbV9lbGVtZW50KGVsdCksIG1faW1hZ2UoTlVMTCksIG1fZmlyZWRMb2FkKHRydWUp
LCBtX2ltYWdlQ29tcGxldGUodHJ1ZSkKIHsKIH0KIAogSFRNTEltYWdlTG9hZGVyOjp+SFRNTElt
YWdlTG9hZGVyKCkKIHsKLSAgICBpZiAobV9pbWFnZSkKLSAgICAgICAgbV9pbWFnZS0+ZGVyZWYo
dGhpcyk7Ci0gICAgaWYgKG1fZWxlbWVudC0+Z2V0RG9jdW1lbnQoKSkKLSAgICAgICAgbV9lbGVt
ZW50LT5nZXREb2N1bWVudCgpLT5yZW1vdmVJbWFnZSh0aGlzKTsKKyAgICBpZiAoQ2FjaGVkSW1h
Z2UgKmltYWdlID0gbV9pbWFnZSkKKyAgICAgICAgaW1hZ2UtPmRlcmVmKHRoaXMpOworICAgIGlm
IChEb2N1bWVudEltcGwgKmRvYyA9IGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKSkKKyAgICAgICAg
ZG9jLT5yZW1vdmVJbWFnZSh0aGlzKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VMb2FkZXI6OnVwZGF0
ZUZyb21FbGVtZW50KCkKIHsKICAgICAvLyBJZiB3ZSdyZSBub3QgbWFraW5nIHJlbmRlcmVycyBm
b3IgdGhlIHBhZ2UsIHRoZW4gZG9uJ3QgbG9hZCBpbWFnZXMuICBXZSBkb24ndCB3YW50IHRvIHNs
b3cKICAgICAvLyBkb3duIHRoZSByYXcgSFRNTCBwYXJzaW5nIGNhc2UgYnkgbG9hZGluZyBpbWFn
ZXMgd2UgZG9uJ3QgaW50ZW5kIHRvIGRpc3BsYXkuCi0gICAgRG9jdW1lbnRJbXBsKiBkb2N1bWVu
dCA9IGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1
bWVudC0+cmVuZGVyZXIoKSkKKyAgICBFbGVtZW50SW1wbCAqZWxlbSA9IGVsZW1lbnQoKTsKKyAg
ICBEb2N1bWVudEltcGwgKmRvYyA9IGVsZW0tPmdldERvY3VtZW50KCk7CisgICAgaWYgKCFkb2Mg
fHwgIWRvYy0+cmVuZGVyZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQXRvbWljU3RyaW5n
IGF0dHI7Ci0gICAgaWYgKGVsZW1lbnQoKS0+aGFzTG9jYWxOYW1lKG9iamVjdFRhZykpCi0gICAg
ICAgIGF0dHIgPSBlbGVtZW50KCktPmdldEF0dHJpYnV0ZShkYXRhQXR0cik7Ci0gICAgZWxzZQot
ICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5nZXRBdHRyaWJ1dGUoc3JjQXR0cik7CisgICAgQXRv
bWljU3RyaW5nIGF0dHIgPSBlbGVtLT5nZXRBdHRyaWJ1dGUoZWxlbS0+aGFzTG9jYWxOYW1lKG9i
amVjdFRhZykgPyBkYXRhQXR0ciA6IHNyY0F0dHIpOwogICAgIAogICAgIC8vIFRyZWF0IGEgbGFj
ayBvZiBzcmMgb3IgZW1wdHkgc3RyaW5nIGZvciBzcmMgYXMgbm8gaW1hZ2UgYXQgYWxsLgotICAg
IENhY2hlZEltYWdlKiBuZXdJbWFnZSA9IDA7CisgICAgQ2FjaGVkSW1hZ2UgKm5ld0ltYWdlID0g
TlVMTDsKICAgICBpZiAoIWF0dHIuaXNFbXB0eSgpKQotICAgICAgICBuZXdJbWFnZSA9IGVsZW1l
bnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZG9jTG9hZGVyKCktPnJlcXVlc3RJbWFnZShraHRtbDo6cGFy
c2VVUkwoYXR0cikpOworICAgICAgICBuZXdJbWFnZSA9IGRvYy0+ZG9jTG9hZGVyKCktPnJlcXVl
c3RJbWFnZShraHRtbDo6cGFyc2VVUkwoYXR0cikpOwogCi0gICAgaWYgKG5ld0ltYWdlICE9IG1f
aW1hZ2UpIHsKKyAgICBDYWNoZWRJbWFnZSAqb2xkSW1hZ2UgPSBtX2ltYWdlOworICAgIGlmIChu
ZXdJbWFnZSAhPSBvbGRJbWFnZSkgewogI2lmZGVmIElOU1RSVU1FTlRfTEFZT1VUX1NDSEVEVUxJ
TkcKLSAgICAgICAgaWYgKCFkb2N1bWVudC0+b3duZXJFbGVtZW50KCkgJiYgbmV3SW1hZ2UpCi0g
ICAgICAgICAgICBwcmludGYoIkltYWdlIHJlcXVlc3RlZCBhdCAlZFxuIiwgZWxlbWVudCgpLT5n
ZXREb2N1bWVudCgpLT5lbGFwc2VkVGltZSgpKTsKKyAgICAgICAgaWYgKCFkb2MtPm93bmVyRWxl
bWVudCgpICYmIG5ld0ltYWdlKQorICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSByZXF1ZXN0ZWQg
YXQgJWRcbiIsIGRvYy0+ZWxhcHNlZFRpbWUoKSk7CiAjZW5kaWYKICAgICAgICAgbV9maXJlZExv
YWQgPSBmYWxzZTsKICAgICAgICAgbV9pbWFnZUNvbXBsZXRlID0gZmFsc2U7Ci0gICAgICAgIENh
Y2hlZEltYWdlKiBvbGRJbWFnZSA9IG1faW1hZ2U7CiAgICAgICAgIG1faW1hZ2UgPSBuZXdJbWFn
ZTsKLSAgICAgICAgaWYgKG1faW1hZ2UpCi0gICAgICAgICAgICBtX2ltYWdlLT5yZWYodGhpcyk7
CisgICAgICAgIGlmIChuZXdJbWFnZSkKKyAgICAgICAgICAgIG5ld0ltYWdlLT5yZWYodGhpcyk7
CiAgICAgICAgIGlmIChvbGRJbWFnZSkKICAgICAgICAgICAgIG9sZEltYWdlLT5kZXJlZih0aGlz
KTsKICAgICB9Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgIGtodG1sOjpSZW5kZXJJbWFnZSAqcmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxraHRtbDo6UmVuZGVySW1hZ2UqPihlbGVtZW50KCktPnJlbmRl
cmVyKCkpOwotICAgIGlmIChyZW5kZXJlcikKKworICAgIGlmIChSZW5kZXJJbWFnZSAqcmVuZGVy
ZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSAqPihlbGVtLT5yZW5kZXJlcigpKSkKICAgICAg
ICAgcmVuZGVyZXItPnJlc2V0QW5pbWF0aW9uKCk7Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MSW1h
Z2VMb2FkZXI6OmRpc3BhdGNoTG9hZEV2ZW50KCkKIHsKICAgICBpZiAoIW1fZmlyZWRMb2FkKSB7
CiAgICAgICAgIG1fZmlyZWRMb2FkID0gdHJ1ZTsKLSAgICAgICAgaWYgKG1faW1hZ2UtPmlzRXJy
b3JJbWFnZSgpKQotICAgICAgICAgICAgZWxlbWVudCgpLT5kaXNwYXRjaEhUTUxFdmVudChlcnJv
ckV2ZW50LCBmYWxzZSwgZmFsc2UpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbGVtZW50
KCktPmRpc3BhdGNoSFRNTEV2ZW50KGxvYWRFdmVudCwgZmFsc2UsIGZhbHNlKTsKKyAgICAgICAg
ZWxlbWVudCgpLT5kaXNwYXRjaEhUTUxFdmVudChtX2ltYWdlLT5pc0Vycm9ySW1hZ2UoKSA/IGVy
cm9yRXZlbnQgOiBsb2FkRXZlbnQsIGZhbHNlLCBmYWxzZSk7CiAgICAgfQogfQogCi12b2lkIEhU
TUxJbWFnZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjaGVkT2JqZWN0KiBpbWFnZSkKK3ZvaWQg
SFRNTEltYWdlTG9hZGVyOjpub3RpZnlGaW5pc2hlZChDYWNoZWRPYmplY3QgKmltYWdlKQogewog
ICAgIG1faW1hZ2VDb21wbGV0ZSA9IHRydWU7Ci0gICAgRG9jdW1lbnRJbXBsKiBkb2N1bWVudCA9
IGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKTsKLSAgICBpZiAoZG9jdW1lbnQpIHsKLSAgICAgICAg
ZG9jdW1lbnQtPmRpc3BhdGNoSW1hZ2VMb2FkRXZlbnRTb29uKHRoaXMpOworICAgIEVsZW1lbnRJ
bXBsICplbGVtID0gZWxlbWVudCgpOworICAgIGlmIChEb2N1bWVudEltcGwgKmRvYyA9IGVsZW0t
PmdldERvY3VtZW50KCkpIHsKKyAgICAgICAgZG9jLT5kaXNwYXRjaEltYWdlTG9hZEV2ZW50U29v
bih0aGlzKTsKICNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCi0gICAgICAgIGlm
ICghZG9jdW1lbnQtPm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSBs
b2FkZWQgYXQgJWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7
CisgICAgICAgIGlmICghZG9jLT5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgICAgIHByaW50Zigi
SW1hZ2UgbG9hZGVkIGF0ICVkXG4iLCBkb2MtPmVsYXBzZWRUaW1lKCkpOwogI2VuZGlmCiAgICAg
fQotICAgIGlmIChlbGVtZW50KCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgUmVuZGVySW1hZ2Uq
IGltYWdlT2JqID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihlbGVtZW50KCktPnJlbmRlcmVy
KCkpOwotICAgICAgICBpbWFnZU9iai0+c2V0SW1hZ2UobV9pbWFnZSk7Ci0gICAgfQorICAgIGlm
IChSZW5kZXJJbWFnZSAqcmVuZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSAqPihlbGVt
LT5yZW5kZXJlcigpKSkKKyAgICAgICAgcmVuZGVyZXItPnNldEltYWdlKG1faW1hZ2UpOwogfQog
CiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDEsMzUgKzEzMiwzMCBAQCB2b2lkIEhUTUxJbWFn
ZUxvYWRlcjo6bm90aWZ5RmluaXNoZWQoQ2FjCiBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6SFRNTElt
YWdlRWxlbWVudEltcGwoRG9jdW1lbnRQdHIgKmRvYywgSFRNTEZvcm1FbGVtZW50SW1wbCAqZikK
ICAgICA6IEhUTUxFbGVtZW50SW1wbChpbWdUYWcsIGRvYyksIG1faW1hZ2VMb2FkZXIodGhpcyks
IGlzbWFwKGZhbHNlKSwgbV9mb3JtKGYpCiB7Ci0gICAgaWYgKG1fZm9ybSkKLSAgICAgICAgbV9m
b3JtLT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7CisgICAgaWYgKGYpCisgICAgICAgIGYtPnJl
Z2lzdGVySW1nRWxlbWVudCh0aGlzKTsKIH0KIAogSFRNTEltYWdlRWxlbWVudEltcGw6OkhUTUxJ
bWFnZUVsZW1lbnRJbXBsKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZ05hbWUsIERvY3VtZW50UHRy
ICpkb2MpCi0gICAgOiBIVE1MRWxlbWVudEltcGwodGFnTmFtZSwgZG9jKSwgbV9pbWFnZUxvYWRl
cih0aGlzKSwgaXNtYXAoZmFsc2UpLCBtX2Zvcm0oMCkKKyAgICA6IEhUTUxFbGVtZW50SW1wbCh0
YWdOYW1lLCBkb2MpLCBtX2ltYWdlTG9hZGVyKHRoaXMpLCBpc21hcChmYWxzZSksIG1fZm9ybShO
VUxMKQogewogfQogCiBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6fkhUTUxJbWFnZUVsZW1lbnRJbXBs
KCkKIHsKLSAgICBpZiAobV9mb3JtKQotICAgICAgICBtX2Zvcm0tPnJlbW92ZUltZ0VsZW1lbnQo
dGhpcyk7CisgICAgaWYgKEhUTUxGb3JtRWxlbWVudEltcGwgKmYgPSBtX2Zvcm0pCisgICAgICAg
IGYtPnJlbW92ZUltZ0VsZW1lbnQodGhpcyk7CiB9CiAKIGJvb2wgSFRNTEltYWdlRWxlbWVudElt
cGw6Om1hcFRvRW50cnkoY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0ck5hbWUsIE1hcHBlZEF0dHJp
YnV0ZUVudHJ5JiByZXN1bHQpIGNvbnN0CiB7Ci0gICAgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0
ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8Ci0gICAgICAgIGF0dHJOYW1l
ID09IHZzcGFjZUF0dHIgfHwKLSAgICAgICAgYXR0ck5hbWUgPT0gaHNwYWNlQXR0ciB8fAotICAg
ICAgICBhdHRyTmFtZSA9PSB2YWxpZ25BdHRyKSB7CisgICAgaWYgKGF0dHJOYW1lID09IHdpZHRo
QXR0ciB8fCBhdHRyTmFtZSA9PSBoZWlnaHRBdHRyIHx8IGF0dHJOYW1lID09IHZzcGFjZUF0dHIg
fHwgYXR0ck5hbWUgPT0gaHNwYWNlQXR0ciB8fCBhdHRyTmFtZSA9PSB2YWxpZ25BdHRyKSB7CiAg
ICAgICAgIHJlc3VsdCA9IGVVbml2ZXJzYWw7CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9
CiAgICAgCi0gICAgaWYgKGF0dHJOYW1lID09IGJvcmRlckF0dHIgfHwKLSAgICAgICAgYXR0ck5h
bWUgPT0gYWxpZ25BdHRyKSB7Ci0gICAgICAgIHJlc3VsdCA9IGVSZXBsYWNlZDsgLy8gU2hhcmVk
IHdpdGggZW1iZWRzIGFuZCBpZnJhbWVzCisgICAgaWYgKGF0dHJOYW1lID09IGJvcmRlckF0dHIg
fHwgYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7CisgICAgICAgIHJlc3VsdCA9IGVSZXBsYWNlZDsg
Ly8gU2hhcmVkIHdpdGggZW1iZWQgYW5kIGlmcmFtZSBlbGVtZW50cy4KICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIH0KIApAQCAtMTc4LDE1ICsxNjQsMTYgQEAgYm9vbCBIVE1MSW1hZ2VFbGVt
ZW50SW1wbDo6bWFwVG9FbnRyeShjbwogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewotICAgIGlmIChh
dHRyLT5uYW1lKCkgPT0gYWx0QXR0cikgeworICAgIGNvbnN0IFF1YWxpZmllZE5hbWUgJmF0dHJO
YW1lID0gYXR0ci0+bmFtZSgpOworICAgIGlmIChhdHRyTmFtZSA9PSBhbHRBdHRyKSB7CiAgICAg
ICAgIGlmIChtX3JlbmRlcikgc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihtX3JlbmRlciktPnVw
ZGF0ZUFsdFRleHQoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyKSB7
CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBzcmNBdHRyKSB7CiAgICAgICAgIG1faW1hZ2VM
b2FkZXIudXBkYXRlRnJvbUVsZW1lbnQoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSB3aWR0aEF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHdpZHRoQXR0cikgewog
ICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfV0lEVEgsIGF0dHItPnZhbHVlKCkp
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IGhlaWdodEF0dHIpIHsKKyAgICB9IGVs
c2UgaWYgKGF0dHJOYW1lID09IGhlaWdodEF0dHIpIHsKICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0
dHIsIENTU19QUk9QX0hFSUdIVCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gYm9yZGVyQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYm9y
ZGVyQXR0cikgewogICAgICAgICAvLyBib3JkZXI9Im5vYm9yZGVyIiAtPiBib3JkZXI9IjAiCiAg
ICAgICAgIGlmKGF0dHItPnZhbHVlKCkudG9JbnQoKSkgewogICAgICAgICAgICAgYWRkQ1NTTGVu
Z3RoKGF0dHIsIENTU19QUk9QX0JPUkRFUl9XSURUSCwgYXR0ci0+dmFsdWUoKSk7CkBAIC0xOTUs
MTcgKzE4MiwxNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0CiAg
ICAgICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9CT1JERVJfQk9UVE9NX1NU
WUxFLCBDU1NfVkFMX1NPTElEKTsKICAgICAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0dHIsIENT
U19QUk9QX0JPUkRFUl9MRUZUX1NUWUxFLCBDU1NfVkFMX1NPTElEKTsKICAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHZzcGFjZUF0dHIpIHsKKyAgICB9IGVsc2UgaWYg
KGF0dHJOYW1lID09IHZzcGFjZUF0dHIpIHsKICAgICAgICAgYWRkQ1NTTGVuZ3RoKGF0dHIsIENT
U19QUk9QX01BUkdJTl9UT1AsIGF0dHItPnZhbHVlKCkpOwogICAgICAgICBhZGRDU1NMZW5ndGgo
YXR0ciwgQ1NTX1BST1BfTUFSR0lOX0JPVFRPTSwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gaHNwYWNlQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5h
bWUgPT0gaHNwYWNlQXR0cikgewogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1Bf
TUFSR0lOX0xFRlQsIGF0dHItPnZhbHVlKCkpOwogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwg
Q1NTX1BST1BfTUFSR0lOX1JJR0hULCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBhbGlnbkF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IGFs
aWduQXR0cikgewogICAgICAgICBhZGRIVE1MQWxpZ25tZW50KGF0dHIpOwotICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IHZhbGlnbkF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1l
ID09IHZhbGlnbkF0dHIpIHsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1Bf
VkVSVElDQUxfQUxJR04sIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IHVzZW1hcEF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IHVzZW1hcEF0
dHIpIHsKICAgICAgICAgaWYgKGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKClbMF0gPT0gJyMnKQog
ICAgICAgICAgICAgdXNlbWFwID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgZWxzZSB7CkBAIC0y
MTUsMjMgKzIwMiwxNyBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
CiAgICAgICAgICAgICB1c2VtYXAgPSB1cmw7CiAgICAgICAgIH0KICAgICAgICAgbV9pc0xpbmsg
PSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gaXNtYXBB
dHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBpc21hcEF0dHIpIHsKICAgICAgICAg
aXNtYXAgPSB0cnVlOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IG9uYWJvcnRBdHRy
KSB7Ci0gICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGFib3J0RXZlbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGdldERvY3VtZW50KCktPmNyZWF0ZUhUTUxFdmVudExpc3RlbmVy
KGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gb25lcnJvckF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoZXJy
b3JFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3Jl
YXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKLSAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmxvYWRBdHRyKSB7Ci0gICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKGxvYWRFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Z2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3Ry
aW5nKCksIHRoaXMpKTsKLSAgICB9Ci0jaWYgQVBQTEVfQ0hBTkdFUwotICAgIGVsc2UgaWYgKGF0
dHItPm5hbWUoKSA9PSBjb21wb3NpdGVBdHRyKQorICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0g
b25hYm9ydEF0dHIpIHsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVuZXIoYWJvcnRFdmVudCwg
Z2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3Ry
aW5nKCksIHRoaXMpKTsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IG9uZXJyb3JBdHRyKSB7
CisgICAgICAgIHNldEhUTUxFdmVudExpc3RlbmVyKGVycm9yRXZlbnQsIGdldERvY3VtZW50KCkt
PmNyZWF0ZUhUTUxFdmVudExpc3RlbmVyKGF0dHItPnZhbHVlKCkucXN0cmluZygpLCB0aGlzKSk7
CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmxvYWRBdHRyKSB7CisgICAgICAgIHNldEhU
TUxFdmVudExpc3RlbmVyKGxvYWRFdmVudCwgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50
TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICB9IGVsc2UgaWYg
KGF0dHJOYW1lID09IGNvbXBvc2l0ZUF0dHIpIHsKICAgICAgICAgX2NvbXBvc2l0ZU9wZXJhdG9y
ID0gYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCk7Ci0jZW5kaWYKLSAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gbmFtZUF0dHIpIHsKKyAgICB9IGVsc2UgaWYgKGF0dHJOYW1lID09IG5hbWVBdHRy
KSB7CiAgICAgICAgIERPTVN0cmluZyBuZXdOYW1lQXR0ciA9IGF0dHItPnZhbHVlKCk7CiAgICAg
ICAgIGlmIChpbkRvY3VtZW50KCkgJiYgZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkg
ewogICAgICAgICAgICAgSFRNTERvY3VtZW50SW1wbCAqZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxI
VE1MRG9jdW1lbnRJbXBsICo+KGdldERvY3VtZW50KCkpOwpAQCAtMjQ4LDcgKzIyOSw3IEBAIERP
TVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6YWx0VGV4dCgKICAgICAvLyBsZXRzIGZpZ3Vy
ZSBvdXQgdGhlIGFsdCB0ZXh0Li4gbWFnaWMgc3R1ZmYKICAgICAvLyBodHRwOi8vd3d3LnczLm9y
Zy9UUi8xOTk4L1JFQy1odG1sNDAtMTk5ODA0MjQvYXBwZW5kaXgvbm90ZXMuaHRtbCNhbHRnZW4K
ICAgICAvLyBhbHNvIGhlYXZpbHkgZGlzY3Vzc2VkIGJ5IEhpeGllIG9uIGJ1Z3ppbGxhCi0gICAg
RE9NU3RyaW5nIGFsdChnZXRBdHRyaWJ1dGUoYWx0QXR0cikpOworICAgIERPTVN0cmluZyBhbHQg
PSBnZXRBdHRyaWJ1dGUoYWx0QXR0cik7CiAgICAgLy8gZmFsbCBiYWNrIHRvIHRpdGxlIGF0dHJp
YnV0ZQogICAgIGlmIChhbHQuaXNOdWxsKCkpCiAgICAgICAgIGFsdCA9IGdldEF0dHJpYnV0ZSh0
aXRsZUF0dHIpOwpAQCAtMjY0LDI4ICsyNDUsMjQgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50SW1w
bDo6YXR0YWNoKCkKIHsKICAgICBIVE1MRWxlbWVudEltcGw6OmF0dGFjaCgpOwogCi0gICAgaWYg
KHJlbmRlcmVyKCkpIHsKLSAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlT2JqID0gc3RhdGljX2Nh
c3Q8UmVuZGVySW1hZ2UqPihyZW5kZXJlcigpKTsKLSAgICAgICAgaW1hZ2VPYmotPnNldEltYWdl
KG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSk7Ci0gICAgfQorICAgIGlmIChSZW5kZXJJbWFnZSAqcmVu
ZGVyZXIgPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSAqPihtX3JlbmRlcikpCisgICAgICAgIHJl
bmRlcmVyLT5zZXRJbWFnZShtX2ltYWdlTG9hZGVyLmltYWdlKCkpOwogfQogCiB2b2lkIEhUTUxJ
bWFnZUVsZW1lbnRJbXBsOjppbnNlcnRlZEludG9Eb2N1bWVudCgpCiB7Ci0gICAgaWYgKGdldERv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50SW1wbCAq
ZG9jdW1lbnQgPSBzdGF0aWNfY2FzdDxIVE1MRG9jdW1lbnRJbXBsICo+KGdldERvY3VtZW50KCkp
OwotICAgICAgICBkb2N1bWVudC0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICB9Cisg
ICAgRG9jdW1lbnRJbXBsICpkb2MgPSBnZXREb2N1bWVudCgpOworICAgIGlmIChkb2MtPmlzSFRN
TERvY3VtZW50KCkpCisgICAgICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oZG9j
KS0+YWRkTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKIAogICAgIEhUTUxFbGVtZW50SW1wbDo6aW5z
ZXJ0ZWRJbnRvRG9jdW1lbnQoKTsKIH0KIAogdm9pZCBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6cmVt
b3ZlZEZyb21Eb2N1bWVudCgpCiB7Ci0gICAgaWYgKGdldERvY3VtZW50KCktPmlzSFRNTERvY3Vt
ZW50KCkpIHsKLSAgICAgICAgSFRNTERvY3VtZW50SW1wbCAqZG9jdW1lbnQgPSBzdGF0aWNfY2Fz
dDxIVE1MRG9jdW1lbnRJbXBsICo+KGdldERvY3VtZW50KCkpOwotICAgICAgICBkb2N1bWVudC0+
cmVtb3ZlTmFtZWRJdGVtKG9sZE5hbWVBdHRyKTsKLSAgICB9CisgICAgRG9jdW1lbnRJbXBsICpk
b2MgPSBnZXREb2N1bWVudCgpOworICAgIGlmIChkb2MtPmlzSFRNTERvY3VtZW50KCkpCisgICAg
ICAgIHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oZG9jKS0+cmVtb3ZlTmFtZWRJdGVt
KG9sZE5hbWVBdHRyKTsKIAogICAgIEhUTUxFbGVtZW50SW1wbDo6cmVtb3ZlZEZyb21Eb2N1bWVu
dCgpOwogfQpAQCAtMjk0LDY3ICsyNzEsNTUgQEAgbG9uZyBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6
d2lkdGgoYm9vbCBpZwogewogICAgIGlmICghbV9yZW5kZXIpIHsKIAkvLyBjaGVjayB0aGUgYXR0
cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2YWx1ZQotCURPTTo6RE9NU3RyaW5n
IGF0dHJXaWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwogCWJvb2wgb2s7Ci0JbG9uZyB3
aWR0aCA9IGF0dHJXaWR0aC5xc3RyaW5nKCkudG9Mb25nKCZvayk7Ci0JaWYgKG9rKSB7Ci0JICBy
ZXR1cm4gd2lkdGg7Ci0JfQorCWludCB3aWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpLnFz
dHJpbmcoKS50b0ludCgmb2spOworCWlmIChvaykKKyAgICAgICAgICAgIHJldHVybiB3aWR0aDsK
ICAgICB9CiAKLSAgICBET006OkRvY3VtZW50SW1wbCogZG9jaW1wbCA9IGdldERvY3VtZW50KCk7
Ci0gICAgaWYgKGRvY2ltcGwpIHsKKyAgICBpZiAoRG9jdW1lbnRJbXBsICpkb2MgPSBnZXREb2N1
bWVudCgpKSB7CiAJaWYgKGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKLSAgICAgICAgICAgIGRv
Y2ltcGwtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOworICAgICAgICAg
ICAgZG9jLT51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgZG9jaW1wbC0+dXBkYXRlTGF5b3V0KCk7CisgICAgICAgICAgICBk
b2MtPnVwZGF0ZUxheW91dCgpOwogICAgIH0KIAotICAgIGlmICghbV9yZW5kZXIpIHsKLQlyZXR1
cm4gMDsKLSAgICB9CiAKLSAgICByZXR1cm4gbV9yZW5kZXItPmNvbnRlbnRXaWR0aCgpOworICAg
IFJlbmRlck9iamVjdCAqcmVuZGVyZXIgPSBtX3JlbmRlcjsKKyAgICByZXR1cm4gcmVuZGVyZXIg
PyByZW5kZXJlci0+Y29udGVudFdpZHRoKCkgOiAwOwogfQogCiBsb25nIEhUTUxJbWFnZUVsZW1l
bnRJbXBsOjpoZWlnaHQoYm9vbCBpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpIGNvbnN0CiB7CiAg
ICAgaWYgKCFtX3JlbmRlcikgewogCS8vIGNoZWNrIHRoZSBhdHRyaWJ1dGUgZmlyc3QgZm9yIGFu
IGV4cGxpY2l0IHBpeGVsIHZhbHVlCi0JRE9NOjpET01TdHJpbmcgYXR0ckhlaWdodCA9IGdldEF0
dHJpYnV0ZShoZWlnaHRBdHRyKTsKIAlib29sIG9rOwotCWxvbmcgaGVpZ2h0ID0gYXR0ckhlaWdo
dC5xc3RyaW5nKCkudG9Mb25nKCZvayk7Ci0JaWYgKG9rKSB7Ci0JICByZXR1cm4gaGVpZ2h0Owot
CX0KKwlpbnQgaGVpZ2h0ID0gZ2V0QXR0cmlidXRlKGhlaWdodEF0dHIpLnFzdHJpbmcoKS50b0lu
dCgmb2spOworCWlmIChvaykKKyAgICAgICAgICAgIHJldHVybiBoZWlnaHQ7CiAgICAgfQogCi0g
ICAgRE9NOjpEb2N1bWVudEltcGwqIGRvY2ltcGwgPSBnZXREb2N1bWVudCgpOwotICAgIGlmIChk
b2NpbXBsKSB7CisgICAgaWYgKERvY3VtZW50SW1wbCAqZG9jID0gZ2V0RG9jdW1lbnQoKSkgewog
CWlmIChpZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMpCi0gICAgICAgICAgICBkb2NpbXBsLT51cGRh
dGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICAgICAgICAgIGRvYy0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGRvY2ltcGwtPnVwZGF0ZUxheW91dCgpOworICAgICAgICAgICAgZG9jLT51cGRhdGVM
YXlvdXQoKTsKICAgICB9CiAKLSAgICBpZiAoIW1fcmVuZGVyKSB7Ci0JcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fcmVuZGVyLT5jb250ZW50SGVpZ2h0KCk7CisgICAgUmVuZGVyT2Jq
ZWN0ICpyZW5kZXJlciA9IG1fcmVuZGVyOworICAgIHJldHVybiByZW5kZXJlciA/IHJlbmRlcmVy
LT5jb250ZW50SGVpZ2h0KCkgOiAwOwogfQogCiBRSW1hZ2UgSFRNTEltYWdlRWxlbWVudEltcGw6
OmN1cnJlbnRJbWFnZSgpIGNvbnN0CiB7Ci0gICAgUmVuZGVySW1hZ2UgKnIgPSBzdGF0aWNfY2Fz
dDxSZW5kZXJJbWFnZSo+KHJlbmRlcmVyKCkpOwotICAgIGlmIChyKQorICAgIGlmIChSZW5kZXJJ
bWFnZSAqciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlICo+KHJlbmRlcmVyKCkpKQogICAgICAg
ICByZXR1cm4gci0+cGl4bWFwKCkuY29udmVydFRvSW1hZ2UoKTsKICAgICByZXR1cm4gUUltYWdl
KCk7CiB9CiAKIGJvb2wgSFRNTEltYWdlRWxlbWVudEltcGw6OmlzVVJMQXR0cmlidXRlKEF0dHJp
YnV0ZUltcGwgKmF0dHIpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIChhdHRyLT5uYW1lKCkgPT0gc3Jj
QXR0ciB8fCAoYXR0ci0+bmFtZSgpID09IHVzZW1hcEF0dHIgJiYgYXR0ci0+dmFsdWUoKS5kb21T
dHJpbmcoKVswXSAhPSAnIycpKTsKKyAgICByZXR1cm4gYXR0ci0+bmFtZSgpID09IHNyY0F0dHIg
fHwgKGF0dHItPm5hbWUoKSA9PSB1c2VtYXBBdHRyICYmIGF0dHItPnZhbHVlKCkuZG9tU3RyaW5n
KClbMF0gIT0gJyMnKTsKIH0KIAogRE9NU3RyaW5nIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpuYW1l
KCkgY29uc3QKQEAgLTQ5OSw2NyArNDY0LDQ1IEBAIEhUTUxNYXBFbGVtZW50SW1wbDo6SFRNTE1h
cEVsZW1lbnRJbXBsKEQKIAogSFRNTE1hcEVsZW1lbnRJbXBsOjp+SFRNTE1hcEVsZW1lbnRJbXBs
KCkKIHsKLSAgICBpZiAoZ2V0RG9jdW1lbnQoKSkKLSAgICAgICAgZ2V0RG9jdW1lbnQoKS0+cmVt
b3ZlSW1hZ2VNYXAodGhpcyk7CisgICAgaWYgKERvY3VtZW50SW1wbCAqZG9jID0gZ2V0RG9jdW1l
bnQoKSkKKyAgICAgICAgZG9jLT5yZW1vdmVJbWFnZU1hcCh0aGlzKTsKIH0KIAogYm9vbCBIVE1M
TWFwRWxlbWVudEltcGw6OmNoZWNrRFREKGNvbnN0IE5vZGVJbXBsKiBuZXdDaGlsZCkKIHsKLSAg
ICAvLyBGSVhNRTogVGhpcyBzZWVtcyByZWFsbHkgb2RkLCBhbGxvd2luZyBvbmx5IGJsb2NrcyBp
bnNpZGUgbWFwLgotICAgIHJldHVybiBuZXdDaGlsZC0+aGFzVGFnTmFtZShhcmVhVGFnKSB8fCBu
ZXdDaGlsZC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpIHx8Ci0gICAgICAgICAgIGluQmxvY2tUYWdM
aXN0KG5ld0NoaWxkKTsKLX0KLQotYm9vbAotSFRNTE1hcEVsZW1lbnRJbXBsOjptYXBNb3VzZUV2
ZW50KGludCB4XywgaW50IHlfLCBpbnQgd2lkdGhfLCBpbnQgaGVpZ2h0XywKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvKQotewot
ICAgIC8vY291dCA8PCAibWFwOm1hcE1vdXNlRXZlbnQgIiA8PCBlbmRsOwotICAgIC8vY291dCA8
PCB4XyA8PCAiICIgPDwgeV8gPDwiICI8PCB3aWR0aF8gPDwiICI8PCBoZWlnaHRfIDw8IGVuZGw7
Ci0gICAgUVB0clN0YWNrPE5vZGVJbXBsPiBub2RlU3RhY2s7Ci0KLSAgICBOb2RlSW1wbCAqY3Vy
cmVudCA9IGZpcnN0Q2hpbGQoKTsKLSAgICB3aGlsZSAoMSkgewotICAgICAgICBpZiAoIWN1cnJl
bnQpIHsKLSAgICAgICAgICAgIGlmKG5vZGVTdGFjay5pc0VtcHR5KCkpIGJyZWFrOwotICAgICAg
ICAgICAgY3VycmVudCA9IG5vZGVTdGFjay5wb3AoKTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBj
dXJyZW50LT5uZXh0U2libGluZygpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgCi0gICAgICAgIGlmIChjdXJyZW50LT5oYXNUYWdOYW1lKGFyZWFUYWcpKSB7Ci0g
ICAgICAgICAgICAvL2NvdXQgPDwgImFyZWEgZm91bmQgIiA8PCBlbmRsOwotICAgICAgICAgICAg
SFRNTEFyZWFFbGVtZW50SW1wbCogYXJlYSA9IHN0YXRpY19jYXN0PEhUTUxBcmVhRWxlbWVudElt
cGwqPihjdXJyZW50KTsKLSAgICAgICAgICAgIGlmIChhcmVhLT5tYXBNb3VzZUV2ZW50KHhfLHlf
LHdpZHRoXyxoZWlnaHRfLCBpbmZvKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICAgfQotICAgICAgICAKLSAgICAgICAgTm9kZUltcGwgKmNoaWxkID0gY3VycmVudC0+Zmly
c3RDaGlsZCgpOwotICAgICAgICBpZiAoY2hpbGQpIHsKLSAgICAgICAgICAgIG5vZGVTdGFjay5w
dXNoKGN1cnJlbnQpOwotICAgICAgICAgICAgY3VycmVudCA9IGNoaWxkOwotICAgICAgICB9Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LT5uZXh0U2libGluZygp
OwotICAgIH0KKyAgICAvLyBGSVhNRTogVGhpcyBzZWVtcyByZWFsbHkgb2RkLCBhbGxvd2luZyBv
bmx5IGJsb2NrcyBpbnNpZGUgbWFwIGVsZW1lbnRzLgorICAgIHJldHVybiBuZXdDaGlsZC0+aGFz
VGFnTmFtZShhcmVhVGFnKSB8fCBuZXdDaGlsZC0+aGFzVGFnTmFtZShzY3JpcHRUYWcpIHx8IGlu
QmxvY2tUYWdMaXN0KG5ld0NoaWxkKTsKK30KIAorYm9vbCBIVE1MTWFwRWxlbWVudEltcGw6Om1h
cE1vdXNlRXZlbnQoaW50IHgsIGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIFJlbmRlck9i
amVjdDo6Tm9kZUluZm8mIGluZm8pCit7CisgICAgTm9kZUltcGwgKm5vZGUgPSB0aGlzOworICAg
IHdoaWxlICgobm9kZSA9IG5vZGUtPnRyYXZlcnNlTmV4dE5vZGUodGhpcykpKQorICAgICAgICBp
ZiAobm9kZS0+aGFzVGFnTmFtZShhcmVhVGFnKSkKKyAgICAgICAgICAgIGlmIChzdGF0aWNfY2Fz
dDxIVE1MQXJlYUVsZW1lbnRJbXBsICo+KG5vZGUpLT5tYXBNb3VzZUV2ZW50KHgsIHksIHdpZHRo
LCBoZWlnaHQsIGluZm8pKQorICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgIHJldHVy
biBmYWxzZTsKIH0KIAogdm9pZCBIVE1MTWFwRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBpZEF0dHIgfHwgYXR0ci0+bmFtZSgpID09IG5hbWVBdHRyKSB7Ci0gICAgICAgIGlmIChhdHRy
LT5uYW1lKCkgPT0gaWRBdHRyKSB7Ci0gICAgICAgICAgICAvLyBNdXN0IGNhbGwgYmFzZSBjbGFz
cyBzbyB0aGF0IGhhc0lEIGJpdCBnZXRzIHNldC4KKyAgICBjb25zdCBRdWFsaWZpZWROYW1lICZh
dHRyTmFtZSA9IGF0dHItPm5hbWUoKTsKKyAgICBpZiAoYXR0ck5hbWUgPT0gaWRBdHRyIHx8IGF0
dHJOYW1lID09IG5hbWVBdHRyKSB7CisgICAgICAgIERvY3VtZW50SW1wbCAqZG9jID0gZ2V0RG9j
dW1lbnQoKTsKKyAgICAgICAgaWYgKGF0dHJOYW1lID09IGlkQXR0cikgeworICAgICAgICAgICAg
Ly8gQ2FsbCBiYXNlIGNsYXNzIHNvIHRoYXQgaGFzSUQgYml0IGdldHMgc2V0LgogICAgICAgICAg
ICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKLSAgICAgICAg
ICAgIGlmIChnZXREb2N1bWVudCgpLT5odG1sTW9kZSgpICE9IERvY3VtZW50SW1wbDo6WEh0bWwp
CisgICAgICAgICAgICBpZiAoZG9jLT5odG1sTW9kZSgpICE9IERvY3VtZW50SW1wbDo6WEh0bWwp
CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGdldERvY3VtZW50
KCktPnJlbW92ZUltYWdlTWFwKHRoaXMpOwotICAgICAgICBtX25hbWUgPSBhdHRyLT52YWx1ZSgp
OwotICAgICAgICBpZiAobV9uYW1lLmxlbmd0aCgpICE9IDAgJiYgbV9uYW1lWzBdID09ICcjJykK
LSAgICAgICAgICAgIG1fbmFtZS5yZW1vdmUoMCwgMSk7Ci0gICAgICAgIGdldERvY3VtZW50KCkt
PmFkZEltYWdlTWFwKHRoaXMpOworICAgICAgICBkb2MtPnJlbW92ZUltYWdlTWFwKHRoaXMpOwor
ICAgICAgICBET01TdHJpbmcgbWFwTmFtZSA9IGF0dHItPnZhbHVlKCk7CisgICAgICAgIGlmICht
YXBOYW1lWzBdID09ICcjJykgeworICAgICAgICAgICAgbWFwTmFtZSA9IG1hcE5hbWUuY29weSgp
OworICAgICAgICAgICAgbWFwTmFtZS5yZW1vdmUoMCwgMSk7CisgICAgICAgIH0KKyAgICAgICAg
bV9uYW1lID0gbWFwTmFtZTsKKyAgICAgICAgZG9jLT5hZGRJbWFnZU1hcCh0aGlzKTsKICAgICB9
IGVsc2UKICAgICAgICAgSFRNTEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRy
KTsKIH0KQEAgLTU4NCwxNSArNTI3LDE2IEBAIHZvaWQgSFRNTE1hcEVsZW1lbnRJbXBsOjpzZXRO
YW1lKGNvbnN0IEQKIEhUTUxBcmVhRWxlbWVudEltcGw6OkhUTUxBcmVhRWxlbWVudEltcGwoRG9j
dW1lbnRQdHIgKmRvYykKICAgICA6IEhUTUxBbmNob3JFbGVtZW50SW1wbChhcmVhVGFnLCBkb2Mp
CiB7Ci0gICAgbV9jb29yZHM9MDsKKyAgICBtX2Nvb3JkcyA9IE5VTEw7CiAgICAgbV9jb29yZHNM
ZW4gPSAwOwogICAgIG1fc2hhcGUgPSBVbmtub3duOwotICAgIGxhc3RoID0gbGFzdHcgPSAtMTsK
KyAgICBsYXN0aCA9IC0xOworICAgIGxhc3R3ID0gLTE7CiB9CiAKIEhUTUxBcmVhRWxlbWVudElt
cGw6On5IVE1MQXJlYUVsZW1lbnRJbXBsKCkKIHsKLSAgICBpZiAobV9jb29yZHMpIGRlbGV0ZSBb
XSBtX2Nvb3JkczsKKyAgICBkZWxldGUgW10gbV9jb29yZHM7CiB9CiAKIHZvaWQgSFRNTEFyZWFF
bGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlSW1wbCAqYXR0
cikKQEAgLTYwNywzNCArNTUxLDMwIEBAIHZvaWQgSFRNTEFyZWFFbGVtZW50SW1wbDo6cGFyc2VN
YXBwZWRBdHQKICAgICAgICAgZWxzZSBpZiAoIHN0cmNhc2VjbXAoIGF0dHItPnZhbHVlKCksICJy
ZWN0IiApID09IDAgKQogICAgICAgICAgICAgbV9zaGFwZSA9IFJlY3Q7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gY29vcmRzQXR0cikgewotICAgICAgICBpZiAobV9jb29yZHMpIGRl
bGV0ZSBbXSBtX2Nvb3JkczsKKyAgICAgICAgZGVsZXRlIFtdIG1fY29vcmRzOwogICAgICAgICBt
X2Nvb3JkcyA9IGF0dHItPnZhbHVlKCkudG9Db29yZHNBcnJheShtX2Nvb3Jkc0xlbik7CiAgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdGFyZ2V0QXR0cikgewogICAgICAgICBtX2hhc1Rh
cmdldCA9ICFhdHRyLT5pc051bGwoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBh
bHRBdHRyIHx8Ci0gICAgICAgICAgICAgICBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikg
ewotICAgICAgICAvLyBEbyBub3RoaW5nCisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
YWx0QXR0ciB8fCBhdHRyLT5uYW1lKCkgPT0gYWNjZXNza2V5QXR0cikgeworICAgICAgICAvLyBE
byBub3RoaW5nLgogICAgIH0gZWxzZQogICAgICAgICBIVE1MQW5jaG9yRWxlbWVudEltcGw6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwogfQogCi1ib29sIEhUTUxBcmVhRWxlbWVudEltcGw6
Om1hcE1vdXNlRXZlbnQoaW50IHhfLCBpbnQgeV8sIGludCB3aWR0aF8sIGludCBoZWlnaHRfLAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZv
JiBpbmZvKQorYm9vbCBIVE1MQXJlYUVsZW1lbnRJbXBsOjptYXBNb3VzZUV2ZW50KGludCB4LCBp
bnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZW5kZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZv
KQogewotICAgIGJvb2wgaW5zaWRlID0gZmFsc2U7Ci0gICAgaWYgKHdpZHRoXyAhPSBsYXN0dyB8
fCBoZWlnaHRfICE9IGxhc3RoKQotICAgIHsKLSAgICAgICAgcmVnaW9uPWdldFJlZ2lvbih3aWR0
aF8sIGhlaWdodF8pOwotICAgICAgICBsYXN0dz13aWR0aF87IGxhc3RoPWhlaWdodF87Ci0gICAg
fQotICAgIGlmIChyZWdpb24uY29udGFpbnMoUVBvaW50KHhfLHlfKSkpCi0gICAgewotICAgICAg
ICBpbnNpZGUgPSB0cnVlOwotICAgICAgICBpbmZvLnNldElubmVyTm9kZSh0aGlzKTsKLSAgICAg
ICAgaW5mby5zZXRVUkxFbGVtZW50KHRoaXMpOworICAgIGlmICh3aWR0aCAhPSBsYXN0dyB8fCBo
ZWlnaHQgIT0gbGFzdGgpIHsKKyAgICAgICAgcmVnaW9uID0gZ2V0UmVnaW9uKHdpZHRoLCBoZWln
aHQpOworICAgICAgICBsYXN0dyA9IHdpZHRoOworICAgICAgICBsYXN0aCA9IGhlaWdodDsKICAg
ICB9CiAKLSAgICByZXR1cm4gaW5zaWRlOworICAgIGlmICghcmVnaW9uLmNvbnRhaW5zKFFQb2lu
dCh4LCB5KSkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAKKyAgICBpbmZvLnNldElubmVy
Tm9kZSh0aGlzKTsKKyAgICBpbmZvLnNldFVSTEVsZW1lbnQodGhpcyk7CisgICAgcmV0dXJuIHRy
dWU7CiB9CiAKIFFSZWN0IEhUTUxBcmVhRWxlbWVudEltcGw6OmdldFJlY3QoUmVuZGVyT2JqZWN0
KiBvYmopIGNvbnN0CkBAIC02NDYsNDQgKzU4Niw1OSBAQCBRUmVjdCBIVE1MQXJlYUVsZW1lbnRJ
bXBsOjpnZXRSZWN0KFJlbmRlCiAgICAgcmV0dXJuIHJlZ2lvbi5ib3VuZGluZ1JlY3QoKTsKIH0K
IAotUVJlZ2lvbiBIVE1MQXJlYUVsZW1lbnRJbXBsOjpnZXRSZWdpb24oaW50IHdpZHRoXywgaW50
IGhlaWdodF8pIGNvbnN0CitRUmVnaW9uIEhUTUxBcmVhRWxlbWVudEltcGw6OmdldFJlZ2lvbihp
bnQgd2lkdGgsIGludCBoZWlnaHQpIGNvbnN0CiB7Ci0gICAgUVJlZ2lvbiByZWdpb247Ci0gICAg
aWYgKCFtX2Nvb3JkcykKLSAgICAgICAgcmV0dXJuIHJlZ2lvbjsKLQotICAgIC8vIGFkZGVkIGJy
b2tlbiBIVE1MIHN1cHBvcnQgKERpcmspOiBzb21lIHBhZ2VzIG9taXQgdGhlIFNIQVBFCi0gICAg
Ly8gYXR0cmlidXRlLCBzbyB3ZSB0cnkgdG8gZ3Vlc3MgYnkgbG9va2luZyBhdCB0aGUgY29vcmRz
IGNvdW50Ci0gICAgLy8gd2hhdCB0aGUgSFRNTCBhdXRob3IgdHJpZWQgdG8gdGVsbCB1cy4KLQot
ICAgIC8vIGEgUG9seSBuZWVkcyBhdCBsZWFzdCAzIHBvaW50cyAoNiBjb29yZHMpLCBzbyB0aGlz
IGlzIGNvcnJlY3QKLSAgICBpZiAoKG1fc2hhcGU9PVBvbHkgfHwgbV9zaGFwZT09VW5rbm93bikg
JiYgbV9jb29yZHNMZW4gPiA1KSB7Ci0gICAgICAgIC8vIG1ha2Ugc3VyZSBpdHMgZXZlbgotICAg
ICAgICBpbnQgbGVuID0gbV9jb29yZHNMZW4gPj4gMTsKLSAgICAgICAgUVBvaW50QXJyYXkgcG9p
bnRzKGxlbik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbGVuOyArK2kpCi0gICAgICAg
ICAgICBwb2ludHMuc2V0UG9pbnQoaSwgbV9jb29yZHNbKGk8PDEpXS5taW5XaWR0aCh3aWR0aF8p
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fY29vcmRzWyhpPDwxKSsxXS5taW5XaWR0
aChoZWlnaHRfKSk7Ci0gICAgICAgIHJlZ2lvbiA9IFFSZWdpb24ocG9pbnRzKTsKLSAgICB9Ci0g
ICAgZWxzZSBpZiAobV9zaGFwZT09Q2lyY2xlICYmIG1fY29vcmRzTGVuPj0zIHx8IG1fc2hhcGU9
PVVua25vd24gJiYgbV9jb29yZHNMZW4gPT0gMykgewotICAgICAgICBpbnQgciA9IGtNaW4obV9j
b29yZHNbMl0ubWluV2lkdGgod2lkdGhfKSwgbV9jb29yZHNbMl0ubWluV2lkdGgoaGVpZ2h0Xykp
OwotICAgICAgICByZWdpb24gPSBRUmVnaW9uKG1fY29vcmRzWzBdLm1pbldpZHRoKHdpZHRoXykt
ciwKLSAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nvb3Jkc1sxXS5taW5XaWR0aChoZWlnaHRf
KS1yLCAyKnIsIDIqcixRUmVnaW9uOjpFbGxpcHNlKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobV9z
aGFwZT09UmVjdCAmJiBtX2Nvb3Jkc0xlbj49NCB8fCBtX3NoYXBlPT1Vbmtub3duICYmIG1fY29v
cmRzTGVuID09IDQpIHsKLSAgICAgICAgaW50IHgwID0gbV9jb29yZHNbMF0ubWluV2lkdGgod2lk
dGhfKTsKLSAgICAgICAgaW50IHkwID0gbV9jb29yZHNbMV0ubWluV2lkdGgoaGVpZ2h0Xyk7Ci0g
ICAgICAgIGludCB4MSA9IG1fY29vcmRzWzJdLm1pbldpZHRoKHdpZHRoXyk7Ci0gICAgICAgIGlu
dCB5MSA9IG1fY29vcmRzWzNdLm1pbldpZHRoKGhlaWdodF8pOwotICAgICAgICByZWdpb24gPSBR
UmVnaW9uKHgwLHkwLHgxLXgwLHkxLXkwKTsKLSAgICB9Ci0gICAgZWxzZSBpZiAobV9zaGFwZT09
RGVmYXVsdCkKLSAgICAgICAgcmVnaW9uID0gUVJlZ2lvbigwLDAsd2lkdGhfLGhlaWdodF8pOwot
ICAgIC8vIGVsc2UKLSAgICAgICAvLyByZXR1cm4gbnVsbCByZWdpb24KKyAgICBMZW5ndGggKmNv
b3JkcyA9IG1fY29vcmRzOworICAgIGlmICghY29vcmRzKQorICAgICAgICByZXR1cm4gUVJlZ2lv
bigpOworCisgICAgU2hhcGUgc2hhcGUgPSBtX3NoYXBlOworICAgIGludCBjb29yZHNMZW4gPSBt
X2Nvb3Jkc0xlbjsKKworICAgIC8vIElmIGVsZW1lbnQgb21pdHMgdGhlIHNoYXBlIGF0dHJpYnV0
ZSwgc2VsZWN0IHNoYXBlIGJhc2VkIG9uIG51bWJlciBvZiBjb29yZGluYXRlcy4KKyAgICBpZiAo
c2hhcGUgPT0gVW5rbm93bikgeworICAgICAgICBpZiAoY29vcmRzTGVuID09IDMpCisgICAgICAg
ICAgICBzaGFwZSA9IENpcmNsZTsKKyAgICAgICAgZWxzZSBpZiAoY29vcmRzTGVuID09IDQpCisg
ICAgICAgICAgICBzaGFwZSA9IFJlY3Q7CisgICAgICAgIGVsc2UgaWYgKGNvb3Jkc0xlbiA+PSA2
KQorICAgICAgICAgICAgc2hhcGUgPSBQb2x5OworICAgIH0KKworICAgIHN3aXRjaCAoc2hhcGUp
IHsKKyAgICAgICAgY2FzZSBQb2x5OgorICAgICAgICAgICAgaWYgKGNvb3Jkc0xlbiA+PSA2KSB7
CisgICAgICAgICAgICAgICAgaW50IG51bVBvaW50cyA9IGNvb3Jkc0xlbiAvIDI7CisgICAgICAg
ICAgICAgICAgUVBvaW50QXJyYXkgcG9pbnRzKG51bVBvaW50cyk7CisgICAgICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qb2ludHM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAg
cG9pbnRzLnNldFBvaW50KGksIGNvb3Jkc1tpICogMl0ubWluV2lkdGgod2lkdGgpLCBjb29yZHNb
aSAqIDIgKyAxXS5taW5XaWR0aChoZWlnaHQpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVJl
Z2lvbihwb2ludHMpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IGNhc2UgQ2lyY2xlOgorICAgICAgICAgICAgaWYgKGNvb3Jkc0xlbiA+PSAzKSB7CisgICAgICAg
ICAgICAgICAgTGVuZ3RoIHJhZGl1cyA9IGNvb3Jkc1syXTsKKyAgICAgICAgICAgICAgICBpbnQg
ciA9IGtNaW4ocmFkaXVzLm1pbldpZHRoKHdpZHRoKSwgcmFkaXVzLm1pbldpZHRoKGhlaWdodCkp
OworICAgICAgICAgICAgICAgIHJldHVybiBRUmVnaW9uKGNvb3Jkc1swXS5taW5XaWR0aCh3aWR0
aCkgLSByLCBjb29yZHNbMV0ubWluV2lkdGgoaGVpZ2h0KSAtIHIsCisgICAgICAgICAgICAgICAg
ICAgIDIgKiByLCAyICogciwgUVJlZ2lvbjo6RWxsaXBzZSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSZWN0OgorICAgICAgICAgICAgaWYgKGNvb3Jk
c0xlbiA+PSA0KSB7CisgICAgICAgICAgICAgICAgaW50IHgwID0gY29vcmRzWzBdLm1pbldpZHRo
KHdpZHRoKTsKKyAgICAgICAgICAgICAgICBpbnQgeTAgPSBjb29yZHNbMV0ubWluV2lkdGgoaGVp
Z2h0KTsKKyAgICAgICAgICAgICAgICBpbnQgeDEgPSBjb29yZHNbMl0ubWluV2lkdGgod2lkdGgp
OworICAgICAgICAgICAgICAgIGludCB5MSA9IGNvb3Jkc1szXS5taW5XaWR0aChoZWlnaHQpOwor
ICAgICAgICAgICAgICAgIHJldHVybiBRUmVnaW9uKHgwLCB5MCwgeDEgLSB4MCwgeTEgLSB5MCk7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBEZWZhdWx0
OgorICAgICAgICAgICAgcmV0dXJuIFFSZWdpb24oMCwgMCwgd2lkdGgsIGhlaWdodCk7CisgICAg
ICAgIGNhc2UgVW5rbm93bjoKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KIAotICAgIHJldHVy
biByZWdpb247CisgICAgcmV0dXJuIFFSZWdpb24oKTsKIH0KIAogRE9NU3RyaW5nIEhUTUxBcmVh
RWxlbWVudEltcGw6OmFjY2Vzc0tleSgpIGNvbnN0CkBAIC03NjUsMyArNzIwLDUgQEAgdm9pZCBI
VE1MQXJlYUVsZW1lbnRJbXBsOjpzZXRUYXJnZXQoY29ucwogewogICAgIHNldEF0dHJpYnV0ZSh0
YXJnZXRBdHRyLCB2YWx1ZSk7CiB9CisKK30K
</data>
<flag name="review"
          id="555"
          type_id="1"
          status="-"
          setter="mjs"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>4311</attachid>
            <date>2005-10-11 09:19:44 -0700</date>
            <delta_ts>2005-10-13 23:28:11 -0700</delta_ts>
            <desc>patch with Maciej&apos;s requested changes</desc>
            <filename>HTMLImageCleanupPatch2.txt</filename>
            <type>text/plain</type>
            <size>23056</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6
IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwLHYKcmV0cmll
dmluZyByZXZpc2lvbiAxLjUzCmRpZmYgLXAgLXUgLXIxLjUzIGtodG1sL2h0bWwvaHRtbF9pbWFn
ZWltcGwuY3BwCi0tLSBraHRtbC9odG1sL2h0bWxfaW1hZ2VpbXBsLmNwcAk2IE9jdCAyMDA1IDA0
OjEzOjEyIC0wMDAwCTEuNTMKKysrIGtodG1sL2h0bWwvaHRtbF9pbWFnZWltcGwuY3BwCTExIE9j
dCAyMDA1IDE2OjIyOjQ0IC0wMDAwCkBAIC0yMyw2ICsyMyw3IEBACiAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfaW1hZ2VpbXBsLmgiCisKICNpbmNsdWRlICJodG1s
L2h0bWxfZm9ybWltcGwuaCIKICNpbmNsdWRlICJodG1sL2h0bWxfZG9jdW1lbnRpbXBsLmgiCiAK
QEAgLTQzLDIxICs0NCwyMSBAQAogI2luY2x1ZGUgInhtbC9FdmVudE5hbWVzLmgiCiAKICNpbmNs
dWRlIDxxc3RyaW5nLmg+Ci0jaW5jbHVkZSA8cXBvaW50Lmg+CiAjaW5jbHVkZSA8cXJlZ2lvbi5o
PgotI2luY2x1ZGUgPHFwdHJzdGFjay5oPgogI2luY2x1ZGUgPHFpbWFnZS5oPgogI2luY2x1ZGUg
PHFwb2ludGFycmF5Lmg+CiAKLXVzaW5nIG5hbWVzcGFjZSBET007Ci11c2luZyBuYW1lc3BhY2Ug
RE9NOjpFdmVudE5hbWVzOwotdXNpbmcgbmFtZXNwYWNlIEhUTUxOYW1lczsKKy8vICNkZWZpbmUg
SU5TVFJVTUVOVF9MQVlPVVRfU0NIRURVTElORyAxCisKIHVzaW5nIG5hbWVzcGFjZSBraHRtbDsK
IAotLy8gI2RlZmluZSBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HIDEKK25hbWVzcGFjZSBE
T00geworCit1c2luZyBuYW1lc3BhY2UgRXZlbnROYW1lczsKK3VzaW5nIG5hbWVzcGFjZSBIVE1M
TmFtZXM7CiAKIEhUTUxJbWFnZUxvYWRlcjo6SFRNTEltYWdlTG9hZGVyKEVsZW1lbnRJbXBsKiBl
bHQpCi06bV9lbGVtZW50KGVsdCksIG1faW1hZ2UoMCksIG1fZmlyZWRMb2FkKHRydWUpLCBtX2lt
YWdlQ29tcGxldGUodHJ1ZSkKKyAgICA6IG1fZWxlbWVudChlbHQpLCBtX2ltYWdlKDApLCBtX2Zp
cmVkTG9hZCh0cnVlKSwgbV9pbWFnZUNvbXBsZXRlKHRydWUpCiB7CiB9CiAKQEAgLTczLDY4ICs3
NCw2MSBAQCB2b2lkIEhUTUxJbWFnZUxvYWRlcjo6dXBkYXRlRnJvbUVsZW1lbnQoCiB7CiAgICAg
Ly8gSWYgd2UncmUgbm90IG1ha2luZyByZW5kZXJlcnMgZm9yIHRoZSBwYWdlLCB0aGVuIGRvbid0
IGxvYWQgaW1hZ2VzLiAgV2UgZG9uJ3Qgd2FudCB0byBzbG93CiAgICAgLy8gZG93biB0aGUgcmF3
IEhUTUwgcGFyc2luZyBjYXNlIGJ5IGxvYWRpbmcgaW1hZ2VzIHdlIGRvbid0IGludGVuZCB0byBk
aXNwbGF5LgotICAgIERvY3VtZW50SW1wbCogZG9jdW1lbnQgPSBlbGVtZW50KCktPmdldERvY3Vt
ZW50KCk7Ci0gICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnJlbmRlcmVyKCkpCisgICAg
RWxlbWVudEltcGwgKmVsZW0gPSBlbGVtZW50KCk7CisgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBl
bGVtLT5nZXREb2N1bWVudCgpOworICAgIGlmICghZG9jIHx8ICFkb2MtPnJlbmRlcmVyKCkpCiAg
ICAgICAgIHJldHVybjsKIAotICAgIEF0b21pY1N0cmluZyBhdHRyOwotICAgIGlmIChlbGVtZW50
KCktPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpKQotICAgICAgICBhdHRyID0gZWxlbWVudCgpLT5n
ZXRBdHRyaWJ1dGUoZGF0YUF0dHIpOwotICAgIGVsc2UKLSAgICAgICAgYXR0ciA9IGVsZW1lbnQo
KS0+Z2V0QXR0cmlidXRlKHNyY0F0dHIpOworICAgIEF0b21pY1N0cmluZyBhdHRyID0gZWxlbS0+
Z2V0QXR0cmlidXRlKGVsZW0tPmhhc0xvY2FsTmFtZShvYmplY3RUYWcpID8gZGF0YUF0dHIgOiBz
cmNBdHRyKTsKICAgICAKICAgICAvLyBUcmVhdCBhIGxhY2sgb2Ygc3JjIG9yIGVtcHR5IHN0cmlu
ZyBmb3Igc3JjIGFzIG5vIGltYWdlIGF0IGFsbC4KLSAgICBDYWNoZWRJbWFnZSogbmV3SW1hZ2Ug
PSAwOworICAgIENhY2hlZEltYWdlICpuZXdJbWFnZSA9IDA7CiAgICAgaWYgKCFhdHRyLmlzRW1w
dHkoKSkKLSAgICAgICAgbmV3SW1hZ2UgPSBlbGVtZW50KCktPmdldERvY3VtZW50KCktPmRvY0xv
YWRlcigpLT5yZXF1ZXN0SW1hZ2Uoa2h0bWw6OnBhcnNlVVJMKGF0dHIpKTsKKyAgICAgICAgbmV3
SW1hZ2UgPSBkb2MtPmRvY0xvYWRlcigpLT5yZXF1ZXN0SW1hZ2Uoa2h0bWw6OnBhcnNlVVJMKGF0
dHIpKTsKIAotICAgIGlmIChuZXdJbWFnZSAhPSBtX2ltYWdlKSB7CisgICAgQ2FjaGVkSW1hZ2Ug
Km9sZEltYWdlID0gbV9pbWFnZTsKKyAgICBpZiAobmV3SW1hZ2UgIT0gb2xkSW1hZ2UpIHsKICNp
ZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCi0gICAgICAgIGlmICghZG9jdW1lbnQt
Pm93bmVyRWxlbWVudCgpICYmIG5ld0ltYWdlKQotICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSBy
ZXF1ZXN0ZWQgYXQgJWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUo
KSk7CisgICAgICAgIGlmICghZG9jLT5vd25lckVsZW1lbnQoKSAmJiBuZXdJbWFnZSkKKyAgICAg
ICAgICAgIHByaW50ZigiSW1hZ2UgcmVxdWVzdGVkIGF0ICVkXG4iLCBkb2MtPmVsYXBzZWRUaW1l
KCkpOwogI2VuZGlmCiAgICAgICAgIG1fZmlyZWRMb2FkID0gZmFsc2U7CiAgICAgICAgIG1faW1h
Z2VDb21wbGV0ZSA9IGZhbHNlOwotICAgICAgICBDYWNoZWRJbWFnZSogb2xkSW1hZ2UgPSBtX2lt
YWdlOwogICAgICAgICBtX2ltYWdlID0gbmV3SW1hZ2U7Ci0gICAgICAgIGlmIChtX2ltYWdlKQot
ICAgICAgICAgICAgbV9pbWFnZS0+cmVmKHRoaXMpOworICAgICAgICBpZiAobmV3SW1hZ2UpCisg
ICAgICAgICAgICBuZXdJbWFnZS0+cmVmKHRoaXMpOwogICAgICAgICBpZiAob2xkSW1hZ2UpCiAg
ICAgICAgICAgICBvbGRJbWFnZS0+ZGVyZWYodGhpcyk7CiAgICAgfQotI2lmIEFQUExFX0NIQU5H
RVMKLSAgICBraHRtbDo6UmVuZGVySW1hZ2UgKnJlbmRlcmVyID0gc3RhdGljX2Nhc3Q8a2h0bWw6
OlJlbmRlckltYWdlKj4oZWxlbWVudCgpLT5yZW5kZXJlcigpKTsKKworICAgIFJlbmRlckltYWdl
ICpyZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlICo+KGVsZW0tPnJlbmRlcmVyKCkp
OwogICAgIGlmIChyZW5kZXJlcikKICAgICAgICAgcmVuZGVyZXItPnJlc2V0QW5pbWF0aW9uKCk7
Ci0jZW5kaWYKIH0KIAogdm9pZCBIVE1MSW1hZ2VMb2FkZXI6OmRpc3BhdGNoTG9hZEV2ZW50KCkK
IHsKICAgICBpZiAoIW1fZmlyZWRMb2FkICYmIG1faW1hZ2UpIHsKICAgICAgICAgbV9maXJlZExv
YWQgPSB0cnVlOwotICAgICAgICBpZiAobV9pbWFnZS0+aXNFcnJvckltYWdlKCkpCi0gICAgICAg
ICAgICBlbGVtZW50KCktPmRpc3BhdGNoSFRNTEV2ZW50KGVycm9yRXZlbnQsIGZhbHNlLCBmYWxz
ZSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVsZW1lbnQoKS0+ZGlzcGF0Y2hIVE1MRXZl
bnQobG9hZEV2ZW50LCBmYWxzZSwgZmFsc2UpOworICAgICAgICBlbGVtZW50KCktPmRpc3BhdGNo
SFRNTEV2ZW50KG1faW1hZ2UtPmlzRXJyb3JJbWFnZSgpID8gZXJyb3JFdmVudCA6IGxvYWRFdmVu
dCwgZmFsc2UsIGZhbHNlKTsKICAgICB9CiB9CiAKLXZvaWQgSFRNTEltYWdlTG9hZGVyOjpub3Rp
ZnlGaW5pc2hlZChDYWNoZWRPYmplY3QqIGltYWdlKQordm9pZCBIVE1MSW1hZ2VMb2FkZXI6Om5v
dGlmeUZpbmlzaGVkKENhY2hlZE9iamVjdCAqaW1hZ2UpCiB7CiAgICAgbV9pbWFnZUNvbXBsZXRl
ID0gdHJ1ZTsKLSAgICBEb2N1bWVudEltcGwqIGRvY3VtZW50ID0gZWxlbWVudCgpLT5nZXREb2N1
bWVudCgpOwotICAgIGlmIChkb2N1bWVudCkgewotICAgICAgICBkb2N1bWVudC0+ZGlzcGF0Y2hJ
bWFnZUxvYWRFdmVudFNvb24odGhpcyk7CisgICAgRWxlbWVudEltcGwgKmVsZW0gPSBlbGVtZW50
KCk7CisgICAgRG9jdW1lbnRJbXBsICpkb2MgPSBlbGVtLT5nZXREb2N1bWVudCgpOworICAgIGlm
IChkb2MpIHsKKyAgICAgICAgZG9jLT5kaXNwYXRjaEltYWdlTG9hZEV2ZW50U29vbih0aGlzKTsK
ICNpZmRlZiBJTlNUUlVNRU5UX0xBWU9VVF9TQ0hFRFVMSU5HCi0gICAgICAgIGlmICghZG9jdW1l
bnQtPm93bmVyRWxlbWVudCgpKQotICAgICAgICAgICAgcHJpbnRmKCJJbWFnZSBsb2FkZWQgYXQg
JWRcbiIsIGVsZW1lbnQoKS0+Z2V0RG9jdW1lbnQoKS0+ZWxhcHNlZFRpbWUoKSk7CisgICAgICAg
IGlmICghZG9jLT5vd25lckVsZW1lbnQoKSkKKyAgICAgICAgICAgIHByaW50ZigiSW1hZ2UgbG9h
ZGVkIGF0ICVkXG4iLCBkb2MtPmVsYXBzZWRUaW1lKCkpOwogI2VuZGlmCiAgICAgfQotICAgIGlm
IChlbGVtZW50KCktPnJlbmRlcmVyKCkpIHsKLSAgICAgICAgUmVuZGVySW1hZ2UqIGltYWdlT2Jq
ID0gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UqPihlbGVtZW50KCktPnJlbmRlcmVyKCkpOwotICAg
ICAgICBpbWFnZU9iai0+c2V0SW1hZ2UobV9pbWFnZSk7Ci0gICAgfQorICAgIFJlbmRlckltYWdl
ICpyZW5kZXJlciA9IHN0YXRpY19jYXN0PFJlbmRlckltYWdlICo+KGVsZW0tPnJlbmRlcmVyKCkp
OworICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAgcmVuZGVyZXItPnNldEltYWdlKG1faW1hZ2Up
OwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDIsOCArMTM2LDggQEAgdm9pZCBIVE1M
SW1hZ2VMb2FkZXI6Om5vdGlmeUZpbmlzaGVkKENhYwogSFRNTEltYWdlRWxlbWVudEltcGw6OkhU
TUxJbWFnZUVsZW1lbnRJbXBsKERvY3VtZW50UHRyICpkb2MsIEhUTUxGb3JtRWxlbWVudEltcGwg
KmYpCiAgICAgOiBIVE1MRWxlbWVudEltcGwoaW1nVGFnLCBkb2MpLCBtX2ltYWdlTG9hZGVyKHRo
aXMpLCBpc21hcChmYWxzZSksIG1fZm9ybShmKQogewotICAgIGlmIChtX2Zvcm0pCi0gICAgICAg
IG1fZm9ybS0+cmVnaXN0ZXJJbWdFbGVtZW50KHRoaXMpOworICAgIGlmIChmKQorICAgICAgICBm
LT5yZWdpc3RlckltZ0VsZW1lbnQodGhpcyk7CiB9CiAKIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpI
VE1MSW1hZ2VFbGVtZW50SW1wbChjb25zdCBRdWFsaWZpZWROYW1lJiB0YWdOYW1lLCBEb2N1bWVu
dFB0ciAqZG9jKQpAQCAtMTY4LDkgKzE2Miw4IEBAIGJvb2wgSFRNTEltYWdlRWxlbWVudEltcGw6
Om1hcFRvRW50cnkoY28KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICBp
ZiAoYXR0ck5hbWUgPT0gYm9yZGVyQXR0ciB8fAotICAgICAgICBhdHRyTmFtZSA9PSBhbGlnbkF0
dHIpIHsKLSAgICAgICAgcmVzdWx0ID0gZVJlcGxhY2VkOyAvLyBTaGFyZWQgd2l0aCBlbWJlZHMg
YW5kIGlmcmFtZXMKKyAgICBpZiAoYXR0ck5hbWUgPT0gYm9yZGVyQXR0ciB8fCBhdHRyTmFtZSA9
PSBhbGlnbkF0dHIpIHsKKyAgICAgICAgcmVzdWx0ID0gZVJlcGxhY2VkOyAvLyBTaGFyZWQgd2l0
aCBlbWJlZCBhbmQgaWZyYW1lIGVsZW1lbnRzLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg
fQogCkBAIC0xNzksMTUgKzE3MiwxNiBAQCBib29sIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjptYXBU
b0VudHJ5KGNvCiAKIHZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0dHIpCiB7Ci0gICAgaWYgKGF0dHItPm5hbWUoKSA9
PSBhbHRBdHRyKSB7CisgICAgY29uc3QgUXVhbGlmaWVkTmFtZSAmYXR0ck5hbWUgPSBhdHRyLT5u
YW1lKCk7CisgICAgaWYgKGF0dHJOYW1lID09IGFsdEF0dHIpIHsKICAgICAgICAgaWYgKG1fcmVu
ZGVyKSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFnZSo+KG1fcmVuZGVyKS0+dXBkYXRlQWx0VGV4dCgp
OwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIpIHsKKyAgICB9IGVsc2Ug
aWYgKGF0dHJOYW1lID09IHNyY0F0dHIpIHsKICAgICAgICAgbV9pbWFnZUxvYWRlci51cGRhdGVG
cm9tRWxlbWVudCgpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHdpZHRoQXR0cikg
eworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gd2lkdGhBdHRyKSB7CiAgICAgICAgIGFkZENT
U0xlbmd0aChhdHRyLCBDU1NfUFJPUF9XSURUSCwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gaGVpZ2h0QXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5h
bWUgPT0gaGVpZ2h0QXR0cikgewogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1Bf
SEVJR0hULCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBi
b3JkZXJBdHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBib3JkZXJBdHRyKSB7CiAg
ICAgICAgIC8vIGJvcmRlcj0ibm9ib3JkZXIiIC0+IGJvcmRlcj0iMCIKICAgICAgICAgaWYoYXR0
ci0+dmFsdWUoKS50b0ludCgpKSB7CiAgICAgICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NT
X1BST1BfQk9SREVSX1dJRFRILCBhdHRyLT52YWx1ZSgpKTsKQEAgLTE5NiwxNyArMTkwLDE3IEBA
IHZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgICAgIGFk
ZENTU1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0JPUkRFUl9CT1RUT01fU1RZTEUsIENTU19WQUxf
U09MSUQpOwogICAgICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfQk9SREVS
X0xFRlRfU1RZTEUsIENTU19WQUxfU09MSUQpOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gdnNwYWNlQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0g
dnNwYWNlQXR0cikgewogICAgICAgICBhZGRDU1NMZW5ndGgoYXR0ciwgQ1NTX1BST1BfTUFSR0lO
X1RPUCwgYXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJP
UF9NQVJHSU5fQk9UVE9NLCBhdHRyLT52YWx1ZSgpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBoc3BhY2VBdHRyKSB7CisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBoc3BhY2VB
dHRyKSB7CiAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJHSU5fTEVGVCwg
YXR0ci0+dmFsdWUoKSk7CiAgICAgICAgIGFkZENTU0xlbmd0aChhdHRyLCBDU1NfUFJPUF9NQVJH
SU5fUklHSFQsIGF0dHItPnZhbHVlKCkpOwotICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGFsaWduQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gYWxpZ25BdHRyKSB7CiAg
ICAgICAgIGFkZEhUTUxBbGlnbm1lbnQoYXR0cik7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gdmFsaWduQXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gdmFsaWduQXR0
cikgewogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9WRVJUSUNBTF9BTElH
TiwgYXR0ci0+dmFsdWUoKSk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gdXNlbWFw
QXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gdXNlbWFwQXR0cikgewogICAgICAg
ICBpZiAoYXR0ci0+dmFsdWUoKS5kb21TdHJpbmcoKVswXSA9PSAnIycpCiAgICAgICAgICAgICB1
c2VtYXAgPSBhdHRyLT52YWx1ZSgpOwogICAgICAgICBlbHNlIHsKQEAgLTIxNiwyMyArMjEwLDE3
IEBAIHZvaWQgSFRNTEltYWdlRWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXQKICAgICAgICAgICAg
IHVzZW1hcCA9IHVybDsKICAgICAgICAgfQogICAgICAgICBtX2lzTGluayA9ICFhdHRyLT5pc051
bGwoKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBpc21hcEF0dHIpIHsKKyAgICB9
IGVsc2UgaWYgKGF0dHJOYW1lID09IGlzbWFwQXR0cikgewogICAgICAgICBpc21hcCA9IHRydWU7
Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gb25hYm9ydEF0dHIpIHsKLSAgICAgICAg
c2V0SFRNTEV2ZW50TGlzdGVuZXIoYWJvcnRFdmVudCwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUo
KS5xc3RyaW5nKCksIHRoaXMpKTsKLSAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBvbmVy
cm9yQXR0cikgewotICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihlcnJvckV2ZW50LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRM
aXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOwotICAgIH0gZWxzZSBpZiAo
YXR0ci0+bmFtZSgpID09IG9ubG9hZEF0dHIpIHsKLSAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVu
ZXIobG9hZEV2ZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXREb2N1bWVudCgp
LT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykp
OwotICAgIH0KLSNpZiBBUFBMRV9DSEFOR0VTCi0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGNvbXBvc2l0ZUF0dHIpCisgICAgfSBlbHNlIGlmIChhdHRyTmFtZSA9PSBvbmFib3J0QXR0cikg
eworICAgICAgICBzZXRIVE1MRXZlbnRMaXN0ZW5lcihhYm9ydEV2ZW50LCBnZXREb2N1bWVudCgp
LT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRyLT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykp
OworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gb25lcnJvckF0dHIpIHsKKyAgICAgICAgc2V0
SFRNTEV2ZW50TGlzdGVuZXIoZXJyb3JFdmVudCwgZ2V0RG9jdW1lbnQoKS0+Y3JlYXRlSFRNTEV2
ZW50TGlzdGVuZXIoYXR0ci0+dmFsdWUoKS5xc3RyaW5nKCksIHRoaXMpKTsKKyAgICB9IGVsc2Ug
aWYgKGF0dHJOYW1lID09IG9ubG9hZEF0dHIpIHsKKyAgICAgICAgc2V0SFRNTEV2ZW50TGlzdGVu
ZXIobG9hZEV2ZW50LCBnZXREb2N1bWVudCgpLT5jcmVhdGVIVE1MRXZlbnRMaXN0ZW5lcihhdHRy
LT52YWx1ZSgpLnFzdHJpbmcoKSwgdGhpcykpOworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0g
Y29tcG9zaXRlQXR0cikgewogICAgICAgICBfY29tcG9zaXRlT3BlcmF0b3IgPSBhdHRyLT52YWx1
ZSgpLnFzdHJpbmcoKTsKLSNlbmRpZgotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBuYW1l
QXR0cikgeworICAgIH0gZWxzZSBpZiAoYXR0ck5hbWUgPT0gbmFtZUF0dHIpIHsKICAgICAgICAg
RE9NU3RyaW5nIG5ld05hbWVBdHRyID0gYXR0ci0+dmFsdWUoKTsKICAgICAgICAgaWYgKGluRG9j
dW1lbnQoKSAmJiBnZXREb2N1bWVudCgpLT5pc0hUTUxEb2N1bWVudCgpKSB7CiAgICAgICAgICAg
ICBIVE1MRG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudElt
cGwgKj4oZ2V0RG9jdW1lbnQoKSk7CkBAIC0yNDksNyArMjM3LDcgQEAgRE9NU3RyaW5nIEhUTUxJ
bWFnZUVsZW1lbnRJbXBsOjphbHRUZXh0KAogICAgIC8vIGxldHMgZmlndXJlIG91dCB0aGUgYWx0
IHRleHQuLiBtYWdpYyBzdHVmZgogICAgIC8vIGh0dHA6Ly93d3cudzMub3JnL1RSLzE5OTgvUkVD
LWh0bWw0MC0xOTk4MDQyNC9hcHBlbmRpeC9ub3Rlcy5odG1sI2FsdGdlbgogICAgIC8vIGFsc28g
aGVhdmlseSBkaXNjdXNzZWQgYnkgSGl4aWUgb24gYnVnemlsbGEKLSAgICBET01TdHJpbmcgYWx0
KGdldEF0dHJpYnV0ZShhbHRBdHRyKSk7CisgICAgRE9NU3RyaW5nIGFsdCA9IGdldEF0dHJpYnV0
ZShhbHRBdHRyKTsKICAgICAvLyBmYWxsIGJhY2sgdG8gdGl0bGUgYXR0cmlidXRlCiAgICAgaWYg
KGFsdC5pc051bGwoKSkKICAgICAgICAgYWx0ID0gZ2V0QXR0cmlidXRlKHRpdGxlQXR0cik7CkBA
IC0yNjUsMjggKzI1MywyNSBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjphdHRhY2goKQog
ewogICAgIEhUTUxFbGVtZW50SW1wbDo6YXR0YWNoKCk7CiAKLSAgICBpZiAocmVuZGVyZXIoKSkg
ewotICAgICAgICBSZW5kZXJJbWFnZSogaW1hZ2VPYmogPSBzdGF0aWNfY2FzdDxSZW5kZXJJbWFn
ZSo+KHJlbmRlcmVyKCkpOwotICAgICAgICBpbWFnZU9iai0+c2V0SW1hZ2UobV9pbWFnZUxvYWRl
ci5pbWFnZSgpKTsKLSAgICB9CisgICAgUmVuZGVySW1hZ2UgKnJlbmRlcmVyID0gc3RhdGljX2Nh
c3Q8UmVuZGVySW1hZ2UgKj4obV9yZW5kZXIpOworICAgIGlmIChyZW5kZXJlcikKKyAgICAgICAg
cmVuZGVyZXItPnNldEltYWdlKG1faW1hZ2VMb2FkZXIuaW1hZ2UoKSk7CiB9CiAKIHZvaWQgSFRN
TEltYWdlRWxlbWVudEltcGw6Omluc2VydGVkSW50b0RvY3VtZW50KCkKIHsKLSAgICBpZiAoZ2V0
RG9jdW1lbnQoKS0+aXNIVE1MRG9jdW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnRJbXBs
ICpkb2N1bWVudCA9IHN0YXRpY19jYXN0PEhUTUxEb2N1bWVudEltcGwgKj4oZ2V0RG9jdW1lbnQo
KSk7Ci0gICAgICAgIGRvY3VtZW50LT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgIH0K
KyAgICBEb2N1bWVudEltcGwgKmRvYyA9IGdldERvY3VtZW50KCk7CisgICAgaWYgKGRvYy0+aXNI
VE1MRG9jdW1lbnQoKSkKKyAgICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihk
b2MpLT5hZGROYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwogCiAgICAgSFRNTEVsZW1lbnRJbXBsOjpp
bnNlcnRlZEludG9Eb2N1bWVudCgpOwogfQogCiB2b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBsOjpy
ZW1vdmVkRnJvbURvY3VtZW50KCkKIHsKLSAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aXNIVE1MRG9j
dW1lbnQoKSkgewotICAgICAgICBIVE1MRG9jdW1lbnRJbXBsICpkb2N1bWVudCA9IHN0YXRpY19j
YXN0PEhUTUxEb2N1bWVudEltcGwgKj4oZ2V0RG9jdW1lbnQoKSk7Ci0gICAgICAgIGRvY3VtZW50
LT5yZW1vdmVOYW1lZEl0ZW0ob2xkTmFtZUF0dHIpOwotICAgIH0KKyAgICBEb2N1bWVudEltcGwg
KmRvYyA9IGdldERvY3VtZW50KCk7CisgICAgaWYgKGRvYy0+aXNIVE1MRG9jdW1lbnQoKSkKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8SFRNTERvY3VtZW50SW1wbCAqPihkb2MpLT5yZW1vdmVOYW1lZEl0
ZW0ob2xkTmFtZUF0dHIpOwogCiAgICAgSFRNTEVsZW1lbnRJbXBsOjpyZW1vdmVkRnJvbURvY3Vt
ZW50KCk7CiB9CkBAIC0yOTQsNjggKzI3OSw1NSBAQCB2b2lkIEhUTUxJbWFnZUVsZW1lbnRJbXBs
OjpyZW1vdmVkRnJvbURvCiBpbnQgSFRNTEltYWdlRWxlbWVudEltcGw6OndpZHRoKGJvb2wgaWdu
b3JlUGVuZGluZ1N0eWxlc2hlZXRzKSBjb25zdAogewogICAgIGlmICghbV9yZW5kZXIpIHsKLQkv
LyBjaGVjayB0aGUgYXR0cmlidXRlIGZpcnN0IGZvciBhbiBleHBsaWNpdCBwaXhlbCB2YWx1ZQot
CURPTTo6RE9NU3RyaW5nIGF0dHJXaWR0aCA9IGdldEF0dHJpYnV0ZSh3aWR0aEF0dHIpOwotCWJv
b2wgb2s7Ci0JaW50IHdpZHRoID0gYXR0cldpZHRoLnFzdHJpbmcoKS50b0ludCgmb2spOwotCWlm
IChvaykgewotCSAgcmV0dXJuIHdpZHRoOwotCX0KKyAgICAgICAgLy8gY2hlY2sgdGhlIGF0dHJp
YnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKKyAgICAgICAgYm9vbCBvazsK
KyAgICAgICAgaW50IHdpZHRoID0gZ2V0QXR0cmlidXRlKHdpZHRoQXR0cikucXN0cmluZygpLnRv
SW50KCZvayk7CisgICAgICAgIGlmIChvaykKKyAgICAgICAgICAgIHJldHVybiB3aWR0aDsKICAg
ICB9CiAKLSAgICBET006OkRvY3VtZW50SW1wbCogZG9jaW1wbCA9IGdldERvY3VtZW50KCk7Ci0g
ICAgaWYgKGRvY2ltcGwpIHsKLQlpZiAoaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKQotICAgICAg
ICAgICAgZG9jaW1wbC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7Cisg
ICAgRG9jdW1lbnRJbXBsICpkb2MgPSBnZXREb2N1bWVudCgpOworICAgIGlmIChkb2MpIHsKKyAg
ICAgICAgaWYgKGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykKKyAgICAgICAgICAgIGRvYy0+dXBk
YXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgIGRvY2ltcGwtPnVwZGF0ZUxheW91dCgpOworICAgICAgICAgICAgZG9jLT51cGRhdGVM
YXlvdXQoKTsKICAgICB9CiAKLSAgICBpZiAoIW1fcmVuZGVyKSB7Ci0JcmV0dXJuIDA7Ci0gICAg
fQotCi0gICAgcmV0dXJuIG1fcmVuZGVyLT5jb250ZW50V2lkdGgoKTsKKyAgICByZXR1cm4gbV9y
ZW5kZXIgPyBtX3JlbmRlci0+Y29udGVudFdpZHRoKCkgOiAwOwogfQogCiBpbnQgSFRNTEltYWdl
RWxlbWVudEltcGw6OmhlaWdodChib29sIGlnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cykgY29uc3QK
IHsKICAgICBpZiAoIW1fcmVuZGVyKSB7Ci0JLy8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBm
b3IgYW4gZXhwbGljaXQgcGl4ZWwgdmFsdWUKLQlET006OkRPTVN0cmluZyBhdHRySGVpZ2h0ID0g
Z2V0QXR0cmlidXRlKGhlaWdodEF0dHIpOwotCWJvb2wgb2s7Ci0JaW50IGhlaWdodCA9IGF0dHJI
ZWlnaHQucXN0cmluZygpLnRvSW50KCZvayk7Ci0JaWYgKG9rKSB7Ci0JICByZXR1cm4gaGVpZ2h0
OwotCX0KKyAgICAgICAgLy8gY2hlY2sgdGhlIGF0dHJpYnV0ZSBmaXJzdCBmb3IgYW4gZXhwbGlj
aXQgcGl4ZWwgdmFsdWUKKyAgICAgICAgYm9vbCBvazsKKyAgICAgICAgaW50IGhlaWdodCA9IGdl
dEF0dHJpYnV0ZShoZWlnaHRBdHRyKS5xc3RyaW5nKCkudG9JbnQoJm9rKTsKKyAgICAgICAgaWYg
KG9rKQorICAgICAgICAgICAgcmV0dXJuIGhlaWdodDsKICAgICB9CiAKLSAgICBET006OkRvY3Vt
ZW50SW1wbCogZG9jaW1wbCA9IGdldERvY3VtZW50KCk7Ci0gICAgaWYgKGRvY2ltcGwpIHsKLQlp
ZiAoaWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKQotICAgICAgICAgICAgZG9jaW1wbC0+dXBkYXRl
TGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgRG9jdW1lbnRJbXBsICpkb2Mg
PSBnZXREb2N1bWVudCgpOworICAgIGlmIChkb2MpIHsKKyAgICAgICAgaWYgKGlnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cykKKyAgICAgICAgICAgIGRvYy0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGlu
Z1N0eWxlc2hlZXRzKCk7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIGRvY2ltcGwtPnVwZGF0
ZUxheW91dCgpOworICAgICAgICAgICAgZG9jLT51cGRhdGVMYXlvdXQoKTsKICAgICB9CiAKLSAg
ICBpZiAoIW1fcmVuZGVyKSB7Ci0JcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJuIG1fcmVu
ZGVyLT5jb250ZW50SGVpZ2h0KCk7CisgICAgcmV0dXJuIG1fcmVuZGVyID8gbV9yZW5kZXItPmNv
bnRlbnRIZWlnaHQoKSA6IDA7CiB9CiAKIFFJbWFnZSBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6Y3Vy
cmVudEltYWdlKCkgY29uc3QKIHsKLSAgICBSZW5kZXJJbWFnZSAqciA9IHN0YXRpY19jYXN0PFJl
bmRlckltYWdlKj4ocmVuZGVyZXIoKSk7Ci0gICAgaWYgKHIpCi0gICAgICAgIHJldHVybiByLT5w
aXhtYXAoKS5jb252ZXJ0VG9JbWFnZSgpOworICAgIGlmIChyZW5kZXJlcigpKQorICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8UmVuZGVySW1hZ2UgKj4ocmVuZGVyZXIoKSktPnBpeG1hcCgpLmNv
bnZlcnRUb0ltYWdlKCk7CiAgICAgcmV0dXJuIFFJbWFnZSgpOwogfQogCiBib29sIEhUTUxJbWFn
ZUVsZW1lbnRJbXBsOjppc1VSTEF0dHJpYnV0ZShBdHRyaWJ1dGVJbXBsICphdHRyKSBjb25zdAog
ewotICAgIHJldHVybiAoYXR0ci0+bmFtZSgpID09IHNyY0F0dHIgfHwgKGF0dHItPm5hbWUoKSA9
PSB1c2VtYXBBdHRyICYmIGF0dHItPnZhbHVlKCkuZG9tU3RyaW5nKClbMF0gIT0gJyMnKSk7Cisg
ICAgcmV0dXJuIGF0dHItPm5hbWUoKSA9PSBzcmNBdHRyIHx8IChhdHRyLT5uYW1lKCkgPT0gdXNl
bWFwQXR0ciAmJiBhdHRyLT52YWx1ZSgpLmRvbVN0cmluZygpWzBdICE9ICcjJyk7CiB9CiAKIERP
TVN0cmluZyBIVE1MSW1hZ2VFbGVtZW50SW1wbDo6bmFtZSgpIGNvbnN0CkBAIC01MDYsNjEgKzQ3
OCwzOSBAQCBIVE1MTWFwRWxlbWVudEltcGw6On5IVE1MTWFwRWxlbWVudEltcGwoCiAKIGJvb2wg
SFRNTE1hcEVsZW1lbnRJbXBsOjpjaGVja0RURChjb25zdCBOb2RlSW1wbCogbmV3Q2hpbGQpCiB7
Ci0gICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgcmVhbGx5IG9kZCwgYWxsb3dpbmcgb25seSBibG9j
a3MgaW5zaWRlIG1hcC4KLSAgICByZXR1cm4gbmV3Q2hpbGQtPmhhc1RhZ05hbWUoYXJlYVRhZykg
fHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8fAotICAgICAgICAgICBpbkJsb2Nr
VGFnTGlzdChuZXdDaGlsZCk7Ci19Ci0KLWJvb2wKLUhUTUxNYXBFbGVtZW50SW1wbDo6bWFwTW91
c2VFdmVudChpbnQgeF8sIGludCB5XywgaW50IHdpZHRoXywgaW50IGhlaWdodF8sCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5mbykK
LXsKLSAgICAvL2NvdXQgPDwgIm1hcDptYXBNb3VzZUV2ZW50ICIgPDwgZW5kbDsKLSAgICAvL2Nv
dXQgPDwgeF8gPDwgIiAiIDw8IHlfIDw8IiAiPDwgd2lkdGhfIDw8IiAiPDwgaGVpZ2h0XyA8PCBl
bmRsOwotICAgIFFQdHJTdGFjazxOb2RlSW1wbD4gbm9kZVN0YWNrOwotCi0gICAgTm9kZUltcGwg
KmN1cnJlbnQgPSBmaXJzdENoaWxkKCk7Ci0gICAgd2hpbGUgKDEpIHsKLSAgICAgICAgaWYgKCFj
dXJyZW50KSB7Ci0gICAgICAgICAgICBpZihub2RlU3RhY2suaXNFbXB0eSgpKSBicmVhazsKLSAg
ICAgICAgICAgIGN1cnJlbnQgPSBub2RlU3RhY2sucG9wKCk7Ci0gICAgICAgICAgICBjdXJyZW50
ID0gY3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIAotICAgICAgICBpZiAoY3VycmVudC0+aGFzVGFnTmFtZShhcmVhVGFnKSkg
ewotICAgICAgICAgICAgLy9jb3V0IDw8ICJhcmVhIGZvdW5kICIgPDwgZW5kbDsKLSAgICAgICAg
ICAgIEhUTUxBcmVhRWxlbWVudEltcGwqIGFyZWEgPSBzdGF0aWNfY2FzdDxIVE1MQXJlYUVsZW1l
bnRJbXBsKj4oY3VycmVudCk7Ci0gICAgICAgICAgICBpZiAoYXJlYS0+bWFwTW91c2VFdmVudCh4
Xyx5Xyx3aWR0aF8saGVpZ2h0XywgaW5mbykpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIE5vZGVJbXBsICpjaGlsZCA9IGN1cnJlbnQt
PmZpcnN0Q2hpbGQoKTsKLSAgICAgICAgaWYgKGNoaWxkKSB7Ci0gICAgICAgICAgICBub2RlU3Rh
Y2sucHVzaChjdXJyZW50KTsKLSAgICAgICAgICAgIGN1cnJlbnQgPSBjaGlsZDsKLSAgICAgICAg
fQotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+bmV4dFNpYmxp
bmcoKTsKLSAgICB9CisgICAgLy8gRklYTUU6IFRoaXMgc2VlbXMgcmVhbGx5IG9kZCwgYWxsb3dp
bmcgb25seSBibG9ja3MgaW5zaWRlIG1hcCBlbGVtZW50cy4KKyAgICByZXR1cm4gbmV3Q2hpbGQt
Pmhhc1RhZ05hbWUoYXJlYVRhZykgfHwgbmV3Q2hpbGQtPmhhc1RhZ05hbWUoc2NyaXB0VGFnKSB8
fCBpbkJsb2NrVGFnTGlzdChuZXdDaGlsZCk7Cit9CiAKK2Jvb2wgSFRNTE1hcEVsZW1lbnRJbXBs
OjptYXBNb3VzZUV2ZW50KGludCB4LCBpbnQgeSwgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBSZW5k
ZXJPYmplY3Q6Ok5vZGVJbmZvJiBpbmZvKQoreworICAgIE5vZGVJbXBsICpub2RlID0gdGhpczsK
KyAgICB3aGlsZSAoKG5vZGUgPSBub2RlLT50cmF2ZXJzZU5leHROb2RlKHRoaXMpKSkKKyAgICAg
ICAgaWYgKG5vZGUtPmhhc1RhZ05hbWUoYXJlYVRhZykpCisgICAgICAgICAgICBpZiAoc3RhdGlj
X2Nhc3Q8SFRNTEFyZWFFbGVtZW50SW1wbCAqPihub2RlKS0+bWFwTW91c2VFdmVudCh4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBpbmZvKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgSFRNTE1hcEVsZW1lbnRJbXBsOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGVJbXBsICphdHRyKQogewotICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gaWRBdHRyIHx8IGF0dHItPm5hbWUoKSA9PSBuYW1lQXR0cikgewotICAgICAgICBpZiAo
YXR0ci0+bmFtZSgpID09IGlkQXR0cikgewotICAgICAgICAgICAgLy8gTXVzdCBjYWxsIGJhc2Ug
Y2xhc3Mgc28gdGhhdCBoYXNJRCBiaXQgZ2V0cyBzZXQuCisgICAgY29uc3QgUXVhbGlmaWVkTmFt
ZSAmYXR0ck5hbWUgPSBhdHRyLT5uYW1lKCk7CisgICAgaWYgKGF0dHJOYW1lID09IGlkQXR0ciB8
fCBhdHRyTmFtZSA9PSBuYW1lQXR0cikgeworICAgICAgICBEb2N1bWVudEltcGwgKmRvYyA9IGdl
dERvY3VtZW50KCk7CisgICAgICAgIGlmIChhdHRyTmFtZSA9PSBpZEF0dHIpIHsKKyAgICAgICAg
ICAgIC8vIENhbGwgYmFzZSBjbGFzcyBzbyB0aGF0IGhhc0lEIGJpdCBnZXRzIHNldC4KICAgICAg
ICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7Ci0gICAg
ICAgICAgICBpZiAoZ2V0RG9jdW1lbnQoKS0+aHRtbE1vZGUoKSAhPSBEb2N1bWVudEltcGw6OlhI
dG1sKQorICAgICAgICAgICAgaWYgKGRvYy0+aHRtbE1vZGUoKSAhPSBEb2N1bWVudEltcGw6OlhI
dG1sKQogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBnZXREb2N1
bWVudCgpLT5yZW1vdmVJbWFnZU1hcCh0aGlzKTsKLSAgICAgICAgbV9uYW1lID0gYXR0ci0+dmFs
dWUoKTsKLSAgICAgICAgaWYgKG1fbmFtZS5sZW5ndGgoKSAhPSAwICYmIG1fbmFtZVswXSA9PSAn
IycpCi0gICAgICAgICAgICBtX25hbWUucmVtb3ZlKDAsIDEpOwotICAgICAgICBnZXREb2N1bWVu
dCgpLT5hZGRJbWFnZU1hcCh0aGlzKTsKKyAgICAgICAgZG9jLT5yZW1vdmVJbWFnZU1hcCh0aGlz
KTsKKyAgICAgICAgRE9NU3RyaW5nIG1hcE5hbWUgPSBhdHRyLT52YWx1ZSgpOworICAgICAgICBp
ZiAobWFwTmFtZVswXSA9PSAnIycpIHsKKyAgICAgICAgICAgIG1hcE5hbWUgPSBtYXBOYW1lLmNv
cHkoKTsKKyAgICAgICAgICAgIG1hcE5hbWUucmVtb3ZlKDAsIDEpOworICAgICAgICB9CisgICAg
ICAgIG1fbmFtZSA9IG1hcE5hbWU7CisgICAgICAgIGRvYy0+YWRkSW1hZ2VNYXAodGhpcyk7CiAg
ICAgfSBlbHNlCiAgICAgICAgIEhUTUxFbGVtZW50SW1wbDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CiB9CkBAIC01ODUsMTUgKzUzNSwxNiBAQCB2b2lkIEhUTUxNYXBFbGVtZW50SW1wbDo6
c2V0TmFtZShjb25zdCBECiBIVE1MQXJlYUVsZW1lbnRJbXBsOjpIVE1MQXJlYUVsZW1lbnRJbXBs
KERvY3VtZW50UHRyICpkb2MpCiAgICAgOiBIVE1MQW5jaG9yRWxlbWVudEltcGwoYXJlYVRhZywg
ZG9jKQogewotICAgIG1fY29vcmRzPTA7CisgICAgbV9jb29yZHMgPSAwOwogICAgIG1fY29vcmRz
TGVuID0gMDsKICAgICBtX3NoYXBlID0gVW5rbm93bjsKLSAgICBsYXN0aCA9IGxhc3R3ID0gLTE7
CisgICAgbGFzdGggPSAtMTsKKyAgICBsYXN0dyA9IC0xOwogfQogCiBIVE1MQXJlYUVsZW1lbnRJ
bXBsOjp+SFRNTEFyZWFFbGVtZW50SW1wbCgpCiB7Ci0gICAgaWYgKG1fY29vcmRzKSBkZWxldGUg
W10gbV9jb29yZHM7CisgICAgZGVsZXRlIFtdIG1fY29vcmRzOwogfQogCiB2b2lkIEhUTUxBcmVh
RWxlbWVudEltcGw6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZUltcGwgKmF0
dHIpCkBAIC02MDgsMzQgKzU1OSwzMCBAQCB2b2lkIEhUTUxBcmVhRWxlbWVudEltcGw6OnBhcnNl
TWFwcGVkQXR0CiAgICAgICAgIGVsc2UgaWYgKCBzdHJjYXNlY21wKCBhdHRyLT52YWx1ZSgpLCAi
cmVjdCIgKSA9PSAwICkKICAgICAgICAgICAgIG1fc2hhcGUgPSBSZWN0OwogICAgIH0gZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IGNvb3Jkc0F0dHIpIHsKLSAgICAgICAgaWYgKG1fY29vcmRzKSBk
ZWxldGUgW10gbV9jb29yZHM7CisgICAgICAgIGRlbGV0ZSBbXSBtX2Nvb3JkczsKICAgICAgICAg
bV9jb29yZHMgPSBhdHRyLT52YWx1ZSgpLnRvQ29vcmRzQXJyYXkobV9jb29yZHNMZW4pOwogICAg
IH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IHRhcmdldEF0dHIpIHsKICAgICAgICAgbV9oYXNU
YXJnZXQgPSAhYXR0ci0+aXNOdWxsKCk7Ci0gICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0g
YWx0QXR0ciB8fAotICAgICAgICAgICAgICAgYXR0ci0+bmFtZSgpID09IGFjY2Vzc2tleUF0dHIp
IHsKLSAgICAgICAgLy8gRG8gbm90aGluZworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IGFsdEF0dHIgfHwgYXR0ci0+bmFtZSgpID09IGFjY2Vzc2tleUF0dHIpIHsKKyAgICAgICAgLy8g
RG8gbm90aGluZy4KICAgICB9IGVsc2UKICAgICAgICAgSFRNTEFuY2hvckVsZW1lbnRJbXBsOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKTsKIH0KIAotYm9vbCBIVE1MQXJlYUVsZW1lbnRJbXBs
OjptYXBNb3VzZUV2ZW50KGludCB4XywgaW50IHlfLCBpbnQgd2lkdGhfLCBpbnQgaGVpZ2h0XywK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVuZGVyT2JqZWN0OjpOb2RlSW5m
byYgaW5mbykKK2Jvb2wgSFRNTEFyZWFFbGVtZW50SW1wbDo6bWFwTW91c2VFdmVudChpbnQgeCwg
aW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwgUmVuZGVyT2JqZWN0OjpOb2RlSW5mbyYgaW5m
bykKIHsKLSAgICBib29sIGluc2lkZSA9IGZhbHNlOwotICAgIGlmICh3aWR0aF8gIT0gbGFzdHcg
fHwgaGVpZ2h0XyAhPSBsYXN0aCkKLSAgICB7Ci0gICAgICAgIHJlZ2lvbj1nZXRSZWdpb24od2lk
dGhfLCBoZWlnaHRfKTsKLSAgICAgICAgbGFzdHc9d2lkdGhfOyBsYXN0aD1oZWlnaHRfOwotICAg
IH0KLSAgICBpZiAocmVnaW9uLmNvbnRhaW5zKFFQb2ludCh4Xyx5XykpKQotICAgIHsKLSAgICAg
ICAgaW5zaWRlID0gdHJ1ZTsKLSAgICAgICAgaW5mby5zZXRJbm5lck5vZGUodGhpcyk7Ci0gICAg
ICAgIGluZm8uc2V0VVJMRWxlbWVudCh0aGlzKTsKKyAgICBpZiAod2lkdGggIT0gbGFzdHcgfHwg
aGVpZ2h0ICE9IGxhc3RoKSB7CisgICAgICAgIHJlZ2lvbiA9IGdldFJlZ2lvbih3aWR0aCwgaGVp
Z2h0KTsKKyAgICAgICAgbGFzdHcgPSB3aWR0aDsKKyAgICAgICAgbGFzdGggPSBoZWlnaHQ7CiAg
ICAgfQogCi0gICAgcmV0dXJuIGluc2lkZTsKKyAgICBpZiAoIXJlZ2lvbi5jb250YWlucyhRUG9p
bnQoeCwgeSkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgCisgICAgaW5mby5zZXRJbm5l
ck5vZGUodGhpcyk7CisgICAgaW5mby5zZXRVUkxFbGVtZW50KHRoaXMpOworICAgIHJldHVybiB0
cnVlOwogfQogCiBRUmVjdCBIVE1MQXJlYUVsZW1lbnRJbXBsOjpnZXRSZWN0KFJlbmRlck9iamVj
dCogb2JqKSBjb25zdApAQCAtNjQ3LDQ0ICs1OTQsNTkgQEAgUVJlY3QgSFRNTEFyZWFFbGVtZW50
SW1wbDo6Z2V0UmVjdChSZW5kZQogICAgIHJldHVybiByZWdpb24uYm91bmRpbmdSZWN0KCk7CiB9
CiAKLVFSZWdpb24gSFRNTEFyZWFFbGVtZW50SW1wbDo6Z2V0UmVnaW9uKGludCB3aWR0aF8sIGlu
dCBoZWlnaHRfKSBjb25zdAorUVJlZ2lvbiBIVE1MQXJlYUVsZW1lbnRJbXBsOjpnZXRSZWdpb24o
aW50IHdpZHRoLCBpbnQgaGVpZ2h0KSBjb25zdAogewotICAgIFFSZWdpb24gcmVnaW9uOwotICAg
IGlmICghbV9jb29yZHMpCi0gICAgICAgIHJldHVybiByZWdpb247Ci0KLSAgICAvLyBhZGRlZCBi
cm9rZW4gSFRNTCBzdXBwb3J0IChEaXJrKTogc29tZSBwYWdlcyBvbWl0IHRoZSBTSEFQRQotICAg
IC8vIGF0dHJpYnV0ZSwgc28gd2UgdHJ5IHRvIGd1ZXNzIGJ5IGxvb2tpbmcgYXQgdGhlIGNvb3Jk
cyBjb3VudAotICAgIC8vIHdoYXQgdGhlIEhUTUwgYXV0aG9yIHRyaWVkIHRvIHRlbGwgdXMuCi0K
LSAgICAvLyBhIFBvbHkgbmVlZHMgYXQgbGVhc3QgMyBwb2ludHMgKDYgY29vcmRzKSwgc28gdGhp
cyBpcyBjb3JyZWN0Ci0gICAgaWYgKChtX3NoYXBlPT1Qb2x5IHx8IG1fc2hhcGU9PVVua25vd24p
ICYmIG1fY29vcmRzTGVuID4gNSkgewotICAgICAgICAvLyBtYWtlIHN1cmUgaXRzIGV2ZW4KLSAg
ICAgICAgaW50IGxlbiA9IG1fY29vcmRzTGVuID4+IDE7Ci0gICAgICAgIFFQb2ludEFycmF5IHBv
aW50cyhsZW4pOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgKytpKQotICAgICAg
ICAgICAgcG9pbnRzLnNldFBvaW50KGksIG1fY29vcmRzWyhpPDwxKV0ubWluV2lkdGgod2lkdGhf
KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2Nvb3Jkc1soaTw8MSkrMV0ubWluV2lk
dGgoaGVpZ2h0XykpOwotICAgICAgICByZWdpb24gPSBRUmVnaW9uKHBvaW50cyk7Ci0gICAgfQot
ICAgIGVsc2UgaWYgKG1fc2hhcGU9PUNpcmNsZSAmJiBtX2Nvb3Jkc0xlbj49MyB8fCBtX3NoYXBl
PT1Vbmtub3duICYmIG1fY29vcmRzTGVuID09IDMpIHsKLSAgICAgICAgaW50IHIgPSBrTWluKG1f
Y29vcmRzWzJdLm1pbldpZHRoKHdpZHRoXyksIG1fY29vcmRzWzJdLm1pbldpZHRoKGhlaWdodF8p
KTsKLSAgICAgICAgcmVnaW9uID0gUVJlZ2lvbihtX2Nvb3Jkc1swXS5taW5XaWR0aCh3aWR0aF8p
LXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgbV9jb29yZHNbMV0ubWluV2lkdGgoaGVpZ2h0
XyktciwgMipyLCAyKnIsUVJlZ2lvbjo6RWxsaXBzZSk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1f
c2hhcGU9PVJlY3QgJiYgbV9jb29yZHNMZW4+PTQgfHwgbV9zaGFwZT09VW5rbm93biAmJiBtX2Nv
b3Jkc0xlbiA9PSA0KSB7Ci0gICAgICAgIGludCB4MCA9IG1fY29vcmRzWzBdLm1pbldpZHRoKHdp
ZHRoXyk7Ci0gICAgICAgIGludCB5MCA9IG1fY29vcmRzWzFdLm1pbldpZHRoKGhlaWdodF8pOwot
ICAgICAgICBpbnQgeDEgPSBtX2Nvb3Jkc1syXS5taW5XaWR0aCh3aWR0aF8pOwotICAgICAgICBp
bnQgeTEgPSBtX2Nvb3Jkc1szXS5taW5XaWR0aChoZWlnaHRfKTsKLSAgICAgICAgcmVnaW9uID0g
UVJlZ2lvbih4MCx5MCx4MS14MCx5MS15MCk7Ci0gICAgfQotICAgIGVsc2UgaWYgKG1fc2hhcGU9
PURlZmF1bHQpCi0gICAgICAgIHJlZ2lvbiA9IFFSZWdpb24oMCwwLHdpZHRoXyxoZWlnaHRfKTsK
LSAgICAvLyBlbHNlCi0gICAgICAgLy8gcmV0dXJuIG51bGwgcmVnaW9uCisgICAgTGVuZ3RoICpj
b29yZHMgPSBtX2Nvb3JkczsKKyAgICBpZiAoIWNvb3JkcykKKyAgICAgICAgcmV0dXJuIFFSZWdp
b24oKTsKKworICAgIFNoYXBlIHNoYXBlID0gbV9zaGFwZTsKKyAgICBpbnQgY29vcmRzTGVuID0g
bV9jb29yZHNMZW47CisKKyAgICAvLyBJZiBlbGVtZW50IG9taXRzIHRoZSBzaGFwZSBhdHRyaWJ1
dGUsIHNlbGVjdCBzaGFwZSBiYXNlZCBvbiBudW1iZXIgb2YgY29vcmRpbmF0ZXMuCisgICAgaWYg
KHNoYXBlID09IFVua25vd24pIHsKKyAgICAgICAgaWYgKGNvb3Jkc0xlbiA9PSAzKQorICAgICAg
ICAgICAgc2hhcGUgPSBDaXJjbGU7CisgICAgICAgIGVsc2UgaWYgKGNvb3Jkc0xlbiA9PSA0KQor
ICAgICAgICAgICAgc2hhcGUgPSBSZWN0OworICAgICAgICBlbHNlIGlmIChjb29yZHNMZW4gPj0g
NikKKyAgICAgICAgICAgIHNoYXBlID0gUG9seTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHNoYXBl
KSB7CisgICAgICAgIGNhc2UgUG9seToKKyAgICAgICAgICAgIGlmIChjb29yZHNMZW4gPj0gNikg
eworICAgICAgICAgICAgICAgIGludCBudW1Qb2ludHMgPSBjb29yZHNMZW4gLyAyOworICAgICAg
ICAgICAgICAgIFFQb2ludEFycmF5IHBvaW50cyhudW1Qb2ludHMpOworICAgICAgICAgICAgICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUG9pbnRzOyArK2kpCisgICAgICAgICAgICAgICAgICAg
IHBvaW50cy5zZXRQb2ludChpLCBjb29yZHNbaSAqIDJdLm1pbldpZHRoKHdpZHRoKSwgY29vcmRz
W2kgKiAyICsgMV0ubWluV2lkdGgoaGVpZ2h0KSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIFFS
ZWdpb24ocG9pbnRzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIENpcmNsZToKKyAgICAgICAgICAgIGlmIChjb29yZHNMZW4gPj0gMykgeworICAgICAg
ICAgICAgICAgIExlbmd0aCByYWRpdXMgPSBjb29yZHNbMl07CisgICAgICAgICAgICAgICAgaW50
IHIgPSBrTWluKHJhZGl1cy5taW5XaWR0aCh3aWR0aCksIHJhZGl1cy5taW5XaWR0aChoZWlnaHQp
KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gUVJlZ2lvbihjb29yZHNbMF0ubWluV2lkdGgod2lk
dGgpIC0gciwgY29vcmRzWzFdLm1pbldpZHRoKGhlaWdodCkgLSByLAorICAgICAgICAgICAgICAg
ICAgICAyICogciwgMiAqIHIsIFFSZWdpb246OkVsbGlwc2UpOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUmVjdDoKKyAgICAgICAgICAgIGlmIChjb29y
ZHNMZW4gPj0gNCkgeworICAgICAgICAgICAgICAgIGludCB4MCA9IGNvb3Jkc1swXS5taW5XaWR0
aCh3aWR0aCk7CisgICAgICAgICAgICAgICAgaW50IHkwID0gY29vcmRzWzFdLm1pbldpZHRoKGhl
aWdodCk7CisgICAgICAgICAgICAgICAgaW50IHgxID0gY29vcmRzWzJdLm1pbldpZHRoKHdpZHRo
KTsKKyAgICAgICAgICAgICAgICBpbnQgeTEgPSBjb29yZHNbM10ubWluV2lkdGgoaGVpZ2h0KTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gUVJlZ2lvbih4MCwgeTAsIHgxIC0geDAsIHkxIC0geTAp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgRGVmYXVs
dDoKKyAgICAgICAgICAgIHJldHVybiBRUmVnaW9uKDAsIDAsIHdpZHRoLCBoZWlnaHQpOworICAg
ICAgICBjYXNlIFVua25vd246CisgICAgICAgICAgICBicmVhazsKKyAgICB9CiAKLSAgICByZXR1
cm4gcmVnaW9uOworICAgIHJldHVybiBRUmVnaW9uKCk7CiB9CiAKIERPTVN0cmluZyBIVE1MQXJl
YUVsZW1lbnRJbXBsOjphY2Nlc3NLZXkoKSBjb25zdApAQCAtNzY2LDMgKzcyOCw1IEBAIHZvaWQg
SFRNTEFyZWFFbGVtZW50SW1wbDo6c2V0VGFyZ2V0KGNvbnMKIHsKICAgICBzZXRBdHRyaWJ1dGUo
dGFyZ2V0QXR0ciwgdmFsdWUpOwogfQorCit9Cg==
</data>
<flag name="review"
          id="732"
          type_id="1"
          status="+"
          setter="mjs"
    />
          </attachment>
      

    </bug>

</bugzilla>