<?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>110072</bug_id>
          
          <creation_ts>2013-02-17 19:52:57 -0800</creation_ts>
          <short_desc>Get rid of DFG::DoubleOperand and simplify ValueToInt32</short_desc>
          <delta_ts>2013-02-20 14:28:17 -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>
          <dependson>110184</dependson>
          <blocked>109371</blocked>
    
    <blocked>110092</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>835090</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-17 19:52:57 -0800</bug_when>
    <thetext>The only remaining use of it is actually somewhat wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835109</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-17 21:27:12 -0800</bug_when>
    <thetext>Actually ValueToInt32, the only use of DoubleOperand, was not just slightly wrong.  It was totally borked.  Repro case:

function foo(a, b) {
    var result = a | b.f;
    return [result, a];
}

var counter = 0;
for (var i = 0; i &lt; 100; ++i) {
    var result = foo({valueOf:function() { counter++; return 1; }}, {f:i == 99 ? 5.5 : 5});
    if (result.length != 2)
        throw &quot;error&quot;;
    if (result[0] != 5)
        throw &quot;error&quot;;
}

if (counter != 100)
    throw &quot;error&quot;;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835140</commentid>
    <comment_count>2</comment_count>
      <attachid>188799</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-17 22:38:34 -0800</bug_when>
    <thetext>Created attachment 188799
the patch

Still need to generate the results file.  But other than that it&apos;s good to go.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835175</commentid>
    <comment_count>3</comment_count>
      <attachid>188804</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-18 00:03:36 -0800</bug_when>
    <thetext>Created attachment 188804
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835405</commentid>
    <comment_count>4</comment_count>
      <attachid>188804</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2013-02-18 05:58:54 -0800</bug_when>
    <thetext>Comment on attachment 188804
the patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>835617</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-18 10:42:04 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/143241</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>836003</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2013-02-18 23:15:48 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; Landed in http://trac.webkit.org/changeset/143241

It caused a serious regression on 32 bit platforms. See https://bugs.webkit.org/show_bug.cgi?id=110184 for details.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>837766</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-02-20 14:28:17 -0800</bug_when>
    <thetext>*** Bug 101434 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188799</attachid>
            <date>2013-02-17 22:38:34 -0800</date>
            <delta_ts>2013-02-18 00:03:36 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>37220</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzMTQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDEzLTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0IHJpZCBvZiBERkc6OkRvdWJsZU9wZXJhbmQgYW5kIHNpbXBsaWZ5IFZhbHVlVG9JbnQzMgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMDcyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBW
YWx1ZVRvSW50MzIgaGFkIGEgc2lkZS1lZmZlY3RpbmcgcGF0aCwgd2hpY2ggd2FzIG5vdCBPU1It
ZnJpZW5kbHk6IGFuIE9TUiBhZnRlcgorICAgICAgICB0aGUgc2lkZS1lZmZlY3Qgd291bGQgbGVh
ZCB0byB0aGUgc2lkZS1lZmZlY3QgcmUtZXhlY3V0aW5nLiBJIGdvdCByaWQgb2YgdGhhdCBwYXRo
CisgICAgICAgIGFuZCByZXBsYWNlZCBpdCB3aXRoIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGNh
c2Ugd2hlcmUgdGhlIGlucHV0IGlzIHNwZWN1bGF0ZWQKKyAgICAgICAgbnVtYmVyLW9yLW90aGVy
LiBUaGlzIG1ha2VzIGlkaW9tcyBsaWtlIG51bGx8MCBhbmQgdHJ1ZXwwIHdvcmsgYXMgZXhwZWN0
ZWQsIGFuZAorICAgICAgICBnZXQgb3B0aW1pemVkIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIAor
ICAgICAgICBBbHNvIGdvdCByaWQgb2YgRG91YmxlT3BlcmFuZC4gUmVwbGFjZWQgYWxsIHJlbWFp
bmluZyB1c2VzIG9mIGl0IHdpdGgKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4gQmVj
YXVzZSB0aGUgbGF0dGVyIGFzc2VydHMgdGhhdCB0aGUgRWRnZSBpcyBhIERvdWJsZVVzZQorICAg
ICAgICBlZGdlIGFuZCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgRG91YmxlT3BlcmFuZCBhcmUgYWxs
IGZvciB1bnR5cGVkIHVzZXMsIEkgd29ya2VkCisgICAgICAgIGFyb3VuZCB0aGUgYXNzZXJ0aW9u
IGJ5IHNldHRpbmcgdGhlIFVzZUtpbmQgdG8gRG91YmxlVXNlIGJ5IGZvcmNlLiBUaGlzIGlzIHNv
dW5kLAorICAgICAgICBzaW5jZSBhbGwgZXhpc3RpbmcgYXNzZXJ0aW9ucyBmb3IgRG91YmxlVXNl
IGFyZSBhY3R1YWxseSBhc3NlcnRpbmcgdGhhdCB3ZSdyZSBub3QKKyAgICAgICAgY29udmVydGlu
ZyBhIHZhbHVlIHRvIGRvdWJsZSB1bmV4cGVjdGVkbHkuIEJ1dCBhbGwgb2YgdGhlc2UgY2FsbHMg
dG8KKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBhcmUgd2hlbiB0aGUgb3BlcmFuZCBp
cyBhbHJlYWR5IGtub3duIHRvIGJlIHJlcHJlc2VudGVkIGFzCisgICAgICAgIGRvdWJsZSwgc28g
dGhlcmUgaXMgbm8gY29udmVyc2lvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmV1dHJh
bCBvbiBiZW5jaG1hcmtzLCBleGNlcHQgc3RhbmZvcmQtY3J5cHRvLWNjbSwgd2hpY2ggc3BlZWRz
IHVwIGEKKyAgICAgICAgbGl0dGxlLiBNb3N0bHksIHRoaXMgaXMgaW50ZW5kZWQgdG8gZGVsZXRl
IGEgYnVuY2ggb2YgY29kZS4gRG91YmxlT3BlcmFuZCB3YXMKKyAgICAgICAgZXF1aXZhbGVudCB0
byB0aGUgcmVwbGFjZS1lZGdlLXdpdGgtRG91YmxlVXNlIHRyaWNrIHRoYXQgSSdtIHVzaW5nIG5v
dywgZXhjZXB0IGl0CisgICAgICAgIGludm9sdmVkIGEgX2xvdF8gbW9yZSBjb2RlLgorCisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEZQUlRlbXBvcmFyeSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoREZHKToKKwogMjAxMy0wMi0xNyAgUm9nZXIgRm9uZyAg
PHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFdpbmRvd3MgYnVp
bGQgZml4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCShyZXZpc2lvbiAxNDMwNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsMTIgKzQyNSwxNCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIH0KICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAg
ICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVjdWxh
dGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFy
eShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKH5TcGVjQ2VsbCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzA3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMyLDYgKzExMzIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldFNjb3BlOgogICAg
ICAgICBjYXNlIFR5cGVPZjoKICAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKKyAgICAg
ICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NF
KG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzA3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MCwxNSArMTgwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKLSAg
ICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAg
IG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRBbmQ6CiAgICAgICAgIGNhc2Ug
Qml0T3I6CiAgICAgICAgIGNhc2UgQml0WG9yOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQzMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhCaXRSU2hpZnQsIE5vZGVS
ZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEJpdFVSU2hpZnQsIE5vZGVSZXN1bHRJbnQzMikgXAog
ICAgIC8qIEJpdHdpc2Ugb3BlcmF0b3JzIGNhbGwgVG9JbnQzMiBvbiB0aGVpciBvcGVyYW5kcy4g
Ki9cCi0gICAgbWFjcm8oVmFsdWVUb0ludDMyLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgbWFjcm8oVmFsdWVUb0ludDMyLCBOb2RlUmVzdWx0SW50MzIpIFwKICAg
ICAvKiBVc2VkIHRvIGJveCB0aGUgcmVzdWx0IG9mIFVSU2hpZnQgbm9kZXMgKHJlc3VsdCBoYXMg
cmFuZ2UgMC4uMl4zMi0xKS4gKi9cCiAgICAgbWFjcm8oVUludDMyVG9OdW1iZXIsIE5vZGVSZXN1
bHROdW1iZXIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE0MzA3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMywxMzAgKzExMyw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bEludGVnZXIoTm9kZSoKICAgICB9CiB9CiAKLUZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERv
dWJsZShOb2RlKiBub2RlKQotewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLQotICAgIGlmIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLQotICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KLSAgICAgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdw
cik7Ci0gICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCpt
X3N0cmVhbSwgZ3ByKTsKLSAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgewotICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZSksIGZwcik7Ci0gICAgICAgICAgICAgICAg
bV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZnByOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBz
cGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcik7Ci0gICAgICAgICAgICBpZiAoc3BpbGxG
b3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwotICAgICAgICAgICAg
ICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVk
KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmcHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aGFzVW5ib3hlZERvdWJsZTsKLQotICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ICE9IERhdGFG
b3JtYXRKU0ludGVnZXIgJiYgc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBmcHIpOwotICAgICAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7
Ci0gICAgICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKLQotICAgICAgICAgICAgaWYgKGhhc1Vu
Ym94ZWREb3VibGUuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxp
bmsoJm1faml0KTsKLQotICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCpt
X3N0cmVhbSwgZnByKTsKLSAgICAgICAgICAgIHJldHVybiBmcHI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewotICAgIGNhc2UgRGF0YUZv
cm1hdE5vbmU6Ci0gICAgICAgIC8vIFNob3VsZCBoYXZlIGZpbGxlZCwgYWJvdmUuCi0gICAgY2Fz
ZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBE
YXRhRm9ybWF0Qm9vbGVhbjoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46Ci0gICAgY2Fz
ZSBEYXRhRm9ybWF0U3RvcmFnZToKLSAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGluZyB0
aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJlIG51bWVyaWMuCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBjYXNlIERhdGFGb3JtYXRK
U0ludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKLSAgICAgICAgR1BSUmVnIHRhZ0dQ
UiA9IGluZm8udGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gaW5mby5wYXls
b2FkR1BSKCk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICBt
X2dwcnMubG9jayh0YWdHUFIpOwotICAgICAgICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKLQot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlOwotCi0gICAgICAgIGlm
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTSW50ZWdlcikgewotICAgICAg
ICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICBt
X2ppdC5qaXRBc3NlcnRJc0pTRG91YmxlKHRhZ0dQUik7Ci0gICAgICAgICAgICB1bmJveERvdWJs
ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7Ci0gICAgICAgICAgICBo
YXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgaXNJbnRlZ2VyLmxp
bmsoJm1faml0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHBheWxvYWRHUFIsIGZwcik7Ci0KLSAgICAgICAgaWYgKGhhc1VuYm94ZWREb3VibGUuaXNT
ZXQoKSkKLSAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwotCi0gICAg
ICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7Ci0gICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxv
YWRHUFIpOwotICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7Ci0gICAgICAgIG1fZ3Bycy51
bmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwotICAgICAgICBpbmZvLmtpbGxTcGlsbGVkKCk7Ci0gICAgICAgIHJldHVybiBm
cHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7
Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKGdwciwgZnByKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayhncHIpOwotICAgICAgICBy
ZXR1cm4gZnByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiAKLSAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6IHsKLSAgICAgICAgRlBSUmVnIGZwciA9IGluZm8uZnByKCk7
Ci0gICAgICAgIG1fZnBycy5sb2NrKGZwcik7Ci0gICAgICAgIHJldHVybiBmcHI7Ci0gICAgfQot
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7Ci0gICAgfQotfQotCiBib29sIFNwZWN1bGF0aXZl
SklUOjpmaWxsSlNWYWx1ZShOb2RlKiBub2RlLCBHUFJSZWcmIHRhZ0dQUiwgR1BSUmVnJiBwYXls
b2FkR1BSLCBGUFJSZWcmIGZwcikKIHsKICAgICAvLyBGSVhNRTogRm9yIGRvdWJsZSB3ZSBjb3Vs
ZCBmaWxsIHdpdGggYSBGUFIuCkBAIC00MzQsNDkgKzMxMCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9kZSog
bm9kZSkKLXsKLSAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsKLQotICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7
Ci0gICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgbV9qaXQubW92ZShv
cDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdlbmVyYXRpb25JbmZv
JiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPmNoaWxkMSgpLT52aXJ0dWFsUmVn
aXN0ZXIoKV07Ci0gICAgaWYgKGNoaWxkSW5mby5pc0pTRG91YmxlKCkpIHsKLSAgICAgICAgRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwotICAgICAg
ICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBvcDEudXNlKCk7Ci0gICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRy
dW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNh
dGVGYWlsZWQpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChu
b3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7Ci0KLSAgICAg
ICAgaW50ZWdlclJlc3VsdChncHIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BS
UmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKLSAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5w
YXlsb2FkR1BSKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBv
cDEudXNlKCk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdEludGVnZXIgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7Ci0KLSAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzTm90SW50
ZWdlciwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0ludDMyLCByZXN1bHRHUFIsIHRhZ0dQUiwg
cGF5bG9hZEdQUikpOwotICAgIAotICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKE5vZGUqIG5vZGUpCiB7CiAgICAgSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTIyODYsNyArMjExOSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmICht
X2dlbmVyYXRpb25JbmZvW25vZGUtPmNoaWxkMSgpLT52aXJ0dWFsUmVnaXN0ZXIoKV0ucmVnaXN0
ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgRG91YmxlVXNlKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUodmFsdWUu
ZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUtPmxvY2FsKCkpKTsKICAgICAgICAg
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChu
b2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTQzMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDE1NSArMTE3LDYgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKgogICAgIH0KIH0KIAotRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGUqIG5vZGUpCi17Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotCi0gICAg
aWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICBp
ZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9j
YXRlKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKLSAgICAgICAgICAgICAgICB1bmxv
Y2soZ3ByKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkg
ewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91Ymxl
VG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3ByKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7Ci0gICAgICAgICAgICAgICAgdW5s
b2NrKGdwcik7Ci0KLSAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3Vi
bGUoKm1fc3RyZWFtLCBmcHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmcHI7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJl
YWNoYWJsZT8KLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBtX2dwcnMu
cmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAg
ICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7
Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZv
cm1hdCgpOwotICAgICAgICAgICAgc3dpdGNoIChzcGlsbEZvcm1hdCkgewotICAgICAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZw
ckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwotICAgICAgICAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAg
ICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZwcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKLSAgICAgICAgICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJl
YW0sIGdwcik7Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZSgqbV9zdHJlYW0sIGdwciwgc3BpbGxGb3JtYXQpOwotICAgICAgICAgICAgICAgIHVubG9jayhn
cHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERh
dGFGb3JtYXROb25lOgotICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgotICAg
IGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNh
c2UgRGF0YUZvcm1hdEJvb2xlYW46Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgotICAg
IGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxp
bmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMgb3BlcmFuZCB0byBiZSBudW1lcmljLgot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgY2FzZSBEYXRhRm9y
bWF0SlM6IHsKLSAgICAgICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBpbmZvLmdwcigpOwotICAgICAg
ICBtX2dwcnMubG9jayhqc1ZhbHVlR3ByKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9j
YXRlKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR3ByID0gYWxsb2NhdGUoKTsgLy8gRklYTUU6IGNh
biB3ZSBza2lwIHRoaXMgYWxsb2NhdGlvbiBvbiB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZpcnR1YWwg
cmVnaXN0ZXI/Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pT
RG91YmxlKGpzVmFsdWVHcHIpOwotCi0gICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3
ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCi0gICAgICAgIG1faml0Lm1vdmUo
anNWYWx1ZUdwciwgdGVtcEdwcik7Ci0gICAgICAgIHVuYm94RG91YmxlKHRlbXBHcHIsIGZwcik7
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1w
KCk7Ci0KLSAgICAgICAgLy8gRmluYWxseSwgaGFuZGxlIGludGVnZXJzLgotICAgICAgICBpc0lu
dGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShq
c1ZhbHVlR3ByLCBmcHIpOwotICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsK
LQotICAgICAgICBtX2dwcnMucmVsZWFzZShqc1ZhbHVlR3ByKTsKLSAgICAgICAgbV9ncHJzLnVu
bG9jayhqc1ZhbHVlR3ByKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayh0ZW1wR3ByKTsKLSAgICAg
ICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7
Ci0gICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7Ci0gICAgICAgIGluZm8u
a2lsbFNwaWxsZWQoKTsKLSAgICAgICAgcmV0dXJuIGZwcjsKLSAgICB9Ci0KLSAgICBjYXNlIERh
dGFGb3JtYXRKU0ludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAgICAg
ICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8u
Z3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKGdwciwgZnByKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayhncHIpOwotICAg
ICAgICByZXR1cm4gZnByOwotICAgIH0KLQotICAgIC8vIFVuYm94IHRoZSBkb3VibGUKLSAgICBj
YXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewotICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIo
KTsKLSAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgIGlmIChtX2dw
cnMuaXNMb2NrZWQoZ3ByKSkgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHRy
YW1wbGUgZ3ByIGlmIGl0IGlzIGluIHVzZS4KLSAgICAgICAgICAgIEdQUlJlZyB0ZW1wID0gYWxs
b2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCB0ZW1wKTsKLSAgICAgICAgICAg
IHVuYm94RG91YmxlKHRlbXAsIGZwcik7Ci0gICAgICAgICAgICB1bmxvY2sodGVtcCk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgdW5ib3hEb3VibGUoZ3ByLCBmcHIpOwotCi0gICAgICAg
IG1fZ3Bycy5yZWxlYXNlKGdwcik7Ci0gICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotCi0gICAgICAgIGluZm8uZmlsbERvdWJsZSgq
bV9zdHJlYW0sIGZwcik7Ci0gICAgICAgIHJldHVybiBmcHI7Ci0gICAgfQotCi0gICAgY2FzZSBE
YXRhRm9ybWF0RG91YmxlOiB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBpbmZvLmZwcigpOwotICAg
ICAgICBtX2ZwcnMubG9jayhmcHIpOwotICAgICAgICByZXR1cm4gZnByOwotICAgIH0KLSAgICAg
ICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7Ci0gICAgfQotfQotCiBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGUqIG5vZGUpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwpAQCAtNDI1LDUwICsy
NzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY3VycmVudE5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFs
dWVUb0ludDMyKE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgCi0gICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwot
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2N1cnJlbnROb2RlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBHZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLT5jaGlsZDEoKS0+dmlydHVhbFJlZ2lzdGVyKCldOwot
ICAgIGlmIChjaGlsZEluZm8uaXNKU0RvdWJsZSgpKSB7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdw
ciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgb3AxLnVzZSgpOwotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJs
ZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsK
LSAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIp
KTsKLQotICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jdXJyZW50Tm9kZSwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBK
U1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKLSAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wMS5ncHIoKTsK
LSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIG9wMS51c2UoKTsKLQot
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKLQotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGpzVmFsdWVHcHIsIHJlc3VsdEdQ
Uik7Ci0gICAgCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2Fs
bChpc05vdEludGVnZXIsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BS
LCBqc1ZhbHVlR3ByKSk7Ci0KLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50
Tm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVVSW50MzJUb051bWJlcihOb2RlKiBub2RlKQogewogICAgIElu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQz
MDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsMjggKzE0MTEsNiBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJCiAgICAgbV9mcHIgPSBtX2ppdC0+ZnByQWxsb2NhdGUoKTsK
IH0KIAotRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgRG91
YmxlT3BlcmFuZCYgb3AxKQotICAgIDogbV9qaXQoaml0KQotICAgICwgbV9mcHIoSW52YWxpZEZQ
UlJlZykKLXsKLSAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5ub2RlKCkpKQotICAgICAgICBt
X2ZwciA9IG1faml0LT5yZXVzZShvcDEuZnByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9mcHIg
PSBtX2ppdC0+ZnByQWxsb2NhdGUoKTsKLX0KLQotRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3Jhcnko
U3BlY3VsYXRpdmVKSVQqIGppdCwgRG91YmxlT3BlcmFuZCYgb3AxLCBEb3VibGVPcGVyYW5kJiBv
cDIpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQotewotICAg
IGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLm5vZGUoKSkpCi0gICAgICAgIG1fZnByID0gbV9qaXQt
PnJldXNlKG9wMS5mcHIoKSk7Ci0gICAgZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9wMi5ub2Rl
KCkpKQotICAgICAgICBtX2ZwciA9IG1faml0LT5yZXVzZShvcDIuZnByKCkpOwotICAgIGVsc2UK
LSAgICAgICAgbV9mcHIgPSBtX2ppdC0+ZnByQWxsb2NhdGUoKTsKLX0KLQogRlBSVGVtcG9yYXJ5
OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCYgb3AxKQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9mcHIoSW52YWxpZEZQUlJlZykKQEAg
LTIyMDIsMTE2ICsyMTgwLDE0NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVU
b0ludDMyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewotICAgICAgICBzd2l0Y2ggKGNoZWNrR2Vu
ZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICBj
YXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3By
KCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3VibGU6IHsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRl
RG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWls
ZWQpOworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7
CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgCisg
ICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2pp
dC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoY2hlY2tHZW5lcmF0ZWRUeXBlRm9y
VG9JbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgY2FzZSBHZW5lcmF0ZWRPcGVy
YW5kSW50ZWdlcjogeworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3VibGU6IHsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIERvdWJsZVVzZSkpOyAv
LyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHdpbGwgYXNzZXJ0IHRoYXQgdGhpcyBpcyBhIGRvdWJs
ZSB1c2UuIFdlIGZvcmNlIGl0IHRvIHRoaW5rIHRoYXQgaXQgd2FzIGEgZG91YmxlIHVzZSwgc2lu
Y2Ugd2UgYXJlIGluZmVycmluZyB0aGF0IHdlIG91Z2h0IHRvIGVtaXQgYSBkb3VibGUgdXNlIHF1
aXRlIGxhdGUuCisgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7CisgICAgICAgIEdQUlJl
ZyBncHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5j
YXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdw
ciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVk
VG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0lu
dDMyLCBncHIsIGZwcikpOwogCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbm9kZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZW5lcmF0ZWRP
cGVyYW5kSlNWYWx1ZTogewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEpTVmFsdWU6IHsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKIAotICAgICAgICAgICAgR1BSUmVnIGdwciA9
IG9wMS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7
Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKLSAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOworICAgICAgICBHUFJSZWcgZ3ByID0gb3AxLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICBGUFJU
ZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnBy
KCk7CiAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0g
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
Y29udmVydGVkOwogCi0gICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICBpZiAoIWlzTnVtYmVy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3By
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCisgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3By
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywg
Z3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBh
bGwgZWxzZSB0dXJucyBpbnRvIDAuCisgICAgICAgICAgICAgICAgbV9qaXQuY29tcGFyZTY0KEpJ
VENvbXBpbGVyOjpFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R3By
KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQg
aGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCi0gICAgICAgICAgICBt
X2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKLSAgICAgICAgICAgIHVuYm94RG91YmxlKHJlc3Vs
dEdwciwgZnByKTsKKyAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBk
b3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKKyAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3Vs
dEdwcik7CisgICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdwciwgZnByKTsKIAotICAgICAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOwotICAgICAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHcHIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwg
ZnByKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwogCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjb252ZXJ0ZWQgPSBtX2ppdC5qdW1wKCk7CisgICAg
ICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgaXNJbnRl
Z2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGdw
ciwgcmVzdWx0R3ByKTsKKyAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICAgICAg
bV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOwogCi0gICAgICAgICAgICBj
b252ZXJ0ZWQubGluaygmbV9qaXQpOworICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwog
I2Vsc2UKLSAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGlsZE5v
ZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIE5vZGUqIGNoaWxk
Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGNoaWxkTm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwog
Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogCi0gICAg
ICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgcGF5bG9h
ZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVy
dGVkOwogCi0gICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3Jt
YXRKU0ludGVnZXIpCi0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1
bHRHcHIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHRhZ0dQ
UiA9IG9wMS50YWdHUFIoKTsKLSAgICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0
aGlzKTsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKLSAgICAg
ICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgaWYgKGluZm8u
cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQorICAgICAgICAgICAgbV9q
aXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEdQUlJlZyB0YWdHUFIgPSBvcDEudGFnR1BSKCk7CisgICAgICAgICAgICBGUFJUZW1wb3Jh
cnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigp
OworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKLSAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7
CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgaWYgKCFp
c051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2Vz
dFRhZykpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNl
bGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCisgICAg
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9v
bGVhblRhZykpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaXNC
b29sZWFuLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXls
b2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIs
IHNjcmF0Y2guZnByKCkpOworICAgICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2Fk
R1BSLCBmcHIsIHNjcmF0Y2guZnByKCkpOwogCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRv
SW50MzIsIHJlc3VsdEdwciwgZnByKTsKLSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdEdwcik7CisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHcHIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCByZXN1bHRHcHIs
IGZwcik7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CiAK
LSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjb252ZXJ0ZWQgPSBtX2ppdC5qdW1w
KCk7CisgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAg
ICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgIGlzSW50ZWdlci5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7
CiAKLSAgICAgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwotICAgICAgICAgICAg
fQotI2VuZGlmCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVy
YW5kVHlwZVVua25vd246Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQp
OwogICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlQm9vbGVhbigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwotICAgICAgICBtX2ppdC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEp
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOworI2VuZGlmCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R3ByLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICAvLyBEbyBpdCB0aGUgc2Fm
ZSB3YXkuCi0gICAgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7Ci0gICAgcmV0dXJu
OworICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duOgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlKiBub2RlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTQzMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDYgQEAgcHVibGljOgogICAgIH0KICAg
ICAKICAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZSosIERhdGFGb3JtYXQmIHJldHVybkZvcm1h
dCk7Ci0gICAgRlBSUmVnIGZpbGxEb3VibGUoTm9kZSopOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBA
IC02OTQsNyArNjkzLDYgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIG5vblNwZWN1
bGF0aXZlVmFsdWVUb051bWJlcihOb2RlKik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZVZhbHVl
VG9JbnQzMihOb2RlKik7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKE5v
ZGUqKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yMzAxLDcgKzIyOTksNyBAQCBwdWJsaWM6
CiAKIC8vID09PSBPcGVyYW5kIHR5cGVzID09PQogLy8KLS8vIEludGVnZXJPcGVyYW5kLCBEb3Vi
bGVPcGVyYW5kIGFuZCBKU1ZhbHVlT3BlcmFuZC4KKy8vIEludGVnZXJPcGVyYW5kIGFuZCBKU1Zh
bHVlT3BlcmFuZC4KIC8vCiAvLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIHRvIGxvY2sgdGhlIG9w
ZXJhbmRzIHRvIGEgbm9kZSBpbnRvIG1hY2hpbmUKIC8vIHJlZ2lzdGVycy4gVGhlc2UgY2xhc3Nl
cyBpbXBsZW1lbnQgb2YgcGF0dGVybiBvZiBsb2NraW5nIGEgdmFsdWUKQEAgLTIzNjMsNTYgKzIz
NjEsNiBAQCBwcml2YXRlOgogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiB9OwogCi1jbGFzcyBE
b3VibGVPcGVyYW5kIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBEb3VibGVPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQotICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAg
LCBtX25vZGUodXNlLm5vZGUoKSkKLSAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBS
UmVnKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFRoaXMgaXMgY291bnRlci1pbnR1aXRpdmUgYnV0IGNvcnJlY3QuIERvdWJsZU9wZXJhbmQgaXMg
aW50ZW5kZWQgdG8KLSAgICAgICAgLy8gYmUgdXNlZCBvbmx5IHdoZW4geW91J3JlIGEgbm9kZSB0
aGF0IGlzIGhhcHB5IHRvIGFjY2VwdCBhbiB1bnR5cGVkCi0gICAgICAgIC8vIHZhbHVlLCBidXQg
d2lsbCBzcGVjaWFsLWNhc2UgZm9yIGRvdWJsZXMgKHVzaW5nIERvdWJsZU9wZXJhbmQpIGlmIHRo
ZQotICAgICAgICAvLyB2YWx1ZSBoYXBwZW5lZCB0byBhbHJlYWR5IGJlIHJlcHJlc2VudGVkIGFz
IGEgZG91YmxlLiBUaGUgaW1wbGljYXRpb24KLSAgICAgICAgLy8gaXMgdGhhdCB5b3Ugd2lsbCBu
b3QgdHJ5IHRvIGZvcmNlIHRoZSB2YWx1ZSB0byBiZWNvbWUgYSBkb3VibGUgaWYgaXQKLSAgICAg
ICAgLy8gaXMgbm90IG9uZSBhbHJlYWR5LgotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAh
PSBEb3VibGVVc2UpOwotICAgICAgICAKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWREb3VibGUo
bV9ub2RlKSkKLSAgICAgICAgICAgIGZwcigpOwotICAgIH0KLQotICAgIH5Eb3VibGVPcGVyYW5k
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2Zwck9ySW52YWxpZCAhPSBJbnZhbGlkRlBSUmVn
KTsKLSAgICAgICAgbV9qaXQtPnVubG9jayhtX2Zwck9ySW52YWxpZCk7Ci0gICAgfQotCi0gICAg
Tm9kZSogbm9kZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOwotICAgIH0K
LQotICAgIEZQUlJlZyBmcHIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZnByT3JJbnZhbGlkID09
IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxs
RG91YmxlKG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCB1c2UoKQotICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSog
bV9ub2RlOwotICAgIEZQUlJlZyBtX2Zwck9ySW52YWxpZDsKLX07Ci0KIGNsYXNzIEpTVmFsdWVP
cGVyYW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2
ZUpJVCogaml0LCBFZGdlIHVzZSkKQEAgLTI2MTgsOCArMjU2Niw2IEBAIHByaXZhdGU6CiBjbGFz
cyBGUFJUZW1wb3JhcnkgewogcHVibGljOgogICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJ
VCopOwotICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIERvdWJsZU9wZXJhbmQmKTsK
LSAgICBGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBEb3VibGVPcGVyYW5kJiwgRG91Ymxl
T3BlcmFuZCYpOwogICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQmKTsKICAgICBGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kJiwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYpOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDMxNDkpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNiBAQAorMjAxMy0wMi0xNyAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdldCByaWQgb2YgREZHOjpEb3Vi
bGVPcGVyYW5kIGFuZCBzaW1wbGlmeSBWYWx1ZVRvSW50MzIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDA3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9qcy9kZmctdmFsdWUtdG8taW50MzIt
d2l0aC1zaWRlLWVmZmVjdC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2pzL2pzYy10ZXN0
LWxpc3Q6CisgICAgICAgICogZmFzdC9qcy9zY3JpcHQtdGVzdHMvZGZnLXZhbHVlLXRvLWludDMy
LXdpdGgtc2lkZS1lZmZlY3QuanM6IEFkZGVkLgorICAgICAgICAoZm9vKToKKyAgICAgICAgKC5y
ZXN1bHQuZm9vKToKKwogMjAxMy0wMi0xNyAgTWlrZSBXZXN0ICA8bWt3c3RAY2hyb21pdW0ub3Jn
PgogCiAgICAgICAgIFdoZWVsRXZlbnQgc2hvdWxkIG5vdCB0YXJnZXQgdGV4dCBub2Rlcy4KSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvanMvZGZnLXZhbHVlLXRvLWludDMyLXdpdGgtc2lkZS1lZmZl
Y3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2pzL2RmZy12YWx1ZS10by1p
bnQzMi13aXRoLXNpZGUtZWZmZWN0Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2pzL2RmZy12YWx1ZS10by1pbnQzMi13aXRoLXNpZGUtZWZmZWN0Lmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvanMt
dGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL2RmZy12YWx1ZS10by1pbnQzMi13aXRoLXNpZGUtZWZmZWN0cy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0icmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8
L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL2pzYy10ZXN0LWxpc3QK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9qc2MtdGVzdC1saXN0CShyZXZpc2lv
biAxNDMwNzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL2pzYy10ZXN0LWxpc3QJKHdvcmtpbmcg
Y29weSkKQEAgLTE4Nyw2ICsxODcsNyBAQCBmYXN0L2pzL2RmZy11aW50MzJhcnJheS1vdmVyZmxv
dy12YWx1ZXMKIGZhc3QvanMvZGZnLXVpbnQzMmFycmF5CiBmYXN0L2pzL2RmZy11aW50OGFycmF5
CiBmYXN0L2pzL2RmZy11aW50OGNsYW1wZWRhcnJheQorZmFzdC9qcy9kZmctdmFsdWUtdG8taW50
MzItd2l0aC1zaWRlLWVmZmVjdHMKIGZhc3QvanMvZGZnLXdlYWstanMtY29uc3RhbnQtc2lsZW50
LWZpbGwKIGZhc3QvanMvZGljdGlvbmFyeS1uby1jYWNoZQogZmFzdC9qcy9kaWN0aW9uYXJ5LXBy
b3RvdHlwZS1jYWNoaW5nCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9k
ZmctdmFsdWUtdG8taW50MzItd2l0aC1zaWRlLWVmZmVjdC5qcwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9kZmctdmFsdWUtdG8taW50MzItd2l0aC1zaWRl
LWVmZmVjdC5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvc2NyaXB0LXRl
c3RzL2RmZy12YWx1ZS10by1pbnQzMi13aXRoLXNpZGUtZWZmZWN0LmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTcgQEAKK2Rlc2NyaXB0aW9uKAorIlRlc3RzIHRoYXQgYSBzaWRlLWVmZmVj
dGluZyBWYWx1ZVRvSW50MzIgb25seSBleGVjdXRlcyBvbmNlIHdoZW4gdGhlcmUgaXMgYW4gT1NS
IGV4aXQuIgorKTsKKworZnVuY3Rpb24gZm9vKGEsIGIpIHsKKyAgICB2YXIgcmVzdWx0ID0gYSB8
IGIuZjsKKyAgICByZXR1cm4gW3Jlc3VsdCwgYV07Cit9CisKK3ZhciBjb3VudGVyID0gMDsKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKHt2YWx1
ZU9mOmZ1bmN0aW9uKCkgeyBjb3VudGVyKys7IHJldHVybiAxOyB9fSwge2Y6aSA9PSA5OSA/IDUu
NSA6IDV9KTsKKyAgICBzaG91bGRCZSgicmVzdWx0Lmxlbmd0aCIsICIyIik7CisgICAgc2hvdWxk
QmUoInJlc3VsdFswXSIsICI1Iik7Cit9CisKK3Nob3VsZEJlKCJjb3VudGVyIiwgIjEwMCIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>188804</attachid>
            <date>2013-02-18 00:03:36 -0800</date>
            <delta_ts>2013-02-18 05:58:53 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>42501</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTQzMTQ2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUxIEBA
CisyMDEzLTAyLTE3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
R2V0IHJpZCBvZiBERkc6OkRvdWJsZU9wZXJhbmQgYW5kIHNpbXBsaWZ5IFZhbHVlVG9JbnQzMgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTEwMDcyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBW
YWx1ZVRvSW50MzIgaGFkIGEgc2lkZS1lZmZlY3RpbmcgcGF0aCwgd2hpY2ggd2FzIG5vdCBPU1It
ZnJpZW5kbHk6IGFuIE9TUiBhZnRlcgorICAgICAgICB0aGUgc2lkZS1lZmZlY3Qgd291bGQgbGVh
ZCB0byB0aGUgc2lkZS1lZmZlY3QgcmUtZXhlY3V0aW5nLiBJIGdvdCByaWQgb2YgdGhhdCBwYXRo
CisgICAgICAgIGFuZCByZXBsYWNlZCBpdCB3aXRoIGFuIG9wdGltaXphdGlvbiBmb3IgdGhlIGNh
c2Ugd2hlcmUgdGhlIGlucHV0IGlzIHNwZWN1bGF0ZWQKKyAgICAgICAgbnVtYmVyLW9yLW90aGVy
LiBUaGlzIG1ha2VzIGlkaW9tcyBsaWtlIG51bGx8MCBhbmQgdHJ1ZXwwIHdvcmsgYXMgZXhwZWN0
ZWQsIGFuZAorICAgICAgICBnZXQgb3B0aW1pemVkIGFwcHJvcHJpYXRlbHkuCisgICAgICAgIAor
ICAgICAgICBBbHNvIGdvdCByaWQgb2YgRG91YmxlT3BlcmFuZC4gUmVwbGFjZWQgYWxsIHJlbWFp
bmluZyB1c2VzIG9mIGl0IHdpdGgKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZC4gQmVj
YXVzZSB0aGUgbGF0dGVyIGFzc2VydHMgdGhhdCB0aGUgRWRnZSBpcyBhIERvdWJsZVVzZQorICAg
ICAgICBlZGdlIGFuZCB0aGUgcmVtYWluaW5nIHVzZXMgb2YgRG91YmxlT3BlcmFuZCBhcmUgYWxs
IGZvciB1bnR5cGVkIHVzZXMsIEkgd29ya2VkCisgICAgICAgIGFyb3VuZCB0aGUgYXNzZXJ0aW9u
IGJ5IHNldHRpbmcgdGhlIFVzZUtpbmQgdG8gRG91YmxlVXNlIGJ5IGZvcmNlLiBUaGlzIGlzIHNv
dW5kLAorICAgICAgICBzaW5jZSBhbGwgZXhpc3RpbmcgYXNzZXJ0aW9ucyBmb3IgRG91YmxlVXNl
IGFyZSBhY3R1YWxseSBhc3NlcnRpbmcgdGhhdCB3ZSdyZSBub3QKKyAgICAgICAgY29udmVydGlu
ZyBhIHZhbHVlIHRvIGRvdWJsZSB1bmV4cGVjdGVkbHkuIEJ1dCBhbGwgb2YgdGhlc2UgY2FsbHMg
dG8KKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCBhcmUgd2hlbiB0aGUgb3BlcmFuZCBp
cyBhbHJlYWR5IGtub3duIHRvIGJlIHJlcHJlc2VudGVkIGFzCisgICAgICAgIGRvdWJsZSwgc28g
dGhlcmUgaXMgbm8gY29udmVyc2lvbi4KKyAgICAgICAgCisgICAgICAgIFRoaXMgaXMgbmV1dHJh
bCBvbiBiZW5jaG1hcmtzLCBleGNlcHQgc3RhbmZvcmQtY3J5cHRvLWNjbSwgd2hpY2ggc3BlZWRz
IHVwIGEKKyAgICAgICAgbGl0dGxlLiBNb3N0bHksIHRoaXMgaXMgaW50ZW5kZWQgdG8gZGVsZXRl
IGEgYnVuY2ggb2YgY29kZS4gRG91YmxlT3BlcmFuZCB3YXMKKyAgICAgICAgZXF1aXZhbGVudCB0
byB0aGUgcmVwbGFjZS1lZGdlLXdpdGgtRG91YmxlVXNlIHRyaWNrIHRoYXQgSSdtIHVzaW5nIG5v
dywgZXhjZXB0IGl0CisgICAgICAgIGludm9sdmVkIGEgX2xvdF8gbW9yZSBjb2RlLgorCisgICAg
ICAgICogZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0U3RhdGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdDU0VQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcv
REZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBO
b2RlKToKKyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKERGRyk6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVWYWx1ZVRvSW50MzIpOgorICAgICAg
ICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoU3BlY3VsYXRpdmVKSVQpOgor
ICAgICAgICAoREZHKToKKyAgICAgICAgKEZQUlRlbXBvcmFyeSk6CisgICAgICAgICogZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoREZHKToKKyAgICAgICAgKEpTQzo6
REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwOgorICAgICAgICAoREZHKToKKwogMjAxMy0wMi0xNyAgUm9nZXIgRm9uZyAg
PHJvZ2VyX2ZvbmdAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQuIFdpbmRvd3MgYnVp
bGQgZml4LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdFN0YXRl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
U3RhdGUuY3BwCShyZXZpc2lvbiAxNDMwNzUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjUsMTIgKzQyNSwxNCBA
QCBib29sIEFic3RyYWN0U3RhdGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIH0KICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVJbnRlZ2VyKCkpCiAgICAg
ICAgICAgICBzcGVjdWxhdGVJbnQzMlVuYXJ5KG5vZGUpOwotICAgICAgICBlbHNlIGlmIChub2Rl
LT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkpCi0gICAgICAgICAgICBzcGVjdWxh
dGVOdW1iZXJVbmFyeShub2RlKTsKICAgICAgICAgZWxzZSBpZiAobm9kZS0+Y2hpbGQxKCktPnNo
b3VsZFNwZWN1bGF0ZUJvb2xlYW4oKSkKICAgICAgICAgICAgIHNwZWN1bGF0ZUJvb2xlYW5VbmFy
eShub2RlKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgbm9kZS0+c2V0Q2FuRXhpdChmYWxz
ZSk7CisgICAgICAgIGVsc2UgaWYgKG5vZGUtPmNoaWxkMSgpLT5zaG91bGRTcGVjdWxhdGVOdW1i
ZXIoKSkKKyAgICAgICAgICAgIHNwZWN1bGF0ZU51bWJlclVuYXJ5KG5vZGUpOworICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgIG5vZGUtPnNldENhbkV4aXQoZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkubV90eXBlICYgU3BlY0NlbGwpOworICAgICAgICAgICAgZm9yTm9kZShub2RlLT5jaGlsZDEo
KSkuZmlsdGVyKH5TcGVjQ2VsbCk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvck5v
ZGUobm9kZSkuc2V0KFNwZWNJbnQzMik7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzA3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMyLDYgKzExMzIsNyBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldFNjb3BlOgogICAg
ICAgICBjYXNlIFR5cGVPZjoKICAgICAgICAgY2FzZSBDb21wYXJlRXFDb25zdGFudDoKKyAgICAg
ICAgY2FzZSBWYWx1ZVRvSW50MzI6CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChwdXJlQ1NF
KG5vZGUpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE0MzA3NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTE4MCwxNSArMTgwLDYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBWYWx1ZVRvSW50MzI6IHsKLSAg
ICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlTnVtYmVyKCkKLSAg
ICAgICAgICAgICAgICAmJiBub2RlLT5tdXN0R2VuZXJhdGUoKSkgewotICAgICAgICAgICAgICAg
IG5vZGUtPmNsZWFyRmxhZ3MoTm9kZU11c3RHZW5lcmF0ZSk7Ci0gICAgICAgICAgICAgICAgbV9n
cmFwaC5kZXJlZihub2RlKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBCaXRBbmQ6CiAgICAgICAgIGNhc2Ug
Qml0T3I6CiAgICAgICAgIGNhc2UgQml0WG9yOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTQzMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhCaXRSU2hpZnQsIE5vZGVS
ZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEJpdFVSU2hpZnQsIE5vZGVSZXN1bHRJbnQzMikgXAog
ICAgIC8qIEJpdHdpc2Ugb3BlcmF0b3JzIGNhbGwgVG9JbnQzMiBvbiB0aGVpciBvcGVyYW5kcy4g
Ki9cCi0gICAgbWFjcm8oVmFsdWVUb0ludDMyLCBOb2RlUmVzdWx0SW50MzIgfCBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgbWFjcm8oVmFsdWVUb0ludDMyLCBOb2RlUmVzdWx0SW50MzIpIFwKICAg
ICAvKiBVc2VkIHRvIGJveCB0aGUgcmVzdWx0IG9mIFVSU2hpZnQgbm9kZXMgKHJlc3VsdCBoYXMg
cmFuZ2UgMC4uMl4zMi0xKS4gKi9cCiAgICAgbWFjcm8oVUludDMyVG9OdW1iZXIsIE5vZGVSZXN1
bHROdW1iZXIpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE0MzA3NSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTExMywxMzAgKzExMyw2IEBAIEdQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6Zmls
bEludGVnZXIoTm9kZSoKICAgICB9CiB9CiAKLUZQUlJlZyBTcGVjdWxhdGl2ZUpJVDo6ZmlsbERv
dWJsZShOb2RlKiBub2RlKQotewotICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIg
PSBub2RlLT52aXJ0dWFsUmVnaXN0ZXIoKTsKLSAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IG1f
Z2VuZXJhdGlvbkluZm9bdmlydHVhbFJlZ2lzdGVyXTsKLQotICAgIGlmIChpbmZvLnJlZ2lzdGVy
Rm9ybWF0KCkgPT0gRGF0YUZvcm1hdE5vbmUpIHsKLQotICAgICAgICBpZiAobm9kZS0+aGFzQ29u
c3RhbnQoKSkgewotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkgewotICAg
ICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KLSAgICAgICAg
ICAgICAgICBHUFJSZWcgZ3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50MzJDb25zdGFudChub2RlKSksIGdw
cik7Ci0gICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihncHIsIHZpcnR1YWxSZWdpc3Rlciwg
U3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxJbnRlZ2VyKCpt
X3N0cmVhbSwgZ3ByKTsKLSAgICAgICAgICAgICAgICB1bmxvY2soZ3ByKTsKLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkgewotICAgICAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoYWRkcmVzc09mRG91YmxlQ29uc3RhbnQobm9kZSksIGZwcik7Ci0gICAgICAgICAgICAgICAg
bV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7Ci0g
ICAgICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCptX3N0cmVhbSwgZnByKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gZnByOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogc2hvdWxkIG5vdCBiZSByZWFjaGFibGU/Ci0gICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgIERhdGFGb3JtYXQgc3BpbGxGb3JtYXQgPSBpbmZvLnNwaWxsRm9ybWF0
KCk7Ci0gICAgICAgICAgICBBU1NFUlQoKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKSB8fCBz
cGlsbEZvcm1hdCA9PSBEYXRhRm9ybWF0SW50ZWdlcik7Ci0gICAgICAgICAgICBpZiAoc3BpbGxG
b3JtYXQgPT0gRGF0YUZvcm1hdEpTRG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZw
ciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRD
b21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwotICAgICAgICAgICAg
ICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJTcGlsbGVk
KTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3RyZWFtLCBmcHIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBmcHI7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aGFzVW5ib3hlZERvdWJsZTsKLQotICAgICAgICAgICAgaWYgKHNwaWxsRm9ybWF0ICE9IERhdGFG
b3JtYXRKU0ludGVnZXIgJiYgc3BpbGxGb3JtYXQgIT0gRGF0YUZvcm1hdEludGVnZXIpIHsKLSAg
ICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIEpJVENvbXBpbGVyOjp0YWdGb3IodmlydHVhbFJlZ2lz
dGVyKSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICAgICAg
bV9qaXQubG9hZERvdWJsZShKSVRDb21waWxlcjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIp
LCBmcHIpOwotICAgICAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1wKCk7
Ci0gICAgICAgICAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9Eb3VibGUoSklUQ29tcGlsZXI6OnBh
eWxvYWRGb3IodmlydHVhbFJlZ2lzdGVyKSwgZnByKTsKLQotICAgICAgICAgICAgaWYgKGhhc1Vu
Ym94ZWREb3VibGUuaXNTZXQoKSkKLSAgICAgICAgICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxp
bmsoJm1faml0KTsKLQotICAgICAgICAgICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdp
c3RlciwgU3BpbGxPcmRlclNwaWxsZWQpOwotICAgICAgICAgICAgaW5mby5maWxsRG91YmxlKCpt
X3N0cmVhbSwgZnByKTsKLSAgICAgICAgICAgIHJldHVybiBmcHI7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBzd2l0Y2ggKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSkgewotICAgIGNhc2UgRGF0YUZv
cm1hdE5vbmU6Ci0gICAgICAgIC8vIFNob3VsZCBoYXZlIGZpbGxlZCwgYWJvdmUuCi0gICAgY2Fz
ZSBEYXRhRm9ybWF0Q2VsbDoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0NlbGw6Ci0gICAgY2FzZSBE
YXRhRm9ybWF0Qm9vbGVhbjoKLSAgICBjYXNlIERhdGFGb3JtYXRKU0Jvb2xlYW46Ci0gICAgY2Fz
ZSBEYXRhRm9ybWF0U3RvcmFnZToKLSAgICAgICAgLy8gU2hvdWxkIG9ubHkgYmUgY2FsbGluZyB0
aGlzIGZ1bmN0aW9uIGlmIHdlIGtub3cgdGhpcyBvcGVyYW5kIHRvIGJlIG51bWVyaWMuCi0gICAg
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0KLSAgICBjYXNlIERhdGFGb3JtYXRK
U0ludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlM6IHsKLSAgICAgICAgR1BSUmVnIHRhZ0dQ
UiA9IGluZm8udGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyBwYXlsb2FkR1BSID0gaW5mby5wYXls
b2FkR1BSKCk7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICBt
X2dwcnMubG9jayh0YWdHUFIpOwotICAgICAgICBtX2dwcnMubG9jayhwYXlsb2FkR1BSKTsKLQot
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBoYXNVbmJveGVkRG91YmxlOwotCi0gICAgICAgIGlm
IChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkgIT0gRGF0YUZvcm1hdEpTSW50ZWdlcikgewotICAgICAg
ICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7Ci0gICAgICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6RXF1YWws
IHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7Ci0gICAgICAgICAgICBt
X2ppdC5qaXRBc3NlcnRJc0pTRG91YmxlKHRhZ0dQUik7Ci0gICAgICAgICAgICB1bmJveERvdWJs
ZSh0YWdHUFIsIHBheWxvYWRHUFIsIGZwciwgc2NyYXRjaC5mcHIoKSk7Ci0gICAgICAgICAgICBo
YXNVbmJveGVkRG91YmxlID0gbV9qaXQuanVtcCgpOwotICAgICAgICAgICAgaXNJbnRlZ2VyLmxp
bmsoJm1faml0KTsKLSAgICAgICAgfQotCi0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91
YmxlKHBheWxvYWRHUFIsIGZwcik7Ci0KLSAgICAgICAgaWYgKGhhc1VuYm94ZWREb3VibGUuaXNT
ZXQoKSkKLSAgICAgICAgICAgIGhhc1VuYm94ZWREb3VibGUubGluaygmbV9qaXQpOwotCi0gICAg
ICAgIG1fZ3Bycy5yZWxlYXNlKHRhZ0dQUik7Ci0gICAgICAgIG1fZ3Bycy5yZWxlYXNlKHBheWxv
YWRHUFIpOwotICAgICAgICBtX2dwcnMudW5sb2NrKHRhZ0dQUik7Ci0gICAgICAgIG1fZ3Bycy51
bmxvY2socGF5bG9hZEdQUik7Ci0gICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVn
aXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAgICAgICBpbmZvLmZpbGxEb3VibGUoKm1fc3Ry
ZWFtLCBmcHIpOwotICAgICAgICBpbmZvLmtpbGxTcGlsbGVkKCk7Ci0gICAgICAgIHJldHVybiBm
cHI7Ci0gICAgfQotCi0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAgICAgICBGUFJS
ZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8uZ3ByKCk7
Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKGdwciwgZnByKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayhncHIpOwotICAgICAgICBy
ZXR1cm4gZnByOwotICAgIH0KLQotICAgIGNhc2UgRGF0YUZvcm1hdEpTRG91YmxlOiAKLSAgICBj
YXNlIERhdGFGb3JtYXREb3VibGU6IHsKLSAgICAgICAgRlBSUmVnIGZwciA9IGluZm8uZnByKCk7
Ci0gICAgICAgIG1fZnBycy5sb2NrKGZwcik7Ci0gICAgICAgIHJldHVybiBmcHI7Ci0gICAgfQot
Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAg
ICAgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7Ci0gICAgfQotfQotCiBib29sIFNwZWN1bGF0aXZl
SklUOjpmaWxsSlNWYWx1ZShOb2RlKiBub2RlLCBHUFJSZWcmIHRhZ0dQUiwgR1BSUmVnJiBwYXls
b2FkR1BSLCBGUFJSZWcmIGZwcikKIHsKICAgICAvLyBGSVhNRTogRm9yIGRvdWJsZSB3ZSBjb3Vs
ZCBmaWxsIHdpdGggYSBGUFIuCkBAIC00MzQsNDkgKzMxMCw2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6Om5vblNwZWN1bGF0aXZlVmFsdWUKICAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwg
cmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKIH0K
IAotdm9pZCBTcGVjdWxhdGl2ZUpJVDo6bm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIoTm9kZSog
bm9kZSkKLXsKLSAgICBBU1NFUlQoIWlzSW50MzJDb25zdGFudChub2RlLT5jaGlsZDEoKS5ub2Rl
KCkpKTsKLQotICAgIGlmIChpc0tub3duSW50ZWdlcihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7
Ci0gICAgICAgIEludGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAg
ICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKLSAgICAgICAgbV9qaXQubW92ZShv
cDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0Lmdw
cigpLCBub2RlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIEdlbmVyYXRpb25JbmZv
JiBjaGlsZEluZm8gPSBtX2dlbmVyYXRpb25JbmZvW25vZGUtPmNoaWxkMSgpLT52aXJ0dWFsUmVn
aXN0ZXIoKV07Ci0gICAgaWYgKGNoaWxkSW5mby5pc0pTRG91YmxlKCkpIHsKLSAgICAgICAgRG91
YmxlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJUZW1wb3Jh
cnkgcmVzdWx0KHRoaXMpOwotICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwotICAgICAg
ICBHUFJSZWcgZ3ByID0gcmVzdWx0LmdwcigpOwotICAgICAgICBvcDEudXNlKCk7Ci0gICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRy
dW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNh
dGVGYWlsZWQpOwotCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKHNsb3dQYXRoQ2FsbChu
b3RUcnVuY2F0ZWRUb0ludGVnZXIsIHRoaXMsIHRvSW50MzIsIGdwciwgZnByKSk7Ci0KLSAgICAg
ICAgaW50ZWdlclJlc3VsdChncHIsIG5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgR1BS
UmVnIHRhZ0dQUiA9IG9wMS50YWdHUFIoKTsKLSAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5w
YXlsb2FkR1BSKCk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKLSAgICBv
cDEudXNlKCk7Ci0KLSAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdEludGVnZXIgPSBtX2ppdC5i
cmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkludDMyVGFnKSk7Ci0KLSAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdQ
Uik7Ci0gICAgCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3Ioc2xvd1BhdGhDYWxsKGlzTm90SW50
ZWdlciwgdGhpcywgZGZnQ29udmVydEpTVmFsdWVUb0ludDMyLCByZXN1bHRHUFIsIHRhZ0dQUiwg
cGF5bG9hZEdQUikpOwotICAgIAotICAgIGludGVnZXJSZXN1bHQocmVzdWx0R1BSLCBub2RlLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotfQotCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpu
b25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKE5vZGUqIG5vZGUpCiB7CiAgICAgSW50ZWdlck9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKQEAgLTIyODYsNyArMjExOSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3RlZFR5cGUgPSBub2RlLT52YXJpYWJsZUFj
Y2Vzc0RhdGEoKS0+YXJndW1lbnRBd2FyZVByZWRpY3Rpb24oKTsKICAgICAgICAgICAgIGlmICht
X2dlbmVyYXRpb25JbmZvW25vZGUtPmNoaWxkMSgpLT52aXJ0dWFsUmVnaXN0ZXIoKV0ucmVnaXN0
ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0RG91YmxlKSB7Ci0gICAgICAgICAgICAgICAgRG91Ymxl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlRG91YmxlT3BlcmFuZCB2YWx1ZSh0aGlzLCBFZGdlKG5vZGUtPmNoaWxkMSgpLm5vZGUo
KSwgRG91YmxlVXNlKSk7CiAgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmVEb3VibGUodmFsdWUu
ZnByKCksIEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKG5vZGUtPmxvY2FsKCkpKTsKICAgICAgICAg
ICAgICAgICBub1Jlc3VsdChub2RlKTsKICAgICAgICAgICAgICAgICByZWNvcmRTZXRMb2NhbChu
b2RlLT5sb2NhbCgpLCBWYWx1ZVNvdXJjZShEb3VibGVJbkpTU3RhY2spKTsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2
aXNpb24gMTQzMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE3LDE1NSArMTE3LDYgQEAgR1BSUmVnIFNw
ZWN1bGF0aXZlSklUOjpmaWxsSW50ZWdlcihOb2RlKgogICAgIH0KIH0KIAotRlBSUmVnIFNwZWN1
bGF0aXZlSklUOjpmaWxsRG91YmxlKE5vZGUqIG5vZGUpCi17Ci0gICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgIEdlbmVyYXRp
b25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwotCi0gICAg
aWYgKGluZm8ucmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0Tm9uZSkgewotICAgICAgICBp
ZiAobm9kZS0+aGFzQ29uc3RhbnQoKSkgewotICAgICAgICAgICAgR1BSUmVnIGdwciA9IGFsbG9j
YXRlKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgaWYgKGlzSW50MzJDb25zdGFudChub2RlKSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJlYWNoYWJsZT8KLSAg
ICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpJbW0zMih2YWx1ZU9mSW50
MzJDb25zdGFudChub2RlKSksIGdwcik7Ci0gICAgICAgICAgICAgICAgbV9ncHJzLnJldGFpbihn
cHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckNvbnN0YW50KTsKLSAgICAgICAgICAgICAg
ICBpbmZvLmZpbGxJbnRlZ2VyKCptX3N0cmVhbSwgZ3ByKTsKLSAgICAgICAgICAgICAgICB1bmxv
Y2soZ3ByKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNOdW1iZXJDb25zdGFudChub2RlKSkg
ewotICAgICAgICAgICAgICAgIEZQUlJlZyBmcHIgPSBmcHJBbGxvY2F0ZSgpOwotICAgICAgICAg
ICAgICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OkltbTY0KHJlaW50ZXJwcmV0RG91Ymxl
VG9JbnQ2NCh2YWx1ZU9mTnVtYmVyQ29uc3RhbnQobm9kZSkpKSwgZ3ByKTsKLSAgICAgICAgICAg
ICAgICBtX2ppdC5tb3ZlNjRUb0RvdWJsZShncHIsIGZwcik7Ci0gICAgICAgICAgICAgICAgdW5s
b2NrKGdwcik7Ci0KLSAgICAgICAgICAgICAgICBtX2ZwcnMucmV0YWluKGZwciwgdmlydHVhbFJl
Z2lzdGVyLCBTcGlsbE9yZGVyRG91YmxlKTsKLSAgICAgICAgICAgICAgICBpbmZvLmZpbGxEb3Vi
bGUoKm1fc3RyZWFtLCBmcHIpOwotICAgICAgICAgICAgICAgIHJldHVybiBmcHI7Ci0gICAgICAg
ICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgbm90IGJlIHJl
YWNoYWJsZT8KLSAgICAgICAgICAgICAgICBBU1NFUlQoaXNKU0NvbnN0YW50KG5vZGUpKTsKLSAg
ICAgICAgICAgICAgICBKU1ZhbHVlIGpzVmFsdWUgPSB2YWx1ZU9mSlNDb25zdGFudChub2RlKTsK
LSAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQo
SlNWYWx1ZTo6ZW5jb2RlKGpzVmFsdWUpKSwgZ3ByKTsKLSAgICAgICAgICAgICAgICBtX2dwcnMu
cmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyQ29uc3RhbnQpOwotICAgICAg
ICAgICAgICAgIGluZm8uZmlsbEpTVmFsdWUoKm1fc3RyZWFtLCBncHIsIERhdGFGb3JtYXRKUyk7
Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBEYXRhRm9ybWF0IHNwaWxsRm9ybWF0ID0gaW5mby5zcGlsbEZv
cm1hdCgpOwotICAgICAgICAgICAgc3dpdGNoIChzcGlsbEZvcm1hdCkgewotICAgICAgICAgICAg
Y2FzZSBEYXRhRm9ybWF0RG91YmxlOiB7Ci0gICAgICAgICAgICAgICAgRlBSUmVnIGZwciA9IGZw
ckFsbG9jYXRlKCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShKSVRDb21waWxl
cjo6YWRkcmVzc0Zvcih2aXJ0dWFsUmVnaXN0ZXIpLCBmcHIpOwotICAgICAgICAgICAgICAgIG1f
ZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFsUmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotICAg
ICAgICAgICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZwcjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIGNhc2UgRGF0YUZvcm1hdEludGVnZXI6IHsKLSAgICAgICAgICAgICAgICBHUFJSZWcg
Z3ByID0gYWxsb2NhdGUoKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dw
cnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxlZCk7Ci0gICAg
ICAgICAgICAgICAgbV9qaXQubG9hZDMyKEpJVENvbXBpbGVyOjphZGRyZXNzRm9yKHZpcnR1YWxS
ZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSW50ZWdlcigqbV9zdHJl
YW0sIGdwcik7Ci0gICAgICAgICAgICAgICAgdW5sb2NrKGdwcik7Ci0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICAgICAgR1BSUmVnIGdwciA9IGFsbG9jYXRlKCk7Ci0gICAgICAgIAotICAgICAgICAgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHNwaWxsRm9ybWF0ICYgRGF0YUZvcm1hdEpTKTsKLSAgICAgICAgICAg
ICAgICBtX2dwcnMucmV0YWluKGdwciwgdmlydHVhbFJlZ2lzdGVyLCBTcGlsbE9yZGVyU3BpbGxl
ZCk7Ci0gICAgICAgICAgICAgICAgbV9qaXQubG9hZDY0KEpJVENvbXBpbGVyOjphZGRyZXNzRm9y
KHZpcnR1YWxSZWdpc3RlciksIGdwcik7Ci0gICAgICAgICAgICAgICAgaW5mby5maWxsSlNWYWx1
ZSgqbV9zdHJlYW0sIGdwciwgc3BpbGxGb3JtYXQpOwotICAgICAgICAgICAgICAgIHVubG9jayhn
cHIpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0g
ICAgfQotCi0gICAgc3dpdGNoIChpbmZvLnJlZ2lzdGVyRm9ybWF0KCkpIHsKLSAgICBjYXNlIERh
dGFGb3JtYXROb25lOgotICAgICAgICAvLyBTaG91bGQgaGF2ZSBmaWxsZWQsIGFib3ZlLgotICAg
IGNhc2UgRGF0YUZvcm1hdENlbGw6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNDZWxsOgotICAgIGNh
c2UgRGF0YUZvcm1hdEJvb2xlYW46Ci0gICAgY2FzZSBEYXRhRm9ybWF0SlNCb29sZWFuOgotICAg
IGNhc2UgRGF0YUZvcm1hdFN0b3JhZ2U6Ci0gICAgICAgIC8vIFNob3VsZCBvbmx5IGJlIGNhbGxp
bmcgdGhpcyBmdW5jdGlvbiBpZiB3ZSBrbm93IHRoaXMgb3BlcmFuZCB0byBiZSBudW1lcmljLgot
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotCi0gICAgY2FzZSBEYXRhRm9y
bWF0SlM6IHsKLSAgICAgICAgR1BSUmVnIGpzVmFsdWVHcHIgPSBpbmZvLmdwcigpOwotICAgICAg
ICBtX2dwcnMubG9jayhqc1ZhbHVlR3ByKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9j
YXRlKCk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR3ByID0gYWxsb2NhdGUoKTsgLy8gRklYTUU6IGNh
biB3ZSBza2lwIHRoaXMgYWxsb2NhdGlvbiBvbiB0aGUgbGFzdCB1c2Ugb2YgdGhlIHZpcnR1YWwg
cmVnaXN0ZXI/Ci0KLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0gbV9qaXQu
YnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwganNWYWx1ZUdwciwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLQotICAgICAgICBtX2ppdC5qaXRBc3NlcnRJc0pT
RG91YmxlKGpzVmFsdWVHcHIpOwotCi0gICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQgaGVyZSB3
ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCi0gICAgICAgIG1faml0Lm1vdmUo
anNWYWx1ZUdwciwgdGVtcEdwcik7Ci0gICAgICAgIHVuYm94RG91YmxlKHRlbXBHcHIsIGZwcik7
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGhhc1VuYm94ZWREb3VibGUgPSBtX2ppdC5qdW1w
KCk7Ci0KLSAgICAgICAgLy8gRmluYWxseSwgaGFuZGxlIGludGVnZXJzLgotICAgICAgICBpc0lu
dGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShq
c1ZhbHVlR3ByLCBmcHIpOwotICAgICAgICBoYXNVbmJveGVkRG91YmxlLmxpbmsoJm1faml0KTsK
LQotICAgICAgICBtX2dwcnMucmVsZWFzZShqc1ZhbHVlR3ByKTsKLSAgICAgICAgbV9ncHJzLnVu
bG9jayhqc1ZhbHVlR3ByKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayh0ZW1wR3ByKTsKLSAgICAg
ICAgbV9mcHJzLnJldGFpbihmcHIsIHZpcnR1YWxSZWdpc3RlciwgU3BpbGxPcmRlckRvdWJsZSk7
Ci0gICAgICAgIGluZm8uZmlsbERvdWJsZSgqbV9zdHJlYW0sIGZwcik7Ci0gICAgICAgIGluZm8u
a2lsbFNwaWxsZWQoKTsKLSAgICAgICAgcmV0dXJuIGZwcjsKLSAgICB9Ci0KLSAgICBjYXNlIERh
dGFGb3JtYXRKU0ludGVnZXI6Ci0gICAgY2FzZSBEYXRhRm9ybWF0SW50ZWdlcjogewotICAgICAg
ICBGUFJSZWcgZnByID0gZnByQWxsb2NhdGUoKTsKLSAgICAgICAgR1BSUmVnIGdwciA9IGluZm8u
Z3ByKCk7Ci0gICAgICAgIG1fZ3Bycy5sb2NrKGdwcik7Ci0gICAgICAgIG1faml0LmNvbnZlcnRJ
bnQzMlRvRG91YmxlKGdwciwgZnByKTsKLSAgICAgICAgbV9ncHJzLnVubG9jayhncHIpOwotICAg
ICAgICByZXR1cm4gZnByOwotICAgIH0KLQotICAgIC8vIFVuYm94IHRoZSBkb3VibGUKLSAgICBj
YXNlIERhdGFGb3JtYXRKU0RvdWJsZTogewotICAgICAgICBHUFJSZWcgZ3ByID0gaW5mby5ncHIo
KTsKLSAgICAgICAgRlBSUmVnIGZwciA9IGZwckFsbG9jYXRlKCk7Ci0gICAgICAgIGlmIChtX2dw
cnMuaXNMb2NrZWQoZ3ByKSkgewotICAgICAgICAgICAgLy8gTWFrZSBzdXJlIHdlIGRvbid0IHRy
YW1wbGUgZ3ByIGlmIGl0IGlzIGluIHVzZS4KLSAgICAgICAgICAgIEdQUlJlZyB0ZW1wID0gYWxs
b2NhdGUoKTsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoZ3ByLCB0ZW1wKTsKLSAgICAgICAgICAg
IHVuYm94RG91YmxlKHRlbXAsIGZwcik7Ci0gICAgICAgICAgICB1bmxvY2sodGVtcCk7Ci0gICAg
ICAgIH0gZWxzZQotICAgICAgICAgICAgdW5ib3hEb3VibGUoZ3ByLCBmcHIpOwotCi0gICAgICAg
IG1fZ3Bycy5yZWxlYXNlKGdwcik7Ci0gICAgICAgIG1fZnBycy5yZXRhaW4oZnByLCB2aXJ0dWFs
UmVnaXN0ZXIsIFNwaWxsT3JkZXJEb3VibGUpOwotCi0gICAgICAgIGluZm8uZmlsbERvdWJsZSgq
bV9zdHJlYW0sIGZwcik7Ci0gICAgICAgIHJldHVybiBmcHI7Ci0gICAgfQotCi0gICAgY2FzZSBE
YXRhRm9ybWF0RG91YmxlOiB7Ci0gICAgICAgIEZQUlJlZyBmcHIgPSBpbmZvLmZwcigpOwotICAg
ICAgICBtX2ZwcnMubG9jayhmcHIpOwotICAgICAgICByZXR1cm4gZnByOwotICAgIH0KLSAgICAg
ICAgCi0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAgICAgcmV0dXJuIEludmFsaWRGUFJSZWc7Ci0gICAgfQotfQotCiBHUFJSZWcgU3BlY3Vs
YXRpdmVKSVQ6OmZpbGxKU1ZhbHVlKE5vZGUqIG5vZGUpCiB7CiAgICAgVmlydHVhbFJlZ2lzdGVy
IHZpcnR1YWxSZWdpc3RlciA9IG5vZGUtPnZpcnR1YWxSZWdpc3RlcigpOwpAQCAtNDI1LDUwICsy
NzYsNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpub25TcGVjdWxhdGl2ZVZhbHVlCiAgICAganNW
YWx1ZVJlc3VsdChyZXN1bHQuZ3ByKCksIG1fY3VycmVudE5vZGUsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7CiB9CiAKLXZvaWQgU3BlY3VsYXRpdmVKSVQ6Om5vblNwZWN1bGF0aXZlVmFs
dWVUb0ludDMyKE5vZGUqIG5vZGUpCi17Ci0gICAgQVNTRVJUKCFpc0ludDMyQ29uc3RhbnQobm9k
ZS0+Y2hpbGQxKCkubm9kZSgpKSk7Ci0gICAgCi0gICAgaWYgKGlzS25vd25JbnRlZ2VyKG5vZGUt
PmNoaWxkMSgpLm5vZGUoKSkpIHsKLSAgICAgICAgSW50ZWdlck9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwot
ICAgICAgICBtX2ppdC56ZXJvRXh0ZW5kMzJUb1B0cihvcDEuZ3ByKCksIHJlc3VsdC5ncHIoKSk7
Ci0gICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0LmdwcigpLCBtX2N1cnJlbnROb2RlKTsKLSAg
ICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBHZW5lcmF0aW9uSW5mbyYgY2hpbGRJbmZv
ID0gbV9nZW5lcmF0aW9uSW5mb1tub2RlLT5jaGlsZDEoKS0+dmlydHVhbFJlZ2lzdGVyKCldOwot
ICAgIGlmIChjaGlsZEluZm8uaXNKU0RvdWJsZSgpKSB7Ci0gICAgICAgIERvdWJsZU9wZXJhbmQg
b3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKLSAgICAgICAgRlBSUmVnIGZwciA9IG9wMS5mcHIoKTsKLSAgICAgICAgR1BSUmVnIGdw
ciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgb3AxLnVzZSgpOwotICAgICAgICBKSVRDb21waWxl
cjo6SnVtcCBub3RUcnVuY2F0ZWRUb0ludGVnZXIgPSBtX2ppdC5icmFuY2hUcnVuY2F0ZURvdWJs
ZVRvSW50MzIoZnByLCBncHIsIEpJVENvbXBpbGVyOjpCcmFuY2hJZlRydW5jYXRlRmFpbGVkKTsK
LSAgICAgICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xv
d1BhdGhDYWxsKG5vdFRydW5jYXRlZFRvSW50ZWdlciwgdGhpcywgdG9JbnQzMiwgZ3ByLCBmcHIp
KTsKLQotICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbV9jdXJyZW50Tm9kZSwgVXNlQ2hpbGRy
ZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICAKLSAgICBK
U1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgIEdQUlRlbXBvcmFy
eSByZXN1bHQodGhpcywgb3AxKTsKLSAgICBHUFJSZWcganNWYWx1ZUdwciA9IG9wMS5ncHIoKTsK
LSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOwotICAgIG9wMS51c2UoKTsKLQot
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90SW50ZWdlciA9IG1faml0LmJyYW5jaDY0KE1hY3Jv
QXNzZW1ibGVyOjpCZWxvdywganNWYWx1ZUdwciwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lz
dGVyKTsKLQotICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGpzVmFsdWVHcHIsIHJlc3VsdEdQ
Uik7Ci0gICAgCi0gICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgIHNsb3dQYXRoQ2Fs
bChpc05vdEludGVnZXIsIHRoaXMsIGRmZ0NvbnZlcnRKU1ZhbHVlVG9JbnQzMiwgcmVzdWx0R1BS
LCBqc1ZhbHVlR3ByKSk7Ci0KLSAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50
Tm9kZSwgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLX0KLQogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6bm9uU3BlY3VsYXRpdmVVSW50MzJUb051bWJlcihOb2RlKiBub2RlKQogewogICAgIElu
dGVnZXJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTQz
MDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsMjggKzE0MTEsNiBAQCBGUFJUZW1wb3Jhcnk6OkZQUlRl
bXBvcmFyeShTcGVjdWxhdGl2ZUpJCiAgICAgbV9mcHIgPSBtX2ppdC0+ZnByQWxsb2NhdGUoKTsK
IH0KIAotRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgRG91
YmxlT3BlcmFuZCYgb3AxKQotICAgIDogbV9qaXQoaml0KQotICAgICwgbV9mcHIoSW52YWxpZEZQ
UlJlZykKLXsKLSAgICBpZiAobV9qaXQtPmNhblJldXNlKG9wMS5ub2RlKCkpKQotICAgICAgICBt
X2ZwciA9IG1faml0LT5yZXVzZShvcDEuZnByKCkpOwotICAgIGVsc2UKLSAgICAgICAgbV9mcHIg
PSBtX2ppdC0+ZnByQWxsb2NhdGUoKTsKLX0KLQotRlBSVGVtcG9yYXJ5OjpGUFJUZW1wb3Jhcnko
U3BlY3VsYXRpdmVKSVQqIGppdCwgRG91YmxlT3BlcmFuZCYgb3AxLCBEb3VibGVPcGVyYW5kJiBv
cDIpCi0gICAgOiBtX2ppdChqaXQpCi0gICAgLCBtX2ZwcihJbnZhbGlkRlBSUmVnKQotewotICAg
IGlmIChtX2ppdC0+Y2FuUmV1c2Uob3AxLm5vZGUoKSkpCi0gICAgICAgIG1fZnByID0gbV9qaXQt
PnJldXNlKG9wMS5mcHIoKSk7Ci0gICAgZWxzZSBpZiAobV9qaXQtPmNhblJldXNlKG9wMi5ub2Rl
KCkpKQotICAgICAgICBtX2ZwciA9IG1faml0LT5yZXVzZShvcDIuZnByKCkpOwotICAgIGVsc2UK
LSAgICAgICAgbV9mcHIgPSBtX2ppdC0+ZnByQWxsb2NhdGUoKTsKLX0KLQogRlBSVGVtcG9yYXJ5
OjpGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqIGppdCwgU3BlY3VsYXRlRG91YmxlT3BlcmFu
ZCYgb3AxKQogICAgIDogbV9qaXQoaml0KQogICAgICwgbV9mcHIoSW52YWxpZEZQUlJlZykKQEAg
LTIyMDIsMTE2ICsyMTgwLDE0NiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlVmFsdWVU
b0ludDMyCiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgaWYgKG5vZGUtPmNoaWxk
MSgpLT5zaG91bGRTcGVjdWxhdGVOdW1iZXIoKSkgewotICAgICAgICBzd2l0Y2ggKGNoZWNrR2Vu
ZXJhdGVkVHlwZUZvclRvSW50MzIobm9kZS0+Y2hpbGQxKCkubm9kZSgpKSkgewotICAgICAgICBj
YXNlIEdlbmVyYXRlZE9wZXJhbmRJbnRlZ2VyOiB7Ci0gICAgICAgICAgICBTcGVjdWxhdGVJbnRl
Z2VyT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICAgICAgR1BSVGVt
cG9yYXJ5IHJlc3VsdCh0aGlzLCBvcDEpOwotICAgICAgICAgICAgbV9qaXQubW92ZShvcDEuZ3By
KCksIHJlc3VsdC5ncHIoKSk7Ci0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIo
KSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQot
ICAgICAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3VibGU6IHsKLSAgICAgICAgICAgIEdQUlRl
bXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgICAgICAgICBEb3VibGVPcGVyYW5kIG9wMSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgICAgICBGUFJSZWcgZnByID0gb3AxLmZwcigpOwot
ICAgICAgICAgICAgR1BSUmVnIGdwciA9IHJlc3VsdC5ncHIoKTsKLSAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIG5vdFRydW5jYXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRl
RG91YmxlVG9JbnQzMihmcHIsIGdwciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWls
ZWQpOworICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRlQm9vbGVhbigpKSB7
CisgICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEo
KSk7CisgICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhpcywgb3AxKTsKKyAgICAgICAgCisg
ICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBtX2pp
dC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEpLCByZXN1bHQuZ3ByKCkpOworICAg
ICAgICAKKyAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQuZ3ByKCksIG5vZGUpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIAorICAgIHN3aXRjaCAoY2hlY2tHZW5lcmF0ZWRUeXBlRm9y
VG9JbnQzMihub2RlLT5jaGlsZDEoKS5ub2RlKCkpKSB7CisgICAgY2FzZSBHZW5lcmF0ZWRPcGVy
YW5kSW50ZWdlcjogeworICAgICAgICBTcGVjdWxhdGVJbnRlZ2VyT3BlcmFuZCBvcDEodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBHUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMsIG9wMSk7
CisgICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQuZ3ByKCkpOworICAgICAgICBp
bnRlZ2VyUmVzdWx0KHJlc3VsdC5ncHIoKSwgbm9kZSwgb3AxLmZvcm1hdCgpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKyAgICBjYXNlIEdlbmVyYXRlZE9wZXJhbmREb3VibGU6IHsKKyAgICAg
ICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCBvcDEodGhpcywgRWRnZShub2RlLT5jaGlsZDEoKS5ub2RlKCksIERvdWJsZVVzZSkpOyAv
LyBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHdpbGwgYXNzZXJ0IHRoYXQgdGhpcyBpcyBhIGRvdWJs
ZSB1c2UuIFdlIGZvcmNlIGl0IHRvIHRoaW5rIHRoYXQgaXQgd2FzIGEgZG91YmxlIHVzZSwgc2lu
Y2Ugd2UgYXJlIGluZmVycmluZyB0aGF0IHdlIG91Z2h0IHRvIGVtaXQgYSBkb3VibGUgdXNlIHF1
aXRlIGxhdGUuCisgICAgICAgIEZQUlJlZyBmcHIgPSBvcDEuZnByKCk7CisgICAgICAgIEdQUlJl
ZyBncHIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIG5vdFRydW5j
YXRlZFRvSW50ZWdlciA9IG1faml0LmJyYW5jaFRydW5jYXRlRG91YmxlVG9JbnQzMihmcHIsIGdw
ciwgSklUQ29tcGlsZXI6OkJyYW5jaElmVHJ1bmNhdGVGYWlsZWQpOwogICAgICAgICAgICAgCi0g
ICAgICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVk
VG9JbnRlZ2VyLCB0aGlzLCB0b0ludDMyLCBncHIsIGZwcikpOworICAgICAgICBhZGRTbG93UGF0
aEdlbmVyYXRvcihzbG93UGF0aENhbGwobm90VHJ1bmNhdGVkVG9JbnRlZ2VyLCB0aGlzLCB0b0lu
dDMyLCBncHIsIGZwcikpOwogCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KGdwciwgbm9kZSk7
Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZW5lcmF0ZWRP
cGVyYW5kSlNWYWx1ZTogewotICAgICAgICAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsK
KyAgICAgICAgaW50ZWdlclJlc3VsdChncHIsIG5vZGUpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZEpTVmFsdWU6IHsKKyAgICAgICAgR1BSVGVtcG9y
YXJ5IHJlc3VsdCh0aGlzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKIAotICAgICAgICAgICAgR1BSUmVnIGdwciA9
IG9wMS5ncHIoKTsKLSAgICAgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1bHQuZ3ByKCk7
Ci0gICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKLSAgICAgICAgICAgIEZQ
UlJlZyBmcHIgPSB0ZW1wRnByLmZwcigpOworICAgICAgICBHUFJSZWcgZ3ByID0gb3AxLmdwcigp
OworICAgICAgICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICBGUFJU
ZW1wb3JhcnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgRlBSUmVnIGZwciA9IHRlbXBGcHIuZnBy
KCk7CiAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJy
YW5jaDY0KE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIGdwciwgR1BSSW5mbzo6dGFnVHlw
ZU51bWJlclJlZ2lzdGVyKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNJbnRlZ2VyID0g
bV9qaXQuYnJhbmNoNjQoTWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgZ3ByLCBHUFJJbmZv
Ojp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
Y29udmVydGVkOwogCi0gICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9zdGF0
ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICBpZiAoIWlzTnVtYmVy
U3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7Cisg
ICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQog
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3By
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVy
bywgZ3ByLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgIGVs
c2UgeworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQu
YnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBncHIsIEdQUkluZm86OnRhZ1R5
cGVOdW1iZXJSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaWYg
KG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCisgICAg
ICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwgSlNWYWx1ZVJlZ3MoZ3By
KSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJyYW5jaFRlc3Q2NChKSVRDb21waWxlcjo6WmVybywg
Z3ByLCBHUFJJbmZvOjp0YWdNYXNrUmVnaXN0ZXIpKTsKKyAgICAgICAgICAgICAgICAKKyAgICAg
ICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNlbGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBh
bGwgZWxzZSB0dXJucyBpbnRvIDAuCisgICAgICAgICAgICAgICAgbV9qaXQuY29tcGFyZTY0KEpJ
VENvbXBpbGVyOjpFcXVhbCwgZ3ByLCBUcnVzdGVkSW1tMzIoVmFsdWVUcnVlKSwgcmVzdWx0R3By
KTsKKyAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CiAKLSAgICAgICAgICAgIC8vIEZpcnN0LCBpZiB3ZSBnZXQg
aGVyZSB3ZSBoYXZlIGEgZG91YmxlIGVuY29kZWQgYXMgYSBKU1ZhbHVlCi0gICAgICAgICAgICBt
X2ppdC5tb3ZlKGdwciwgcmVzdWx0R3ByKTsKLSAgICAgICAgICAgIHVuYm94RG91YmxlKHJlc3Vs
dEdwciwgZnByKTsKKyAgICAgICAgLy8gRmlyc3QsIGlmIHdlIGdldCBoZXJlIHdlIGhhdmUgYSBk
b3VibGUgZW5jb2RlZCBhcyBhIEpTVmFsdWUKKyAgICAgICAgbV9qaXQubW92ZShncHIsIHJlc3Vs
dEdwcik7CisgICAgICAgIHVuYm94RG91YmxlKHJlc3VsdEdwciwgZnByKTsKIAotICAgICAgICAg
ICAgc2lsZW50U3BpbGxBbGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKLSAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24odG9JbnQzMiwgcmVzdWx0R3ByLCBmcHIpOwotICAgICAgICAgICAgc2lsZW50Rmls
bEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOworICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVy
cyhyZXN1bHRHcHIpOworICAgICAgICBjYWxsT3BlcmF0aW9uKHRvSW50MzIsIHJlc3VsdEdwciwg
ZnByKTsKKyAgICAgICAgc2lsZW50RmlsbEFsbFJlZ2lzdGVycyhyZXN1bHRHcHIpOwogCi0gICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjb252ZXJ0ZWQgPSBtX2ppdC5qdW1wKCk7CisgICAg
ICAgIGNvbnZlcnRlZC5hcHBlbmQobV9qaXQuanVtcCgpKTsKIAotICAgICAgICAgICAgaXNJbnRl
Z2VyLmxpbmsoJm1faml0KTsKLSAgICAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKGdw
ciwgcmVzdWx0R3ByKTsKKyAgICAgICAgaXNJbnRlZ2VyLmxpbmsoJm1faml0KTsKKyAgICAgICAg
bV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoZ3ByLCByZXN1bHRHcHIpOwogCi0gICAgICAgICAgICBj
b252ZXJ0ZWQubGluaygmbV9qaXQpOworICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwog
I2Vsc2UKLSAgICAgICAgICAgIE5vZGUqIGNoaWxkTm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUo
KTsKLSAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciB2aXJ0dWFsUmVnaXN0ZXIgPSBjaGlsZE5v
ZGUtPnZpcnR1YWxSZWdpc3RlcigpOwotICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBtX2dlbmVyYXRpb25JbmZvW3ZpcnR1YWxSZWdpc3Rlcl07CisgICAgICAgIE5vZGUqIGNoaWxk
Tm9kZSA9IG5vZGUtPmNoaWxkMSgpLm5vZGUoKTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHZp
cnR1YWxSZWdpc3RlciA9IGNoaWxkTm9kZS0+dmlydHVhbFJlZ2lzdGVyKCk7CisgICAgICAgIEdl
bmVyYXRpb25JbmZvJiBpbmZvID0gbV9nZW5lcmF0aW9uSW5mb1t2aXJ0dWFsUmVnaXN0ZXJdOwog
Ci0gICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogCi0gICAg
ICAgICAgICBHUFJSZWcgcGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVzdWx0R3ByID0gcmVzdWx0LmdwcigpOworICAgICAgICBHUFJSZWcgcGF5bG9h
ZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHcHIgPSByZXN1
bHQuZ3ByKCk7CisgICAgICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgY29udmVy
dGVkOwogCi0gICAgICAgICAgICBpZiAoaW5mby5yZWdpc3RlckZvcm1hdCgpID09IERhdGFGb3Jt
YXRKU0ludGVnZXIpCi0gICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXlsb2FkR1BSLCByZXN1
bHRHcHIpOwotICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgR1BSUmVnIHRhZ0dQ
UiA9IG9wMS50YWdHUFIoKTsKLSAgICAgICAgICAgICAgICBGUFJUZW1wb3JhcnkgdGVtcEZwcih0
aGlzKTsKLSAgICAgICAgICAgICAgICBGUFJSZWcgZnByID0gdGVtcEZwci5mcHIoKTsKLSAgICAg
ICAgICAgICAgICBGUFJUZW1wb3Jhcnkgc2NyYXRjaCh0aGlzKTsKKyAgICAgICAgaWYgKGluZm8u
cmVnaXN0ZXJGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SlNJbnRlZ2VyKQorICAgICAgICAgICAgbV9q
aXQubW92ZShwYXlsb2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgIEdQUlJlZyB0YWdHUFIgPSBvcDEudGFnR1BSKCk7CisgICAgICAgICAgICBGUFJUZW1wb3Jh
cnkgdGVtcEZwcih0aGlzKTsKKyAgICAgICAgICAgIEZQUlJlZyBmcHIgPSB0ZW1wRnByLmZwcigp
OworICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CiAKLSAgICAgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMihNYWNyb0Fz
c2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkludDMyVGFnKSk7
CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Oklu
dDMyVGFnKSk7CiAKLSAgICAgICAgICAgICAgICBpZiAoIWlzTnVtYmVyU3BlY3VsYXRpb24obV9z
dGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKQorICAgICAgICAgICAgaWYgKCFp
c051bWJlclNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
KSkgeworICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxkU3BlY3VsYXRl
TnVtYmVyKCkpCiAgICAgICAgICAgICAgICAgICAgIHNwZWN1bGF0aW9uQ2hlY2soQmFkVHlwZSwg
SlNWYWx1ZVJlZ3ModGFnR1BSLCBwYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIG1faml0LmJy
YW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMy
KEpTVmFsdWU6Okxvd2VzdFRhZykpKTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6QmVsb3csIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2Vz
dFRhZykpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaWYgKG1f
c3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlICYgU3BlY0NlbGwpCisgICAgICAg
ICAgICAgICAgICAgICAgICBzcGVjdWxhdGlvbkNoZWNrKEJhZFR5cGUsIEpTVmFsdWVSZWdzKHRh
Z0dQUiwgcGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6RXF1YWwsIHRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpKSk7Cisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAvLyBJdCdzIG5vdCBhIGNl
bGw6IHNvIHRydWUgdHVybnMgaW50byAxIGFuZCBhbGwgZWxzZSB0dXJucyBpbnRvIDAuCisgICAg
ICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzQm9vbGVhbiA9IG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Qm9v
bGVhblRhZykpOworICAgICAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKFRydXN0ZWRJbW0zMigw
KSwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgICAgICAgICAgY29udmVydGVkLmFwcGVuZChtX2pp
dC5qdW1wKCkpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgaXNC
b29sZWFuLmxpbmsoJm1faml0KTsKKyAgICAgICAgICAgICAgICAgICAgbV9qaXQubW92ZShwYXls
b2FkR1BSLCByZXN1bHRHcHIpOworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5k
KG1faml0Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAg
ICBpc051bWJlci5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogCi0gICAgICAgICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2FkR1BSLCBmcHIs
IHNjcmF0Y2guZnByKCkpOworICAgICAgICAgICAgdW5ib3hEb3VibGUodGFnR1BSLCBwYXlsb2Fk
R1BSLCBmcHIsIHNjcmF0Y2guZnByKCkpOwogCi0gICAgICAgICAgICAgICAgc2lsZW50U3BpbGxB
bGxSZWdpc3RlcnMocmVzdWx0R3ByKTsKLSAgICAgICAgICAgICAgICBjYWxsT3BlcmF0aW9uKHRv
SW50MzIsIHJlc3VsdEdwciwgZnByKTsKLSAgICAgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKHJlc3VsdEdwcik7CisgICAgICAgICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhy
ZXN1bHRHcHIpOworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbih0b0ludDMyLCByZXN1bHRHcHIs
IGZwcik7CisgICAgICAgICAgICBzaWxlbnRGaWxsQWxsUmVnaXN0ZXJzKHJlc3VsdEdwcik7CiAK
LSAgICAgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBjb252ZXJ0ZWQgPSBtX2ppdC5qdW1w
KCk7CisgICAgICAgICAgICBjb252ZXJ0ZWQuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAKLSAgICAg
ICAgICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwotICAgICAgICAgICAgICAgIG1faml0
Lm1vdmUocGF5bG9hZEdQUiwgcmVzdWx0R3ByKTsKKyAgICAgICAgICAgIGlzSW50ZWdlci5saW5r
KCZtX2ppdCk7CisgICAgICAgICAgICBtX2ppdC5tb3ZlKHBheWxvYWRHUFIsIHJlc3VsdEdwcik7
CiAKLSAgICAgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQpOwotICAgICAgICAgICAg
fQotI2VuZGlmCi0gICAgICAgICAgICBpbnRlZ2VyUmVzdWx0KHJlc3VsdEdwciwgbm9kZSk7Ci0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBHZW5lcmF0ZWRPcGVy
YW5kVHlwZVVua25vd246Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwotICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjb252ZXJ0ZWQubGluaygmbV9qaXQp
OwogICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChub2RlLT5jaGlsZDEoKS0+c2hvdWxk
U3BlY3VsYXRlQm9vbGVhbigpKSB7Ci0gICAgICAgIFNwZWN1bGF0ZUJvb2xlYW5PcGVyYW5kIG9w
MSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlRlbXBvcmFyeSByZXN1bHQodGhp
cywgb3AxKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0Lm1vdmUob3AxLmdwcigpLCByZXN1bHQu
Z3ByKCkpOwotICAgICAgICBtX2ppdC5hbmQzMihKSVRDb21waWxlcjo6VHJ1c3RlZEltbTMyKDEp
LCByZXN1bHQuZ3ByKCkpOwotICAgICAgICAKLSAgICAgICAgaW50ZWdlclJlc3VsdChyZXN1bHQu
Z3ByKCksIG5vZGUpOworI2VuZGlmCisgICAgICAgIGludGVnZXJSZXN1bHQocmVzdWx0R3ByLCBu
b2RlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKLSAgICAvLyBEbyBpdCB0aGUgc2Fm
ZSB3YXkuCi0gICAgbm9uU3BlY3VsYXRpdmVWYWx1ZVRvSW50MzIobm9kZSk7Ci0gICAgcmV0dXJu
OworICAgIGNhc2UgR2VuZXJhdGVkT3BlcmFuZFR5cGVVbmtub3duOgorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBicmVhazsKKyAgICB9CiB9CiAKIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVVSW50MzJUb051bWJlcihOb2RlKiBub2RlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNp
b24gMTQzMDc1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsNyArMTIyLDYgQEAgcHVibGljOgogICAgIH0KICAg
ICAKICAgICBHUFJSZWcgZmlsbEludGVnZXIoTm9kZSosIERhdGFGb3JtYXQmIHJldHVybkZvcm1h
dCk7Ci0gICAgRlBSUmVnIGZpbGxEb3VibGUoTm9kZSopOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgR1BSUmVnIGZpbGxKU1ZhbHVlKE5vZGUqKTsKICNlbGlmIFVTRShKU1ZBTFVFMzJfNjQpCkBA
IC02OTQsNyArNjkzLDYgQEAgcHVibGljOgogICAgIH0KICAgICAKICAgICB2b2lkIG5vblNwZWN1
bGF0aXZlVmFsdWVUb051bWJlcihOb2RlKik7Ci0gICAgdm9pZCBub25TcGVjdWxhdGl2ZVZhbHVl
VG9JbnQzMihOb2RlKik7CiAgICAgdm9pZCBub25TcGVjdWxhdGl2ZVVJbnQzMlRvTnVtYmVyKE5v
ZGUqKTsKIAogI2lmIFVTRShKU1ZBTFVFNjQpCkBAIC0yMzAxLDcgKzIyOTksNyBAQCBwdWJsaWM6
CiAKIC8vID09PSBPcGVyYW5kIHR5cGVzID09PQogLy8KLS8vIEludGVnZXJPcGVyYW5kLCBEb3Vi
bGVPcGVyYW5kIGFuZCBKU1ZhbHVlT3BlcmFuZC4KKy8vIEludGVnZXJPcGVyYW5kIGFuZCBKU1Zh
bHVlT3BlcmFuZC4KIC8vCiAvLyBUaGVzZSBjbGFzc2VzIGFyZSB1c2VkIHRvIGxvY2sgdGhlIG9w
ZXJhbmRzIHRvIGEgbm9kZSBpbnRvIG1hY2hpbmUKIC8vIHJlZ2lzdGVycy4gVGhlc2UgY2xhc3Nl
cyBpbXBsZW1lbnQgb2YgcGF0dGVybiBvZiBsb2NraW5nIGEgdmFsdWUKQEAgLTIzNjMsNTYgKzIz
NjEsNiBAQCBwcml2YXRlOgogICAgIERhdGFGb3JtYXQgbV9mb3JtYXQ7CiB9OwogCi1jbGFzcyBE
b3VibGVPcGVyYW5kIHsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBEb3VibGVPcGVyYW5kKFNwZWN1
bGF0aXZlSklUKiBqaXQsIEVkZ2UgdXNlKQotICAgICAgICA6IG1faml0KGppdCkKLSAgICAgICAg
LCBtX25vZGUodXNlLm5vZGUoKSkKLSAgICAgICAgLCBtX2Zwck9ySW52YWxpZChJbnZhbGlkRlBS
UmVnKQotICAgIHsKLSAgICAgICAgQVNTRVJUKG1faml0KTsKLSAgICAgICAgCi0gICAgICAgIC8v
IFRoaXMgaXMgY291bnRlci1pbnR1aXRpdmUgYnV0IGNvcnJlY3QuIERvdWJsZU9wZXJhbmQgaXMg
aW50ZW5kZWQgdG8KLSAgICAgICAgLy8gYmUgdXNlZCBvbmx5IHdoZW4geW91J3JlIGEgbm9kZSB0
aGF0IGlzIGhhcHB5IHRvIGFjY2VwdCBhbiB1bnR5cGVkCi0gICAgICAgIC8vIHZhbHVlLCBidXQg
d2lsbCBzcGVjaWFsLWNhc2UgZm9yIGRvdWJsZXMgKHVzaW5nIERvdWJsZU9wZXJhbmQpIGlmIHRo
ZQotICAgICAgICAvLyB2YWx1ZSBoYXBwZW5lZCB0byBhbHJlYWR5IGJlIHJlcHJlc2VudGVkIGFz
IGEgZG91YmxlLiBUaGUgaW1wbGljYXRpb24KLSAgICAgICAgLy8gaXMgdGhhdCB5b3Ugd2lsbCBu
b3QgdHJ5IHRvIGZvcmNlIHRoZSB2YWx1ZSB0byBiZWNvbWUgYSBkb3VibGUgaWYgaXQKLSAgICAg
ICAgLy8gaXMgbm90IG9uZSBhbHJlYWR5LgotICAgICAgICBBU1NFUlQodXNlLnVzZUtpbmQoKSAh
PSBEb3VibGVVc2UpOwotICAgICAgICAKLSAgICAgICAgaWYgKGppdC0+aXNGaWxsZWREb3VibGUo
bV9ub2RlKSkKLSAgICAgICAgICAgIGZwcigpOwotICAgIH0KLQotICAgIH5Eb3VibGVPcGVyYW5k
KCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChtX2Zwck9ySW52YWxpZCAhPSBJbnZhbGlkRlBSUmVn
KTsKLSAgICAgICAgbV9qaXQtPnVubG9jayhtX2Zwck9ySW52YWxpZCk7Ci0gICAgfQotCi0gICAg
Tm9kZSogbm9kZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9ub2RlOwotICAgIH0K
LQotICAgIEZQUlJlZyBmcHIoKQotICAgIHsKLSAgICAgICAgaWYgKG1fZnByT3JJbnZhbGlkID09
IEludmFsaWRGUFJSZWcpCi0gICAgICAgICAgICBtX2Zwck9ySW52YWxpZCA9IG1faml0LT5maWxs
RG91YmxlKG5vZGUoKSk7Ci0gICAgICAgIHJldHVybiBtX2Zwck9ySW52YWxpZDsKLSAgICB9Ci0g
ICAgCi0gICAgdm9pZCB1c2UoKQotICAgIHsKLSAgICAgICAgbV9qaXQtPnVzZShtX25vZGUpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBTcGVjdWxhdGl2ZUpJVCogbV9qaXQ7Ci0gICAgTm9kZSog
bV9ub2RlOwotICAgIEZQUlJlZyBtX2Zwck9ySW52YWxpZDsKLX07Ci0KIGNsYXNzIEpTVmFsdWVP
cGVyYW5kIHsKIHB1YmxpYzoKICAgICBleHBsaWNpdCBKU1ZhbHVlT3BlcmFuZChTcGVjdWxhdGl2
ZUpJVCogaml0LCBFZGdlIHVzZSkKQEAgLTI2MTgsOCArMjU2Niw2IEBAIHByaXZhdGU6CiBjbGFz
cyBGUFJUZW1wb3JhcnkgewogcHVibGljOgogICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJ
VCopOwotICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIERvdWJsZU9wZXJhbmQmKTsK
LSAgICBGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBEb3VibGVPcGVyYW5kJiwgRG91Ymxl
T3BlcmFuZCYpOwogICAgIEZQUlRlbXBvcmFyeShTcGVjdWxhdGl2ZUpJVCosIFNwZWN1bGF0ZURv
dWJsZU9wZXJhbmQmKTsKICAgICBGUFJUZW1wb3JhcnkoU3BlY3VsYXRpdmVKSVQqLCBTcGVjdWxh
dGVEb3VibGVPcGVyYW5kJiwgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCYpOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNDMxNTkpCisrKyBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNyBAQAorMjAxMy0wMi0xNyAgRmlsaXAg
UGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdldCByaWQgb2YgREZHOjpEb3Vi
bGVPcGVyYW5kIGFuZCBzaW1wbGlmeSBWYWx1ZVRvSW50MzIKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExMDA3MgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFzdC9qcy9kZmctdmFsdWUtdG8taW50MzIt
d2l0aC1zaWRlLWVmZmVjdC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZhc3QvanMv
ZGZnLXZhbHVlLXRvLWludDMyLXdpdGgtc2lkZS1lZmZlY3QuaHRtbDogQWRkZWQuCisgICAgICAg
ICogZmFzdC9qcy9qc2MtdGVzdC1saXN0OgorICAgICAgICAqIGZhc3QvanMvc2NyaXB0LXRlc3Rz
L2RmZy12YWx1ZS10by1pbnQzMi13aXRoLXNpZGUtZWZmZWN0LmpzOiBBZGRlZC4KKyAgICAgICAg
KGZvbyk6CisgICAgICAgICgucmVzdWx0LmZvbyk6CisKIDIwMTMtMDItMTUgIEV1Z2VuZSBLbHl1
Y2huaWtvdiAgPGV1c3Rhc0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3Rvcjog
SW50cm9kdWNlIFByb2ZpbGVzUGFuZWxEZXNjcmlwdG9yLgpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9kZmctdmFsdWUtdG8taW50MzItd2l0aC1zaWRlLWVmZmVjdC1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9kZmctdmFsdWUtdG8taW50MzItd2l0aC1z
aWRlLWVmZmVjdC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2pzL2RmZy12YWx1ZS10by1pbnQzMi13aXRoLXNpZGUtZWZmZWN0LWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDIxMCBAQAorVGVzdHMgdGhhdCBhIHNpZGUtZWZmZWN0aW5n
IFZhbHVlVG9JbnQzMiBvbmx5IGV4ZWN1dGVzIG9uY2Ugd2hlbiB0aGVyZSBpcyBhbiBPU1IgZXhp
dC4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcmVzdWx0Lmxlbmd0aCBp
cyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyBy
ZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlz
IDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJl
c3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3Ro
IGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNT
IHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0g
aXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1Mg
cmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5n
dGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BB
U1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFsw
XSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFT
UyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxl
bmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgor
UEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0
WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQ
QVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQu
bGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAy
CitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1
bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUK
K1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3Vs
dC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlz
IDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJl
c3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMg
NQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVz
dWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGgg
aXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1Mg
cmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBp
cyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyBy
ZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0
aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFT
UyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBd
IGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNT
IHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVu
Z3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQ
QVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRb
MF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BB
U1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5s
ZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIK
K1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3Vs
dFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQor
UEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0
Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMg
MgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVz
dWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1
CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1
bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBp
cyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyBy
ZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlz
IDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJl
c3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3Ro
IGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNT
IHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0g
aXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1Mg
cmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5n
dGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BB
U1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFsw
XSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFT
UyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxl
bmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgor
UEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0
WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQ
QVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQu
bGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAy
CitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1
bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUK
K1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3Vs
dC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlz
IDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJl
c3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMg
NQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVz
dWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGgg
aXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1Mg
cmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBp
cyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyBy
ZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0
aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIHJlc3VsdC5sZW5ndGggaXMgMgorUEFT
UyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVuZ3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBd
IGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQQVNTIHJlc3VsdFswXSBpcyA1CitQQVNT
IHJlc3VsdC5sZW5ndGggaXMgMgorUEFTUyByZXN1bHRbMF0gaXMgNQorUEFTUyByZXN1bHQubGVu
Z3RoIGlzIDIKK1BBU1MgcmVzdWx0WzBdIGlzIDUKK1BBU1MgcmVzdWx0Lmxlbmd0aCBpcyAyCitQ
QVNTIHJlc3VsdFswXSBpcyA1CitQQVNTIGNvdW50ZXIgaXMgMTAwCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFz
dC9qcy9kZmctdmFsdWUtdG8taW50MzItd2l0aC1zaWRlLWVmZmVjdC5odG1sCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2Zhc3QvanMvZGZnLXZhbHVlLXRvLWludDMyLXdpdGgtc2lkZS1lZmZl
Y3QuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvanMvZGZnLXZhbHVlLXRv
LWludDMyLXdpdGgtc2lkZS1lZmZlY3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvZGZnLXZhbHVl
LXRvLWludDMyLXdpdGgtc2lkZS1lZmZlY3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9qc2MtdGVzdC1saXN0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2Zhc3QvanMvanNjLXRlc3QtbGlzdAkocmV2aXNpb24gMTQzMDc1KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9qcy9qc2MtdGVzdC1saXN0CSh3b3JraW5nIGNvcHkpCkBAIC0xODcsNiArMTg3
LDcgQEAgZmFzdC9qcy9kZmctdWludDMyYXJyYXktb3ZlcmZsb3ctdmFsdWVzCiBmYXN0L2pzL2Rm
Zy11aW50MzJhcnJheQogZmFzdC9qcy9kZmctdWludDhhcnJheQogZmFzdC9qcy9kZmctdWludDhj
bGFtcGVkYXJyYXkKK2Zhc3QvanMvZGZnLXZhbHVlLXRvLWludDMyLXdpdGgtc2lkZS1lZmZlY3Rz
CiBmYXN0L2pzL2RmZy13ZWFrLWpzLWNvbnN0YW50LXNpbGVudC1maWxsCiBmYXN0L2pzL2RpY3Rp
b25hcnktbm8tY2FjaGUKIGZhc3QvanMvZGljdGlvbmFyeS1wcm90b3R5cGUtY2FjaGluZwpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3JpcHQtdGVzdHMvZGZnLXZhbHVlLXRvLWludDMyLXdp
dGgtc2lkZS1lZmZlY3QuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9qcy9zY3Jp
cHQtdGVzdHMvZGZnLXZhbHVlLXRvLWludDMyLXdpdGgtc2lkZS1lZmZlY3QuanMJKHJldmlzaW9u
IDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2pzL3NjcmlwdC10ZXN0cy9kZmctdmFsdWUtdG8taW50
MzItd2l0aC1zaWRlLWVmZmVjdC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE3IEBACitk
ZXNjcmlwdGlvbigKKyJUZXN0cyB0aGF0IGEgc2lkZS1lZmZlY3RpbmcgVmFsdWVUb0ludDMyIG9u
bHkgZXhlY3V0ZXMgb25jZSB3aGVuIHRoZXJlIGlzIGFuIE9TUiBleGl0LiIKKyk7CisKK2Z1bmN0
aW9uIGZvbyhhLCBiKSB7CisgICAgdmFyIHJlc3VsdCA9IGEgfCBiLmY7CisgICAgcmV0dXJuIFty
ZXN1bHQsIGFdOworfQorCit2YXIgY291bnRlciA9IDA7Citmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGZvbyh7dmFsdWVPZjpmdW5jdGlvbigpIHsgY291
bnRlcisrOyByZXR1cm4gMTsgfX0sIHtmOmkgPT0gOTkgPyA1LjUgOiA1fSk7CisgICAgc2hvdWxk
QmUoInJlc3VsdC5sZW5ndGgiLCAiMiIpOworICAgIHNob3VsZEJlKCJyZXN1bHRbMF0iLCAiNSIp
OworfQorCitzaG91bGRCZSgiY291bnRlciIsICIxMDAiKTsK
</data>
<flag name="review"
          id="209016"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>