<?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>10362</bug_id>
          
          <creation_ts>2006-08-12 01:32:34 -0700</creation_ts>
          <short_desc>SVG needs to support SVGError events and some form of &quot;error state&quot;</short_desc>
          <delta_ts>2007-01-07 09:24:51 -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>SVG</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>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>10361</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>52310</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-12 01:32:34 -0700</bug_when>
    <thetext>SVG needs to support SVGError events and some form of &quot;error state&quot;

The spec calls for implementing an &quot;error state&quot;:
http://www.w3.org/TR/SVG11/implnote.html#ErrorProcessing

&quot;A highly perceivable indication of error shall occur. For visual rendering situations, an example of an indication of error would be to render a translucent colored pattern such as a checkerboard on top of the area where the SVG content is rendered.&quot;

Most desktop browser authors would consider such error behavior complete lunacy, given the current expectation of web content authors for browsers to silently render any erroneous HTML page.

Regardless, we should have some way to display errors to the content author, even if we silently render erroneous content nicely for the end user.  One possible solution would be to leverage an error console, such as is described by bug 10361.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38479</commentid>
    <comment_count>1</comment_count>
      <attachid>12145</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-01-01 11:59:09 -0800</bug_when>
    <thetext>Created attachment 12145
First attempt

Note that this is just a start. I am not adding svg error reporting everywhere yet (so nothing is in place for reporting path syntax errors) since I&apos;d like to know whether this is the right approach :)
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>38478</commentid>
    <comment_count>2</comment_count>
      <attachid>12145</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-01 13:38:31 -0800</bug_when>
    <thetext>Comment on attachment 12145
First attempt

I don&apos;t like the idea of stopping parsing.  Also fprintfs are a bad idea for the layout tests, we should just remove those.

I think reporting errors is great.  I don&apos;t think we should stop parsing however.  Long term we could consider offering some sort of &quot;debug mode&quot; in Safari which would stop parsing, etc.  But I still think that&apos;s probably a bad idea.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>37268</commentid>
    <comment_count>3</comment_count>
      <attachid>12193</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-01-03 11:15:49 -0800</bug_when>
    <thetext>Created attachment 12193
Improved patch

This patch should be much better. It reports a lot of errors that occur during parsing and DOM changes.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36905</commentid>
    <comment_count>4</comment_count>
      <attachid>12193</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2007-01-05 00:56:11 -0800</bug_when>
    <thetext>Comment on attachment 12193
Improved patch

we discussed a bunch of improvements over irc, including making lineNumber(), etc pure virtual, using contextElement() instead of passing document() and cleaning up the long ifs which repeatedly called the same error message.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36860</commentid>
    <comment_count>5</comment_count>
      <attachid>12244</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-01-05 12:45:54 -0800</bug_when>
    <thetext>Created attachment 12244
Improved patch

This should fix most of MacDome&apos;s issues. It doesnt seem worth it to make lineNumber() pure virtual, since three Tokenizer-derived classes in loader/ would need the same base implementation.
It is hard to get the js line numbers. Maybe that needs to be done later.
I also split out Tokenizer itself. That is not really required for this patch to work, but I thought it may make sense.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36802</commentid>
    <comment_count>6</comment_count>
      <attachid>12244</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2007-01-05 15:11:54 -0800</bug_when>
    <thetext>Comment on attachment 12244
Improved patch

r- for a couple style issues

In Tokenizer.h (I do realize that this is just a copy and paste but we might as well get it right):

There should not be a trailing underscore.

+#ifndef Tokenizer_h_
+#define Tokenizer_h_

Put the brace on the same line as the class name.

+class Tokenizer
+{

Indent the initialization list and put the braces on two lines.

+    Tokenizer(bool viewSourceMode = false) 
+    : m_parserStopped(false)
+    , m_inViewSourceMode(viewSourceMode)
+    {}

You should also indent the whole class declaration.

Add comments to closing brace and #endif.

+}
+
+#endif


In SVGDocumentExtensions.cpp:

The lines (seen in both reportWarning() and reportError())

+        int lineNumber = 1;
+        if (m_doc-&gt;tokenizer())
+            lineNumber =  m_doc-&gt;tokenizer()-&gt;lineNumber();

could be clearer if written in one line, like:

    int lineNumber = m_doc-&gt;tokenizer() ? m_doc-&gt;tokenizer()-&gt;lineNumber() : 1;

(note that I got rid of the double space :) )


The changes in SVGFitToViewBox.h don&apos;t seem to have anything todo with the patch.


In SVGParserUtilities.h:

As long as you are changing the return value, please fix the &amp;.

+        bool parsePoints(const String &amp;points) const;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36521</commentid>
    <comment_count>7</comment_count>
      <attachid>12278</attachid>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-01-07 08:32:33 -0800</bug_when>
    <thetext>Created attachment 12278
Improved patch

Deciding to not touch Tokenizer too much since it is unrelated to the patch. This patch should address
Sam&apos;s issues.
Cheers,

Rob.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>36512</commentid>
    <comment_count>8</comment_count>
    <who name="Rob Buis">rwlbuis</who>
    <bug_when>2007-01-07 09:24:51 -0800</bug_when>
    <thetext>Landed in r18652.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12145</attachid>
            <date>2007-01-01 11:59:09 -0800</date>
            <delta_ts>2007-01-03 11:15:49 -0800</delta_ts>
            <desc>First attempt</desc>
            <filename>10362.diff</filename>
            <type>text/plain</type>
            <size>14195</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODUwNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzcgQEAKKzIwMDctMDEtMDEgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzYyCisgICAgICAgIFNWRyBuZWVkcyB0byBz
dXBwb3J0IFNWR0Vycm9yIGV2ZW50cyBhbmQgc29tZSBmb3JtIG9mICJlcnJvciBzdGF0ZSIKKwor
ICAgICAgICBSZXBvcnQgU1ZHIHdhcm5pbmdzIG9uIGNvbnNvbGUgYW5kIENMSS4gSGFsdCBwYXJz
aW5nL3JlbmRlcmluZworICAgICAgICB3aGVuIGVuY291bnRlcmluZyBhIChmYXRhbCkgU1ZHIGVy
cm9yLgorCisgICAgICAgICoga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZXBvcnRXYXJuaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0RXJyb3IpOgor
ICAgICAgICAqIGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmg6CisgICAgICAgICog
a3N2ZzIvc3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2ly
Y2xlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdFbGVtZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3Zn
Mi9zdmcvU1ZHRml0VG9WaWV3Qm94Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR01hcmtlckVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHTWFya2VyRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBr
c3ZnMi9zdmcvU1ZHU3ltYm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdTeW1i
b2xFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R1ZpZXdFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1ZpZXdFbGVtZW50OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZSk6CisKIDIwMDctMDEtMDEgIEVyaWMgU2VpZGVsICA8ZXJpY0B3ZWJr
aXQub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IGFuZGVyc2NhLgpJbmRleDogV2ViQ29yZS9r
c3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE4NTA3KQor
KysgV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTIzLDEzICsyMywxNyBAQAogI2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAi
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAKKyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNp
bmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50
TGlzdGVuZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgi
CisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRl
ICJUaW1lU2NoZWR1bGVyLmgiCi0jaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAi
WE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAia2pzX3Byb3h5LmgiCi0jaW5jbHVkZSAiU1ZHU1ZH
RWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTg1LDYgKzg5LDE5IEBAIHZv
aWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp1bnBhdXNlQW5pbWEKICAgICAgICAgKCppdHIpLT51
bnBhdXNlQW5pbWF0aW9ucygpOwogfQogCit2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVw
b3J0V2FybmluZyhjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgZnByaW50ZihzdGRlcnIs
ICJTVkcgV2FybmluZzogJXNcbiIsIG1lc3NhZ2UuZGVwcmVjYXRlZFN0cmluZygpLmFzY2lpKCkp
OworICAgIGlmIChQYWdlKiBwYWdlID0gbV9kb2MtPmZyYW1lKCktPnBhZ2UoKSkKKyAgICAgICAg
cGFnZS0+Y2hyb21lKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUobWVzc2FnZSwgMSwgU3RyaW5nKCkp
OyAvL2ZpeG1lOiBwcm92aWRlIGEgcmVhbCBsaW5lIG51bWJlciBhbmQgc291cmNldXJsCit9CisK
K3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJTVkcgRXJyb3I6ICVzXG4iLCBtZXNzYWdl
LmRlcHJlY2F0ZWRTdHJpbmcoKS5hc2NpaSgpKTsKKyAgICBtX2RvYy0+dG9rZW5pemVyKCktPnN0
b3BQYXJzaW5nKCk7Cit9CisKIH0KIAogI2VuZGlmCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2Mv
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9taXNj
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxODUwNykKKysrIFdlYkNvcmUva3N2
ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNTksNiAr
NTksOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVu
cGF1c2VBbmltYXRpb25zKCk7CiAKKyAgICB2b2lkIHJlcG9ydFdhcm5pbmcoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCByZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmKTsKKwogcHJpdmF0ZToKICAg
ICBEb2N1bWVudCogbV9kb2M7IC8vIHdlYWsgcmVmZXJlbmNlCiAgICAgSGFzaFNldDxTVkdTVkdF
bGVtZW50Kj4gbV90aW1lQ29udGFpbmVyczsgLy8gRm9yIFNWRyAxLjIgc3VwcG9ydCB0aGlzIHdp
bGwgbmVlZCB0byBiZSBtYWRlIG1vcmUgZ2VuZXJhbC4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODUwNykKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0NpcmNsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1NiwxMSBAQCB2
b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgIHNldEN4QmFz
ZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7ICAgICAgIAog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQogICAgICAgICBz
ZXRDeUJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsK
LSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKQorICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ckF0dHIpIHsKICAgICAgICAgc2V0UkJhc2VW
YWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZU90aGVyLCB2YWx1ZSkpOwotICAgIGVsc2Ug
eworICAgICAgICBpZiAocigpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgp
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZv
ciBjaXJjbGUgPHI+IGlzIGFuIGVycm9yIik7CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNW
R1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAxODUwNykKKysrIFdlYkNvcmUva3N2
ZzIvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIFBh
c3NSZWZQdHI8Q2xhc3NOYW1lOjpTVkdBbmltYXRlZFRlbXBsYXQKIH0KIAogbmFtZXNwYWNlIFdl
YkNvcmUgewotICAgIGNsYXNzIERvY3VtZW50UHRyOwogICAgIGNsYXNzIEVjbWE7CiAgICAgY2xh
c3MgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzsKICAgICBjbGFzcyBTVkdNYXRyaXg7CkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODUwNykKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTksMTEgKzU5LDE1IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmkKICAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0
aCwgdmFsdWUpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0
cikKICAgICAgICAgc2V0Q3lCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWln
aHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0
dHIpCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAg
ICAgICAgc2V0UnhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgdmFs
dWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikKKyAg
ICAgICAgaWYgKHJ4KCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIGVs
bGlwc2UgPHJ4PiBpcyBhbiBlcnJvciIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjpyeUF0dHIpIHsKICAgICAgICAgc2V0UnlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRo
aXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSB7CisgICAgICAgIGlmIChy
eSgpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRl
bnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBlbGxpcHNlIDxyeT4g
aXMgYW4gZXJyb3IiKTsKKyAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAo
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMTg1MDcpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQs
MTIgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgog
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0cmlu
Z0ltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsNyArNDcsNyBAQCBTVkdGaXRU
b1ZpZXdCb3g6On5TVkdGaXRUb1ZpZXdCb3goKQogQU5JTUFURURfUFJPUEVSVFlfREVGSU5JVElP
TlNfV0lUSF9DT05URVhUKFNWR0ZpdFRvVmlld0JveCwgRmxvYXRSZWN0LCBSZWN0LCByZWN0LCBW
aWV3Qm94LCB2aWV3Qm94LCBTVkdOYW1lczo6dmlld0JveEF0dHIubG9jYWxOYW1lKCksIG1fdmll
d0JveCkKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TX1dJVEhfQ09OVEVYVChTVkdGaXRU
b1ZpZXdCb3gsIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBw
cmVzZXJ2ZUFzcGVjdFJhdGlvLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJh
dGlvLCBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIubG9jYWxOYW1lKCksIG1fcHJl
c2VydmVBc3BlY3RSYXRpby5nZXQoKSkKIAotdm9pZCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmll
d0JveChjb25zdCBTdHJpbmcmIHN0cikKK3ZvaWQgU1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdC
b3goY29uc3QgU3RyaW5nJiBzdHIsIERvY3VtZW50KiBkb2MpCiB7CiAgICAgZG91YmxlIHggPSAw
LCB5ID0gMCwgdyA9IDAsIGggPSAwOwogICAgIGNvbnN0IFVDaGFyKiBjID0gc3RyLmNoYXJhY3Rl
cnMoKTsKQEAgLTU1LDI3ICs1NiwyNCBAQCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VWaWV3
Qm94KGNvbnN0CiAgICAgc2tpcE9wdGlvbmFsU3BhY2VzKGMsIGVuZCk7CiAKICAgICBpZiAoIXBh
cnNlTnVtYmVyKGMsIGVuZCwgeCkpCi0gICAgICAgIGdvdG8gYmFpbF9vdXQ7Ci0KLSAgICBpZiAo
IXBhcnNlTnVtYmVyKGMsIGVuZCwgeSkpCi0gICAgICAgIGdvdG8gYmFpbF9vdXQ7Ci0KLSAgICBp
ZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgdykgfHwgdyA8IDAuMCkgLy8gY2hlY2sgdGhhdCB3aWR0
aCBpcyBwb3NpdGl2ZQotICAgICAgICBnb3RvIGJhaWxfb3V0OwotCi0gICAgaWYgKCFwYXJzZU51
bWJlcihjLCBlbmQsIGgsIGZhbHNlKSB8fCBoIDwgMC4wKSAvLyBjaGVjayB0aGF0IGhlaWdodCBp
cyBwb3NpdGl2ZQotICAgICAgICBnb3RvIGJhaWxfb3V0OwotCi0gICAgc2tpcE9wdGlvbmFsU3Bh
Y2VzKGMsIGVuZCk7Ci0KLSAgICBpZiAoYyA8IGVuZCkgLy8gbm90aGluZyBzaG91bGQgY29tZSBh
ZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJlcgotICAgICAgICBnb3RvIGJhaWxfb3V0OwotCi0g
ICAgc2V0Vmlld0JveEJhc2VWYWx1ZShGbG9hdFJlY3QoeCwgeSwgdywgaCkpOwotICAgIHJldHVy
bjsKLQotYmFpbF9vdXQ6OwotICAgIC8vIEZJWE1FOiBQZXIgdGhlIHNwZWMgd2UgYXJlIHN1cHBv
c2VkIHRvIHNldCB0aGUgZG9jdW1lbnQgaW50byBhbiAiZXJyb3Igc3RhdGUiIGhlcmUuCisgICAg
ICAgIGRvYy0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRXYXJuaW5nKCJQcm9ibGVtIHBh
cnNpbmcgdmlld0JveD1cIiIgKyBzdHIgKyAiXCIiKTsKKyAgICBlbHNlIGlmICghcGFyc2VOdW1i
ZXIoYywgZW5kLCB5KSkKKyAgICAgICAgZG9jLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9y
dFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiArIHN0ciArICJcIiIpOworICAg
IGVsc2UgaWYgKCFwYXJzZU51bWJlcihjLCBlbmQsIHcpKQorICAgICAgICBkb2MtPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIi
ICsgc3RyICsgIlwiIik7CisgICAgZWxzZSBpZiAodyA8IDAuMCkgLy8gY2hlY2sgdGhhdCB3aWR0
aCBpcyBwb3NpdGl2ZQorICAgICAgICBkb2MtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0
RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggd2lkdGggaXMgYW4gZXJyb3IiKTsK
KyAgICBlbHNlIGlmICghcGFyc2VOdW1iZXIoYywgZW5kLCBoLCBmYWxzZSkpCisgICAgICAgIGRv
Yy0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRXYXJuaW5nKCJQcm9ibGVtIHBhcnNpbmcg
dmlld0JveD1cIiIgKyBzdHIgKyAiXCIiKTsKKyAgICBlbHNlIGlmIChoIDwgMC4wKSAvLyBjaGVj
ayB0aGF0IGhlaWdodCBpcyBwb3NpdGl2ZQorICAgICAgICBkb2MtPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggaGVpZ2h0IGlz
IGFuIGVycm9yIik7CisgICAgZWxzZSB7CisgICAgICAgIHNraXBPcHRpb25hbFNwYWNlcyhjLCBl
bmQpOworICAgICAgICBpZiAoYyA8IGVuZCkgLy8gbm90aGluZyBzaG91bGQgY29tZSBhZnRlciB0
aGUgbGFzdCwgZm91cnRoIG51bWJlcgorICAgICAgICAgICAgZG9jLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCktPnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiArIHN0ciAr
ICJcIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRWaWV3Qm94QmFzZVZhbHVlKEZs
b2F0UmVjdCh4LCB5LCB3LCBoKSk7CisgICAgfQogfQogCiBBZmZpbmVUcmFuc2Zvcm0gU1ZHRml0
VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGZsb2F0IHZpZXdXaWR0aCwgZmxvYXQg
dmlld0hlaWdodCkgY29uc3QKQEAgLTg5LDEwICs4NywxMCBAQCBBZmZpbmVUcmFuc2Zvcm0gU1ZH
Rml0VG9WaWV3Qm94Ojp2aWV3Qm94CiAgICAgICAgICAgICAwLCAwLCB2aWV3V2lkdGgsIHZpZXdI
ZWlnaHQpOwogfQogCi1ib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
TWFwcGVkQXR0cmlidXRlKiBhdHRyKQorYm9vbCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgRG9jdW1lbnQqIGRvYykKIHsKICAgICBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikgewotICAgICAgICBwYXJz
ZVZpZXdCb3goYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIHBhcnNlVmlld0JveChhdHRyLT52YWx1
ZSgpLCBkb2MpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIpIHsKICAgICAgICAgcHJl
c2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpLT5wYXJzZVByZXNlcnZlQXNwZWN0UmF0aW8oYXR0
ci0+dmFsdWUoKSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkocmV2aXNp
b24gMTg1MDcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogICAgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNB
LgogKi8KIAotI2lmbmRlZiBLU1ZHX1NWR0ZpdFRvVmlld0JveEltcGxfSAotI2RlZmluZSBLU1ZH
X1NWR0ZpdFRvVmlld0JveEltcGxfSAorI2lmbmRlZiBTVkdGaXRUb1ZpZXdCb3hfSAorI2RlZmlu
ZSBTVkdGaXRUb1ZpZXdCb3hfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAKICNpbmNsdWRlICJTVkdF
bGVtZW50LmgiCkBAIC0yOSw2ICsyOSw3IEBACiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgY2xh
c3MgQXR0cmlidXRlOwogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKKyAgICBjbGFzcyBEb2N1
bWVudDsKICAgICBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOwogICAgIGNsYXNzIFN0cmlu
Z0ltcGw7CiAKQEAgLTM4LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAg
IHZpcnR1YWwgflNWR0ZpdFRvVmlld0JveCgpOwogCiAgICAgICAgIC8vICdTVkdGaXRUb1ZpZXdC
b3gnIGZ1bmN0aW9ucwotICAgICAgICB2b2lkIHBhcnNlVmlld0JveChjb25zdCBTdHJpbmcmKTsK
KyAgICAgICAgdm9pZCBwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nJiwgRG9jdW1lbnQqKTsKICAg
ICAgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dp
ZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdDsKIAotICAgICAgICBib29sIHBhcnNlTWFwcGVk
QXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgICAgICBib29sIHBhcnNlTWFwcGVkQXR0
cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSosIERvY3VtZW50Kik7CiAKICAgICBwcm90ZWN0ZWQ6CiAg
ICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVsZW1lbnQoKSBjb25zdCA9
IDA7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkocmV2aXNpb24g
MTg1MDcpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdNYXJrZXJFbGVtZW50LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNyArOTAsNyBAQCB2b2lkIFNWR01hcmtlckVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmliCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChTVkdFeHRlcm5hbFJl
c291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1
dGUoYXR0cikpCisgICAgICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIsIGRvY3VtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFNW
R1N0eWxlZEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAkocmV2aXNpb24gMTg1MDcpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
OSw3ICsxMDksNyBAQCB2b2lkIFNWR1BhdHRlcm5FbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpCiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVp
cmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCisg
ICAgICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIsIGRv
Y3VtZW50KCkpKQogICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIFNWR1N0eWxlZEVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHU1ZHRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4NTA3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHU1ZH
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNCw3ICsyMDQsNyBAQCB2b2lkIFNWR1NW
R0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlCiAgICAgICAgICAgICByZXR1cm47CiAgICAg
ICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0ZpdFRvVmlld0Jv
eDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikgJiYgcmVuZGVyZXIoKSkKKyAgICAgICAgaWYg
KFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0ciwgZG9jdW1lbnQoKSkg
JiYgcmVuZGVyZXIoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR0NvbnRhaW5l
cio+KHJlbmRlcmVyKCkpLT5zZXRWaWV3Qm94KHZpZXdCb3goKSk7CiAgICAgICAgIGlmIChTVkda
b29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
ODUwNykKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWIKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1Jl
cXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgcmV0dXJuOwotICAg
IGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQorICAgIGlm
IChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIsIGRvY3VtZW50KCkp
KQogICAgICAgICByZXR1cm47CiAKICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1ZpZXdFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdWaWV3RWxlbWVudC5jcHAJKHJl
dmlzaW9uIDE4NTA3KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVmlld0VsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MCw3ICs2MCw3IEBAIHZvaWQgU1ZHVmlld0VsZW1lbnQ6OnBhcnNl
TWFwcGVkQXR0cmlidXQKICAgICAgICAgdmlld1RhcmdldCgpLT5yZXNldCh2YWx1ZSk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIGlmKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlKGF0dHIpCi0gICAgICAgICAgIHx8IFNWR0ZpdFRvVmlld0JveDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoYXR0cikKKyAgICAgICAgICAgfHwgU1ZHRml0VG9WaWV3Qm94OjpwYXJz
ZU1hcHBlZEF0dHJpYnV0ZShhdHRyLCBkb2N1bWVudCgpKQogICAgICAgICAgICB8fCBTVkdab29t
QW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsK
IAo=
</data>
<flag name="review"
          id="4495"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12193</attachid>
            <date>2007-01-03 11:15:49 -0800</date>
            <delta_ts>2007-01-05 12:45:54 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>10362-2.diff</filename>
            <type>text/plain</type>
            <size>27499</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODU0NSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMzggQEAKKzIwMDctMDEtMDEgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzYyCisgICAgICAgIFNWRyBuZWVkcyB0byBz
