<?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>141881</bug_id>
          
          <creation_ts>2015-02-22 17:13:52 -0800</creation_ts>
          <short_desc>Function name scope is only created on the function instance that triggered parsing rather than on every function instance that needs it</short_desc>
          <delta_ts>2015-02-23 10:14:40 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>141887</blocked>
    
    <blocked>141174</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1071098</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-22 17:13:52 -0800</bug_when>
    <thetext>Our bytecode generation has a tendency to mistreat the reexecutability of closures.  For example, we have this silly tendency to use the scope of the current execution of a function to find the symbol tables of all future executions.  Of course, this just barely works.  And because of the tendency to mistreat the reexecutability of closures, and our silly tendency to use the current scope for predicting future resolutions, we have a hilarious bug where only the first execution of a function that needs a name scope actually gets that name scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071099</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-22 17:15:09 -0800</bug_when>
    <thetext>Test case below.  Note that this passes on the first execution of check(); the failure is experienced on execution #2.  This has nothing to do with JITing; it&apos;s just our mistreatment of the reexecutability of closures.

function foo() {
    return function bar(str) {
        var barBefore = bar;
        var result = eval(str);
        return [
            barBefore,
            bar,
            function () {
                return bar;
            },
            result
        ];
    }
}

function check() {
    var bar = foo();
    
    function verify(result, barAfter, evalResult) {
        if (result[0] !== bar)
            throw &quot;Error: bad first entry: &quot; + result[0];
        if (result[1] !== barAfter)
            throw &quot;Error: bad first entry: &quot; + result[1];
        var subResult = result[2]();
        if (subResult !== barAfter)
            throw &quot;Error: bad second entry: &quot; + result[2] + &quot;; returned: &quot; + subResult;
        if (result[3] !== evalResult)
            throw &quot;Error: bad third entry: &quot; + result[3] + &quot;; expected: &quot; + evalResult;
    }
    
    verify(bar(&quot;42&quot;), bar, 42);
    verify(bar(&quot;bar&quot;), bar, bar);
    verify(bar(&quot;var bar = 42; function fuzz() { return bar; }; fuzz()&quot;), 42, 42);
}

for (var i = 0; i &lt; 100; ++i)
    check();</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071100</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-22 17:29:09 -0800</bug_when>
    <thetext>Ideally, the way this would work is that we&apos;d have the bytecode create the scope. But that would break the current hack where we create the name scope just before bytecode linking so that linking sees the scope in the way.

Maybe a correct solution would be:

1) Bytecode creates the scope at the prologue.
2) Bytecode linking is given a phony function name scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071109</commentid>
    <comment_count>3</comment_count>
      <attachid>247090</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-22 18:20:12 -0800</bug_when>
    <thetext>Created attachment 247090
the basic idea

This code is pretty shameful, but it&apos;s less wrong than trunk.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071117</commentid>
    <comment_count>4</comment_count>
      <attachid>247092</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-22 19:12:49 -0800</bug_when>
    <thetext>Created attachment 247092
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071119</commentid>
    <comment_count>5</comment_count>
      <attachid>247093</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-22 19:27:28 -0800</bug_when>
    <thetext>Created attachment 247093
the patch

New patch because I realized that the bug title was incoherent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071120</commentid>
    <comment_count>6</comment_count>
      <attachid>247094</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-22 19:28:31 -0800</bug_when>
    <thetext>Created attachment 247094
the patch

It was still incoherent. Maybe it&apos;s more coherent now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071231</commentid>
    <comment_count>7</comment_count>
      <attachid>247094</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-02-23 10:10:26 -0800</bug_when>
    <thetext>Comment on attachment 247094
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071233</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-23 10:14:40 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/180506</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247090</attachid>
            <date>2015-02-22 18:20:12 -0800</date>
            <delta_ts>2015-02-22 19:12:49 -0800</delta_ts>
            <desc>the basic idea</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODA0OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjA4LDYgKzIwOCwxNiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgZW1pdE9wY29kZShvcF9lbnRlcik7CiAKICAgICBhbGxvY2F0ZUFuZEVtaXRT
Y29wZSgpOworICAgIAorICAgIGlmIChmdW5jdGlvbk5hbWVJc0luU2NvcGUoZnVuY3Rpb25Ob2Rl
LT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uTW9kZSgpKQorICAgICAgICAmJiBmdW5j
dGlvbk5hbWVTY29wZUlzRHluYW1pYyhjb2RlQmxvY2stPnVzZXNFdmFsKCksIGNvZGVCbG9jay0+
aXNTdHJpY3RNb2RlKCkpKSB7CisgICAgICAgIC8vIFdoZW4gd2UgZG8gdGhpcywgd2Ugc2hvdWxk
IG1ha2Ugb3VyIGxvY2FsIHNjb3BlIHN0YWNrIGtub3cgYWJvdXQgdGhlIGZ1bmN0aW9uIG5hbWUg
c3ltYm9sCisgICAgICAgIC8vIHRhYmxlLiBDdXJyZW50bHkgdGhpcyB3b3JrcyBiZWNhdXNlIGJ5
dGVjb2RlIGxpbmtpbmcgY3JlYXRlcyBhIHBob255IG5hbWUgc2NvcGUuCisgICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODg1CisgICAg
ICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnaXN0ZXI7CisgICAgICAgIGNhbGxlZVJlZ2lzdGVyLnNl
dEluZGV4KEpTU3RhY2s6OkNhbGxlZSk7CisgICAgICAgIGVtaXRQdXNoRnVuY3Rpb25OYW1lU2Nv
cGUobV9zY29wZVJlZ2lzdGVyLmdldCgpLCBmdW5jdGlvbk5vZGUtPmlkZW50KCksICZjYWxsZWVS
ZWdpc3RlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICB9CiAKICAgICBpZiAobV9jb2Rl
QmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBtX3Nob3VsZEVtaXREZWJ1Z0hvb2tzKSB7
CiAgICAgICAgIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIgPSBhZGRWYXIoKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNw
cAkocmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMwLDcgKzgzMCw3IEBAIGZhaWxl
ZEpTT05QOgogICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5pbml0aWFsaXplR2xv
YmFsUHJvcGVydGllcyh2bSwgY2FsbEZyYW1lLCBzY29wZSkpCiAgICAgICAgIHJldHVybiBjaGVj
a2VkUmV0dXJuKGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJhbWUsIGVycm9y
KSk7CiAKLSAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+cHJlcGFyZUZvckV4ZWN1
dGlvbihjYWxsRnJhbWUsIG51bGxwdHIsICZzY29wZSwgQ29kZUZvckNhbGwpKQorICAgIGlmIChK
U09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwg
bnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1
cm4oY2FsbEZyYW1lLT52bSgpLnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXJyb3IpKTsKIAog
ICAgIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IHByb2dyYW0tPmNvZGVCbG9jaygpOwpA
QCAtODkwLDcgKzg5MCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKENhbGxG
cmEKIAogICAgIGlmIChpc0pTQ2FsbCkgewogICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6
Ci0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGZ1bmN0aW9uKSwgJnNjb3BlLCBDb2RlRm9yQ2FsbCk7CisgICAgICAgIEpTT2JqZWN0KiBj
b21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JF
eGVjdXRpb24oY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgc2NvcGUs
IENvZGVGb3JDYWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkgewog
ICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oY2FsbEZyYW1lLT52bSgpLnRocm93RXhj
ZXB0aW9uKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CiAgICAgICAgIH0KQEAgLTk2MSw3ICs5
NjEsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QoCiAKICAgICBp
ZiAoaXNKU0NvbnN0cnVjdCkgewogICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6Ci0gICAg
ICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhl
Y3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9u
Kj4oY29uc3RydWN0b3IpLCAmc2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QpOworICAgICAgICBKU09i
amVjdCogY29tcGlsZUVycm9yID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUt
PnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNvbnN0
cnVjdG9yKSwgc2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICBpZiAoVU5MSUtFTFko
ISFjb21waWxlRXJyb3IpKSB7CiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihjYWxs
RnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAg
ICAgICAgfQpAQCAtMTAxNCw3ICsxMDE0LDcgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJbnRlcnByZXRl
cjo6cHJlcGFyZUZvcgogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgpOwogCiAgICAg
Ly8gQ29tcGlsZSB0aGUgY2FsbGVlOgotICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhl
Y3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGZ1bmN0aW9uLCAmc2NvcGUs
IENvZGVGb3JDYWxsKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUt
PnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBmdW5jdGlvbiwgc2NvcGUsIENvZGVGb3JD
YWxsKTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgY2FsbEZyYW1lLT52bSgpLnRocm93RXhj
ZXB0aW9uKGNhbGxGcmFtZSwgZXJyb3IpOwogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3Vy
ZSgpOwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZShF
dmFsRXhlY3V0YQogICAgICAgICB9CiAgICAgfQogCi0gICAgSlNPYmplY3QqIGNvbXBpbGVFcnJv
ciA9IGV2YWwtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBudWxscHRyLCAmc2NvcGUs
IENvZGVGb3JDYWxsKTsKKyAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gZXZhbC0+cHJlcGFy
ZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIG51bGxwdHIsIHNjb3BlLCBDb2RlRm9yQ2FsbCk7CiAg
ICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRS
ZXR1cm4oY2FsbEZyYW1lLT52bSgpLnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgY29tcGlsZUVy
cm9yKSk7CiAgICAgRXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gZXZhbC0+Y29kZUJsb2NrKCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJl
dmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5NSw3ICs2OTUsNyBAQCBpbmxpbmUgY2hhciogbGlu
a0ZvcigKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3IoKnZtLCBr
aW5kLCBNdXN0Q2hlY2tBcml0eSwgcmVnaXN0ZXJzKTsKICAgICBlbHNlIHsKICAgICAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZSwg
JnNjb3BlLCBraW5kKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZSwgc2NvcGUsIGtpbmQp
OwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIHRocm93U3RhY2tPdmVyZmxvd0Vy
cm9yKGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZt
LT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtNzUzLDcgKzc1Myw3IEBAIGlubGluZSBjaGFy
KiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAogICAgIEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
ID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKICAgICBpZiAoVU5MSUtFTFkoIWV4ZWN1dGFibGUt
Pmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZnVu
Y3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZXhlY3V0
YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJl
cGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbiwgJnNjb3BlLCBraW5kKTsKKyAg
ICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhl
Y3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLCBzY29wZSwga2luZCk7CiAgICAgICAgIGlmIChl
cnJvcikgewogICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBlcnJv
cik7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENU
SVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTQs
NyArMTA5NCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxsKEV4ZWMKICAg
ICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtpbmQsIE11c3RD
aGVja0FyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAgICBlbHNlIHsK
ICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3Qq
IGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxs
ZWUsIGNhbGxlZSwgJnNjb3BlLCBraW5kKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVu
Y3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZSwg
c2NvcGUsIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICBMTElOVF9DQUxM
X1RIUk9XKGV4ZWMsIGVycm9yKTsKICAgICAgICAgY29kZUJsb2NrID0gZnVuY3Rpb25FeGVjdXRh
YmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxODA0OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzTnVtZXJpY0NvbXBhcmVG
dW5jdAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNhbGxEYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZTsKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxEYXRhLmpzLnNjb3Bl
OwogCi0gICAgSlNPYmplY3QqIGVycm9yID0gZXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlv
bihleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgJnNjb3BlLCBDb2RlRm9yQ2Fs
bCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gZXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlv
bihleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgc2NvcGUsIENvZGVGb3JDYWxs
KTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE4MDQ5
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTgsNyArMTk4LDcgQEAgdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0
YWxsQ29kZShDb2RlQgogfQogCiBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6bmV3Q29kZUJsb2NrRm9yKAotICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNG
dW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqKiBzY29wZSwgSlNPYmplY3QqJiBleGNlcHRpb24p
CisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwg
SlNTY29wZSogc2NvcGUsIEpTT2JqZWN0KiYgZXhjZXB0aW9uKQogewogICAgIFZNKiB2bSA9ICgq
c2NvcGUpLT52bSgpOwogCkBAIC0yMTIsNyArMjEyLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+
IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+
bV9ldmFsQ29kZUJsb2NrKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKICAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBFdmFsQ29kZUJsb2NrKAotICAgICAgICAgICAgZXhl
Y3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZEV2YWxDb2RlQmxvY2suZ2V0KCksICpzY29w
ZSwKKyAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFdmFsQ29k
ZUJsb2NrLmdldCgpLCBzY29wZSwKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnBy
b3ZpZGVyKCkpKTsKICAgICB9CiAgICAgCkBAIC0yMjIsNyArMjIyLDcgQEAgUGFzc1JlZlB0cjxD
b2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhl
Y3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2NrKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1
bmN0aW9uKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKAot
ICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZFByb2dyYW1Db2Rl
QmxvY2suZ2V0KCksICpzY29wZSwKKyAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUt
Pm1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKICAgICAgICAgICAgIGV4
ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0
Q29sdW1uKCkpKTsKICAgICB9CiAgICAgCkBAIC0yMzAsNyArMjMwLDcgQEAgUGFzc1JlZlB0cjxD
b2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9u
KTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4odGhpcyk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPmNvZGVC
bG9ja0ZvcihraW5kKSk7Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9ICgqc2Nv
cGUpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0g
c2NvcGUtPmdsb2JhbE9iamVjdCgpOwogICAgIFBhcnNlckVycm9yIGVycm9yOwogICAgIERlYnVn
Z2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1
Z2dlck9uIDogRGVidWdnZXJPZmY7CiAgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGds
b2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKQEAg
LTI0NywxMCArMjQ3LDEwIEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxl
OjoKIAogICAgIC8vIFBhcnNpbmcgcmV2ZWFscyB3aGV0aGVyIG91ciBmdW5jdGlvbiB1c2VzIGZl
YXR1cmVzIHRoYXQgcmVxdWlyZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIG5hbWUgb2JqZWN0IGluIHRo
ZSBzY29wZSBjaGFpbi4KICAgICAvLyBCZSBzdXJlIHRvIGFkZCB0aGlzIHNjb3BlIGJlZm9yZSBs
aW5raW5nIHRoZSBieXRlY29kZSBiZWNhdXNlIHRoaXMgc2NvcGUgd2lsbCBjaGFuZ2UgdGhlIHJl
c29sdXRpb24gZGVwdGggb2Ygbm9uLWxvY2FsIHZhcmlhYmxlcy4KLSAgICBpZiAoIWV4ZWN1dGFi
bGUtPm1fZGlkUGFyc2VGb3JUaGVGaXJzdFRpbWUpIHsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV9k
aWRQYXJzZUZvclRoZUZpcnN0VGltZSA9IHRydWU7Ci0gICAgICAgIGZ1bmN0aW9uLT5hZGROYW1l
U2NvcGVJZk5lZWRlZCgqdm0pOwotICAgICAgICAqc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGUoKTsK
KyAgICBpZiAoZnVuY3Rpb25OYW1lSXNJblNjb3BlKGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0
YWJsZS0+ZnVuY3Rpb25Nb2RlKCkpCisgICAgICAgICYmIGZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5h
bWljKGV4ZWN1dGFibGUtPnVzZXNFdmFsKCksIGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpKSkg
eworICAgICAgICBzY29wZSA9IEpTRnVuY3Rpb25OYW1lU2NvcGU6OmNyZWF0ZSgKKyAgICAgICAg
ICAgICp2bSwgc2NvcGUtPmdsb2JhbE9iamVjdCgpLCBzY29wZSwgZXhlY3V0YWJsZS0+bmFtZSgp
LCBmdW5jdGlvbiwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKICAgICB9CiAgICAgCiAgICAgU291
cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKTsK
QEAgLTI1OCw3ICsyNTgsNyBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJs
ZTo6CiAgICAgdW5zaWduZWQgc3RhcnRDb2x1bW4gPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFy
dENvbHVtbigpOwogCiAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jaygK
LSAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssICpzY29wZSwgcHJvdmlkZXIs
IHNvdXJjZU9mZnNldCwgc3RhcnRDb2x1bW4pKTsKKyAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2ssIHNjb3BlLCBwcm92aWRlciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikp
OwogfQogCiBQYXNzUmVmUHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFj
ZW1lbnRDb2RlQmxvY2tGb3IoCkBAIC0zMTQsNyArMzE0LDcgQEAgc3RhdGljIHZvaWQgc2V0dXBK
SVQoVk0mIHZtLCBDb2RlQmxvY2sqIAogfQogCiBKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6
cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoCi0gICAgRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiwgSlNTY29wZSoqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2Nv
cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52
bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKQEAgLTM5Miw3ICszOTIsNiBAQCBG
dW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWCiAgICAgOiBTY3JpcHRFeGVj
dXRhYmxlKHZtLmZ1bmN0aW9uRXhlY3V0YWJsZVN0cnVjdHVyZS5nZXQoKSwgdm0sIHNvdXJjZSwg
dW5saW5rZWRFeGVjdXRhYmxlLT5pc0luU3RyaWN0Q29udGV4dCgpKQogICAgICwgbV91bmxpbmtl
ZEV4ZWN1dGFibGUodm0sIHRoaXMsIHVubGlua2VkRXhlY3V0YWJsZSkKICAgICAsIG1fYm9keUlu
Y2x1ZGVzQnJhY2VzKGJvZHlJbmNsdWRlc0JyYWNlcykKLSAgICAsIG1fZGlkUGFyc2VGb3JUaGVG
aXJzdFRpbWUoZmFsc2UpCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQoIXNvdXJjZS5pc051bGwoKSk7
CiAgICAgQVNTRVJUKHNvdXJjZS5sZW5ndGgoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxODA0OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5Nywx
MCArMzk3LDEwIEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lkIGluc3RhbGxDb2RlKENvZGVC
bG9jayopOwotICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2tGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCwgSlNGdW5jdGlvbiosIEpTU2NvcGUqKiwgSlNPYmplY3QqJiBleGNl
cHRpb24pOworICAgIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBuZXdDb2RlQmxvY2tGb3IoQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCwgSlNGdW5jdGlvbiosIEpTU2NvcGUqLCBKU09iamVjdComIGV4Y2Vw
dGlvbik7CiAgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld1JlcGxhY2VtZW50Q29kZUJsb2Nr
Rm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIAotICAgIEpTT2JqZWN0KiBwcmVwYXJl
Rm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2Nv
cGUqKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIEpTT2JqZWN0KiBw
cmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24s
IEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBpZiAoaGFzSklUQ29kZUZvcihraW5kKSkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAt
NDEwLDcgKzQxMCw3IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4g
dm9pZCBmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0b3ImJik7CiAKIHByaXZhdGU6Ci0gICAgSlNPYmpl
Y3QqIHByZXBhcmVGb3JFeGVjdXRpb25JbXBsKEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBKU1Nj
b3BlKiosIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIEpTT2JqZWN0KiBwcmVwYXJlRm9y
RXhlY3V0aW9uSW1wbChFeGVjU3RhdGUqLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIENvZGVTcGVj
aWFsaXphdGlvbktpbmQpOwogCiBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihW
TSYgdm0pCkBAIC02NjIsNyArNjYyLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAgIGJvb2wgbV9ib2R5SW5jbHVkZXNCcmFj
ZXM7Ci0gICAgYm9vbCBtX2RpZFBhcnNlRm9yVGhlRmlyc3RUaW1lOwogICAgIFJlZlB0cjxUeXBl
U2V0PiBtX3JldHVyblN0YXRlbWVudFR5cGVTZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxODA0OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAg
LTc2LDggKzc2LDYgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyBkaXNw
bGF5TmFtZShFeGVjU3RhdGUqKTsKICAgICBjb25zdCBTdHJpbmcgY2FsY3VsYXRlZERpc3BsYXlO
YW1lKEV4ZWNTdGF0ZSopOwogCi0gICAgdm9pZCBhZGROYW1lU2NvcGVJZk5lZWRlZChWTSYpOwot
CiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUoKSBjb25zdCB7IHJldHVybiBtX2V4ZWN1
dGFibGUuZ2V0KCk7IH0KIAogICAgIC8vIFRvIGNhbGwgZWl0aGVyIG9mIHRoZXNlIG1ldGhvZHMg
aW5jbHVkZSBFeGVjdXRhYmxlLmgK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247092</attachid>
            <date>2015-02-22 19:12:49 -0800</date>
            <delta_ts>2015-02-22 19:27:28 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19583</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNDkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE1LTAyLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RnVuY3Rpb24gbmFtZSBzY29wZSBpcyBvbmx5IGNyZWF0ZWQgb24gdGhlIGZ1bmN0aW9uIGV4ZWN1
