<?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>4872</bug_id>
          
          <creation_ts>2005-09-07 05:11:41 -0700</creation_ts>
          <short_desc>XMLHttpRequest fails to throw an exception when there is a security violation (mismatching domains)</short_desc>
          <delta_ts>2006-09-24 21:34:13 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>XML</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>http://rdfweb.org/people/damian/2005/09/test_xmlhttprequest.html</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>HasReduction</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Damian Steer">pldms</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          <cc>ap</cc>
    
    <cc>darin</cc>
    
    <cc>ian</cc>
    
    <cc>mrowe</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>18996</commentid>
    <comment_count>0</comment_count>
    <who name="Damian Steer">pldms</who>
    <bug_when>2005-09-07 05:11:41 -0700</bug_when>
    <thetext>XMLHttpRequests are tied to the originating domain (host?) for security reasons. Safari does not appear 
to violate this, however it seems to be impossible to detect this reliably in javascript.

Mozilla (et al), Opera and IE (*) all raise exceptions in the following (although at slightly different 
points):

(taken from above url)

try
        {
          xmlhttp = new XMLHttpRequest();
          xmlhttp.open(&quot;GET&quot;, &quot;http://example.com/&quot;, true);
          xmlhttp.send(null);
        }
catch(e)
        {
          alert(e);
        }

Safari remains on readyState == 0, which suggests something is wrong, but isn&apos;t definitive.

(*) http://rdfweb.org/people/damian/2005/09/test_xmlhttprequest_ie.html will check all platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19044</commentid>
    <comment_count>1</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2005-09-07 21:30:24 -0700</bug_when>
    <thetext>Confirmed with WebKit 412.7 and ToT WebKit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55113</commentid>
    <comment_count>2</comment_count>
      <attachid>10476</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-09 10:25:35 -0700</bug_when>
    <thetext>Created attachment 10476
proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55196</commentid>
    <comment_count>3</comment_count>
      <attachid>10476</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-10 12:37:20 -0700</bug_when>
    <thetext>Comment on attachment 10476
proposed patch

-      if (args.size() &lt; 2 || args.size() &gt; 5)
-        return jsUndefined();
+      if (args.size() &lt; 2)

-      if (args.size() &gt;= 1) {
+      if (args.size() == 1) {

It looks like this change now tolerates extra arguments for open, but no longer tolerates extra parameters for send. Is that intentional? Do the tests cover this?

In general, I&apos;d like to see tests that cover the &quot;extra arguments&quot; behavior since we keep tweaking it back and forth.

Does the XMLHttpRequest exception in setDOMException need to have the strange pattern where it thows the error without putting the exception code into the object? If so, we need a comment at least to explain why.

How can those checks of the response headers be turned into asserts? Where is the code that guarantees the headers will have that form?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55201</commentid>
    <comment_count>4</comment_count>
      <attachid>10476</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-10 13:07:47 -0700</bug_when>
    <thetext>Comment on attachment 10476
proposed patch

I&apos;m going to mark this review- because of the issue in setDOMException.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55253</commentid>
    <comment_count>5</comment_count>
      <attachid>10501</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-11 10:45:50 -0700</bug_when>
    <thetext>Created attachment 10501
proposed patch

(In reply to comment #3)
&gt; It looks like this change now tolerates extra arguments for open, but no longer
&gt; tolerates extra parameters for send. Is that intentional?

  This was a mistake, fixed!

&gt; In general, I&apos;d like to see tests that cover the &quot;extra arguments&quot; behavior
&gt; since we keep tweaking it back and forth.

  Added http/tests/extra-parameters.html

&gt; Does the XMLHttpRequest exception in setDOMException need to have the strange
&gt; pattern where it thows the error without putting the exception code into the
&gt; object? If so, we need a comment at least to explain why.

  Done. The current XMLHttpRequest spec draft does not specify any code for the exception (actually, it does not even specify that an exception should be thrown). And Firefox doesn&apos;t put any exception code either.

&gt; How can those checks of the response headers be turned into asserts? Where is
&gt; the code that guarantees the headers will have that form?

  The string is created in HeaderStringFromDictionary(), LoaderFunctionsMac.mm in the expected form. Actually, I think that the ResourceLoader interface should be changed to pass this information without serialization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56178</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-21 14:35:00 -0700</bug_when>
    <thetext>ap: I keep meaning to talk with you about this over irc... ping me next time you&apos;re around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56278</commentid>
    <comment_count>7</comment_count>
      <attachid>10501</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-23 00:54:24 -0700</bug_when>
    <thetext>Comment on attachment 10501
proposed patch

I&apos;ve read through this a couple times over the last week or so.  I also just talked with ap about it again over irc.

The code looks sane.  Most important here are the tests.  So long as we have excellent XHR testing coverage, I&apos;m happy.

It&apos;s sad that this string has to be repeated so many times:
return throwError(exec, SyntaxError, &quot;Not enough arguments&quot;);

You&apos;ve noted these try/catches are for testing in IE:
+        try {
+            req.overrideMimeType(&apos;text/xml&apos;);
+        } catch (ex) {
+        }
IMO it&apos;s best to log any exceptions, even if they&apos;re specific to a single browser.

This should have a bug about it:
-    // FIXME: Should this abort instead if we already have a m_job going?
+    // FIXME: Should this abort or raise an exception instead if we already have a m_job going?


looks good.  r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56296</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-23 11:51:38 -0700</bug_when>
    <thetext>Committed revision 16543.

&gt; IMO it&apos;s best to log any exceptions, even if they&apos;re specific to a single
&gt; browser.

Done; also added empty-response.xml to make the tests work in WinIE without tweaking .htaccess.

&gt; This should have a bug about it:
&gt; -    // FIXME: Should this abort instead if we already have a m_job going?
&gt; +    // FIXME: Should this abort or raise an exception instead if we already
&gt; have a m_job going?

This is not something we can really resolve without help from the web-api WG; I have asked Anne van Kesteren for comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>56398</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-09-24 21:34:13 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; This is not something we can really resolve without help from the web-api WG

http://www.w3.org/2006/webapi/track/issues/91</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10476</attachid>
            <date>2006-09-09 10:25:35 -0700</date>
            <delta_ts>2006-09-11 10:45:50 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>4872r1_patch.txt</filename>
            <type>text/plain</type>
            <size>27576</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2Mjc1KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjIgQEAKKzIwMDYtMDktMDkgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBueXBvcC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD00ODcyCisgICAgICAgIFhNTEh0dHBSZXF1ZXN0IGZhaWxzIHRvIHRocm93IGFuIGV4Y2VwdGlv
biB3aGVuIHRoZXJlIGlzIGEgc2VjdXJpdHkgdmlvbGF0aW9uCisgICAgICAgIChtaXNtYXRjaGlu
ZyBkb21haW5zKQorCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leGNlcHRp
b25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9leGNlcHRpb25zLmh0bWw6IEFkZGVkLgorCisgICAgICAgICogZmFzdC9kb20veG1saHR0
cHJlcXVlc3QtZ2V0LWV4cGVjdGVkLnR4dDogVXBkYXRlZCByZXN1bHRzLiAKKworICAgICAgICAq
IGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2UtZXhwZWN0ZWQu
dHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVz
cG9uc2Utc3luYy1leHBlY3RlZC50eHQ6CisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC96ZXJvLWxlbmd0aC1yZXNwb25zZS1zeW5jLmh0bWw6CisgICAgICAgICogaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC96ZXJvLWxlbmd0aC1yZXNwb25zZS5odG1sOgorICAgICAgICBVcGRh
dGVkIHJlc3VsdHMgYW5kIGNoYW5nZWQgc3RhdGUgbmFtZXMgdG8gbWF0Y2ggdGhlIGN1cnJlbnQg
c3BlYy4KKwogMjAwNi0wOS0wOCAgVGltb3RoeSBIYXRjaGVyICA8dGltb3RoeUBhcHBsZS5jb20+
CiAKICAgICAgICAgQWRkcyBhIHRlc3QgZm9yIHRoZSBDU1MgVVJMIHF1b3RpbmcgbG9naWMuCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1nZXQtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdldC1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDE2Mjc1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9kb20veG1s
aHR0cHJlcXVlc3QtZ2V0LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTcsOSArMTcs
OCBAQCByZXNwb25zZVhNTCBzZXJpYWxpemVkCiBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKQogdW5k
ZWZpbmVkCiBzdGF0dXMKLXVuZGVmaW5lZAorMAogc3RhdHVzVGV4dAotdW5kZWZpbmVkCiByZWFk
eVN0YXRlCiA0CiBFdmVudCBpbmZvcm1hdGlvbgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9leGNlcHRpb25zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L2V4Y2VwdGlvbnMtZXhwZWN0ZWQu
dHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC9leGNlcHRpb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxNCBAQAor
VGVzdCB0aGF0IFhNTEh0dHBSZXF1ZXN0IHJhaXNlcyBleGNlcHRpb25zIHdoZW4gaXQgc2hvdWxk
LgorCituZXcgWE1MSHR0cFJlcXVlc3QoKQorUEFTUzogcmVxLnNldFJlcXVlc3RIZWFkZXIoIkZv
byIsICJiYXIiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IElOVkFMSURfU1RBVEVfRVJSOiBET00g
RXhjZXB0aW9uIDExLgorUEFTUzogcmVxLnNlbmQobnVsbCkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1M6IHJlcS5vcGVuKCJH
RVQiLCAiaHR0cDovL3d3dy5hcHBsZS5jb20vIiwgdHJ1ZSkgdGhyZXcgZXhjZXB0aW9uIEVycm9y
OiBQZXJtaXNzaW9uIGRlbmllZC4KK29wZW4oKQorUEFTUzogcmVxLnNldFJlcXVlc3RIZWFkZXIo
KSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgorUEFT
UzogcmVxLnNldFJlcXVlc3RIZWFkZXIoIkZvbyIpIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJv
cjogTm90IGVub3VnaCBhcmd1bWVudHMuCitzZW5kKCkKK1BBU1M6IHJlcS5zZW5kKG51bGwpIHRo
cmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEu
CitQQVNTOiByZXEuc2V0UmVxdWVzdEhlYWRlcigiRm9vIiwgImJhciIpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTOiByZXEu
Z2V0UmVzcG9uc2VIZWFkZXIoKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IE5vdCBlbm91
Z2ggYXJndW1lbnRzLgorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L2V4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFt
ZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICAr
IG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZXhj
ZXB0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvZXhjZXB0aW9ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leGNlcHRpb25zLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsODEgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBYTUxIdHRwUmVxdWVzdCBl
eGNlcHRpb25zPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVu
dD0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiPgorPGJvZHk+Cis8cD5UZXN0IHRoYXQgWE1MSHR0
cFJlcXVlc3QgcmFpc2VzIGV4Y2VwdGlvbnMgd2hlbiBpdCBzaG91bGQuPC9wPgorPHNjcmlwdD4K
KworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRl
c3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHZhciBjb25zb2xlX21lc3NhZ2VzID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGNvbnNvbGVfbWVzc2FnZXMpOworICAgIAorICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQor
ICAgIHsKKyAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOwor
ICAgICAgICBpdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2Up
KTsKKyAgICAgICAgY29uc29sZV9tZXNzYWdlcy5hcHBlbmRDaGlsZChpdGVtKTsKKyAgICB9Cisg
ICAgCisgICAgZnVuY3Rpb24gc2hvdWxkVGhyb3coX2EsIF9lKSB7CisgICAgICAgIHZhciBleGNl
cHRpb247CisgICAgICAgIHZhciBfYXY7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBfYXYg
PSBldmFsKF9hKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgZXhjZXB0aW9u
ID0gZS5kZXNjcmlwdGlvbiA/IGUuZGVzY3JpcHRpb24gOiBlOworICAgICAgICB9CisgICAgICAg
IAorICAgICAgICB2YXIgX2V2OworICAgICAgICBpZiAoX2UpCisgICAgICAgICAgICBfZXYgPSAg
ZXZhbChfZSk7CisgICAgICAgIAorICAgICAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgICAg
ICBpZiAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiIHx8IGV4Y2VwdGlvbiA9PSBfZXYpCisgICAg
ICAgICAgICAgICAgbG9nKCJQQVNTOiAiICsgX2EgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZXhj
ZXB0aW9uICsgIi4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2coIkZB
SUw6ICIgKyBfYSArICIgc2hvdWxkIHRocm93IGV4Y2VwdGlvbiAiICsgX2V2ICsgIi4gVGhyZXcg
ZXhjZXB0aW9uICIgKyBleGNlcHRpb24gKyAiLiIpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGVv
ZiBfYXYgPT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICBsb2coIkZBSUw6ICIgKyBfYSArICIg
c2hvdWxkIHRocm93IGV4Y2VwdGlvbiAiICsgX2UgKyAiLiBXYXMgdW5kZWZpbmVkLiIpOworICAg
ICAgICBlbHNlCisgICAgICAgICAgICBsb2coIkZBSUw6ICIgKyBfYSArICIgc2hvdWxkIHRocm93
IGV4Y2VwdGlvbiAiICsgX2UgKyAiLiBXYXMgIiArIF9hdiArICIuIik7CisgICAgfQorCisvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgaWYgKHdpbmRvdy5YTUxIdHRwUmVx
dWVzdCkgeworICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB9IGVsc2Ug
eworICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1z
eG1sMi5YTUxIVFRQIik7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICByZXEg
PSBuZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgICAgICAgfQorICAg
IH0KKyAgICBsb2coIm5ldyBYTUxIdHRwUmVxdWVzdCgpIik7CisKKyAgICBzaG91bGRUaHJvdygn
cmVxLnNldFJlcXVlc3RIZWFkZXIoIkZvbyIsICJiYXIiKScpOworICAgIHNob3VsZFRocm93KCdy
ZXEuc2VuZChudWxsKScpOworCisgICAgc2hvdWxkVGhyb3coJ3JlcS5vcGVuKCJHRVQiLCAiaHR0
cDovL3d3dy5hcHBsZS5jb20vIiwgdHJ1ZSknKTsKKyAgICAKKyAgICByZXEub3BlbignR0VUJywg
J3Jlc291cmNlcy96ZXJvLWxlbmd0aC50eHQnLCBmYWxzZSk7CisgICAgbG9nKCJvcGVuKCkiKTsK
KyAgICAKKyAgICBzaG91bGRUaHJvdygncmVxLnNldFJlcXVlc3RIZWFkZXIoKScpOworICAgIHNo
b3VsZFRocm93KCdyZXEuc2V0UmVxdWVzdEhlYWRlcigiRm9vIiknKTsKKyAgICAKKyAgICByZXEu
c2VuZChudWxsKTsKKyAgICBsb2coInNlbmQoKSIpOworCisgICAgc2hvdWxkVGhyb3coJ3JlcS5z
ZW5kKG51bGwpJyk7CisKKyAgICBzaG91bGRUaHJvdygncmVxLnNldFJlcXVlc3RIZWFkZXIoIkZv
byIsICJiYXIiKScpOworCisgICAgc2hvdWxkVGhyb3coJ3JlcS5nZXRSZXNwb25zZUhlYWRlcigp
Jyk7CisgICAKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVydHkgY2hhbmdlcyBv
bjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leGNlcHRpb25zLmh0bWwK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCgpJbmRleDogTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC96ZXJvLWxlbmd0aC1yZXNwb25zZS1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRw
cmVxdWVzdC96ZXJvLWxlbmd0aC1yZXNwb25zZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2Mjc1
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC96ZXJvLWxlbmd0aC1y
ZXNwb25zZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEsMjQgKzEsMzMgQEAKIFRl
c3QgZm9yIGJ1ZyA1OTI0IC0gemVyby1sZW5ndGggcmVzcG9uc2VzIHRvIFhNTEhUVFBSZXF1ZXN0
IG1pc2hhbmRsZWQuCiAKIGFmdGVyIGNyZWF0aW9uOiBVbmluaXRpYWxpemVkCi1SZXNwb25zZVRl
eHQ6ICIiCivCoMKgU3RhdHVzOiAwCivCoMKgU3RhdHVzVGV4dDogIiIKK8KgwqBSZXNwb25zZVRl
eHQ6ICIiCivCoMKgUmVzcG9uc2VYTUw6IG51bGwKK8KgwqBSZXNwb25zZVhNTCBzZXJpYWxpemVk
OiBuL2EKIGFmdGVyIHNldHRpbmcgb25yZWFkeXN0YXRlY2hhbmdlOiBVbmluaXRpYWxpemVkCi1v
bnJlYWR5c3RhdGVjaGFuZ2U6IExvYWRpbmcKLcKgwqBTdGF0dXM6IHVuZGVmaW5lZAotwqDCoFN0
YXR1c1RleHQ6IHVuZGVmaW5lZAorb25yZWFkeXN0YXRlY2hhbmdlOiBPcGVuCivCoMKgRXhjZXB0
aW9uIGdldHRpbmcgc3RhdHVzOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMQor
wqDCoEV4Y2VwdGlvbiBnZXR0aW5nIFN0YXR1c1RleHQ6IElOVkFMSURfU1RBVEVfRVJSOiBET00g
RXhjZXB0aW9uIDExCiDCoMKgUmVzcG9uc2VUZXh0OiAiIgogwqDCoFJlc3BvbnNlWE1MOiBudWxs
CiDCoMKgUmVzcG9uc2VYTUwgc2VyaWFsaXplZDogbi9hCi1hZnRlciBvcGVuKCk6IExvYWRpbmcK
LWFmdGVyIG92ZXJyaWRlTWltZVR5cGUoKTogTG9hZGluZwotYWZ0ZXIgc2VuZCgpOiBMb2FkaW5n
Ci1vbnJlYWR5c3RhdGVjaGFuZ2U6IExvYWRlZAorYWZ0ZXIgb3BlbigpOiBPcGVuCivCoMKgRXhj
ZXB0aW9uIGdldHRpbmcgc3RhdHVzOiBJTlZBTElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAx
MQorwqDCoEV4Y2VwdGlvbiBnZXR0aW5nIFN0YXR1c1RleHQ6IElOVkFMSURfU1RBVEVfRVJSOiBE
T00gRXhjZXB0aW9uIDExCivCoMKgUmVzcG9uc2VUZXh0OiAiIgorwqDCoFJlc3BvbnNlWE1MOiBu
dWxsCivCoMKgUmVzcG9uc2VYTUwgc2VyaWFsaXplZDogbi9hCithZnRlciBvdmVycmlkZU1pbWVU
eXBlKCk6IE9wZW4KK2FmdGVyIHNlbmQoKTogT3Blbgorb25yZWFkeXN0YXRlY2hhbmdlOiBTZW50
CiDCoMKgU3RhdHVzOiAyMDAKIMKgwqBTdGF0dXNUZXh0OiAiT0siCiDCoMKgUmVzcG9uc2VUZXh0
OiAiIgogwqDCoFJlc3BvbnNlWE1MOiBudWxsCiDCoMKgUmVzcG9uc2VYTUwgc2VyaWFsaXplZDog
bi9hCi1vbnJlYWR5c3RhdGVjaGFuZ2U6IENvbXBsZXRlZAorb25yZWFkeXN0YXRlY2hhbmdlOiBM
b2FkZWQKIMKgwqBTdGF0dXM6IDIwMAogwqDCoFN0YXR1c1RleHQ6ICJPSyIKIMKgwqBSZXNwb25z
ZVRleHQ6ICIiCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3pl
cm8tbGVuZ3RoLXJlc3BvbnNlLXN5bmMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2Utc3lu
Yy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE2Mjc1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC96ZXJvLWxlbmd0aC1yZXNwb25zZS1zeW5jLWV4cGVjdGVkLnR4dAko
d29ya2luZyBjb3B5KQpAQCAtMyw5ICszLDkgQEAgVGVzdCBmb3IgYnVnIDU5MjQgLSB6ZXJvLWxl
bmd0aCByZXNwb25zZQogYWZ0ZXIgY3JlYXRpb246IFVuaW5pdGlhbGl6ZWQKIFJlc3BvbnNlVGV4
dDogIiIKIGFmdGVyIHNldHRpbmcgb25yZWFkeXN0YXRlY2hhbmdlOiBVbmluaXRpYWxpemVkCi1h
ZnRlciBvcGVuKCk6IExvYWRpbmcKLWFmdGVyIG92ZXJyaWRlTWltZVR5cGUoKTogTG9hZGluZwot
YWZ0ZXIgc2VuZCgpOiBDb21wbGV0ZWQKK2FmdGVyIG9wZW4oKTogT3BlbgorYWZ0ZXIgb3ZlcnJp
ZGVNaW1lVHlwZSgpOiBPcGVuCithZnRlciBzZW5kKCk6IExvYWRlZAogwqDCoFN0YXR1czogMjAw
CiDCoMKgU3RhdHVzVGV4dDogIk9LIgogwqDCoFJlc3BvbnNlVGV4dDogIiIKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2Utc3lu
Yy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvemVyby1sZW5ndGgtcmVzcG9uc2Utc3luYy5odG1sCShyZXZpc2lvbiAxNjI3NSkKKysrIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2Ut
c3luYy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMyArNTgsMTMgQEAKICAgICAgIGlmIChy
ZXEucmVhZHlTdGF0ZSA9PSAwKQogICAgICAgICAgIHJldHVybiAiVW5pbml0aWFsaXplZCI7CiAg
ICAgICBlbHNlIGlmIChyZXEucmVhZHlTdGF0ZSA9PSAxKQotICAgICAgICAgIHJldHVybiAiTG9h
ZGluZyI7CisgICAgICAgICAgcmV0dXJuICJPcGVuIjsKICAgICAgIGVsc2UgaWYgKHJlcS5yZWFk
eVN0YXRlID09IDIpCi0gICAgICAgICAgcmV0dXJuICJMb2FkZWQiOworICAgICAgICAgIHJldHVy
biAiU2VudCI7CiAgICAgICBlbHNlIGlmIChyZXEucmVhZHlTdGF0ZSA9PSAzKQotICAgICAgICAg
IHJldHVybiAiSW50ZXJhY3RpdmUiOworICAgICAgICAgIHJldHVybiAiUmVjZWl2aW5nIjsKICAg
ICAgIGVsc2UgaWYgKHJlcS5yZWFkeVN0YXRlID09IDQpCi0gICAgICAgICAgcmV0dXJuICJDb21w
bGV0ZWQiOworICAgICAgICAgIHJldHVybiAiTG9hZGVkIjsKICAgICAgIGVsc2UKICAgICAgICAg
cmV0dXJuICI/Pz8iOwogICAgIH0KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0
cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLmh0bWwJ
KHJldmlzaW9uIDE2Mjc1KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC96ZXJvLWxlbmd0aC1yZXNwb25zZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zNCw3ICszNCw3
IEBACiAgICAgICAgIAogICAgICAgICBsb2coImFmdGVyIGNyZWF0aW9uOiAiICsgc3RhdGVOYW1l
KHJlcS5yZWFkeVN0YXRlKSk7CiAgICAgICAgIAotICAgICAgICBsb2coIlJlc3BvbnNlVGV4dDog
IiArIHByZXR0eVByaW50VGV4dChyZXEucmVzcG9uc2VUZXh0KSk7CisgICAgICAgIGR1bXBSZXNw
b25zZSgpOwogCiAgICAgICAgIGlmIChhc3luYykKICAgICAgICAgICAgIHJlcS5vbnJlYWR5c3Rh
dGVjaGFuZ2UgPSBwcm9jZXNzU3RhdGVDaGFuZ2U7CkBAIC00Myw4ICs0MywxNCBAQAogCiAgICAg
ICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwsIGFzeW5jKTsKICAgICAgICAgbG9nKCJhZnRlciBvcGVu
KCk6ICIgKyBzdGF0ZU5hbWUocmVxLnJlYWR5U3RhdGUpKTsKLSAgICAgICAgcmVxLm92ZXJyaWRl
TWltZVR5cGUoJ3RleHQveG1sJyk7CisgICAgICAgIGR1bXBSZXNwb25zZSgpOworICAgICAgICAK
KyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlcS5vdmVycmlkZU1pbWVUeXBlKCd0ZXh0L3ht
bCcpOworICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICB9CiAgICAgICAgIGxvZygiYWZ0
ZXIgb3ZlcnJpZGVNaW1lVHlwZSgpOiAiICsgc3RhdGVOYW1lKHJlcS5yZWFkeVN0YXRlKSk7CisK
ICAgICAgICAgcmVxLnNlbmQobnVsbCk7CiAgICAgICAgIGxvZygiYWZ0ZXIgc2VuZCgpOiAiICsg
c3RhdGVOYW1lKHJlcS5yZWFkeVN0YXRlKSk7CiAKQEAgLTU4LDEzICs2NCwxMyBAQAogICAgICAg
aWYgKHJlcS5yZWFkeVN0YXRlID09IDApCiAgICAgICAgICAgcmV0dXJuICJVbmluaXRpYWxpemVk
IjsKICAgICAgIGVsc2UgaWYgKHJlcS5yZWFkeVN0YXRlID09IDEpCi0gICAgICAgICAgcmV0dXJu
ICJMb2FkaW5nIjsKKyAgICAgICAgICByZXR1cm4gIk9wZW4iOwogICAgICAgZWxzZSBpZiAocmVx
LnJlYWR5U3RhdGUgPT0gMikKLSAgICAgICAgICByZXR1cm4gIkxvYWRlZCI7CisgICAgICAgICAg
cmV0dXJuICJTZW50IjsKICAgICAgIGVsc2UgaWYgKHJlcS5yZWFkeVN0YXRlID09IDMpCi0gICAg
ICAgICAgcmV0dXJuICJJbnRlcmFjdGl2ZSI7CisgICAgICAgICAgcmV0dXJuICJSZWNlaXZpbmci
OwogICAgICAgZWxzZSBpZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkKLSAgICAgICAgICByZXR1cm4g
IkNvbXBsZXRlZCI7CisgICAgICAgICAgcmV0dXJuICJMb2FkZWQiOwogICAgICAgZWxzZQogICAg
ICAgICByZXR1cm4gIj8/PyI7CiAgICAgfQpJbmRleDogV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Mjc1KQorKysgV2ViQ29yZS9D
aGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNSBAQAorMjAwNi0wOS0wOSAgQWxl
eGV5IFByb3NrdXJ5YWtvdiAgPGFwQG55cG9wLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBodHRwOi8vYnVnemlsbGEub3BlbmRhcndpbi5vcmcv
c2hvd19idWcuY2dpP2lkPTQ4NzIKKyAgICAgICAgWE1MSHR0cFJlcXVlc3QgZmFpbHMgdG8gdGhy
b3cgYW4gZXhjZXB0aW9uIHdoZW4gdGhlcmUgaXMgYSBzZWN1cml0eSB2aW9sYXRpb24KKyAgICAg
ICAgKG1pc21hdGNoaW5nIGRvbWFpbnMpCisKKyAgICAgICAgUmFpc2UgYW4gZXhjZXB0aW9uIGlm
IHRoZXJlIGlzIGEgc2VjdXJpdHkgdmlvbGF0aW9uLCBhbmQgYWxzbyBpbiBjYXNlcyByZXF1aXJl
ZCBieQorICAgICAgICB0aGUgY3VycmVudCBkcmFmdCBvZiBYSFIgc3BlY2lmaWNhdGlvbi4KKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwOgorICAgICAgICAoS0pT
OjpKU1hNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlcnR5KTogUmFpc2UgYW4gZXhjZXB0aW9u
IGlmIGEgRE9NIG1ldGhvZCByZXBvcnRzIG9uZS4KKyAgICAgICAgKEtKUzo6SlNYTUxIdHRwUmVx
dWVzdFByb3RvRnVuYzo6Y2FsbEFzRnVuY3Rpb24pOiBSYWlzZSBhbiBleGNlcHRpb24gaWYgYSBE
T00gbWV0aG9kCisgICAgICAgIHJlcG9ydHMgb25lLCBhbmQgYWxzbyBpZiB0aGVyZSB3ZXJlIHRv
byBmZXcgYXJndW1lbnRzIHBhc3NlZC4gCisKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNfYmlu
ZGluZy5jcHA6CisgICAgICAgIChLSlM6OnNldERPTUV4Y2VwdGlvbik6IEFkZGVkIHN1cHBvcnQg
Zm9yIGN1c3RvbSBYSFIgZXhjZXB0aW9ucy4KKworICAgICAgICAqIHhtbC94bWxodHRwcmVxdWVz
dC5oOiBDaGFuZ2VkIHN0YXRlIG5hbWVzIHRvIG1hdGNoIHRoZSBjdXJyZW50IHNwZWMuIERlZmlu
ZWQgYW4KKyAgICAgICAgZXhjZXB0aW9uIGNvZGUgcmFuZ2UgZm9yIFhIUiBleGNlcHRpb25zLgor
CisgICAgICAgICogeG1sL3htbGh0dHByZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0OjpvcGVuKTogUmVtb3ZlZCBhIGNoZWNrIGZvciBtX2Fib3J0ZWQgdGhhdCBj
b3VsZCBuZXZlciBzdWNjZWVkLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIp
OgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1cyk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzVGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6cHJvY2Vzc1N5bmNMb2FkUmVzdWx0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6cmVjZWl2ZWRBbGxEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0OjpyZWNlaXZlZERhdGEpOgorCiAyMDA2LTA5LTA4ICBEYXJpbiBB
ZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBUaW0gSC4KSW5k
ZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2aXNpb24gMTYy
NzUpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OCw2ICs4OCw4IEBAIGJvb2wgSlNYTUxIdHRwUmVxdWVzdDo6Z2V0T3duUHJv
cGVydHlTbG8KIAogSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQcm9wZXJ0eShF
eGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKKyAgRXhjZXB0aW9uQ29kZSBlYyA9
IDA7CisgIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgUmVhZHlTdGF0ZToKICAgICByZXR1
cm4ganNOdW1iZXIobV9pbXBsLT5nZXRSZWFkeVN0YXRlKCkpOwpAQCAtOTgsMTEgKzEwMCwxNSBA
QCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlCiAgICAgICByZXR1cm4g
dG9KUyhleGVjLCByZXNwb25zZVhNTCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwogICBjYXNlIFN0
YXR1czogewotICAgIGludCBzdGF0dXMgPSBtX2ltcGwtPmdldFN0YXR1cygpOwotICAgIHJldHVy
biBzdGF0dXMgPiAwID8ganNOdW1iZXIoc3RhdHVzKSA6IGpzVW5kZWZpbmVkKCk7CisgICAgSlNW
YWx1ZSogcmVzdWx0ID0ganNOdW1iZXIobV9pbXBsLT5nZXRTdGF0dXMoZWMpKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKyAgY2FzZSBT
dGF0dXNUZXh0OiB7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNTdHJpbmcobV9pbXBsLT5nZXRT
dGF0dXNUZXh0KGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKKyAgICByZXR1
cm4gcmVzdWx0OwogICB9Ci0gIGNhc2UgU3RhdHVzVGV4dDoKLSAgICByZXR1cm4ganNTdHJpbmdP
clVuZGVmaW5lZChtX2ltcGwtPmdldFN0YXR1c1RleHQoKSk7CiAgIGNhc2UgT25yZWFkeXN0YXRl
Y2hhbmdlOgogICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0ZW5lciA9IHN0
YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5vblJlYWR5U3Rh
dGVDaGFuZ2VMaXN0ZW5lcigpKSkKICAgICAgIGlmIChKU09iamVjdCogbGlzdGVuZXJPYmogPSBs
aXN0ZW5lci0+bGlzdGVuZXJPYmooKSkKQEAgLTE3MSw2ICsxNzcsOCBAQCBKU1ZhbHVlKiBKU1hN
TEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsCiAKICAgSlNYTUxIdHRwUmVxdWVzdCAqcmVxdWVz
dCA9IHN0YXRpY19jYXN0PEpTWE1MSHR0cFJlcXVlc3QgKj4odGhpc09iaik7CiAKKyAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CisKICAgc3dpdGNoIChpZCkgewogICBjYXNlIEpTWE1MSHR0cFJlcXVl
c3Q6OkFib3J0OgogICAgIHJlcXVlc3QtPm1faW1wbC0+YWJvcnQoKTsKQEAgLTE3OCwxMyArMTg2
LDEzIEBAIEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGwKICAgY2FzZSBK
U1hNTEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNwb25zZUhlYWRlcnM6CiAgICAgcmV0dXJuIGpzU3Ry
aW5nT3JVbmRlZmluZWQocmVxdWVzdC0+bV9pbXBsLT5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSk7
CiAgIGNhc2UgSlNYTUxIdHRwUmVxdWVzdDo6R2V0UmVzcG9uc2VIZWFkZXI6Ci0gICAgaWYgKGFy
Z3Muc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBpZiAoYXJn
cy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBTeW50YXhFcnJv
ciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAgICAgcmV0dXJuIGpzU3RyaW5nT3JVbmRlZmlu
ZWQocmVxdWVzdC0+bV9pbXBsLT5nZXRSZXNwb25zZUhlYWRlcihhcmdzWzBdLT50b1N0cmluZyhl
eGVjKSkpOwogICBjYXNlIEpTWE1MSHR0cFJlcXVlc3Q6Ok9wZW46CiAgICAgewotICAgICAgaWYg
KGFyZ3Muc2l6ZSgpIDwgMiB8fCBhcmdzLnNpemUoKSA+IDUpCi0gICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOworICAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIHRo
cm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOwogICAg
IAogICAgICAgU3RyaW5nIG1ldGhvZCA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpOwogICAgICAg
S1VSTCB1cmwgPSBLVVJMKFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmZyYW1lKCktPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKERlcHJlY2F0ZWRTdHJpbmcoYXJnc1sxXS0+dG9TdHJpbmco
ZXhlYykpKSk7CkBAIC0yMDEsMTggKzIwOSwxNiBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0
UHJvdG9GdW5jOjpjYWxsCiAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gNSkKICAgICAgICAgcGFz
c3dvcmQgPSBhcmdzWzRdLT50b1N0cmluZyhleGVjKTsKIAotICAgICAgcmVxdWVzdC0+bV9pbXBs
LT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwgcGFzc3dvcmQpOworICAgICAgcmVxdWVz
dC0+bV9pbXBsLT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwgcGFzc3dvcmQsIGVjKTsK
KyAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgIH0KICAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpTZW5kOgogICAgIHsKLSAg
ICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCi0gICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwot
CiAgICAgICBTdHJpbmcgYm9keTsKIAotICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49IDEpIHsKKyAg
ICAgIGlmIChhcmdzLnNpemUoKSA9PSAxKSB7CiAgICAgICAgIGlmIChhcmdzWzBdLT50b09iamVj
dChleGVjKS0+aW5oZXJpdHMoJkpTRG9jdW1lbnQ6OmluZm8pKSB7CiAgICAgICAgICAgRG9jdW1l
bnQgKmRvYyA9IHN0YXRpY19jYXN0PERvY3VtZW50ICo+KHN0YXRpY19jYXN0PEpTRG9jdW1lbnQg
Kj4oYXJnc1swXS0+dG9PYmplY3QoZXhlYykpLT5pbXBsKCkpOwogICAgICAgICAgIGJvZHkgPSBk
b2MtPnRvU3RyaW5nKCkuZGVwcmVjYXRlZFN0cmluZygpOwpAQCAtMjI1LDE4ICsyMzEsMjAgQEAg
SlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdFByb3RvRnVuYzo6Y2FsbAogICAgICAgICB9CiAgICAg
ICB9CiAKLSAgICAgIHJlcXVlc3QtPm1faW1wbC0+c2VuZChib2R5KTsKKyAgICAgIHJlcXVlc3Qt
Pm1faW1wbC0+c2VuZChib2R5LCBlYyk7CisgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMp
OwogCiAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICB9CiAgIGNhc2UgSlNYTUxIdHRw
UmVxdWVzdDo6U2V0UmVxdWVzdEhlYWRlcjoKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMikKLSAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwotICAgIHJlcXVlc3QtPm1faW1wbC0+c2V0UmVxdWVz
dEhlYWRlcihhcmdzWzBdLT50b1N0cmluZyhleGVjKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYykp
OworICAgIGlmIChhcmdzLnNpemUoKSA8IDIpCisgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVj
LCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CisgICAgcmVxdWVzdC0+bV9p
bXBsLT5zZXRSZXF1ZXN0SGVhZGVyKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpLCBhcmdzWzFdLT50
b1N0cmluZyhleGVjKSwgZWMpOworICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgIGNhc2UgSlNYTUxIdHRwUmVxdWVzdDo6T3ZlcnJpZGVN
SU1FVHlwZToKLSAgICBpZiAoYXJncy5zaXplKCkgIT0gMSkKLSAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICByZXR1cm4gdGhyb3dFcnJv
cihleGVjLCBTeW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAgICAgcmVxdWVz
dC0+bV9pbXBsLT5vdmVycmlkZU1JTUVUeXBlKGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMpKTsKICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgfQpJbmRleDogV2ViQ29yZS9iaW5kaW5ncy9qcy9r
anNfYmluZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmlu
ZGluZy5jcHAJKHJldmlzaW9uIDE2Mjc1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfYmlu
ZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiUmFuZ2UuaCIKKyNp
bmNsdWRlICJ4bWxodHRwcmVxdWVzdC5oIgogI2luY2x1ZGUgIlhQYXRoRXZhbHVhdG9yLmgiCiAj
aW5jbHVkZSAia2pzX2RvbS5oIgogI2luY2x1ZGUgImtqc193aW5kb3cuaCIKQEAgLTMxMCw2ICsz
MTEsMTAgQEAgc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBldmVudEV4Y2VwdGlvbgogICAgICJV
TlNQRUNJRklFRF9FVkVOVF9UWVBFX0VSUiIKIH07CiAKK3N0YXRpYyBjb25zdCBjaGFyICogY29u
c3QgeG1sSHR0cFJlcXVlc3RFeGNlcHRpb25OYW1lc1tdID0geworICAgICJQZXJtaXNzaW9uIGRl
bmllZCIKK307CisKICNpZmRlZiBYUEFUSF9TVVBQT1JUCiBzdGF0aWMgY29uc3QgY2hhciAqIGNv
bnN0IHhwYXRoRXhjZXB0aW9uTmFtZXNbXSA9IHsKICAgICAiSU5WQUxJRF9FWFBSRVNTSU9OX0VS
UiIsCkBAIC0zNDEsNiArMzQ2LDE0IEBAIHZvaWQgc2V0RE9NRXhjZXB0aW9uKEV4ZWNTdGF0ZSog
ZXhlYywgRXgKICAgICBuYW1lSW5kZXggPSBjb2RlOwogICAgIG5hbWVUYWJsZSA9IGV2ZW50RXhj
ZXB0aW9uTmFtZXM7CiAgICAgbmFtZVRhYmxlU2l6ZSA9IHNpemVvZihldmVudEV4Y2VwdGlvbk5h
bWVzKSAvIHNpemVvZihldmVudEV4Y2VwdGlvbk5hbWVzWzBdKTsKKyAgfSBlbHNlIGlmIChjb2Rl
ID49IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uT2Zmc2V0ICYmIGNvZGUgPD0gWE1MSHR0cFJlcXVl
c3RFeGNlcHRpb25NYXgpIHsKKyAgICBjb2RlIC09IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uT2Zm
c2V0OworICAgIG5hbWVJbmRleCA9IGNvZGU7CisgICAgbmFtZVRhYmxlID0geG1sSHR0cFJlcXVl
c3RFeGNlcHRpb25OYW1lczsKKyAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKHhtbEh0dHBSZXF1
ZXN0RXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHhtbEh0dHBSZXF1ZXN0RXhjZXB0aW9uTmFtZXNb
MF0pOworICAgIHRocm93RXJyb3IoZXhlYywgR2VuZXJhbEVycm9yLCBuYW1lSW5kZXggPCBuYW1l
VGFibGVTaXplID8gbmFtZVRhYmxlW25hbWVJbmRleF0gOiAwKTsKKyAgICAKKyAgICByZXR1cm47
CiAjaWZkZWYgWFBBVEhfU1VQUE9SVAogICB9IGVsc2UgaWYgKGNvZGUgPj0gWFBhdGhFeGNlcHRp
b25PZmZzZXQgJiYgY29kZSA8PSBYUGF0aEV4Y2VwdGlvbk1heCkgewogICAgIHR5cGUgPSAiRE9N
IFhQYXRoIjsKSW5kZXg6IFdlYkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJDb3JlL3htbC94bWxodHRwcmVxdWVzdC5jcHAJKHJldmlzaW9uIDE2Mjc1KQorKysg
V2ViQ29yZS94bWwveG1saHR0cHJlcXVlc3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsy
OCw3IEBACiAjaW5jbHVkZSAiRXZlbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJGb3JtRGF0YS5oIgogI2luY2x1ZGUgIkhUTUxEb2N1bWVudC5oIgogI2luY2x1ZGUgIkxv
YWRlckZ1bmN0aW9ucy5oIgpAQCAtMTQ4LDcgKzE0OSw3IEBAIFN0cmluZyBYTUxIdHRwUmVxdWVz
dDo6Z2V0UmVzcG9uc2VUZXh0KCkKIAogRG9jdW1lbnQqIFhNTEh0dHBSZXF1ZXN0OjpnZXRSZXNw
b25zZVhNTCgpIGNvbnN0CiB7Ci0gICAgaWYgKG1fc3RhdGUgIT0gQ29tcGxldGVkKQorICAgIGlm
IChtX3N0YXRlICE9IExvYWRlZCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBpZiAoIW1fY3Jl
YXRlZERvY3VtZW50KSB7CkBAIC0yMTcsNyArMjE4LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6
Y2FsbFJlYWR5U3RhdGVDaGFuZwogICAgIGlmIChtX2RvYyAmJiBtX2RvYy0+ZnJhbWUoKSAmJiBt
X29uUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKQogICAgICAgICBtX29uUmVhZHlTdGF0ZUNoYW5n
ZUxpc3RlbmVyLT5oYW5kbGVFdmVudChuZXcgRXZlbnQocmVhZHlzdGF0ZWNoYW5nZUV2ZW50LCB0
cnVlLCB0cnVlKSwgdHJ1ZSk7CiAgICAgCi0gICAgaWYgKG1fZG9jICYmIG1fZG9jLT5mcmFtZSgp
ICYmIG1fc3RhdGUgPT0gQ29tcGxldGVkICYmIG1fb25Mb2FkTGlzdGVuZXIpCisgICAgaWYgKG1f
ZG9jICYmIG1fZG9jLT5mcmFtZSgpICYmIG1fc3RhdGUgPT0gTG9hZGVkICYmIG1fb25Mb2FkTGlz
dGVuZXIpCiAgICAgICAgIG1fb25Mb2FkTGlzdGVuZXItPmhhbmRsZUV2ZW50KG5ldyBFdmVudChs
b2FkRXZlbnQsIHRydWUsIHRydWUpLCB0cnVlKTsKIH0KIApAQCAtMjM4LDcgKzIzOSw3IEBAIGJv
b2wgWE1MSHR0cFJlcXVlc3Q6OnVybE1hdGNoZXNEb2N1bWVudEQKICAgICByZXR1cm4gZmFsc2U7
CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNv
bnN0IEtVUkwmIHVybCwgYm9vbCBhc3luYywgY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJp
bmcmIHBhc3N3b3JkKQordm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIG1l
dGhvZCwgY29uc3QgS1VSTCYgdXJsLCBib29sIGFzeW5jLCBjb25zdCBTdHJpbmcmIHVzZXIsIGNv
bnN0IFN0cmluZyYgcGFzc3dvcmQsIEV4Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGFib3J0KCk7
CiAgICAgbV9hYm9ydGVkID0gZmFsc2U7CkBAIC0yNTIsMTEgKzI1MywxMCBAQCB2b2lkIFhNTEh0
dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYgCiAKICAgICBjaGFuZ2VTdGF0ZShVbmluaXRp
YWxpemVkKTsKIAotICAgIGlmIChtX2Fib3J0ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
ICghdXJsTWF0Y2hlc0RvY3VtZW50RG9tYWluKHVybCkpCisgICAgaWYgKCF1cmxNYXRjaGVzRG9j
dW1lbnREb21haW4odXJsKSkgeworICAgICAgICBlYyA9IFBFUk1JU1NJT05fREVOSUVEOwogICAg
ICAgICByZXR1cm47CisgICAgfQogCiAgICAgbV91cmwgPSB1cmw7CiAKQEAgLTI3OCwxOCArMjc4
LDIwIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiAKIAogICAgIG1f
YXN5bmMgPSBhc3luYzsKIAotICAgIGNoYW5nZVN0YXRlKExvYWRpbmcpOworICAgIGNoYW5nZVN0
YXRlKE9wZW4pOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZW5kKGNvbnN0IFN0cmluZyYg
Ym9keSkKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3QgU3RyaW5nJiBib2R5LCBFeGNl
cHRpb25Db2RlJiBlYykKIHsKICAgICBpZiAoIW1fZG9jKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBpZiAobV9zdGF0ZSAhPSBMb2FkaW5nKQorICAgIGlmIChtX3N0YXRlICE9IE9wZW4pIHsKKyAg
ICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAgICAgcmV0dXJuOworICAgIH0KICAg
Ci0gICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGFib3J0IGluc3RlYWQgaWYgd2UgYWxyZWFkeSBo
YXZlIGEgbV9qb2IgZ29pbmc/CisgICAgLy8gRklYTUU6IFNob3VsZCB0aGlzIGFib3J0IG9yIHJh
aXNlIGFuIGV4Y2VwdGlvbiBpbnN0ZWFkIGlmIHdlIGFscmVhZHkgaGF2ZSBhIG1fam9iIGdvaW5n
PwogICAgIGlmIChtX2pvYikKICAgICAgICAgcmV0dXJuOwogCkBAIC0yOTgsOSArMzAwLDExIEBA
IHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3QgU3RyaW5nJiAKICAgICBpZiAoIWJvZHku
aXNOdWxsKCkgJiYgbV9tZXRob2QgIT0gIkdFVCIgJiYgbV9tZXRob2QgIT0gIkhFQUQiICYmICht
X3VybC5wcm90b2NvbCgpLmxvd2VyKCkgPT0gImh0dHAiIHx8IG1fdXJsLnByb3RvY29sKCkubG93
ZXIoKSA9PSAiaHR0cHMiKSkgewogICAgICAgICBTdHJpbmcgY29udGVudFR5cGUgPSBnZXRSZXF1
ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUiKTsKICAgICAgICAgU3RyaW5nIGNoYXJzZXQ7Ci0gICAg
ICAgIGlmIChjb250ZW50VHlwZS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBzZXRSZXF1ZXN0SGVh
ZGVyKCJDb250ZW50LVR5cGUiLCAiYXBwbGljYXRpb24veG1sIik7Ci0gICAgICAgIGVsc2UKKyAg
ICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgICAgICAgICAgICBzZXRSZXF1ZXN0SGVhZGVyKCJDb250ZW50LVR5cGUi
LCAiYXBwbGljYXRpb24veG1sIiwgZWMpOworICAgICAgICAgICAgQVNTRVJUKGVjID09IDApOwor
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIGNoYXJzZXQgPSBnZXRDaGFyc2V0KGNvbnRlbnRU
eXBlKTsKICAgICAgIAogICAgICAgICBpZiAoY2hhcnNldC5pc0VtcHR5KCkpCkBAIC0zNzUsOCAr
Mzc5LDEzIEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6Om92ZXJyaWRlTUlNRVR5cGUoY28KICAgICBt
X21pbWVUeXBlT3ZlcnJpZGUgPSBvdmVycmlkZTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c2V0UmVxdWVzdEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFt
ZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKG1f
c3RhdGUgIT0gT3BlbikgeworICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOworICAgICAg
ICByZXR1cm47CisgICAgfQorCiAgICAgaWYgKG1fcmVxdWVzdEhlYWRlcnMubGVuZ3RoKCkgPiAw
KQogICAgICAgICBtX3JlcXVlc3RIZWFkZXJzICs9ICJcclxuIjsKICAgICBtX3JlcXVlc3RIZWFk
ZXJzICs9IG5hbWUuZGVwcmVjYXRlZFN0cmluZygpOwpAQCAtNDM3LDM3ICs0NDYsNTEgQEAgYm9v
bCBYTUxIdHRwUmVxdWVzdDo6cmVzcG9uc2VJc1hNTCgpIGNvbgogICAgIHJldHVybiBET01JbXBs
ZW1lbnRhdGlvbjo6aXNYTUxNSU1FVHlwZShtaW1lVHlwZSk7CiB9CiAKLWludCBYTUxIdHRwUmVx
dWVzdDo6Z2V0U3RhdHVzKCkgY29uc3QKK2ludCBYTUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzKEV4
Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmIChtX3Jlc3BvbnNlSGVhZGVycy5pc0Vt
cHR5KCkpCi0gICAgICAgIHJldHVybiAtMTsKLSAgCisgICAgaWYgKG1fc3RhdGUgPT0gVW5pbml0
aWFsaXplZCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgaWYgKG1fcmVzcG9uc2VIZWFk
ZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9zdGF0ZSAhPSBSZWNlaXZpbmcgJiYgbV9z
dGF0ZSAhPSBMb2FkZWQpCisgICAgICAgICAgICAvLyBzdGF0dXMgTVVTVCBiZSBhdmFpbGFibGUg
aW4gdGhlc2Ugc3RhdGVzLCBidXQgd2UgZG9uJ3QgZ2V0IGFueSBoZWFkZXJzIGZyb20gbm9uLUhU
VFAgcmVxdWVzdHMKKyAgICAgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAgICAg
IHJldHVybiAwOworICAgIH0KKyAgICAKICAgICBpbnQgZW5kT2ZMaW5lID0gbV9yZXNwb25zZUhl
YWRlcnMuZmluZCgiXG4iKTsKICAgICBTdHJpbmcgZmlyc3RMaW5lID0gZW5kT2ZMaW5lID09IC0x
ID8gbV9yZXNwb25zZUhlYWRlcnMgOiBtX3Jlc3BvbnNlSGVhZGVycy5zdWJzdHJpbmcoMCwgZW5k
T2ZMaW5lKTsKICAgICBpbnQgY29kZVN0YXJ0ID0gZmlyc3RMaW5lLmZpbmQoIiAiKTsKICAgICBp
bnQgY29kZUVuZCA9IGZpcnN0TGluZS5maW5kKCIgIiwgY29kZVN0YXJ0ICsgMSk7Ci0gICAgaWYg
KGNvZGVTdGFydCA9PSAtMSB8fCBjb2RlRW5kID09IC0xKQotICAgICAgICByZXR1cm4gLTE7Cisg
ICAgQVNTRVJUKGNvZGVTdGFydCAhPSAtMSk7CisgICAgQVNTRVJUKGNvZGVFbmQgIT0gLTEpOwog
ICAKICAgICBTdHJpbmcgbnVtYmVyID0gZmlyc3RMaW5lLnN1YnN0cmluZyhjb2RlU3RhcnQgKyAx
LCBjb2RlRW5kIC0gKGNvZGVTdGFydCArIDEpKTsKICAgICBib29sIG9rID0gZmFsc2U7CiAgICAg
aW50IGNvZGUgPSBudW1iZXIudG9JbnQoJm9rKTsKLSAgICBpZiAoIW9rKQotICAgICAgICByZXR1
cm4gLTE7CisgICAgQVNTRVJUKG9rKTsKKwogICAgIHJldHVybiBjb2RlOwogfQogCi1TdHJpbmcg
WE1MSHR0cFJlcXVlc3Q6OmdldFN0YXR1c1RleHQoKSBjb25zdAorU3RyaW5nIFhNTEh0dHBSZXF1
ZXN0OjpnZXRTdGF0dXNUZXh0KEV4Y2VwdGlvbkNvZGUmIGVjKSBjb25zdAogewotICAgIGlmICht
X3Jlc3BvbnNlSGVhZGVycy5pc0VtcHR5KCkpCisgICAgaWYgKG1fc3RhdGUgPT0gVW5pbml0aWFs
aXplZCkKKyAgICAgICAgcmV0dXJuICIiOworICAgIAorICAgIGlmIChtX3Jlc3BvbnNlSGVhZGVy
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgaWYgKG1fc3RhdGUgIT0gUmVjZWl2aW5nICYmIG1fc3Rh
dGUgIT0gTG9hZGVkKQorICAgICAgICAgICAgLy8gc3RhdHVzVGV4dCBNVVNUIGJlIGF2YWlsYWJs
ZSBpbiB0aGVzZSBzdGF0ZXMsIGJ1dCB3ZSBkb24ndCBnZXQgYW55IGhlYWRlcnMgZnJvbSBub24t
SFRUUCByZXF1ZXN0cworICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworICAgIH0KICAgCiAgICAgaW50IGVuZE9mTGluZSA9IG1fcmVz
cG9uc2VIZWFkZXJzLmZpbmQoIlxuIik7CiAgICAgU3RyaW5nIGZpcnN0TGluZSA9IGVuZE9mTGlu
ZSA9PSAtMSA/IG1fcmVzcG9uc2VIZWFkZXJzIDogbV9yZXNwb25zZUhlYWRlcnMuc3Vic3RyaW5n
KDAsIGVuZE9mTGluZSk7CiAgICAgaW50IGNvZGVTdGFydCA9IGZpcnN0TGluZS5maW5kKCIgIik7
CiAgICAgaW50IGNvZGVFbmQgPSBmaXJzdExpbmUuZmluZCgiICIsIGNvZGVTdGFydCArIDEpOwot
ICAgIGlmIChjb2RlU3RhcnQgPT0gLTEgfHwgY29kZUVuZCA9PSAtMSkKLSAgICAgICAgcmV0dXJu
IFN0cmluZygpOworICAgIEFTU0VSVChjb2RlU3RhcnQgIT0gLTEpOworICAgIEFTU0VSVChjb2Rl
RW5kICE9IC0xKTsKICAgCiAgICAgcmV0dXJuIGZpcnN0TGluZS5zdWJzdHJpbmcoY29kZUVuZCAr
IDEsIGVuZE9mTGluZSAtIChjb2RlRW5kICsgMSkpLmRlcHJlY2F0ZWRTdHJpbmcoKS5zdHJpcFdo
aXRlU3BhY2UoKTsKIH0KQEAgLTQ4MCw3ICs1MDMsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0Ojpw
cm9jZXNzU3luY0xvYWRSZXN1CiAgICAgfQogCiAgICAgbV9yZXNwb25zZUhlYWRlcnMgPSBoZWFk
ZXJzOwotICAgIGNoYW5nZVN0YXRlKExvYWRlZCk7CisgICAgY2hhbmdlU3RhdGUoU2VudCk7CiAg
ICAgaWYgKG1fYWJvcnRlZCkKICAgICAgICAgcmV0dXJuOwogCkBAIC00OTksOCArNTIyLDggQEAg
dm9pZCBYTUxIdHRwUmVxdWVzdDo6cmVjZWl2ZWRBbGxEYXRhKFJlcwogICAgIGlmIChtX3Jlc3Bv
bnNlSGVhZGVycy5pc0VtcHR5KCkgJiYgbV9qb2IpCiAgICAgICAgIG1fcmVzcG9uc2VIZWFkZXJz
ID0gbV9qb2ItPnF1ZXJ5TWV0YURhdGEoIkhUVFAtSGVhZGVycyIpOwogCi0gICAgaWYgKG1fc3Rh
dGUgPCBMb2FkZWQpCi0gICAgICAgIGNoYW5nZVN0YXRlKExvYWRlZCk7CisgICAgaWYgKG1fc3Rh
dGUgPCBTZW50KQorICAgICAgICBjaGFuZ2VTdGF0ZShTZW50KTsKIAogICAgIGlmIChtX2RlY29k
ZXIpCiAgICAgICAgIG1fcmVzcG9uc2UgKz0gbV9kZWNvZGVyLT5mbHVzaCgpOwpAQCAtNTA4LDcg
KzUzMSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OnJlY2VpdmVkQWxsRGF0YShSZXMKICAgICBi
b29sIGhhZEpvYiA9IG1fam9iOwogICAgIG1fam9iID0gMDsKIAotICAgIGNoYW5nZVN0YXRlKENv
bXBsZXRlZCk7CisgICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKICAgICBtX2RlY29kZXIgPSAwOwog
CiAgICAgaWYgKGhhZEpvYikgewpAQCAtNTMxLDggKzU1NCw4IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OnJlY2VpdmVkRGF0YShSZXNvdXIKICAgICBpZiAobV9yZXNwb25zZUhlYWRlcnMuaXNFbXB0
eSgpICYmIG1fam9iKQogICAgICAgICBtX3Jlc3BvbnNlSGVhZGVycyA9IG1fam9iLT5xdWVyeU1l
dGFEYXRhKCJIVFRQLUhlYWRlcnMiKTsKIAotICAgIGlmIChtX3N0YXRlIDwgTG9hZGVkKQotICAg
ICAgICBjaGFuZ2VTdGF0ZShMb2FkZWQpOworICAgIGlmIChtX3N0YXRlIDwgU2VudCkKKyAgICAg
ICAgY2hhbmdlU3RhdGUoU2VudCk7CiAgIAogICAgIGlmICghbV9kZWNvZGVyKSB7CiAgICAgICAg
IG1fZW5jb2RpbmcgPSBnZXRDaGFyc2V0KG1fbWltZVR5cGVPdmVycmlkZSk7CkBAIC01NjAsOCAr
NTgzLDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6cmVjZWl2ZWREYXRhKFJlc291cgogICAgIG1f
cmVzcG9uc2UgKz0gZGVjb2RlZDsKIAogICAgIGlmICghbV9hYm9ydGVkKSB7Ci0gICAgICAgIGlm
IChtX3N0YXRlICE9IEludGVyYWN0aXZlKQotICAgICAgICAgICAgY2hhbmdlU3RhdGUoSW50ZXJh
Y3RpdmUpOworICAgICAgICBpZiAobV9zdGF0ZSAhPSBSZWNlaXZpbmcpCisgICAgICAgICAgICBj
aGFuZ2VTdGF0ZShSZWNlaXZpbmcpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICAvLyBGaXJl
Zm94IGNhbGxzIHJlYWR5U3RhdGVDaGFuZ2VkIGV2ZXJ5IHRpbWUgaXQgcmVjZWl2ZXMgZGF0YSwg
NDQ0OTQ0MgogICAgICAgICAgICAgY2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpOwpJbmRl
eDogV2ViQ29yZS94bWwveG1saHR0cHJlcXVlc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3ht
bC94bWxodHRwcmVxdWVzdC5oCShyZXZpc2lvbiAxNjI3NSkKKysrIFdlYkNvcmUveG1sL3htbGh0
dHByZXF1ZXN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEzICszNCwxOSBAQCBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAgIGNsYXNzIEV2ZW50TGlzdGVuZXI7CiAgIGNsYXNzIFN0cmluZzsKIAorICB0
eXBlZGVmIGludCBFeGNlcHRpb25Db2RlOworCisgIGNvbnN0IGludCBYTUxIdHRwUmVxdWVzdEV4
Y2VwdGlvbk9mZnNldCA9IDUwMDsKKyAgY29uc3QgaW50IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9u
TWF4ID0gNTk5OworICBlbnVtIFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uQ29kZSB7IFBFUk1JU1NJ
T05fREVOSUVEID0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb25PZmZzZXQgfTsKKwogICAvLyB0aGVz
ZSBleGFjdCBudW1lcmljIHZhbHVlcyBhcmUgaW1wb3J0YW50IGJlY2F1c2UgSlMgZXhwZWN0cyB0
aGVtCiAgIGVudW0gWE1MSHR0cFJlcXVlc3RTdGF0ZSB7Ci0gICAgVW5pbml0aWFsaXplZCA9IDAs
ICAvLyBvcGVuKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCB5ZXQKLSAgICBMb2FkaW5nID0gMSwgICAg
ICAgIC8vIHNlbmQoKSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldAotICAgIExvYWRlZCA9IDIsICAg
ICAgICAgLy8gc2VuZCgpIGhhcyBiZWVuIGNhbGxlZCwgaGVhZGVycyBhbmQgc3RhdHVzIGFyZSBh
dmFpbGFibGUKLSAgICBJbnRlcmFjdGl2ZSA9IDMsICAgIC8vIERvd25sb2FkaW5nLCByZXNwb25z
ZVRleHQgaG9sZHMgdGhlIHBhcnRpYWwgZGF0YQotICAgIENvbXBsZXRlZCA9IDQgICAgICAgLy8g
RmluaXNoZWQgd2l0aCBhbGwgb3BlcmF0aW9ucworICAgIFVuaW5pdGlhbGl6ZWQgPSAwLCAgLy8g
VGhlIGluaXRpYWwgdmFsdWUuCisgICAgT3BlbiA9IDEsICAgICAgICAgICAvLyBUaGUgb3Blbigp
IG1ldGhvZCBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY2FsbGVkLgorICAgIFNlbnQgPSAyLCAgICAg
ICAgICAgLy8gVGhlIHVzZXIgYWdlbnQgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZCB0aGUgcmVxdWVz
dCwgYnV0IG5vIGRhdGEgaGFzIHlldCBiZWVuIHJlY2VpdmVkLgorICAgIFJlY2VpdmluZyA9IDMs
ICAgICAgLy8gSW1tZWRpYXRlbHkgYmVmb3JlIHJlY2VpdmluZyB0aGUgbWVzc2FnZSBib2R5IChp
ZiBhbnkpLiBBbGwgSFRUUCBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZC4KKyAgICBMb2FkZWQg
PSA0ICAgICAgICAgIC8vIFRoZSBkYXRhIHRyYW5zZmVyIGhhcyBiZWVuIGNvbXBsZXRlZC4KICAg
fTsKIAogICBjbGFzcyBYTUxIdHRwUmVxdWVzdCA6IHB1YmxpYyBTaGFyZWQ8WE1MSHR0cFJlcXVl
c3Q+LCBSZXNvdXJjZUxvYWRlckNsaWVudCB7CkBAIC01MSwxMyArNTcsMTMgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogICAgIHN0YXRpYyB2b2lkIGRldGFjaFJlcXVlc3RzKERvY3VtZW50Kik7CiAg
ICAgc3RhdGljIHZvaWQgY2FuY2VsUmVxdWVzdHMoRG9jdW1lbnQqKTsKIAotICAgIFN0cmluZyBn
ZXRTdGF0dXNUZXh0KCkgY29uc3Q7Ci0gICAgaW50IGdldFN0YXR1cygpIGNvbnN0OworICAgIFN0
cmluZyBnZXRTdGF0dXNUZXh0KEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKKyAgICBpbnQgZ2V0U3Rh
dHVzKEV4Y2VwdGlvbkNvZGUmKSBjb25zdDsKICAgICBYTUxIdHRwUmVxdWVzdFN0YXRlIGdldFJl
YWR5U3RhdGUoKSBjb25zdDsKLSAgICB2b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNv
bnN0IEtVUkwmIHVybCwgYm9vbCBhc3luYywgY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJp
bmcmIHBhc3N3b3JkKTsKLSAgICB2b2lkIHNlbmQoY29uc3QgU3RyaW5nJiBib2R5KTsKKyAgICB2
b2lkIG9wZW4oY29uc3QgU3RyaW5nJiBtZXRob2QsIGNvbnN0IEtVUkwmIHVybCwgYm9vbCBhc3lu
YywgY29uc3QgU3RyaW5nJiB1c2VyLCBjb25zdCBTdHJpbmcmIHBhc3N3b3JkLCBFeGNlcHRpb25D
b2RlJiBlYyk7CisgICAgdm9pZCBzZW5kKGNvbnN0IFN0cmluZyYgYm9keSwgRXhjZXB0aW9uQ29k
ZSYpOwogICAgIHZvaWQgYWJvcnQoKTsKLSAgICB2b2lkIHNldFJlcXVlc3RIZWFkZXIoY29uc3Qg
U3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcgJnZhbHVlKTsKKyAgICB2b2lkIHNldFJlcXVlc3RI
ZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcgJnZhbHVlLCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBvdmVycmlkZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgb3ZlcnJpZGUp
OwogICAgIFN0cmluZyBnZXRBbGxSZXNwb25zZUhlYWRlcnMoKSBjb25zdDsKICAgICBTdHJpbmcg
Z2V0UmVzcG9uc2VIZWFkZXIoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsK
</data>
<flag name="review"
          id="3372"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10501</attachid>
            <date>2006-09-11 10:45:50 -0700</date>
            <delta_ts>2006-09-23 00:54:24 -0700</delta_ts>
            <desc>proposed patch</desc>
            <filename>4872r2_patch.txt</filename>
            <type>text/plain</type>
            <size>32651</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE2Mjk4KQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMDYtMDktMTEgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBueXBvcC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgaHR0cDovL2J1Z3ppbGxhLm9wZW5kYXJ3aW4ub3JnL3Nob3dfYnVnLmNnaT9p
ZD00ODcyCisgICAgICAgIFhNTEh0dHBSZXF1ZXN0IGZhaWxzIHRvIHRocm93IGFuIGV4Y2VwdGlv
biB3aGVuIHRoZXJlIGlzIGEgc2VjdXJpdHkgdmlvbGF0aW9uCisgICAgICAgIChtaXNtYXRjaGlu
ZyBkb21haW5zKQorCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leGNlcHRp
b25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy94bWxodHRwcmVx
dWVzdC9leGNlcHRpb25zLmh0bWw6IEFkZGVkLgorCisgICAgICAgICogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9leHRyYS1wYXJhbWV0ZXJzLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAg
ICogaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leHRyYS1wYXJhbWV0ZXJzLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Bvc3QtZWNo
by5jZ2k6IEFkZGVkLgorICAgICAgICBUZXN0IHRoYXQgcGFzc2luZyB0b28gbWFueSBwYXJhbWV0
ZXJzIGlzIE9LIChGaXJlZm94IGJlaGF2aW9yOyBXaW5JRSByYWlzZXMgYW4gZXhjZXB0aW9uKS4K
KworICAgICAgICAqIGZhc3QvZG9tL3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQ6IFVw
ZGF0ZWQgcmVzdWx0cy4gCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3pl
cm8tbGVuZ3RoLXJlc3BvbnNlLWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBodHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLXN5bmMtZXhwZWN0ZWQudHh0OgorICAg
ICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2Utc3lu
Yy5odG1sOgorICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgt
cmVzcG9uc2UuaHRtbDoKKyAgICAgICAgVXBkYXRlZCByZXN1bHRzIGFuZCBjaGFuZ2VkIHN0YXRl
IG5hbWVzIHRvIG1hdGNoIHRoZSBjdXJyZW50IHNwZWMuCisKIDIwMDYtMDktMTEgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIC0gY29udmVydGVkIGEgdGVzdCB0byBw
bGFpbiB0ZXh0IChtYWtlcyBpdCBwbGF0Zm9ybSBpbmRlcGVuZGVudDsgZml4ZXMgYSBmYWlsdXJl
KQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20veG1saHR0cHJlcXVlc3QtZ2V0LWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS94bWxodHRwcmVxdWVzdC1n
ZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjI5OCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L3htbGh0dHByZXF1ZXN0LWdldC1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTE3LDkg
KzE3LDggQEAgcmVzcG9uc2VYTUwgc2VyaWFsaXplZAogZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkK
IHVuZGVmaW5lZAogc3RhdHVzCi11bmRlZmluZWQKKzAKIHN0YXR1c1RleHQKLXVuZGVmaW5lZAog
cmVhZHlTdGF0ZQogNAogRXZlbnQgaW5mb3JtYXRpb24KSW5kZXg6IExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvZXhjZXB0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leGNlcHRpb25zLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvZXhjZXB0aW9ucy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTYg
QEAKK1Rlc3QgdGhhdCBYTUxIdHRwUmVxdWVzdCByYWlzZXMgZXhjZXB0aW9ucyB3aGVuIGl0IHNo
b3VsZC4KKworbmV3IFhNTEh0dHBSZXF1ZXN0KCkKK1BBU1M6IHJlcS5zZXRSZXF1ZXN0SGVhZGVy
KCJGb28iLCAiYmFyIikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX1NUQVRFX0VSUjog
RE9NIEV4Y2VwdGlvbiAxMS4KK1BBU1M6IHJlcS5zZW5kKG51bGwpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTOiByZXEub3Bl
bigiR0VUIiwgImh0dHA6Ly93d3cuYXBwbGUuY29tLyIsIHRydWUpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogUGVybWlzc2lvbiBkZW5pZWQuCitvcGVuKCkKK1BBU1M6IHJlcS5zZXRSZXF1ZXN0SGVh
ZGVyKCkgdGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4K
K1BBU1M6IHJlcS5zZXRSZXF1ZXN0SGVhZGVyKCJGb28iKSB0aHJldyBleGNlcHRpb24gU3ludGF4
RXJyb3I6IE5vdCBlbm91Z2ggYXJndW1lbnRzLgorUEFTUzogcmVxLnN0YXR1cygpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEuCitQQVNT
OiByZXEuc3RhdHVzVGV4dCgpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9TVEFURV9F
UlI6IERPTSBFeGNlcHRpb24gMTEuCitzZW5kKCkKK1BBU1M6IHJlcS5zZW5kKG51bGwpIHRocmV3
IGV4Y2VwdGlvbiBFcnJvcjogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEuCitQ
QVNTOiByZXEuc2V0UmVxdWVzdEhlYWRlcigiRm9vIiwgImJhciIpIHRocmV3IGV4Y2VwdGlvbiBF
cnJvcjogSU5WQUxJRF9TVEFURV9FUlI6IERPTSBFeGNlcHRpb24gMTEuCitQQVNTOiByZXEuZ2V0
UmVzcG9uc2VIZWFkZXIoKSB0aHJldyBleGNlcHRpb24gU3ludGF4RXJyb3I6IE5vdCBlbm91Z2gg
YXJndW1lbnRzLgorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L2V4Y2VwdGlvbnMtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZXhjZXB0
aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJl
cXVlc3QvZXhjZXB0aW9ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy94bWxodHRwcmVxdWVzdC9leGNlcHRpb25zLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAg
KzEsODMgQEAKKzxodG1sPgorPGhlYWQ+Cis8dGl0bGU+VGVzdCBYTUxIdHRwUmVxdWVzdCBleGNl
cHRpb25zPC90aXRsZT4KKzxtZXRhIGh0dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0i
dGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgiPgorPGJvZHk+Cis8cD5UZXN0IHRoYXQgWE1MSHR0cFJl
cXVlc3QgcmFpc2VzIGV4Y2VwdGlvbnMgd2hlbiBpdCBzaG91bGQuPC9wPgorPHNjcmlwdD4KKwor
ICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKKworICAgIHZhciBjb25zb2xlX21lc3NhZ2VzID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgidWwiKTsKKyAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxk
KGNvbnNvbGVfbWVzc2FnZXMpOworICAgIAorICAgIGZ1bmN0aW9uIGxvZyhtZXNzYWdlKQorICAg
IHsKKyAgICAgICAgdmFyIGl0ZW0gPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaSIpOworICAg
ICAgICBpdGVtLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1lc3NhZ2UpKTsK
KyAgICAgICAgY29uc29sZV9tZXNzYWdlcy5hcHBlbmRDaGlsZChpdGVtKTsKKyAgICB9CisgICAg
CisgICAgZnVuY3Rpb24gc2hvdWxkVGhyb3coX2EsIF9lKSB7CisgICAgICAgIHZhciBleGNlcHRp
b247CisgICAgICAgIHZhciBfYXY7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBfYXYgPSBl
dmFsKF9hKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAgICAgZXhjZXB0aW9uID0g
ZS5kZXNjcmlwdGlvbiA/IGUuZGVzY3JpcHRpb24gOiBlOworICAgICAgICB9CisgICAgICAgIAor
ICAgICAgICB2YXIgX2V2OworICAgICAgICBpZiAoX2UpCisgICAgICAgICAgICBfZXYgPSAgZXZh
bChfZSk7CisgICAgICAgIAorICAgICAgICBpZiAoZXhjZXB0aW9uKSB7CisgICAgICAgICAgICBp
ZiAodHlwZW9mIF9lID09ICJ1bmRlZmluZWQiIHx8IGV4Y2VwdGlvbiA9PSBfZXYpCisgICAgICAg
ICAgICAgICAgbG9nKCJQQVNTOiAiICsgX2EgKyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0
aW9uICsgIi4iKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBsb2coIkZBSUw6
ICIgKyBfYSArICIgc2hvdWxkIHRocm93IGV4Y2VwdGlvbiAiICsgX2V2ICsgIi4gVGhyZXcgZXhj
ZXB0aW9uICIgKyBleGNlcHRpb24gKyAiLiIpOworICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBf
YXYgPT0gInVuZGVmaW5lZCIpCisgICAgICAgICAgICBsb2coIkZBSUw6ICIgKyBfYSArICIgc2hv
dWxkIHRocm93IGV4Y2VwdGlvbiAiICsgX2UgKyAiLiBXYXMgdW5kZWZpbmVkLiIpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBsb2coIkZBSUw6ICIgKyBfYSArICIgc2hvdWxkIHRocm93IGV4
Y2VwdGlvbiAiICsgX2UgKyAiLiBXYXMgIiArIF9hdiArICIuIik7CisgICAgfQorCisvLyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgCisgICAgaWYgKHdpbmRvdy5YTUxIdHRwUmVxdWVz
dCkgeworICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICB0cnkgeworICAgICAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1zeG1s
Mi5YTUxIVFRQIik7CisgICAgICAgIH0gY2F0Y2ggKGV4KSB7CisgICAgICAgICAgICByZXEgPSBu
ZXcgQWN0aXZlWE9iamVjdCgiTWljcm9zb2Z0LlhNTEhUVFAiKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBsb2coIm5ldyBYTUxIdHRwUmVxdWVzdCgpIik7CisKKyAgICBzaG91bGRUaHJvdygncmVx
LnNldFJlcXVlc3RIZWFkZXIoIkZvbyIsICJiYXIiKScpOworICAgIHNob3VsZFRocm93KCdyZXEu
c2VuZChudWxsKScpOworCisgICAgc2hvdWxkVGhyb3coJ3JlcS5vcGVuKCJHRVQiLCAiaHR0cDov
L3d3dy5hcHBsZS5jb20vIiwgdHJ1ZSknKTsKKyAgICAKKyAgICByZXEub3BlbignR0VUJywgJ3Jl
c291cmNlcy96ZXJvLWxlbmd0aC50eHQnLCBmYWxzZSk7CisgICAgbG9nKCJvcGVuKCkiKTsKKyAg
ICAKKyAgICBzaG91bGRUaHJvdygncmVxLnNldFJlcXVlc3RIZWFkZXIoKScpOworICAgIHNob3Vs
ZFRocm93KCdyZXEuc2V0UmVxdWVzdEhlYWRlcigiRm9vIiknKTsKKyAgICBzaG91bGRUaHJvdygn
cmVxLnN0YXR1cygpJyk7CisgICAgc2hvdWxkVGhyb3coJ3JlcS5zdGF0dXNUZXh0KCknKTsKKyAg
ICAKKyAgICByZXEuc2VuZChudWxsKTsKKyAgICBsb2coInNlbmQoKSIpOworCisgICAgc2hvdWxk
VGhyb3coJ3JlcS5zZW5kKG51bGwpJyk7CisKKyAgICBzaG91bGRUaHJvdygncmVxLnNldFJlcXVl
c3RIZWFkZXIoIkZvbyIsICJiYXIiKScpOworCisgICAgc2hvdWxkVGhyb3coJ3JlcS5nZXRSZXNw
b25zZUhlYWRlcigpJyk7CisgICAKKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgoKUHJvcGVy
dHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leGNl
cHRpb25zLmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1s
CgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leHRyYS1wYXJh
bWV0ZXJzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L2V4dHJhLXBhcmFtZXRlcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leHRyYS1wYXJhbWV0
ZXJzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw2IEBACitUZXN0IHRoYXQg
WE1MSHR0cFJlcXVlc3QgdG9sZXJhdGVzIGV4dHJhIHBhcmFtZXRlcnMgdG8gaXRzIG1ldGhvZHMu
CisKK8KgwqBTdGF0dXM6IDIwMAorwqDCoFN0YXR1c1RleHQ6ICJPSyIKK8KgwqBSZXNwb25zZVRl
eHQ6ICJTVUNDRVNTIgorCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L2V4dHJhLXBhcmFtZXRlcnMtZXhwZWN0ZWQudHh0Cl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHls
ZQogICArIG5hdGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvZXh0cmEtcGFyYW1ldGVycy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QvZXh0cmEtcGFyYW1ldGVycy5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9leHRyYS1wYXJhbWV0ZXJz
Lmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKKzxodG1sPgorPGhlYWQ+Cis8bWV0
YSBodHRwLWVxdWl2PSJjb250ZW50LXR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDtjaGFyc2V0PXV0
Zi04Ij4KKzxib2R5PgorPHA+VGVzdCB0aGF0IFhNTEh0dHBSZXF1ZXN0IHRvbGVyYXRlcyBleHRy
YSBwYXJhbWV0ZXJzIHRvIGl0cyBtZXRob2RzLjwvcD4KKzxzY3JpcHQ+CisKKyAgICBpZiAod2lu
ZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5k
dW1wQXNUZXh0KCk7CisKKyAgICB2YXIgY29uc29sZV9tZXNzYWdlcyA9IGRvY3VtZW50LmNyZWF0
ZUVsZW1lbnQoInVsIik7CisgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChjb25zb2xlX21l
c3NhZ2VzKTsKKyAgICAKKyAgICBmdW5jdGlvbiBsb2cobWVzc2FnZSkKKyAgICB7CisgICAgICAg
IHZhciBpdGVtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKKyAgICAgICAgaXRlbS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShtZXNzYWdlKSk7CisgICAgICAgIGNv
bnNvbGVfbWVzc2FnZXMuYXBwZW5kQ2hpbGQoaXRlbSk7CisgICAgfQorICAgIAorICAgIGZ1bmN0
aW9uIHByZXR0eVByaW50VGV4dCh0ZXh0KSB7CisgICAgICAgIGlmICh0ZXh0ID09IG51bGwpCisg
ICAgICAgICAgICByZXR1cm4gdGV4dDsKKyAgICAgICAgcmV0dXJuICciJyArIHRleHQgKyAnIic7
CisgICAgfQorICAgIAorICAgIGZ1bmN0aW9uIGR1bXBSZXNwb25zZSgpIHsKKworICAgICAgIHRy
eSB7IGxvZyAoIsKgwqBTdGF0dXM6ICIgKyByZXEuc3RhdHVzKTsgfSBjYXRjaCAoZXgpIHsgbG9n
KCLCoMKgRXhjZXB0aW9uIGdldHRpbmcgc3RhdHVzOiAiICsgZXgubWVzc2FnZSk7IH0KKyAgICAg
ICB0cnkgeyBsb2cgKCLCoMKgU3RhdHVzVGV4dDogIiArIHByZXR0eVByaW50VGV4dChyZXEuc3Rh
dHVzVGV4dCkpOyB9IGNhdGNoIChleCkgeyBsb2coIsKgwqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0
dXNUZXh0OiAiICsgZXgubWVzc2FnZSk7IH0KKyAgICAgICB0cnkgeyBsb2cgKCLCoMKgUmVzcG9u
c2VUZXh0OiAiICsgcHJldHR5UHJpbnRUZXh0KHJlcS5yZXNwb25zZVRleHQpKTsgfSBjYXRjaCAo
ZXgpIHsgbG9nKCLCoMKgRXhjZXB0aW9uIGdldHRpbmcgUmVzcG9uc2VUZXh0OiAiICsgZXgubWVz
c2FnZSk7IH0KKyAgICB9CisKKyAgICB0cnkgeworCisgICAgICAgIGlmICh3aW5kb3cuWE1MSHR0
cFJlcXVlc3QpIHsKKyAgICAgICAgICAgIHJlcSA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAg
ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgICAgICByZXEgPSBu
ZXcgQWN0aXZlWE9iamVjdCgiTXN4bWwyLlhNTEhUVFAiKTsKKyAgICAgICAgICAgIH0gY2F0Y2gg
KGV4KSB7CisgICAgICAgICAgICAgICAgcmVxID0gbmV3IEFjdGl2ZVhPYmplY3QoIk1pY3Jvc29m
dC5YTUxIVFRQIik7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAg
IHJlcS5vcGVuKCdQT1NUJywgJ3Jlc291cmNlcy9wb3N0LWVjaG8uY2dpJywgZmFsc2UsIG51bGws
IG51bGwsIG51bGwpOworICAgICAgICAKKyAgICAgICAgcmVxLnNldFJlcXVlc3RIZWFkZXIoJ2Zv
bycsICdiYXInLCBudWxsKTsKKyAgICAgICAgcmVxLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQveG1s
JywgbnVsbCk7CisKKyAgICAgICAgcmVxLnNlbmQoJ1NVQ0NFU1MnLCBudWxsKTsKKyAgICAgICAg
CisgICAgICAgIHJlcS5nZXRSZXNwb25zZUhlYWRlcignRGF0ZScsIG51bGwpOworICAgICAgICBy
ZXEuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKG51bGwpOworICAgICAgICAKKyAgICAgICAgZHVtcFJl
c3BvbnNlKCk7CisgICAgICAgIAorCX0gY2F0Y2ggKGV4KSB7CisJICAgIGxvZygiRkFJTFVSRTog
IiArIGV4KTsKKwl9CisgICAgCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KClByb3BlcnR5
IGNoYW5nZXMgb246IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvZXh0cmEt
cGFyYW1ldGVycy5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQv
aHRtbAoKSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1s
ZW5ndGgtcmVzcG9uc2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2UtZXhwZWN0ZWQudHh0
CShyZXZpc2lvbiAxNjI5OCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QvemVyby1sZW5ndGgtcmVzcG9uc2UtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
LDI0ICsxLDMzIEBACiBUZXN0IGZvciBidWcgNTkyNCAtIHplcm8tbGVuZ3RoIHJlc3BvbnNlcyB0
byBYTUxIVFRQUmVxdWVzdCBtaXNoYW5kbGVkLgogCiBhZnRlciBjcmVhdGlvbjogVW5pbml0aWFs
aXplZAotUmVzcG9uc2VUZXh0OiAiIgorwqDCoFN0YXR1czogMAorwqDCoFN0YXR1c1RleHQ6ICIi
CivCoMKgUmVzcG9uc2VUZXh0OiAiIgorwqDCoFJlc3BvbnNlWE1MOiBudWxsCivCoMKgUmVzcG9u
c2VYTUwgc2VyaWFsaXplZDogbi9hCiBhZnRlciBzZXR0aW5nIG9ucmVhZHlzdGF0ZWNoYW5nZTog
VW5pbml0aWFsaXplZAotb25yZWFkeXN0YXRlY2hhbmdlOiBMb2FkaW5nCi3CoMKgU3RhdHVzOiB1
bmRlZmluZWQKLcKgwqBTdGF0dXNUZXh0OiB1bmRlZmluZWQKK29ucmVhZHlzdGF0ZWNoYW5nZTog
T3BlbgorwqDCoEV4Y2VwdGlvbiBnZXR0aW5nIHN0YXR1czogSU5WQUxJRF9TVEFURV9FUlI6IERP
TSBFeGNlcHRpb24gMTEKK8KgwqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0dXNUZXh0OiBJTlZBTElE
X1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMQogwqDCoFJlc3BvbnNlVGV4dDogIiIKIMKgwqBS
ZXNwb25zZVhNTDogbnVsbAogwqDCoFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQotYWZ0ZXIg
b3BlbigpOiBMb2FkaW5nCi1hZnRlciBvdmVycmlkZU1pbWVUeXBlKCk6IExvYWRpbmcKLWFmdGVy
IHNlbmQoKTogTG9hZGluZwotb25yZWFkeXN0YXRlY2hhbmdlOiBMb2FkZWQKK2FmdGVyIG9wZW4o
KTogT3BlbgorwqDCoEV4Y2VwdGlvbiBnZXR0aW5nIHN0YXR1czogSU5WQUxJRF9TVEFURV9FUlI6
IERPTSBFeGNlcHRpb24gMTEKK8KgwqBFeGNlcHRpb24gZ2V0dGluZyBTdGF0dXNUZXh0OiBJTlZB
TElEX1NUQVRFX0VSUjogRE9NIEV4Y2VwdGlvbiAxMQorwqDCoFJlc3BvbnNlVGV4dDogIiIKK8Kg
wqBSZXNwb25zZVhNTDogbnVsbAorwqDCoFJlc3BvbnNlWE1MIHNlcmlhbGl6ZWQ6IG4vYQorYWZ0
ZXIgb3ZlcnJpZGVNaW1lVHlwZSgpOiBPcGVuCithZnRlciBzZW5kKCk6IE9wZW4KK29ucmVhZHlz
dGF0ZWNoYW5nZTogU2VudAogwqDCoFN0YXR1czogMjAwCiDCoMKgU3RhdHVzVGV4dDogIk9LIgog
wqDCoFJlc3BvbnNlVGV4dDogIiIKIMKgwqBSZXNwb25zZVhNTDogbnVsbAogwqDCoFJlc3BvbnNl
WE1MIHNlcmlhbGl6ZWQ6IG4vYQotb25yZWFkeXN0YXRlY2hhbmdlOiBDb21wbGV0ZWQKK29ucmVh
ZHlzdGF0ZWNoYW5nZTogTG9hZGVkCiDCoMKgU3RhdHVzOiAyMDAKIMKgwqBTdGF0dXNUZXh0OiAi
T0siCiDCoMKgUmVzcG9uc2VUZXh0OiAiIgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC96ZXJvLWxlbmd0aC1yZXNwb25zZS1zeW5jLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVu
Z3RoLXJlc3BvbnNlLXN5bmMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNjI5OCkKKysrIExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2Utc3lu
Yy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTMsOSArMyw5IEBAIFRlc3QgZm9yIGJ1
ZyA1OTI0IC0gemVyby1sZW5ndGggcmVzcG9uc2UKIGFmdGVyIGNyZWF0aW9uOiBVbmluaXRpYWxp
emVkCiBSZXNwb25zZVRleHQ6ICIiCiBhZnRlciBzZXR0aW5nIG9ucmVhZHlzdGF0ZWNoYW5nZTog
VW5pbml0aWFsaXplZAotYWZ0ZXIgb3BlbigpOiBMb2FkaW5nCi1hZnRlciBvdmVycmlkZU1pbWVU
eXBlKCk6IExvYWRpbmcKLWFmdGVyIHNlbmQoKTogQ29tcGxldGVkCithZnRlciBvcGVuKCk6IE9w
ZW4KK2FmdGVyIG92ZXJyaWRlTWltZVR5cGUoKTogT3BlbgorYWZ0ZXIgc2VuZCgpOiBMb2FkZWQK
IMKgwqBTdGF0dXM6IDIwMAogwqDCoFN0YXR1c1RleHQ6ICJPSyIKIMKgwqBSZXNwb25zZVRleHQ6
ICIiCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVu
Z3RoLXJlc3BvbnNlLXN5bmMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLXN5bmMuaHRtbAkocmV2aXNp
b24gMTYyOTgpCisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8t
bGVuZ3RoLXJlc3BvbnNlLXN5bmMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMSw2ICsxLDYgQEAK
IDxodG1sPgogPGhlYWQ+Ci08dGl0bGU+VGVzdCBYbWxIdHRwUmVxdWVzdCB6ZXJvLWxlbmd0aCBy
ZXNwb25zZSBoYW5kbGluZyAoc3luYyk8L3RpdGxlPgorPHRpdGxlPlRlc3QgWE1MSHR0cFJlcXVl
c3QgemVyby1sZW5ndGggcmVzcG9uc2UgaGFuZGxpbmcgKHN5bmMpPC90aXRsZT4KIDxtZXRhIGh0
dHAtZXF1aXY9ImNvbnRlbnQtdHlwZSIgY29udGVudD0idGV4dC9odG1sO2NoYXJzZXQ9dXRmLTgi
PgogPGJvZHk+CiA8cD5UZXN0IGZvciA8YSBocmVmPSJodHRwOi8vYnVnemlsbGEub3BlbmRhcndp
bi5vcmcvc2hvd19idWcuY2dpP2lkPTU5MjQiPmJ1ZyA1OTI0PC9hPgpAQCAtNTgsMTMgKzU4LDEz
IEBACiAgICAgICBpZiAocmVxLnJlYWR5U3RhdGUgPT0gMCkKICAgICAgICAgICByZXR1cm4gIlVu
aW5pdGlhbGl6ZWQiOwogICAgICAgZWxzZSBpZiAocmVxLnJlYWR5U3RhdGUgPT0gMSkKLSAgICAg
ICAgICByZXR1cm4gIkxvYWRpbmciOworICAgICAgICAgIHJldHVybiAiT3BlbiI7CiAgICAgICBl
bHNlIGlmIChyZXEucmVhZHlTdGF0ZSA9PSAyKQotICAgICAgICAgIHJldHVybiAiTG9hZGVkIjsK
KyAgICAgICAgICByZXR1cm4gIlNlbnQiOwogICAgICAgZWxzZSBpZiAocmVxLnJlYWR5U3RhdGUg
PT0gMykKLSAgICAgICAgICByZXR1cm4gIkludGVyYWN0aXZlIjsKKyAgICAgICAgICByZXR1cm4g
IlJlY2VpdmluZyI7CiAgICAgICBlbHNlIGlmIChyZXEucmVhZHlTdGF0ZSA9PSA0KQotICAgICAg
ICAgIHJldHVybiAiQ29tcGxldGVkIjsKKyAgICAgICAgICByZXR1cm4gIkxvYWRlZCI7CiAgICAg
ICBlbHNlCiAgICAgICAgIHJldHVybiAiPz8/IjsKICAgICB9CkluZGV4OiBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3plcm8tbGVuZ3RoLXJlc3BvbnNlLmh0bWwKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC96ZXJvLWxlbmd0
aC1yZXNwb25zZS5odG1sCShyZXZpc2lvbiAxNjI5OCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QvemVyby1sZW5ndGgtcmVzcG9uc2UuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMSw2ICsxLDYgQEAKIDxodG1sPgogPGhlYWQ+Ci08dGl0bGU+VGVzdCBYbWxIdHRwUmVx
dWVzdCB6ZXJvLWxlbmd0aCByZXNwb25zZSBoYW5kbGluZyAoYXN5bmMpPC90aXRsZT4KKzx0aXRs
ZT5UZXN0IFhNTEh0dHBSZXF1ZXN0IHplcm8tbGVuZ3RoIHJlc3BvbnNlIGhhbmRsaW5nIChhc3lu
Yyk8L3RpdGxlPgogPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0
L2h0bWw7Y2hhcnNldD11dGYtOCI+CiA8Ym9keT4KIDxwPlRlc3QgZm9yIDxhIGhyZWY9Imh0dHA6
Ly9idWd6aWxsYS5vcGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTkyNCI+YnVnIDU5MjQ8
L2E+CkBAIC0zNCw3ICszNCw3IEBACiAgICAgICAgIAogICAgICAgICBsb2coImFmdGVyIGNyZWF0
aW9uOiAiICsgc3RhdGVOYW1lKHJlcS5yZWFkeVN0YXRlKSk7CiAgICAgICAgIAotICAgICAgICBs
b2coIlJlc3BvbnNlVGV4dDogIiArIHByZXR0eVByaW50VGV4dChyZXEucmVzcG9uc2VUZXh0KSk7
CisgICAgICAgIGR1bXBSZXNwb25zZSgpOwogCiAgICAgICAgIGlmIChhc3luYykKICAgICAgICAg
ICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBwcm9jZXNzU3RhdGVDaGFuZ2U7CkBAIC00Myw4
ICs0MywxNCBAQAogCiAgICAgICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwsIGFzeW5jKTsKICAgICAg
ICAgbG9nKCJhZnRlciBvcGVuKCk6ICIgKyBzdGF0ZU5hbWUocmVxLnJlYWR5U3RhdGUpKTsKLSAg
ICAgICAgcmVxLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQveG1sJyk7CisgICAgICAgIGR1bXBSZXNw
b25zZSgpOworICAgICAgICAKKyAgICAgICAgdHJ5IHsKKyAgICAgICAgICAgIHJlcS5vdmVycmlk
ZU1pbWVUeXBlKCd0ZXh0L3htbCcpOworICAgICAgICB9IGNhdGNoIChleCkgeworICAgICAgICB9
CiAgICAgICAgIGxvZygiYWZ0ZXIgb3ZlcnJpZGVNaW1lVHlwZSgpOiAiICsgc3RhdGVOYW1lKHJl
cS5yZWFkeVN0YXRlKSk7CisKICAgICAgICAgcmVxLnNlbmQobnVsbCk7CiAgICAgICAgIGxvZygi
YWZ0ZXIgc2VuZCgpOiAiICsgc3RhdGVOYW1lKHJlcS5yZWFkeVN0YXRlKSk7CiAKQEAgLTU4LDEz
ICs2NCwxMyBAQAogICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlID09IDApCiAgICAgICAgICAgcmV0
dXJuICJVbmluaXRpYWxpemVkIjsKICAgICAgIGVsc2UgaWYgKHJlcS5yZWFkeVN0YXRlID09IDEp
Ci0gICAgICAgICAgcmV0dXJuICJMb2FkaW5nIjsKKyAgICAgICAgICByZXR1cm4gIk9wZW4iOwog
ICAgICAgZWxzZSBpZiAocmVxLnJlYWR5U3RhdGUgPT0gMikKLSAgICAgICAgICByZXR1cm4gIkxv
YWRlZCI7CisgICAgICAgICAgcmV0dXJuICJTZW50IjsKICAgICAgIGVsc2UgaWYgKHJlcS5yZWFk
eVN0YXRlID09IDMpCi0gICAgICAgICAgcmV0dXJuICJJbnRlcmFjdGl2ZSI7CisgICAgICAgICAg
cmV0dXJuICJSZWNlaXZpbmciOwogICAgICAgZWxzZSBpZiAocmVxLnJlYWR5U3RhdGUgPT0gNCkK
LSAgICAgICAgICByZXR1cm4gIkNvbXBsZXRlZCI7CisgICAgICAgICAgcmV0dXJuICJMb2FkZWQi
OwogICAgICAgZWxzZQogICAgICAgICByZXR1cm4gIj8/PyI7CiAgICAgfQpJbmRleDogTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcG9zdC1lY2hvLmNnaQo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291
cmNlcy9wb3N0LWVjaG8uY2dpCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy94bWxodHRwcmVxdWVzdC9yZXNvdXJjZXMvcG9zdC1lY2hvLmNnaQkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSwxMSBAQAorIyEvdXNyL2Jpbi9wZXJsIC13CisKK3ByaW50ICJDb250ZW50LXR5cGU6
IHRleHQvcGxhaW5cblxuIjsgCisKK2lmICgkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJQT1NU
IikgeworICAgIHJlYWQoU1RESU4sICRyZXF1ZXN0LCAkRU5WeydDT05URU5UX0xFTkdUSCd9KQor
ICAgICAgICAgICAgICAgIHx8IGRpZSAiQ291bGQgbm90IGdldCBxdWVyeVxuIjsKKyAgICBwcmlu
dCAkcmVxdWVzdDsKK30gZWxzZSB7CisgICAgcHJpbnQgIldyb25nIG1ldGhvZDogIiAuICRFTlZ7
J1JFUVVFU1RfTUVUSE9EJ30gLiAiXG4iOworfSAKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91
dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL3Bvc3QtZWNoby5jZ2kK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpOYW1lOiBzdm46ZXhlY3V0YWJsZQogICArICoKCkluZGV4OiBXZWJDb3JlL0No
YW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTYyOTgp
CisrKyBXZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisy
MDA2LTA5LTExICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29tPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWd6aWxsYS5v
cGVuZGFyd2luLm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDg3MgorICAgICAgICBYTUxIdHRwUmVxdWVz
dCBmYWlscyB0byB0aHJvdyBhbiBleGNlcHRpb24gd2hlbiB0aGVyZSBpcyBhIHNlY3VyaXR5IHZp
b2xhdGlvbgorICAgICAgICAobWlzbWF0Y2hpbmcgZG9tYWlucykKKworICAgICAgICBSYWlzZSBh
biBleGNlcHRpb24gaWYgdGhlcmUgaXMgYSBzZWN1cml0eSB2aW9sYXRpb24sIGFuZCBhbHNvIGlu
IGNhc2VzIHJlcXVpcmVkIGJ5CisgICAgICAgIHRoZSBjdXJyZW50IGRyYWZ0IG9mIFhIUiBzcGVj
aWZpY2F0aW9uLgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHA6
CisgICAgICAgIChLSlM6OkpTWE1MSHR0cFJlcXVlc3Q6OmdldFZhbHVlUHJvcGVydHkpOiBSYWlz
ZSBhbiBleGNlcHRpb24gaWYgYSBET00gbWV0aG9kIHJlcG9ydHMgb25lLgorICAgICAgICAoS0pT
OjpKU1hNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsQXNGdW5jdGlvbik6IFJhaXNlIGFuIGV4
Y2VwdGlvbiBpZiBhIERPTSBtZXRob2QKKyAgICAgICAgcmVwb3J0cyBvbmUsIGFuZCBhbHNvIGlm
IHRoZXJlIHdlcmUgdG9vIGZldyBhcmd1bWVudHMgcGFzc2VkLiAKKworICAgICAgICAqIGJpbmRp
bmdzL2pzL2tqc19iaW5kaW5nLmNwcDoKKyAgICAgICAgKEtKUzo6c2V0RE9NRXhjZXB0aW9uKTog
QWRkZWQgc3VwcG9ydCBmb3IgY3VzdG9tIFhIUiBleGNlcHRpb25zLgorCisgICAgICAgICogeG1s
L3htbGh0dHByZXF1ZXN0Lmg6IENoYW5nZWQgc3RhdGUgbmFtZXMgdG8gbWF0Y2ggdGhlIGN1cnJl
bnQgc3BlYy4gRGVmaW5lZCBhbgorICAgICAgICBleGNlcHRpb24gY29kZSByYW5nZSBmb3IgWEhS
IGV4Y2VwdGlvbnMuCisKKyAgICAgICAgKiB4bWwveG1saHR0cHJlcXVlc3QuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Om9wZW4pOiBSZW1vdmVkIGEgY2hlY2sgZm9yIG1f
YWJvcnRlZCB0aGF0IGNvdWxkIG5ldmVyIHN1Y2NlZWQuCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6c2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c2V0
UmVxdWVzdEhlYWRlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Z2V0U3Rh
dHVzKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXNUZXh0KToK
KyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0Ojpwcm9jZXNzU3luY0xvYWRSZXN1bHRz
KToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpyZWNlaXZlZEFsbERhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlY2VpdmVkRGF0YSk6CisKIDIwMDYt
MDktMTEgIERhdmlkIEh5YXR0ICA8aHlhdHRAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBhbiB1
bndpdHRpbmcgdmljdGltIG9mIHRoZSBrTWluLT5taW4gY2hhbmdlLiAgY2FsY0Jsb2NrTWluTWF4
V2lkdGgKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMvSlNYTUxIdHRwUmVxdWVzdC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1hNTEh0dHBSZXF1ZXN0LmNwcAkocmV2
aXNpb24gMTYyOTgpCisrKyBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTWE1MSHR0cFJlcXVlc3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04OCw2ICs4OCw4IEBAIGJvb2wgSlNYTUxIdHRwUmVxdWVzdDo6
Z2V0T3duUHJvcGVydHlTbG8KIAogSlNWYWx1ZSogSlNYTUxIdHRwUmVxdWVzdDo6Z2V0VmFsdWVQ
cm9wZXJ0eShFeGVjU3RhdGUgKmV4ZWMsIGludCB0b2tlbikgY29uc3QKIHsKKyAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CisgIAogICBzd2l0Y2ggKHRva2VuKSB7CiAgIGNhc2UgUmVhZHlTdGF0ZToK
ICAgICByZXR1cm4ganNOdW1iZXIobV9pbXBsLT5nZXRSZWFkeVN0YXRlKCkpOwpAQCAtOTgsMTEg
KzEwMCwxNSBAQCBKU1ZhbHVlKiBKU1hNTEh0dHBSZXF1ZXN0OjpnZXRWYWx1ZVByb3BlCiAgICAg
ICByZXR1cm4gdG9KUyhleGVjLCByZXNwb25zZVhNTCk7CiAgICAgcmV0dXJuIGpzTnVsbCgpOwog
ICBjYXNlIFN0YXR1czogewotICAgIGludCBzdGF0dXMgPSBtX2ltcGwtPmdldFN0YXR1cygpOwot
ICAgIHJldHVybiBzdGF0dXMgPiAwID8ganNOdW1iZXIoc3RhdHVzKSA6IGpzVW5kZWZpbmVkKCk7
CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNOdW1iZXIobV9pbXBsLT5nZXRTdGF0dXMoZWMpKTsK
KyAgICBzZXRET01FeGNlcHRpb24oZXhlYywgZWMpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0K
KyAgY2FzZSBTdGF0dXNUZXh0OiB7CisgICAgSlNWYWx1ZSogcmVzdWx0ID0ganNTdHJpbmcobV9p
bXBsLT5nZXRTdGF0dXNUZXh0KGVjKSk7CisgICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsK
KyAgICByZXR1cm4gcmVzdWx0OwogICB9Ci0gIGNhc2UgU3RhdHVzVGV4dDoKLSAgICByZXR1cm4g
anNTdHJpbmdPclVuZGVmaW5lZChtX2ltcGwtPmdldFN0YXR1c1RleHQoKSk7CiAgIGNhc2UgT25y
ZWFkeXN0YXRlY2hhbmdlOgogICAgaWYgKEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKiBsaXN0
ZW5lciA9IHN0YXRpY19jYXN0PEpTVW5wcm90ZWN0ZWRFdmVudExpc3RlbmVyKj4obV9pbXBsLT5v
blJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpKSkKICAgICAgIGlmIChKU09iamVjdCogbGlzdGVu
ZXJPYmogPSBsaXN0ZW5lci0+bGlzdGVuZXJPYmooKSkKQEAgLTE3MSw2ICsxNzcsOCBAQCBKU1Zh
bHVlKiBKU1hNTEh0dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsCiAKICAgSlNYTUxIdHRwUmVxdWVz
dCAqcmVxdWVzdCA9IHN0YXRpY19jYXN0PEpTWE1MSHR0cFJlcXVlc3QgKj4odGhpc09iaik7CiAK
KyAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisKICAgc3dpdGNoIChpZCkgewogICBjYXNlIEpTWE1M
SHR0cFJlcXVlc3Q6OkFib3J0OgogICAgIHJlcXVlc3QtPm1faW1wbC0+YWJvcnQoKTsKQEAgLTE3
OCwxMyArMTg2LDEzIEBAIEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3RQcm90b0Z1bmM6OmNhbGwK
ICAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpHZXRBbGxSZXNwb25zZUhlYWRlcnM6CiAgICAgcmV0
dXJuIGpzU3RyaW5nT3JVbmRlZmluZWQocmVxdWVzdC0+bV9pbXBsLT5nZXRBbGxSZXNwb25zZUhl
YWRlcnMoKSk7CiAgIGNhc2UgSlNYTUxIdHRwUmVxdWVzdDo6R2V0UmVzcG9uc2VIZWFkZXI6Ci0g
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDEpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAg
ICBpZiAoYXJncy5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gdGhyb3dFcnJvcihleGVjLCBT
eW50YXhFcnJvciwgIk5vdCBlbm91Z2ggYXJndW1lbnRzIik7CiAgICAgcmV0dXJuIGpzU3RyaW5n
T3JVbmRlZmluZWQocmVxdWVzdC0+bV9pbXBsLT5nZXRSZXNwb25zZUhlYWRlcihhcmdzWzBdLT50
b1N0cmluZyhleGVjKSkpOwogICBjYXNlIEpTWE1MSHR0cFJlcXVlc3Q6Ok9wZW46CiAgICAgewot
ICAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMiB8fCBhcmdzLnNpemUoKSA+IDUpCi0gICAgICAgIHJl
dHVybiBqc1VuZGVmaW5lZCgpOworICAgICAgaWYgKGFyZ3Muc2l6ZSgpIDwgMikKKyAgICAgICAg
cmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50
cyIpOwogICAgIAogICAgICAgU3RyaW5nIG1ldGhvZCA9IGFyZ3NbMF0tPnRvU3RyaW5nKGV4ZWMp
OwogICAgICAgS1VSTCB1cmwgPSBLVVJMKFdpbmRvdzo6cmV0cmlldmVBY3RpdmUoZXhlYyktPmZy
YW1lKCktPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKERlcHJlY2F0ZWRTdHJpbmcoYXJnc1sxXS0+
dG9TdHJpbmcoZXhlYykpKSk7CkBAIC0yMDEsMTUgKzIwOSwxMyBAQCBKU1ZhbHVlKiBKU1hNTEh0
dHBSZXF1ZXN0UHJvdG9GdW5jOjpjYWxsCiAgICAgICBpZiAoYXJncy5zaXplKCkgPj0gNSkKICAg
ICAgICAgcGFzc3dvcmQgPSBhcmdzWzRdLT50b1N0cmluZyhleGVjKTsKIAotICAgICAgcmVxdWVz
dC0+bV9pbXBsLT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwgcGFzc3dvcmQpOworICAg
ICAgcmVxdWVzdC0+bV9pbXBsLT5vcGVuKG1ldGhvZCwgdXJsLCBhc3luYywgdXNlciwgcGFzc3dv
cmQsIGVjKTsKKyAgICAgIHNldERPTUV4Y2VwdGlvbihleGVjLCBlYyk7CiAKICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogICAgIH0KICAgY2FzZSBKU1hNTEh0dHBSZXF1ZXN0OjpTZW5kOgog
ICAgIHsKLSAgICAgIGlmIChhcmdzLnNpemUoKSA+IDEpCi0gICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwotCiAgICAgICBTdHJpbmcgYm9keTsKIAogICAgICAgaWYgKGFyZ3Muc2l6ZSgpID49
IDEpIHsKQEAgLTIyNSwxOCArMjMxLDIwIEBAIEpTVmFsdWUqIEpTWE1MSHR0cFJlcXVlc3RQcm90
b0Z1bmM6OmNhbGwKICAgICAgICAgfQogICAgICAgfQogCi0gICAgICByZXF1ZXN0LT5tX2ltcGwt
PnNlbmQoYm9keSk7CisgICAgICByZXF1ZXN0LT5tX2ltcGwtPnNlbmQoYm9keSwgZWMpOworICAg
ICAgc2V0RE9NRXhjZXB0aW9uKGV4ZWMsIGVjKTsKIAogICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgfQogICBjYXNlIEpTWE1MSHR0cFJlcXVlc3Q6OlNldFJlcXVlc3RIZWFkZXI6Ci0g
ICAgaWYgKGFyZ3Muc2l6ZSgpICE9IDIpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKLSAg
ICByZXF1ZXN0LT5tX2ltcGwtPnNldFJlcXVlc3RIZWFkZXIoYXJnc1swXS0+dG9TdHJpbmcoZXhl
YyksIGFyZ3NbMV0tPnRvU3RyaW5nKGV4ZWMpKTsKKyAgICBpZiAoYXJncy5zaXplKCkgPCAyKQor
ICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5vdWdoIGFy
Z3VtZW50cyIpOworICAgIHJlcXVlc3QtPm1faW1wbC0+c2V0UmVxdWVzdEhlYWRlcihhcmdzWzBd
LT50b1N0cmluZyhleGVjKSwgYXJnc1sxXS0+dG9TdHJpbmcoZXhlYyksIGVjKTsKKyAgICBzZXRE
T01FeGNlcHRpb24oZXhlYywgZWMpOwogICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICBjYXNl
IEpTWE1MSHR0cFJlcXVlc3Q6Ok92ZXJyaWRlTUlNRVR5cGU6Ci0gICAgaWYgKGFyZ3Muc2l6ZSgp
ICE9IDEpCi0gICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBpZiAoYXJncy5zaXplKCkg
PCAxKQorICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJyb3IsICJOb3QgZW5v
dWdoIGFyZ3VtZW50cyIpOwogICAgIHJlcXVlc3QtPm1faW1wbC0+b3ZlcnJpZGVNSU1FVHlwZShh
cmdzWzBdLT50b1N0cmluZyhleGVjKSk7CiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgIH0K
SW5kZXg6IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwCShyZXZpc2lvbiAxNjI5OCkKKysr
IFdlYkNvcmUvYmluZGluZ3MvanMva2pzX2JpbmRpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw2ICszMSw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlJhbmdlLmgiCisjaW5jbHVkZSAieG1saHR0cHJlcXVlc3QuaCIKICNp
bmNsdWRlICJYUGF0aEV2YWx1YXRvci5oIgogI2luY2x1ZGUgImtqc19kb20uaCIKICNpbmNsdWRl
ICJranNfd2luZG93LmgiCkBAIC0zMTAsNiArMzExLDEwIEBAIHN0YXRpYyBjb25zdCBjaGFyICog
Y29uc3QgZXZlbnRFeGNlcHRpb24KICAgICAiVU5TUEVDSUZJRURfRVZFTlRfVFlQRV9FUlIiCiB9
OwogCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IHhtbEh0dHBSZXF1ZXN0RXhjZXB0aW9uTmFt
ZXNbXSA9IHsKKyAgICAiUGVybWlzc2lvbiBkZW5pZWQiCit9OworCiAjaWZkZWYgWFBBVEhfU1VQ
UE9SVAogc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB4cGF0aEV4Y2VwdGlvbk5hbWVzW10gPSB7
CiAgICAgIklOVkFMSURfRVhQUkVTU0lPTl9FUlIiLApAQCAtMzQxLDYgKzM0NiwxNSBAQCB2b2lk
IHNldERPTUV4Y2VwdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEV4CiAgICAgbmFtZUluZGV4ID0gY29k
ZTsKICAgICBuYW1lVGFibGUgPSBldmVudEV4Y2VwdGlvbk5hbWVzOwogICAgIG5hbWVUYWJsZVNp
emUgPSBzaXplb2YoZXZlbnRFeGNlcHRpb25OYW1lcykgLyBzaXplb2YoZXZlbnRFeGNlcHRpb25O
YW1lc1swXSk7CisgIH0gZWxzZSBpZiAoY29kZSA+PSBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbk9m
ZnNldCAmJiBjb2RlIDw9IFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uTWF4KSB7CisgICAgLy8gWE1M
SHR0cFJlcXVlc3QgY2FzZSBpcyBzcGVjaWFsLCBiZWNhdXNlIHRoZXJlIGlzIG5vIGV4Y2VwdGlv
biBjb2RlIGFzc2lnbmVkICh5ZXQ/KS4KKyAgICBjb2RlIC09IFhNTEh0dHBSZXF1ZXN0RXhjZXB0
aW9uT2Zmc2V0OworICAgIG5hbWVJbmRleCA9IGNvZGU7CisgICAgbmFtZVRhYmxlID0geG1sSHR0
cFJlcXVlc3RFeGNlcHRpb25OYW1lczsKKyAgICBuYW1lVGFibGVTaXplID0gc2l6ZW9mKHhtbEh0
dHBSZXF1ZXN0RXhjZXB0aW9uTmFtZXMpIC8gc2l6ZW9mKHhtbEh0dHBSZXF1ZXN0RXhjZXB0aW9u
TmFtZXNbMF0pOworCisgICAgdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsIG5hbWVJbmRl
eCA8IG5hbWVUYWJsZVNpemUgPyBuYW1lVGFibGVbbmFtZUluZGV4XSA6IDApOworICAgIHJldHVy
bjsKICNpZmRlZiBYUEFUSF9TVVBQT1JUCiAgIH0gZWxzZSBpZiAoY29kZSA+PSBYUGF0aEV4Y2Vw
dGlvbk9mZnNldCAmJiBjb2RlIDw9IFhQYXRoRXhjZXB0aW9uTWF4KSB7CiAgICAgdHlwZSA9ICJE
T00gWFBhdGgiOwpJbmRleDogV2ViQ29yZS94bWwveG1saHR0cHJlcXVlc3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUveG1sL3htbGh0dHByZXF1ZXN0LmNwcAkocmV2aXNpb24gMTYyOTgpCisr
KyBXZWJDb3JlL3htbC94bWxodHRwcmVxdWVzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYg
KzI4LDcgQEAKICNpbmNsdWRlICJFdmVudC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIK
ICNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2lu
Y2x1ZGUgIkZvcm1EYXRhLmgiCiAjaW5jbHVkZSAiSFRNTERvY3VtZW50LmgiCiAjaW5jbHVkZSAi
TG9hZGVyRnVuY3Rpb25zLmgiCkBAIC0xNDgsNyArMTQ5LDcgQEAgU3RyaW5nIFhNTEh0dHBSZXF1
ZXN0OjpnZXRSZXNwb25zZVRleHQoKQogCiBEb2N1bWVudCogWE1MSHR0cFJlcXVlc3Q6OmdldFJl
c3BvbnNlWE1MKCkgY29uc3QKIHsKLSAgICBpZiAobV9zdGF0ZSAhPSBDb21wbGV0ZWQpCisgICAg
aWYgKG1fc3RhdGUgIT0gTG9hZGVkKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGlmICghbV9j
cmVhdGVkRG9jdW1lbnQpIHsKQEAgLTIxNyw3ICsyMTgsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpjYWxsUmVhZHlTdGF0ZUNoYW5nCiAgICAgaWYgKG1fZG9jICYmIG1fZG9jLT5mcmFtZSgpICYm
IG1fb25SZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIpCiAgICAgICAgIG1fb25SZWFkeVN0YXRlQ2hh
bmdlTGlzdGVuZXItPmhhbmRsZUV2ZW50KG5ldyBFdmVudChyZWFkeXN0YXRlY2hhbmdlRXZlbnQs
IHRydWUsIHRydWUpLCB0cnVlKTsKICAgICAKLSAgICBpZiAobV9kb2MgJiYgbV9kb2MtPmZyYW1l
KCkgJiYgbV9zdGF0ZSA9PSBDb21wbGV0ZWQgJiYgbV9vbkxvYWRMaXN0ZW5lcikKKyAgICBpZiAo
bV9kb2MgJiYgbV9kb2MtPmZyYW1lKCkgJiYgbV9zdGF0ZSA9PSBMb2FkZWQgJiYgbV9vbkxvYWRM
aXN0ZW5lcikKICAgICAgICAgbV9vbkxvYWRMaXN0ZW5lci0+aGFuZGxlRXZlbnQobmV3IEV2ZW50
KGxvYWRFdmVudCwgdHJ1ZSwgdHJ1ZSksIHRydWUpOwogfQogCkBAIC0yMzgsNyArMjM5LDcgQEAg
Ym9vbCBYTUxIdHRwUmVxdWVzdDo6dXJsTWF0Y2hlc0RvY3VtZW50RAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwg
Y29uc3QgS1VSTCYgdXJsLCBib29sIGFzeW5jLCBjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQpCit2b2lkIFhNTEh0dHBSZXF1ZXN0OjpvcGVuKGNvbnN0IFN0cmluZyYg
bWV0aG9kLCBjb25zdCBLVVJMJiB1cmwsIGJvb2wgYXN5bmMsIGNvbnN0IFN0cmluZyYgdXNlciwg
Y29uc3QgU3RyaW5nJiBwYXNzd29yZCwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CiAgICAgYWJvcnQo
KTsKICAgICBtX2Fib3J0ZWQgPSBmYWxzZTsKQEAgLTI1MiwxMSArMjUzLDEwIEBAIHZvaWQgWE1M
SHR0cFJlcXVlc3Q6Om9wZW4oY29uc3QgU3RyaW5nJiAKIAogICAgIGNoYW5nZVN0YXRlKFVuaW5p
dGlhbGl6ZWQpOwogCi0gICAgaWYgKG1fYWJvcnRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKCF1cmxNYXRjaGVzRG9jdW1lbnREb21haW4odXJsKSkKKyAgICBpZiAoIXVybE1hdGNoZXNE
b2N1bWVudERvbWFpbih1cmwpKSB7CisgICAgICAgIGVjID0gUEVSTUlTU0lPTl9ERU5JRUQ7CiAg
ICAgICAgIHJldHVybjsKKyAgICB9CiAKICAgICBtX3VybCA9IHVybDsKIApAQCAtMjc4LDE4ICsy
NzgsMjAgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3Blbihjb25zdCBTdHJpbmcmIAogCiAgICAg
bV9hc3luYyA9IGFzeW5jOwogCi0gICAgY2hhbmdlU3RhdGUoTG9hZGluZyk7CisgICAgY2hhbmdl
U3RhdGUoT3Blbik7CiB9CiAKLXZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNlbmQoY29uc3QgU3RyaW5n
JiBib2R5KQordm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChjb25zdCBTdHJpbmcmIGJvZHksIEV4
Y2VwdGlvbkNvZGUmIGVjKQogewogICAgIGlmICghbV9kb2MpCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX3N0YXRlICE9IExvYWRpbmcpCisgICAgaWYgKG1fc3RhdGUgIT0gT3Blbikgewor
ICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAgICAgICByZXR1cm47CisgICAgfQog
ICAKLSAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYWJvcnQgaW5zdGVhZCBpZiB3ZSBhbHJlYWR5
IGhhdmUgYSBtX2pvYiBnb2luZz8KKyAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgYWJvcnQgb3Ig
cmFpc2UgYW4gZXhjZXB0aW9uIGluc3RlYWQgaWYgd2UgYWxyZWFkeSBoYXZlIGEgbV9qb2IgZ29p
bmc/CiAgICAgaWYgKG1fam9iKQogICAgICAgICByZXR1cm47CiAKQEAgLTI5OCw5ICszMDAsMTEg
QEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6c2VuZChjb25zdCBTdHJpbmcmIAogICAgIGlmICghYm9k
eS5pc051bGwoKSAmJiBtX21ldGhvZCAhPSAiR0VUIiAmJiBtX21ldGhvZCAhPSAiSEVBRCIgJiYg
KG1fdXJsLnByb3RvY29sKCkubG93ZXIoKSA9PSAiaHR0cCIgfHwgbV91cmwucHJvdG9jb2woKS5s
b3dlcigpID09ICJodHRwcyIpKSB7CiAgICAgICAgIFN0cmluZyBjb250ZW50VHlwZSA9IGdldFJl
cXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIpOwogICAgICAgICBTdHJpbmcgY2hhcnNldDsKLSAg
ICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkKLSAgICAgICAgICAgIHNldFJlcXVlc3RI
ZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJhcHBsaWNhdGlvbi94bWwiKTsKLSAgICAgICAgZWxzZQor
ICAgICAgICBpZiAoY29udGVudFR5cGUuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKKyAgICAgICAgICAgIHNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlw
ZSIsICJhcHBsaWNhdGlvbi94bWwiLCBlYyk7CisgICAgICAgICAgICBBU1NFUlQoZWMgPT0gMCk7
CisgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgY2hhcnNldCA9IGdldENoYXJzZXQoY29udGVu
dFR5cGUpOwogICAgICAgCiAgICAgICAgIGlmIChjaGFyc2V0LmlzRW1wdHkoKSkKQEAgLTM3NSw4
ICszNzksMTMgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6b3ZlcnJpZGVNSU1FVHlwZShjbwogICAg
IG1fbWltZVR5cGVPdmVycmlkZSA9IG92ZXJyaWRlOwogfQogCi12b2lkIFhNTEh0dHBSZXF1ZXN0
OjpzZXRSZXF1ZXN0SGVhZGVyKGNvbnN0IFN0cmluZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1
ZSkKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnNldFJlcXVlc3RIZWFkZXIoY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBlYykKIHsKKyAgICBpZiAo
bV9zdGF0ZSAhPSBPcGVuKSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9TVEFURV9FUlI7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKICAgICBpZiAobV9yZXF1ZXN0SGVhZGVycy5sZW5ndGgoKSA+
IDApCiAgICAgICAgIG1fcmVxdWVzdEhlYWRlcnMgKz0gIlxyXG4iOwogICAgIG1fcmVxdWVzdEhl
YWRlcnMgKz0gbmFtZS5kZXByZWNhdGVkU3RyaW5nKCk7CkBAIC00MzcsMzcgKzQ0Niw1MSBAQCBi
b29sIFhNTEh0dHBSZXF1ZXN0OjpyZXNwb25zZUlzWE1MKCkgY29uCiAgICAgcmV0dXJuIERPTUlt
cGxlbWVudGF0aW9uOjppc1hNTE1JTUVUeXBlKG1pbWVUeXBlKTsKIH0KIAotaW50IFhNTEh0dHBS
ZXF1ZXN0OjpnZXRTdGF0dXMoKSBjb25zdAoraW50IFhNTEh0dHBSZXF1ZXN0OjpnZXRTdGF0dXMo
RXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYgKG1fcmVzcG9uc2VIZWFkZXJzLmlz
RW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAKKyAgICBpZiAobV9zdGF0ZSA9PSBVbmlu
aXRpYWxpemVkKQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBpZiAobV9yZXNwb25zZUhl
YWRlcnMuaXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtX3N0YXRlICE9IFJlY2VpdmluZyAmJiBt
X3N0YXRlICE9IExvYWRlZCkKKyAgICAgICAgICAgIC8vIHN0YXR1cyBNVVNUIGJlIGF2YWlsYWJs
ZSBpbiB0aGVzZSBzdGF0ZXMsIGJ1dCB3ZSBkb24ndCBnZXQgYW55IGhlYWRlcnMgZnJvbSBub24t
SFRUUCByZXF1ZXN0cworICAgICAgICAgICAgZWMgPSBJTlZBTElEX1NUQVRFX0VSUjsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorICAgIAogICAgIGludCBlbmRPZkxpbmUgPSBtX3Jlc3BvbnNl
SGVhZGVycy5maW5kKCJcbiIpOwogICAgIFN0cmluZyBmaXJzdExpbmUgPSBlbmRPZkxpbmUgPT0g
LTEgPyBtX3Jlc3BvbnNlSGVhZGVycyA6IG1fcmVzcG9uc2VIZWFkZXJzLnN1YnN0cmluZygwLCBl
bmRPZkxpbmUpOwogICAgIGludCBjb2RlU3RhcnQgPSBmaXJzdExpbmUuZmluZCgiICIpOwogICAg
IGludCBjb2RlRW5kID0gZmlyc3RMaW5lLmZpbmQoIiAiLCBjb2RlU3RhcnQgKyAxKTsKLSAgICBp
ZiAoY29kZVN0YXJ0ID09IC0xIHx8IGNvZGVFbmQgPT0gLTEpCi0gICAgICAgIHJldHVybiAtMTsK
KyAgICBBU1NFUlQoY29kZVN0YXJ0ICE9IC0xKTsKKyAgICBBU1NFUlQoY29kZUVuZCAhPSAtMSk7
CiAgIAogICAgIFN0cmluZyBudW1iZXIgPSBmaXJzdExpbmUuc3Vic3RyaW5nKGNvZGVTdGFydCAr
IDEsIGNvZGVFbmQgLSAoY29kZVN0YXJ0ICsgMSkpOwogICAgIGJvb2wgb2sgPSBmYWxzZTsKICAg
ICBpbnQgY29kZSA9IG51bWJlci50b0ludCgmb2spOwotICAgIGlmICghb2spCi0gICAgICAgIHJl
dHVybiAtMTsKKyAgICBBU1NFUlQob2spOworCiAgICAgcmV0dXJuIGNvZGU7CiB9CiAKLVN0cmlu
ZyBYTUxIdHRwUmVxdWVzdDo6Z2V0U3RhdHVzVGV4dCgpIGNvbnN0CitTdHJpbmcgWE1MSHR0cFJl
cXVlc3Q6OmdldFN0YXR1c1RleHQoRXhjZXB0aW9uQ29kZSYgZWMpIGNvbnN0CiB7Ci0gICAgaWYg
KG1fcmVzcG9uc2VIZWFkZXJzLmlzRW1wdHkoKSkKKyAgICBpZiAobV9zdGF0ZSA9PSBVbmluaXRp
YWxpemVkKQorICAgICAgICByZXR1cm4gIiI7CisgICAgCisgICAgaWYgKG1fcmVzcG9uc2VIZWFk
ZXJzLmlzRW1wdHkoKSkgeworICAgICAgICBpZiAobV9zdGF0ZSAhPSBSZWNlaXZpbmcgJiYgbV9z
dGF0ZSAhPSBMb2FkZWQpCisgICAgICAgICAgICAvLyBzdGF0dXNUZXh0IE1VU1QgYmUgYXZhaWxh
YmxlIGluIHRoZXNlIHN0YXRlcywgYnV0IHdlIGRvbid0IGdldCBhbnkgaGVhZGVycyBmcm9tIG5v
bi1IVFRQIHJlcXVlc3RzCisgICAgICAgICAgICBlYyA9IElOVkFMSURfU1RBVEVfRVJSOwogICAg
ICAgICByZXR1cm4gU3RyaW5nKCk7CisgICAgfQogICAKICAgICBpbnQgZW5kT2ZMaW5lID0gbV9y
ZXNwb25zZUhlYWRlcnMuZmluZCgiXG4iKTsKICAgICBTdHJpbmcgZmlyc3RMaW5lID0gZW5kT2ZM
aW5lID09IC0xID8gbV9yZXNwb25zZUhlYWRlcnMgOiBtX3Jlc3BvbnNlSGVhZGVycy5zdWJzdHJp
bmcoMCwgZW5kT2ZMaW5lKTsKICAgICBpbnQgY29kZVN0YXJ0ID0gZmlyc3RMaW5lLmZpbmQoIiAi
KTsKICAgICBpbnQgY29kZUVuZCA9IGZpcnN0TGluZS5maW5kKCIgIiwgY29kZVN0YXJ0ICsgMSk7
Ci0gICAgaWYgKGNvZGVTdGFydCA9PSAtMSB8fCBjb2RlRW5kID09IC0xKQotICAgICAgICByZXR1
cm4gU3RyaW5nKCk7CisgICAgQVNTRVJUKGNvZGVTdGFydCAhPSAtMSk7CisgICAgQVNTRVJUKGNv
ZGVFbmQgIT0gLTEpOwogICAKICAgICByZXR1cm4gZmlyc3RMaW5lLnN1YnN0cmluZyhjb2RlRW5k
ICsgMSwgZW5kT2ZMaW5lIC0gKGNvZGVFbmQgKyAxKSkuZGVwcmVjYXRlZFN0cmluZygpLnN0cmlw
V2hpdGVTcGFjZSgpOwogfQpAQCAtNDgwLDcgKzUwMyw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6
OnByb2Nlc3NTeW5jTG9hZFJlc3UKICAgICB9CiAKICAgICBtX3Jlc3BvbnNlSGVhZGVycyA9IGhl
YWRlcnM7Ci0gICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKKyAgICBjaGFuZ2VTdGF0ZShTZW50KTsK
ICAgICBpZiAobV9hYm9ydGVkKQogICAgICAgICByZXR1cm47CiAKQEAgLTQ5OSw4ICs1MjIsOCBA
QCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpyZWNlaXZlZEFsbERhdGEoUmVzCiAgICAgaWYgKG1fcmVz
cG9uc2VIZWFkZXJzLmlzRW1wdHkoKSAmJiBtX2pvYikKICAgICAgICAgbV9yZXNwb25zZUhlYWRl
cnMgPSBtX2pvYi0+cXVlcnlNZXRhRGF0YSgiSFRUUC1IZWFkZXJzIik7CiAKLSAgICBpZiAobV9z
dGF0ZSA8IExvYWRlZCkKLSAgICAgICAgY2hhbmdlU3RhdGUoTG9hZGVkKTsKKyAgICBpZiAobV9z
dGF0ZSA8IFNlbnQpCisgICAgICAgIGNoYW5nZVN0YXRlKFNlbnQpOwogCiAgICAgaWYgKG1fZGVj
b2RlcikKICAgICAgICAgbV9yZXNwb25zZSArPSBtX2RlY29kZXItPmZsdXNoKCk7CkBAIC01MDgs
NyArNTMxLDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6cmVjZWl2ZWRBbGxEYXRhKFJlcwogICAg
IGJvb2wgaGFkSm9iID0gbV9qb2I7CiAgICAgbV9qb2IgPSAwOwogCi0gICAgY2hhbmdlU3RhdGUo
Q29tcGxldGVkKTsKKyAgICBjaGFuZ2VTdGF0ZShMb2FkZWQpOwogICAgIG1fZGVjb2RlciA9IDA7
CiAKICAgICBpZiAoaGFkSm9iKSB7CkBAIC01MzEsOCArNTU0LDggQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6cmVjZWl2ZWREYXRhKFJlc291cgogICAgIGlmIChtX3Jlc3BvbnNlSGVhZGVycy5pc0Vt
cHR5KCkgJiYgbV9qb2IpCiAgICAgICAgIG1fcmVzcG9uc2VIZWFkZXJzID0gbV9qb2ItPnF1ZXJ5
TWV0YURhdGEoIkhUVFAtSGVhZGVycyIpOwogCi0gICAgaWYgKG1fc3RhdGUgPCBMb2FkZWQpCi0g
ICAgICAgIGNoYW5nZVN0YXRlKExvYWRlZCk7CisgICAgaWYgKG1fc3RhdGUgPCBTZW50KQorICAg
ICAgICBjaGFuZ2VTdGF0ZShTZW50KTsKICAgCiAgICAgaWYgKCFtX2RlY29kZXIpIHsKICAgICAg
ICAgbV9lbmNvZGluZyA9IGdldENoYXJzZXQobV9taW1lVHlwZU92ZXJyaWRlKTsKQEAgLTU2MCw4
ICs1ODMsOCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpyZWNlaXZlZERhdGEoUmVzb3VyCiAgICAg
bV9yZXNwb25zZSArPSBkZWNvZGVkOwogCiAgICAgaWYgKCFtX2Fib3J0ZWQpIHsKLSAgICAgICAg
aWYgKG1fc3RhdGUgIT0gSW50ZXJhY3RpdmUpCi0gICAgICAgICAgICBjaGFuZ2VTdGF0ZShJbnRl
cmFjdGl2ZSk7CisgICAgICAgIGlmIChtX3N0YXRlICE9IFJlY2VpdmluZykKKyAgICAgICAgICAg
IGNoYW5nZVN0YXRlKFJlY2VpdmluZyk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIC8vIEZp
cmVmb3ggY2FsbHMgcmVhZHlTdGF0ZUNoYW5nZWQgZXZlcnkgdGltZSBpdCByZWNlaXZlcyBkYXRh
LCA0NDQ5NDQyCiAgICAgICAgICAgICBjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCk7Cklu
ZGV4OiBXZWJDb3JlL3htbC94bWxodHRwcmVxdWVzdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
eG1sL3htbGh0dHByZXF1ZXN0LmgJKHJldmlzaW9uIDE2Mjk4KQorKysgV2ViQ29yZS94bWwveG1s
aHR0cHJlcXVlc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTMgKzM0LDE5IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgY2xhc3MgRXZlbnRMaXN0ZW5lcjsKICAgY2xhc3MgU3RyaW5nOwogCisg
IHR5cGVkZWYgaW50IEV4Y2VwdGlvbkNvZGU7CisKKyAgY29uc3QgaW50IFhNTEh0dHBSZXF1ZXN0
RXhjZXB0aW9uT2Zmc2V0ID0gNTAwOworICBjb25zdCBpbnQgWE1MSHR0cFJlcXVlc3RFeGNlcHRp
b25NYXggPSA1OTk7CisgIGVudW0gWE1MSHR0cFJlcXVlc3RFeGNlcHRpb25Db2RlIHsgUEVSTUlT
U0lPTl9ERU5JRUQgPSBYTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbk9mZnNldCB9OworCiAgIC8vIHRo
ZXNlIGV4YWN0IG51bWVyaWMgdmFsdWVzIGFyZSBpbXBvcnRhbnQgYmVjYXVzZSBKUyBleHBlY3Rz
IHRoZW0KICAgZW51bSBYTUxIdHRwUmVxdWVzdFN0YXRlIHsKLSAgICBVbmluaXRpYWxpemVkID0g
MCwgIC8vIG9wZW4oKSBoYXMgbm90IGJlZW4gY2FsbGVkIHlldAotICAgIExvYWRpbmcgPSAxLCAg
ICAgICAgLy8gc2VuZCgpIGhhcyBub3QgYmVlbiBjYWxsZWQgeWV0Ci0gICAgTG9hZGVkID0gMiwg
ICAgICAgICAvLyBzZW5kKCkgaGFzIGJlZW4gY2FsbGVkLCBoZWFkZXJzIGFuZCBzdGF0dXMgYXJl
IGF2YWlsYWJsZQotICAgIEludGVyYWN0aXZlID0gMywgICAgLy8gRG93bmxvYWRpbmcsIHJlc3Bv
bnNlVGV4dCBob2xkcyB0aGUgcGFydGlhbCBkYXRhCi0gICAgQ29tcGxldGVkID0gNCAgICAgICAv
LyBGaW5pc2hlZCB3aXRoIGFsbCBvcGVyYXRpb25zCisgICAgVW5pbml0aWFsaXplZCA9IDAsICAv
LyBUaGUgaW5pdGlhbCB2YWx1ZS4KKyAgICBPcGVuID0gMSwgICAgICAgICAgIC8vIFRoZSBvcGVu
KCkgbWV0aG9kIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseSBjYWxsZWQuCisgICAgU2VudCA9IDIsICAg
ICAgICAgICAvLyBUaGUgdXNlciBhZ2VudCBzdWNjZXNzZnVsbHkgY29tcGxldGVkIHRoZSByZXF1
ZXN0LCBidXQgbm8gZGF0YSBoYXMgeWV0IGJlZW4gcmVjZWl2ZWQuCisgICAgUmVjZWl2aW5nID0g
MywgICAgICAvLyBJbW1lZGlhdGVseSBiZWZvcmUgcmVjZWl2aW5nIHRoZSBtZXNzYWdlIGJvZHkg
KGlmIGFueSkuIEFsbCBIVFRQIGhlYWRlcnMgaGF2ZSBiZWVuIHJlY2VpdmVkLgorICAgIExvYWRl
ZCA9IDQgICAgICAgICAgLy8gVGhlIGRhdGEgdHJhbnNmZXIgaGFzIGJlZW4gY29tcGxldGVkLgog
ICB9OwogCiAgIGNsYXNzIFhNTEh0dHBSZXF1ZXN0IDogcHVibGljIFNoYXJlZDxYTUxIdHRwUmVx
dWVzdD4sIFJlc291cmNlTG9hZGVyQ2xpZW50IHsKQEAgLTUxLDEzICs1NywxMyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAgICAgc3RhdGljIHZvaWQgZGV0YWNoUmVxdWVzdHMoRG9jdW1lbnQqKTsK
ICAgICBzdGF0aWMgdm9pZCBjYW5jZWxSZXF1ZXN0cyhEb2N1bWVudCopOwogCi0gICAgU3RyaW5n
IGdldFN0YXR1c1RleHQoKSBjb25zdDsKLSAgICBpbnQgZ2V0U3RhdHVzKCkgY29uc3Q7CisgICAg
U3RyaW5nIGdldFN0YXR1c1RleHQoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OworICAgIGludCBnZXRT
dGF0dXMoRXhjZXB0aW9uQ29kZSYpIGNvbnN0OwogICAgIFhNTEh0dHBSZXF1ZXN0U3RhdGUgZ2V0
UmVhZHlTdGF0ZSgpIGNvbnN0OwotICAgIHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwg
Y29uc3QgS1VSTCYgdXJsLCBib29sIGFzeW5jLCBjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0
cmluZyYgcGFzc3dvcmQpOwotICAgIHZvaWQgc2VuZChjb25zdCBTdHJpbmcmIGJvZHkpOworICAg
IHZvaWQgb3Blbihjb25zdCBTdHJpbmcmIG1ldGhvZCwgY29uc3QgS1VSTCYgdXJsLCBib29sIGFz
eW5jLCBjb25zdCBTdHJpbmcmIHVzZXIsIGNvbnN0IFN0cmluZyYgcGFzc3dvcmQsIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKKyAgICB2b2lkIHNlbmQoY29uc3QgU3RyaW5nJiBib2R5LCBFeGNlcHRpb25D
b2RlJik7CiAgICAgdm9pZCBhYm9ydCgpOwotICAgIHZvaWQgc2V0UmVxdWVzdEhlYWRlcihjb25z
dCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyAmdmFsdWUpOworICAgIHZvaWQgc2V0UmVxdWVz
dEhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyAmdmFsdWUsIEV4Y2VwdGlv
bkNvZGUmKTsKICAgICB2b2lkIG92ZXJyaWRlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBvdmVycmlk
ZSk7CiAgICAgU3RyaW5nIGdldEFsbFJlc3BvbnNlSGVhZGVycygpIGNvbnN0OwogICAgIFN0cmlu
ZyBnZXRSZXNwb25zZUhlYWRlcihjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0Owo=
</data>
<flag name="review"
          id="3391"
          type_id="1"
          status="+"
          setter="eric"
    />
          </attachment>
      

    </bug>

</bugzilla>