dXBwb3J0IFNWR0Vycm9yIGV2ZW50cyBhbmQgc29tZSBmb3JtIG9mICJlcnJvciBzdGF0ZSIKKwor
ICAgICAgICBSZXBvcnQgU1ZHIHdhcm5pbmdzIGFuZCBlcnJvcnMgb24gKEpTKSBjb25zb2xlLgor
ICAgICAgICBFeHBvc2UgbGluZSBhbmQgY29sdW1uIG51bWJlciBnZXR0ZXJzIGluIFRva2VuaXpl
ciBpbgorICAgICAgICBvcmRlciB0byBkaXNwbGF5IHRoZW0gd2l0aCB0aGUgZXJyb3IgbWVzc2Fn
ZS4KKworICAgICAgICAqIGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0V2FybmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlcG9ydEVycm9yKToKKyAg
ICAgICAgKiBrc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNs
ZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZH
RWxlbWVudC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdFbGxpcHNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3gpOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdNYXJrZXJFbGVt
ZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR01hcmtlckVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0dGVybkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHU1ZHRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdTVkdFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2
ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU3ltYm9s
RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdW
aWV3RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdWaWV3RWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOgorCiAyMDA3LTAxLTAzICBMYXJzIEtub2xsIDxsYXJzQHRyb2xsdGVj
aC5jb20+CiAKICAgICAgICAgRml4IHRoZSBRdCBidWlsZApJbmRleDogV2ViQ29yZS9kb20vWE1M
VG9rZW5pemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3Bw
CShyZXZpc2lvbiAxODU0NSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMywxMyArMTEzLDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9v
bCB3ZWxsRm9ybWVkKCkgY29uc3QgeyByZXR1cm4gIW1fc2F3RXJyb3I7IH0KIAorICAgIHZpcnR1
YWwgaW50IGxpbmVOdW1iZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIo
KSBjb25zdDsKKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVQYXJzZXJDb250ZXh0KCk7
CiAgICAgdm9pZCBzZXRDdXJyZW50Tm9kZShOb2RlKik7CiAKLSAgICBpbnQgbGluZU51bWJlcigp
IGNvbnN0OwotICAgIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKLQogICAgIHZvaWQgaW5zZXJ0
RXJyb3JNZXNzYWdlQmxvY2soKTsKIAogICAgIGJvb2wgZW50ZXJUZXh0KCk7CkluZGV4OiBXZWJD
b3JlL2RvbS9YTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tl
bml6ZXIuaAkocmV2aXNpb24gMTg1NDUpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaAko
d29ya2luZyBjb3B5KQpAQCAtNjUsNiArNjUsOSBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIGJv
b2wgd2VsbEZvcm1lZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KIAorICAgIHZpcnR1YWwgaW50
IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiAtMTsgfQorICAgIHZpcnR1YWwgaW50IGNvbHVt
bk51bWJlcigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisKIHByb3RlY3RlZDoKICAgICAvLyBUaGUg
dG9rZW5pemVyIGhhcyBidWZmZXJzLCBzbyBwYXJzaW5nIG1heSBjb250aW51ZSBldmVuIGFmdGVy
CiAgICAgLy8gaXQgc3RvcHMgcmVjZWl2aW5nIGRhdGEuIFdlIHVzZSBtX3BhcnNlclN0b3BwZWQg
dG8gc3RvcCB0aGUgdG9rZW5pemVyCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9j
dW1lbnRFeHRlbnNpb25zLmNwcAkocmV2aXNpb24gMTg1NDUpCisrKyBXZWJDb3JlL2tzdmcyL21p
c2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjUsMTMgKzI1
LDE3IEBACiAjaWZkZWYgU1ZHX1NVUFBPUlQKICNpbmNsdWRlICJTVkdEb2N1bWVudEV4dGVuc2lv
bnMuaCIKIAorI2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIkNocm9tZS5oIgog
I2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnRMaXN0ZW5lci5oIgogI2luY2x1
ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXIuaCIKKyNpbmNsdWRlICJQYWdlLmgi
CisjaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlRpbWVTY2hlZHVsZXIuaCIK
LSNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJYTUxUb2tlbml6ZXIuaCIKICNp
bmNsdWRlICJranNfcHJveHkuaCIKLSNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIApAQCAtODcsNiArOTEsMTggQEAgdm9pZCBTVkdEb2N1bWVudEV4dGVu
c2lvbnM6OnVucGF1c2VBbmltYQogICAgICAgICAoKml0ciktPnVucGF1c2VBbmltYXRpb25zKCk7
CiB9CiAKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZXBvcnRXYXJuaW5nKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKK3sKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9jLT5mcmFtZSgpLT5w
YWdlKCkpCisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKCJXYXJu
aW5nOiAiICsgbWVzc2FnZSwgbV9kb2MtPnRva2VuaXplcigpID8gbV9kb2MtPnRva2VuaXplcigp
LT5saW5lTnVtYmVyKCkgOiAxLCBTdHJpbmcoKSk7Cit9CisKK3ZvaWQgU1ZHRG9jdW1lbnRFeHRl
bnNpb25zOjpyZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgaWYgKFBh
Z2UqIHBhZ2UgPSBtX2RvYy0+ZnJhbWUoKS0+cGFnZSgpKQorICAgICAgICBwYWdlLT5jaHJvbWUo
KS0+YWRkTWVzc2FnZVRvQ29uc29sZSgiRXJyb3I6ICIgKyBtZXNzYWdlLCBtX2RvYy0+dG9rZW5p
emVyKCkgPyBtX2RvYy0+dG9rZW5pemVyKCktPmxpbmVOdW1iZXIoKSA6IDEsIFN0cmluZygpKTsK
K30KKwogdm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25z
dCBBdG9taWNTdHJpbmcmIGlkLCBTVkdTdHlsZWRFbGVtZW50KiBvYmopCiB7CiAgICAgaWYgKG1f
cGVuZGluZ1Jlc291cmNlcy5jb250YWlucyhpZCkpCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2Mv
U1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9taXNj
L1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxODU0NSkKKysrIFdlYkNvcmUva3N2
ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiAr
NjAsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVu
cGF1c2VBbmltYXRpb25zKCk7CiAKKyAgICB2b2lkIHJlcG9ydFdhcm5pbmcoY29uc3QgU3RyaW5n
Jik7CisgICAgdm9pZCByZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmKTsKKwogcHJpdmF0ZToKICAg
ICBEb2N1bWVudCogbV9kb2M7IC8vIHdlYWsgcmVmZXJlbmNlCiAgICAgSGFzaFNldDxTVkdTVkdF
bGVtZW50Kj4gbV90aW1lQ29udGFpbmVyczsgLy8gRm9yIFNWRyAxLjIgc3VwcG9ydCB0aGlzIHdp
bGwgbmVlZCB0byBiZSBtYWRlIG1vcmUgZ2VuZXJhbC4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0NpcmNsZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0NpcmNsZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODU0NSkKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0NpcmNsZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1NiwxMSBAQCB2
b2lkIFNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgIHNldEN4QmFz
ZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7ICAgICAgIAog
ICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQogICAgICAgICBz
ZXRDeUJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsK
LSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKQorICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ckF0dHIpIHsKICAgICAgICAgc2V0UkJhc2VW
YWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZU90aGVyLCB2YWx1ZSkpOwotICAgIGVsc2Ug
eworICAgICAgICBpZiAocigpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgp
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZv
ciBjaXJjbGUgPHI+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAxODU0NSkKKysrIFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBA
IFBhc3NSZWZQdHI8Q2xhc3NOYW1lOjpTVkdBbmltYXRlZFRlbXBsYXQKIH0KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewotICAgIGNsYXNzIERvY3VtZW50UHRyOwogICAgIGNsYXNzIEVjbWE7CiAgICAg
Y2xhc3MgU1ZHUHJlc2VydmVBc3BlY3RSYXRpbzsKICAgICBjbGFzcyBTVkdNYXRyaXg7CkluZGV4
OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODU0NSkK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNTksMTEgKzU5LDE1IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVk
QXR0cmkKICAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVX
aWR0aCwgdmFsdWUpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5
QXR0cikKICAgICAgICAgc2V0Q3lCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVI
ZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpy
eEF0dHIpCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsK
ICAgICAgICAgc2V0UnhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwg
dmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikK
KyAgICAgICAgaWYgKHJ4KCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9y
IGVsbGlwc2UgPHJ4PiBpcyBub3QgYWxsb3dlZCIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpyeUF0dHIpIHsKICAgICAgICAgc2V0UnlCYXNlVmFsdWUoU1ZHTGVu
Z3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSB7CisgICAgICAg
IGlmIChyeSgpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBlbGxpcHNl
IDxyeT4gaXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVz
dHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMTg1NDUpCisrKyBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwxMSArMjQsMTIgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZpdFRvVmll
d0JveC5oIgogCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCisjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZH
TmFtZXMuaCIKICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdQ
cmVzZXJ2ZUFzcGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1
ZGUgIlN0cmluZ0ltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDYsNyArNDcsNyBA
QCBTVkdGaXRUb1ZpZXdCb3g6On5TVkdGaXRUb1ZpZXdCb3goKQogQU5JTUFURURfUFJPUEVSVFlf
REVGSU5JVElPTlNfV0lUSF9DT05URVhUKFNWR0ZpdFRvVmlld0JveCwgRmxvYXRSZWN0LCBSZWN0
LCByZWN0LCBWaWV3Qm94LCB2aWV3Qm94LCBTVkdOYW1lczo6dmlld0JveEF0dHIubG9jYWxOYW1l
KCksIG1fdmlld0JveCkKIEFOSU1BVEVEX1BST1BFUlRZX0RFRklOSVRJT05TX1dJVEhfQ09OVEVY
VChTVkdGaXRUb1ZpZXdCb3gsIFNWR1ByZXNlcnZlQXNwZWN0UmF0aW8qLCBQcmVzZXJ2ZUFzcGVj
dFJhdGlvLCBwcmVzZXJ2ZUFzcGVjdFJhdGlvLCBQcmVzZXJ2ZUFzcGVjdFJhdGlvLCBwcmVzZXJ2
ZUFzcGVjdFJhdGlvLCBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIubG9jYWxOYW1l
KCksIG1fcHJlc2VydmVBc3BlY3RSYXRpby5nZXQoKSkKIAotdm9pZCBTVkdGaXRUb1ZpZXdCb3g6
OnBhcnNlVmlld0JveChjb25zdCBTdHJpbmcmIHN0cikKK3ZvaWQgU1ZHRml0VG9WaWV3Qm94Ojpw
YXJzZVZpZXdCb3goY29uc3QgU3RyaW5nJiBzdHIsIERvY3VtZW50KiBkb2MpCiB7CiAgICAgZG91
YmxlIHggPSAwLCB5ID0gMCwgdyA9IDAsIGggPSAwOwogICAgIGNvbnN0IFVDaGFyKiBjID0gc3Ry
LmNoYXJhY3RlcnMoKTsKQEAgLTU1LDI3ICs1NiwyNCBAQCB2b2lkIFNWR0ZpdFRvVmlld0JveDo6
cGFyc2VWaWV3Qm94KGNvbnN0CiAgICAgc2tpcE9wdGlvbmFsU3BhY2VzKGMsIGVuZCk7CiAKICAg
ICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgeCkpCi0gICAgICAgIGdvdG8gYmFpbF9vdXQ7Ci0K
LSAgICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgeSkpCi0gICAgICAgIGdvdG8gYmFpbF9vdXQ7
Ci0KLSAgICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgdykgfHwgdyA8IDAuMCkgLy8gY2hlY2sg
dGhhdCB3aWR0aCBpcyBwb3NpdGl2ZQotICAgICAgICBnb3RvIGJhaWxfb3V0OwotCi0gICAgaWYg
KCFwYXJzZU51bWJlcihjLCBlbmQsIGgsIGZhbHNlKSB8fCBoIDwgMC4wKSAvLyBjaGVjayB0aGF0
IGhlaWdodCBpcyBwb3NpdGl2ZQotICAgICAgICBnb3RvIGJhaWxfb3V0OwotCi0gICAgc2tpcE9w
dGlvbmFsU3BhY2VzKGMsIGVuZCk7Ci0KLSAgICBpZiAoYyA8IGVuZCkgLy8gbm90aGluZyBzaG91
bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJlcgotICAgICAgICBnb3RvIGJhaWxf
b3V0OwotCi0gICAgc2V0Vmlld0JveEJhc2VWYWx1ZShGbG9hdFJlY3QoeCwgeSwgdywgaCkpOwot
ICAgIHJldHVybjsKLQotYmFpbF9vdXQ6OwotICAgIC8vIEZJWE1FOiBQZXIgdGhlIHNwZWMgd2Ug
YXJlIHN1cHBvc2VkIHRvIHNldCB0aGUgZG9jdW1lbnQgaW50byBhbiAiZXJyb3Igc3RhdGUiIGhl
cmUuCisgICAgICAgIGRvYy0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRXYXJuaW5nKCJQ
cm9ibGVtIHBhcnNpbmcgdmlld0JveD1cIiIgKyBzdHIgKyAiXCIiKTsKKyAgICBlbHNlIGlmICgh
cGFyc2VOdW1iZXIoYywgZW5kLCB5KSkKKyAgICAgICAgZG9jLT5hY2Nlc3NTVkdFeHRlbnNpb25z
KCktPnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3Qm94PVwiIiArIHN0ciArICJc
IiIpOworICAgIGVsc2UgaWYgKCFwYXJzZU51bWJlcihjLCBlbmQsIHcpKQorICAgICAgICBkb2Mt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZp
ZXdCb3g9XCIiICsgc3RyICsgIlwiIik7CisgICAgZWxzZSBpZiAodyA8IDAuMCkgLy8gY2hlY2sg
dGhhdCB3aWR0aCBpcyBwb3NpdGl2ZQorICAgICAgICBkb2MtPmFjY2Vzc1NWR0V4dGVuc2lvbnMo
KS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdCb3ggd2lkdGggaXMgbm90
IGFsbG93ZWQiKTsKKyAgICBlbHNlIGlmICghcGFyc2VOdW1iZXIoYywgZW5kLCBoLCBmYWxzZSkp
CisgICAgICAgIGRvYy0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRXYXJuaW5nKCJQcm9i
bGVtIHBhcnNpbmcgdmlld0JveD1cIiIgKyBzdHIgKyAiXCIiKTsKKyAgICBlbHNlIGlmIChoIDwg
MC4wKSAvLyBjaGVjayB0aGF0IGhlaWdodCBpcyBwb3NpdGl2ZQorICAgICAgICBkb2MtPmFjY2Vz
c1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIFZpZXdC
b3ggaGVpZ2h0IGlzIG5vdCBhbGxvd2VkIik7CisgICAgZWxzZSB7CisgICAgICAgIHNraXBPcHRp
b25hbFNwYWNlcyhjLCBlbmQpOworICAgICAgICBpZiAoYyA8IGVuZCkgLy8gbm90aGluZyBzaG91
bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJlcgorICAgICAgICAgICAgZG9jLT5h
Y2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydFdhcm5pbmcoIlByb2JsZW0gcGFyc2luZyB2aWV3
Qm94PVwiIiArIHN0ciArICJcIiIpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRWaWV3
Qm94QmFzZVZhbHVlKEZsb2F0UmVjdCh4LCB5LCB3LCBoKSk7CisgICAgfQogfQogCiBBZmZpbmVU
cmFuc2Zvcm0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94VG9WaWV3VHJhbnNmb3JtKGZsb2F0IHZp
ZXdXaWR0aCwgZmxvYXQgdmlld0hlaWdodCkgY29uc3QKQEAgLTg5LDEwICs4NywxMCBAQCBBZmZp
bmVUcmFuc2Zvcm0gU1ZHRml0VG9WaWV3Qm94Ojp2aWV3Qm94CiAgICAgICAgICAgICAwLCAwLCB2
aWV3V2lkdGgsIHZpZXdIZWlnaHQpOwogfQogCi1ib29sIFNWR0ZpdFRvVmlld0JveDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQorYm9vbCBTVkdGaXRUb1ZpZXdC
b3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0ciwgRG9jdW1lbnQq
IGRvYykKIHsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp2aWV3Qm94QXR0cikg
ewotICAgICAgICBwYXJzZVZpZXdCb3goYXR0ci0+dmFsdWUoKSk7CisgICAgICAgIHBhcnNlVmll
d0JveChhdHRyLT52YWx1ZSgpLCBkb2MpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cHJlc2VydmVBc3BlY3RSYXRpb0F0dHIp
IHsKICAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpb0Jhc2VWYWx1ZSgpLT5wYXJzZVByZXNlcnZl
QXNwZWN0UmF0aW8oYXR0ci0+dmFsdWUoKSk7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdG
aXRUb1ZpZXdCb3guaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1Zp
ZXdCb3guaAkocmV2aXNpb24gMTg1NDUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1Zp
ZXdCb3guaAkod29ya2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogICAgIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgogKi8KIAotI2lmbmRlZiBLU1ZHX1NWR0ZpdFRvVmlld0JveEltcGxf
SAotI2RlZmluZSBLU1ZHX1NWR0ZpdFRvVmlld0JveEltcGxfSAorI2lmbmRlZiBTVkdGaXRUb1Zp
ZXdCb3hfSAorI2RlZmluZSBTVkdGaXRUb1ZpZXdCb3hfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAK
ICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCkBAIC0yOSw2ICsyOSw3IEBACiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgY2xhc3MgQXR0cmlidXRlOwogICAgIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsK
KyAgICBjbGFzcyBEb2N1bWVudDsKICAgICBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOwog
ICAgIGNsYXNzIFN0cmluZ0ltcGw7CiAKQEAgLTM4LDEwICszOSwxMCBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAgICAgICAgIHZpcnR1YWwgflNWR0ZpdFRvVmlld0JveCgpOwogCiAgICAgICAgIC8v
ICdTVkdGaXRUb1ZpZXdCb3gnIGZ1bmN0aW9ucwotICAgICAgICB2b2lkIHBhcnNlVmlld0JveChj
b25zdCBTdHJpbmcmKTsKKyAgICAgICAgdm9pZCBwYXJzZVZpZXdCb3goY29uc3QgU3RyaW5nJiwg
RG9jdW1lbnQqKTsKICAgICAgICAgQWZmaW5lVHJhbnNmb3JtIHZpZXdCb3hUb1ZpZXdUcmFuc2Zv
cm0oZmxvYXQgdmlld1dpZHRoLCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdDsKIAotICAgICAgICBi
b29sIHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSopOworICAgICAgICBib29s
IHBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSosIERvY3VtZW50Kik7CiAKICAg
ICBwcm90ZWN0ZWQ6CiAgICAgICAgIHZpcnR1YWwgY29uc3QgU1ZHRWxlbWVudCogY29udGV4dEVs
ZW1lbnQoKSBjb25zdCA9IDA7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVsZW1l
bnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdlRWxlbWVudC5j
cHAJKHJldmlzaW9uIDE4NTQ1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUsOSArNzUsMTMgQEAgdm9pZCBTVkdJbWFnZUVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmlidQogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aCh0
aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7CiAgICAgICAgIGFkZENTU1Byb3BlcnR5KGF0
dHIsIENTU19QUk9QX1dJRFRILCB2YWx1ZSk7CisgICAgICAgIGlmICh3aWR0aCgpLnZhbHVlKCkg
PCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJl
cG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBpbWFnZSBhdHRyaWJ1dGUgPHdpZHRoPiBp
cyBub3QgYWxsb3dlZCIpOwogICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVz
OjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHNldEhlaWdodEJhc2VWYWx1ZShTVkdMZW5ndGgodGhp
cywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0
ciwgQ1NTX1BST1BfSEVJR0hULCB2YWx1ZSk7CisgICAgICAgIGlmIChoZWlnaHQoKS52YWx1ZSgp
IDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5y
ZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgaW1hZ2UgYXR0cmlidXRlIDxoZWlnaHQ+
IGlzIG5vdCBhbGxvd2VkIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpw
YXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODU0NSkKKysrIFdl
YkNvcmUva3N2ZzIvc3ZnL1NWR01hcmtlckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
MCw3ICs5MCw3IEBAIHZvaWQgU1ZHTWFya2VyRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWly
ZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAg
ICAgICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0ciwgZG9j
dW1lbnQoKSkpCiAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVu
dDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cik7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1BhcnNlclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDE4NTQ1KQorKysgV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5LDEwICsxMDks
MTAgQEAgYm9vbCBwYXJzZU51bWJlck9wdGlvbmFsTnVtYmVyKGNvbnN0IFN0cgogICAgIHJldHVy
biBjdXIgPT0gZW5kOwogfQogCi12b2lkIFNWR1BvbHlQYXJzZXI6OnBhcnNlUG9pbnRzKGNvbnN0
IFN0cmluZyYgcykgY29uc3QKK2Jvb2wgU1ZHUG9seVBhcnNlcjo6cGFyc2VQb2ludHMoY29uc3Qg
U3RyaW5nJiBzKSBjb25zdAogewogICAgIGlmIChzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJu
OworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjb25zdCBVQ2hhciogY3VyID0gcy5jaGFyYWN0
ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1ciArIHMubGVuZ3RoKCk7CiAKQEAgLTEy
MiwxMSArMTIyLDExIEBAIHZvaWQgU1ZHUG9seVBhcnNlcjo6cGFyc2VQb2ludHMoY29uc3QgU3QK
ICAgICB3aGlsZSAoMSkgewogICAgICAgICBkb3VibGUgeFBvcyA9IDA7CiAgICAgICAgIGlmICgh
cGFyc2VOdW1iZXIoY3VyLCBlbmQsIHhQb3MpKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBkb3VibGUgeVBvcyA9IDA7CiAgICAgICAgIGlm
ICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHlQb3MpKQotICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAgc3ZnUG9seVRvKHhQb3MsIHlQb3MsIHNl
Z21lbnROdW0rKyk7CiAgICAgfQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0
aWVzLmgJKHJldmlzaW9uIDE4NTQ1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRp
bGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcgKzY5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICB2aXJ0dWFsIH5TVkdQb2x5UGFyc2VyKCkg
eyB9Ci0gICAgICAgIHZvaWQgcGFyc2VQb2ludHMoY29uc3QgU3RyaW5nICZwb2ludHMpIGNvbnN0
OworICAgICAgICBib29sIHBhcnNlUG9pbnRzKGNvbnN0IFN0cmluZyAmcG9pbnRzKSBjb25zdDsK
IAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z1BvbHlUbyhkb3VibGUg
eDEsIGRvdWJsZSB5MSwgaW50IG5yKSBjb25zdCA9IDA7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZH
UGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODU0NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1BhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjY4LDExICsyNjgsMTYgQEAgdm9p
ZCBTVkdQYXRoRWxlbWVudDo6c3ZnQ2xvc2VQYXRoKCkKIAogdm9pZCBTVkdQYXRoRWxlbWVudDo6
cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQogeworICAgIGNvbnN0
IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OmRBdHRyKSB7CiAgICAgICAgIEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAg
ICAgIHBhdGhTZWdMaXN0KCktPmNsZWFyKGVjKTsKLSAgICAgICAgaWYgKCFwYXJzZVNWRyhhdHRy
LT52YWx1ZSgpLCB0cnVlKSkKLSAgICAgICAgICAgIHBhdGhTZWdMaXN0KCktPmNsZWFyKGVjKTsK
KyAgICAgICAgaWYgKCFwYXJzZVNWRyh2YWx1ZSwgdHJ1ZSkpCisgICAgICAgICAgICBkb2N1bWVu
dCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJQcm9ibGVtIHBhcnNpbmcg
ZD1cIiIgKyB2YWx1ZSArICJcIiIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpwYXRoTGVuZ3RoQXR0cikgeworICAgICAgICBtX3BhdGhMZW5ndGggPSB2YWx1ZS50
b0RvdWJsZSgpOworICAgICAgICBpZiAobV9wYXRoTGVuZ3RoIDwgMC4wKQorICAgICAgICAgICAg
ZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2
ZSB2YWx1ZSBmb3IgcGF0aCBhdHRyaWJ1dGUgPHBhdGhMZW5ndGg+IGlzIG5vdCBhbGxvd2VkIik7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQ
YXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4NTQ1KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NiwxMSArOTYsMTUgQEAg
dm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICBzZXRYQmFz
ZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7CiAgICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5QXR0cikKICAgICAgICAgc2V0WUJhc2VW
YWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikKKyAgICBlbHNlIGlmIChh
dHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJh
c2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAgICAgICAgaWYg
KHdpZHRoKCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHBhdHRlcm4g
YXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNl
VmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxz
ZSB7CisgICAgICAgIGlmICh3aWR0aCgpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZh
bHVlIGZvciBwYXR0ZXJuIGF0dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOworICAg
IH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdVUklSZWZlcmVuY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpAQCAtMTA5LDcgKzExMyw3IEBAIHZvaWQgU1ZHUGF0
dGVybkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgaWYgKFNWR0V4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBpZiAoU1ZHRml0VG9WaWV3Qm94
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKKyAgICAgICAgaWYgKFNWR0ZpdFRvVmlld0Jv
eDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0ciwgZG9jdW1lbnQoKSkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgU1ZHU3R5bGVkRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cik7CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCShyZXZpc2lvbiAx
ODU0NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDA0LCAyMDA1LCAy
MDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgotICAgICAgICAgICAg
ICAgICAgMjAwNCwgMjAwNSwgMjAwNiBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgorICAgICAgICAg
ICAgICAgICAgMjAwNCwgMjAwNSwgMjAwNiwgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgog
CiAgICAgVGhpcyBmaWxlIGlzIHBhcnQgb2YgdGhlIEtERSBwcm9qZWN0CiAKQEAgLTYyLDEwICs2
MiwxMiBAQCBTVkdQb2ludExpc3QqIFNWR1BvbHlFbGVtZW50OjphbmltYXRlZFBvCiAKIHZvaWQg
U1ZHUG9seUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJpYnV0ZSogYXR0
cikKIHsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFsdWUoKTsKICAg
ICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwb2ludHNBdHRyKSB7CiAgICAgICAgIEV4
Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgICAgICBwb2ludHMoKS0+Y2xlYXIoZWMpOwotICAgICAg
ICBwYXJzZVBvaW50cyhhdHRyLT52YWx1ZSgpKTsKKyAgICAgICAgaWYgKCFwYXJzZVBvaW50cyh2
YWx1ZSkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJl
cG9ydEVycm9yKCJQcm9ibGVtIHBhcnNpbmcgcG9pbnRzPVwiIiArIHZhbHVlICsgIlwiIik7CiAg
ICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1Jh
ZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTg1NDUpCisrKyBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Nyw5ICs2NywxMSBAQCB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDo6cGFyc2VNYXBw
CiAgICAgICAgIHNldEN4QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgs
IHZhbHVlKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpjeUF0dHIp
CiAgICAgICAgIHNldEN5QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlSGVpZ2h0
LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6ckF0dHIp
CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyQXR0cikgewogICAgICAg
ICBzZXRSQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlT3RoZXIsIHZhbHVlKSk7
Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmeEF0dHIpCisgICAgICAg
IGlmIChyKCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHJhZGlhbCBn
cmFkaWVudCByYWRpdXMgPHI+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4QXR0cikKICAgICAgICAgc2V0RnhCYXNlVmFsdWUoU1ZH
TGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKICAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ5QXR0cikKICAgICAgICAgc2V0RnlCYXNlVmFsdWUoU1ZH
TGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7CkluZGV4OiBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9z
dmcvU1ZHUmVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODU0NSkKKysrIFdlYkNvcmUva3N2ZzIv
c3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjEsMTUgKzYxLDIzIEBA
IHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQKICAgICAgICAgc2V0WEJh
c2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwogICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCiAgICAgICAgIHNldFlCYXNl
VmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpCi0gICAgICAgICBzZXRSeEJh
c2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKQotICAgICAgICAgc2V0UnlC
YXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAg
ZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKKyAgICAgICAgc2V0UnhCYXNl
VmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKKyAgICAgICAg
aWYgKHJ4KCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHJlY3QgPHJ4
PiBpcyBub3QgYWxsb3dlZCIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpyeUF0dHIpIHsKKyAgICAgICAgc2V0UnlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExl
bmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7CisgICAgICAgIGlmIChyeSgpLnZhbHVlKCkgPCAwLjAp
CisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVy
cm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciByZWN0IDxyeT4gaXMgbm90IGFsbG93ZWQiKTsKKyAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAg
ICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZh
bHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRy
KQorICAgICAgICBpZiAod2lkdGgoKS52YWx1ZSgpIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1l
bnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1
ZSBmb3IgcmVjdCA8d2lkdGg+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFz
ZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVs
c2UgeworICAgICAgICBpZiAoaGVpZ2h0KCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUg
dmFsdWUgZm9yIHJlY3QgPGhlaWdodD4gaXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2Ugewog
ICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lv
biAxODU0NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xOTYsOSArMTk2LDEzIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRo
QXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3Ro
TW9kZVdpZHRoLCB2YWx1ZSkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJP
UF9XSURUSCwgdmFsdWUpOworICAgICAgICBpZiAod2lkdGgoKS52YWx1ZSgpIDwgMC4wKQorICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigi
QSBuZWdhdGl2ZSB2YWx1ZSBmb3Igc3ZnIGF0dHJpYnV0ZSA8d2lkdGg+IGlzIG5vdCBhbGxvd2Vk
Iik7CiAgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIp
IHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2Rl
SGVpZ2h0LCB2YWx1ZSkpOwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9I
RUlHSFQsIHZhbHVlKTsKKyAgICAgICAgaWYgKGhlaWdodCgpLnZhbHVlKCkgPCAwLjApCisgICAg
ICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJB
IG5lZ2F0aXZlIHZhbHVlIGZvciBzdmcgYXR0cmlidXRlIDxoZWlnaHQ+IGlzIG5vdCBhbGxvd2Vk
Iik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJp
YnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTIwNiw3ICsyMTAsNyBAQCB2b2lk
IFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlCiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIGlmIChTVkdFeHRlcm5hbFJlc291cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0
dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaWYgKFNWR0ZpdFRv
Vmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikgJiYgcmVuZGVyZXIoKSkKKyAgICAg
ICAgaWYgKFNWR0ZpdFRvVmlld0JveDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0ciwgZG9jdW1l
bnQoKSkgJiYgcmVuZGVyZXIoKSkKICAgICAgICAgICAgIHN0YXRpY19jYXN0PFJlbmRlclNWR0Nv
bnRhaW5lcio+KHJlbmRlcmVyKCkpLT5zZXRWaWV3Qm94KHZpZXdCb3goKSk7CiAgICAgICAgIGlm
IChTVkdab29tQW5kUGFuOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAg
IHJldHVybjsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCShyZXZp
c2lvbiAxODU0NSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1N5bWJvbEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIHZvaWQgU1ZHU3ltYm9sRWxlbWVudDo6cGFy
c2VNYXBwZWRBdHRyaWIKICAgICAgICAgcmV0dXJuOwogICAgIGlmIChTVkdFeHRlcm5hbFJlc291
cmNlc1JlcXVpcmVkOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgcmV0dXJu
OwotICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQor
ICAgIGlmIChTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIsIGRvY3Vt
ZW50KCkpKQogICAgICAgICByZXR1cm47CiAKICAgICBTVkdTdHlsZWRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKTsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRDb250
ZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENv
bnRlbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTg1NDUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9T
VkdUZXh0Q29udGVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMTUg
QEAgdm9pZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogCiB2b2lkIFNWR1Rl
eHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBh
dHRyKQogeworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwog
ICAgIC8vaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGVuZ3RoQWRqdXN0QXR0cikKICAg
ICAvLyAgICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZh
bHVlKSk7CiAgICAgLy9lbHNlCi0gICAgeworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnRleHRMZW5ndGhBdHRyKSB7CisgICAgICAgIHNldFRleHRMZW5ndGhCYXNlVmFsdWUoU1ZH
TGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVPdGhlciwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHRleHRM
ZW5ndGgoKS52YWx1ZSgpIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZH
RXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdGV4dCBhdHRy
aWJ1dGUgPHRleHRMZW5ndGg+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTg1
NDUpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjYsMTEgKzY2LDE1IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdp
ZHRoLCB2YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0
dHIpCiAgICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWln
aHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0
aEF0dHIpCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIp
IHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVX
aWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omhl
aWdodEF0dHIpCisgICAgICAgIGlmICh3aWR0aCgpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAg
ICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0
aXZlIHZhbHVlIGZvciB1c2UgYXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKKyAg
ICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAg
ICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQs
IHZhbHVlKSk7Ci0gICAgZWxzZSB7CisgICAgICAgIGlmIChoZWlnaHQoKS52YWx1ZSgpIDwgMC4w
KQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRF
cnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdXNlIGF0dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3Qg
YWxsb3dlZCIpOworICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChTVkdM
YW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpJbmRleDogV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHVmlld0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR1ZpZXdFbGVtZW50LmNwcAkocmV2aXNpb24gMTg1NDUpCisrKyBXZWJDb3JlL2tzdmcyL3N2
Zy9TVkdWaWV3RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDcgKzYwLDcgQEAgdm9p
ZCBTVkdWaWV3RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dAogICAgICAgICB2aWV3VGFyZ2V0
KCktPnJlc2V0KHZhbHVlKTsKICAgICBlbHNlIHsKICAgICAgICAgaWYoU1ZHRXh0ZXJuYWxSZXNv
dXJjZXNSZXF1aXJlZDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikKLSAgICAgICAgICAgfHwg
U1ZHRml0VG9WaWV3Qm94OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKQorICAgICAgICAgICB8
fCBTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIsIGRvY3VtZW50KCkp
CiAgICAgICAgICAgIHx8IFNWR1pvb21BbmRQYW46OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIp
KQogICAgICAgICAgICAgcmV0dXJuOwogCg==
</data>
<flag name="review"
          id="4522"
          type_id="1"
          status="-"
          setter="eric"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12244</attachid>
            <date>2007-01-05 12:45:54 -0800</date>
            <delta_ts>2007-01-07 08:32:33 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>10362-4.diff</filename>
            <type>text/plain</type>
            <size>29558</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODYyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNjYgQEAKKzIwMDctMDEtMDUgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzYyCisgICAgICAgIFNWRyBuZWVkcyB0byBz