dGlvbiBvZiB0aGUgZnVuY3Rpb24gdGhhdCBuZWVkcyBpdAorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBQcmV2aW91c2x5IHdlIG9ubHkgY3Jl
YXRlZCB0aGUgZnVuY3Rpb24gbmFtZSBzY29wZSBpbiBhIHdheSB0aGF0IG1hZGUgaXQgdmlzaWJs
ZSB0byB0aGUKKyAgICAgICAgZnVuY3Rpb24gdGhhdCB0cmlnZ2VyZWQgcGFyc2luZy9saW5raW5n
IG9mIHRoZSBleGVjdXRhYmxlL2NvZGVCbG9jaywgYW5kIHRvIHRoZSBsaW5rZXIgZm9yCisgICAg
ICAgIHRoYXQgY29kZSBibG9jay4gVGhpcyB3YXMgc29ydCBvZiB0aGUgYmFyZSBtaW5pbXVtIGZv
ciB0aGUgZmVhdHVyZSB0byBhcHBlYXIgdG8gd29yayByaWdodCB0bworICAgICAgICBzeW50aGV0
aWMgdGVzdHMuCisKKyAgICAgICAgVGhlcmUgYXJlIHR3byB2YWxpZCAidGltZXMiIHRvIGNyZWF0
ZSB0aGUgZnVuY3Rpb24gbmFtZSBzY29wZS4gRWl0aGVyIGl0J3MgY3JlYXRlZCBmb3IgZWFjaAor
ICAgICAgICBKU0Z1bmN0aW9uIGluc3RhbmNlIHRoYXQgbmVlZHMgYSBuYW1lIHNjb3BlLCBvciBp
dCdzIGNyZWF0ZWQgZm9yIGVhY2ggZXhlY3V0aW9uIG9mIHN1Y2ggYQorICAgICAgICBKU0Z1bmN0
aW9uLiBUaGlzIGNoYW5nZSBjaG9vc2VzIHRoZSBsYXR0ZXIsIGJlY2F1c2UgaXQgaGFwcGVucyB0
byBiZSB0aGUgZWFzaWVzdCB0byBpbXBsZW1lbnQKKyAgICAgICAgd2l0aCB3aGF0IHdlIGhhdmUg
cmlnaHQgbm93LiBJIG9wZW5lZCBhIGJ1ZyBmb3Igb3B0aW1pemluZyB0aGlzIGlmIHdlIGV2ZXIg
bmVlZCB0bzoKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MTg4Ny4KKyAgICAgICAgCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJh
dG9yKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChK
U0M6OkludGVycHJldGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4
ZWN1dGVDYWxsKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3Qp
OgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6cHJlcGFyZUZvclJlcGVhdENhbGwpOgorICAg
ICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQ
YXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIHJ1
bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjppc051bWVyaWNDb21wYXJl
RnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChK
U0M6OlNjcmlwdEV4ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNj
cmlwdEV4ZWN1dGFibGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKEpTQzo6
RnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAqIHJ1bnRp
bWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJl
Rm9yRXhlY3V0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAg
ICAoSlNDOjpKU0Z1bmN0aW9uOjphZGROYW1lU2NvcGVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAg
ICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2Z1bmN0
aW9uLW5hbWUtc2NvcGUuanM6IEFkZGVkLgorICAgICAgICAoY2hlY2sudmVyaWZ5KToKKyAgICAg
ICAgKGNoZWNrKToKKwogMjAxNS0wMi0yMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBw
bGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEdlbmVyYXRlIFByZXZpZXdzIG1vcmUg
b2Z0ZW4gZm9yIFJlbW90ZU9iamVjdCBpbnRlcmFjdGlvbgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJ
KHJldmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNiArMjA4LDE5IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICBlbWl0T3Bjb2Rl
KG9wX2VudGVyKTsKIAogICAgIGFsbG9jYXRlQW5kRW1pdFNjb3BlKCk7CisgICAgCisgICAgaWYg
KGZ1bmN0aW9uTmFtZUlzSW5TY29wZShmdW5jdGlvbk5vZGUtPmlkZW50KCksIGZ1bmN0aW9uTm9k
ZS0+ZnVuY3Rpb25Nb2RlKCkpCisgICAgICAgICYmIGZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5hbWlj
KGNvZGVCbG9jay0+dXNlc0V2YWwoKSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkpIHsKKyAg
ICAgICAgLy8gV2hlbiB3ZSBkbyB0aGlzLCB3ZSBzaG91bGQgbWFrZSBvdXIgbG9jYWwgc2NvcGUg
c3RhY2sga25vdyBhYm91dCB0aGUgZnVuY3Rpb24gbmFtZSBzeW1ib2wKKyAgICAgICAgLy8gdGFi
bGUuIEN1cnJlbnRseSB0aGlzIHdvcmtzIGJlY2F1c2UgYnl0ZWNvZGUgbGlua2luZyBjcmVhdGVz
IGEgcGhvbnkgbmFtZSBzY29wZS4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4ODUKKyAgICAgICAgLy8gQWxzbywgd2UgY291bGQg
Y3JlYXRlIHRoZSBzY29wZSBvbmNlIHBlciBKU0Z1bmN0aW9uIGluc3RhbmNlIHRoYXQgbmVlZHMg
aXQuIFRoYXQgd291bGRuJ3QKKyAgICAgICAgLy8gYmUgYW55IG1vcmUgY29ycmVjdCwgYnV0IGl0
IHdvdWxkIGJlIG1vcmUgcGVyZm9ybWFudC4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4ODcKKyAgICAgICAgUmVnaXN0ZXJJRCBj
YWxsZWVSZWdpc3RlcjsKKyAgICAgICAgY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNTdGFjazo6
Q2FsbGVlKTsKKyAgICAgICAgZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShtX3Njb3BlUmVnaXN0
ZXIsIGZ1bmN0aW9uTm9kZS0+aWRlbnQoKSwgJmNhbGxlZVJlZ2lzdGVyLCBSZWFkT25seSB8IERv
bnREZWxldGUpOworICAgIH0KIAogICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVD
aGFpbigpIHx8IG1fc2hvdWxkRW1pdERlYnVnSG9va3MpIHsKICAgICAgICAgbV9sZXhpY2FsRW52
aXJvbm1lbnRSZWdpc3RlciA9IGFkZFZhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODA0OTApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MzAsNyArODMwLDcgQEAgZmFpbGVkSlNPTlA6CiAgICAgaWYgKEpTT2Jq
ZWN0KiBlcnJvciA9IHByb2dyYW0tPmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKHZtLCBjYWxs
RnJhbWUsIHNjb3BlKSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oY2FsbEZyYW1lLT52
bSgpLnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXJyb3IpKTsKIAotICAgIGlmIChKU09iamVj
dCogZXJyb3IgPSBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgbnVsbHB0
ciwgJnNjb3BlLCBDb2RlRm9yQ2FsbCkpCisgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dy
YW0tPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBudWxscHRyLCBzY29wZSwgQ29kZUZv
ckNhbGwpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihjYWxsRnJhbWUtPnZtKCkudGhy
b3dFeGNlcHRpb24oY2FsbEZyYW1lLCBlcnJvcikpOwogCiAgICAgUHJvZ3JhbUNvZGVCbG9jayog
Y29kZUJsb2NrID0gcHJvZ3JhbS0+Y29kZUJsb2NrKCk7CkBAIC04OTAsNyArODkwLDcgQEAgSlNW
YWx1ZSBJbnRlcnByZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogCiAgICAgaWYgKGlzSlNDYWxs
KSB7CiAgICAgICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgSlNPYmplY3QqIGNv
bXBpbGVFcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4
ZWN1dGlvbihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLCAmc2NvcGUs
IENvZGVGb3JDYWxsKTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNhbGxEYXRh
LmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLCBzY29wZSwgQ29kZUZvckNhbGwpOwogICAgICAg
ICBpZiAoVU5MSUtFTFkoISFjb21waWxlRXJyb3IpKSB7CiAgICAgICAgICAgICByZXR1cm4gY2hl
Y2tlZFJldHVybihjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjb21w
aWxlRXJyb3IpKTsKICAgICAgICAgfQpAQCAtOTYxLDcgKzk2MSw3IEBAIEpTT2JqZWN0KiBJbnRl
cnByZXRlcjo6ZXhlY3V0ZUNvbnN0cnVjdCgKIAogICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAg
ICAgICAgIC8vIENvbXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVF
cnJvciA9IGNvbnN0cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhl
Y3V0aW9uKGNhbGxGcmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksICZzY29w
ZSwgQ29kZUZvckNvbnN0cnVjdCk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBj
b25zdHJ1Y3REYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihj
YWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCBzY29wZSwgQ29kZUZv
ckNvbnN0cnVjdCk7CiAgICAgICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpIHsKICAg
ICAgICAgICAgIHJldHVybiBjaGVja2VkUmV0dXJuKGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2Vw
dGlvbihjYWxsRnJhbWUsIGNvbXBpbGVFcnJvcikpOwogICAgICAgICB9CkBAIC0xMDE0LDcgKzEw
MTQsNyBAQCBDYWxsRnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVwYXJlRm9yCiAgICAgICAg
IHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CiAKICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6
Ci0gICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhl
Y3V0aW9uKGNhbGxGcmFtZSwgZnVuY3Rpb24sICZzY29wZSwgQ29kZUZvckNhbGwpOworICAgIEpT
T2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihj
YWxsRnJhbWUsIGZ1bmN0aW9uLCBzY29wZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChlcnJvcikg
ewogICAgICAgICBjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBlcnJv
cik7CiAgICAgICAgIHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CkBAIC0xMDk3LDcgKzEwOTcs
NyBAQCBKU1ZhbHVlIEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gZXZhbC0+cHJlcGFyZUZvckV4
ZWN1dGlvbihjYWxsRnJhbWUsIG51bGxwdHIsICZzY29wZSwgQ29kZUZvckNhbGwpOworICAgIEpT
T2JqZWN0KiBjb21waWxlRXJyb3IgPSBldmFsLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFt
ZSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsKTsKICAgICBpZiAoVU5MSUtFTFkoISFjb21w
aWxlRXJyb3IpKQogICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihjYWxsRnJhbWUtPnZtKCku
dGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAgICBFdmFsQ29kZUJs
b2NrKiBjb2RlQmxvY2sgPSBldmFsLT5jb2RlQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgwNDkwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjk1LDcgKzY5NSw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKAogICAgICAgICBjb2RlUHRy
ID0gZXhlY3V0YWJsZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCBy
ZWdpc3RlcnMpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBh
cmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLCAmc2NvcGUsIGtpbmQpOworICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRp
b24oZXhlY0NhbGxlZSwgY2FsbGVlLCBzY29wZSwga2luZCk7CiAgICAgICAgIGlmIChlcnJvcikg
ewogICAgICAgICAgICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CiAgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNl
cHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KSk7CkBAIC03NTMsNyArNzUzLDcgQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rp
b24oCiAgICAgRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJs
ZSgpOwogICAgIGlmIChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkp
IHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0
aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmpl
Y3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWND
YWxsZWUsIGZ1bmN0aW9uLCAmc2NvcGUsIGtpbmQpOworICAgICAgICBKU09iamVjdCogZXJyb3Ig
PSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgZnVu
Y3Rpb24sIHNjb3BlLCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBl
eGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGVycm9yKTsKICAgICAgICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZy
b21DYWxsU2xvd1BhdGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
cmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA5NCw3ICsxMDk0LDcgQEAgaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICBjb2RlUHRyID0gZXhlY3V0
YWJsZS0+ZW50cnlwb2ludEZvcih2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIFJlZ2lzdGVyUHJl
c2VydmF0aW9uTm90UmVxdWlyZWQpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1
dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGV4ZWN1dGFibGUpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1
dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLCAmc2NvcGUsIGtp
bmQpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBh
cmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLCBzY29wZSwga2luZCk7CiAgICAgICAg
IGlmIChlcnJvcikKICAgICAgICAgICAgIExMSU5UX0NBTExfVEhST1coZXhlYywgZXJyb3IpOwog
ICAgICAgICBjb2RlQmxvY2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5k
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3Rv
dHlwZS5jcHAJKHJldmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBz
dGF0aWMgaW5saW5lIGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0CiAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlOwogICAg
IEpTU2NvcGUqIHNjb3BlID0gY2FsbERhdGEuanMuc2NvcGU7CiAKLSAgICBKU09iamVjdCogZXJy
b3IgPSBleGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZnVuY3Rpb24pLCAmc2NvcGUsIENvZGVGb3JDYWxsKTsKKyAgICBKU09iamVjdCogZXJy
b3IgPSBleGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZnVuY3Rpb24pLCBzY29wZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChlcnJvcikKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTMwLDggKzMwLDkgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNs
dWRlICJERkdEcml2ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJMTEludEVudHJ5
cG9pbnQuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbk5h
bWVTY29wZS5oIgorI2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIlBhcnNl
ci5oIgogI2luY2x1ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJUeXBlUHJvZmls
ZXIuaCIKQEAgLTE5OCw5ICsxOTksOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxD
b2RlKENvZGVCCiB9CiAKIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpu
ZXdDb2RlQmxvY2tGb3IoCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiwgSlNTY29wZSoqIHNjb3BlLCBKU09iamVjdComIGV4Y2VwdGlvbikKKyAg
ICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Nj
b3BlKiBzY29wZSwgSlNPYmplY3QqJiBleGNlcHRpb24pCiB7Ci0gICAgVk0qIHZtID0gKCpzY29w
ZSktPnZtKCk7CisgICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7CiAKICAgICBBU1NFUlQodm0tPmhl
YXAuaXNEZWZlcnJlZCgpKTsKICAgICBBU1NFUlQoc3RhcnRDb2x1bW4oKSAhPSBVSU5UX01BWCk7
CkBAIC0yMTIsNyArMjEzLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFi
bGU6OgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2Nr
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBFdmFsQ29kZUJsb2NrKAotICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0
YWJsZS0+bV91bmxpbmtlZEV2YWxDb2RlQmxvY2suZ2V0KCksICpzY29wZSwKKyAgICAgICAgICAg
IGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmdldCgpLCBz
Y29wZSwKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKICAg
ICB9CiAgICAgCkBAIC0yMjIsNyArMjIzLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlw
dEV4ZWN1dGFibGU6OgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9wcm9n
cmFtQ29kZUJsb2NrKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKICAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKAotICAgICAgICAgICAgZXhl
Y3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksICpz
Y29wZSwKKyAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRQcm9n
cmFtQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJj
ZSgpLnByb3ZpZGVyKCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKICAg
ICB9CiAgICAgCkBAIC0yMzAsNyArMjMxLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlw
dEV4ZWN1dGFibGU6OgogICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhp
cyk7CiAgICAgUkVMRUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKSk7
Ci0gICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9ICgqc2NvcGUpLT5nbG9iYWxPYmpl
Y3QoKTsKKyAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9i
amVjdCgpOwogICAgIFBhcnNlckVycm9yIGVycm9yOwogICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dl
ck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdn
ZXJPZmY7CiAgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFz
UHJvZmlsZXIoKSA/IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKQEAgLTI0NywxMCArMjQ4LDEz
IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKIAogICAgIC8vIFBh
cnNpbmcgcmV2ZWFscyB3aGV0aGVyIG91ciBmdW5jdGlvbiB1c2VzIGZlYXR1cmVzIHRoYXQgcmVx
dWlyZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIG5hbWUgb2JqZWN0IGluIHRoZSBzY29wZSBjaGFpbi4K
ICAgICAvLyBCZSBzdXJlIHRvIGFkZCB0aGlzIHNjb3BlIGJlZm9yZSBsaW5raW5nIHRoZSBieXRl
Y29kZSBiZWNhdXNlIHRoaXMgc2NvcGUgd2lsbCBjaGFuZ2UgdGhlIHJlc29sdXRpb24gZGVwdGgg
b2Ygbm9uLWxvY2FsIHZhcmlhYmxlcy4KLSAgICBpZiAoIWV4ZWN1dGFibGUtPm1fZGlkUGFyc2VG
b3JUaGVGaXJzdFRpbWUpIHsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV9kaWRQYXJzZUZvclRoZUZp
cnN0VGltZSA9IHRydWU7Ci0gICAgICAgIGZ1bmN0aW9uLT5hZGROYW1lU2NvcGVJZk5lZWRlZCgq
dm0pOwotICAgICAgICAqc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGUoKTsKKyAgICBpZiAoZnVuY3Rp
b25OYW1lSXNJblNjb3BlKGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rpb25N
b2RlKCkpCisgICAgICAgICYmIGZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5hbWljKGV4ZWN1dGFibGUt
PnVzZXNFdmFsKCksIGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpKSkgeworICAgICAgICAvLyBX
ZSBzaG91bGRuJ3QgaGF2ZSB0byBkbyB0aGlzLiBCdXQgd2UgZG8sIGJlY2F1c2UgYnl0ZWNvZGUg
bGlua2luZyByZXF1aXJlcyBhIHJlYWwgc2NvcGUKKyAgICAgICAgLy8gY2hhaW4uCisgICAgICAg
IC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODg1
CisgICAgICAgIHNjb3BlID0gSlNGdW5jdGlvbk5hbWVTY29wZTo6Y3JlYXRlKAorICAgICAgICAg
ICAgKnZtLCBzY29wZS0+Z2xvYmFsT2JqZWN0KCksIHNjb3BlLCBleGVjdXRhYmxlLT5uYW1lKCks
IGZ1bmN0aW9uLCBSZWFkT25seSB8IERvbnREZWxldGUpOwogICAgIH0KICAgICAKICAgICBTb3Vy
Y2VQcm92aWRlciogcHJvdmlkZXIgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpOwpA
QCAtMjU4LDcgKzI2Miw3IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxl
OjoKICAgICB1bnNpZ25lZCBzdGFydENvbHVtbiA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0
Q29sdW1uKCk7CiAKICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKAot
ICAgICAgICBleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgKnNjb3BlLCBwcm92aWRlciwg
c291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOworICAgICAgICBleGVjdXRhYmxlLCB1bmxpbmtl
ZENvZGVCbG9jaywgc2NvcGUsIHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7
CiB9CiAKIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNl
bWVudENvZGVCbG9ja0ZvcigKQEAgLTMxNCw3ICszMTgsNyBAQCBzdGF0aWMgdm9pZCBzZXR1cEpJ
VChWTSYgdm0sIENvZGVCbG9jayogCiB9CiAKIEpTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpw
cmVwYXJlRm9yRXhlY3V0aW9uSW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24q
IGZ1bmN0aW9uLCBKU1Njb3BlKiogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
KyAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29w
ZSwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CiAgICAgRGVmZXJHQyBkZWZlckdDKHZtLmhlYXApOwpAQCAtMzkyLDcgKzM5Niw2IEBAIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFYKICAgICA6IFNjcmlwdEV4ZWN1
dGFibGUodm0uZnVuY3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCB2bSwgc291cmNlLCB1
bmxpbmtlZEV4ZWN1dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX3VubGlua2Vk
RXhlY3V0YWJsZSh2bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlKQogICAgICwgbV9ib2R5SW5j
bHVkZXNCcmFjZXMoYm9keUluY2x1ZGVzQnJhY2VzKQotICAgICwgbV9kaWRQYXJzZUZvclRoZUZp
cnN0VGltZShmYWxzZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghc291cmNlLmlzTnVsbCgpKTsK
ICAgICBBU1NFUlQoc291cmNlLmxlbmd0aCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDEw
ICszOTcsMTAgQEAgcHVibGljOgogICAgIH0KIAogICAgIHZvaWQgaW5zdGFsbENvZGUoQ29kZUJs
b2NrKik7Ci0gICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSoqLCBKU09iamVjdComIGV4Y2Vw
dGlvbik7CisgICAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0
aW9uKTsKICAgICBQYXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tG
b3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgCi0gICAgSlNPYmplY3QqIHByZXBhcmVG
b3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29w
ZSoqIHNjb3BlLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgSlNPYmplY3QqIHBy
ZXBhcmVGb3JFeGVjdXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwg
SlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CiAgICAg
ICAgIGlmIChoYXNKSVRDb2RlRm9yKGtpbmQpKQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00
MTAsNyArNDEwLDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2
b2lkIGZvckVhY2hDb2RlQmxvY2soRnVuY3RvciYmKTsKIAogcHJpdmF0ZToKLSAgICBKU09iamVj
dCogcHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbiosIEpTU2Nv
cGUqKiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgSlNPYmplY3QqIHByZXBhcmVGb3JF
eGVjdXRpb25JbXBsKEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBKU1Njb3BlKiwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZN
JiB2bSkKQEAgLTY2Miw3ICs2NjIsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgYm9vbCBtX2JvZHlJbmNsdWRlc0JyYWNl
czsKLSAgICBib29sIG1fZGlkUGFyc2VGb3JUaGVGaXJzdFRpbWU7CiAgICAgUmVmUHRyPFR5cGVT
ZXQ+IG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODA0OTApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzUsNyArMzUsNiBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0Jv
dW5kRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgotI2luY2x1ZGUg
IkpTRnVuY3Rpb25OYW1lU2NvcGUuaCIgCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJKU05vdEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTEw
OSwxNiArMTA4LDYgQEAgdm9pZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAog
ICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5n
dGgpLCBEb250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKLXZvaWQgSlNGdW5j
dGlvbjo6YWRkTmFtZVNjb3BlSWZOZWVkZWQoVk0mIHZtKQotewotICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2V4ZWN1dGFi
bGUuZ2V0KCkpOwotICAgIGlmICghZnVuY3Rpb25OYW1lSXNJblNjb3BlKGV4ZWN1dGFibGUtPm5h
bWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCkpKQotICAgICAgICByZXR1cm47Ci0gICAg
aWYgKCFmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhleGVjdXRhYmxlLT51c2VzRXZhbCgpLCBl
eGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXRTY29w
ZSh2bSwgSlNGdW5jdGlvbk5hbWVTY29wZTo6Y3JlYXRlKHZtLCBzY29wZSgpLT5nbG9iYWxPYmpl
Y3QoKSwgc2NvcGUoKSwgZXhlY3V0YWJsZS0+bmFtZSgpLCB0aGlzLCBSZWFkT25seSB8IERvbnRE
ZWxldGUpKTsKLX0KLQogSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0
aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogewogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gY3JlYXRlKHZt
LCBleGVjdXRhYmxlLCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4ICs3
Niw2IEBAIHB1YmxpYzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgZGlzcGxheU5hbWUo
RXhlY1N0YXRlKik7CiAgICAgY29uc3QgU3RyaW5nIGNhbGN1bGF0ZWREaXNwbGF5TmFtZShFeGVj
U3RhdGUqKTsKIAotICAgIHZvaWQgYWRkTmFtZVNjb3BlSWZOZWVkZWQoVk0mKTsKLQogICAgIEV4
ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlLmdl
dCgpOyB9CiAKICAgICAvLyBUbyBjYWxsIGVpdGhlciBvZiB0aGVzZSBtZXRob2RzIGluY2x1ZGUg
RXhlY3V0YWJsZS5oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z1
bmN0aW9uLW5hbWUtc2NvcGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9mdW5jdGlvbi1uYW1lLXNjb3BlLmpzCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdW5jdGlvbi1uYW1lLXNjb3BlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzggQEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICByZXR1
cm4gZnVuY3Rpb24gYmFyKHN0cikgeworICAgICAgICB2YXIgYmFyQmVmb3JlID0gYmFyOworICAg
ICAgICB2YXIgcmVzdWx0ID0gZXZhbChzdHIpOworICAgICAgICByZXR1cm4gWworICAgICAgICAg
ICAgYmFyQmVmb3JlLAorICAgICAgICAgICAgYmFyLAorICAgICAgICAgICAgZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgICAgIHJldHVybiBiYXI7CisgICAgICAgICAgICB9LAorICAgICAgICAg
ICAgcmVzdWx0CisgICAgICAgIF07CisgICAgfQorfQorCitmdW5jdGlvbiBjaGVjaygpIHsKKyAg
ICB2YXIgYmFyID0gZm9vKCk7CisgICAgCisgICAgZnVuY3Rpb24gdmVyaWZ5KHJlc3VsdCwgYmFy
QWZ0ZXIsIGV2YWxSZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdFswXSAhPT0gYmFyKQorICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZmlyc3QgZW50cnk6ICIgKyByZXN1bHRbMF07Cisg
ICAgICAgIGlmIChyZXN1bHRbMV0gIT09IGJhckFmdGVyKQorICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgZmlyc3QgZW50cnk6ICIgKyByZXN1bHRbMV07CisgICAgICAgIHZhciBzdWJSZXN1
bHQgPSByZXN1bHRbMl0oKTsKKyAgICAgICAgaWYgKHN1YlJlc3VsdCAhPT0gYmFyQWZ0ZXIpCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBzZWNvbmQgZW50cnk6ICIgKyByZXN1bHRbMl0g
KyAiOyByZXR1cm5lZDogIiArIHN1YlJlc3VsdDsKKyAgICAgICAgaWYgKHJlc3VsdFszXSAhPT0g
ZXZhbFJlc3VsdCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHRoaXJkIGVudHJ5OiAi
ICsgcmVzdWx0WzNdICsgIjsgZXhwZWN0ZWQ6ICIgKyBldmFsUmVzdWx0OworICAgIH0KKyAgICAK
KyAgICB2ZXJpZnkoYmFyKCI0MiIpLCBiYXIsIDQyKTsKKyAgICB2ZXJpZnkoYmFyKCJiYXIiKSwg
YmFyLCBiYXIpOworICAgIHZlcmlmeShiYXIoInZhciBiYXIgPSA0MjsgZnVuY3Rpb24gZnV6eigp
IHsgcmV0dXJuIGJhcjsgfTsgZnV6eigpIiksIDQyLCA0Mik7Cit9CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwOyArK2kpCisgICAgY2hlY2soKTsKKwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247093</attachid>
            <date>2015-02-22 19:27:28 -0800</date>
            <delta_ts>2015-02-22 19:28:31 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19614</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNDkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE1LTAyLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RnVuY3Rpb24gbmFtZSBzY29wZSBpcyBvbmx5IGNyZWF0ZWQgb24gdGhlICJmaXJzdCIgZnVuY3Rp