dXBwb3J0IFNWR0Vycm9yIGV2ZW50cyBhbmQgc29tZSBmb3JtIG9mICJlcnJvciBzdGF0ZSIKKwor
ICAgICAgICBSZXBvcnQgU1ZHIHdhcm5pbmdzIGFuZCBlcnJvcnMgb24gKEpTKSBjb25zb2xlLgor
ICAgICAgICBFeHBvc2UgbGluZSBhbmQgY29sdW1uIG51bWJlciBnZXR0ZXJzIGluIFRva2VuaXpl
ciBpbgorICAgICAgICBvcmRlciB0byBkaXNwbGF5IHRoZW0gd2l0aCB0aGUgZXJyb3IgbWVzc2Fn
ZS4KKworICAgICAgICAqIGRvbS9Ub2tlbml6ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpUb2tlbml6ZXI6OlRva2VuaXplcik6CisgICAgICAgIChXZWJDb3JlOjpUb2tlbml6ZXI6On5U
b2tlbml6ZXIpOgorICAgICAgICAoV2ViQ29yZTo6VG9rZW5pemVyOjpzdG9wUGFyc2luZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpUb2tlbml6ZXI6OnByb2Nlc3NpbmdEYXRhKToKKyAgICAgICAgKFdl
YkNvcmU6OlRva2VuaXplcjo6ZXhlY3V0aW5nU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6OlRv
a2VuaXplcjo6d2FudHNSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRva2VuaXplcjo6d3Jp
dGVSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlRva2VuaXplcjo6aW5WaWV3U291cmNlTW9k
ZSk6CisgICAgICAgIChXZWJDb3JlOjpUb2tlbml6ZXI6OnNldEluVmlld1NvdXJjZU1vZGUpOgor
ICAgICAgICAoV2ViQ29yZTo6VG9rZW5pemVyOjp3ZWxsRm9ybWVkKToKKyAgICAgICAgKFdlYkNv
cmU6OlRva2VuaXplcjo6bGluZU51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpUb2tlbml6ZXI6
OmNvbHVtbk51bWJlcik6CisgICAgICAgICogZG9tL1hNTFRva2VuaXplci5jcHA6CisgICAgICAg
ICogZG9tL1hNTFRva2VuaXplci5oOgorICAgICAgICAqIGh0bWwvSFRNTFRva2VuaXplci5oOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTFRva2VuaXplcjo6bGluZU51bWJlcik6CisgICAgICAgIChX
ZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpjb2x1bW5OdW1iZXIpOgorICAgICAgICAqIGtzdmcyL21p
c2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0RvY3Vt
ZW50RXh0ZW5zaW9uczo6cmVwb3J0V2FybmluZyk6CisgICAgICAgIChXZWJDb3JlOjpTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OnJlcG9ydEVycm9yKToKKyAgICAgICAgKiBrc3ZnMi9taXNjL1NWR0Rv
Y3VtZW50RXh0ZW5zaW9ucy5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdDaXJjbGVFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0NpcmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHRWxlbWVudC5oOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdFbGxp
cHNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9T
VkdGaXRUb1ZpZXdCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRml0VG9WaWV3Qm94Ojpw
YXJzZVZpZXdCb3gpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guaDoKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHSW1hZ2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlNWR0ltYWdlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcy
L3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seVBh
cnNlcjo6cGFyc2VQb2ludHMpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXJzZXJVdGlsaXRp
ZXMuaDoKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U1ZHUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAg
KiBrc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
UGF0dGVybkVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9z
dmcvU1ZHUG9seUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUG9seUVsZW1lbnQ6
OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAgICAgKiBrc3ZnMi9zdmcvU1ZHUmFkaWFsR3Jh
ZGllbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdSZWN0
RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdSZWN0RWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAg
ICAgICAgKiBrc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1RleHRDb250ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAg
ICAgICAqIGtzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1VzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKwogMjAwNy0wMS0wNSAgQW5kZXJz
IENhcmxzc29uICA8YWNhcmxzc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBN
YWNpZWouCkluZGV4OiBXZWJDb3JlL2RvbS9Ub2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2RvbS9Ub2tlbml6ZXIuaAkocmV2aXNpb24gMCkKKysrIFdlYkNvcmUvZG9tL1Rva2VuaXpl
ci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDc0IEBACisvKgorICogVGhpcyBmaWxlIGlzIHBh
cnQgb2YgdGhlIERPTSBpbXBsZW1lbnRhdGlvbiBmb3IgS0RFLgorICoKKyAqIENvcHlyaWdodCAo
QykgMjAwMCBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQorICogQ29weXJpZ2h0IChDKSAyMDA1
LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKgorICogVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMaWJy
YXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgc2VlIHRoZSBmaWxlIENP
UFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLAorICogQm9zdG9uLCBNQSAw
MjExMS0xMzA3LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgVG9rZW5pemVyX2hfCisjZGVmaW5l
IFRva2VuaXplcl9oXworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNlZ21lbnRlZFN0
cmluZzsKKworY2xhc3MgVG9rZW5pemVyCit7CitwdWJsaWM6CisgICAgVG9rZW5pemVyKGJvb2wg
dmlld1NvdXJjZU1vZGUgPSBmYWxzZSkgCisgICAgOiBtX3BhcnNlclN0b3BwZWQoZmFsc2UpCisg
ICAgLCBtX2luVmlld1NvdXJjZU1vZGUodmlld1NvdXJjZU1vZGUpCisgICAge30KKyAgICAKKyAg
ICB2aXJ0dWFsIH5Ub2tlbml6ZXIoKSB7fQorCisgICAgLy8gU2NyaXB0IG91dHB1dCBtdXN0IGJl
IHByZXBlbmRlZCwgd2hpbGUgbmV3IGRhdGEKKyAgICAvLyByZWNlaXZlZCBkdXJpbmcgZXhlY3V0
aW5nIGEgc2NyaXB0IG11c3QgYmUgYXBwZW5kZWQsIGhlbmNlIHRoZQorICAgIC8vIGV4dHJhIGJv
b2wgdG8gYmUgYWJsZSB0byBkaXN0aW5ndWlzaCBiZXR3ZWVuIGJvdGggY2FzZXMuCisgICAgLy8g
ZG9jdW1lbnQud3JpdGUoKSBhbHdheXMgdXNlcyBmYWxzZSwgd2hpbGUgdGhlIGxvYWRlciB1c2Vz
IHRydWUuCisgICAgdmlydHVhbCBib29sIHdyaXRlKGNvbnN0IFNlZ21lbnRlZFN0cmluZyYsIGJv
b2wgYXBwZW5kRGF0YSkgPSAwOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2goKSA9IDA7CisgICAg
dmlydHVhbCBib29sIGlzV2FpdGluZ0ZvclNjcmlwdHMoKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCB2b2lkIHN0b3BQYXJzaW5nKCkgeyBtX3BhcnNlclN0b3BwZWQgPSB0cnVlOyB9CisgICAgdmly
dHVhbCBib29sIHByb2Nlc3NpbmdEYXRhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGludCBleGVjdXRpbmdTY3JpcHQoKSBjb25zdCB7IHJldHVybiAwOyB9CisKKyAgICB2
aXJ0dWFsIGJvb2wgd2FudHNSYXdEYXRhKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKyAgICB2
aXJ0dWFsIGJvb2wgd3JpdGVSYXdEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pIHsgcmV0
dXJuIGZhbHNlOyB9CisgICAgCisgICAgYm9vbCBpblZpZXdTb3VyY2VNb2RlKCkgY29uc3QgeyBy
ZXR1cm4gbV9pblZpZXdTb3VyY2VNb2RlOyB9CisgICAgdm9pZCBzZXRJblZpZXdTb3VyY2VNb2Rl
KGJvb2wgbW9kZSkgeyBtX2luVmlld1NvdXJjZU1vZGUgPSBtb2RlOyB9CisKKyAgICB2aXJ0dWFs
IGJvb2wgd2VsbEZvcm1lZCgpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZpcnR1YWwg
aW50IGxpbmVOdW1iZXIoKSBjb25zdCB7IHJldHVybiAtMTsgfQorICAgIHZpcnR1YWwgaW50IGNv
bHVtbk51bWJlcigpIGNvbnN0IHsgcmV0dXJuIC0xOyB9CisKK3Byb3RlY3RlZDoKKyAgICAvLyBU
aGUgdG9rZW5pemVyIGhhcyBidWZmZXJzLCBzbyBwYXJzaW5nIG1heSBjb250aW51ZSBldmVuIGFm
dGVyCisgICAgLy8gaXQgc3RvcHMgcmVjZWl2aW5nIGRhdGEuIFdlIHVzZSBtX3BhcnNlclN0b3Bw
ZWQgdG8gc3RvcCB0aGUgdG9rZW5pemVyCisgICAgLy8gZXZlbiB3aGVuIGl0IGhhcyBidWZmZXJl
ZCBkYXRhLgorICAgIGJvb2wgbV9wYXJzZXJTdG9wcGVkOworICAgIAorICAgIGJvb2wgbV9pblZp
ZXdTb3VyY2VNb2RlOworfTsKKworfQorCisjZW5kaWYKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRv
a2VuaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9kb20vWE1MVG9rZW5pemVyLmNwcAko
cmV2aXNpb24gMTg2MjEpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw2ICs0Niw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgi
CisjaW5jbHVkZSAiVG9rZW5pemVyLmgiCiAjaW5jbHVkZSA8bGlieG1sL3BhcnNlci5oPgogI2lu
Y2x1ZGUgPGxpYnhtbC9wYXJzZXJJbnRlcm5hbHMuaD4KICNpbmNsdWRlIDx3dGYvUGxhdGZvcm0u
aD4KQEAgLTExMywxMyArMTE0LDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCB3ZWxs
Rm9ybWVkKCkgY29uc3QgeyByZXR1cm4gIW1fc2F3RXJyb3I7IH0KIAorICAgIHZpcnR1YWwgaW50
IGxpbmVOdW1iZXIoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGludCBjb2x1bW5OdW1iZXIoKSBjb25z
dDsKKwogcHJpdmF0ZToKICAgICB2b2lkIGluaXRpYWxpemVQYXJzZXJDb250ZXh0KCk7CiAgICAg
dm9pZCBzZXRDdXJyZW50Tm9kZShOb2RlKik7CiAKLSAgICBpbnQgbGluZU51bWJlcigpIGNvbnN0
OwotICAgIGludCBjb2x1bW5OdW1iZXIoKSBjb25zdDsKLQogICAgIHZvaWQgaW5zZXJ0RXJyb3JN
ZXNzYWdlQmxvY2soKTsKIAogICAgIGJvb2wgZW50ZXJUZXh0KCk7CkluZGV4OiBXZWJDb3JlL2Rv
bS9YTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIu
aAkocmV2aXNpb24gMTg2MjEpCisrKyBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBYTUxfVG9rZW5pemVyX2hfCiAjZGVm
aW5lIFhNTF9Ub2tlbml6ZXJfaF8KIAorI2luY2x1ZGUgIlRva2VuaXplci5oIgogI2luY2x1ZGUg
IlN0cmluZ0hhc2guaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogCkBAIC0zNCw0NSArMzUs
OCBAQCBjbGFzcyBEb2N1bWVudEZyYWdtZW50OwogY2xhc3MgRG9jdW1lbnQ7CiBjbGFzcyBFbGVt
ZW50OwogY2xhc3MgRnJhbWVWaWV3OwotY2xhc3MgU2VnbWVudGVkU3RyaW5nOwogCi1jbGFzcyBU
b2tlbml6ZXIKLXsKLXB1YmxpYzoKLSAgICBUb2tlbml6ZXIoYm9vbCB2aWV3U291cmNlTW9kZSA9
IGZhbHNlKSAKLSAgICA6IG1fcGFyc2VyU3RvcHBlZChmYWxzZSkKLSAgICAsIG1faW5WaWV3U291
cmNlTW9kZSh2aWV3U291cmNlTW9kZSkKLSAgICB7fQotICAgIAotICAgIHZpcnR1YWwgflRva2Vu
aXplcigpIHt9Ci0KLSAgICAvLyBTY3JpcHQgb3V0cHV0IG11c3QgYmUgcHJlcGVuZGVkLCB3aGls
ZSBuZXcgZGF0YQotICAgIC8vIHJlY2VpdmVkIGR1cmluZyBleGVjdXRpbmcgYSBzY3JpcHQgbXVz
dCBiZSBhcHBlbmRlZCwgaGVuY2UgdGhlCi0gICAgLy8gZXh0cmEgYm9vbCB0byBiZSBhYmxlIHRv
IGRpc3Rpbmd1aXNoIGJldHdlZW4gYm90aCBjYXNlcy4KLSAgICAvLyBkb2N1bWVudC53cml0ZSgp
IGFsd2F5cyB1c2VzIGZhbHNlLCB3aGlsZSB0aGUgbG9hZGVyIHVzZXMgdHJ1ZS4KLSAgICB2aXJ0
dWFsIGJvb2wgd3JpdGUoY29uc3QgU2VnbWVudGVkU3RyaW5nJiwgYm9vbCBhcHBlbmREYXRhKSA9
IDA7Ci0gICAgdmlydHVhbCB2b2lkIGZpbmlzaCgpID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgaXNX
YWl0aW5nRm9yU2NyaXB0cygpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgc3RvcFBhcnNp
bmcoKSB7IG1fcGFyc2VyU3RvcHBlZCA9IHRydWU7IH0KLSAgICB2aXJ0dWFsIGJvb2wgcHJvY2Vz
c2luZ0RhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgaW50IGV4ZWN1
dGluZ1NjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIDA7IH0KLQotICAgIHZpcnR1YWwgYm9vbCB3YW50
c1Jhd0RhdGEoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCB3cml0
ZVJhd0RhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikgeyByZXR1cm4gZmFsc2U7IH0KLSAg
ICAKLSAgICBib29sIGluVmlld1NvdXJjZU1vZGUoKSBjb25zdCB7IHJldHVybiBtX2luVmlld1Nv
dXJjZU1vZGU7IH0KLSAgICB2b2lkIHNldEluVmlld1NvdXJjZU1vZGUoYm9vbCBtb2RlKSB7IG1f
aW5WaWV3U291cmNlTW9kZSA9IG1vZGU7IH0KLQotICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9ybWVk
KCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgLy8gVGhlIHRva2Vu
aXplciBoYXMgYnVmZmVycywgc28gcGFyc2luZyBtYXkgY29udGludWUgZXZlbiBhZnRlcgotICAg
IC8vIGl0IHN0b3BzIHJlY2VpdmluZyBkYXRhLiBXZSB1c2UgbV9wYXJzZXJTdG9wcGVkIHRvIHN0
b3AgdGhlIHRva2VuaXplcgotICAgIC8vIGV2ZW4gd2hlbiBpdCBoYXMgYnVmZmVyZWQgZGF0YS4K
LSAgICBib29sIG1fcGFyc2VyU3RvcHBlZDsKLSAgICAKLSAgICBib29sIG1faW5WaWV3U291cmNl
TW9kZTsKLX07CitjbGFzcyBUb2tlbml6ZXI7CiAKIFRva2VuaXplciogbmV3WE1MVG9rZW5pemVy
KERvY3VtZW50KiwgRnJhbWVWaWV3KiA9IDApOwogI2lmIFhTTFRfU1VQUE9SVApJbmRleDogV2Vi
Q29yZS9odG1sL0hUTUxUb2tlbml6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvSFRN
TFRva2VuaXplci5oCShyZXZpc2lvbiAxODYyMSkKKysrIFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5p
emVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTk0LDYgKzk0LDkgQEAgcHVibGljOgogICAgIHZpcnR1
YWwgYm9vbCBwcm9jZXNzaW5nRGF0YSgpIGNvbnN0OwogICAgIHZpcnR1YWwgaW50IGV4ZWN1dGlu
Z1NjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0aW5nU2NyaXB0OyB9CiAKKyAgICB2aXJ0
dWFsIGludCBsaW5lTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gbGluZW5vOyB9CisgICAgdmlydHVh
bCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3QgeyByZXR1cm4gMTsgfQorCiBwcml2YXRlOgogICAg
IGNsYXNzIFN0YXRlOwogCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRl
bnNpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9jdW1lbnRF
eHRlbnNpb25zLmNwcAkocmV2aXNpb24gMTg2MjEpCisrKyBXZWJDb3JlL2tzdmcyL21pc2MvU1ZH
RG9jdW1lbnRFeHRlbnNpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDcgQEAKIC8q
CiAgICAgQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCiAgICAgICAgICAg
ICAgICAgICAyMDA2IE5pa29sYXMgWmltbWVybWFubiA8emltbWVybWFubkBrZGUub3JnPgorICAg
ICAgICAgICAgICAgICAgMjAwNyBSb2IgQnVpcyA8YnVpc0BrZGUub3JnPgogCiAgICAgVGhpcyBm
aWxlIGlzIHBhcnQgb2YgdGhlIFdlYktpdCBwcm9qZWN0CiAKQEAgLTI1LDEzICsyNiwxNyBAQAog
I2lmZGVmIFNWR19TVVBQT1JUCiAjaW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAK
KyNpbmNsdWRlICJBdG9taWNTdHJpbmcuaCIKKyNpbmNsdWRlICJDaHJvbWUuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lTG9hZGVyLmgiCisjaW5jbHVkZSAiUGFnZS5oIgorI2luY2x1
ZGUgIlNWR1NWR0VsZW1lbnQuaCIKICNpbmNsdWRlICJUaW1lU2NoZWR1bGVyLmgiCi0jaW5jbHVk
ZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiWE1MVG9rZW5pemVyLmgiCiAjaW5jbHVkZSAi
a2pzX3Byb3h5LmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKQEAgLTg3LDYgKzkyLDI2IEBAIHZvaWQgU1ZHRG9jdW1lbnRFeHRlbnNpb25zOjp1
bnBhdXNlQW5pbWEKICAgICAgICAgKCppdHIpLT51bnBhdXNlQW5pbWF0aW9ucygpOwogfQogCit2
b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0V2FybmluZyhjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgaWYgKFBhZ2UqIHBhZ2UgPSBtX2RvYy0+ZnJhbWUoKS0+cGFnZSgpKSB7
CisgICAgICAgIGludCBsaW5lTnVtYmVyID0gMTsKKyAgICAgICAgaWYgKG1fZG9jLT50b2tlbml6
ZXIoKSkKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSAgbV9kb2MtPnRva2VuaXplcigpLT5saW5l
TnVtYmVyKCk7CisgICAgICAgIHBhZ2UtPmNocm9tZSgpLT5hZGRNZXNzYWdlVG9Db25zb2xlKCJX
YXJuaW5nOiAiICsgbWVzc2FnZSwgbGluZU51bWJlciwgU3RyaW5nKCkpOworICAgIH0KK30KKwor
dm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlcG9ydEVycm9yKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSkKK3sKKyAgICBpZiAoUGFnZSogcGFnZSA9IG1fZG9jLT5mcmFtZSgpLT5wYWdlKCkpIHsK
KyAgICAgICAgaW50IGxpbmVOdW1iZXIgPSAxOworICAgICAgICBpZiAobV9kb2MtPnRva2VuaXpl
cigpKQorICAgICAgICAgICAgbGluZU51bWJlciA9ICBtX2RvYy0+dG9rZW5pemVyKCktPmxpbmVO
dW1iZXIoKTsKKyAgICAgICAgcGFnZS0+Y2hyb21lKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoIkVy
cm9yOiAiICsgbWVzc2FnZSwgbGluZU51bWJlciwgU3RyaW5nKCkpOworICAgIH0KK30KKwogdm9p
ZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OmFkZFBlbmRpbmdSZXNvdXJjZShjb25zdCBBdG9taWNT
dHJpbmcmIGlkLCBTVkdTdHlsZWRFbGVtZW50KiBvYmopCiB7CiAgICAgaWYgKG1fcGVuZGluZ1Jl
c291cmNlcy5jb250YWlucyhpZCkpCkluZGV4OiBXZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9jdW1l
bnRFeHRlbnNpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5oCShyZXZpc2lvbiAxODYyMSkKKysrIFdlYkNvcmUva3N2ZzIvbWlzYy9T
VkdEb2N1bWVudEV4dGVuc2lvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjAsNiArNjAsOSBAQCBw
dWJsaWM6CiAgICAgdm9pZCBwYXVzZUFuaW1hdGlvbnMoKTsKICAgICB2b2lkIHVucGF1c2VBbmlt
YXRpb25zKCk7CiAKKyAgICB2b2lkIHJlcG9ydFdhcm5pbmcoY29uc3QgU3RyaW5nJik7CisgICAg
dm9pZCByZXBvcnRFcnJvcihjb25zdCBTdHJpbmcmKTsKKwogcHJpdmF0ZToKICAgICBEb2N1bWVu
dCogbV9kb2M7IC8vIHdlYWsgcmVmZXJlbmNlCiAgICAgSGFzaFNldDxTVkdTVkdFbGVtZW50Kj4g
bV90aW1lQ29udGFpbmVyczsgLy8gRm9yIFNWRyAxLjIgc3VwcG9ydCB0aGlzIHdpbGwgbmVlZCB0
byBiZSBtYWRlIG1vcmUgZ2VuZXJhbC4KSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNsZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxODYyMSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0NpcmNs
ZUVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw5ICs1NiwxMSBAQCB2b2lkIFNWR0Np
cmNsZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmliCiAgICAgICAgIHNldEN4QmFzZVZhbHVlKFNW
R0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7ICAgICAgIAogICAgIGVsc2Ug
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQogICAgICAgICBzZXRDeUJhc2VW
YWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNl
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKQorICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6ckF0dHIpIHsKICAgICAgICAgc2V0UkJhc2VWYWx1ZShTVkdM
ZW5ndGgodGhpcywgTGVuZ3RoTW9kZU90aGVyLCB2YWx1ZSkpOwotICAgIGVsc2UgeworICAgICAg
ICBpZiAocigpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NT
VkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBjaXJjbGUg
PHI+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3Rz
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCkluZGV4OiBX
ZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRWxlbWVudC5oCShyZXZpc2lvbiAxODYyMSkKKysrIFdlYkNvcmUva3N2ZzIvc3Zn
L1NWR0VsZW1lbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTczLDcgKzE3Myw2IEBAIFBhc3NSZWZQ
dHI8Q2xhc3NOYW1lOjpTVkdBbmltYXRlZFRlbXBsYXQKIH0KIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewotICAgIGNsYXNzIERvY3VtZW50UHRyOwogICAgIGNsYXNzIEVjbWE7CiAgICAgY2xhc3MgU1ZH
UHJlc2VydmVBc3BlY3RSYXRpbzsKICAgICBjbGFzcyBTVkdNYXRyaXg7CkluZGV4OiBXZWJDb3Jl
L2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODYyMSkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTks
MTEgKzU5LDE1IEBAIHZvaWQgU1ZHRWxsaXBzZUVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAg
ICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgdmFs
dWUpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmN5QXR0cikKICAg
ICAgICAgc2V0Q3lCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZh
bHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpCisg
ICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKICAgICAgICAg
c2V0UnhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsK
LSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikKKyAgICAgICAg
aWYgKHJ4KCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIGVsbGlwc2Ug
PHJ4PiBpcyBub3QgYWxsb3dlZCIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpyeUF0dHIpIHsKICAgICAgICAgc2V0UnlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMs
IExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSB7CisgICAgICAgIGlmIChyeSgp
LnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNp
b25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBlbGxpcHNlIDxyeT4gaXMg
bm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNl
TWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAo
U1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAkocmV2aXNpb24gMTg2MjEpCisrKyBXZWJDb3JlL2tz
dmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCwxMSArMjQs
MTIgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgog
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0cmlu
Z0ltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTEsMzEgKzUyLDI3IEBAIHZvaWQg
U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QKICAgICBkb3VibGUgeCA9IDAsIHkg
PSAwLCB3ID0gMCwgaCA9IDA7CiAgICAgY29uc3QgVUNoYXIqIGMgPSBzdHIuY2hhcmFjdGVycygp
OwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjICsgc3RyLmxlbmd0aCgpOworICAgIERvY3VtZW50
KiBkb2MgPSBjb250ZXh0RWxlbWVudCgpLT5kb2N1bWVudCgpOwogCiAgICAgc2tpcE9wdGlvbmFs
U3BhY2VzKGMsIGVuZCk7CiAKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgeCkpCi0gICAg
ICAgIGdvdG8gYmFpbF9vdXQ7Ci0KLSAgICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgeSkpCi0g
ICAgICAgIGdvdG8gYmFpbF9vdXQ7Ci0KLSAgICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgdykg
fHwgdyA8IDAuMCkgLy8gY2hlY2sgdGhhdCB3aWR0aCBpcyBwb3NpdGl2ZQotICAgICAgICBnb3Rv
IGJhaWxfb3V0OwotCi0gICAgaWYgKCFwYXJzZU51bWJlcihjLCBlbmQsIGgsIGZhbHNlKSB8fCBo
IDwgMC4wKSAvLyBjaGVjayB0aGF0IGhlaWdodCBpcyBwb3NpdGl2ZQotICAgICAgICBnb3RvIGJh
aWxfb3V0OwotCi0gICAgc2tpcE9wdGlvbmFsU3BhY2VzKGMsIGVuZCk7Ci0KLSAgICBpZiAoYyA8
IGVuZCkgLy8gbm90aGluZyBzaG91bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJl
cgotICAgICAgICBnb3RvIGJhaWxfb3V0OwotCi0gICAgc2V0Vmlld0JveEJhc2VWYWx1ZShGbG9h
dFJlY3QoeCwgeSwgdywgaCkpOwotICAgIHJldHVybjsKKyAgICBpZiAoIShwYXJzZU51bWJlcihj
LCBlbmQsIHgpICYmIHBhcnNlTnVtYmVyKGMsIGVuZCwgeSkgJiYKKyAgICAgICAgICBwYXJzZU51
bWJlcihjLCBlbmQsIHcpICYmIHBhcnNlTnVtYmVyKGMsIGVuZCwgaCwgZmFsc2UpKSkgeworICAg
ICAgICBkb2MtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0V2FybmluZygiUHJvYmxlbSBw
YXJzaW5nIHZpZXdCb3g9XCIiICsgc3RyICsgIlwiIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLWJhaWxfb3V0OjsKLSAgICAvLyBGSVhNRTogUGVyIHRoZSBzcGVjIHdlIGFyZSBzdXBwb3Nl
ZCB0byBzZXQgdGhlIGRvY3VtZW50IGludG8gYW4gImVycm9yIHN0YXRlIiBoZXJlLgorICAgIGlm
ICh3IDwgMC4wKSAvLyBjaGVjayB0aGF0IHdpZHRoIGlzIHBvc2l0aXZlCisgICAgICAgIGRvYy0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3Ig
Vmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIpOworICAgIGVsc2UgaWYgKGggPCAwLjApIC8v
IGNoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0aXZlCisgICAgICAgIGRvYy0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCBoZWln
aHQgaXMgbm90IGFsbG93ZWQiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU3Bh
Y2VzKGMsIGVuZCk7CisgICAgICAgIGlmIChjIDwgZW5kKSAvLyBub3RoaW5nIHNob3VsZCBjb21l
IGFmdGVyIHRoZSBsYXN0LCBmb3VydGggbnVtYmVyCisgICAgICAgICAgICBkb2MtPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIi
ICsgc3RyICsgIlwiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldFZpZXdCb3hCYXNl
VmFsdWUoRmxvYXRSZWN0KHgsIHksIHcsIGgpKTsKKyAgICB9CiB9CiAKIEFmZmluZVRyYW5zZm9y
bSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRo
LCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0
VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3
Qm94LmgJKHJldmlzaW9uIDE4NjIxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDggKzIwLDggQEAKICAgICBCb3N0b24sIE1BIDAy
MTExLTEzMDcsIFVTQS4KICovCiAKLSNpZm5kZWYgS1NWR19TVkdGaXRUb1ZpZXdCb3hJbXBsX0gK
LSNkZWZpbmUgS1NWR19TVkdGaXRUb1ZpZXdCb3hJbXBsX0gKKyNpZm5kZWYgU1ZHRml0VG9WaWV3
Qm94X0gKKyNkZWZpbmUgU1ZHRml0VG9WaWV3Qm94X0gKICNpZmRlZiBTVkdfU1VQUE9SVAogCiAj
aW5jbHVkZSAiU1ZHRWxlbWVudC5oIgpAQCAtNTQsNiArNTQsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTVkdfU1VQUE9SVAotI2Vu
ZGlmIC8vIEtTVkdfU1ZHRml0VG9WaWV3Qm94SW1wbF9ICisjZW5kaWYgLy8gU1ZHRml0VG9WaWV3
Qm94X0gKIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHSW1h
Z2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJbWFnZUVs
ZW1lbnQuY3BwCShyZXZpc2lvbiAxODYyMSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ltYWdl
RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDEzIEBAIHZvaWQgU1ZHSW1h
Z2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdM
ZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwogICAgICAgICBhZGRDU1NQcm9w
ZXJ0eShhdHRyLCBDU1NfUFJPUF9XSURUSCwgdmFsdWUpOworICAgICAgICBpZiAod2lkdGgoKS52
YWx1ZSgpIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9u
cygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgaW1hZ2UgYXR0cmlidXRlIDx3
aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVu
Z3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7CiAgICAgICAgIGFkZENTU1Byb3Bl
cnR5KGF0dHIsIENTU19QUk9QX0hFSUdIVCwgdmFsdWUpOworICAgICAgICBpZiAoaGVpZ2h0KCku
dmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lv
bnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIGltYWdlIGF0dHJpYnV0ZSA8
aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHJldmlzaW9uIDE4
NjIxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA5LDEwICsxMDksMTAgQEAgYm9vbCBwYXJzZU51bWJlck9wdGlvbmFsTnVt
YmVyKGNvbnN0IFN0cgogICAgIHJldHVybiBjdXIgPT0gZW5kOwogfQogCi12b2lkIFNWR1BvbHlQ
YXJzZXI6OnBhcnNlUG9pbnRzKGNvbnN0IFN0cmluZyYgcykgY29uc3QKK2Jvb2wgU1ZHUG9seVBh
cnNlcjo6cGFyc2VQb2ludHMoY29uc3QgU3RyaW5nJiBzKSBjb25zdAogewogICAgIGlmIChzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICBjb25z
dCBVQ2hhciogY3VyID0gcy5jaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGN1
ciArIHMubGVuZ3RoKCk7CiAKQEAgLTEyMiwxMSArMTIyLDExIEBAIHZvaWQgU1ZHUG9seVBhcnNl
cjo6cGFyc2VQb2ludHMoY29uc3QgU3QKICAgICB3aGlsZSAoMSkgewogICAgICAgICBkb3VibGUg
eFBvcyA9IDA7CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHhQb3MpKQotICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAgICBkb3Vi
bGUgeVBvcyA9IDA7CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHlQb3MpKQot
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAgICAg
c3ZnUG9seVRvKHhQb3MsIHlQb3MsIHNlZ21lbnROdW0rKyk7CiAgICAgfQpJbmRleDogV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9r
c3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHJldmlzaW9uIDE4NjIxKQorKysgV2ViQ29y
ZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY5LDcg
KzY5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICB7CiAgICAgcHVibGljOgogICAgICAgICB2
aXJ0dWFsIH5TVkdQb2x5UGFyc2VyKCkgeyB9Ci0gICAgICAgIHZvaWQgcGFyc2VQb2ludHMoY29u
c3QgU3RyaW5nICZwb2ludHMpIGNvbnN0OworICAgICAgICBib29sIHBhcnNlUG9pbnRzKGNvbnN0
IFN0cmluZyAmcG9pbnRzKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgdmlydHVh
bCB2b2lkIHN2Z1BvbHlUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgaW50IG5yKSBjb25zdCA9IDA7
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODYyMSkK
KysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjY4LDExICsyNjgsMTYgQEAgdm9pZCBTVkdQYXRoRWxlbWVudDo6c3ZnQ2xvc2VQYXRoKCkK
IAogdm9pZCBTVkdQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmli
dXRlKiBhdHRyKQogeworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1
ZSgpOwogICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmRBdHRyKSB7CiAgICAgICAg
IEV4Y2VwdGlvbkNvZGUgZWM7CiAgICAgICAgIHBhdGhTZWdMaXN0KCktPmNsZWFyKGVjKTsKLSAg
ICAgICAgaWYgKCFwYXJzZVNWRyhhdHRyLT52YWx1ZSgpLCB0cnVlKSkKLSAgICAgICAgICAgIHBh
dGhTZWdMaXN0KCktPmNsZWFyKGVjKTsKKyAgICAgICAgaWYgKCFwYXJzZVNWRyh2YWx1ZSwgdHJ1
ZSkpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9y
dEVycm9yKCJQcm9ibGVtIHBhcnNpbmcgZD1cIiIgKyB2YWx1ZSArICJcIiIpOworICAgIH0gZWxz
ZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpwYXRoTGVuZ3RoQXR0cikgeworICAgICAg
ICBtX3BhdGhMZW5ndGggPSB2YWx1ZS50b0RvdWJsZSgpOworICAgICAgICBpZiAobV9wYXRoTGVu
Z3RoIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygp
LT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcGF0aCBhdHRyaWJ1dGUgPHBhdGhM
ZW5ndGg+IGlzIG5vdCBhbGxvd2VkIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rl
c3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKSW5k
ZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4NjIx
KQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC05NiwxMSArOTYsMTUgQEAgdm9pZCBTVkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaQogICAgICAgICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2Rl
V2lkdGgsIHZhbHVlKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp5
QXR0cikKICAgICAgICAgc2V0WUJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhl
aWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Ondp
ZHRoQXR0cikKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0
cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9k
ZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
aGVpZ2h0QXR0cikKKyAgICAgICAgaWYgKHdpZHRoKCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVn
YXRpdmUgdmFsdWUgZm9yIHBhdHRlcm4gYXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFsbG93ZWQi
KTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikg
ewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVI
ZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSB7CisgICAgICAgIGlmICh3aWR0aCgpLnZhbHVlKCkg
PCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJl
cG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBwYXR0ZXJuIGF0dHJpYnV0ZSA8aGVpZ2h0
PiBpcyBub3QgYWxsb3dlZCIpOworICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdVUklSZWZl
cmVuY2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAkocmV2aXNpb24gMTg2MjEpCisrKyBXZWJD
b3JlL2tzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiAr
MSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBOaWtvbGFzIFpp
bW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9yZz4KLSAgICAgICAgICAgICAgICAgIDIwMDQsIDIw
MDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAgICAgICAgIDIwMDQs
IDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAgIFRoaXMgZmls
ZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC02MiwxMCArNjIsMTIgQEAgU1ZHUG9p
bnRMaXN0KiBTVkdQb2x5RWxlbWVudDo6YW5pbWF0ZWRQbwogCiB2b2lkIFNWR1BvbHlFbGVtZW50
OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShNYXBwZWRBdHRyaWJ1dGUqIGF0dHIpCiB7CisgICAgY29u
c3QgQXRvbWljU3RyaW5nJiB2YWx1ZSA9IGF0dHItPnZhbHVlKCk7CiAgICAgaWYgKGF0dHItPm5h
bWUoKSA9PSBTVkdOYW1lczo6cG9pbnRzQXR0cikgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICAgICAgcG9pbnRzKCktPmNsZWFyKGVjKTsKLSAgICAgICAgcGFyc2VQb2ludHMo
YXR0ci0+dmFsdWUoKSk7CisgICAgICAgIGlmICghcGFyc2VQb2ludHModmFsdWUpICYmICFtX2ln
bm9yZUF0dHJpYnV0ZUNoYW5nZXMpCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdF
eHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJQcm9ibGVtIHBhcnNpbmcgcG9pbnRzPVwiIiArIHZh
bHVlICsgIlwiIik7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUv
a3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50LmNwcAkocmV2aXNpb24gMTg2
MjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02Nyw5ICs2NywxMSBAQCB2b2lkIFNWR1JhZGlhbEdyYWRpZW50RWxl
bWVudDo6cGFyc2VNYXBwCiAgICAgICAgIHNldEN4QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBM
ZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNW
R05hbWVzOjpjeUF0dHIpCiAgICAgICAgIHNldEN5QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBM
ZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6ckF0dHIpCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpy
QXR0cikgewogICAgICAgICBzZXRSQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2Rl
T3RoZXIsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpm
eEF0dHIpCisgICAgICAgIGlmIChyKCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3Vt
ZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFs
dWUgZm9yIHJhZGlhbCBncmFkaWVudCByYWRpdXMgPHI+IGlzIG5vdCBhbGxvd2VkIik7CisgICAg
fSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ4QXR0cikKICAgICAgICAgc2V0
RnhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKICAg
ICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmZ5QXR0cikKICAgICAgICAgc2V0
RnlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODYyMSkKKysr
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjEsMTUgKzYxLDIyIEBAIHZvaWQgU1ZHUmVjdEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXQK
ICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2
YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCiAg
ICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZh
bHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpCi0g
ICAgICAgICBzZXRSeEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2
YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cnlBdHRyKQot
ICAgICAgICAgc2V0UnlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQs
IHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0
dHIpCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeEF0dHIpIHsKKyAg
ICAgICAgc2V0UnhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwgdmFs
dWUpKTsKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVw
b3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHJlY3QgPHJ4PiBpcyBub3QgYWxsb3dlZCIp
OworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyeUF0dHIpIHsKKyAg
ICAgICAgc2V0UnlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZh
bHVlKSk7CisgICAgICAgIGlmIChyeSgpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZh
bHVlIGZvciByZWN0IDxyeT4gaXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6d2lkdGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZh
bHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBp
ZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKQorICAgICAgICBpZiAod2lk
dGgoKS52YWx1ZSgpIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcmVjdCA8d2lkdGg+
IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aCh0
aGlzLCBMZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgeworICAgICAgICBpZiAo
aGVpZ2h0KCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHJlY3QgPGhl
aWdodD4gaXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVz
dHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6
IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxODYyMSkKKysrIFdlYkNv
cmUva3N2ZzIvc3ZnL1NWR1NWR0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTYsOSAr
MTk2LDEzIEBAIHZvaWQgU1ZHU1ZHRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUKICAgICBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBz
ZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkp
OwogICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9XSURUSCwgdmFsdWUpOwor
ICAgICAgICBpZiAod2lkdGgoKS52YWx1ZSgpIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBm
b3Igc3ZnIGF0dHJpYnV0ZSA8d2lkdGg+IGlzIG5vdCBhbGxvd2VkIik7CiAgICAgfSBlbHNlIGlm
IChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVp
Z2h0QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwog
ICAgICAgICBhZGRDU1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9IRUlHSFQsIHZhbHVlKTsKKyAg
ICAgICAgaWYgKGhlaWdodCgpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1bWVudCgp
LT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZv
ciBzdmcgYXR0cmlidXRlIDxoZWlnaHQ+IGlzIG5vdCBhbGxvd2VkIik7CiAgICAgfSBlbHNlIHsK
ICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAg
ICAgICAgIHJldHVybjsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1RleHRDb250ZW50RWxl
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVGV4dENvbnRlbnRF
bGVtZW50LmNwcAkocmV2aXNpb24gMTg2MjEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdUZXh0
Q29udGVudEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NCwxMCArOTQsMTUgQEAgdm9p
ZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnNlbGVjdFN1YlN0cgogCiB2b2lkIFNWR1RleHRDb250
ZW50RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRyKQog
eworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAgIC8v
aWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6bGVuZ3RoQWRqdXN0QXR0cikKICAgICAvLyAg
ICBzZXRYQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgsIHZhbHVlKSk7
CiAgICAgLy9lbHNlCi0gICAgeworICAgIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnRl
eHRMZW5ndGhBdHRyKSB7CisgICAgICAgIHNldFRleHRMZW5ndGhCYXNlVmFsdWUoU1ZHTGVuZ3Ro
KHRoaXMsIExlbmd0aE1vZGVPdGhlciwgdmFsdWUpKTsKKyAgICAgICAgaWYgKHRleHRMZW5ndGgo
KS52YWx1ZSgpIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdGV4dCBhdHRyaWJ1dGUg
PHRleHRMZW5ndGg+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIHsKICAgICAgICAgaWYg
KFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikp
CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkocmV2aXNpb24gMTg2MjEpCisr
KyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdVc2VFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjYsMTEgKzY2LDE1IEBAIHZvaWQgU1ZHVXNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUK
ICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2
YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6eUF0dHIpCiAg
ICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZh
bHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIp
CisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIpIHsKICAg
ICAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwg
dmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0
dHIpCisgICAgICAgIGlmICh3aWR0aCgpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1
bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZh
bHVlIGZvciB1c2UgYXR0cmlidXRlIDx3aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVs
c2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBz
ZXRIZWlnaHRCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVl
KSk7Ci0gICAgZWxzZSB7CisgICAgICAgIGlmIChoZWlnaHQoKS52YWx1ZSgpIDwgMC4wKQorICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigi
QSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdXNlIGF0dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dl
ZCIpOworICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRy
aWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChTVkdMYW5nU3Bh
Y2U6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQo=
</data>
<flag name="review"
          id="4550"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>12278</attachid>
            <date>2007-01-07 08:32:33 -0800</date>
            <delta_ts>2007-01-07 08:57:14 -0800</delta_ts>
            <desc>Improved patch</desc>
            <filename>10362-5.diff</filename>
            <type>text/plain</type>
            <size>25866</size>
            <attacher name="Rob Buis">rwlbuis</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxODY1MSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMDctMDEtMDcgIFJvYiBCdWlzICA8YnVpc0BrZGUub3JnPgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMzYyCisgICAgICAgIFNWRyBuZWVkcyB0byBz
dXBwb3J0IFNWR0Vycm9yIGV2ZW50cyBhbmQgc29tZSBmb3JtIG9mICJlcnJvciBzdGF0ZSIKKwor
ICAgICAgICBSZXBvcnQgU1ZHIHdhcm5pbmdzIGFuZCBlcnJvcnMgb24gKEpTKSBjb25zb2xlLgor
ICAgICAgICBFeHBvc2UgbGluZSBhbmQgY29sdW1uIG51bWJlciBnZXR0ZXJzIGluIFRva2VuaXpl
ciBpbgorICAgICAgICBvcmRlciB0byBkaXNwbGF5IHRoZW0gd2l0aCB0aGUgZXJyb3IgbWVzc2Fn
ZS4KKworICAgICAgICAqIGRvbS9YTUxUb2tlbml6ZXIuY3BwOgorICAgICAgICAqIGRvbS9YTUxU
b2tlbml6ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlRva2VuaXplcjo6bGluZU51bWJlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpUb2tlbml6ZXI6OmNvbHVtbk51bWJlcik6CisgICAgICAgICogaHRt
bC9IVE1MVG9rZW5pemVyLmg6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVG9rZW5pemVyOjpsaW5l
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxUb2tlbml6ZXI6OmNvbHVtbk51bWJlcik6
CisgICAgICAgICoga3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U1ZHRG9jdW1lbnRFeHRlbnNpb25zOjpyZXBvcnRXYXJuaW5nKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0RvY3VtZW50RXh0ZW5zaW9uczo6cmVwb3J0RXJyb3IpOgorICAgICAg
ICAqIGtzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmg6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR0NpcmNsZUVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHQ2lyY2xlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdFbGVt
ZW50Lmg6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR0VsbGlwc2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6Cisg
ICAgICAgICoga3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdGaXRUb1ZpZXdCb3g6OnBhcnNlVmlld0JveCk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R0ZpdFRvVmlld0JveC5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdJbWFnZUVsZW1lbnQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0
ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQb2x5UGFyc2VyOjpwYXJzZVBvaW50cyk6CisgICAgICAgICoga3N2ZzIv
c3ZnL1NWR1BhcnNlclV0aWxpdGllcy5oOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXRoRWxl
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoRWxlbWVudDo6cGFyc2VNYXBwZWRB
dHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXR0ZXJuRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUp
OgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpTVkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtz
dmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAg
ICoga3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR1Jl
Y3RFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NW
R1NWR0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHU1ZHRWxlbWVudDo6cGFyc2VN
YXBwZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGtzdmcyL3N2Zy9TVkdUZXh0Q29udGVudEVsZW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dENvbnRlbnRFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0ZSk6CisgICAgICAgICoga3N2ZzIvc3ZnL1NWR1VzZUVsZW1lbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHVXNlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUpOgor
CiAyMDA3LTAxLTA3ICBOaWtvbGFzIFppbW1lcm1hbm4gIDx6aW1tZXJtYW5uQGtkZS5vcmc+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgU2FtLgpJbmRleDogV2ViQ29yZS9kb20vWE1MVG9rZW5pemVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2RvbS9YTUxUb2tlbml6ZXIuY3BwCShyZXZpc2lv
biAxODY1MSkKKysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTExMywxMyArMTEzLDEzIEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9y
bWVkKCkgY29uc3QgeyByZXR1cm4gIW1fc2F3RXJyb3I7IH0KIAorICAgIGludCBsaW5lTnVtYmVy
KCkgY29uc3Q7CisgICAgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0OworCiBwcml2YXRlOgogICAg
IHZvaWQgaW5pdGlhbGl6ZVBhcnNlckNvbnRleHQoKTsKICAgICB2b2lkIHNldEN1cnJlbnROb2Rl
KE5vZGUqKTsKIAotICAgIGludCBsaW5lTnVtYmVyKCkgY29uc3Q7Ci0gICAgaW50IGNvbHVtbk51
bWJlcigpIGNvbnN0OwotCiAgICAgdm9pZCBpbnNlcnRFcnJvck1lc3NhZ2VCbG9jaygpOwogCiAg
ICAgYm9vbCBlbnRlclRleHQoKTsKSW5kZXg6IFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCShyZXZpc2lvbiAxODY1MSkK
KysrIFdlYkNvcmUvZG9tL1hNTFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw2ICs2
NSw5IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgYm9vbCB3ZWxsRm9ybWVkKCkgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQogCisgICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0
dXJuIC0xOyB9CisgICAgdmlydHVhbCBpbnQgY29sdW1uTnVtYmVyKCkgY29uc3QgeyByZXR1cm4g
LTE7IH0KKwogcHJvdGVjdGVkOgogICAgIC8vIFRoZSB0b2tlbml6ZXIgaGFzIGJ1ZmZlcnMsIHNv
IHBhcnNpbmcgbWF5IGNvbnRpbnVlIGV2ZW4gYWZ0ZXIKICAgICAvLyBpdCBzdG9wcyByZWNlaXZp
bmcgZGF0YS4gV2UgdXNlIG1fcGFyc2VyU3RvcHBlZCB0byBzdG9wIHRoZSB0b2tlbml6ZXIKSW5k
ZXg6IFdlYkNvcmUvaHRtbC9IVE1MVG9rZW5pemVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL0hUTUxUb2tlbml6ZXIuaAkocmV2aXNpb24gMTg2NTEpCisrKyBXZWJDb3JlL2h0bWwvSFRN
TFRva2VuaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC05NCw2ICs5NCw5IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIGJvb2wgcHJvY2Vzc2luZ0RhdGEoKSBjb25zdDsKICAgICB2aXJ0dWFsIGludCBl
eGVjdXRpbmdTY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1dGluZ1NjcmlwdDsgfQogCisg
ICAgdmlydHVhbCBpbnQgbGluZU51bWJlcigpIGNvbnN0IHsgcmV0dXJuIGxpbmVubzsgfQorICAg
IHZpcnR1YWwgaW50IGNvbHVtbk51bWJlcigpIGNvbnN0IHsgcmV0dXJuIDE7IH0KKwogcHJpdmF0
ZToKICAgICBjbGFzcyBTdGF0ZTsKIApJbmRleDogV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0RvY3Vt
ZW50RXh0ZW5zaW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0Rv
Y3VtZW50RXh0ZW5zaW9ucy5jcHAJKHJldmlzaW9uIDE4NjUxKQorKysgV2ViQ29yZS9rc3ZnMi9t
aXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNiArMSw3
IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgogICAg
ICAgICAgICAgICAgICAgMjAwNiBOaWtvbGFzIFppbW1lcm1hbm4gPHppbW1lcm1hbm5Aa2RlLm9y
Zz4KKyAgICAgICAgICAgICAgICAgIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAogICAg
IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBXZWJLaXQgcHJvamVjdAogCkBAIC0yNSwxMyArMjYs
MTcgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0RvY3VtZW50RXh0ZW5zaW9u
cy5oIgogCisjaW5jbHVkZSAiQXRvbWljU3RyaW5nLmgiCisjaW5jbHVkZSAiQ2hyb21lLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAjaW5jbHVk
ZSAiRnJhbWUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1ZGUgIlBhZ2UuaCIK
KyNpbmNsdWRlICJTVkdTVkdFbGVtZW50LmgiCiAjaW5jbHVkZSAiVGltZVNjaGVkdWxlci5oIgot
I2luY2x1ZGUgIkF0b21pY1N0cmluZy5oIgorI2luY2x1ZGUgIlhNTFRva2VuaXplci5oIgogI2lu
Y2x1ZGUgImtqc19wcm94eS5oIgotI2luY2x1ZGUgIlNWR1NWR0VsZW1lbnQuaCIKIAogbmFtZXNw
YWNlIFdlYkNvcmUgewogCkBAIC04Nyw2ICs5MiwyMCBAQCB2b2lkIFNWR0RvY3VtZW50RXh0ZW5z
aW9uczo6dW5wYXVzZUFuaW1hCiAgICAgICAgICgqaXRyKS0+dW5wYXVzZUFuaW1hdGlvbnMoKTsK
IH0KIAordm9pZCBTVkdEb2N1bWVudEV4dGVuc2lvbnM6OnJlcG9ydFdhcm5pbmcoY29uc3QgU3Ry
aW5nJiBtZXNzYWdlKQoreworICAgIGlmIChQYWdlKiBwYWdlID0gbV9kb2MtPmZyYW1lKCktPnBh
Z2UoKSkgeworICAgICAgICBwYWdlLT5jaHJvbWUoKS0+YWRkTWVzc2FnZVRvQ29uc29sZSgiV2Fy
bmluZzogIiArIG1lc3NhZ2UsIG1fZG9jLT50b2tlbml6ZXIoKSA/IG1fZG9jLT50b2tlbml6ZXIo
KS0+bGluZU51bWJlcigpIDogMSwgU3RyaW5nKCkpOworICAgIH0KK30KKwordm9pZCBTVkdEb2N1
bWVudEV4dGVuc2lvbnM6OnJlcG9ydEVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAg
ICBpZiAoUGFnZSogcGFnZSA9IG1fZG9jLT5mcmFtZSgpLT5wYWdlKCkpIHsKKyAgICAgICAgcGFn
ZS0+Y2hyb21lKCktPmFkZE1lc3NhZ2VUb0NvbnNvbGUoIkVycm9yOiAiICsgbWVzc2FnZSwgbV9k
b2MtPnRva2VuaXplcigpID8gbV9kb2MtPnRva2VuaXplcigpLT5saW5lTnVtYmVyKCkgOiAxLCBT
dHJpbmcoKSk7CisgICAgfQorfQorCiB2b2lkIFNWR0RvY3VtZW50RXh0ZW5zaW9uczo6YWRkUGVu
ZGluZ1Jlc291cmNlKGNvbnN0IEF0b21pY1N0cmluZyYgaWQsIFNWR1N0eWxlZEVsZW1lbnQqIG9i
aikKIHsKICAgICBpZiAobV9wZW5kaW5nUmVzb3VyY2VzLmNvbnRhaW5zKGlkKSkKSW5kZXg6IFdl
YkNvcmUva3N2ZzIvbWlzYy9TVkdEb2N1bWVudEV4dGVuc2lvbnMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2tzdmcyL21pc2MvU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgJKHJldmlzaW9uIDE4NjUx
KQorKysgV2ViQ29yZS9rc3ZnMi9taXNjL1NWR0RvY3VtZW50RXh0ZW5zaW9ucy5oCSh3b3JraW5n
IGNvcHkpCkBAIC02MCw2ICs2MCw5IEBAIHB1YmxpYzoKICAgICB2b2lkIHBhdXNlQW5pbWF0aW9u
cygpOwogICAgIHZvaWQgdW5wYXVzZUFuaW1hdGlvbnMoKTsKIAorICAgIHZvaWQgcmVwb3J0V2Fy
bmluZyhjb25zdCBTdHJpbmcmKTsKKyAgICB2b2lkIHJlcG9ydEVycm9yKGNvbnN0IFN0cmluZyYp
OworCiBwcml2YXRlOgogICAgIERvY3VtZW50KiBtX2RvYzsgLy8gd2VhayByZWZlcmVuY2UKICAg
ICBIYXNoU2V0PFNWR1NWR0VsZW1lbnQqPiBtX3RpbWVDb250YWluZXJzOyAvLyBGb3IgU1ZHIDEu
MiBzdXBwb3J0IHRoaXMgd2lsbCBuZWVkIHRvIGJlIG1hZGUgbW9yZSBnZW5lcmFsLgpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHJldmlzaW9uIDE4NjUxKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHQ2lyY2xlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU2LDkgKzU2LDExIEBAIHZvaWQgU1ZHQ2lyY2xlRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWIK
ICAgICAgICAgc2V0Q3hCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVXaWR0aCwg
dmFsdWUpKTsgICAgICAgCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpj
eUF0dHIpCiAgICAgICAgIHNldEN5QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2Rl
SGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
ckF0dHIpCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpyQXR0cikgewog
ICAgICAgICBzZXRSQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlT3RoZXIsIHZh
bHVlKSk7Ci0gICAgZWxzZSB7CisgICAgICAgIGlmIChyKCkudmFsdWUoKSA8IDAuMCkKKyAgICAg
ICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEg
bmVnYXRpdmUgdmFsdWUgZm9yIGNpcmNsZSA8cj4gaXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVs
c2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBhcnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBl
ZEF0dHJpYnV0ZShhdHRyKSkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsZW1lbnQuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGVtZW50LmgJKHJldmlzaW9uIDE4
NjUxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxlbWVudC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNzMsNyArMTczLDYgQEAgUGFzc1JlZlB0cjxDbGFzc05hbWU6OlNWR0FuaW1hdGVkVGVtcGxh
dAogfQogCiBuYW1lc3BhY2UgV2ViQ29yZSB7Ci0gICAgY2xhc3MgRG9jdW1lbnRQdHI7CiAgICAg
Y2xhc3MgRWNtYTsKICAgICBjbGFzcyBTVkdQcmVzZXJ2ZUFzcGVjdFJhdGlvOwogICAgIGNsYXNz
IFNWR01hdHJpeDsKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0VsbGlwc2VFbGVtZW50LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdFbGxpcHNlRWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE4NjUxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRWxsaXBzZUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxMSArNTksMTUgQEAgdm9pZCBTVkdFbGxpcHNlRWxl
bWVudDo6cGFyc2VNYXBwZWRBdHRyaQogICAgICAgICBzZXRDeEJhc2VWYWx1ZShTVkdMZW5ndGgo
dGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6Y3lBdHRyKQogICAgICAgICBzZXRDeUJhc2VWYWx1ZShTVkdMZW5ndGgo
dGhpcywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1l
KCkgPT0gU1ZHTmFtZXM6OnJ4QXR0cikKKyAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZH
TmFtZXM6OnJ4QXR0cikgewogICAgICAgICBzZXRSeEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywg
TGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBT
VkdOYW1lczo6cnlBdHRyKQorICAgICAgICBpZiAocngoKS52YWx1ZSgpIDwgMC4wKQorICAgICAg
ICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBu
ZWdhdGl2ZSB2YWx1ZSBmb3IgZWxsaXBzZSA8cng+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJ5QXR0cikgewogICAgICAgICBzZXRS
eUJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAg
ICBlbHNlIHsKKyAgICAgICAgaWYgKHJ5KCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRv
Y3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUg
dmFsdWUgZm9yIGVsbGlwc2UgPHJ5PiBpcyBub3QgYWxsb3dlZCIpOworICAgIH0gZWxzZSB7CiAg
ICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0cmli
dXRlKGF0dHIpKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3Qm94LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdGaXRUb1ZpZXdCb3guY3BwCShyZXZp
c2lvbiAxODY1MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR0ZpdFRvVmlld0JveC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNiArMSw2IEBACiAvKgogICAgIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSBOaWtvbGFzIFppbW1lcm1hbm4gPHdpbGRmb3hAa2RlLm9yZz4KLSAgICAgICAgICAgICAg
ICAgIDIwMDQsIDIwMDUsIDIwMDYgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KKyAgICAgICAgICAg
ICAgICAgIDIwMDQsIDIwMDUsIDIwMDYsIDIwMDcgUm9iIEJ1aXMgPGJ1aXNAa2RlLm9yZz4KIAog
ICAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBLREUgcHJvamVjdAogCkBAIC0yNCwxMSArMjQs
MTIgQEAKICNpZmRlZiBTVkdfU1VQUE9SVAogI2luY2x1ZGUgIlNWR0ZpdFRvVmlld0JveC5oIgog
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisj
aW5jbHVkZSAiU1ZHRG9jdW1lbnRFeHRlbnNpb25zLmgiCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIK
ICNpbmNsdWRlICJTVkdQYXJzZXJVdGlsaXRpZXMuaCIKICNpbmNsdWRlICJTVkdQcmVzZXJ2ZUFz
cGVjdFJhdGlvLmgiCi0jaW5jbHVkZSAiU1ZHU1ZHRWxlbWVudC5oIgogI2luY2x1ZGUgIlN0cmlu
Z0ltcGwuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNTEsMzEgKzUyLDI3IEBAIHZvaWQg
U1ZHRml0VG9WaWV3Qm94OjpwYXJzZVZpZXdCb3goY29uc3QKICAgICBkb3VibGUgeCA9IDAsIHkg
PSAwLCB3ID0gMCwgaCA9IDA7CiAgICAgY29uc3QgVUNoYXIqIGMgPSBzdHIuY2hhcmFjdGVycygp
OwogICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBjICsgc3RyLmxlbmd0aCgpOworICAgIERvY3VtZW50
KiBkb2MgPSBjb250ZXh0RWxlbWVudCgpLT5kb2N1bWVudCgpOwogCiAgICAgc2tpcE9wdGlvbmFs
U3BhY2VzKGMsIGVuZCk7CiAKLSAgICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgeCkpCi0gICAg
ICAgIGdvdG8gYmFpbF9vdXQ7Ci0KLSAgICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgeSkpCi0g
ICAgICAgIGdvdG8gYmFpbF9vdXQ7Ci0KLSAgICBpZiAoIXBhcnNlTnVtYmVyKGMsIGVuZCwgdykg
fHwgdyA8IDAuMCkgLy8gY2hlY2sgdGhhdCB3aWR0aCBpcyBwb3NpdGl2ZQotICAgICAgICBnb3Rv
IGJhaWxfb3V0OwotCi0gICAgaWYgKCFwYXJzZU51bWJlcihjLCBlbmQsIGgsIGZhbHNlKSB8fCBo
IDwgMC4wKSAvLyBjaGVjayB0aGF0IGhlaWdodCBpcyBwb3NpdGl2ZQotICAgICAgICBnb3RvIGJh
aWxfb3V0OwotCi0gICAgc2tpcE9wdGlvbmFsU3BhY2VzKGMsIGVuZCk7Ci0KLSAgICBpZiAoYyA8
IGVuZCkgLy8gbm90aGluZyBzaG91bGQgY29tZSBhZnRlciB0aGUgbGFzdCwgZm91cnRoIG51bWJl
cgotICAgICAgICBnb3RvIGJhaWxfb3V0OwotCi0gICAgc2V0Vmlld0JveEJhc2VWYWx1ZShGbG9h
dFJlY3QoeCwgeSwgdywgaCkpOwotICAgIHJldHVybjsKKyAgICBpZiAoIShwYXJzZU51bWJlcihj
LCBlbmQsIHgpICYmIHBhcnNlTnVtYmVyKGMsIGVuZCwgeSkgJiYKKyAgICAgICAgICBwYXJzZU51
bWJlcihjLCBlbmQsIHcpICYmIHBhcnNlTnVtYmVyKGMsIGVuZCwgaCwgZmFsc2UpKSkgeworICAg
ICAgICBkb2MtPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0V2FybmluZygiUHJvYmxlbSBw
YXJzaW5nIHZpZXdCb3g9XCIiICsgc3RyICsgIlwiIik7CisgICAgICAgIHJldHVybjsKKyAgICB9
CiAKLWJhaWxfb3V0OjsKLSAgICAvLyBGSVhNRTogUGVyIHRoZSBzcGVjIHdlIGFyZSBzdXBwb3Nl
ZCB0byBzZXQgdGhlIGRvY3VtZW50IGludG8gYW4gImVycm9yIHN0YXRlIiBoZXJlLgorICAgIGlm
ICh3IDwgMC4wKSAvLyBjaGVjayB0aGF0IHdpZHRoIGlzIHBvc2l0aXZlCisgICAgICAgIGRvYy0+
YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3Ig
Vmlld0JveCB3aWR0aCBpcyBub3QgYWxsb3dlZCIpOworICAgIGVsc2UgaWYgKGggPCAwLjApIC8v
IGNoZWNrIHRoYXQgaGVpZ2h0IGlzIHBvc2l0aXZlCisgICAgICAgIGRvYy0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgVmlld0JveCBoZWln
aHQgaXMgbm90IGFsbG93ZWQiKTsKKyAgICBlbHNlIHsKKyAgICAgICAgc2tpcE9wdGlvbmFsU3Bh
Y2VzKGMsIGVuZCk7CisgICAgICAgIGlmIChjIDwgZW5kKSAvLyBub3RoaW5nIHNob3VsZCBjb21l
IGFmdGVyIHRoZSBsYXN0LCBmb3VydGggbnVtYmVyCisgICAgICAgICAgICBkb2MtPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0V2FybmluZygiUHJvYmxlbSBwYXJzaW5nIHZpZXdCb3g9XCIi
ICsgc3RyICsgIlwiIik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldFZpZXdCb3hCYXNl
VmFsdWUoRmxvYXRSZWN0KHgsIHksIHcsIGgpKTsKKyAgICB9CiB9CiAKIEFmZmluZVRyYW5zZm9y
bSBTVkdGaXRUb1ZpZXdCb3g6OnZpZXdCb3hUb1ZpZXdUcmFuc2Zvcm0oZmxvYXQgdmlld1dpZHRo
LCBmbG9hdCB2aWV3SGVpZ2h0KSBjb25zdApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0
VG9WaWV3Qm94LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3
Qm94LmgJKHJldmlzaW9uIDE4NjUxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHRml0VG9WaWV3
Qm94LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwLDE3ICsyMCwxNSBAQAogICAgIEJvc3RvbiwgTUEg
MDIxMTEtMTMwNywgVVNBLgogKi8KIAotI2lmbmRlZiBLU1ZHX1NWR0ZpdFRvVmlld0JveEltcGxf
SAotI2RlZmluZSBLU1ZHX1NWR0ZpdFRvVmlld0JveEltcGxfSAorI2lmbmRlZiBTVkdGaXRUb1Zp
ZXdCb3hfSAorI2RlZmluZSBTVkdGaXRUb1ZpZXdCb3hfSAogI2lmZGVmIFNWR19TVVBQT1JUCiAK
ICNpbmNsdWRlICJTVkdFbGVtZW50LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKLSAgICBjbGFz
cyBBdHRyaWJ1dGU7CiAgICAgY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwogICAgIGNsYXNzIFNWR1By
ZXNlcnZlQXNwZWN0UmF0aW87Ci0gICAgY2xhc3MgU3RyaW5nSW1wbDsKIAogICAgIGNsYXNzIFNW
R0ZpdFRvVmlld0JveCB7CiAgICAgcHVibGljOgpAQCAtNTQsNiArNTIsNiBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCiAKICNlbmRpZiAvLyBTVkdfU1VQUE9S
VAotI2VuZGlmIC8vIEtTVkdfU1ZHRml0VG9WaWV3Qm94SW1wbF9ICisjZW5kaWYgLy8gU1ZHRml0
VG9WaWV3Qm94X0gKIAogLy8gdmltOnRzPTQ6bm9ldApJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcv
U1ZHSW1hZ2VFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdJ
bWFnZUVsZW1lbnQuY3BwCShyZXZpc2lvbiAxODY1MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R0ltYWdlRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1LDkgKzc1LDEzIEBAIHZvaWQg
U1ZHSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnUKICAgICBlbHNlIGlmIChhdHRyLT5u
YW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBzZXRXaWR0aEJhc2VWYWx1
ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwogICAgICAgICBhZGRD
U1NQcm9wZXJ0eShhdHRyLCBDU1NfUFJPUF9XSURUSCwgdmFsdWUpOworICAgICAgICBpZiAod2lk
dGgoKS52YWx1ZSgpIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgaW1hZ2UgYXR0cmli
dXRlIDx3aWR0aD4gaXMgbm90IGFsbG93ZWQiKTsKICAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUo
KSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikgewogICAgICAgICBzZXRIZWlnaHRCYXNlVmFsdWUo
U1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7CiAgICAgICAgIGFkZENT
U1Byb3BlcnR5KGF0dHIsIENTU19QUk9QX0hFSUdIVCwgdmFsdWUpOworICAgICAgICBpZiAoaGVp
Z2h0KCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4
dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIGltYWdlIGF0dHJp
YnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlm
IChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1
cm47CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXJzZXJVdGlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhcnNlclV0aWxpdGllcy5jcHAJKHJldmlz
aW9uIDE4NjUxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA5LDEwICsxMDksMTAgQEAgYm9vbCBwYXJzZU51bWJlck9wdGlv
bmFsTnVtYmVyKGNvbnN0IFN0cgogICAgIHJldHVybiBjdXIgPT0gZW5kOwogfQogCi12b2lkIFNW
R1BvbHlQYXJzZXI6OnBhcnNlUG9pbnRzKGNvbnN0IFN0cmluZyYgcykgY29uc3QKK2Jvb2wgU1ZH
UG9seVBhcnNlcjo6cGFyc2VQb2ludHMoY29uc3QgU3RyaW5nJiBzKSBjb25zdAogewogICAgIGlm
IChzLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBjb25zdCBVQ2hhciogY3VyID0gcy5jaGFyYWN0ZXJzKCk7CiAgICAgY29uc3QgVUNoYXIqIGVu
ZCA9IGN1ciArIHMubGVuZ3RoKCk7CiAKQEAgLTEyMiwxMSArMTIyLDExIEBAIHZvaWQgU1ZHUG9s
eVBhcnNlcjo6cGFyc2VQb2ludHMoY29uc3QgU3QKICAgICB3aGlsZSAoMSkgewogICAgICAgICBk
b3VibGUgeFBvcyA9IDA7CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHhQb3Mp
KQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgICAg
ICBkb3VibGUgeVBvcyA9IDA7CiAgICAgICAgIGlmICghcGFyc2VOdW1iZXIoY3VyLCBlbmQsIHlQ
b3MpKQotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICAgICAgc3ZnUG9seVRvKHhQb3MsIHlQb3MsIHNlZ21lbnROdW0rKyk7CiAgICAgfQpJbmRleDog
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHJldmlzaW9uIDE4NjUxKQorKysg
V2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGFyc2VyVXRpbGl0aWVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY5LDcgKzY5LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICB7CiAgICAgcHVibGljOgogICAg
ICAgICB2aXJ0dWFsIH5TVkdQb2x5UGFyc2VyKCkgeyB9Ci0gICAgICAgIHZvaWQgcGFyc2VQb2lu
dHMoY29uc3QgU3RyaW5nICZwb2ludHMpIGNvbnN0OworICAgICAgICBib29sIHBhcnNlUG9pbnRz
KGNvbnN0IFN0cmluZyYgcG9pbnRzKSBjb25zdDsKIAogICAgIHByb3RlY3RlZDoKICAgICAgICAg
dmlydHVhbCB2b2lkIHN2Z1BvbHlUbyhkb3VibGUgeDEsIGRvdWJsZSB5MSwgaW50IG5yKSBjb25z
dCA9IDA7CkBAIC05MCw3ICs5MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlCiAgICAgewogICAgIHB1
YmxpYzoKICAgICAgICAgdmlydHVhbCB+U1ZHUGF0aFBhcnNlcigpIHsgfQotICAgICAgICBib29s
IHBhcnNlU1ZHKGNvbnN0IFN0cmluZyAmZCwgYm9vbCBwcm9jZXNzID0gZmFsc2UpOworICAgICAg
ICBib29sIHBhcnNlU1ZHKGNvbnN0IFN0cmluZyYgZCwgYm9vbCBwcm9jZXNzID0gZmFsc2UpOwog
CiAgICAgcHJvdGVjdGVkOgogICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnTW92ZVRvKGRvdWJsZSB4
MSwgZG91YmxlIHkxLCBib29sIGNsb3NlZCwgYm9vbCBhYnMgPSB0cnVlKSA9IDA7CkBAIC0xMDQs
NyArMTA0LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUKICAgICAgICAgdmlydHVhbCB2b2lkIHN2Z0Fy
Y1RvKGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHIxLCBkb3VibGUgcjIsIGRvdWJsZSBhbmds
ZSwgYm9vbCBsYXJnZUFyY0ZsYWcsIGJvb2wgc3dlZXBGbGFnLCBib29sIGFicyA9IHRydWUpOwog
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3ZnQ2xvc2VQYXRoKCkgPSAwOwogICAgIHByaXZhdGU6Ci0g
ICAgICAgIHZvaWQgY2FsY3VsYXRlQXJjKGJvb2wgcmVsYXRpdmUsIGRvdWJsZSAmY3VyeCwgZG91
YmxlICZjdXJ5LCBkb3VibGUgYW5nbGUsIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHIxLCBk
b3VibGUgcjIsIGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZyk7CisgICAgICAgIHZv
aWQgY2FsY3VsYXRlQXJjKGJvb2wgcmVsYXRpdmUsIGRvdWJsZSYgY3VyeCwgZG91YmxlJiBjdXJ5
LCBkb3VibGUgYW5nbGUsIGRvdWJsZSB4LCBkb3VibGUgeSwgZG91YmxlIHIxLCBkb3VibGUgcjIs
IGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZyk7CiAgICAgfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0aEVsZW1lbnQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdGhFbGVtZW50LmNwcAkocmV2
aXNpb24gMTg2NTEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXRoRWxlbWVudC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2OCwxMSArMjY4LDE2IEBAIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnN2
Z0Nsb3NlUGF0aCgpCiAKIHZvaWQgU1ZHUGF0aEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRl
KE1hcHBlZEF0dHJpYnV0ZSogYXR0cikKIHsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVl
ID0gYXR0ci0+dmFsdWUoKTsKICAgICBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpkQXR0
cikgewogICAgICAgICBFeGNlcHRpb25Db2RlIGVjOwogICAgICAgICBwYXRoU2VnTGlzdCgpLT5j
bGVhcihlYyk7Ci0gICAgICAgIGlmICghcGFyc2VTVkcoYXR0ci0+dmFsdWUoKSwgdHJ1ZSkpCi0g
ICAgICAgICAgICBwYXRoU2VnTGlzdCgpLT5jbGVhcihlYyk7CisgICAgICAgIGlmICghcGFyc2VT
VkcodmFsdWUsIHRydWUpKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5z
aW9ucygpLT5yZXBvcnRFcnJvcigiUHJvYmxlbSBwYXJzaW5nIGQ9XCIiICsgdmFsdWUgKyAiXCIi
KTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6cGF0aExlbmd0aEF0
dHIpIHsKKyAgICAgICAgbV9wYXRoTGVuZ3RoID0gdmFsdWUudG9Eb3VibGUoKTsKKyAgICAgICAg
aWYgKG1fcGF0aExlbmd0aCA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NW
R0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHBhdGggYXR0
cmlidXRlIDxwYXRoTGVuZ3RoPiBpcyBub3QgYWxsb3dlZCIpOwogICAgIH0gZWxzZSB7CiAgICAg
ICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAg
ICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxODY1MSkKKysrIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BhdHRlcm5FbGVtZW50LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtOTksMTEgKzk5LDE1IEBAIHZvaWQgU1ZHUGF0dGVybkVsZW1l
bnQ6OnBhcnNlTWFwcGVkQXR0cmkKICAgICAgICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgodGhp
cywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6eUF0dHIpCiAgICAgICAgIHNldFlCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMs
IExlbmd0aE1vZGVIZWlnaHQsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp3aWR0aEF0dHIpCisgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjp3aWR0aEF0dHIpIHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRo
aXMsIExlbmd0aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkg
PT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIpCisgICAgICAgIGlmICh3aWR0aCgpLnZhbHVlKCkgPCAw
LjApCisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9y
dEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciBwYXR0ZXJuIGF0dHJpYnV0ZSA8d2lkdGg+IGlz
IG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6
OmhlaWdodEF0dHIpIHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlz
LCBMZW5ndGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgeworICAgICAgICBpZiAod2lk
dGgoKS52YWx1ZSgpIDwgMC4wKQorICAgICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0
ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcGF0dGVybiBhdHRy
aWJ1dGUgPGhlaWdodD4gaXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoU1ZHVVJJUmVmZXJlbmNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShh
dHRyKSkKSW5kZXg6IFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1BvbHlFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdQb2x5RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4
NjUxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUG9seUVsZW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDYgKzEsNiBAQAogLyoKICAgICBDb3B5cmlnaHQgKEMpIDIwMDQsIDIwMDUsIDIw
MDYgTmlrb2xhcyBaaW1tZXJtYW5uIDx6aW1tZXJtYW5uQGtkZS5vcmc+Ci0gICAgICAgICAgICAg
ICAgICAyMDA0LCAyMDA1LCAyMDA2IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CisgICAgICAgICAg
ICAgICAgICAyMDA0LCAyMDA1LCAyMDA2LCAyMDA3IFJvYiBCdWlzIDxidWlzQGtkZS5vcmc+CiAK
ICAgICBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgS0RFIHByb2plY3QKIApAQCAtNjIsMTAgKzYy
LDEyIEBAIFNWR1BvaW50TGlzdCogU1ZHUG9seUVsZW1lbnQ6OmFuaW1hdGVkUG8KIAogdm9pZCBT
VkdQb2x5RWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoTWFwcGVkQXR0cmlidXRlKiBhdHRy
KQogeworICAgIGNvbnN0IEF0b21pY1N0cmluZyYgdmFsdWUgPSBhdHRyLT52YWx1ZSgpOwogICAg
IGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnBvaW50c0F0dHIpIHsKICAgICAgICAgRXhj
ZXB0aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIHBvaW50cygpLT5jbGVhcihlYyk7Ci0gICAgICAg
IHBhcnNlUG9pbnRzKGF0dHItPnZhbHVlKCkpOworICAgICAgICBpZiAoIXBhcnNlUG9pbnRzKHZh
bHVlKSAmJiAhbV9pZ25vcmVBdHRyaWJ1dGVDaGFuZ2VzKQorICAgICAgICAgICAgZG9jdW1lbnQo
KS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiUHJvYmxlbSBwYXJzaW5nIHBv
aW50cz1cIiIgKyB2YWx1ZSArICJcIiIpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdU
ZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAgICAgICAgICByZXR1cm47Cklu
ZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSYWRpYWxHcmFkaWVudEVsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JhZGlhbEdyYWRpZW50RWxlbWVudC5jcHAJ
KHJldmlzaW9uIDE4NjUxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmFkaWFsR3JhZGllbnRF
bGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjcsOSArNjcsMTEgQEAgdm9pZCBTVkdSYWRp
YWxHcmFkaWVudEVsZW1lbnQ6OnBhcnNlTWFwcAogICAgICAgICBzZXRDeEJhc2VWYWx1ZShTVkdM
ZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkpOwogICAgIGVsc2UgaWYgKGF0dHIt
Pm5hbWUoKSA9PSBTVkdOYW1lczo6Y3lBdHRyKQogICAgICAgICBzZXRDeUJhc2VWYWx1ZShTVkdM
ZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRy
LT5uYW1lKCkgPT0gU1ZHTmFtZXM6OnJBdHRyKQorICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6ckF0dHIpIHsKICAgICAgICAgc2V0UkJhc2VWYWx1ZShTVkdMZW5ndGgodGhp
cywgTGVuZ3RoTW9kZU90aGVyLCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9
PSBTVkdOYW1lczo6ZnhBdHRyKQorICAgICAgICBpZiAocigpLnZhbHVlKCkgPCAwLjApCisgICAg
ICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJB
IG5lZ2F0aXZlIHZhbHVlIGZvciByYWRpYWwgZ3JhZGllbnQgcmFkaXVzIDxyPiBpcyBub3QgYWxs
b3dlZCIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmeEF0dHIp
CiAgICAgICAgIHNldEZ4QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlV2lkdGgs
IHZhbHVlKSk7CiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpmeUF0dHIp
CiAgICAgICAgIHNldEZ5QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlSGVpZ2h0
LCB2YWx1ZSkpOwpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHUmVjdEVsZW1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NWR1JlY3RFbGVtZW50LmNwcAkocmV2aXNp
b24gMTg2NTEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdSZWN0RWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTYxLDE1ICs2MSwyMiBAQCB2b2lkIFNWR1JlY3RFbGVtZW50OjpwYXJzZU1h
cHBlZEF0dHJpYnV0CiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0
aE1vZGVXaWR0aCwgdmFsdWUpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnlBdHRyKQogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhN
b2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6cnhBdHRyKQotICAgICAgICAgc2V0UnhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0
aE1vZGVXaWR0aCwgdmFsdWUpKTsKLSAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnJ5QXR0cikKLSAgICAgICAgIHNldFJ5QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5n
dGhNb2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdO
YW1lczo6d2lkdGhBdHRyKQorICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
cnhBdHRyKSB7CisgICAgICAgIHNldFJ4QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhN
b2RlV2lkdGgsIHZhbHVlKSk7CisgICAgICAgICAgICBkb2N1bWVudCgpLT5hY2Nlc3NTVkdFeHRl
bnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVlIGZvciByZWN0IDxyeD4gaXMg
bm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6
cnlBdHRyKSB7CisgICAgICAgIHNldFJ5QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhN
b2RlSGVpZ2h0LCB2YWx1ZSkpOworICAgICAgICBpZiAocnkoKS52YWx1ZSgpIDwgMC4wKQorICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigi
QSBuZWdhdGl2ZSB2YWx1ZSBmb3IgcmVjdCA8cnk+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBl
bHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OndpZHRoQXR0cikgewogICAgICAgICBz
ZXRXaWR0aEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdpZHRoLCB2YWx1ZSkp
OwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6aGVpZ2h0QXR0cikKKyAg
ICAgICAgaWYgKHdpZHRoKCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCkt
PmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9y
IHJlY3QgPHdpZHRoPiBpcyBub3QgYWxsb3dlZCIpOworICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFt
ZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAgICAgICAgIHNldEhlaWdodEJhc2VWYWx1
ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhlaWdodCwgdmFsdWUpKTsKLSAgICBlbHNlIHsK
KyAgICAgICAgaWYgKGhlaWdodCgpLnZhbHVlKCkgPCAwLjApCisgICAgICAgICAgICBkb2N1bWVu
dCgpLT5hY2Nlc3NTVkdFeHRlbnNpb25zKCktPnJlcG9ydEVycm9yKCJBIG5lZ2F0aXZlIHZhbHVl
IGZvciByZWN0IDxoZWlnaHQ+IGlzIG5vdCBhbGxvd2VkIik7CisgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKFNWR1Rlc3RzOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgaWYgKFNWR0xhbmdTcGFjZTo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkocmV2aXNpb24gMTg2
NTEpCisrKyBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdTVkdFbGVtZW50LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTk2LDkgKzE5NiwxMyBAQCB2b2lkIFNWR1NWR0VsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0
cmlidXRlCiAgICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjp3aWR0aEF0dHIp
IHsKICAgICAgICAgc2V0V2lkdGhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0aE1vZGVX
aWR0aCwgdmFsdWUpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfV0lE
VEgsIHZhbHVlKTsKKyAgICAgICAgaWYgKHdpZHRoKCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAg
ICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVn
YXRpdmUgdmFsdWUgZm9yIHN2ZyBhdHRyaWJ1dGUgPHdpZHRoPiBpcyBub3QgYWxsb3dlZCIpOwog
ICAgIH0gZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05hbWVzOjpoZWlnaHRBdHRyKSB7CiAg
ICAgICAgIHNldEhlaWdodEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZUhlaWdo
dCwgdmFsdWUpKTsKICAgICAgICAgYWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTX1BST1BfSEVJR0hU
LCB2YWx1ZSk7CisgICAgICAgIGlmIChoZWlnaHQoKS52YWx1ZSgpIDwgMC4wKQorICAgICAgICAg
ICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigiQSBuZWdh
dGl2ZSB2YWx1ZSBmb3Igc3ZnIGF0dHJpYnV0ZSA8aGVpZ2h0PiBpcyBub3QgYWxsb3dlZCIpOwog
ICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUo
YXR0cikpCiAgICAgICAgICAgICByZXR1cm47CkluZGV4OiBXZWJDb3JlL2tzdmcyL3N2Zy9TVkdU
ZXh0Q29udGVudEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUva3N2ZzIvc3ZnL1NW
R1RleHRDb250ZW50RWxlbWVudC5jcHAJKHJldmlzaW9uIDE4NjUxKQorKysgV2ViQ29yZS9rc3Zn
Mi9zdmcvU1ZHVGV4dENvbnRlbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTQsMTAg
Kzk0LDE1IEBAIHZvaWQgU1ZHVGV4dENvbnRlbnRFbGVtZW50OjpzZWxlY3RTdWJTdHIKIAogdm9p
ZCBTVkdUZXh0Q29udGVudEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKE1hcHBlZEF0dHJp
YnV0ZSogYXR0cikKIHsKKyAgICBjb25zdCBBdG9taWNTdHJpbmcmIHZhbHVlID0gYXR0ci0+dmFs
dWUoKTsKICAgICAvL2lmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6Omxlbmd0aEFkanVzdEF0
dHIpCiAgICAgLy8gICAgc2V0WEJhc2VWYWx1ZShTVkdMZW5ndGgodGhpcywgTGVuZ3RoTW9kZVdp
ZHRoLCB2YWx1ZSkpOwogICAgIC8vZWxzZQotICAgIHsKKyAgICBpZiAoYXR0ci0+bmFtZSgpID09
IFNWR05hbWVzOjp0ZXh0TGVuZ3RoQXR0cikgeworICAgICAgICBzZXRUZXh0TGVuZ3RoQmFzZVZh
bHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2RlT3RoZXIsIHZhbHVlKSk7CisgICAgICAgIGlm
ICh0ZXh0TGVuZ3RoKCkudmFsdWUoKSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFj
Y2Vzc1NWR0V4dGVuc2lvbnMoKS0+cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHRl
eHQgYXR0cmlidXRlIDx0ZXh0TGVuZ3RoPiBpcyBub3QgYWxsb3dlZCIpOworICAgIH0gZWxzZSB7
CiAgICAgICAgIGlmIChTVkdUZXN0czo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoYXR0cikpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIGlmIChTVkdMYW5nU3BhY2U6OnBhcnNlTWFwcGVkQXR0
cmlidXRlKGF0dHIpKQpJbmRleDogV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHJldmlz
aW9uIDE4NjUxKQorKysgV2ViQ29yZS9rc3ZnMi9zdmcvU1ZHVXNlRWxlbWVudC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTY2LDExICs2NiwxNSBAQCB2b2lkIFNWR1VzZUVsZW1lbnQ6OnBhcnNlTWFw
cGVkQXR0cmlidXRlCiAgICAgICAgIHNldFhCYXNlVmFsdWUoU1ZHTGVuZ3RoKHRoaXMsIExlbmd0
aE1vZGVXaWR0aCwgdmFsdWUpKTsKICAgICBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFt
ZXM6OnlBdHRyKQogICAgICAgICBzZXRZQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhN
b2RlSGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1l
czo6d2lkdGhBdHRyKQorICAgIGVsc2UgaWYgKGF0dHItPm5hbWUoKSA9PSBTVkdOYW1lczo6d2lk
dGhBdHRyKSB7CiAgICAgICAgIHNldFdpZHRoQmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5n
dGhNb2RlV2lkdGgsIHZhbHVlKSk7Ci0gICAgZWxzZSBpZiAoYXR0ci0+bmFtZSgpID09IFNWR05h
bWVzOjpoZWlnaHRBdHRyKQorICAgICAgICBpZiAod2lkdGgoKS52YWx1ZSgpIDwgMC4wKQorICAg
ICAgICAgICAgZG9jdW1lbnQoKS0+YWNjZXNzU1ZHRXh0ZW5zaW9ucygpLT5yZXBvcnRFcnJvcigi
QSBuZWdhdGl2ZSB2YWx1ZSBmb3IgdXNlIGF0dHJpYnV0ZSA8d2lkdGg+IGlzIG5vdCBhbGxvd2Vk
Iik7CisgICAgfSBlbHNlIGlmIChhdHRyLT5uYW1lKCkgPT0gU1ZHTmFtZXM6OmhlaWdodEF0dHIp
IHsKICAgICAgICAgc2V0SGVpZ2h0QmFzZVZhbHVlKFNWR0xlbmd0aCh0aGlzLCBMZW5ndGhNb2Rl
SGVpZ2h0LCB2YWx1ZSkpOwotICAgIGVsc2UgeworICAgICAgICBpZiAoaGVpZ2h0KCkudmFsdWUo
KSA8IDAuMCkKKyAgICAgICAgICAgIGRvY3VtZW50KCktPmFjY2Vzc1NWR0V4dGVuc2lvbnMoKS0+
cmVwb3J0RXJyb3IoIkEgbmVnYXRpdmUgdmFsdWUgZm9yIHVzZSBhdHRyaWJ1dGUgPGhlaWdodD4g
aXMgbm90IGFsbG93ZWQiKTsKKyAgICB9IGVsc2UgewogICAgICAgICBpZiAoU1ZHVGVzdHM6OnBh
cnNlTWFwcGVkQXR0cmlidXRlKGF0dHIpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBp
ZiAoU1ZHTGFuZ1NwYWNlOjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShhdHRyKSkK
</data>
<flag name="review"
          id="4578"
          type_id="1"
          status="+"
          setter="sam"
    />
          </attachment>
      

    </bug>

</bugzilla>