b24gZXhlY3V0aW9uIG9mIHRoZSBmdW5jdGlvbiB0aGF0IG5lZWRzIGl0LCBpbnN0ZWFkIG9mIGV2
ZXJ5IHRpbWUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0MTg4MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAK
KyAgICAgICAgUHJldmlvdXNseSB3ZSBvbmx5IGNyZWF0ZWQgdGhlIGZ1bmN0aW9uIG5hbWUgc2Nv
cGUgaW4gYSB3YXkgdGhhdCBtYWRlIGl0IHZpc2libGUgdG8gdGhlCisgICAgICAgIGZ1bmN0aW9u
IHRoYXQgdHJpZ2dlcmVkIHBhcnNpbmcvbGlua2luZyBvZiB0aGUgZXhlY3V0YWJsZS9jb2RlQmxv
Y2ssIGFuZCB0byB0aGUgbGlua2VyIGZvcgorICAgICAgICB0aGF0IGNvZGUgYmxvY2suIFRoaXMg
d2FzIHNvcnQgb2YgdGhlIGJhcmUgbWluaW11bSBmb3IgdGhlIGZlYXR1cmUgdG8gYXBwZWFyIHRv
IHdvcmsgcmlnaHQgdG8KKyAgICAgICAgc3ludGhldGljIHRlc3RzLgorCisgICAgICAgIFRoZXJl
IGFyZSB0d28gdmFsaWQgInRpbWVzIiB0byBjcmVhdGUgdGhlIGZ1bmN0aW9uIG5hbWUgc2NvcGUu
IEVpdGhlciBpdCdzIGNyZWF0ZWQgZm9yIGVhY2gKKyAgICAgICAgSlNGdW5jdGlvbiBpbnN0YW5j
ZSB0aGF0IG5lZWRzIGEgbmFtZSBzY29wZSwgb3IgaXQncyBjcmVhdGVkIGZvciBlYWNoIGV4ZWN1
dGlvbiBvZiBzdWNoIGEKKyAgICAgICAgSlNGdW5jdGlvbi4gVGhpcyBjaGFuZ2UgY2hvb3NlcyB0
aGUgbGF0dGVyLCBiZWNhdXNlIGl0IGhhcHBlbnMgdG8gYmUgdGhlIGVhc2llc3QgdG8gaW1wbGVt
ZW50CisgICAgICAgIHdpdGggd2hhdCB3ZSBoYXZlIHJpZ2h0IG5vdy4gSSBvcGVuZWQgYSBidWcg
Zm9yIG9wdGltaXppbmcgdGhpcyBpZiB3ZSBldmVyIG5lZWQgdG86CisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE4ODcuCisgICAgICAgIAorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcik6CisgICAgICAgICogaW50ZXJwcmV0
ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpJbnRlcnByZXRlcjo6ZXhlY3V0ZSk6
CisgICAgICAgIChKU0M6OkludGVycHJldGVyOjpleGVjdXRlQ2FsbCk6CisgICAgICAgIChKU0M6
OkludGVycHJldGVyOjpleGVjdXRlQ29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0
ZXI6OnByZXBhcmVGb3JSZXBlYXRDYWxsKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5j
cHA6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6c2V0VXBDYWxsKToKKyAgICAgICAgKiBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6aXNOdW1lcmljQ29tcGFyZUZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50
aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpuZXdD
b2RlQmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9y
RXhlY3V0aW9uSW1wbCk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rp
b25FeGVjdXRhYmxlKToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAg
KEpTQzo6U2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbik6CisgICAgICAgICog
cnVudGltZS9KU0Z1bmN0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6YWRkTmFt
ZVNjb3BlSWZOZWVkZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNGdW5jdGlvbi5o
OgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9mdW5jdGlvbi1uYW1lLXNjb3BlLmpzOiBBZGRlZC4K
KyAgICAgICAgKGNoZWNrLnZlcmlmeSk6CisgICAgICAgIChjaGVjayk6CisKIDIwMTUtMDItMjEg
IEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5z
cGVjdG9yOiBHZW5lcmF0ZSBQcmV2aWV3cyBtb3JlIG9mdGVuIGZvciBSZW1vdGVPYmplY3QgaW50
ZXJhY3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODA0OTApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA4LDYgKzIwOCwxOSBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNv
ZGVHZW5lcmF0b3IoVk0mCiAgICAgZW1pdE9wY29kZShvcF9lbnRlcik7CiAKICAgICBhbGxvY2F0
ZUFuZEVtaXRTY29wZSgpOworICAgIAorICAgIGlmIChmdW5jdGlvbk5hbWVJc0luU2NvcGUoZnVu
Y3Rpb25Ob2RlLT5pZGVudCgpLCBmdW5jdGlvbk5vZGUtPmZ1bmN0aW9uTW9kZSgpKQorICAgICAg
ICAmJiBmdW5jdGlvbk5hbWVTY29wZUlzRHluYW1pYyhjb2RlQmxvY2stPnVzZXNFdmFsKCksIGNv
ZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpKSB7CisgICAgICAgIC8vIFdoZW4gd2UgZG8gdGhpcywg
d2Ugc2hvdWxkIG1ha2Ugb3VyIGxvY2FsIHNjb3BlIHN0YWNrIGtub3cgYWJvdXQgdGhlIGZ1bmN0
aW9uIG5hbWUgc3ltYm9sCisgICAgICAgIC8vIHRhYmxlLiBDdXJyZW50bHkgdGhpcyB3b3JrcyBi
ZWNhdXNlIGJ5dGVjb2RlIGxpbmtpbmcgY3JlYXRlcyBhIHBob255IG5hbWUgc2NvcGUuCisgICAg
ICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQx
ODg1CisgICAgICAgIC8vIEFsc28sIHdlIGNvdWxkIGNyZWF0ZSB0aGUgc2NvcGUgb25jZSBwZXIg
SlNGdW5jdGlvbiBpbnN0YW5jZSB0aGF0IG5lZWRzIGl0LiBUaGF0IHdvdWxkbid0CisgICAgICAg
IC8vIGJlIGFueSBtb3JlIGNvcnJlY3QsIGJ1dCBpdCB3b3VsZCBiZSBtb3JlIHBlcmZvcm1hbnQu
CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTQxODg3CisgICAgICAgIFJlZ2lzdGVySUQgY2FsbGVlUmVnaXN0ZXI7CisgICAgICAgIGNh
bGxlZVJlZ2lzdGVyLnNldEluZGV4KEpTU3RhY2s6OkNhbGxlZSk7CisgICAgICAgIGVtaXRQdXNo
RnVuY3Rpb25OYW1lU2NvcGUobV9zY29wZVJlZ2lzdGVyLCBmdW5jdGlvbk5vZGUtPmlkZW50KCks
ICZjYWxsZWVSZWdpc3RlciwgUmVhZE9ubHkgfCBEb250RGVsZXRlKTsKKyAgICB9CiAKICAgICBp
ZiAobV9jb2RlQmxvY2stPm5lZWRzRnVsbFNjb3BlQ2hhaW4oKSB8fCBtX3Nob3VsZEVtaXREZWJ1
Z0hvb2tzKSB7CiAgICAgICAgIG1fbGV4aWNhbEVudmlyb25tZW50UmVnaXN0ZXIgPSBhZGRWYXIo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcAkocmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMwLDcgKzgzMCw3
IEBAIGZhaWxlZEpTT05QOgogICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5pbml0
aWFsaXplR2xvYmFsUHJvcGVydGllcyh2bSwgY2FsbEZyYW1lLCBzY29wZSkpCiAgICAgICAgIHJl
dHVybiBjaGVja2VkUmV0dXJuKGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJh
bWUsIGVycm9yKSk7CiAKLSAgICBpZiAoSlNPYmplY3QqIGVycm9yID0gcHJvZ3JhbS0+cHJlcGFy
ZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIG51bGxwdHIsICZzY29wZSwgQ29kZUZvckNhbGwpKQor
ICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBwcm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNh
bGxGcmFtZSwgbnVsbHB0ciwgc2NvcGUsIENvZGVGb3JDYWxsKSkKICAgICAgICAgcmV0dXJuIGNo
ZWNrZWRSZXR1cm4oY2FsbEZyYW1lLT52bSgpLnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXJy
b3IpKTsKIAogICAgIFByb2dyYW1Db2RlQmxvY2sqIGNvZGVCbG9jayA9IHByb2dyYW0tPmNvZGVC
bG9jaygpOwpAQCAtODkwLDcgKzg5MCw3IEBAIEpTVmFsdWUgSW50ZXJwcmV0ZXI6OmV4ZWN1dGVD
YWxsKENhbGxGcmEKIAogICAgIGlmIChpc0pTQ2FsbCkgewogICAgICAgICAvLyBDb21waWxlIHRo
ZSBjYWxsZWU6Ci0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5m
dW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBqc0Nhc3Q8
SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgJnNjb3BlLCBDb2RlRm9yQ2FsbCk7CisgICAgICAgIEpT
T2JqZWN0KiBjb21waWxlRXJyb3IgPSBjYWxsRGF0YS5qcy5mdW5jdGlvbkV4ZWN1dGFibGUtPnBy
ZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9u
KSwgc2NvcGUsIENvZGVGb3JDYWxsKTsKICAgICAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVy
cm9yKSkgewogICAgICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oY2FsbEZyYW1lLT52bSgp
LnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgY29tcGlsZUVycm9yKSk7CiAgICAgICAgIH0KQEAg
LTk2MSw3ICs5NjEsNyBAQCBKU09iamVjdCogSW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3Qo
CiAKICAgICBpZiAoaXNKU0NvbnN0cnVjdCkgewogICAgICAgICAvLyBDb21waWxlIHRoZSBjYWxs
ZWU6Ci0gICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRhLmpzLmZ1
bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGpzQ2FzdDxK
U0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCAmc2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QpOworICAg
ICAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gY29uc3RydWN0RGF0YS5qcy5mdW5jdGlvbkV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNvbnN0cnVjdG9yKSwgc2NvcGUsIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICBpZiAo
VU5MSUtFTFkoISFjb21waWxlRXJyb3IpKSB7CiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJl
dHVybihjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjb21waWxlRXJy
b3IpKTsKICAgICAgICAgfQpAQCAtMTAxNCw3ICsxMDE0LDcgQEAgQ2FsbEZyYW1lQ2xvc3VyZSBJ
bnRlcnByZXRlcjo6cHJlcGFyZUZvcgogICAgICAgICByZXR1cm4gQ2FsbEZyYW1lQ2xvc3VyZSgp
OwogCiAgICAgLy8gQ29tcGlsZSB0aGUgY2FsbGVlOgotICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1
bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGZ1bmN0aW9u
LCAmc2NvcGUsIENvZGVGb3JDYWxsKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBmdW5jdGlvbiwgc2NvcGUs
IENvZGVGb3JDYWxsKTsKICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgY2FsbEZyYW1lLT52bSgp
LnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwgZXJyb3IpOwogICAgICAgICByZXR1cm4gQ2FsbEZy
YW1lQ2xvc3VyZSgpOwpAQCAtMTA5Nyw3ICsxMDk3LDcgQEAgSlNWYWx1ZSBJbnRlcnByZXRlcjo6
ZXhlY3V0ZShFdmFsRXhlY3V0YQogICAgICAgICB9CiAgICAgfQogCi0gICAgSlNPYmplY3QqIGNv
bXBpbGVFcnJvciA9IGV2YWwtPnByZXBhcmVGb3JFeGVjdXRpb24oY2FsbEZyYW1lLCBudWxscHRy
LCAmc2NvcGUsIENvZGVGb3JDYWxsKTsKKyAgICBKU09iamVjdCogY29tcGlsZUVycm9yID0gZXZh
bC0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIG51bGxwdHIsIHNjb3BlLCBDb2RlRm9y
Q2FsbCk7CiAgICAgaWYgKFVOTElLRUxZKCEhY29tcGlsZUVycm9yKSkKICAgICAgICAgcmV0dXJu
IGNoZWNrZWRSZXR1cm4oY2FsbEZyYW1lLT52bSgpLnRocm93RXhjZXB0aW9uKGNhbGxGcmFtZSwg
Y29tcGlsZUVycm9yKSk7CiAgICAgRXZhbENvZGVCbG9jayogY29kZUJsb2NrID0gZXZhbC0+Y29k
ZUJsb2NrKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5jcHAJKHJldmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY5NSw3ICs2OTUsNyBAQCBpbmxpbmUg
Y2hhciogbGlua0ZvcigKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRG
b3IoKnZtLCBraW5kLCBNdXN0Q2hlY2tBcml0eSwgcmVnaXN0ZXJzKTsKICAgICBlbHNlIHsKICAg
ICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2Fz
dDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVy
cm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUs
IGNhbGxlZSwgJnNjb3BlLCBraW5kKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGNhbGxlZSwgc2Nv
cGUsIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgIHRocm93U3RhY2tP
dmVyZmxvd0Vycm9yKGV4ZWMpOwogICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KHZtLT5nZXRDVElTdHViKHRocm93RXhjZXB0aW9uRnJvbUNhbGxTbG93UGF0aEdlbmVy
YXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwpAQCAtNzUzLDcgKzc1Myw3IEBAIGlu
bGluZSBjaGFyKiB2aXJ0dWFsRm9yV2l0aEZ1bmN0aW9uKAogICAgIEV4ZWN1dGFibGVCYXNlKiBl
eGVjdXRhYmxlID0gZnVuY3Rpb24tPmV4ZWN1dGFibGUoKTsKICAgICBpZiAoVU5MSUtFTFkoIWV4
ZWN1dGFibGUtPmhhc0pJVENvZGVGb3Ioa2luZCkpKSB7CiAgICAgICAgIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZnVuY3Rpb25FeGVjdXRhYmxlID0gc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxl
Kj4oZXhlY3V0YWJsZSk7Ci0gICAgICAgIEpTT2JqZWN0KiBlcnJvciA9IGZ1bmN0aW9uRXhlY3V0
YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihleGVjQ2FsbGVlLCBmdW5jdGlvbiwgJnNjb3BlLCBr
aW5kKTsKKyAgICAgICAgSlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVw
YXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0aW9uLCBzY29wZSwga2luZCk7CiAgICAg
ICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBlcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
dm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2FsbFNsb3dQYXRoR2VuZXJhdG9yKS5j
b2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwOTQsNyArMTA5NCw3IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgc2V0VXBDYWxs
KEV4ZWMKICAgICAgICAgY29kZVB0ciA9IGV4ZWN1dGFibGUtPmVudHJ5cG9pbnRGb3Iodm0sIGtp
bmQsIE11c3RDaGVja0FyaXR5LCBSZWdpc3RlclByZXNlcnZhdGlvbk5vdFJlcXVpcmVkKTsKICAg
ICBlbHNlIHsKICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUg
PSBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAg
SlNPYmplY3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9u
KGV4ZWNDYWxsZWUsIGNhbGxlZSwgJnNjb3BlLCBraW5kKTsKKyAgICAgICAgSlNPYmplY3QqIGVy
cm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUs
IGNhbGxlZSwgc2NvcGUsIGtpbmQpOwogICAgICAgICBpZiAoZXJyb3IpCiAgICAgICAgICAgICBM
TElOVF9DQUxMX1RIUk9XKGV4ZWMsIGVycm9yKTsKICAgICAgICAgY29kZUJsb2NrID0gZnVuY3Rp
b25FeGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCShyZXZpc2lvbiAxODA0OTAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTc4LDcgKzc4LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzTnVtZXJp
Y0NvbXBhcmVGdW5jdAogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGNhbGxE
YXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZTsKICAgICBKU1Njb3BlKiBzY29wZSA9IGNhbGxEYXRh
LmpzLnNjb3BlOwogCi0gICAgSlNPYmplY3QqIGVycm9yID0gZXhlY3V0YWJsZS0+cHJlcGFyZUZv
ckV4ZWN1dGlvbihleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgJnNjb3BlLCBD
b2RlRm9yQ2FsbCk7CisgICAgSlNPYmplY3QqIGVycm9yID0gZXhlY3V0YWJsZS0+cHJlcGFyZUZv
ckV4ZWN1dGlvbihleGVjLCBqc0Nhc3Q8SlNGdW5jdGlvbio+KGZ1bmN0aW9uKSwgc2NvcGUsIENv
ZGVGb3JDYWxsKTsKICAgICBpZiAoZXJyb3IpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlz
aW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwOSwgMjAxMCwgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMDksIDIwMTAsIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw4ICszMCw5IEBA
CiAjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiREZHRHJpdmVyLmgiCiAjaW5jbHVk
ZSAiSklULmgiCi0jaW5jbHVkZSAiTExJbnRFbnRyeXBvaW50LmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgorI2luY2x1ZGUgIkpTRnVuY3Rpb25OYW1lU2NvcGUuaCIKKyNpbmNsdWRlICJMTElu
dEVudHJ5cG9pbnQuaCIKICNpbmNsdWRlICJQYXJzZXIuaCIKICNpbmNsdWRlICJQcm9maWxlckRh
dGFiYXNlLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCkBAIC0xOTgsOSArMTk5LDkgQEAg
dm9pZCBTY3JpcHRFeGVjdXRhYmxlOjppbnN0YWxsQ29kZShDb2RlQgogfQogCiBQYXNzUmVmUHRy
PENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3Q29kZUJsb2NrRm9yKAotICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCwgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqKiBz
Y29wZSwgSlNPYmplY3QqJiBleGNlcHRpb24pCisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIEpTT2JqZWN0KiYgZXhj
ZXB0aW9uKQogewotICAgIFZNKiB2bSA9ICgqc2NvcGUpLT52bSgpOworICAgIFZNKiB2bSA9IHNj
b3BlLT52bSgpOwogCiAgICAgQVNTRVJUKHZtLT5oZWFwLmlzRGVmZXJyZWQoKSk7CiAgICAgQVNT
RVJUKHN0YXJ0Q29sdW1uKCkgIT0gVUlOVF9NQVgpOwpAQCAtMjEyLDcgKzIxMyw3IEBAIFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKICAgICAgICAgUkVMRUFTRV9BU1NF
UlQoIWV4ZWN1dGFibGUtPm1fZXZhbENvZGVCbG9jayk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJU
KCFmdW5jdGlvbik7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgRXZhbENvZGVCbG9jaygK
LSAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFdmFsQ29kZUJs
b2NrLmdldCgpLCAqc2NvcGUsCisgICAgICAgICAgICBleGVjdXRhYmxlLCBleGVjdXRhYmxlLT5t
X3VubGlua2VkRXZhbENvZGVCbG9jay5nZXQoKSwgc2NvcGUsCiAgICAgICAgICAgICBleGVjdXRh
YmxlLT5zb3VyY2UoKS5wcm92aWRlcigpKSk7CiAgICAgfQogICAgIApAQCAtMjIyLDcgKzIyMyw3
IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKICAgICAgICAgUkVM
RUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPm1fcHJvZ3JhbUNvZGVCbG9jayk7CiAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKCFmdW5jdGlvbik7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgUHJv
Z3JhbUNvZGVCbG9jaygKLSAgICAgICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5s
aW5rZWRQcm9ncmFtQ29kZUJsb2NrLmdldCgpLCAqc2NvcGUsCisgICAgICAgICAgICBleGVjdXRh
YmxlLCBleGVjdXRhYmxlLT5tX3VubGlua2VkUHJvZ3JhbUNvZGVCbG9jay5nZXQoKSwgc2NvcGUs
CiAgICAgICAgICAgICBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpLCBleGVjdXRhYmxl
LT5zb3VyY2UoKS5zdGFydENvbHVtbigpKSk7CiAgICAgfQogICAgIApAQCAtMjMwLDcgKzIzMSw3
IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKICAgICBSRUxFQVNF
X0FTU0VSVChmdW5jdGlvbik7CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
anNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KHRoaXMpOwogICAgIFJFTEVBU0VfQVNTRVJUKCFl
eGVjdXRhYmxlLT5jb2RlQmxvY2tGb3Ioa2luZCkpOwotICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QgPSAoKnNjb3BlKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCA9IHNjb3BlLT5nbG9iYWxPYmplY3QoKTsKICAgICBQYXJzZXJFcnJvciBl
cnJvcjsKICAgICBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlID0gZ2xvYmFsT2JqZWN0LT5oYXNE
ZWJ1Z2dlcigpID8gRGVidWdnZXJPbiA6IERlYnVnZ2VyT2ZmOwogICAgIFByb2ZpbGVyTW9kZSBw
cm9maWxlck1vZGUgPSBnbG9iYWxPYmplY3QtPmhhc1Byb2ZpbGVyKCkgPyBQcm9maWxlck9uIDog
UHJvZmlsZXJPZmY7CkBAIC0yNDcsMTAgKzI0OCwxMyBAQCBQYXNzUmVmUHRyPENvZGVCbG9jaz4g
U2NyaXB0RXhlY3V0YWJsZTo6CiAKICAgICAvLyBQYXJzaW5nIHJldmVhbHMgd2hldGhlciBvdXIg
ZnVuY3Rpb24gdXNlcyBmZWF0dXJlcyB0aGF0IHJlcXVpcmUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBu
YW1lIG9iamVjdCBpbiB0aGUgc2NvcGUgY2hhaW4uCiAgICAgLy8gQmUgc3VyZSB0byBhZGQgdGhp
cyBzY29wZSBiZWZvcmUgbGlua2luZyB0aGUgYnl0ZWNvZGUgYmVjYXVzZSB0aGlzIHNjb3BlIHdp
bGwgY2hhbmdlIHRoZSByZXNvbHV0aW9uIGRlcHRoIG9mIG5vbi1sb2NhbCB2YXJpYWJsZXMuCi0g
ICAgaWYgKCFleGVjdXRhYmxlLT5tX2RpZFBhcnNlRm9yVGhlRmlyc3RUaW1lKSB7Ci0gICAgICAg
IGV4ZWN1dGFibGUtPm1fZGlkUGFyc2VGb3JUaGVGaXJzdFRpbWUgPSB0cnVlOwotICAgICAgICBm
dW5jdGlvbi0+YWRkTmFtZVNjb3BlSWZOZWVkZWQoKnZtKTsKLSAgICAgICAgKnNjb3BlID0gZnVu
Y3Rpb24tPnNjb3BlKCk7CisgICAgaWYgKGZ1bmN0aW9uTmFtZUlzSW5TY29wZShleGVjdXRhYmxl
LT5uYW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9uTW9kZSgpKQorICAgICAgICAmJiBmdW5jdGlv
bk5hbWVTY29wZUlzRHluYW1pYyhleGVjdXRhYmxlLT51c2VzRXZhbCgpLCBleGVjdXRhYmxlLT5p
c1N0cmljdE1vZGUoKSkpIHsKKyAgICAgICAgLy8gV2Ugc2hvdWxkbid0IGhhdmUgdG8gZG8gdGhp
cy4gQnV0IHdlIGRvLCBiZWNhdXNlIGJ5dGVjb2RlIGxpbmtpbmcgcmVxdWlyZXMgYSByZWFsIHNj
b3BlCisgICAgICAgIC8vIGNoYWluLgorICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg4NQorICAgICAgICBzY29wZSA9IEpTRnVuY3Rp
b25OYW1lU2NvcGU6OmNyZWF0ZSgKKyAgICAgICAgICAgICp2bSwgc2NvcGUtPmdsb2JhbE9iamVj
dCgpLCBzY29wZSwgZXhlY3V0YWJsZS0+bmFtZSgpLCBmdW5jdGlvbiwgUmVhZE9ubHkgfCBEb250
RGVsZXRlKTsKICAgICB9CiAgICAgCiAgICAgU291cmNlUHJvdmlkZXIqIHByb3ZpZGVyID0gZXhl
Y3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKTsKQEAgLTI1OCw3ICsyNjIsNyBAQCBQYXNzUmVm
UHRyPENvZGVCbG9jaz4gU2NyaXB0RXhlY3V0YWJsZTo6CiAgICAgdW5zaWduZWQgc3RhcnRDb2x1
bW4gPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5zdGFydENvbHVtbigpOwogCiAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBGdW5jdGlvbkNvZGVCbG9jaygKLSAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5r
ZWRDb2RlQmxvY2ssICpzY29wZSwgcHJvdmlkZXIsIHNvdXJjZU9mZnNldCwgc3RhcnRDb2x1bW4p
KTsKKyAgICAgICAgZXhlY3V0YWJsZSwgdW5saW5rZWRDb2RlQmxvY2ssIHNjb3BlLCBwcm92aWRl
ciwgc291cmNlT2Zmc2V0LCBzdGFydENvbHVtbikpOwogfQogCiBQYXNzUmVmUHRyPENvZGVCbG9j
az4gU2NyaXB0RXhlY3V0YWJsZTo6bmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoCkBAIC0zMTQs
NyArMzE4LDcgQEAgc3RhdGljIHZvaWQgc2V0dXBKSVQoVk0mIHZtLCBDb2RlQmxvY2sqIAogfQog
CiBKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6cHJlcGFyZUZvckV4ZWN1dGlvbkltcGwoCi0g
ICAgRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSoqIHNjb3Bl
LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgRXhlY1N0YXRlKiBleGVjLCBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2
bS5oZWFwKTsKQEAgLTM5Miw3ICszOTYsNiBAQCBGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9u
RXhlY3V0YWJsZShWCiAgICAgOiBTY3JpcHRFeGVjdXRhYmxlKHZtLmZ1bmN0aW9uRXhlY3V0YWJs
ZVN0cnVjdHVyZS5nZXQoKSwgdm0sIHNvdXJjZSwgdW5saW5rZWRFeGVjdXRhYmxlLT5pc0luU3Ry
aWN0Q29udGV4dCgpKQogICAgICwgbV91bmxpbmtlZEV4ZWN1dGFibGUodm0sIHRoaXMsIHVubGlu
a2VkRXhlY3V0YWJsZSkKICAgICAsIG1fYm9keUluY2x1ZGVzQnJhY2VzKGJvZHlJbmNsdWRlc0Jy
YWNlcykKLSAgICAsIG1fZGlkUGFyc2VGb3JUaGVGaXJzdFRpbWUoZmFsc2UpCiB7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIXNvdXJjZS5pc051bGwoKSk7CiAgICAgQVNTRVJUKHNvdXJjZS5sZW5ndGgo
KSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShy
ZXZpc2lvbiAxODA0OTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM5NywxMCArMzk3LDEwIEBAIHB1YmxpYzoKICAgICB9
CiAKICAgICB2b2lkIGluc3RhbGxDb2RlKENvZGVCbG9jayopOwotICAgIFBhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBuZXdDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNGdW5jdGlv
biosIEpTU2NvcGUqKiwgSlNPYmplY3QqJiBleGNlcHRpb24pOworICAgIFBhc3NSZWZQdHI8Q29k
ZUJsb2NrPiBuZXdDb2RlQmxvY2tGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgSlNGdW5jdGlv
biosIEpTU2NvcGUqLCBKU09iamVjdComIGV4Y2VwdGlvbik7CiAgICAgUGFzc1JlZlB0cjxDb2Rl
QmxvY2s+IG5ld1JlcGxhY2VtZW50Q29kZUJsb2NrRm9yKENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OwogICAgIAotICAgIEpTT2JqZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqKiBzY29wZSwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQorICAgIEpTT2JqZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uKEV4ZWNTdGF0
ZSogZXhlYywgSlNGdW5jdGlvbiogZnVuY3Rpb24sIEpTU2NvcGUqIHNjb3BlLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCiAgICAgewogICAgICAgICBpZiAoaGFzSklUQ29kZUZvcihraW5k
KSkKICAgICAgICAgICAgIHJldHVybiAwOwpAQCAtNDEwLDcgKzQxMCw3IEBAIHB1YmxpYzoKICAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4gdm9pZCBmb3JFYWNoQ29kZUJsb2NrKEZ1bmN0
b3ImJik7CiAKIHByaXZhdGU6Ci0gICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVjdXRpb25JbXBs
KEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBKU1Njb3BlKiosIENvZGVTcGVjaWFsaXphdGlvbktp
bmQpOworICAgIEpTT2JqZWN0KiBwcmVwYXJlRm9yRXhlY3V0aW9uSW1wbChFeGVjU3RhdGUqLCBK
U0Z1bmN0aW9uKiwgSlNTY29wZSosIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogCiBwcm90ZWN0
ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCkBAIC02NjIsNyArNjYyLDYgQEAg
cHJpdmF0ZToKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2Fs
bDsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0
OwogICAgIGJvb2wgbV9ib2R5SW5jbHVkZXNCcmFjZXM7Ci0gICAgYm9vbCBtX2RpZFBhcnNlRm9y
VGhlRmlyc3RUaW1lOwogICAgIFJlZlB0cjxUeXBlU2V0PiBtX3JldHVyblN0YXRlbWVudFR5cGVT
ZXQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0
aW9uLmNwcAkocmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDYgQEAKICNpbmNs
dWRlICJKU0FycmF5LmgiCiAjaW5jbHVkZSAiSlNCb3VuZEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAi
SlNGdW5jdGlvbklubGluZXMuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uTmFtZVNjb3BlLmgiIAog
I2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiSlNOb3RBbk9iamVjdC5oIgog
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCkBAIC0xMDksMTYgKzEwOCw2IEBAIHZvaWQgSlNGdW5j
dGlvbjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCAKICAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmxlbmd0aCwganNOdW1iZXIobGVuZ3RoKSwgRG9udERlbGV0ZSB8IFJlYWRPbmx5
IHwgRG9udEVudW0pOwogfQogCi12b2lkIEpTRnVuY3Rpb246OmFkZE5hbWVTY29wZUlmTmVlZGVk
KFZNJiB2bSkKLXsKLSAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9leGVjdXRhYmxlLmdldCgpKTsKLSAgICBpZiAoIWZ1bmN0
aW9uTmFtZUlzSW5TY29wZShleGVjdXRhYmxlLT5uYW1lKCksIGV4ZWN1dGFibGUtPmZ1bmN0aW9u
TW9kZSgpKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGlmICghZnVuY3Rpb25OYW1lU2NvcGVJc0R5
bmFtaWMoZXhlY3V0YWJsZS0+dXNlc0V2YWwoKSwgZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkp
KQotICAgICAgICByZXR1cm47Ci0gICAgc2V0U2NvcGUodm0sIEpTRnVuY3Rpb25OYW1lU2NvcGU6
OmNyZWF0ZSh2bSwgc2NvcGUoKS0+Z2xvYmFsT2JqZWN0KCksIHNjb3BlKCksIGV4ZWN1dGFibGUt
Pm5hbWUoKSwgdGhpcywgUmVhZE9ubHkgfCBEb250RGVsZXRlKSk7Ci19Ci0KIEpTRnVuY3Rpb24q
IEpTRnVuY3Rpb246OmNyZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGNyZWF0ZSh2bSwgZXhlY3V0YWJsZSwgZ2xvYmFsT2JqZWN0
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJl
dmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNzYsOCArNzYsNiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3RyaW5nIGRpc3BsYXlOYW1lKEV4ZWNTdGF0ZSopOwogICAgIGNvbnN0IFN0
cmluZyBjYWxjdWxhdGVkRGlzcGxheU5hbWUoRXhlY1N0YXRlKik7CiAKLSAgICB2b2lkIGFkZE5h
bWVTY29wZUlmTmVlZGVkKFZNJik7Ci0KICAgICBFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fZXhlY3V0YWJsZS5nZXQoKTsgfQogCiAgICAgLy8gVG8gY2FsbCBl
aXRoZXIgb2YgdGhlc2UgbWV0aG9kcyBpbmNsdWRlIEV4ZWN1dGFibGUuaApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9mdW5jdGlvbi1uYW1lLXNjb3BlLmpzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZnVuY3Rpb24tbmFt
ZS1zY29wZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvZnVuY3Rpb24tbmFtZS1zY29wZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM4
IEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uIGJhcihzdHIpIHsKKyAg
ICAgICAgdmFyIGJhckJlZm9yZSA9IGJhcjsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGV2YWwoc3Ry
KTsKKyAgICAgICAgcmV0dXJuIFsKKyAgICAgICAgICAgIGJhckJlZm9yZSwKKyAgICAgICAgICAg
IGJhciwKKyAgICAgICAgICAgIGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
YmFyOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIHJlc3VsdAorICAgICAgICBdOworICAg
IH0KK30KKworZnVuY3Rpb24gY2hlY2soKSB7CisgICAgdmFyIGJhciA9IGZvbygpOworICAgIAor
ICAgIGZ1bmN0aW9uIHZlcmlmeShyZXN1bHQsIGJhckFmdGVyLCBldmFsUmVzdWx0KSB7CisgICAg
ICAgIGlmIChyZXN1bHRbMF0gIT09IGJhcikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IGZpcnN0IGVudHJ5OiAiICsgcmVzdWx0WzBdOworICAgICAgICBpZiAocmVzdWx0WzFdICE9PSBi
YXJBZnRlcikKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGZpcnN0IGVudHJ5OiAiICsg
cmVzdWx0WzFdOworICAgICAgICB2YXIgc3ViUmVzdWx0ID0gcmVzdWx0WzJdKCk7CisgICAgICAg
IGlmIChzdWJSZXN1bHQgIT09IGJhckFmdGVyKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgc2Vjb25kIGVudHJ5OiAiICsgcmVzdWx0WzJdICsgIjsgcmV0dXJuZWQ6ICIgKyBzdWJSZXN1
bHQ7CisgICAgICAgIGlmIChyZXN1bHRbM10gIT09IGV2YWxSZXN1bHQpCisgICAgICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCB0aGlyZCBlbnRyeTogIiArIHJlc3VsdFszXSArICI7IGV4cGVjdGVk
OiAiICsgZXZhbFJlc3VsdDsKKyAgICB9CisgICAgCisgICAgdmVyaWZ5KGJhcigiNDIiKSwgYmFy
LCA0Mik7CisgICAgdmVyaWZ5KGJhcigiYmFyIiksIGJhciwgYmFyKTsKKyAgICB2ZXJpZnkoYmFy
KCJ2YXIgYmFyID0gNDI7IGZ1bmN0aW9uIGZ1enooKSB7IHJldHVybiBiYXI7IH07IGZ1enooKSIp
LCA0MiwgNDIpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgIGNoZWNr
KCk7CisK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247094</attachid>
            <date>2015-02-22 19:28:31 -0800</date>
            <delta_ts>2015-02-23 10:10:26 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>19628</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgwNDkzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE1LTAyLTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
RnVuY3Rpb24gbmFtZSBzY29wZSBpcyBvbmx5IGNyZWF0ZWQgb24gdGhlIGZ1bmN0aW9uIGluc3Rh
bmNlIHRoYXQgdHJpZ2dlcmVkIHBhcnNpbmcgcmF0aGVyIHRoYW4gb24gZXZlcnkgZnVuY3Rpb24g
aW5zdGFuY2UgdGhhdCBuZWVkcyBpdAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxODgxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisgICAgICAgIAorICAgICAgICBQcmV2aW91c2x5IHdlIG9ubHkgY3JlYXRlZCB0aGUgZnVu
Y3Rpb24gbmFtZSBzY29wZSBpbiBhIHdheSB0aGF0IG1hZGUgaXQgdmlzaWJsZSB0byB0aGUKKyAg
ICAgICAgZnVuY3Rpb24gdGhhdCB0cmlnZ2VyZWQgcGFyc2luZy9saW5raW5nIG9mIHRoZSBleGVj
dXRhYmxlL2NvZGVCbG9jaywgYW5kIHRvIHRoZSBsaW5rZXIgZm9yCisgICAgICAgIHRoYXQgY29k
ZSBibG9jay4gVGhpcyB3YXMgc29ydCBvZiB0aGUgYmFyZSBtaW5pbXVtIGZvciB0aGUgZmVhdHVy
ZSB0byBhcHBlYXIgdG8gd29yayByaWdodCB0bworICAgICAgICBzeW50aGV0aWMgdGVzdHMuCisK
KyAgICAgICAgVGhlcmUgYXJlIHR3byB2YWxpZCAidGltZXMiIHRvIGNyZWF0ZSB0aGUgZnVuY3Rp
b24gbmFtZSBzY29wZS4gRWl0aGVyIGl0J3MgY3JlYXRlZCBmb3IgZWFjaAorICAgICAgICBKU0Z1
bmN0aW9uIGluc3RhbmNlIHRoYXQgbmVlZHMgYSBuYW1lIHNjb3BlLCBvciBpdCdzIGNyZWF0ZWQg
Zm9yIGVhY2ggZXhlY3V0aW9uIG9mIHN1Y2ggYQorICAgICAgICBKU0Z1bmN0aW9uLiBUaGlzIGNo
YW5nZSBjaG9vc2VzIHRoZSBsYXR0ZXIsIGJlY2F1c2UgaXQgaGFwcGVucyB0byBiZSB0aGUgZWFz
aWVzdCB0byBpbXBsZW1lbnQKKyAgICAgICAgd2l0aCB3aGF0IHdlIGhhdmUgcmlnaHQgbm93LiBJ
IG9wZW5lZCBhIGJ1ZyBmb3Igb3B0aW1pemluZyB0aGlzIGlmIHdlIGV2ZXIgbmVlZCB0bzoKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MTg4Ny4KKyAg
ICAgICAgCisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAg
ICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OkludGVycHJl
dGVyOjpleGVjdXRlKToKKyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDYWxsKToK
KyAgICAgICAgKEpTQzo6SW50ZXJwcmV0ZXI6OmV4ZWN1dGVDb25zdHJ1Y3QpOgorICAgICAgICAo
SlNDOjpJbnRlcnByZXRlcjo6cHJlcGFyZUZvclJlcGVhdENhbGwpOgorICAgICAgICAqIGppdC9K
SVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6Cisg
ICAgICAgIChKU0M6OkxMSW50OjpzZXRVcENhbGwpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjppc051bWVyaWNDb21wYXJlRnVuY3Rpb24pOgor
ICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OlNjcmlwdEV4
ZWN1dGFibGU6Om5ld0NvZGVCbG9ja0Zvcik6CisgICAgICAgIChKU0M6OlNjcmlwdEV4ZWN1dGFi
bGU6OnByZXBhcmVGb3JFeGVjdXRpb25JbXBsKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVj
dXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5oOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9u
KToKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3BwOgorICAgICAgICAoSlNDOjpKU0Z1
bmN0aW9uOjphZGROYW1lU2NvcGVJZk5lZWRlZCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGlt
ZS9KU0Z1bmN0aW9uLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2Z1bmN0aW9uLW5hbWUtc2Nv
cGUuanM6IEFkZGVkLgorICAgICAgICAoY2hlY2sudmVyaWZ5KToKKyAgICAgICAgKGNoZWNrKToK
KwogMjAxNS0wMi0yMSAgSm9zZXBoIFBlY29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYiBJbnNwZWN0b3I6IEdlbmVyYXRlIFByZXZpZXdzIG1vcmUgb2Z0ZW4gZm9yIFJl
bW90ZU9iamVjdCBpbnRlcmFjdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE4
MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDgsNiArMjA4LDE5IEBAIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICBlbWl0T3Bjb2RlKG9wX2VudGVyKTsK
IAogICAgIGFsbG9jYXRlQW5kRW1pdFNjb3BlKCk7CisgICAgCisgICAgaWYgKGZ1bmN0aW9uTmFt
ZUlzSW5TY29wZShmdW5jdGlvbk5vZGUtPmlkZW50KCksIGZ1bmN0aW9uTm9kZS0+ZnVuY3Rpb25N
b2RlKCkpCisgICAgICAgICYmIGZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5hbWljKGNvZGVCbG9jay0+
dXNlc0V2YWwoKSwgY29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSkpIHsKKyAgICAgICAgLy8gV2hl
biB3ZSBkbyB0aGlzLCB3ZSBzaG91bGQgbWFrZSBvdXIgbG9jYWwgc2NvcGUgc3RhY2sga25vdyBh
Ym91dCB0aGUgZnVuY3Rpb24gbmFtZSBzeW1ib2wKKyAgICAgICAgLy8gdGFibGUuIEN1cnJlbnRs
eSB0aGlzIHdvcmtzIGJlY2F1c2UgYnl0ZWNvZGUgbGlua2luZyBjcmVhdGVzIGEgcGhvbnkgbmFt
ZSBzY29wZS4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDE4ODUKKyAgICAgICAgLy8gQWxzbywgd2UgY291bGQgY3JlYXRlIHRoZSBz
Y29wZSBvbmNlIHBlciBKU0Z1bmN0aW9uIGluc3RhbmNlIHRoYXQgbmVlZHMgaXQuIFRoYXQgd291
bGRuJ3QKKyAgICAgICAgLy8gYmUgYW55IG1vcmUgY29ycmVjdCwgYnV0IGl0IHdvdWxkIGJlIG1v
cmUgcGVyZm9ybWFudC4KKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNDE4ODcKKyAgICAgICAgUmVnaXN0ZXJJRCBjYWxsZWVSZWdpc3Rl
cjsKKyAgICAgICAgY2FsbGVlUmVnaXN0ZXIuc2V0SW5kZXgoSlNTdGFjazo6Q2FsbGVlKTsKKyAg
ICAgICAgZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShtX3Njb3BlUmVnaXN0ZXIsIGZ1bmN0aW9u
Tm9kZS0+aWRlbnQoKSwgJmNhbGxlZVJlZ2lzdGVyLCBSZWFkT25seSB8IERvbnREZWxldGUpOwor
ICAgIH0KIAogICAgIGlmIChtX2NvZGVCbG9jay0+bmVlZHNGdWxsU2NvcGVDaGFpbigpIHx8IG1f
c2hvdWxkRW1pdERlYnVnSG9va3MpIHsKICAgICAgICAgbV9sZXhpY2FsRW52aXJvbm1lbnRSZWdp
c3RlciA9IGFkZFZhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODA0OTApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MzAsNyArODMwLDcgQEAgZmFpbGVkSlNPTlA6CiAgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9
IHByb2dyYW0tPmluaXRpYWxpemVHbG9iYWxQcm9wZXJ0aWVzKHZtLCBjYWxsRnJhbWUsIHNjb3Bl
KSkKICAgICAgICAgcmV0dXJuIGNoZWNrZWRSZXR1cm4oY2FsbEZyYW1lLT52bSgpLnRocm93RXhj
ZXB0aW9uKGNhbGxGcmFtZSwgZXJyb3IpKTsKIAotICAgIGlmIChKU09iamVjdCogZXJyb3IgPSBw
cm9ncmFtLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgbnVsbHB0ciwgJnNjb3BlLCBD
b2RlRm9yQ2FsbCkpCisgICAgaWYgKEpTT2JqZWN0KiBlcnJvciA9IHByb2dyYW0tPnByZXBhcmVG
b3JFeGVjdXRpb24oY2FsbEZyYW1lLCBudWxscHRyLCBzY29wZSwgQ29kZUZvckNhbGwpKQogICAg
ICAgICByZXR1cm4gY2hlY2tlZFJldHVybihjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24o
Y2FsbEZyYW1lLCBlcnJvcikpOwogCiAgICAgUHJvZ3JhbUNvZGVCbG9jayogY29kZUJsb2NrID0g
cHJvZ3JhbS0+Y29kZUJsb2NrKCk7CkBAIC04OTAsNyArODkwLDcgQEAgSlNWYWx1ZSBJbnRlcnBy
ZXRlcjo6ZXhlY3V0ZUNhbGwoQ2FsbEZyYQogCiAgICAgaWYgKGlzSlNDYWxsKSB7CiAgICAgICAg
IC8vIENvbXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9
IGNhbGxEYXRhLmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxs
RnJhbWUsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rpb24pLCAmc2NvcGUsIENvZGVGb3JDYWxs
KTsKKyAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNhbGxEYXRhLmpzLmZ1bmN0aW9u
RXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGpzQ2FzdDxKU0Z1bmN0
aW9uKj4oZnVuY3Rpb24pLCBzY29wZSwgQ29kZUZvckNhbGwpOwogICAgICAgICBpZiAoVU5MSUtF
TFkoISFjb21waWxlRXJyb3IpKSB7CiAgICAgICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihj
YWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsK
ICAgICAgICAgfQpAQCAtOTYxLDcgKzk2MSw3IEBAIEpTT2JqZWN0KiBJbnRlcnByZXRlcjo6ZXhl
Y3V0ZUNvbnN0cnVjdCgKIAogICAgIGlmIChpc0pTQ29uc3RydWN0KSB7CiAgICAgICAgIC8vIENv
bXBpbGUgdGhlIGNhbGxlZToKLSAgICAgICAgSlNPYmplY3QqIGNvbXBpbGVFcnJvciA9IGNvbnN0
cnVjdERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxG
cmFtZSwganNDYXN0PEpTRnVuY3Rpb24qPihjb25zdHJ1Y3RvciksICZzY29wZSwgQ29kZUZvckNv
bnN0cnVjdCk7CisgICAgICAgIEpTT2JqZWN0KiBjb21waWxlRXJyb3IgPSBjb25zdHJ1Y3REYXRh
LmpzLmZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGpz
Q2FzdDxKU0Z1bmN0aW9uKj4oY29uc3RydWN0b3IpLCBzY29wZSwgQ29kZUZvckNvbnN0cnVjdCk7
CiAgICAgICAgIGlmIChVTkxJS0VMWSghIWNvbXBpbGVFcnJvcikpIHsKICAgICAgICAgICAgIHJl
dHVybiBjaGVja2VkUmV0dXJuKGNhbGxGcmFtZS0+dm0oKS50aHJvd0V4Y2VwdGlvbihjYWxsRnJh
bWUsIGNvbXBpbGVFcnJvcikpOwogICAgICAgICB9CkBAIC0xMDE0LDcgKzEwMTQsNyBAQCBDYWxs
RnJhbWVDbG9zdXJlIEludGVycHJldGVyOjpwcmVwYXJlRm9yCiAgICAgICAgIHJldHVybiBDYWxs
RnJhbWVDbG9zdXJlKCk7CiAKICAgICAvLyBDb21waWxlIHRoZSBjYWxsZWU6Ci0gICAgSlNPYmpl
Y3QqIGVycm9yID0gZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxG
cmFtZSwgZnVuY3Rpb24sICZzY29wZSwgQ29kZUZvckNhbGwpOworICAgIEpTT2JqZWN0KiBlcnJv
ciA9IGZ1bmN0aW9uRXhlY3V0YWJsZS0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxsRnJhbWUsIGZ1
bmN0aW9uLCBzY29wZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChlcnJvcikgewogICAgICAgICBj
YWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRpb24oY2FsbEZyYW1lLCBlcnJvcik7CiAgICAgICAg
IHJldHVybiBDYWxsRnJhbWVDbG9zdXJlKCk7CkBAIC0xMDk3LDcgKzEwOTcsNyBAQCBKU1ZhbHVl
IEludGVycHJldGVyOjpleGVjdXRlKEV2YWxFeGVjdXRhCiAgICAgICAgIH0KICAgICB9CiAKLSAg
ICBKU09iamVjdCogY29tcGlsZUVycm9yID0gZXZhbC0+cHJlcGFyZUZvckV4ZWN1dGlvbihjYWxs
RnJhbWUsIG51bGxwdHIsICZzY29wZSwgQ29kZUZvckNhbGwpOworICAgIEpTT2JqZWN0KiBjb21w
aWxlRXJyb3IgPSBldmFsLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGNhbGxGcmFtZSwgbnVsbHB0ciwg
c2NvcGUsIENvZGVGb3JDYWxsKTsKICAgICBpZiAoVU5MSUtFTFkoISFjb21waWxlRXJyb3IpKQog
ICAgICAgICByZXR1cm4gY2hlY2tlZFJldHVybihjYWxsRnJhbWUtPnZtKCkudGhyb3dFeGNlcHRp
b24oY2FsbEZyYW1lLCBjb21waWxlRXJyb3IpKTsKICAgICBFdmFsQ29kZUJsb2NrKiBjb2RlQmxv
Y2sgPSBldmFsLT5jb2RlQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjk1LDcgKzY5
NSw3IEBAIGlubGluZSBjaGFyKiBsaW5rRm9yKAogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJs
ZS0+ZW50cnlwb2ludEZvcigqdm0sIGtpbmQsIE11c3RDaGVja0FyaXR5LCByZWdpc3RlcnMpOwog
ICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFibGUpOwotICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRp
b24oZXhlY0NhbGxlZSwgY2FsbGVlLCAmc2NvcGUsIGtpbmQpOworICAgICAgICBKU09iamVjdCog
ZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxl
ZSwgY2FsbGVlLCBzY29wZSwga2luZCk7CiAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAg
ICAgdGhyb3dTdGFja092ZXJmbG93RXJyb3IoZXhlYyk7CiAgICAgICAgICAgICByZXR1cm4gcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4odm0tPmdldENUSVN0dWIodGhyb3dFeGNlcHRpb25Gcm9tQ2Fs
bFNsb3dQYXRoR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CkBAIC03NTMs
NyArNzUzLDcgQEAgaW5saW5lIGNoYXIqIHZpcnR1YWxGb3JXaXRoRnVuY3Rpb24oCiAgICAgRXhl
Y3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUgPSBmdW5jdGlvbi0+ZXhlY3V0YWJsZSgpOwogICAgIGlm
IChVTkxJS0VMWSghZXhlY3V0YWJsZS0+aGFzSklUQ29kZUZvcihraW5kKSkpIHsKICAgICAgICAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBmdW5jdGlvbkV4ZWN1dGFibGUgPSBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihleGVjdXRhYmxlKTsKLSAgICAgICAgSlNPYmplY3QqIGVycm9yID0g
ZnVuY3Rpb25FeGVjdXRhYmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWNDYWxsZWUsIGZ1bmN0
aW9uLCAmc2NvcGUsIGtpbmQpOworICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4
ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgZnVuY3Rpb24sIHNjb3Bl
LCBraW5kKTsKICAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICAgICBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGVycm9yKTsKICAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGNoYXIqPih2bS0+Z2V0Q1RJU3R1Yih0aHJvd0V4Y2VwdGlvbkZyb21DYWxsU2xvd1Bh
dGhHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTgw
NDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTA5NCw3ICsxMDk0LDcgQEAgaW5saW5lIFNsb3dQYXRoUmV0dXJu
VHlwZSBzZXRVcENhbGwoRXhlYwogICAgICAgICBjb2RlUHRyID0gZXhlY3V0YWJsZS0+ZW50cnlw
b2ludEZvcih2bSwga2luZCwgTXVzdENoZWNrQXJpdHksIFJlZ2lzdGVyUHJlc2VydmF0aW9uTm90
UmVxdWlyZWQpOwogICAgIGVsc2UgewogICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGZ1bmN0
aW9uRXhlY3V0YWJsZSA9IHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGV4ZWN1dGFi
bGUpOwotICAgICAgICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBh
cmVGb3JFeGVjdXRpb24oZXhlY0NhbGxlZSwgY2FsbGVlLCAmc2NvcGUsIGtpbmQpOworICAgICAg
ICBKU09iamVjdCogZXJyb3IgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPnByZXBhcmVGb3JFeGVjdXRp
b24oZXhlY0NhbGxlZSwgY2FsbGVlLCBzY29wZSwga2luZCk7CiAgICAgICAgIGlmIChlcnJvcikK
ICAgICAgICAgICAgIExMSU5UX0NBTExfVEhST1coZXhlYywgZXJyb3IpOwogICAgICAgICBjb2Rl
QmxvY2sgPSBmdW5jdGlvbkV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAJKHJl
dmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5UHJv
dG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzgsNyArNzgsNyBAQCBzdGF0aWMgaW5saW5l
IGJvb2wgaXNOdW1lcmljQ29tcGFyZUZ1bmN0CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlID0gY2FsbERhdGEuanMuZnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIEpTU2NvcGUqIHNj
b3BlID0gY2FsbERhdGEuanMuc2NvcGU7CiAKLSAgICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRh
YmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rp
b24pLCAmc2NvcGUsIENvZGVGb3JDYWxsKTsKKyAgICBKU09iamVjdCogZXJyb3IgPSBleGVjdXRh
YmxlLT5wcmVwYXJlRm9yRXhlY3V0aW9uKGV4ZWMsIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oZnVuY3Rp
b24pLCBzY29wZSwgQ29kZUZvckNhbGwpOwogICAgIGlmIChlcnJvcikKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRh
YmxlLmNwcAkocmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDA5LCAyMDEwLCAyMDEzIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOSwgMjAxMCwgMjAxMywgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTMwLDggKzMwLDkgQEAKICNpbmNsdWRlICJDb2RlQmxvY2suaCIKICNpbmNsdWRlICJERkdEcml2
ZXIuaCIKICNpbmNsdWRlICJKSVQuaCIKLSNpbmNsdWRlICJMTEludEVudHJ5cG9pbnQuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiSlNGdW5jdGlvbk5hbWVTY29wZS5oIgor
I2luY2x1ZGUgIkxMSW50RW50cnlwb2ludC5oIgogI2luY2x1ZGUgIlBhcnNlci5oIgogI2luY2x1
ZGUgIlByb2ZpbGVyRGF0YWJhc2UuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKQEAgLTE5
OCw5ICsxOTksOSBAQCB2b2lkIFNjcmlwdEV4ZWN1dGFibGU6Omluc3RhbGxDb2RlKENvZGVCCiB9
CiAKIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdDb2RlQmxvY2tG
b3IoCi0gICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCBKU0Z1bmN0aW9uKiBmdW5jdGlv
biwgSlNTY29wZSoqIHNjb3BlLCBKU09iamVjdComIGV4Y2VwdGlvbikKKyAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwg
SlNPYmplY3QqJiBleGNlcHRpb24pCiB7Ci0gICAgVk0qIHZtID0gKCpzY29wZSktPnZtKCk7Cisg
ICAgVk0qIHZtID0gc2NvcGUtPnZtKCk7CiAKICAgICBBU1NFUlQodm0tPmhlYXAuaXNEZWZlcnJl
ZCgpKTsKICAgICBBU1NFUlQoc3RhcnRDb2x1bW4oKSAhPSBVSU5UX01BWCk7CkBAIC0yMTIsNyAr
MjEzLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6OgogICAgICAg
ICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9ldmFsQ29kZUJsb2NrKTsKICAgICAgICAg
UkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKICAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBF
dmFsQ29kZUJsb2NrKAotICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+bV91bmxp
bmtlZEV2YWxDb2RlQmxvY2suZ2V0KCksICpzY29wZSwKKyAgICAgICAgICAgIGV4ZWN1dGFibGUs
IGV4ZWN1dGFibGUtPm1fdW5saW5rZWRFdmFsQ29kZUJsb2NrLmdldCgpLCBzY29wZSwKICAgICAg
ICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVyKCkpKTsKICAgICB9CiAgICAgCkBA
IC0yMjIsNyArMjIzLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6
OgogICAgICAgICBSRUxFQVNFX0FTU0VSVCghZXhlY3V0YWJsZS0+bV9wcm9ncmFtQ29kZUJsb2Nr
KTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIWZ1bmN0aW9uKTsKICAgICAgICAgcmV0dXJuIGFk
b3B0UmVmKG5ldyBQcm9ncmFtQ29kZUJsb2NrKAotICAgICAgICAgICAgZXhlY3V0YWJsZSwgZXhl
Y3V0YWJsZS0+bV91bmxpbmtlZFByb2dyYW1Db2RlQmxvY2suZ2V0KCksICpzY29wZSwKKyAgICAg
ICAgICAgIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPm1fdW5saW5rZWRQcm9ncmFtQ29kZUJsb2Nr
LmdldCgpLCBzY29wZSwKICAgICAgICAgICAgIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVy
KCksIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCkpKTsKICAgICB9CiAgICAgCkBA
IC0yMzAsNyArMjMxLDcgQEAgUGFzc1JlZlB0cjxDb2RlQmxvY2s+IFNjcmlwdEV4ZWN1dGFibGU6
OgogICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uKTsKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBqc0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4odGhpcyk7CiAgICAgUkVM
RUFTRV9BU1NFUlQoIWV4ZWN1dGFibGUtPmNvZGVCbG9ja0ZvcihraW5kKSk7Ci0gICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9ICgqc2NvcGUpLT5nbG9iYWxPYmplY3QoKTsKKyAgICBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gc2NvcGUtPmdsb2JhbE9iamVjdCgpOwogICAg
IFBhcnNlckVycm9yIGVycm9yOwogICAgIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUgPSBnbG9i
YWxPYmplY3QtPmhhc0RlYnVnZ2VyKCkgPyBEZWJ1Z2dlck9uIDogRGVidWdnZXJPZmY7CiAgICAg
UHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGdsb2JhbE9iamVjdC0+aGFzUHJvZmlsZXIoKSA/
IFByb2ZpbGVyT24gOiBQcm9maWxlck9mZjsKQEAgLTI0NywxMCArMjQ4LDEzIEBAIFBhc3NSZWZQ
dHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKIAogICAgIC8vIFBhcnNpbmcgcmV2ZWFs
cyB3aGV0aGVyIG91ciBmdW5jdGlvbiB1c2VzIGZlYXR1cmVzIHRoYXQgcmVxdWlyZSBhIHNlcGFy
YXRlIGZ1bmN0aW9uIG5hbWUgb2JqZWN0IGluIHRoZSBzY29wZSBjaGFpbi4KICAgICAvLyBCZSBz
dXJlIHRvIGFkZCB0aGlzIHNjb3BlIGJlZm9yZSBsaW5raW5nIHRoZSBieXRlY29kZSBiZWNhdXNl
IHRoaXMgc2NvcGUgd2lsbCBjaGFuZ2UgdGhlIHJlc29sdXRpb24gZGVwdGggb2Ygbm9uLWxvY2Fs
IHZhcmlhYmxlcy4KLSAgICBpZiAoIWV4ZWN1dGFibGUtPm1fZGlkUGFyc2VGb3JUaGVGaXJzdFRp
bWUpIHsKLSAgICAgICAgZXhlY3V0YWJsZS0+bV9kaWRQYXJzZUZvclRoZUZpcnN0VGltZSA9IHRy
dWU7Ci0gICAgICAgIGZ1bmN0aW9uLT5hZGROYW1lU2NvcGVJZk5lZWRlZCgqdm0pOwotICAgICAg
ICAqc2NvcGUgPSBmdW5jdGlvbi0+c2NvcGUoKTsKKyAgICBpZiAoZnVuY3Rpb25OYW1lSXNJblNj
b3BlKGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0YWJsZS0+ZnVuY3Rpb25Nb2RlKCkpCisgICAg
ICAgICYmIGZ1bmN0aW9uTmFtZVNjb3BlSXNEeW5hbWljKGV4ZWN1dGFibGUtPnVzZXNFdmFsKCks
IGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpKSkgeworICAgICAgICAvLyBXZSBzaG91bGRuJ3Qg
aGF2ZSB0byBkbyB0aGlzLiBCdXQgd2UgZG8sIGJlY2F1c2UgYnl0ZWNvZGUgbGlua2luZyByZXF1
aXJlcyBhIHJlYWwgc2NvcGUKKyAgICAgICAgLy8gY2hhaW4uCisgICAgICAgIC8vIEZJWE1FOiBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxODg1CisgICAgICAgIHNj
b3BlID0gSlNGdW5jdGlvbk5hbWVTY29wZTo6Y3JlYXRlKAorICAgICAgICAgICAgKnZtLCBzY29w
ZS0+Z2xvYmFsT2JqZWN0KCksIHNjb3BlLCBleGVjdXRhYmxlLT5uYW1lKCksIGZ1bmN0aW9uLCBS
ZWFkT25seSB8IERvbnREZWxldGUpOwogICAgIH0KICAgICAKICAgICBTb3VyY2VQcm92aWRlciog
cHJvdmlkZXIgPSBleGVjdXRhYmxlLT5zb3VyY2UoKS5wcm92aWRlcigpOwpAQCAtMjU4LDcgKzI2
Miw3IEBAIFBhc3NSZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjoKICAgICB1bnNp
Z25lZCBzdGFydENvbHVtbiA9IGV4ZWN1dGFibGUtPnNvdXJjZSgpLnN0YXJ0Q29sdW1uKCk7CiAK
ICAgICByZXR1cm4gYWRvcHRSZWYobmV3IEZ1bmN0aW9uQ29kZUJsb2NrKAotICAgICAgICBleGVj
dXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywgKnNjb3BlLCBwcm92aWRlciwgc291cmNlT2Zmc2V0
LCBzdGFydENvbHVtbikpOworICAgICAgICBleGVjdXRhYmxlLCB1bmxpbmtlZENvZGVCbG9jaywg
c2NvcGUsIHByb3ZpZGVyLCBzb3VyY2VPZmZzZXQsIHN0YXJ0Q29sdW1uKSk7CiB9CiAKIFBhc3NS
ZWZQdHI8Q29kZUJsb2NrPiBTY3JpcHRFeGVjdXRhYmxlOjpuZXdSZXBsYWNlbWVudENvZGVCbG9j
a0ZvcigKQEAgLTMxNCw3ICszMTgsNyBAQCBzdGF0aWMgdm9pZCBzZXR1cEpJVChWTSYgdm0sIENv
ZGVCbG9jayogCiB9CiAKIEpTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhl
Y3V0aW9uSW1wbCgKLSAgICBFeGVjU3RhdGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBK
U1Njb3BlKiogc2NvcGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBFeGVjU3Rh
dGUqIGV4ZWMsIEpTRnVuY3Rpb24qIGZ1bmN0aW9uLCBKU1Njb3BlKiBzY29wZSwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgRGVm
ZXJHQyBkZWZlckdDKHZtLmhlYXApOwpAQCAtMzkyLDcgKzM5Niw2IEBAIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFYKICAgICA6IFNjcmlwdEV4ZWN1dGFibGUodm0uZnVu
Y3Rpb25FeGVjdXRhYmxlU3RydWN0dXJlLmdldCgpLCB2bSwgc291cmNlLCB1bmxpbmtlZEV4ZWN1
dGFibGUtPmlzSW5TdHJpY3RDb250ZXh0KCkpCiAgICAgLCBtX3VubGlua2VkRXhlY3V0YWJsZSh2
bSwgdGhpcywgdW5saW5rZWRFeGVjdXRhYmxlKQogICAgICwgbV9ib2R5SW5jbHVkZXNCcmFjZXMo
Ym9keUluY2x1ZGVzQnJhY2VzKQotICAgICwgbV9kaWRQYXJzZUZvclRoZUZpcnN0VGltZShmYWxz
ZSkKIHsKICAgICBSRUxFQVNFX0FTU0VSVCghc291cmNlLmlzTnVsbCgpKTsKICAgICBBU1NFUlQo
c291cmNlLmxlbmd0aCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4
ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgJKHJldmlzaW9uIDE4MDQ5MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzk3LDEwICszOTcsMTAgQEAg
cHVibGljOgogICAgIH0KIAogICAgIHZvaWQgaW5zdGFsbENvZGUoQ29kZUJsb2NrKik7Ci0gICAg
UGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSoqLCBKU09iamVjdComIGV4Y2VwdGlvbik7CisgICAg
UGFzc1JlZlB0cjxDb2RlQmxvY2s+IG5ld0NvZGVCbG9ja0ZvcihDb2RlU3BlY2lhbGl6YXRpb25L
aW5kLCBKU0Z1bmN0aW9uKiwgSlNTY29wZSosIEpTT2JqZWN0KiYgZXhjZXB0aW9uKTsKICAgICBQ
YXNzUmVmUHRyPENvZGVCbG9jaz4gbmV3UmVwbGFjZW1lbnRDb2RlQmxvY2tGb3IoQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7CiAgICAgCi0gICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVjdXRpb24o
RXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSoqIHNjb3BlLCBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisgICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVj
dXRpb24oRXhlY1N0YXRlKiBleGVjLCBKU0Z1bmN0aW9uKiBmdW5jdGlvbiwgSlNTY29wZSogc2Nv
cGUsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKICAgICB7CiAgICAgICAgIGlmIChoYXNK
SVRDb2RlRm9yKGtpbmQpKQogICAgICAgICAgICAgcmV0dXJuIDA7CkBAIC00MTAsNyArNDEwLDcg
QEAgcHVibGljOgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPiB2b2lkIGZvckVhY2hD
b2RlQmxvY2soRnVuY3RvciYmKTsKIAogcHJpdmF0ZToKLSAgICBKU09iamVjdCogcHJlcGFyZUZv
ckV4ZWN1dGlvbkltcGwoRXhlY1N0YXRlKiwgSlNGdW5jdGlvbiosIEpTU2NvcGUqKiwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CisgICAgSlNPYmplY3QqIHByZXBhcmVGb3JFeGVjdXRpb25JbXBs
KEV4ZWNTdGF0ZSosIEpTRnVuY3Rpb24qLCBKU1Njb3BlKiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CiAKIHByb3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKQEAgLTY2
Miw3ICs2NjIsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9j
b2RlQmxvY2tGb3JDYWxsOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxv
Y2tGb3JDb25zdHJ1Y3Q7CiAgICAgYm9vbCBtX2JvZHlJbmNsdWRlc0JyYWNlczsKLSAgICBib29s
IG1fZGlkUGFyc2VGb3JUaGVGaXJzdFRpbWU7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IG1fcmV0dXJu
U3RhdGVtZW50VHlwZVNldDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODA0OTApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyAr
MzUsNiBAQAogI2luY2x1ZGUgIkpTQXJyYXkuaCIKICNpbmNsdWRlICJKU0JvdW5kRnVuY3Rpb24u
aCIKICNpbmNsdWRlICJKU0Z1bmN0aW9uSW5saW5lcy5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb25O
YW1lU2NvcGUuaCIgCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJKU05v
dEFuT2JqZWN0LmgiCiAjaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKQEAgLTEwOSwxNiArMTA4LDYg
QEAgdm9pZCBKU0Z1bmN0aW9uOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIAogICAgIHB1dERpcmVj
dCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+bGVuZ3RoLCBqc051bWJlcihsZW5ndGgpLCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKLXZvaWQgSlNGdW5jdGlvbjo6YWRkTmFt
ZVNjb3BlSWZOZWVkZWQoVk0mIHZtKQotewotICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGpzQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2V4ZWN1dGFibGUuZ2V0KCkpOwot
ICAgIGlmICghZnVuY3Rpb25OYW1lSXNJblNjb3BlKGV4ZWN1dGFibGUtPm5hbWUoKSwgZXhlY3V0
YWJsZS0+ZnVuY3Rpb25Nb2RlKCkpKQotICAgICAgICByZXR1cm47Ci0gICAgaWYgKCFmdW5jdGlv
bk5hbWVTY29wZUlzRHluYW1pYyhleGVjdXRhYmxlLT51c2VzRXZhbCgpLCBleGVjdXRhYmxlLT5p
c1N0cmljdE1vZGUoKSkpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXRTY29wZSh2bSwgSlNGdW5j
dGlvbk5hbWVTY29wZTo6Y3JlYXRlKHZtLCBzY29wZSgpLT5nbG9iYWxPYmplY3QoKSwgc2NvcGUo
KSwgZXhlY3V0YWJsZS0+bmFtZSgpLCB0aGlzLCBSZWFkT25seSB8IERvbnREZWxldGUpKTsKLX0K
LQogSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiB2bSwg
RnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogewogICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gY3JlYXRlKHZtLCBleGVjdXRhYmxl
LCBnbG9iYWxPYmplY3QpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAkocmV2aXNpb24gMTgwNDkwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC03Niw4ICs3Niw2IEBAIHB1Ymxp
YzoKICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgZGlzcGxheU5hbWUoRXhlY1N0YXRlKik7
CiAgICAgY29uc3QgU3RyaW5nIGNhbGN1bGF0ZWREaXNwbGF5TmFtZShFeGVjU3RhdGUqKTsKIAot
ICAgIHZvaWQgYWRkTmFtZVNjb3BlSWZOZWVkZWQoVk0mKTsKLQogICAgIEV4ZWN1dGFibGVCYXNl
KiBleGVjdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9leGVjdXRhYmxlLmdldCgpOyB9CiAKICAg
ICAvLyBUbyBjYWxsIGVpdGhlciBvZiB0aGVzZSBtZXRob2RzIGluY2x1ZGUgRXhlY3V0YWJsZS5o
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2Z1bmN0aW9uLW5hbWUt
c2NvcGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9mdW5jdGlvbi1uYW1lLXNjb3BlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9mdW5jdGlvbi1uYW1lLXNjb3BlLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzggQEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24g
YmFyKHN0cikgeworICAgICAgICB2YXIgYmFyQmVmb3JlID0gYmFyOworICAgICAgICB2YXIgcmVz
dWx0ID0gZXZhbChzdHIpOworICAgICAgICByZXR1cm4gWworICAgICAgICAgICAgYmFyQmVmb3Jl
LAorICAgICAgICAgICAgYmFyLAorICAgICAgICAgICAgZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgICAgIHJldHVybiBiYXI7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgcmVzdWx0Cisg
ICAgICAgIF07CisgICAgfQorfQorCitmdW5jdGlvbiBjaGVjaygpIHsKKyAgICB2YXIgYmFyID0g
Zm9vKCk7CisgICAgCisgICAgZnVuY3Rpb24gdmVyaWZ5KHJlc3VsdCwgYmFyQWZ0ZXIsIGV2YWxS
ZXN1bHQpIHsKKyAgICAgICAgaWYgKHJlc3VsdFswXSAhPT0gYmFyKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgZmlyc3QgZW50cnk6ICIgKyByZXN1bHRbMF07CisgICAgICAgIGlmIChy
ZXN1bHRbMV0gIT09IGJhckFmdGVyKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZmly
c3QgZW50cnk6ICIgKyByZXN1bHRbMV07CisgICAgICAgIHZhciBzdWJSZXN1bHQgPSByZXN1bHRb
Ml0oKTsKKyAgICAgICAgaWYgKHN1YlJlc3VsdCAhPT0gYmFyQWZ0ZXIpCisgICAgICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCBzZWNvbmQgZW50cnk6ICIgKyByZXN1bHRbMl0gKyAiOyByZXR1cm5l
ZDogIiArIHN1YlJlc3VsdDsKKyAgICAgICAgaWYgKHJlc3VsdFszXSAhPT0gZXZhbFJlc3VsdCkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHRoaXJkIGVudHJ5OiAiICsgcmVzdWx0WzNd
ICsgIjsgZXhwZWN0ZWQ6ICIgKyBldmFsUmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2ZXJpZnko
YmFyKCI0MiIpLCBiYXIsIDQyKTsKKyAgICB2ZXJpZnkoYmFyKCJiYXIiKSwgYmFyLCBiYXIpOwor
ICAgIHZlcmlmeShiYXIoInZhciBiYXIgPSA0MjsgZnVuY3Rpb24gZnV6eigpIHsgcmV0dXJuIGJh
cjsgfTsgZnV6eigpIiksIDQyLCA0Mik7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwOyAr
K2kpCisgICAgY2hlY2soKTsKKwo=
</data>
<flag name="review"
          id="272040"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
      

    </bug>

</bugzilla>