<?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>182217</bug_id>
          
          <creation_ts>2018-01-27 10:59:34 -0800</creation_ts>
          <short_desc>MarkedBlock should have a footer instead of a header</short_desc>
          <delta_ts>2018-01-27 18:26:00 -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>WebKit 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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>181636</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>rmorisset</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1393868</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-27 10:59:34 -0800</bug_when>
    <thetext>Patch forthcoming.

This helps us create a distancing constraint for positive offsets: any out-of-bounds read or write that has offset smaller than K, where K is MarkedBlock footer size, will end up hitting another object in the same block or the footer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393869</commentid>
    <comment_count>1</comment_count>
      <attachid>332475</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-27 11:00:30 -0800</bug_when>
    <thetext>Created attachment 332475
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393870</commentid>
    <comment_count>2</comment_count>
      <attachid>332476</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-27 11:24:37 -0800</bug_when>
    <thetext>Created attachment 332476
maybe this is right</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393884</commentid>
    <comment_count>3</comment_count>
      <attachid>332482</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-27 13:16:52 -0800</bug_when>
    <thetext>Created attachment 332482
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393886</commentid>
    <comment_count>4</comment_count>
      <attachid>332483</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-27 14:09:41 -0800</bug_when>
    <thetext>Created attachment 332483
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393887</commentid>
    <comment_count>5</comment_count>
      <attachid>332484</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-27 14:20:51 -0800</bug_when>
    <thetext>Created attachment 332484
the patch

Now I like the changelog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393890</commentid>
    <comment_count>6</comment_count>
      <attachid>332484</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2018-01-27 15:13:24 -0800</bug_when>
    <thetext>Comment on attachment 332484
the patch

View in context: https://bugs.webkit.org/attachment.cgi?id=332484&amp;action=review

r=me

&gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:92
&gt; +        dataLog(RawPointer(this), &quot;: Allocated.\n&quot;);

Drop logging or add verbose flag.

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:269
&gt; +        CountingLock m_lock;

This is 4 bytes, I&apos;d put it next to HeapVersion (also 4) instead of before the 2x 2 byte mark counts.

&gt; Source/JavaScriptCore/heap/MarkedBlock.h:615
&gt;      return true;

Seems like all uses of isAtom() should be succeeded by a size mask (when accessing the atoms) to Spectre-protect the accesses?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393891</commentid>
    <comment_count>7</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-27 17:39:20 -0800</bug_when>
    <thetext>(In reply to JF Bastien from comment #6)
&gt; Comment on attachment 332484 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=332484&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:92
&gt; &gt; +        dataLog(RawPointer(this), &quot;: Allocated.\n&quot;);
&gt; 
&gt; Drop logging or add verbose flag.

That code was already there.  The patch makes it seem like it was added.  I&apos;m just moving it.

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.h:269
&gt; &gt; +        CountingLock m_lock;
&gt; 
&gt; This is 4 bytes, I&apos;d put it next to HeapVersion (also 4) instead of before
&gt; the 2x 2 byte mark counts.

But the goal is more padding! ;-)

&gt; 
&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.h:615
&gt; &gt;      return true;
&gt; 
&gt; Seems like all uses of isAtom() should be succeeded by a size mask (when
&gt; accessing the atoms) to Spectre-protect the accesses?

I don&apos;t think so, because the index is not under user control.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393892</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-01-27 17:40:00 -0800</bug_when>
    <thetext>&lt;rdar://problem/36952146&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1393893</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2018-01-27 18:26:00 -0800</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/227717/webkit</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332475</attachid>
            <date>2018-01-27 11:00:30 -0800</date>
            <delta_ts>2018-01-27 11:24:37 -0800</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>18815</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlz
aW9uIDIyNzcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6ZGlkQWRkVG9EaXJlY3QKICAgICAKICAgICBzaXplX3QgY2VsbFNpemUgPSBkaXJlY3Rv
cnktPmNlbGxTaXplKCk7CiAgICAgbV9hdG9tc1BlckNlbGwgPSAoY2VsbFNpemUgKyBhdG9tU2l6
ZSAtIDEpIC8gYXRvbVNpemU7Ci0gICAgbV9lbmRBdG9tID0gYXRvbXNQZXJCbG9jayAtIG1fYXRv
bXNQZXJDZWxsICsgMTsKKyAgICBtX2VuZEF0b20gPSBlbmRBdG9tKCkgLSBtX2F0b21zUGVyQ2Vs
bCArIDE7CiAgICAgCiAgICAgbV9hdHRyaWJ1dGVzID0gZGlyZWN0b3J5LT5hdHRyaWJ1dGVzKCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNp
b24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAko
d29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNz
IFNsb3RWaXNpdG9yOwogY2xhc3MgU3Vic3BhY2U7CiAKLXR5cGVkZWYgdWludHB0cl90IEJpdHM7
CiB0eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9uOwogCiAvLyBBIG1hcmtlZCBibG9jayBpcyBh
IHBhZ2UtYWxpZ25lZCBjb250YWluZXIgZm9yIGhlYXAtYWxsb2NhdGVkIG9iamVjdHMuCkBAIC0y
NDQsNyArMjQzLDYyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICBNYXJrZWRCbG9j
ayogbV9ibG9jayB7IG51bGxwdHIgfTsKICAgICB9OworCitwcml2YXRlOiAgICAKKyAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOworCisgICAg
dHlwZWRlZiBjaGFyIEF0b21bYXRvbVNpemVdOworCitwdWJsaWM6CisgICAgY2xhc3MgRm9vdGVy
IHsKKyAgICBwdWJsaWM6CisgICAgICAgIEZvb3RlcihWTSYsIEhhbmRsZSYpOwogICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CisgICAgICAg
IAorICAgICAgICBIYW5kbGUmIG1faGFuZGxlOworICAgICAgICBWTSogbV92bTsKKyAgICAgICAg
U3Vic3BhY2UqIG1fc3Vic3BhY2U7CisKKyAgICAgICAgQ291bnRpbmdMb2NrIG1fbG9jazsKKyAg
ICAKKyAgICAgICAgLy8gVGhlIGFjdHVhbCBtYXJrIGNvdW50IGNhbiBiZSBjb21wdXRlZCBieSBk
b2luZzogbV9iaWFzZWRNYXJrQ291bnQgLSBtX21hcmtDb3VudEJpYXMuIE5vdGUKKyAgICAgICAg
Ly8gdGhhdCB0aGlzIGNvdW50IGlzIHJhY3kuIEl0IHdpbGwgYWNjdXJhdGVseSBkZXRlY3Qgd2hl
dGhlciBvciBub3QgZXhhY3RseSB6ZXJvIHRoaW5ncyB3ZXJlCisgICAgICAgIC8vIG1hcmtlZCwg
YnV0IGlmIE4gdGhpbmdzIGdvdCBtYXJrZWQsIHRoZW4gdGhpcyBtYXkgcmVwb3J0IGFueXRoaW5n
IGluIHRoZSByYW5nZSBbMSwgTl0gKG9yCisgICAgICAgIC8vIGJlZm9yZSB1bmJpYXNlZCwgaXQg
d291bGQgYmUgWzEgKyBtX21hcmtDb3VudEJpYXMsIE4gKyBtX21hcmtDb3VudEJpYXNdLikKKyAg
ICAgICAgaW50MTZfdCBtX2JpYXNlZE1hcmtDb3VudDsKKyAgICAKKyAgICAgICAgLy8gV2UgYmlh
cyB0aGUgbWFyayBjb3VudCBzbyB0aGF0IGlmIG1fYmlhc2VkTWFya0NvdW50ID49IDAgdGhlbiB0
aGUgYmxvY2sgc2hvdWxkIGJlIHJldGlyZWQuCisgICAgICAgIC8vIFdlIGdvIHRvIGFsbCB0aGlz
IHRyb3VibGUgdG8gbWFrZSBtYXJraW5nIGEgYml0IGZhc3RlcjogdGhpcyB3YXksIG1hcmtpbmcg
a25vd3Mgd2hlbiB0bworICAgICAgICAvLyByZXRpcmUgYSBibG9jayB1c2luZyBhIGpzL2pucyBv
biBtX2JpYXNlZE1hcmtDb3VudC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUs
IGlmIGEgYmxvY2sgaGFzIHJvb20gZm9yIDEwMCBvYmplY3RzIGFuZCByZXRpcmVtZW50IGhhcHBl
bnMgd2hlbmV2ZXIgOTAlIGFyZQorICAgICAgICAvLyBsaXZlLCB0aGVuIG1fbWFya0NvdW50Qmlh
cyB3aWxsIGJlIC05MC4gVGhpcyB3YXksIHdoZW4gbWFya2luZyBiZWdpbnMsIHRoaXMgd2lsbCBj
YXVzZSB1cyB0bworICAgICAgICAvLyBzZXQgbV9iaWFzZWRNYXJrQ291bnQgdG8gLTkwIGFzIHdl
bGwsIHNpbmNlOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgbV9iaWFzZWRNYXJrQ291bnQg
PSBhY3R1YWxNYXJrQ291bnQgKyBtX21hcmtDb3VudEJpYXMuCisgICAgICAgIC8vCisgICAgICAg
IC8vIE1hcmtpbmcgYW4gb2JqZWN0IHdpbGwgaW5jcmVtZW50IG1fYmlhc2VkTWFya0NvdW50LiBP
bmNlIDkwIG9iamVjdHMgZ2V0IG1hcmtlZCwgd2Ugd2lsbCBoYXZlCisgICAgICAgIC8vIG1fYmlh
c2VkTWFya0NvdW50ID0gMCwgd2hpY2ggd2lsbCB0cmlnZ2VyIHJldGlyZW1lbnQuIEluIG90aGVy
IHdvcmRzLCB3ZSB3YW50IHRvIHNldAorICAgICAgICAvLyBtX21hcmtDb3VudEJpYXMgbGlrZSBz
bzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIG1fbWFya0NvdW50QmlhcyA9IC0obWluTWFy
a2VkQmxvY2tVdGlsaXphdGlvbiAqIGNlbGxzUGVyQmxvY2spCisgICAgICAgIC8vCisgICAgICAg
IC8vIEFsbCBvZiB0aGlzIGFsc28gbWVhbnMgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBhbnkgb2Jq
ZWN0cyBhcmUgbWFya2VkIGJ5IGRvaW5nOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgbV9i
aWFzZWRNYXJrQ291bnQgIT0gbV9tYXJrQ291bnRCaWFzCisgICAgICAgIGludDE2X3QgbV9tYXJr
Q291bnRCaWFzOworCisgICAgICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CisKKyAg
ICAgICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7CisgICAgfTsKKyAgICAgICAgCitw
cml2YXRlOiAgICAKKyAgICBGb290ZXImIGZvb3RlcigpOworCitwdWJsaWM6CiAgICAgc3RhdGlj
IE1hcmtlZEJsb2NrOjpIYW5kbGUqIHRyeUNyZWF0ZShIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9j
YXRvciopOwogICAgICAgICAKICAgICBIYW5kbGUmIGhhbmRsZSgpOwpAQCAtMjU1LDcgKzMwOSw3
IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29sIGlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCop
OwogICAgIHN0YXRpYyBNYXJrZWRCbG9jayogYmxvY2tGb3IoY29uc3Qgdm9pZCopOwotICAgIHN0
YXRpYyBzaXplX3QgZmlyc3RBdG9tKCk7CisgICAgc3RhdGljIHNpemVfdCBlbmRBdG9tKCk7CiAg
ICAgc2l6ZV90IGF0b21OdW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICAKICAgICBzaXplX3Qg
bWFya0NvdW50KCk7CkBAIC0yOTUsMTkgKzM0OSwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNl
dE1hcmtzKCk7CiAgICAgCiAgICAgYm9vbCBpc01hcmtlZFJhdyhjb25zdCB2b2lkKiBwKTsKLSAg
ICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1Zl
cnNpb247IH0KKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJu
IGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb247IH0KICAgICAKICAgICBjb25zdCBCaXRtYXA8YXRv
bXNQZXJCbG9jaz4mIG1hcmtzKCkgY29uc3Q7CiAgICAgCi0gICAgQ291bnRpbmdMb2NrJiBsb2Nr
KCkgeyByZXR1cm4gbV9sb2NrOyB9CisgICAgQ291bnRpbmdMb2NrJiBsb2NrKCkgeyByZXR1cm4g
Zm9vdGVyKCkubV9sb2NrOyB9CiAgICAgCi0gICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3Qg
eyByZXR1cm4gbV9zdWJzcGFjZTsgfQorICAgIFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsg
cmV0dXJuIGZvb3RlcigpLm1fc3Vic3BhY2U7IH0KIAogcHJpdmF0ZToKLSAgICBzdGF0aWMgY29u
c3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOwotCi0gICAgdHlwZWRl
ZiBjaGFyIEF0b21bYXRvbVNpemVdOwotCiAgICAgTWFya2VkQmxvY2soVk0mLCBIYW5kbGUmKTsK
ICAgICBBdG9tKiBhdG9tcygpOwogICAgICAgICAKQEAgLTMxOCw0OCArMzY4LDE2IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgaW5saW5lIGJvb2wgbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtp
bmcoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIGlubGluZSBib29sIG1hcmtzQ29u
dmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG15TWFya2luZ1ZlcnNpb24sIEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKLSAgICAgICAgCi0gICAgSGFuZGxlJiBtX2hhbmRs
ZTsKLSAgICBWTSogbV92bTsKLSAgICBTdWJzcGFjZSogbV9zdWJzcGFjZTsKLQotICAgIENvdW50
aW5nTG9jayBtX2xvY2s7Ci0gICAgCi0gICAgLy8gVGhlIGFjdHVhbCBtYXJrIGNvdW50IGNhbiBi
ZSBjb21wdXRlZCBieSBkb2luZzogbV9iaWFzZWRNYXJrQ291bnQgLSBtX21hcmtDb3VudEJpYXMu
IE5vdGUKLSAgICAvLyB0aGF0IHRoaXMgY291bnQgaXMgcmFjeS4gSXQgd2lsbCBhY2N1cmF0ZWx5
IGRldGVjdCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IHplcm8gdGhpbmdzIHdlcmUKLSAgICAvLyBt
YXJrZWQsIGJ1dCBpZiBOIHRoaW5ncyBnb3QgbWFya2VkLCB0aGVuIHRoaXMgbWF5IHJlcG9ydCBh
bnl0aGluZyBpbiB0aGUgcmFuZ2UgWzEsIE5dIChvcgotICAgIC8vIGJlZm9yZSB1bmJpYXNlZCwg
aXQgd291bGQgYmUgWzEgKyBtX21hcmtDb3VudEJpYXMsIE4gKyBtX21hcmtDb3VudEJpYXNdLikK
LSAgICBpbnQxNl90IG1fYmlhc2VkTWFya0NvdW50OwotICAgIAotICAgIC8vIFdlIGJpYXMgdGhl
IG1hcmsgY291bnQgc28gdGhhdCBpZiBtX2JpYXNlZE1hcmtDb3VudCA+PSAwIHRoZW4gdGhlIGJs
b2NrIHNob3VsZCBiZSByZXRpcmVkLgotICAgIC8vIFdlIGdvIHRvIGFsbCB0aGlzIHRyb3VibGUg
dG8gbWFrZSBtYXJraW5nIGEgYml0IGZhc3RlcjogdGhpcyB3YXksIG1hcmtpbmcga25vd3Mgd2hl
biB0bwotICAgIC8vIHJldGlyZSBhIGJsb2NrIHVzaW5nIGEganMvam5zIG9uIG1fYmlhc2VkTWFy
a0NvdW50LgotICAgIC8vCi0gICAgLy8gRm9yIGV4YW1wbGUsIGlmIGEgYmxvY2sgaGFzIHJvb20g
Zm9yIDEwMCBvYmplY3RzIGFuZCByZXRpcmVtZW50IGhhcHBlbnMgd2hlbmV2ZXIgOTAlIGFyZQot
ICAgIC8vIGxpdmUsIHRoZW4gbV9tYXJrQ291bnRCaWFzIHdpbGwgYmUgLTkwLiBUaGlzIHdheSwg
d2hlbiBtYXJraW5nIGJlZ2lucywgdGhpcyB3aWxsIGNhdXNlIHVzIHRvCi0gICAgLy8gc2V0IG1f
Ymlhc2VkTWFya0NvdW50IHRvIC05MCBhcyB3ZWxsLCBzaW5jZToKLSAgICAvLwotICAgIC8vICAg
ICBtX2JpYXNlZE1hcmtDb3VudCA9IGFjdHVhbE1hcmtDb3VudCArIG1fbWFya0NvdW50Qmlhcy4K
LSAgICAvLwotICAgIC8vIE1hcmtpbmcgYW4gb2JqZWN0IHdpbGwgaW5jcmVtZW50IG1fYmlhc2Vk
TWFya0NvdW50LiBPbmNlIDkwIG9iamVjdHMgZ2V0IG1hcmtlZCwgd2Ugd2lsbCBoYXZlCi0gICAg
Ly8gbV9iaWFzZWRNYXJrQ291bnQgPSAwLCB3aGljaCB3aWxsIHRyaWdnZXIgcmV0aXJlbWVudC4g
SW4gb3RoZXIgd29yZHMsIHdlIHdhbnQgdG8gc2V0Ci0gICAgLy8gbV9tYXJrQ291bnRCaWFzIGxp
a2Ugc286Ci0gICAgLy8KLSAgICAvLyAgICAgbV9tYXJrQ291bnRCaWFzID0gLShtaW5NYXJrZWRC
bG9ja1V0aWxpemF0aW9uICogY2VsbHNQZXJCbG9jaykKLSAgICAvLwotICAgIC8vIEFsbCBvZiB0
aGlzIGFsc28gbWVhbnMgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBhbnkgb2JqZWN0cyBhcmUgbWFy
a2VkIGJ5IGRvaW5nOgotICAgIC8vCi0gICAgLy8gICAgIG1fYmlhc2VkTWFya0NvdW50ICE9IG1f
bWFya0NvdW50QmlhcwotICAgIGludDE2X3QgbV9tYXJrQ291bnRCaWFzOwotCi0gICAgSGVhcFZl
cnNpb24gbV9tYXJraW5nVmVyc2lvbjsKLQotICAgIEJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX21h
cmtzOwogfTsKIAoraW5saW5lIE1hcmtlZEJsb2NrOjpGb290ZXImIE1hcmtlZEJsb2NrOjpmb290
ZXIoKQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PE1hcmtlZEJsb2NrOjpGb290ZXIqPihh
dG9tcygpICsgZW5kQXRvbSgpKTsKK30KKwogaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGUmIE1h
cmtlZEJsb2NrOjpoYW5kbGUoKQogewotICAgIHJldHVybiBtX2hhbmRsZTsKKyAgICByZXR1cm4g
Zm9vdGVyKCkubV9oYW5kbGU7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jayYgTWFya2VkQmxvY2s6
OkhhbmRsZTo6YmxvY2soKQpAQCAtMzY3LDkgKzM4NSw5IEBAIGlubGluZSBNYXJrZWRCbG9jayYg
TWFya2VkQmxvY2s6OkhhbmRsZToKICAgICByZXR1cm4gKm1fYmxvY2s7CiB9CiAKLWlubGluZSBz
aXplX3QgTWFya2VkQmxvY2s6OmZpcnN0QXRvbSgpCitpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2Nr
OjplbmRBdG9tKCkKIHsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPGF0b21T
aXplPihzaXplb2YoTWFya2VkQmxvY2spKSAvIGF0b21TaXplOworICAgIHJldHVybiAoYmxvY2tT
aXplIC0gc2l6ZW9mKE1hcmtlZEJsb2NrOjpGb290ZXIpKSAvIGF0b21TaXplOwogfQogCiBpbmxp
bmUgTWFya2VkQmxvY2s6OkF0b20qIE1hcmtlZEJsb2NrOjphdG9tcygpCkBAIC0zNzksMTMgKzM5
NywxMyBAQCBpbmxpbmUgTWFya2VkQmxvY2s6OkF0b20qIE1hcmtlZEJsb2NrOjphCiAKIGlubGlu
ZSBib29sIE1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKGNvbnN0IHZvaWQqIHApCiB7Ci0gICAg
cmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDxCaXRzPihwKSAmIGF0b21BbGlnbm1lbnRNYXNrKTsK
KyAgICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocCkgJiBhdG9tQWxpZ25t
ZW50TWFzayk7CiB9CiAKIGlubGluZSB2b2lkKiBNYXJrZWRCbG9jazo6SGFuZGxlOjpjZWxsQWxp
Z24odm9pZCogcCkKIHsKLSAgICBCaXRzIGJhc2UgPSByZWludGVycHJldF9jYXN0PEJpdHM+KGJs
b2NrKCkuYXRvbXMoKSArIGZpcnN0QXRvbSgpKTsKLSAgICBCaXRzIGJpdHMgPSByZWludGVycHJl
dF9jYXN0PEJpdHM+KHApOworICAgIHVpbnRwdHJfdCBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KGJsb2NrKCkuYXRvbXMoKSk7CisgICAgdWludHB0cl90IGJpdHMgPSByZWludGVy
cHJldF9jYXN0PHVpbnRwdHJfdD4ocCk7CiAgICAgYml0cyAtPSBiYXNlOwogICAgIGJpdHMgLT0g
Yml0cyAlIGNlbGxTaXplKCk7CiAgICAgYml0cyArPSBiYXNlOwpAQCAtMzk0LDcgKzQxMiw3IEBA
IGlubGluZSB2b2lkKiBNYXJrZWRCbG9jazo6SGFuZGxlOjpjZWxsQWwKIAogaW5saW5lIE1hcmtl
ZEJsb2NrKiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY29uc3Qgdm9pZCogcCkKIHsKLSAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxNYXJrZWRCbG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4o
cCkgJiBibG9ja01hc2spOworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PE1hcmtlZEJsb2Nr
Kj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHApICYgYmxvY2tNYXNrKTsKIH0KIAogaW5s
aW5lIEJsb2NrRGlyZWN0b3J5KiBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaXJlY3RvcnkoKSBjb25z
dApAQCAtNDE5LDcgKzQzNyw3IEBAIGlubGluZSBWTSogTWFya2VkQmxvY2s6OkhhbmRsZTo6dm0o
KSBjb24KIAogaW5saW5lIFZNKiBNYXJrZWRCbG9jazo6dm0oKSBjb25zdAogewotICAgIHJldHVy
biBtX3ZtOworICAgIHJldHVybiBmb290ZXIoKS5tX3ZtOwogfQogCiBpbmxpbmUgV2Vha1NldCYg
TWFya2VkQmxvY2s6OkhhbmRsZTo6d2Vha1NldCgpCkBAIC00MjksNyArNDQ3LDcgQEAgaW5saW5l
IFdlYWtTZXQmIE1hcmtlZEJsb2NrOjpIYW5kbGU6OndlYQogCiBpbmxpbmUgV2Vha1NldCYgTWFy
a2VkQmxvY2s6OndlYWtTZXQoKQogewotICAgIHJldHVybiBtX2hhbmRsZS53ZWFrU2V0KCk7Cisg
ICAgcmV0dXJuIGhhbmRsZSgpLndlYWtTZXQoKTsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6c2hyaW5rKCkKQEAgLTQ1NCw3ICs0NzIsNyBAQCBpbmxpbmUgc2l6ZV90IE1h
cmtlZEJsb2NrOjpIYW5kbGU6OmNlbGxTCiAKIGlubGluZSBzaXplX3QgTWFya2VkQmxvY2s6OmNl
bGxTaXplKCkKIHsKLSAgICByZXR1cm4gbV9oYW5kbGUuY2VsbFNpemUoKTsKKyAgICByZXR1cm4g
aGFuZGxlKCkuY2VsbFNpemUoKTsKIH0KIAogaW5saW5lIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBN
YXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1dGVzKCkgY29uc3QKQEAgLTQ2NCw3ICs0ODIsNyBA
QCBpbmxpbmUgY29uc3QgQ2VsbEF0dHJpYnV0ZXMmIE1hcmtlZEJsb2NrCiAKIGlubGluZSBjb25z
dCBDZWxsQXR0cmlidXRlcyYgTWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMoKSBjb25zdAogewotICAg
IHJldHVybiBtX2hhbmRsZS5hdHRyaWJ1dGVzKCk7CisgICAgcmV0dXJuIGhhbmRsZSgpLmF0dHJp
YnV0ZXMoKTsKIH0KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6bmVlZHNEZXN0
cnVjdGlvbigpIGNvbnN0CkBAIC00OTQsMTcgKzUxMiwxNyBAQCBpbmxpbmUgc2l6ZV90IE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnNpemUoCiAKIGlubGluZSBzaXplX3QgTWFya2VkQmxvY2s6OmF0b21O
dW1iZXIoY29uc3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0
cz4ocCkgLSByZWludGVycHJldF9jYXN0PEJpdHM+KHRoaXMpKSAvIGF0b21TaXplOworICAgIHJl
dHVybiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHApIC0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3Q+KHRoaXMpKSAvIGF0b21TaXplOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9j
azo6YXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsKLSAgICByZXR1
cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICByZXR1cm4gbWFya2lu
Z1ZlcnNpb24gIT0gZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbjsKIH0KIAogaW5saW5lIERlcGVu
ZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
KQogewotICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJzaW9uOworICAgIEhl
YXBWZXJzaW9uIHZlcnNpb24gPSBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uOwogICAgIGlmIChV
TkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgYWJvdXRUb01hcmtT
bG93KG1hcmtpbmdWZXJzaW9uKTsKICAgICByZXR1cm4gRGVwZW5kZW5jeTo6ZmVuY2UodmVyc2lv
bik7CkBAIC01MTcsMzIgKzUzNSwzMiBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
Ojphc3NlcnRNCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyhjb25zdCB2
b2lkKiBwKQogewotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApKTsKKyAgICBy
ZXR1cm4gZm9vdGVyKCkubV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSk7CiB9CiAKIGlubGluZSBi
b29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgY29u
c3Qgdm9pZCogcCkKIHsKLSAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lv
bjsKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbjsK
ICAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSwgRGVwZW5k
ZW5jeTo6ZmVuY2UodmVyc2lvbikpOworICAgIHJldHVybiBmb290ZXIoKS5tX21hcmtzLmdldChh
dG9tTnVtYmVyKHApLCBEZXBlbmRlbmN5OjpmZW5jZSh2ZXJzaW9uKSk7CiB9CiAKIGlubGluZSBi
b29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVu
ZGVuY3kpCiB7CiAgICAgYXNzZXJ0TWFya3NOb3RTdGFsZSgpOwotICAgIHJldHVybiBtX21hcmtz
LmdldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsKKyAgICByZXR1cm4gZm9vdGVyKCkubV9t
YXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9CiAKIGlubGluZSBib29sIE1h
cmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVw
ZW5kZW5jeSkKIHsKICAgICBhc3NlcnRNYXJrc05vdFN0YWxlKCk7Ci0gICAgcmV0dXJuIG1fbWFy
a3MuY29uY3VycmVudFRlc3RBbmRTZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CisgICAg
cmV0dXJuIGZvb3RlcigpLm1fbWFya3MuY29uY3VycmVudFRlc3RBbmRTZXQoYXRvbU51bWJlcihw
KSwgZGVwZW5kZW5jeSk7CiB9CiAKIGlubGluZSBjb25zdCBCaXRtYXA8TWFya2VkQmxvY2s6OmF0
b21zUGVyQmxvY2s+JiBNYXJrZWRCbG9jazo6bWFya3MoKSBjb25zdAogewotICAgIHJldHVybiBt
X21hcmtzOworICAgIHJldHVybiBmb290ZXIoKS5tX21hcmtzOwogfQogCiBpbmxpbmUgYm9vbCBN
YXJrZWRCbG9jazo6SGFuZGxlOjppc05ld2x5QWxsb2NhdGVkKGNvbnN0IHZvaWQqIHApCkBAIC01
NjksMTIgKzU4Nyw5IEBAIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0F0b20oY29uc3Qgdm8K
IHsKICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQocCkpOwogICAgIHNpemVf
dCBhdG9tTnVtYmVyID0gdGhpcy0+YXRvbU51bWJlcihwKTsKLSAgICBzaXplX3QgZmlyc3RBdG9t
ID0gTWFya2VkQmxvY2s6OmZpcnN0QXRvbSgpOwotICAgIGlmIChhdG9tTnVtYmVyIDwgZmlyc3RB
dG9tKSAvLyBGaWx0ZXJzIHBvaW50ZXJzIGludG8gTWFya2VkQmxvY2sgbWV0YWRhdGEuCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoKGF0b21OdW1iZXIgLSBmaXJzdEF0b20pICUgbV9o
YW5kbGUubV9hdG9tc1BlckNlbGwpIC8vIEZpbHRlcnMgcG9pbnRlcnMgaW50byBjZWxsIG1pZGRs
ZXMuCisgICAgaWYgKGF0b21OdW1iZXIgJSBoYW5kbGUoKS5tX2F0b21zUGVyQ2VsbCkgLy8gRmls
dGVycyBwb2ludGVycyBpbnRvIGNlbGwgbWlkZGxlcy4KICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIGlmIChhdG9tTnVtYmVyID49IG1faGFuZGxlLm1fZW5kQXRvbSkgLy8gRmlsdGVycyBwb2lu
dGVycyBpbnRvIGludmFsaWQgY2VsbHMgb3V0IG9mIHRoZSByYW5nZS4KKyAgICBpZiAoYXRvbU51
bWJlciA+PSBoYW5kbGUoKS5tX2VuZEF0b20pIC8vIEZpbHRlcnMgcG9pbnRlcnMgaW50byBpbnZh
bGlkIGNlbGxzIG91dCBvZiB0aGUgcmFuZ2UuCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KQEAgLTU4Myw3ICs1OTgsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVu
Y3Rvcj4KIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFj
aENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKICAgICBIZWFwQ2VsbDo6S2luZCBraW5k
ID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20o
KTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgIEhl
YXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+
YXRvbXMoKVtpXSk7CiAgICAgICAgIGlmIChmdW5jdG9yKGNlbGwsIGtpbmQpID09IEl0ZXJhdGlv
blN0YXR1czo6RG9uZSkKICAgICAgICAgICAgIHJldHVybiBJdGVyYXRpb25TdGF0dXM6OkRvbmU7
CkBAIC01OTMsMTUgKzYwOCwxNSBAQCBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2Nr
OjpIYW5kCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpoYXNBbnlNYXJrZWQoKSBjb25zdAog
ewotICAgIHJldHVybiBtX2JpYXNlZE1hcmtDb3VudCAhPSBtX21hcmtDb3VudEJpYXM7CisgICAg
cmV0dXJuIGZvb3RlcigpLm1fYmlhc2VkTWFya0NvdW50ICE9IGZvb3RlcigpLm1fbWFya0NvdW50
QmlhczsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6Om5vdGVNYXJrZWQoKQogewogICAg
IC8vIFRoaXMgaXMgcmFjeSBieSBkZXNpZ24uIFdlIGRvbid0IHdhbnQgdG8gcGF5IHRoZSBwcmlj
ZSBvZiBhbiBhdG9taWMgaW5jcmVtZW50IQotICAgIGludDE2X3QgYmlhc2VkTWFya0NvdW50ID0g
bV9iaWFzZWRNYXJrQ291bnQ7CisgICAgaW50MTZfdCBiaWFzZWRNYXJrQ291bnQgPSBmb290ZXIo
KS5tX2JpYXNlZE1hcmtDb3VudDsKICAgICArK2JpYXNlZE1hcmtDb3VudDsKLSAgICBtX2JpYXNl
ZE1hcmtDb3VudCA9IGJpYXNlZE1hcmtDb3VudDsKKyAgICBmb290ZXIoKS5tX2JpYXNlZE1hcmtD
b3VudCA9IGJpYXNlZE1hcmtDb3VudDsKICAgICBpZiAoVU5MSUtFTFkoIWJpYXNlZE1hcmtDb3Vu
dCkpCiAgICAgICAgIG5vdGVNYXJrZWRTbG93KCk7CiB9CkBAIC02MTYsNyArNjMxLDcgQEAgc3Ry
dWN0IE1hcmtlZEJsb2NrSGFzaCA6IFB0ckhhc2g8SlNDOjpNYQogICAgICAgICAvLyBBbGlnbmVk
IFZNIHJlZ2lvbnMgdGVuZCB0byBiZSBtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcgaW50ZWdlcnMs
CiAgICAgICAgIC8vIHdoaWNoIGlzIGEgZ3JlYXQgaGFzaCBmdW5jdGlvbiwgYnV0IHdlIGhhdmUg
dG8gcmVtb3ZlIHRoZSBsb3cgYml0cywKICAgICAgICAgLy8gc2luY2UgdGhleSdyZSBhbHdheXMg
emVybywgd2hpY2ggaXMgYSB0ZXJyaWJsZSBoYXNoIGZ1bmN0aW9uIQotICAgICAgICByZXR1cm4g
cmVpbnRlcnByZXRfY2FzdDxKU0M6OkJpdHM+KGtleSkgLyBKU0M6Ok1hcmtlZEJsb2NrOjpibG9j
a1NpemU7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4oa2V5KSAv
IEpTQzo6TWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAgICB9CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGluZXMuaAkocmV2aXNpb24g
MjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTI3Niw3ICsyNzYsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZMYXN0Q2VsbCA9IHN0
YXRpY19jYXN0PGNoYXIqPihjZWxsQWxpZ24oYmxvY2suYXRvbXMoKSArIG1fZW5kQXRvbSAtIDEp
KTsKICAgICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCArIGNlbGxTaXpl
OwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkRW5kIC0gTWFya2VkQmxvY2s6OmJsb2Nr
U2l6ZSA8PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZibG9jaykpOwotICAgICAgICBjaGFyKiBwYXls
b2FkQmVnaW4gPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGJsb2NrLmF0b21zKCkgKyBmaXJzdEF0b20o
KSk7CisgICAgICAgIGNoYXIqIHBheWxvYWRCZWdpbiA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oYmxv
Y2suYXRvbXMoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9G
cmVlTGlzdCkKICAgICAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwpAQCAtMzIwLDcgKzMyMCw3
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgICAg
ICsrY291bnQ7CiAgICAgICAgIH0KICAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0
b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgIGZvciAoc2l6
ZV90IGkgPSAwOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAg
IGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkKICAgICAgICAgICAgICYmICgobWFya3NNb2RlID09
IE1hcmtzTm90U3RhbGUgJiYgYmxvY2subV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICAgICAg
fHwgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5QWxs
b2NhdGVkLmdldChpKSkpKSB7CkBAIC00OTIsNyArNDkyLDcgQEAgaW5saW5lIEl0ZXJhdGlvblN0
YXR1cyBNYXJrZWRCbG9jazo6SGFuZAogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xODAzMTUKICAgICAKICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0gbV9h
dHRyaWJ1dGVzLmNlbGxLaW5kOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8
IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgIEhlYXBDZWxs
KiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMo
KVtpXSk7CiAgICAgICAgIGlmICghaXNMaXZlKGNlbGwpKQogICAgICAgICAgICAgY29udGludWU7
CkBAIC01MDcsNyArNTA3LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CiBpbmxpbmUg
SXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hEZWFkQ2VsbChjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIEhlYXBDZWxsOjpLaW5kIGtpbmQgPSBtX2F0dHJp
YnV0ZXMuY2VsbEtpbmQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9l
bmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAgICAgSGVhcENlbGwqIGNl
bGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Jsb2NrLT5hdG9tcygpW2ld
KTsKICAgICAgICAgaWYgKGlzTGl2ZShjZWxsKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
NTI3LDcgKzUyNyw3IEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6OkhhbmQK
ICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAg
ICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgZm9yIChzaXplX3QgaSA9
IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsK
ICAgICAgICAgaWYgKCFibG9jay5tX21hcmtzLmdldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuY3BwCShy
ZXZpc2lvbiAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNiBAQCBjb25zdCBWZWN0b3I8c2l6
ZV90PiYgc2l6ZUNsYXNzZXMoKQogICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBvZiB0aGVzZSB0
aGluZ3Mgc2hvdWxkIGhhdmUgSXNvU3Vic3BhY2VzLgogICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTg3NgogICAgICAgICAgICAgYWRkKHNp
emVvZihVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBhZGQoc2l6ZW9m
KEZ1bmN0aW9uQ29kZUJsb2NrKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEpTU3RyaW5nKSk7
CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEpTRnVuY3Rpb24pKTsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjc3MTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01
MCwyNSArNTAsMjUgQEAgY2xhc3MgTWFya2VkU3BhY2UgewogICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKE1hcmtlZFNwYWNlKTsKIHB1YmxpYzoKICAgICAvLyBzaXplU3RlcCBpcyByZWFsbHkgYSBz
eW5vbnltIGZvciBhdG9tU2l6ZTsgaXQncyBubyBhY2NpZGVudCB0aGF0IHRoZXkgYXJlIHRoZSBz
YW1lLgotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZVN0ZXAgPSBNYXJrZWRCbG9jazo6YXRv
bVNpemU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZVN0ZXAgPSBNYXJrZWRCbG9j
azo6YXRvbVNpemU7CiAgICAgCiAgICAgLy8gU2l6ZXMgdXAgdG8gdGhpcyBhbW91bnQgZ2V0IGEg
c2l6ZSBjbGFzcyBmb3IgZWFjaCBzaXplIHN0ZXAuCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBw
cmVjaXNlQ3V0b2ZmID0gODA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgcHJlY2lzZUN1
dG9mZiA9IDgwOwogICAgIAotICAgIC8vIFRoZSBhbW91bnQgb2YgYXZhaWxhYmxlIHBheWxvYWQg
aW4gYSBibG9jayBpcyB0aGUgYmxvY2sncyBzaXplIG1pbnVzIHRoZSBoZWFkZXIuIEJ1dCB0aGUK
KyAgICAvLyBUaGUgYW1vdW50IG9mIGF2YWlsYWJsZSBwYXlsb2FkIGluIGEgYmxvY2sgaXMgdGhl
IGJsb2NrJ3Mgc2l6ZSBtaW51cyB0aGUgZm9vdGVyLiBCdXQgdGhlCiAgICAgLy8gaGVhZGVyIHNp
emUgbWlnaHQgbm90IGJlIGF0b20gc2l6ZSBhbGlnbmVkLCBzbyB3ZSByb3VuZCBkb3duIHRoZSBy
ZXN1bHQgYWNjb3JkaW5nbHkuCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja1BheWxvYWQg
PSAoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAtIHNpemVvZihNYXJrZWRCbG9jaykpICYgfihNYXJr
ZWRCbG9jazo6YXRvbVNpemUgLSAxKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBibG9j
a1BheWxvYWQgPSAoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAtIHNpemVvZihNYXJrZWRCbG9jazo6
Rm9vdGVyKSkgJiB+KE1hcmtlZEJsb2NrOjphdG9tU2l6ZSAtIDEpOwogICAgIAogICAgIC8vIFRo
ZSBsYXJnZXN0IGNlbGwgd2UncmUgd2lsbGluZyB0byBhbGxvY2F0ZSBpbiBhIE1hcmtlZEJsb2Nr
IHRoZSAibm9ybWFsIHdheSIgKGkuZS4gdXNpbmcgc2l6ZQogICAgIC8vIGNsYXNzZXMsIHJhdGhl
ciB0aGFuIGEgbGFyZ2UgYWxsb2NhdGlvbikgaXMgaGFsZiB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9h
ZCwgcm91bmRlZCBkb3duLiBUaGlzCiAgICAgLy8gZW5zdXJlcyB0aGF0IHdlIG9ubHkgdXNlIHRo
ZSBzaXplIGNsYXNzIGFwcHJvYWNoIGlmIGl0IG1lYW5zIGJlaW5nIGFibGUgdG8gcGFjayB0d28g
dGhpbmdzCiAgICAgLy8gaW50byBvbmUgYmxvY2suCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBs
YXJnZUN1dG9mZiA9IChibG9ja1BheWxvYWQgLyAyKSAmIH4oc2l6ZVN0ZXAgLSAxKTsKKyAgICBz
dGF0aWMgY29uc3RleHByIHNpemVfdCBsYXJnZUN1dG9mZiA9IChibG9ja1BheWxvYWQgLyAyKSAm
IH4oc2l6ZVN0ZXAgLSAxKTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbnVtU2l6ZUNsYXNz
ZXMgPSBsYXJnZUN1dG9mZiAvIHNpemVTdGVwOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IG51bVNpemVDbGFzc2VzID0gbGFyZ2VDdXRvZmYgLyBzaXplU3RlcDsKICAgICAKLSAgICBzdGF0
aWMgY29uc3QgSGVhcFZlcnNpb24gbnVsbFZlcnNpb24gPSAwOyAvLyBUaGUgdmVyc2lvbiBvZiBm
cmVzaGx5IGFsbG9jYXRlZCBibG9ja3MuCi0gICAgc3RhdGljIGNvbnN0IEhlYXBWZXJzaW9uIGlu
aXRpYWxWZXJzaW9uID0gMjsgLy8gVGhlIHZlcnNpb24gdGhhdCB0aGUgaGVhcCBzdGFydHMgb3V0
IHdpdGguIFNldCB0byBtYWtlIHN1cmUgdGhhdCBuZXh0VmVyc2lvbihudWxsVmVyc2lvbikgIT0g
aW5pdGlhbFZlcnNpb24uCisgICAgc3RhdGljIGNvbnN0ZXhwciBIZWFwVmVyc2lvbiBudWxsVmVy
c2lvbiA9IDA7IC8vIFRoZSB2ZXJzaW9uIG9mIGZyZXNobHkgYWxsb2NhdGVkIGJsb2Nrcy4KKyAg
ICBzdGF0aWMgY29uc3RleHByIEhlYXBWZXJzaW9uIGluaXRpYWxWZXJzaW9uID0gMjsgLy8gVGhl
IHZlcnNpb24gdGhhdCB0aGUgaGVhcCBzdGFydHMgb3V0IHdpdGguIFNldCB0byBtYWtlIHN1cmUg
dGhhdCBuZXh0VmVyc2lvbihudWxsVmVyc2lvbikgIT0gaW5pdGlhbFZlcnNpb24uCiAgICAgCiAg
ICAgc3RhdGljIEhlYXBWZXJzaW9uIG5leHRWZXJzaW9uKEhlYXBWZXJzaW9uIHZlcnNpb24pCiAg
ICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332476</attachid>
            <date>2018-01-27 11:24:37 -0800</date>
            <delta_ts>2018-01-27 13:16:52 -0800</delta_ts>
            <desc>maybe this is right</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>29441</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlz
aW9uIDIyNzcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODYsMTIgKzg2LDE3IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGU6
On5IYW5kbGUoKQogfQogCiBNYXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5kbGUm
IGhhbmRsZSkKK3sKKyAgICBuZXcgKCZmb290ZXIoKSkgRm9vdGVyKHZtLCBoYW5kbGUpOworICAg
IGlmIChmYWxzZSkKKyAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0
ZWQuXG4iKTsKK30KKworTWFya2VkQmxvY2s6OkZvb3Rlcjo6Rm9vdGVyKFZNJiB2bSwgSGFuZGxl
JiBoYW5kbGUpCiAgICAgOiBtX2hhbmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKICAgICAs
IG1fbWFya2luZ1ZlcnNpb24oTWFya2VkU3BhY2U6Om51bGxWZXJzaW9uKQogewotICAgIGlmIChm
YWxzZSkKLSAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4i
KTsKIH0KIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp1bnN3ZWVwV2l0aE5vTmV3bHlBbGxv
Y2F0ZWQoKQpAQCAtMTA4LDcgKzExMyw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0
SXNGcmVlTGlzdGUKIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyhj
b25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhi
bG9jaygpLm1fbG9jayk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9ja0Zvb3Rlcigp
Lm1fbG9jayk7CiAgICAgCiAgICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50
ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nIVxuIik7CkBA
IC0xNTUsOSArMTYwLDkgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9G
aQogewogICAgIGRpcmVjdG9yeSgpLT5zZXRJc0FsbG9jYXRlZChOb0xvY2tpbmdOZWNlc3Nhcnks
IHRoaXMsIGZhbHNlKTsKICAgICBkaXJlY3RvcnkoKS0+c2V0SXNEZXN0cnVjdGlibGUoTm9Mb2Nr
aW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKLSAgICBtX2Jsb2NrLT5tX21hcmtzLmNsZWFyQWxs
KCk7Ci0gICAgbV9ibG9jay0+Y2xlYXJIYXNBbnlNYXJrZWQoKTsKLSAgICBtX2Jsb2NrLT5tX21h
cmtpbmdWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCk7Cisg
ICAgYmxvY2tGb290ZXIoKS5tX21hcmtzLmNsZWFyQWxsKCk7CisgICAgYmxvY2soKS5jbGVhckhh
c0FueU1hcmtlZCgpOworICAgIGJsb2NrRm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiA9IGhlYXAo
KS0+b2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpOwogICAgIG1fd2Vha1NldC5sYXN0Q2hh
bmNlVG9GaW5hbGl6ZSgpOwogICAgIG1fbmV3bHlBbGxvY2F0ZWQuY2xlYXJBbGwoKTsKICAgICBt
X25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5uZXdseUFsbG9j
YXRlZFZlcnNpb24oKTsKQEAgLTE2Nyw3ICsxNzIsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6Omxhc3RDaGFuY2VUb0ZpCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9j
YXRpbmcoRnJlZUxpc3QmIGZyZWVMaXN0KQogewogICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhibG9jaygpLm1fbG9jayk7CisgICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soYmxvY2tGb290ZXIoKS5tX2xvY2spOwogICAgICAgICAKICAgICAgICAgaWYgKGZhbHNlKQog
ICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFu
ZGxlOjpyZXN1bWVBbGxvY2F0aW5nIVxuIik7CkBAIC0yMDAsNyArMjA1LDcgQEAgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjp6YXAoY29uc3QgRnJlZQogdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRU
b01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewogICAgIEFTU0VSVCh2bSgp
LT5oZWFwLm9iamVjdFNwYWNlKCkuaXNNYXJraW5nKCkpOwotICAgIGF1dG8gbG9ja2VyID0gaG9s
ZExvY2sobV9sb2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvb3RlcigpLm1fbG9j
ayk7CiAgICAgCiAgICAgaWYgKCFhcmVNYXJrc1N0YWxlKG1hcmtpbmdWZXJzaW9uKSkKICAgICAg
ICAgcmV0dXJuOwpAQCAtMjE3LDcgKzIyMiw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9N
YXJrU2xvdyhIZWFwVmUKICAgICAgICAgLy8gZGF0ZSB2ZXJzaW9uISBJZiBpdCBkb2VzLCB0aGVu
IHdlIHdhbnQgdG8gbGVhdmUgdGhlIG5ld2x5QWxsb2NhdGVkIGFsb25lLCBzaW5jZSB0aGF0CiAg
ICAgICAgIC8vIG1lYW5zIHRoYXQgd2UgaGFkIGFsbG9jYXRlZCBpbiB0aGlzIHByZXZpb3VzbHkg
ZW1wdHkgYmxvY2sgYnV0IGRpZCBub3QgZmlsbCBpdCB1cCwgc28KICAgICAgICAgLy8gd2UgY3Jl
YXRlZCBhIG5ld2x5QWxsb2NhdGVkLgotICAgICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CisgICAg
ICAgIGZvb3RlcigpLm1fbWFya3MuY2xlYXJBbGwoKTsKICAgICB9IGVsc2UgewogICAgICAgICBp
ZiAoZmFsc2UpCiAgICAgICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5n
IHRoaW5ncy5cbiIpOwpAQCAtMjMwLDE2ICsyMzUsMTYgQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJv
dXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAgICAgLy8gY2Fubm90IGJlIGxhc3RDaGFuY2VU
b0ZpbmFsaXplLiBTbyBpdCBtdXN0IGJlIHN0b3BBbGxvY2F0aW5nLiBUaGF0IG1lYW5zIHRoYXQg
d2UganVzdAogICAgICAgICAgICAgLy8gY29tcHV0ZWQgdGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMg
anVzdCBiZWZvcmUgdGhlIHN0YXJ0IG9mIGFuIGluY3JlbWVudC4gV2hlbiB3ZSBhcmUgaW4gdGhh
dAogICAgICAgICAgICAgLy8gbW9kZSwgaXQgc2VlbXMgYXMgaWYgbmV3bHlBbGxvY2F0ZWQgc2hv
dWxkIHN1YnN1bWUgbWFya3MuCi0gICAgICAgICAgICBBU1NFUlQoaGFuZGxlKCkubV9uZXdseUFs
bG9jYXRlZC5zdWJzdW1lcyhtX21hcmtzKSk7Ci0gICAgICAgICAgICBtX21hcmtzLmNsZWFyQWxs
KCk7CisgICAgICAgICAgICBBU1NFUlQoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zdWJzdW1l
cyhmb290ZXIoKS5tX21hcmtzKSk7CisgICAgICAgICAgICBmb290ZXIoKS5tX21hcmtzLmNsZWFy
QWxsKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBoYW5kbGUoKS5tX25ld2x5QWxs
b2NhdGVkLnNldEFuZENsZWFyKG1fbWFya3MpOworICAgICAgICAgICAgaGFuZGxlKCkubV9uZXds
eUFsbG9jYXRlZC5zZXRBbmRDbGVhcihmb290ZXIoKS5tX21hcmtzKTsKICAgICAgICAgICAgIGhh
bmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwog
ICAgICAgICB9CiAgICAgfQogICAgIGNsZWFySGFzQW55TWFya2VkKCk7CiAgICAgV1RGOjpzdG9y
ZVN0b3JlRmVuY2UoKTsKLSAgICBtX21hcmtpbmdWZXJzaW9uID0gbWFya2luZ1ZlcnNpb247Cisg
ICAgZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiA9IG1hcmtpbmdWZXJzaW9uOwogICAgIAogICAg
IC8vIFRoaXMgbWVhbnMgd2UncmUgdGhlIGZpcnN0IG9uZXMgdG8gbWFyayBhbnkgb2JqZWN0IGlu
IHRoaXMgYmxvY2suCiAgICAgZGlyZWN0b3J5LT5zZXRJc01hcmtpbmdOb3RFbXB0eShob2xkTG9j
ayhkaXJlY3RvcnktPmJpdHZlY3RvckxvY2soKSksICZoYW5kbGUoKSwgdHJ1ZSk7CkBAIC0yNjAs
MTQgKzI2NSwxNCBAQCB2b2lkIE1hcmtlZEJsb2NrOjpyZXNldE1hcmtzKCkKICAgICAvLyB2ZXJz
aW9uIGlzIG51bGwsIGFib3V0VG9NYXJrU2xvdygpIHdpbGwgYXNzdW1lIHRoYXQgdGhlIG1hcmtz
IHdlcmUgbm90IHN0YWxlIGFzIG9mIGJlZm9yZQogICAgIC8vIGJlZ2luTWFya2luZygpLiBIZW5j
ZSB0aGUgbmVlZCB0byB3aGlwIHRoZSBtYXJrcyBpbnRvIHNoYXBlLgogICAgIGlmIChhcmVNYXJr
c1N0YWxlKCkpCi0gICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKLSAgICBtX21hcmtpbmdWZXJz
aW9uID0gTWFya2VkU3BhY2U6Om51bGxWZXJzaW9uOworICAgICAgICBmb290ZXIoKS5tX21hcmtz
LmNsZWFyQWxsKCk7CisgICAgZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiA9IE1hcmtlZFNwYWNl
OjpudWxsVmVyc2lvbjsKIH0KIAogI2lmICFBU1NFUlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxv
Y2s6OmFzc2VydE1hcmtzTm90U3RhbGUoKQogewotICAgIEFTU0VSVChtX21hcmtpbmdWZXJzaW9u
ID09IHZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lvbigpKTsKKyAgICBBU1NF
UlQoZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiA9PSB2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCku
bWFya2luZ1ZlcnNpb24oKSk7CiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCkBAIC0y
ODgsNyArMjkzLDcgQEAgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcAog
CiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlTGlzdCgpCiB7Ci0gICAg
YXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9jaygpLm1fbG9jayk7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhibG9ja0Zvb3RlcigpLm1fbG9jayk7CiAgICAgaWYgKGZhbHNlKQogICAgICAg
ICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENv
bnN1bWVGcmVlTGlzdCFcbiIpOwogICAgIEFTU0VSVChpc0ZyZWVMaXN0ZWQoKSk7CkBAIC0yOTgs
MTIgKzMwMywxMiBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlCiAK
IHNpemVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50KCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NT
dGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQoKTsKKyAgICByZXR1cm4gYXJlTWFya3NTdGFsZSgp
ID8gMCA6IGZvb3RlcigpLm1fbWFya3MuY291bnQoKTsKIH0KIAogdm9pZCBNYXJrZWRCbG9jazo6
Y2xlYXJIYXNBbnlNYXJrZWQoKQogewotICAgIG1fYmlhc2VkTWFya0NvdW50ID0gbV9tYXJrQ291
bnRCaWFzOworICAgIGZvb3RlcigpLm1fYmlhc2VkTWFya0NvdW50ID0gZm9vdGVyKCkubV9tYXJr
Q291bnRCaWFzOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpub3RlTWFya2VkU2xvdygpCkBAIC0z
MzMsNyArMzM4LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRBZGRUb0RpcmVjdAog
ICAgIAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IGRpcmVjdG9yeS0+Y2VsbFNpemUoKTsKICAgICBt
X2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXplIC0gMSkgLyBhdG9tU2l6ZTsKLSAg
ICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9tc1BlckNlbGwgKyAxOworICAgIG1f
ZW5kQXRvbSA9IGVuZEF0b20oKSAtIG1fYXRvbXNQZXJDZWxsICsgMTsKICAgICAKICAgICBtX2F0
dHJpYnV0ZXMgPSBkaXJlY3RvcnktPmF0dHJpYnV0ZXMoKTsKIApAQCAtNDEwLDcgKzQxNSw3IEBA
IHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAoRnJlZUxpc3QKICAgICB9CiAgICAgCiAg
ICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQotICAgICAgICBibG9jaygpLm1fbG9jay5sb2Nr
KCk7CisgICAgICAgIGJsb2NrRm9vdGVyKCkubV9sb2NrLmxvY2soKTsKICAgICAKICAgICBzdWJz
cGFjZSgpLT5kaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlzdCh0aGlzKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkocmV2aXNpb24gMjI3NzE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAkod29ya2luZyBjb3B5
KQpAQCAtNDMsNyArNDMsNiBAQCBjbGFzcyBNYXJrZWRTcGFjZTsKIGNsYXNzIFNsb3RWaXNpdG9y
OwogY2xhc3MgU3Vic3BhY2U7CiAKLXR5cGVkZWYgdWludHB0cl90IEJpdHM7CiB0eXBlZGVmIHVp
bnQzMl90IEhlYXBWZXJzaW9uOwogCiAvLyBBIG1hcmtlZCBibG9jayBpcyBhIHBhZ2UtYWxpZ25l
ZCBjb250YWluZXIgZm9yIGhlYXAtYWxsb2NhdGVkIG9iamVjdHMuCkBAIC0xMDMsNiArMTAyLDcg
QEAgcHVibGljOgogICAgICAgICB+SGFuZGxlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgTWFy
a2VkQmxvY2smIGJsb2NrKCk7CisgICAgICAgIE1hcmtlZEJsb2NrOjpGb290ZXImIGJsb2NrRm9v
dGVyKCk7CiAgICAgICAgICAgICAKICAgICAgICAgdm9pZCogY2VsbEFsaWduKHZvaWQqKTsKICAg
ICAgICAgICAgIApAQCAtMjQ0LDcgKzI0NCw2MiBAQCBwdWJsaWM6CiAgICAgICAgICAgICAKICAg
ICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CiAgICAgfTsKKworcHJpdmF0
ZTogICAgCisgICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50TWFzayA9IGF0b21T
aXplIC0gMTsKKworICAgIHR5cGVkZWYgY2hhciBBdG9tW2F0b21TaXplXTsKKworcHVibGljOgor
ICAgIGNsYXNzIEZvb3RlciB7CisgICAgcHVibGljOgorICAgICAgICBGb290ZXIoVk0mLCBIYW5k
bGUmKTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIE1hcmtl
ZEJsb2NrOworICAgICAgICAKKyAgICAgICAgSGFuZGxlJiBtX2hhbmRsZTsKKyAgICAgICAgVk0q
IG1fdm07CisgICAgICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNlOworCisgICAgICAgIENvdW50aW5n
TG9jayBtX2xvY2s7CisgICAgCisgICAgICAgIC8vIFRoZSBhY3R1YWwgbWFyayBjb3VudCBjYW4g
YmUgY29tcHV0ZWQgYnkgZG9pbmc6IG1fYmlhc2VkTWFya0NvdW50IC0gbV9tYXJrQ291bnRCaWFz
LiBOb3RlCisgICAgICAgIC8vIHRoYXQgdGhpcyBjb3VudCBpcyByYWN5LiBJdCB3aWxsIGFjY3Vy
YXRlbHkgZGV0ZWN0IHdoZXRoZXIgb3Igbm90IGV4YWN0bHkgemVybyB0aGluZ3Mgd2VyZQorICAg
ICAgICAvLyBtYXJrZWQsIGJ1dCBpZiBOIHRoaW5ncyBnb3QgbWFya2VkLCB0aGVuIHRoaXMgbWF5
IHJlcG9ydCBhbnl0aGluZyBpbiB0aGUgcmFuZ2UgWzEsIE5dIChvcgorICAgICAgICAvLyBiZWZv
cmUgdW5iaWFzZWQsIGl0IHdvdWxkIGJlIFsxICsgbV9tYXJrQ291bnRCaWFzLCBOICsgbV9tYXJr
Q291bnRCaWFzXS4pCisgICAgICAgIGludDE2X3QgbV9iaWFzZWRNYXJrQ291bnQ7CisgICAgCisg
ICAgICAgIC8vIFdlIGJpYXMgdGhlIG1hcmsgY291bnQgc28gdGhhdCBpZiBtX2JpYXNlZE1hcmtD
b3VudCA+PSAwIHRoZW4gdGhlIGJsb2NrIHNob3VsZCBiZSByZXRpcmVkLgorICAgICAgICAvLyBX
ZSBnbyB0byBhbGwgdGhpcyB0cm91YmxlIHRvIG1ha2UgbWFya2luZyBhIGJpdCBmYXN0ZXI6IHRo
aXMgd2F5LCBtYXJraW5nIGtub3dzIHdoZW4gdG8KKyAgICAgICAgLy8gcmV0aXJlIGEgYmxvY2sg
dXNpbmcgYSBqcy9qbnMgb24gbV9iaWFzZWRNYXJrQ291bnQuCisgICAgICAgIC8vCisgICAgICAg
IC8vIEZvciBleGFtcGxlLCBpZiBhIGJsb2NrIGhhcyByb29tIGZvciAxMDAgb2JqZWN0cyBhbmQg
cmV0aXJlbWVudCBoYXBwZW5zIHdoZW5ldmVyIDkwJSBhcmUKKyAgICAgICAgLy8gbGl2ZSwgdGhl
biBtX21hcmtDb3VudEJpYXMgd2lsbCBiZSAtOTAuIFRoaXMgd2F5LCB3aGVuIG1hcmtpbmcgYmVn
aW5zLCB0aGlzIHdpbGwgY2F1c2UgdXMgdG8KKyAgICAgICAgLy8gc2V0IG1fYmlhc2VkTWFya0Nv
dW50IHRvIC05MCBhcyB3ZWxsLCBzaW5jZToKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIG1f
Ymlhc2VkTWFya0NvdW50ID0gYWN0dWFsTWFya0NvdW50ICsgbV9tYXJrQ291bnRCaWFzLgorICAg
ICAgICAvLworICAgICAgICAvLyBNYXJraW5nIGFuIG9iamVjdCB3aWxsIGluY3JlbWVudCBtX2Jp
YXNlZE1hcmtDb3VudC4gT25jZSA5MCBvYmplY3RzIGdldCBtYXJrZWQsIHdlIHdpbGwgaGF2ZQor
ICAgICAgICAvLyBtX2JpYXNlZE1hcmtDb3VudCA9IDAsIHdoaWNoIHdpbGwgdHJpZ2dlciByZXRp
cmVtZW50LiBJbiBvdGhlciB3b3Jkcywgd2Ugd2FudCB0byBzZXQKKyAgICAgICAgLy8gbV9tYXJr
Q291bnRCaWFzIGxpa2Ugc286CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBtX21hcmtDb3Vu
dEJpYXMgPSAtKG1pbk1hcmtlZEJsb2NrVXRpbGl6YXRpb24gKiBjZWxsc1BlckJsb2NrKQorICAg
ICAgICAvLworICAgICAgICAvLyBBbGwgb2YgdGhpcyBhbHNvIG1lYW5zIHRoYXQgeW91IGNhbiBk
ZXRlY3QgaWYgYW55IG9iamVjdHMgYXJlIG1hcmtlZCBieSBkb2luZzoKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gICAgIG1fYmlhc2VkTWFya0NvdW50ICE9IG1fbWFya0NvdW50QmlhcworICAgICAg
ICBpbnQxNl90IG1fbWFya0NvdW50QmlhczsKKworICAgICAgICBIZWFwVmVyc2lvbiBtX21hcmtp
bmdWZXJzaW9uOworCisgICAgICAgIEJpdG1hcDxhdG9tc1BlckJsb2NrPiBtX21hcmtzOworICAg
IH07CiAgICAgICAgIAorcHJpdmF0ZTogICAgCisgICAgRm9vdGVyJiBmb290ZXIoKTsKKworcHVi
bGljOgogICAgIHN0YXRpYyBNYXJrZWRCbG9jazo6SGFuZGxlKiB0cnlDcmVhdGUoSGVhcCYsIEFs
aWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKICAgICAgICAgCiAgICAgSGFuZGxlJiBoYW5kbGUoKTsK
QEAgLTI1NSw3ICszMTAsNyBAQCBwdWJsaWM6CiAKICAgICBzdGF0aWMgYm9vbCBpc0F0b21BbGln
bmVkKGNvbnN0IHZvaWQqKTsKICAgICBzdGF0aWMgTWFya2VkQmxvY2sqIGJsb2NrRm9yKGNvbnN0
IHZvaWQqKTsKLSAgICBzdGF0aWMgc2l6ZV90IGZpcnN0QXRvbSgpOworICAgIHN0YXRpYyBzaXpl
X3QgZW5kQXRvbSgpOwogICAgIHNpemVfdCBhdG9tTnVtYmVyKGNvbnN0IHZvaWQqKTsKICAgICAg
ICAgCiAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwpAQCAtMjk1LDE5ICszNTAsMTUgQEAgcHVibGlj
OgogICAgIHZvaWQgcmVzZXRNYXJrcygpOwogICAgIAogICAgIGJvb2wgaXNNYXJrZWRSYXcoY29u
c3Qgdm9pZCogcCk7Ci0gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7IHJl
dHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CisgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24o
KSBjb25zdCB7IHJldHVybiBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uOyB9CiAgICAgCiAgICAg
Y29uc3QgQml0bWFwPGF0b21zUGVyQmxvY2s+JiBtYXJrcygpIGNvbnN0OwogICAgIAotICAgIENv
dW50aW5nTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIENvdW50aW5nTG9jayYg
bG9jaygpIHsgcmV0dXJuIGZvb3RlcigpLm1fbG9jazsgfQogICAgIAotICAgIFN1YnNwYWNlKiBz
dWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7IH0KKyAgICBTdWJzcGFjZSogc3Vi
c3BhY2UoKSBjb25zdCB7IHJldHVybiBmb290ZXIoKS5tX3N1YnNwYWNlOyB9CiAKIHByaXZhdGU6
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50TWFzayA9IGF0b21TaXplIC0g
MTsKLQotICAgIHR5cGVkZWYgY2hhciBBdG9tW2F0b21TaXplXTsKLQogICAgIE1hcmtlZEJsb2Nr
KFZNJiwgSGFuZGxlJik7CiAgICAgQXRvbSogYXRvbXMoKTsKICAgICAgICAgCkBAIC0zMTgsNDgg
KzM2OSwxNiBAQCBwcml2YXRlOgogICAgIAogICAgIGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2
ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICBpbmxp
bmUgYm9vbCBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBteU1h
cmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7Ci0gICAgICAgIAotICAg
IEhhbmRsZSYgbV9oYW5kbGU7Ci0gICAgVk0qIG1fdm07Ci0gICAgU3Vic3BhY2UqIG1fc3Vic3Bh
Y2U7Ci0KLSAgICBDb3VudGluZ0xvY2sgbV9sb2NrOwotICAgIAotICAgIC8vIFRoZSBhY3R1YWwg
bWFyayBjb3VudCBjYW4gYmUgY29tcHV0ZWQgYnkgZG9pbmc6IG1fYmlhc2VkTWFya0NvdW50IC0g
bV9tYXJrQ291bnRCaWFzLiBOb3RlCi0gICAgLy8gdGhhdCB0aGlzIGNvdW50IGlzIHJhY3kuIEl0
IHdpbGwgYWNjdXJhdGVseSBkZXRlY3Qgd2hldGhlciBvciBub3QgZXhhY3RseSB6ZXJvIHRoaW5n
cyB3ZXJlCi0gICAgLy8gbWFya2VkLCBidXQgaWYgTiB0aGluZ3MgZ290IG1hcmtlZCwgdGhlbiB0
aGlzIG1heSByZXBvcnQgYW55dGhpbmcgaW4gdGhlIHJhbmdlIFsxLCBOXSAob3IKLSAgICAvLyBi
ZWZvcmUgdW5iaWFzZWQsIGl0IHdvdWxkIGJlIFsxICsgbV9tYXJrQ291bnRCaWFzLCBOICsgbV9t
YXJrQ291bnRCaWFzXS4pCi0gICAgaW50MTZfdCBtX2JpYXNlZE1hcmtDb3VudDsKLSAgICAKLSAg
ICAvLyBXZSBiaWFzIHRoZSBtYXJrIGNvdW50IHNvIHRoYXQgaWYgbV9iaWFzZWRNYXJrQ291bnQg
Pj0gMCB0aGVuIHRoZSBibG9jayBzaG91bGQgYmUgcmV0aXJlZC4KLSAgICAvLyBXZSBnbyB0byBh
bGwgdGhpcyB0cm91YmxlIHRvIG1ha2UgbWFya2luZyBhIGJpdCBmYXN0ZXI6IHRoaXMgd2F5LCBt
YXJraW5nIGtub3dzIHdoZW4gdG8KLSAgICAvLyByZXRpcmUgYSBibG9jayB1c2luZyBhIGpzL2pu
cyBvbiBtX2JpYXNlZE1hcmtDb3VudC4KLSAgICAvLwotICAgIC8vIEZvciBleGFtcGxlLCBpZiBh
IGJsb2NrIGhhcyByb29tIGZvciAxMDAgb2JqZWN0cyBhbmQgcmV0aXJlbWVudCBoYXBwZW5zIHdo
ZW5ldmVyIDkwJSBhcmUKLSAgICAvLyBsaXZlLCB0aGVuIG1fbWFya0NvdW50QmlhcyB3aWxsIGJl
IC05MC4gVGhpcyB3YXksIHdoZW4gbWFya2luZyBiZWdpbnMsIHRoaXMgd2lsbCBjYXVzZSB1cyB0
bwotICAgIC8vIHNldCBtX2JpYXNlZE1hcmtDb3VudCB0byAtOTAgYXMgd2VsbCwgc2luY2U6Ci0g
ICAgLy8KLSAgICAvLyAgICAgbV9iaWFzZWRNYXJrQ291bnQgPSBhY3R1YWxNYXJrQ291bnQgKyBt
X21hcmtDb3VudEJpYXMuCi0gICAgLy8KLSAgICAvLyBNYXJraW5nIGFuIG9iamVjdCB3aWxsIGlu
Y3JlbWVudCBtX2JpYXNlZE1hcmtDb3VudC4gT25jZSA5MCBvYmplY3RzIGdldCBtYXJrZWQsIHdl
IHdpbGwgaGF2ZQotICAgIC8vIG1fYmlhc2VkTWFya0NvdW50ID0gMCwgd2hpY2ggd2lsbCB0cmln
Z2VyIHJldGlyZW1lbnQuIEluIG90aGVyIHdvcmRzLCB3ZSB3YW50IHRvIHNldAotICAgIC8vIG1f
bWFya0NvdW50QmlhcyBsaWtlIHNvOgotICAgIC8vCi0gICAgLy8gICAgIG1fbWFya0NvdW50Qmlh
cyA9IC0obWluTWFya2VkQmxvY2tVdGlsaXphdGlvbiAqIGNlbGxzUGVyQmxvY2spCi0gICAgLy8K
LSAgICAvLyBBbGwgb2YgdGhpcyBhbHNvIG1lYW5zIHRoYXQgeW91IGNhbiBkZXRlY3QgaWYgYW55
IG9iamVjdHMgYXJlIG1hcmtlZCBieSBkb2luZzoKLSAgICAvLwotICAgIC8vICAgICBtX2JpYXNl
ZE1hcmtDb3VudCAhPSBtX21hcmtDb3VudEJpYXMKLSAgICBpbnQxNl90IG1fbWFya0NvdW50Qmlh
czsKLQotICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247Ci0KLSAgICBCaXRtYXA8YXRv
bXNQZXJCbG9jaz4gbV9tYXJrczsKIH07CiAKK2lubGluZSBNYXJrZWRCbG9jazo6Rm9vdGVyJiBN
YXJrZWRCbG9jazo6Zm9vdGVyKCkKK3sKKyAgICByZXR1cm4gKmJpdHdpc2VfY2FzdDxNYXJrZWRC
bG9jazo6Rm9vdGVyKj4oYXRvbXMoKSArIGVuZEF0b20oKSk7Cit9CisKIGlubGluZSBNYXJrZWRC
bG9jazo6SGFuZGxlJiBNYXJrZWRCbG9jazo6aGFuZGxlKCkKIHsKLSAgICByZXR1cm4gbV9oYW5k
bGU7CisgICAgcmV0dXJuIGZvb3RlcigpLm1faGFuZGxlOwogfQogCiBpbmxpbmUgTWFya2VkQmxv
Y2smIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmJsb2NrKCkKQEAgLTM2Nyw5ICszODYsMTQgQEAgaW5s
aW5lIE1hcmtlZEJsb2NrJiBNYXJrZWRCbG9jazo6SGFuZGxlOgogICAgIHJldHVybiAqbV9ibG9j
azsKIH0KIAotaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6Zmlyc3RBdG9tKCkKK2lubGluZSBN
YXJrZWRCbG9jazo6Rm9vdGVyJiBNYXJrZWRCbG9jazo6SGFuZGxlOjpibG9ja0Zvb3RlcigpCiB7
Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxhdG9tU2l6ZT4oc2l6ZW9mKE1h
cmtlZEJsb2NrKSkgLyBhdG9tU2l6ZTsKKyAgICByZXR1cm4gYmxvY2soKS5mb290ZXIoKTsKK30K
KworaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6ZW5kQXRvbSgpCit7CisgICAgcmV0dXJuIChi
bG9ja1NpemUgLSBzaXplb2YoTWFya2VkQmxvY2s6OkZvb3RlcikpIC8gYXRvbVNpemU7CiB9CiAK
IGlubGluZSBNYXJrZWRCbG9jazo6QXRvbSogTWFya2VkQmxvY2s6OmF0b21zKCkKQEAgLTM3OSwx
MyArNDAzLDEzIEBAIGlubGluZSBNYXJrZWRCbG9jazo6QXRvbSogTWFya2VkQmxvY2s6OmEKIAog
aW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCogcCkKIHsK
LSAgICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYXRvbUFsaWdubWVudE1h
c2spOworICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwKSAmIGF0b21B
bGlnbm1lbnRNYXNrKTsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNl
bGxBbGlnbih2b2lkKiBwKQogewotICAgIEJpdHMgYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0
cz4oYmxvY2soKS5hdG9tcygpICsgZmlyc3RBdG9tKCkpOwotICAgIEJpdHMgYml0cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Qml0cz4ocCk7CisgICAgdWludHB0cl90IGJhc2UgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4oYmxvY2soKS5hdG9tcygpKTsKKyAgICB1aW50cHRyX3QgYml0cyA9IHJl
aW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwKTsKICAgICBiaXRzIC09IGJhc2U7CiAgICAgYml0
cyAtPSBiaXRzICUgY2VsbFNpemUoKTsKICAgICBiaXRzICs9IGJhc2U7CkBAIC0zOTQsNyArNDE4
LDcgQEAgaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNlbGxBbAogCiBpbmxpbmUg
TWFya2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2b2lkKiBwKQogewotICAg
IHJldHVybiByZWludGVycHJldF9jYXN0PE1hcmtlZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxC
aXRzPihwKSAmIGJsb2NrTWFzayk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2Vk
QmxvY2sqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocCkgJiBibG9ja01hc2spOwogfQog
CiBpbmxpbmUgQmxvY2tEaXJlY3RvcnkqIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpcmVjdG9yeSgp
IGNvbnN0CkBAIC00MTksNyArNDQzLDcgQEAgaW5saW5lIFZNKiBNYXJrZWRCbG9jazo6SGFuZGxl
Ojp2bSgpIGNvbgogCiBpbmxpbmUgVk0qIE1hcmtlZEJsb2NrOjp2bSgpIGNvbnN0CiB7Ci0gICAg
cmV0dXJuIG1fdm07CisgICAgcmV0dXJuIGZvb3RlcigpLm1fdm07CiB9CiAKIGlubGluZSBXZWFr
U2V0JiBNYXJrZWRCbG9jazo6SGFuZGxlOjp3ZWFrU2V0KCkKQEAgLTQyOSw3ICs0NTMsNyBAQCBp
bmxpbmUgV2Vha1NldCYgTWFya2VkQmxvY2s6OkhhbmRsZTo6d2VhCiAKIGlubGluZSBXZWFrU2V0
JiBNYXJrZWRCbG9jazo6d2Vha1NldCgpCiB7Ci0gICAgcmV0dXJuIG1faGFuZGxlLndlYWtTZXQo
KTsKKyAgICByZXR1cm4gaGFuZGxlKCkud2Vha1NldCgpOwogfQogCiBpbmxpbmUgdm9pZCBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpzaHJpbmsoKQpAQCAtNDU0LDcgKzQ3OCw3IEBAIGlubGluZSBzaXpl
X3QgTWFya2VkQmxvY2s6OkhhbmRsZTo6Y2VsbFMKIAogaW5saW5lIHNpemVfdCBNYXJrZWRCbG9j
azo6Y2VsbFNpemUoKQogewotICAgIHJldHVybiBtX2hhbmRsZS5jZWxsU2l6ZSgpOworICAgIHJl
dHVybiBoYW5kbGUoKS5jZWxsU2l6ZSgpOwogfQogCiBpbmxpbmUgY29uc3QgQ2VsbEF0dHJpYnV0
ZXMmIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmF0dHJpYnV0ZXMoKSBjb25zdApAQCAtNDY0LDcgKzQ4
OCw3IEBAIGlubGluZSBjb25zdCBDZWxsQXR0cmlidXRlcyYgTWFya2VkQmxvY2sKIAogaW5saW5l
IGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6YXR0cmlidXRlcygpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIG1faGFuZGxlLmF0dHJpYnV0ZXMoKTsKKyAgICByZXR1cm4gaGFuZGxlKCku
YXR0cmlidXRlcygpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjpuZWVk
c0Rlc3RydWN0aW9uKCkgY29uc3QKQEAgLTQ5NCwxNyArNTE4LDE3IEBAIGlubGluZSBzaXplX3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c2l6ZSgKIAogaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6
YXRvbU51bWJlcihjb25zdCB2b2lkKiBwKQogewotICAgIHJldHVybiAocmVpbnRlcnByZXRfY2Fz
dDxCaXRzPihwKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4odGhpcykpIC8gYXRvbVNpemU7Cisg
ICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocCkgLSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdD4odGhpcykpIC8gYXRvbVNpemU7CiB9CiAKIGlubGluZSBib29sIE1hcmtl
ZEJsb2NrOjphcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAg
IHJldHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOworICAgIHJldHVybiBt
YXJraW5nVmVyc2lvbiAhPSBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uOwogfQogCiBpbmxpbmUg
RGVwZW5kZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1Zl
cnNpb24pCiB7Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247Cisg
ICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb247CiAgICAg
aWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBhYm91dFRv
TWFya1Nsb3cobWFya2luZ1ZlcnNpb24pOwogICAgIHJldHVybiBEZXBlbmRlbmN5OjpmZW5jZSh2
ZXJzaW9uKTsKQEAgLTUxNywzMiArNTQxLDMyIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmFzc2VydE0KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KGNv
bnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCkpOwor
ICAgIHJldHVybiBmb290ZXIoKS5tX21hcmtzLmdldChhdG9tTnVtYmVyKHApKTsKIH0KIAogaW5s
aW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9u
LCBjb25zdCB2b2lkKiBwKQogewotICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdW
ZXJzaW9uOworICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBmb290ZXIoKS5tX21hcmtpbmdWZXJz
aW9uOwogICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBE
ZXBlbmRlbmN5OjpmZW5jZSh2ZXJzaW9uKSk7CisgICAgcmV0dXJuIGZvb3RlcigpLm1fbWFya3Mu
Z2V0KGF0b21OdW1iZXIocCksIERlcGVuZGVuY3k6OmZlbmNlKHZlcnNpb24pKTsKIH0KIAogaW5s
aW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kg
ZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRNYXJrc05vdFN0YWxlKCk7Ci0gICAgcmV0dXJuIG1f
bWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOworICAgIHJldHVybiBmb290ZXIo
KS5tX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsKIH0KIAogaW5saW5lIGJv
b2wgTWFya2VkQmxvY2s6OnRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5j
eSBkZXBlbmRlbmN5KQogewogICAgIGFzc2VydE1hcmtzTm90U3RhbGUoKTsKLSAgICByZXR1cm4g
bV9tYXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsK
KyAgICByZXR1cm4gZm9vdGVyKCkubV9tYXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVt
YmVyKHApLCBkZXBlbmRlbmN5KTsKIH0KIAogaW5saW5lIGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9j
azo6YXRvbXNQZXJCbG9jaz4mIE1hcmtlZEJsb2NrOjptYXJrcygpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fbWFya3M7CisgICAgcmV0dXJuIGZvb3RlcigpLm1fbWFya3M7CiB9CiAKIGlubGluZSBi
b29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCogcCkK
QEAgLTU2OSwxMiArNTkzLDkgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzQXRvbShjb25z
dCB2bwogewogICAgIEFTU0VSVChNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwKSk7CiAgICAg
c2l6ZV90IGF0b21OdW1iZXIgPSB0aGlzLT5hdG9tTnVtYmVyKHApOwotICAgIHNpemVfdCBmaXJz
dEF0b20gPSBNYXJrZWRCbG9jazo6Zmlyc3RBdG9tKCk7Ci0gICAgaWYgKGF0b21OdW1iZXIgPCBm
aXJzdEF0b20pIC8vIEZpbHRlcnMgcG9pbnRlcnMgaW50byBNYXJrZWRCbG9jayBtZXRhZGF0YS4K
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgoYXRvbU51bWJlciAtIGZpcnN0QXRvbSkg
JSBtX2hhbmRsZS5tX2F0b21zUGVyQ2VsbCkgLy8gRmlsdGVycyBwb2ludGVycyBpbnRvIGNlbGwg
bWlkZGxlcy4KKyAgICBpZiAoYXRvbU51bWJlciAlIGhhbmRsZSgpLm1fYXRvbXNQZXJDZWxsKSAv
LyBGaWx0ZXJzIHBvaW50ZXJzIGludG8gY2VsbCBtaWRkbGVzLgogICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgaWYgKGF0b21OdW1iZXIgPj0gbV9oYW5kbGUubV9lbmRBdG9tKSAvLyBGaWx0ZXJz
IHBvaW50ZXJzIGludG8gaW52YWxpZCBjZWxscyBvdXQgb2YgdGhlIHJhbmdlLgorICAgIGlmIChh
dG9tTnVtYmVyID49IGhhbmRsZSgpLm1fZW5kQXRvbSkgLy8gRmlsdGVycyBwb2ludGVycyBpbnRv
IGludmFsaWQgY2VsbHMgb3V0IG9mIHRoZSByYW5nZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtNTgzLDcgKzYwNCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFt
ZSBGdW5jdG9yPgogaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRCbG9jazo6SGFuZGxlOjpm
b3JFYWNoQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIEhlYXBDZWxsOjpLaW5k
IGtpbmQgPSBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0
QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgZm9yIChz
aXplX3QgaSA9IDA7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAg
ICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Js
b2NrLT5hdG9tcygpW2ldKTsKICAgICAgICAgaWYgKGZ1bmN0b3IoY2VsbCwga2luZCkgPT0gSXRl
cmF0aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6
RG9uZTsKQEAgLTU5MywxNSArNjE0LDE1IEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2Vk
QmxvY2s6OkhhbmQKIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Omhhc0FueU1hcmtlZCgpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIG1fYmlhc2VkTWFya0NvdW50ICE9IG1fbWFya0NvdW50QmlhczsK
KyAgICByZXR1cm4gZm9vdGVyKCkubV9iaWFzZWRNYXJrQ291bnQgIT0gZm9vdGVyKCkubV9tYXJr
Q291bnRCaWFzOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6bm90ZU1hcmtlZCgpCiB7
CiAgICAgLy8gVGhpcyBpcyByYWN5IGJ5IGRlc2lnbi4gV2UgZG9uJ3Qgd2FudCB0byBwYXkgdGhl
IHByaWNlIG9mIGFuIGF0b21pYyBpbmNyZW1lbnQhCi0gICAgaW50MTZfdCBiaWFzZWRNYXJrQ291
bnQgPSBtX2JpYXNlZE1hcmtDb3VudDsKKyAgICBpbnQxNl90IGJpYXNlZE1hcmtDb3VudCA9IGZv
b3RlcigpLm1fYmlhc2VkTWFya0NvdW50OwogICAgICsrYmlhc2VkTWFya0NvdW50OwotICAgIG1f
Ymlhc2VkTWFya0NvdW50ID0gYmlhc2VkTWFya0NvdW50OworICAgIGZvb3RlcigpLm1fYmlhc2Vk
TWFya0NvdW50ID0gYmlhc2VkTWFya0NvdW50OwogICAgIGlmIChVTkxJS0VMWSghYmlhc2VkTWFy
a0NvdW50KSkKICAgICAgICAgbm90ZU1hcmtlZFNsb3coKTsKIH0KQEAgLTYxNiw3ICs2MzcsNyBA
QCBzdHJ1Y3QgTWFya2VkQmxvY2tIYXNoIDogUHRySGFzaDxKU0M6Ok1hCiAgICAgICAgIC8vIEFs
aWduZWQgVk0gcmVnaW9ucyB0ZW5kIHRvIGJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpbnRl
Z2VycywKICAgICAgICAgLy8gd2hpY2ggaXMgYSBncmVhdCBoYXNoIGZ1bmN0aW9uLCBidXQgd2Ug
aGF2ZSB0byByZW1vdmUgdGhlIGxvdyBiaXRzLAogICAgICAgICAvLyBzaW5jZSB0aGV5J3JlIGFs
d2F5cyB6ZXJvLCB3aGljaCBpcyBhIHRlcnJpYmxlIGhhc2ggZnVuY3Rpb24hCi0gICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PEpTQzo6Qml0cz4oa2V5KSAvIEpTQzo6TWFya2VkQmxvY2s6
OmJsb2NrU2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Pihr
ZXkpIC8gSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tTaXplOwogICAgIH0KIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZp
c2lvbiAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDggKzEzOCw5IEBAIEFMV0FZU19JTkxJTkUg
Ym9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjoKICAgICAvLyBpbXBhY3Qgb24gcGVyZiAtIGFyb3Vu
ZCAyJSBvbiBzcGxheSBpZiB5b3UgZ2V0IGl0IHdyb25nLgogCiAgICAgTWFya2VkQmxvY2smIGJs
b2NrID0gdGhpcy0+YmxvY2soKTsKKyAgICBNYXJrZWRCbG9jazo6Rm9vdGVyJiBmb290ZXIgPSBi
bG9jay5mb290ZXIoKTsKICAgICAKLSAgICBhdXRvIGNvdW50ID0gYmxvY2subV9sb2NrLnRyeU9w
dGltaXN0aWNGZW5jZWxlc3NSZWFkKCk7CisgICAgYXV0byBjb3VudCA9IGZvb3Rlci5tX2xvY2su
dHJ5T3B0aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKTsKICAgICBpZiAoY291bnQudmFsdWUpIHsKICAg
ICAgICAgRGVwZW5kZW5jeSBmZW5jZUJlZm9yZSA9IERlcGVuZGVuY3k6OmZlbmNlKGNvdW50Lmlu
cHV0KTsKICAgICAgICAgTWFya2VkQmxvY2s6OkhhbmRsZSogZmVuY2VkVGhpcyA9IGZlbmNlQmVm
b3JlLmNvbnN1bWUodGhpcyk7CkBAIC0xNDksMjUgKzE1MCwyNiBAQCBBTFdBWVNfSU5MSU5FIGJv
b2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6CiAgICAgICAgIEhlYXBWZXJzaW9uIG15TmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uID0gZmVuY2VkVGhpcy0+bV9uZXdseUFsbG9jYXRlZFZlcnNpb247CiAgICAg
ICAgIGlmIChteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24p
IHsKICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmVuY2VkVGhpcy0+aXNOZXdseUFsbG9jYXRl
ZChjZWxsKTsKLSAgICAgICAgICAgIGlmIChibG9jay5tX2xvY2suZmVuY2VsZXNzVmFsaWRhdGUo
Y291bnQudmFsdWUsIERlcGVuZGVuY3k6OmZlbmNlKHJlc3VsdCkpKQorICAgICAgICAgICAgaWYg
KGZvb3Rlci5tX2xvY2suZmVuY2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6
OmZlbmNlKHJlc3VsdCkpKQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAg
IH0gZWxzZSB7CiAgICAgICAgICAgICBNYXJrZWRCbG9jayYgZmVuY2VkQmxvY2sgPSAqZmVuY2VC
ZWZvcmUuY29uc3VtZSgmYmxvY2spOworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkZvb3RlciYg
ZmVuY2VkRm9vdGVyID0gZmVuY2VkQmxvY2suZm9vdGVyKCkuCiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIEhlYXBWZXJzaW9uIG15TWFya2luZ1ZlcnNpb24gPSBmZW5jZWRCbG9jay5tX21hcmtp
bmdWZXJzaW9uOworICAgICAgICAgICAgSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lvbiA9IGZl
bmNlZEZvb3Rlci5tX21hcmtpbmdWZXJzaW9uOwogICAgICAgICAgICAgaWYgKG15TWFya2luZ1Zl
cnNpb24gIT0gbWFya2luZ1ZlcnNpb24KICAgICAgICAgICAgICAgICAmJiAoIWlzTWFya2luZyB8
fCAhZmVuY2VkQmxvY2subWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobXlNYXJraW5n
VmVyc2lvbiwgbWFya2luZ1ZlcnNpb24pKSkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay5t
X2xvY2suZmVuY2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6OmZlbmNlKG15
TWFya2luZ1ZlcnNpb24pKSkKKyAgICAgICAgICAgICAgICBpZiAoZm9vdGVyLm1fbG9jay5mZW5j
ZWxlc3NWYWxpZGF0ZShjb3VudC52YWx1ZSwgRGVwZW5kZW5jeTo6ZmVuY2UobXlNYXJraW5nVmVy
c2lvbikpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmVuY2VkQmxvY2subV9tYXJr
cy5nZXQoYmxvY2suYXRvbU51bWJlcihjZWxsKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2Nr
Lm1fbG9jay5mZW5jZWxlc3NWYWxpZGF0ZShjb3VudC52YWx1ZSwgRGVwZW5kZW5jeTo6ZmVuY2Uo
cmVzdWx0KSkpCisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmZW5jZWRGb290ZXIubV9t
YXJrcy5nZXQoYmxvY2suYXRvbU51bWJlcihjZWxsKSk7CisgICAgICAgICAgICAgICAgaWYgKGZv
b3Rlci5tX2xvY2suZmVuY2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6OmZl
bmNlKHJlc3VsdCkpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAg
ICAgICAgfQogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGF1dG8gbG9ja2VyID0gaG9sZExv
Y2soYmxvY2subV9sb2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvb3Rlci5tX2xv
Y2spOwogCiAgICAgQVNTRVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAgICAgCkBAIC0xODIsNyArMTg0
LDcgQEAgQUxXQVlTX0lOTElORSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OgogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIH0KICAgICAKLSAgICByZXR1cm4gYmxvY2subV9tYXJrcy5n
ZXQoYmxvY2suYXRvbU51bWJlcihjZWxsKSk7CisgICAgcmV0dXJuIGZvb3Rlci5tX21hcmtzLmdl
dChibG9jay5hdG9tTnVtYmVyKGNlbGwpKTsKIH0KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6
OkhhbmRsZTo6aXNMaXZlQ2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNp
b24gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCogcCkK
QEAgLTI0MCw2ICsyNDIsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVk
U3dlCiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCiAg
ICAgTWFya2VkQmxvY2smIGJsb2NrID0gdGhpcy0+YmxvY2soKTsKKyAgICBNYXJrZWRCbG9jazo6
Rm9vdGVyJiBmb290ZXIgPSBibG9jay5mb290ZXIoKTsKICAgICAKICAgICBpZiAoZmFsc2UpCiAg
ICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIi8iLCBSYXdQb2ludGVyKCZibG9jayks
ICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAhXG4iKTsKQEAgLTI2Miwx
MiArMjY1LDEyIEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAg
ICAgICAgJiYgbmV3bHlBbGxvY2F0ZWRNb2RlID09IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQp
IHsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgYW4gaW5jcmVkaWJseSBwb3dlcmZ1bCBh
c3NlcnRpb24gdGhhdCBjaGVja3MgdGhlIHNhbml0eSBvZiBvdXIgYmxvY2sgYml0cy4KLSAgICAg
ICAgaWYgKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYmICFibG9jay5tX21hcmtzLmlzRW1w
dHkoKSkgeworICAgICAgICBpZiAobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgIWZvb3Rl
ci5tX21hcmtzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgV1RGOjpkYXRhRmlsZSgpLmF0b21p
Y2FsbHkoCiAgICAgICAgICAgICAgICAgWyZdIChQcmludFN0cmVhbSYgb3V0KSB7CiAgICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2sgIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiOiBt
YXJrcyBub3QgZW1wdHkhXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJCbG9j
ayBsb2NrIGlzIGhlbGQ6ICIsIGJsb2NrLm1fbG9jay5pc0hlbGQoKSwgIlxuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIG91dC5wcmludCgiTWFya2luZyB2ZXJzaW9uIG9mIGJsb2NrOiAiLCBibG9j
ay5tX21hcmtpbmdWZXJzaW9uLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50
KCJCbG9jayBsb2NrIGlzIGhlbGQ6ICIsIGZvb3Rlci5tX2xvY2suaXNIZWxkKCksICJcbiIpOwor
ICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk1hcmtpbmcgdmVyc2lvbiBvZiBibG9jazog
IiwgZm9vdGVyLm1fbWFya2luZ1ZlcnNpb24sICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBv
dXQucHJpbnQoIk1hcmtpbmcgdmVyc2lvbiBvZiBoZWFwOiAiLCBzcGFjZSgpLT5tYXJraW5nVmVy
c2lvbigpLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRG
T1JNKCk7CiAgICAgICAgICAgICAgICAgfSk7CkBAIC0yNzYsMTIgKzI3OSwxMiBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZM
YXN0Q2VsbCA9IHN0YXRpY19jYXN0PGNoYXIqPihjZWxsQWxpZ24oYmxvY2suYXRvbXMoKSArIG1f
ZW5kQXRvbSAtIDEpKTsKICAgICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2Vs
bCArIGNlbGxTaXplOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkRW5kIC0gTWFya2Vk
QmxvY2s6OmJsb2NrU2l6ZSA8PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZibG9jaykpOwotICAgICAg
ICBjaGFyKiBwYXlsb2FkQmVnaW4gPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGJsb2NrLmF0b21zKCkg
KyBmaXJzdEF0b20oKSk7CisgICAgICAgIGNoYXIqIHBheWxvYWRCZWdpbiA9IGJpdHdpc2VfY2Fz
dDxjaGFyKj4oYmxvY2suYXRvbXMoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc3dlZXBNb2Rl
ID09IFN3ZWVwVG9GcmVlTGlzdCkKICAgICAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwogICAg
ICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCi0gICAgICAgICAgICBibG9jay5tX2xvY2su
dW5sb2NrKCk7CisgICAgICAgICAgICBmb290ZXIubV9sb2NrLnVubG9jaygpOwogICAgICAgICBp
ZiAoZGVzdHJ1Y3Rpb25Nb2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykgewogICAgICAgICAg
ICAgZm9yIChjaGFyKiBjZWxsID0gcGF5bG9hZEJlZ2luOyBjZWxsIDwgcGF5bG9hZEVuZDsgY2Vs
bCArPSBjZWxsU2l6ZSkKICAgICAgICAgICAgICAgICBkZXN0cm95KGNlbGwpOwpAQCAtMzIwLDkg
KzMyMyw5IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAg
ICAgICAgICsrY291bnQ7CiAgICAgICAgIH0KICAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSBm
aXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAg
ICAgICAgIGlmIChlbXB0eU1vZGUgPT0gTm90RW1wdHkKLSAgICAgICAgICAgICYmICgobWFya3NN
b2RlID09IE1hcmtzTm90U3RhbGUgJiYgYmxvY2subV9tYXJrcy5nZXQoaSkpCisgICAgICAgICAg
ICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYmIGZvb3Rlci5tX21hcmtzLmdldChp
KSkKICAgICAgICAgICAgICAgICB8fCAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxs
b2NhdGVkICYmIG1fbmV3bHlBbGxvY2F0ZWQuZ2V0KGkpKSkpIHsKICAgICAgICAgICAgIGlzRW1w
dHkgPSBmYWxzZTsKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzQwLDcgKzM0Myw3IEBAIHZv
aWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgbV9uZXdseUFs
bG9jYXRlZFZlcnNpb24gPSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb247CiAgICAgCiAgICAgaWYg
KHNwYWNlKCktPmlzTWFya2luZygpKQotICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7Cisg
ICAgICAgIGZvb3Rlci5tX2xvY2sudW5sb2NrKCk7CiAgICAgCiAgICAgaWYgKGRlc3RydWN0aW9u
TW9kZSA9PSBCbG9ja0hhc0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKSB7CiAgICAg
ICAgIGZvciAoc2l6ZV90IGkgOiBkZWFkQ2VsbHMpCkBAIC00OTIsNyArNDk1LDcgQEAgaW5saW5l
IEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRCbG9jazo6SGFuZAogICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODAzMTUKICAgICAKICAgICBIZWFwQ2VsbDo6S2lu
ZCBraW5kID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJz
dEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAg
ICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9i
bG9jay0+YXRvbXMoKVtpXSk7CiAgICAgICAgIGlmICghaXNMaXZlKGNlbGwpKQogICAgICAgICAg
ICAgY29udGludWU7CkBAIC01MDcsNyArNTEwLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0
b3I+CiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hE
ZWFkQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIEhlYXBDZWxsOjpLaW5kIGtp
bmQgPSBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRv
bSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAgICAg
SGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Jsb2Nr
LT5hdG9tcygpW2ldKTsKICAgICAgICAgaWYgKGlzTGl2ZShjZWxsKSkKICAgICAgICAgICAgIGNv
bnRpbnVlOwpAQCAtNTI3LDggKzUzMCw4IEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2Vk
QmxvY2s6OkhhbmQKICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICBpZiAoYXJlTWFya3NT
dGFsZSkKICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgZm9y
IChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJD
ZWxsKSB7Ci0gICAgICAgIGlmICghYmxvY2subV9tYXJrcy5nZXQoaSkpCisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAg
aWYgKCFibG9jay5mb290ZXIoKS5tX21hcmtzLmdldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENl
bGwqPigmbV9ibG9jay0+YXRvbXMoKVtpXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9NYXJrZWRTcGFjZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkU3BhY2UuY3BwCShyZXZpc2lvbiAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsx
MzUsNiBAQCBjb25zdCBWZWN0b3I8c2l6ZV90PiYgc2l6ZUNsYXNzZXMoKQogICAgICAgICAgICAg
Ly8gRklYTUU6IEFsbCBvZiB0aGVzZSB0aGluZ3Mgc2hvdWxkIGhhdmUgSXNvU3Vic3BhY2VzLgog
ICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
OTg3NgogICAgICAgICAgICAgYWRkKHNpemVvZihVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSk7
Ci0gICAgICAgICAgICBhZGQoc2l6ZW9mKEZ1bmN0aW9uQ29kZUJsb2NrKSk7CiAgICAgICAgICAg
ICBhZGQoc2l6ZW9mKEpTU3RyaW5nKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEpTRnVuY3Rp
b24pKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShy
ZXZpc2lvbiAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCwyNSArNTAsMjUgQEAgY2xhc3MgTWFya2VkU3BhY2Ug
ewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKE1hcmtlZFNwYWNlKTsKIHB1YmxpYzoKICAgICAv
LyBzaXplU3RlcCBpcyByZWFsbHkgYSBzeW5vbnltIGZvciBhdG9tU2l6ZTsgaXQncyBubyBhY2Np
ZGVudCB0aGF0IHRoZXkgYXJlIHRoZSBzYW1lLgotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6
ZVN0ZXAgPSBNYXJrZWRCbG9jazo6YXRvbVNpemU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3Qgc2l6ZVN0ZXAgPSBNYXJrZWRCbG9jazo6YXRvbVNpemU7CiAgICAgCiAgICAgLy8gU2l6ZXMg
dXAgdG8gdGhpcyBhbW91bnQgZ2V0IGEgc2l6ZSBjbGFzcyBmb3IgZWFjaCBzaXplIHN0ZXAuCi0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBwcmVjaXNlQ3V0b2ZmID0gODA7CisgICAgc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgcHJlY2lzZUN1dG9mZiA9IDgwOwogICAgIAotICAgIC8vIFRoZSBhbW91
bnQgb2YgYXZhaWxhYmxlIHBheWxvYWQgaW4gYSBibG9jayBpcyB0aGUgYmxvY2sncyBzaXplIG1p
bnVzIHRoZSBoZWFkZXIuIEJ1dCB0aGUKKyAgICAvLyBUaGUgYW1vdW50IG9mIGF2YWlsYWJsZSBw
YXlsb2FkIGluIGEgYmxvY2sgaXMgdGhlIGJsb2NrJ3Mgc2l6ZSBtaW51cyB0aGUgZm9vdGVyLiBC
dXQgdGhlCiAgICAgLy8gaGVhZGVyIHNpemUgbWlnaHQgbm90IGJlIGF0b20gc2l6ZSBhbGlnbmVk
LCBzbyB3ZSByb3VuZCBkb3duIHRoZSByZXN1bHQgYWNjb3JkaW5nbHkuCi0gICAgc3RhdGljIGNv
bnN0IHNpemVfdCBibG9ja1BheWxvYWQgPSAoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAtIHNpemVv
ZihNYXJrZWRCbG9jaykpICYgfihNYXJrZWRCbG9jazo6YXRvbVNpemUgLSAxKTsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBibG9ja1BheWxvYWQgPSAoTWFya2VkQmxvY2s6OmJsb2NrU2l6
ZSAtIHNpemVvZihNYXJrZWRCbG9jazo6Rm9vdGVyKSkgJiB+KE1hcmtlZEJsb2NrOjphdG9tU2l6
ZSAtIDEpOwogICAgIAogICAgIC8vIFRoZSBsYXJnZXN0IGNlbGwgd2UncmUgd2lsbGluZyB0byBh
bGxvY2F0ZSBpbiBhIE1hcmtlZEJsb2NrIHRoZSAibm9ybWFsIHdheSIgKGkuZS4gdXNpbmcgc2l6
ZQogICAgIC8vIGNsYXNzZXMsIHJhdGhlciB0aGFuIGEgbGFyZ2UgYWxsb2NhdGlvbikgaXMgaGFs
ZiB0aGUgc2l6ZSBvZiB0aGUgcGF5bG9hZCwgcm91bmRlZCBkb3duLiBUaGlzCiAgICAgLy8gZW5z
dXJlcyB0aGF0IHdlIG9ubHkgdXNlIHRoZSBzaXplIGNsYXNzIGFwcHJvYWNoIGlmIGl0IG1lYW5z
IGJlaW5nIGFibGUgdG8gcGFjayB0d28gdGhpbmdzCiAgICAgLy8gaW50byBvbmUgYmxvY2suCi0g
ICAgc3RhdGljIGNvbnN0IHNpemVfdCBsYXJnZUN1dG9mZiA9IChibG9ja1BheWxvYWQgLyAyKSAm
IH4oc2l6ZVN0ZXAgLSAxKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBsYXJnZUN1dG9m
ZiA9IChibG9ja1BheWxvYWQgLyAyKSAmIH4oc2l6ZVN0ZXAgLSAxKTsKIAotICAgIHN0YXRpYyBj
b25zdCBzaXplX3QgbnVtU2l6ZUNsYXNzZXMgPSBsYXJnZUN1dG9mZiAvIHNpemVTdGVwOworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IG51bVNpemVDbGFzc2VzID0gbGFyZ2VDdXRvZmYgLyBz
aXplU3RlcDsKICAgICAKLSAgICBzdGF0aWMgY29uc3QgSGVhcFZlcnNpb24gbnVsbFZlcnNpb24g
PSAwOyAvLyBUaGUgdmVyc2lvbiBvZiBmcmVzaGx5IGFsbG9jYXRlZCBibG9ja3MuCi0gICAgc3Rh
dGljIGNvbnN0IEhlYXBWZXJzaW9uIGluaXRpYWxWZXJzaW9uID0gMjsgLy8gVGhlIHZlcnNpb24g
dGhhdCB0aGUgaGVhcCBzdGFydHMgb3V0IHdpdGguIFNldCB0byBtYWtlIHN1cmUgdGhhdCBuZXh0
VmVyc2lvbihudWxsVmVyc2lvbikgIT0gaW5pdGlhbFZlcnNpb24uCisgICAgc3RhdGljIGNvbnN0
ZXhwciBIZWFwVmVyc2lvbiBudWxsVmVyc2lvbiA9IDA7IC8vIFRoZSB2ZXJzaW9uIG9mIGZyZXNo
bHkgYWxsb2NhdGVkIGJsb2Nrcy4KKyAgICBzdGF0aWMgY29uc3RleHByIEhlYXBWZXJzaW9uIGlu
aXRpYWxWZXJzaW9uID0gMjsgLy8gVGhlIHZlcnNpb24gdGhhdCB0aGUgaGVhcCBzdGFydHMgb3V0
IHdpdGguIFNldCB0byBtYWtlIHN1cmUgdGhhdCBuZXh0VmVyc2lvbihudWxsVmVyc2lvbikgIT0g
aW5pdGlhbFZlcnNpb24uCiAgICAgCiAgICAgc3RhdGljIEhlYXBWZXJzaW9uIG5leHRWZXJzaW9u
KEhlYXBWZXJzaW9uIHZlcnNpb24pCiAgICAgewo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332482</attachid>
            <date>2018-01-27 13:16:52 -0800</date>
            <delta_ts>2018-01-27 14:09:41 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>49859</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwOCBA
QAorMjAxOC0wMS0yNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IE1hcmtlZEJsb2NrIHNob3VsZCBoYXZlIGEgZm9vdGVyIGluc3RlYWQgb2YgYSBoZWFkZXIKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MjIxNworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgU3Bl
Y3RyZSBhbGxvd3Mgc3RydWN0dXJlIGNoZWNrcyB0byBiZSBieXBhc3NlZCwgYmVjYXVzZSBzdHJ1
Y3R1cmUgY2hlY2tzIGFyZSBkb25lIHVzaW5nCisgICAgICAgIGJyYW5jaGVzLiBTdHJ1Y3R1cmUg
Y2hlY2tzIGFyZSBzdXBlciBjb21tb24uIFdlIGRvbid0IHdhbnQgdG8gaHVydCB0aGVpciBwZXJm
b3JtYW5jZS4gQWxzbywKKyAgICAgICAgdGhlIGNvZGUgZ2VuZXJhdGlvbiBmb3Igc3RydWN0dXJl
IGNoZWNrcyBpcyBpbnNhbmVseSBjb21wbGljYXRlZCwgd2l0aCBib3RoIERGRyBhbmQgRlRMCisg
ICAgICAgIGhhdmluZyBtdWx0aXBsZSB3YXlzIG9mIGVtaXR0aW5nIHN0cnVjdHVyZSBjaGVja3Mg
YW5kIHRoZSBvcGVyYXRpb25zIHRoYXQgcmVseSBvbiB0aGVtLiBBbnkKKyAgICAgICAgcGxhbiB0
aGF0IHJlcXVpcmVkIGNoYW5naW5nIHN0cnVjdHVyZSBjaGVja3Mgd291bGQgYmUgdmVyeSB0aW1l
IGNvbnN1bWluZyB0byBpbXBsZW1lbnQgYW5kCisgICAgICAgIHJpc2t5LiBBbmQgaXQgd291bGQg
cHJvYmFibHkgYmUgYSBodWdlIHBlcmZvcm1hbmNlIHJlZ3Jlc3Npb24uCisgICAgICAgIAorICAg
ICAgICBTbywgd2Ugd2VudCBzZWFyY2hpbmcgZm9yIGEgcGxhbiB0aGF0IHdvdWxkIG5vdCByZXF1
aXJlIHVzIHRvIGNoYW5nZSB0aGUgY29kZSBnZW5lcmF0aW9uIG9mCisgICAgICAgIHN0cnVjdHVy
ZSBjaGVja3MuCisgICAgICAgIAorICAgICAgICBMZXQncyBjb25zaWRlciB3aGF0IGlzIHRoZSB3
b3JzdCB0aGF0IGNvdWxkIGhhcHBlbiBpZiB3ZSBibG93IHBhc3QgYSBzdHJ1Y3R1cmUgY2hlY2sg
ZHVyaW5nIGEKKyAgICAgICAgc3BlY3VsYXRpdmUgZXhlY3V0aW9uIHRoYXQgd2lsbCBiZSByb2xs
ZWQgYmFjayBldmVudHVhbGx5LiBXZSBjb3VsZCByZWFkIGFuZCB3cml0ZSBvdmVyIGFueQorICAg
ICAgICBmaWVsZCBpbiBhbnkgY2VsbCB0aGF0IGNvdWxkIGJlIGRpcmVjdGx5IHJlZmVyZW5jZWQg
YnkgYSBKU1ZhbHVlIChsZXQncyBjYWxsIHRoZW0gdmFsdWUKKyAgICAgICAgY2VsbHM7IHRoZXkg
YXJlIHN0cmluZ3MsIHN5bWJvbHMsIGFuZCBvYmplY3RzKS4gQnV0IHdlIGNhbiBvbmx5IHJlYWQg
b3Igd3JpdGUgSlMgdmFsdWVzLgorICAgICAgICBQb2lzb25pbmcgbWVhbnMgdGhhdCByZWFkaW5n
IG9yIHdyaXRpbmcgSlMgdmFsdWVzIGFueXdoZXJlIGluIGEgdmFsdWUgY2VsbCB3b24ndCBiZQor
ICAgICAgICBwcm9maXRhYmxlIHNpbmNlIHBvaXNvbmVkIHBvaW50ZXJzIGFyZSBub3QgZGVyZWZl
cmVuY2FibGUgdmlhIHZhbHVlIGNlbGwgZGVyZWZlcmVuY2UuIFNvLCBpZgorICAgICAgICBhbGwg
b3RoZXIgdGhpbmdzIGFyZSB0YWtlbiBjYXJlIG9mIHVzaW5nIHBvaXNvbmluZywgdGhlIGZhY3Qg
dGhhdCB0aGUgc3RydWN0dXJlLWNoZWNrLWd1YXJkZWQKKyAgICAgICAgaW5saW5lIHByb3BlcnR5
IGFjY2VzcyBmYXN0IHBhdGggaXMgbm90IFNwZWN0cmUtc2FmZSBqdXN0IG1lYW5zIHRoYXQgeW91
IGNvdWxkOgorICAgICAgICAKKyAgICAgICAgLSBsZWFrIGluZm9ybWF0aW9uIGZyb20gYWRqYWNl
bnQgb2JqZWN0cywgb3IKKyAgICAgICAgLSBmaW5kIGFuIGFkamFjZW50IG9iamVjdCB3aXRoIFNw
ZWN0cmUtdW5zYWZlIHBheWxvYWQgKHVucG9pc29uZWQgcG9pbnRlcnMsIHJhdyBpbnRzLCBldGMp
LgorICAgICAgICAKKyAgICAgICAgUHV0dGluZyBzb21lIGRpc3RhbmNlIGJldHdlZW4gb2JqZWN0
cyBpcyBvdXIgd2F5IG9mIG1pdGlnYXRpbmcgdGhhdCBzcGVjaWZpYyBwcm9ibGVtLiBXZSBhcmUK
KyAgICAgICAgZG9pbmcgdGhpcyBieSB1c2luZyBUTENzIChhbHJlYWR5IGxhbmRlZCBpbiByMjI3
NjE3KSB0byBhbGxvdyB1cyB0byBhbGxvY2F0ZSBvYmplY3RzIHRoYXQKKyAgICAgICAgc2hvdWxk
IGJlIGZhciBmcm9tIGVhY2ggb3RoZXIgaW4gZGlmZmVyZW50IE1hcmtlZEJsb2Nrcy4gQnV0IHRv
IG1ha2UgdGhhdCBhbiBlZmZlY3RpdmUKKyAgICAgICAgcHJvdGVjdGlvbiBmb3IgcG9zaXRpdmUg
b2Zmc2V0IGlubGluZSBhY2Nlc3Nlcywgd2UgbmVlZCB0byBoYXZlIHBhZGRpbmcgYXQgdGhlIGVu
ZCBvZiBibG9ja3MuCisgICAgICAgIFRoZSBwZXJmZWN0IGtpbmQgb2YgcGFkZGluZyBpcyB0aGUg
YmxvY2sncyBoZWFkZXIuCisgICAgICAgIAorICAgICAgICBTbywgdGhpcyBtb3ZlcyB0aGUgYmxv
Y2sncyBoZWFkZXIgdG8gdGhlIGZvb3RlciEKKyAgICAgICAgCisgICAgICAgIFRoaXMgZG9lc24n
dCByZWFsbHkgY2hhbmdlIGFueXRoaW5nIGV4Y2VwdCBmb3Igc29tZSBjb21waWxlLXRpbWUgY29u
c3RhbnRzLCBzbyBpdCBzaG91bGQgbm90CisgICAgICAgIGFmZmVjdCBwZXJmb3JtYW5jZS4KKwor
ICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuY3BwOgorICAgICAgICAoSlNDOjpibG9ja0hl
YWRlclNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCbG9ja0RpcmVjdG9yeTo6YmxvY2tT
aXplRm9yQnl0ZXMpOiBEZWxldGVkLgorICAgICAgICAqIGhlYXAvQmxvY2tEaXJlY3RvcnkuaDoK
KyAgICAgICAgKiBoZWFwL0hlYXBVdGlsLmg6CisgICAgICAgIChKU0M6OkhlYXBVdGlsOjpmaW5k
R0NPYmplY3RQb2ludGVyc0Zvck1hcmtpbmcpOgorICAgICAgICAqIGhlYXAvTWFya2VkQmxvY2su
Y3BwOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6TWFya2VkQmxvY2spOgorICAgICAgICAo
SlNDOjpNYXJrZWRCbG9jazo6fk1hcmtlZEJsb2NrKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxv
Y2s6OkZvb3Rlcjo6Rm9vdGVyKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkZvb3Rlcjo6
fkZvb3Rlcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0
aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmlu
YWxpemUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0
aW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpyZXNldE1hcmtzKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OmFzc2VydE1hcmtzTm90U3RhbGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
bWFya0NvdW50KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNsZWFySGFzQW55TWFya2Vk
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQWRkVG9EaXJlY3Rvcnkp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRSZW1vdmVGcm9tRGlyZWN0
b3J5KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXApOgorICAgICAg
ICAqIGhlYXAvTWFya2VkQmxvY2suaDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om1hcmtp
bmdWZXJzaW9uIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmxvY2spOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6c3Vic3BhY2UgY29uc3QpOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6Zm9vdGVyKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmZvb3RlciBj
b25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpoYW5kbGUpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6aGFuZGxlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6YmxvY2tGb290ZXIpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNBdG9t
QWxpZ25lZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmNlbGxBbGlnbik6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpibG9ja0Zvcik6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjp2bSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp3ZWFrU2V0
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmNlbGxTaXplKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmF0dHJpYnV0ZXMgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9j
azo6YXRvbU51bWJlcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphcmVNYXJrc1N0YWxl
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OmlzTWFya2VkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnRlc3RBbmRTZXRNYXJrZWQp
OgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6bWFya3MgY29uc3QpOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6aXNBdG9tKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRs
ZTo6Zm9yRWFjaENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aGFzQW55TWFya2Vk
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om5vdGVNYXJrZWQpOgorICAgICAg
ICAoV1RGOjpNYXJrZWRCbG9ja0hhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9j
azo6Zmlyc3RBdG9tKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrSW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZlbmVzc0R1cmlu
Z01hcmtpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjppc0xpdmUpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaExpdmVDZWxsKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaERlYWRDZWxsKToKKyAgICAgICAg
KEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaE1hcmtlZENlbGwpOgorICAgICAgICAq
IGhlYXAvTWFya2VkU3BhY2UuY3BwOgorICAgICAgICAqIGhlYXAvTWFya2VkU3BhY2UuaDoKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAgICAgICAgKiBsbGludC9M
b3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc206CisKIDIwMTgtMDEtMjcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+CiAKICAgICAgICAgREZHIHN0cmVuZ3RoIHJlZHVjdGlvbiBmYWlscyB0byBj
b252ZXJ0IE51bWJlclRvU3RyaW5nV2l0aFZhbGlkUmFkaXhDb25zdGFudCBmb3IgMCB0byBjb25z
dGFudCAnMCcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVj
dG9yeS5jcHAJKHJldmlzaW9uIDIyNzcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0Jsb2NrRGlyZWN0b3J5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTAsMTkgKzkwLDYgQEAgTWFy
a2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rvcnk6OmZpbgogICAgIHJldHVybiBtX2Jsb2Nr
c1ttX2FsbG9jYXRpb25DdXJzb3JdOwogfQogCi1zdGF0aWMgc2l6ZV90IGJsb2NrSGVhZGVyU2l6
ZSgpCi17Ci0gICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJrZWRCbG9jazo6
YXRvbVNpemU+KHNpemVvZihNYXJrZWRCbG9jaykpOwotfQotCi1zaXplX3QgQmxvY2tEaXJlY3Rv
cnk6OmJsb2NrU2l6ZUZvckJ5dGVzKHNpemVfdCBieXRlcykKLXsKLSAgICBzaXplX3QgbWluQmxv
Y2tTaXplID0gTWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKLSAgICBzaXplX3QgbWluQWxsb2NhdGlv
blNpemUgPSBibG9ja0hlYWRlclNpemUoKSArIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxNYXJr
ZWRCbG9jazo6YXRvbVNpemU+KGJ5dGVzKTsKLSAgICBtaW5BbGxvY2F0aW9uU2l6ZSA9IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihXVEY6OnBhZ2VTaXplKCksIG1pbkFsbG9jYXRpb25TaXplKTsK
LSAgICByZXR1cm4gc3RkOjptYXgobWluQmxvY2tTaXplLCBtaW5BbGxvY2F0aW9uU2l6ZSk7Ci19
Ci0KIE1hcmtlZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5Ojp0cnlBbGxvY2F0ZUJsb2Nr
KCkKIHsKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmgJKHJldmlz
aW9uIDIyNzcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTExMyw4ICsxMTMsNiBAQCBwdWJsaWM6CiAKICAgICBib29s
IGlzUGFnZWRPdXQoZG91YmxlIGRlYWRsaW5lKTsKICAgICAKLSAgICBzdGF0aWMgc2l6ZV90IGJs
b2NrU2l6ZUZvckJ5dGVzKHNpemVfdCk7Ci0gICAgCiAgICAgTG9jayYgYml0dmVjdG9yTG9jaygp
IHsgcmV0dXJuIG1fYml0dmVjdG9yTG9jazsgfQogCiAjZGVmaW5lIEJMT0NLX0RJUkVDVE9SWV9C
SVRfQUNDRVNTT1JTKGxvd2VyQml0TmFtZSwgY2FwaXRhbEJpdE5hbWUpICAgICBcCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgJKHJldmlzaW9uIDIyNzcxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE4IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMTI0LDcg
KzEyNCw3IEBAIHB1YmxpYzoKICAgICAKICAgICAgICAgLy8gQWxzbywgYSBidXR0ZXJmbHkgY291
bGQgcG9pbnQgYXQgdGhlIGVuZCBvZiBhbiBvYmplY3QgcGx1cyBzaXplb2YoSW5kZXhpbmdIZWFk
ZXIpLiBJbiB0aGF0CiAgICAgICAgIC8vIGNhc2UsIHRoaXMgaXMgcG9pbnRpbmcgdG8gdGhlIG9i
amVjdCB0byB0aGUgcmlnaHQgb2YgdGhlIG9uZSB3ZSBzaG91bGQgYmUgbWFya2luZy4KLSAgICAg
ICAgaWYgKGNhbmRpZGF0ZS0+YXRvbU51bWJlcihhbGlnbmVkUG9pbnRlcikgPiBNYXJrZWRCbG9j
azo6Zmlyc3RBdG9tKCkKKyAgICAgICAgaWYgKGNhbmRpZGF0ZS0+YXRvbU51bWJlcihhbGlnbmVk
UG9pbnRlcikgPiAwCiAgICAgICAgICAgICAmJiBwb2ludGVyIDw9IGFsaWduZWRQb2ludGVyICsg
c2l6ZW9mKEluZGV4aW5nSGVhZGVyKSkKICAgICAgICAgICAgIHRyeVBvaW50ZXIoYWxpZ25lZFBv
aW50ZXIgLSBjYW5kaWRhdGUtPmNlbGxTaXplKCkpOwogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHJldmlzaW9uIDIyNzcxNikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODYsMTIgKzg2LDI2IEBAIE1hcmtlZEJsb2NrOjpIYW5kbGU6On5IYW5kbGUoKQogfQogCiBN
YXJrZWRCbG9jazo6TWFya2VkQmxvY2soVk0mIHZtLCBIYW5kbGUmIGhhbmRsZSkKK3sKKyAgICBu
ZXcgKCZmb290ZXIoKSkgRm9vdGVyKHZtLCBoYW5kbGUpOworICAgIGlmIChmYWxzZSkKKyAgICAg
ICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKK30KKworTWFy
a2VkQmxvY2s6On5NYXJrZWRCbG9jaygpCit7CisgICAgZm9vdGVyKCkufkZvb3RlcigpOworfQor
CitNYXJrZWRCbG9jazo6Rm9vdGVyOjpGb290ZXIoVk0mIHZtLCBIYW5kbGUmIGhhbmRsZSkKICAg
ICA6IG1faGFuZGxlKGhhbmRsZSkKICAgICAsIG1fdm0oJnZtKQogICAgICwgbV9tYXJraW5nVmVy
c2lvbihNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb24pCiB7Ci0gICAgaWYgKGZhbHNlKQotICAgICAg
ICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IEFsbG9jYXRlZC5cbiIpOworfQorCitNYXJr
ZWRCbG9jazo6Rm9vdGVyOjp+Rm9vdGVyKCkKK3sKIH0KIAogdm9pZCBNYXJrZWRCbG9jazo6SGFu
ZGxlOjp1bnN3ZWVwV2l0aE5vTmV3bHlBbGxvY2F0ZWQoKQpAQCAtMTA4LDcgKzEyMiw3IEBAIHZv
aWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2V0SXNGcmVlTGlzdGUKIAogdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpzdG9wQWxsb2NhdGluZyhjb25zdCBGcmVlTGlzdCYgZnJlZUxpc3QpCiB7Ci0g
ICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9jaygpLm1fbG9jayk7CisgICAgYXV0byBsb2Nr
ZXIgPSBob2xkTG9jayhibG9ja0Zvb3RlcigpLm1fbG9jayk7CiAgICAgCiAgICAgaWYgKGZhbHNl
KQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnN0b3BBbGxvY2F0aW5nIVxuIik7CkBAIC0xNTUsOSArMTY5LDkgQEAgdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaQogewogICAgIGRpcmVjdG9yeSgpLT5zZXRJc0Fs
bG9jYXRlZChOb0xvY2tpbmdOZWNlc3NhcnksIHRoaXMsIGZhbHNlKTsKICAgICBkaXJlY3Rvcnko
KS0+c2V0SXNEZXN0cnVjdGlibGUoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCB0cnVlKTsKLSAg
ICBtX2Jsb2NrLT5tX21hcmtzLmNsZWFyQWxsKCk7Ci0gICAgbV9ibG9jay0+Y2xlYXJIYXNBbnlN
YXJrZWQoKTsKLSAgICBtX2Jsb2NrLT5tX21hcmtpbmdWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RT
cGFjZSgpLm1hcmtpbmdWZXJzaW9uKCk7CisgICAgYmxvY2tGb290ZXIoKS5tX21hcmtzLmNsZWFy
QWxsKCk7CisgICAgYmxvY2soKS5jbGVhckhhc0FueU1hcmtlZCgpOworICAgIGJsb2NrRm9vdGVy
KCkubV9tYXJraW5nVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3BhY2UoKS5tYXJraW5nVmVyc2lv
bigpOwogICAgIG1fd2Vha1NldC5sYXN0Q2hhbmNlVG9GaW5hbGl6ZSgpOwogICAgIG1fbmV3bHlB
bGxvY2F0ZWQuY2xlYXJBbGwoKTsKICAgICBtX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGhlYXAo
KS0+b2JqZWN0U3BhY2UoKS5uZXdseUFsbG9jYXRlZFZlcnNpb24oKTsKQEAgLTE2Nyw3ICsxODEs
NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcoRnJlZUxpc3QmIGZyZWVMaXN0KQogewog
ICAgIHsKLSAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9jaygpLm1fbG9jayk7Cisg
ICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2tGb290ZXIoKS5tX2xvY2spOwogICAg
ICAgICAKICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVy
KHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nIVxuIik7CkBA
IC0yMDAsNyArMjE0LDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjp6YXAoY29uc3QgRnJl
ZQogdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKQogewogICAgIEFTU0VSVCh2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkuaXNNYXJraW5n
KCkpOwotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2sobV9sb2NrKTsKKyAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGZvb3RlcigpLm1fbG9jayk7CiAgICAgCiAgICAgaWYgKCFhcmVNYXJrc1N0
YWxlKG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjE3LDcgKzIzMSw3IEBA
IHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAgICAgLy8gZGF0
ZSB2ZXJzaW9uISBJZiBpdCBkb2VzLCB0aGVuIHdlIHdhbnQgdG8gbGVhdmUgdGhlIG5ld2x5QWxs
b2NhdGVkIGFsb25lLCBzaW5jZSB0aGF0CiAgICAgICAgIC8vIG1lYW5zIHRoYXQgd2UgaGFkIGFs
bG9jYXRlZCBpbiB0aGlzIHByZXZpb3VzbHkgZW1wdHkgYmxvY2sgYnV0IGRpZCBub3QgZmlsbCBp
dCB1cCwgc28KICAgICAgICAgLy8gd2UgY3JlYXRlZCBhIG5ld2x5QWxsb2NhdGVkLgotICAgICAg
ICBtX21hcmtzLmNsZWFyQWxsKCk7CisgICAgICAgIGZvb3RlcigpLm1fbWFya3MuY2xlYXJBbGwo
KTsKICAgICB9IGVsc2UgewogICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KFJhd1BvaW50ZXIodGhpcyksICI6IERvaW5nIHRoaW5ncy5cbiIpOwpAQCAtMjMwLDE2ICsyNDQs
MTYgQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhlYXBWZQogICAgICAgICAg
ICAgLy8gY2Fubm90IGJlIGxhc3RDaGFuY2VUb0ZpbmFsaXplLiBTbyBpdCBtdXN0IGJlIHN0b3BB
bGxvY2F0aW5nLiBUaGF0IG1lYW5zIHRoYXQgd2UganVzdAogICAgICAgICAgICAgLy8gY29tcHV0
ZWQgdGhlIG5ld2x5QWxsb2NhdGVkIGJpdHMganVzdCBiZWZvcmUgdGhlIHN0YXJ0IG9mIGFuIGlu
Y3JlbWVudC4gV2hlbiB3ZSBhcmUgaW4gdGhhdAogICAgICAgICAgICAgLy8gbW9kZSwgaXQgc2Vl
bXMgYXMgaWYgbmV3bHlBbGxvY2F0ZWQgc2hvdWxkIHN1YnN1bWUgbWFya3MuCi0gICAgICAgICAg
ICBBU1NFUlQoaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zdWJzdW1lcyhtX21hcmtzKSk7Ci0g
ICAgICAgICAgICBtX21hcmtzLmNsZWFyQWxsKCk7CisgICAgICAgICAgICBBU1NFUlQoaGFuZGxl
KCkubV9uZXdseUFsbG9jYXRlZC5zdWJzdW1lcyhmb290ZXIoKS5tX21hcmtzKSk7CisgICAgICAg
ICAgICBmb290ZXIoKS5tX21hcmtzLmNsZWFyQWxsKCk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICBoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVkLnNldEFuZENsZWFyKG1fbWFya3MpOwor
ICAgICAgICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zZXRBbmRDbGVhcihmb290ZXIo
KS5tX21hcmtzKTsKICAgICAgICAgICAgIGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9u
ID0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwogICAgICAgICB9CiAgICAgfQogICAgIGNsZWFySGFz
QW55TWFya2VkKCk7CiAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKLSAgICBtX21hcmtpbmdW
ZXJzaW9uID0gbWFya2luZ1ZlcnNpb247CisgICAgZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiA9
IG1hcmtpbmdWZXJzaW9uOwogICAgIAogICAgIC8vIFRoaXMgbWVhbnMgd2UncmUgdGhlIGZpcnN0
IG9uZXMgdG8gbWFyayBhbnkgb2JqZWN0IGluIHRoaXMgYmxvY2suCiAgICAgZGlyZWN0b3J5LT5z
ZXRJc01hcmtpbmdOb3RFbXB0eShob2xkTG9jayhkaXJlY3RvcnktPmJpdHZlY3RvckxvY2soKSks
ICZoYW5kbGUoKSwgdHJ1ZSk7CkBAIC0yNjAsMTQgKzI3NCwxNCBAQCB2b2lkIE1hcmtlZEJsb2Nr
OjpyZXNldE1hcmtzKCkKICAgICAvLyB2ZXJzaW9uIGlzIG51bGwsIGFib3V0VG9NYXJrU2xvdygp
IHdpbGwgYXNzdW1lIHRoYXQgdGhlIG1hcmtzIHdlcmUgbm90IHN0YWxlIGFzIG9mIGJlZm9yZQog
ICAgIC8vIGJlZ2luTWFya2luZygpLiBIZW5jZSB0aGUgbmVlZCB0byB3aGlwIHRoZSBtYXJrcyBp
bnRvIHNoYXBlLgogICAgIGlmIChhcmVNYXJrc1N0YWxlKCkpCi0gICAgICAgIG1fbWFya3MuY2xl
YXJBbGwoKTsKLSAgICBtX21hcmtpbmdWZXJzaW9uID0gTWFya2VkU3BhY2U6Om51bGxWZXJzaW9u
OworICAgICAgICBmb290ZXIoKS5tX21hcmtzLmNsZWFyQWxsKCk7CisgICAgZm9vdGVyKCkubV9t
YXJraW5nVmVyc2lvbiA9IE1hcmtlZFNwYWNlOjpudWxsVmVyc2lvbjsKIH0KIAogI2lmICFBU1NF
UlRfRElTQUJMRUQKIHZvaWQgTWFya2VkQmxvY2s6OmFzc2VydE1hcmtzTm90U3RhbGUoKQogewot
ICAgIEFTU0VSVChtX21hcmtpbmdWZXJzaW9uID09IHZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5t
YXJraW5nVmVyc2lvbigpKTsKKyAgICBBU1NFUlQoZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbiA9
PSB2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKSk7CiB9CiAjZW5kaWYg
Ly8gIUFTU0VSVF9ESVNBQkxFRAogCkBAIC0yODgsNyArMzAyLDcgQEAgYm9vbCBNYXJrZWRCbG9j
azo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcAogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRp
ZENvbnN1bWVGcmVlTGlzdCgpCiB7Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9jaygp
Lm1fbG9jayk7CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9ja0Zvb3RlcigpLm1fbG9j
ayk7CiAgICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlTGlzdCFcbiIpOwogICAgIEFTU0VS
VChpc0ZyZWVMaXN0ZWQoKSk7CkBAIC0yOTgsMTIgKzMxMiwxMiBAQCB2b2lkIE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlCiAKIHNpemVfdCBNYXJrZWRCbG9jazo6bWFya0NvdW50
KCkKIHsKLSAgICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IG1fbWFya3MuY291bnQoKTsK
KyAgICByZXR1cm4gYXJlTWFya3NTdGFsZSgpID8gMCA6IGZvb3RlcigpLm1fbWFya3MuY291bnQo
KTsKIH0KIAogdm9pZCBNYXJrZWRCbG9jazo6Y2xlYXJIYXNBbnlNYXJrZWQoKQogewotICAgIG1f
Ymlhc2VkTWFya0NvdW50ID0gbV9tYXJrQ291bnRCaWFzOworICAgIGZvb3RlcigpLm1fYmlhc2Vk
TWFya0NvdW50ID0gZm9vdGVyKCkubV9tYXJrQ291bnRCaWFzOwogfQogCiB2b2lkIE1hcmtlZEJs
b2NrOjpub3RlTWFya2VkU2xvdygpCkBAIC0zMjksMTEgKzM0MywxMSBAQCB2b2lkIE1hcmtlZEJs
b2NrOjpIYW5kbGU6OmRpZEFkZFRvRGlyZWN0CiAgICAgCiAgICAgbV9pbmRleCA9IGluZGV4Owog
ICAgIG1fZGlyZWN0b3J5ID0gZGlyZWN0b3J5OwotICAgIG1fYmxvY2stPm1fc3Vic3BhY2UgPSBk
aXJlY3RvcnktPnN1YnNwYWNlKCk7CisgICAgYmxvY2tGb290ZXIoKS5tX3N1YnNwYWNlID0gZGly
ZWN0b3J5LT5zdWJzcGFjZSgpOwogICAgIAogICAgIHNpemVfdCBjZWxsU2l6ZSA9IGRpcmVjdG9y
eS0+Y2VsbFNpemUoKTsKICAgICBtX2F0b21zUGVyQ2VsbCA9IChjZWxsU2l6ZSArIGF0b21TaXpl
IC0gMSkgLyBhdG9tU2l6ZTsKLSAgICBtX2VuZEF0b20gPSBhdG9tc1BlckJsb2NrIC0gbV9hdG9t
c1BlckNlbGwgKyAxOworICAgIG1fZW5kQXRvbSA9IGVuZEF0b20gLSBtX2F0b21zUGVyQ2VsbCAr
IDE7CiAgICAgCiAgICAgbV9hdHRyaWJ1dGVzID0gZGlyZWN0b3J5LT5hdHRyaWJ1dGVzKCk7CiAK
QEAgLTM0Nyw3ICszNjEsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZEFkZFRvRGly
ZWN0CiAgICAgUkVMRUFTRV9BU1NFUlQobWFya0NvdW50QmlhcyA8IDApOwogICAgIAogICAgIC8v
IFRoaXMgbWVhbnMgd2UgaGF2ZW4ndCBtYXJrZWQgYW55dGhpbmcgeWV0LgotICAgIGJsb2NrKCku
bV9iaWFzZWRNYXJrQ291bnQgPSBibG9jaygpLm1fbWFya0NvdW50QmlhcyA9IHN0YXRpY19jYXN0
PGludDE2X3Q+KG1hcmtDb3VudEJpYXMpOworICAgIGJsb2NrRm9vdGVyKCkubV9iaWFzZWRNYXJr
Q291bnQgPSBibG9ja0Zvb3RlcigpLm1fbWFya0NvdW50QmlhcyA9IHN0YXRpY19jYXN0PGludDE2
X3Q+KG1hcmtDb3VudEJpYXMpOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZFJl
bW92ZUZyb21EaXJlY3RvcnkoKQpAQCAtMzU3LDcgKzM3MSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbUQKICAgICAKICAgICBtX2luZGV4ID0gc3RkOjpudW1lcmlj
X2xpbWl0czxzaXplX3Q+OjptYXgoKTsKICAgICBtX2RpcmVjdG9yeSA9IG51bGxwdHI7Ci0gICAg
bV9ibG9jay0+bV9zdWJzcGFjZSA9IG51bGxwdHI7CisgICAgYmxvY2tGb290ZXIoKS5tX3N1YnNw
YWNlID0gbnVsbHB0cjsKIH0KIAogI2lmICFBU1NFUlRfRElTQUJMRUQKQEAgLTQxMCw3ICs0MjQs
NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKEZyZWVMaXN0CiAgICAgfQogICAg
IAogICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKLSAgICAgICAgYmxvY2soKS5tX2xvY2su
bG9jaygpOworICAgICAgICBibG9ja0Zvb3RlcigpLm1fbG9jay5sb2NrKCk7CiAgICAgCiAgICAg
c3Vic3BhY2UoKS0+ZGlkQmVnaW5Td2VlcGluZ1RvRnJlZUxpc3QodGhpcyk7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHJldmlzaW9uIDIyNzcx
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQzLDcgKzQzLDYgQEAgY2xhc3MgTWFya2VkU3BhY2U7CiBjbGFzcyBTbG90Vmlz
aXRvcjsKIGNsYXNzIFN1YnNwYWNlOwogCi10eXBlZGVmIHVpbnRwdHJfdCBCaXRzOwogdHlwZWRl
ZiB1aW50MzJfdCBIZWFwVmVyc2lvbjsKIAogLy8gQSBtYXJrZWQgYmxvY2sgaXMgYSBwYWdlLWFs
aWduZWQgY29udGFpbmVyIGZvciBoZWFwLWFsbG9jYXRlZCBvYmplY3RzLgpAQCAtNjAsMTYgKzU5
LDE4IEBAIGNsYXNzIE1hcmtlZEJsb2NrIHsKICAgICBmcmllbmQgc3RydWN0IFZlcmlmeU1hcmtl
ZDsKIAogcHVibGljOgorICAgIGNsYXNzIEZvb3RlcjsKICAgICBjbGFzcyBIYW5kbGU7CiBwcml2
YXRlOgorICAgIGZyaWVuZCBjbGFzcyBGb290ZXI7CiAgICAgZnJpZW5kIGNsYXNzIEhhbmRsZTsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21TaXplID0gMTY7IC8vIGJ5dGVz
Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja1NpemUgPSAxNiAqIEtCOwotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYmxvY2tNYXNrID0gfihibG9ja1NpemUgLSAxKTsgLy8gYmxvY2tTaXpl
IG11c3QgYmUgYSBwb3dlciBvZiB0d28uCi0KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21z
UGVyQmxvY2sgPSBibG9ja1NpemUgLyBhdG9tU2l6ZTsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBhdG9tU2l6ZSA9IDE2OyAvLyBieXRlcworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IGJsb2NrU2l6ZSA9IDE2ICogS0I7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgYmxvY2tN
YXNrID0gfihibG9ja1NpemUgLSAxKTsgLy8gYmxvY2tTaXplIG11c3QgYmUgYSBwb3dlciBvZiB0
d28uCiAKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBhdG9tc1BlckJsb2NrID0gYmxvY2tT
aXplIC8gYXRvbVNpemU7CisgICAgCiAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtlZEJsb2NrOjph
dG9tU2l6ZSAmIChNYXJrZWRCbG9jazo6YXRvbVNpemUgLSAxKSksICJNYXJrZWRCbG9jazo6YXRv
bVNpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAgICBzdGF0aWNfYXNzZXJ0KCEoTWFy
a2VkQmxvY2s6OmJsb2NrU2l6ZSAmIChNYXJrZWRCbG9jazo6YmxvY2tTaXplIC0gMSkpLCAiTWFy
a2VkQmxvY2s6OmJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAgIApAQCAt
MTAzLDYgKzEwNCw3IEBAIHB1YmxpYzoKICAgICAgICAgfkhhbmRsZSgpOwogICAgICAgICAgICAg
CiAgICAgICAgIE1hcmtlZEJsb2NrJiBibG9jaygpOworICAgICAgICBNYXJrZWRCbG9jazo6Rm9v
dGVyJiBibG9ja0Zvb3RlcigpOwogICAgICAgICAgICAgCiAgICAgICAgIHZvaWQqIGNlbGxBbGln
bih2b2lkKik7CiAgICAgICAgICAgICAKQEAgLTI0NCwxMCArMjQ2LDcxIEBAIHB1YmxpYzoKICAg
ICAgICAgICAgIAogICAgICAgICBNYXJrZWRCbG9jayogbV9ibG9jayB7IG51bGxwdHIgfTsKICAg
ICB9OworCitwcml2YXRlOiAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBhdG9tQWxp
Z25tZW50TWFzayA9IGF0b21TaXplIC0gMTsKKworICAgIHR5cGVkZWYgY2hhciBBdG9tW2F0b21T
aXplXTsKKworcHVibGljOgorICAgIGNsYXNzIEZvb3RlciB7CisgICAgcHVibGljOgorICAgICAg
ICBGb290ZXIoVk0mLCBIYW5kbGUmKTsKKyAgICAgICAgfkZvb3RlcigpOworICAgICAgICAKKyAg
ICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwor
ICAgICAgICBmcmllbmQgY2xhc3MgTWFya2VkQmxvY2s7CisgICAgICAgIAorICAgICAgICBIYW5k
bGUmIG1faGFuZGxlOworICAgICAgICBWTSogbV92bTsKKyAgICAgICAgU3Vic3BhY2UqIG1fc3Vi
c3BhY2U7CisKKyAgICAgICAgQ291bnRpbmdMb2NrIG1fbG9jazsKKyAgICAKKyAgICAgICAgLy8g
VGhlIGFjdHVhbCBtYXJrIGNvdW50IGNhbiBiZSBjb21wdXRlZCBieSBkb2luZzogbV9iaWFzZWRN
YXJrQ291bnQgLSBtX21hcmtDb3VudEJpYXMuIE5vdGUKKyAgICAgICAgLy8gdGhhdCB0aGlzIGNv
dW50IGlzIHJhY3kuIEl0IHdpbGwgYWNjdXJhdGVseSBkZXRlY3Qgd2hldGhlciBvciBub3QgZXhh
Y3RseSB6ZXJvIHRoaW5ncyB3ZXJlCisgICAgICAgIC8vIG1hcmtlZCwgYnV0IGlmIE4gdGhpbmdz
IGdvdCBtYXJrZWQsIHRoZW4gdGhpcyBtYXkgcmVwb3J0IGFueXRoaW5nIGluIHRoZSByYW5nZSBb
MSwgTl0gKG9yCisgICAgICAgIC8vIGJlZm9yZSB1bmJpYXNlZCwgaXQgd291bGQgYmUgWzEgKyBt
X21hcmtDb3VudEJpYXMsIE4gKyBtX21hcmtDb3VudEJpYXNdLikKKyAgICAgICAgaW50MTZfdCBt
X2JpYXNlZE1hcmtDb3VudDsKKyAgICAKKyAgICAgICAgLy8gV2UgYmlhcyB0aGUgbWFyayBjb3Vu
dCBzbyB0aGF0IGlmIG1fYmlhc2VkTWFya0NvdW50ID49IDAgdGhlbiB0aGUgYmxvY2sgc2hvdWxk
IGJlIHJldGlyZWQuCisgICAgICAgIC8vIFdlIGdvIHRvIGFsbCB0aGlzIHRyb3VibGUgdG8gbWFr
ZSBtYXJraW5nIGEgYml0IGZhc3RlcjogdGhpcyB3YXksIG1hcmtpbmcga25vd3Mgd2hlbiB0bwor
ICAgICAgICAvLyByZXRpcmUgYSBibG9jayB1c2luZyBhIGpzL2pucyBvbiBtX2JpYXNlZE1hcmtD
b3VudC4KKyAgICAgICAgLy8KKyAgICAgICAgLy8gRm9yIGV4YW1wbGUsIGlmIGEgYmxvY2sgaGFz
IHJvb20gZm9yIDEwMCBvYmplY3RzIGFuZCByZXRpcmVtZW50IGhhcHBlbnMgd2hlbmV2ZXIgOTAl
IGFyZQorICAgICAgICAvLyBsaXZlLCB0aGVuIG1fbWFya0NvdW50QmlhcyB3aWxsIGJlIC05MC4g
VGhpcyB3YXksIHdoZW4gbWFya2luZyBiZWdpbnMsIHRoaXMgd2lsbCBjYXVzZSB1cyB0bworICAg
ICAgICAvLyBzZXQgbV9iaWFzZWRNYXJrQ291bnQgdG8gLTkwIGFzIHdlbGwsIHNpbmNlOgorICAg
ICAgICAvLworICAgICAgICAvLyAgICAgbV9iaWFzZWRNYXJrQ291bnQgPSBhY3R1YWxNYXJrQ291
bnQgKyBtX21hcmtDb3VudEJpYXMuCisgICAgICAgIC8vCisgICAgICAgIC8vIE1hcmtpbmcgYW4g
b2JqZWN0IHdpbGwgaW5jcmVtZW50IG1fYmlhc2VkTWFya0NvdW50LiBPbmNlIDkwIG9iamVjdHMg
Z2V0IG1hcmtlZCwgd2Ugd2lsbCBoYXZlCisgICAgICAgIC8vIG1fYmlhc2VkTWFya0NvdW50ID0g
MCwgd2hpY2ggd2lsbCB0cmlnZ2VyIHJldGlyZW1lbnQuIEluIG90aGVyIHdvcmRzLCB3ZSB3YW50
IHRvIHNldAorICAgICAgICAvLyBtX21hcmtDb3VudEJpYXMgbGlrZSBzbzoKKyAgICAgICAgLy8K
KyAgICAgICAgLy8gICAgIG1fbWFya0NvdW50QmlhcyA9IC0obWluTWFya2VkQmxvY2tVdGlsaXph
dGlvbiAqIGNlbGxzUGVyQmxvY2spCisgICAgICAgIC8vCisgICAgICAgIC8vIEFsbCBvZiB0aGlz
IGFsc28gbWVhbnMgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBhbnkgb2JqZWN0cyBhcmUgbWFya2Vk
IGJ5IGRvaW5nOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgbV9iaWFzZWRNYXJrQ291bnQg
IT0gbV9tYXJrQ291bnRCaWFzCisgICAgICAgIGludDE2X3QgbV9tYXJrQ291bnRCaWFzOworCisg
ICAgICAgIEhlYXBWZXJzaW9uIG1fbWFya2luZ1ZlcnNpb247CisKKyAgICAgICAgQml0bWFwPGF0
b21zUGVyQmxvY2s+IG1fbWFya3M7CisgICAgfTsKICAgICAgICAgCitwcml2YXRlOiAgICAKKyAg
ICBGb290ZXImIGZvb3RlcigpOworICAgIGNvbnN0IEZvb3RlciYgZm9vdGVyKCkgY29uc3Q7CisK
K3B1YmxpYzoKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBlbmRBdG9tID0gKGJsb2NrU2l6
ZSAtIHNpemVvZihGb290ZXIpKSAvIGF0b21TaXplOworCiAgICAgc3RhdGljIE1hcmtlZEJsb2Nr
OjpIYW5kbGUqIHRyeUNyZWF0ZShIZWFwJiwgQWxpZ25lZE1lbW9yeUFsbG9jYXRvciopOwogICAg
ICAgICAKICAgICBIYW5kbGUmIGhhbmRsZSgpOworICAgIGNvbnN0IEhhbmRsZSYgaGFuZGxlKCkg
Y29uc3Q7CiAgICAgICAgIAogICAgIFZNKiB2bSgpIGNvbnN0OwogICAgIGlubGluZSBIZWFwKiBo
ZWFwKCkgY29uc3Q7CkBAIC0yNTUsNyArMzE4LDYgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGJv
b2wgaXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKik7CiAgICAgc3RhdGljIE1hcmtlZEJsb2NrKiBi
bG9ja0Zvcihjb25zdCB2b2lkKik7Ci0gICAgc3RhdGljIHNpemVfdCBmaXJzdEF0b20oKTsKICAg
ICBzaXplX3QgYXRvbU51bWJlcihjb25zdCB2b2lkKik7CiAgICAgICAgIAogICAgIHNpemVfdCBt
YXJrQ291bnQoKTsKQEAgLTI5NSwyMCArMzU3LDE5IEBAIHB1YmxpYzoKICAgICB2b2lkIHJlc2V0
TWFya3MoKTsKICAgICAKICAgICBib29sIGlzTWFya2VkUmF3KGNvbnN0IHZvaWQqIHApOwotICAg
IEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4gbV9tYXJraW5nVmVy
c2lvbjsgfQorICAgIEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKCkgY29uc3QgeyByZXR1cm4g
Zm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbjsgfQogICAgIAogICAgIGNvbnN0IEJpdG1hcDxhdG9t
c1BlckJsb2NrPiYgbWFya3MoKSBjb25zdDsKICAgICAKLSAgICBDb3VudGluZ0xvY2smIGxvY2so
KSB7IHJldHVybiBtX2xvY2s7IH0KKyAgICBDb3VudGluZ0xvY2smIGxvY2soKSB7IHJldHVybiBm
b290ZXIoKS5tX2xvY2s7IH0KICAgICAKLSAgICBTdWJzcGFjZSogc3Vic3BhY2UoKSBjb25zdCB7
IHJldHVybiBtX3N1YnNwYWNlOyB9CisgICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gZm9vdGVyKCkubV9zdWJzcGFjZTsgfQorICAgIAorICAgIHN0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IG9mZnNldE9mRm9vdGVyID0gZW5kQXRvbSAqIGF0b21TaXplOwogCiBwcml2YXRlOgot
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRvbUFsaWdubWVudE1hc2sgPSBhdG9tU2l6ZSAtIDE7
Ci0KLSAgICB0eXBlZGVmIGNoYXIgQXRvbVthdG9tU2l6ZV07Ci0KICAgICBNYXJrZWRCbG9jayhW
TSYsIEhhbmRsZSYpOworICAgIH5NYXJrZWRCbG9jaygpOwogICAgIEF0b20qIGF0b21zKCk7CiAg
ICAgICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgYWJvdXRUb01hcmtTbG93KEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKQEAgLTMxOCw0OCArMzc5LDI2IEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgaW5saW5lIGJvb2wgbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVh
cFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwogICAgIGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2
ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG15TWFya2luZ1ZlcnNpb24sIEhlYXBWZXJz
aW9uIG1hcmtpbmdWZXJzaW9uKTsKLSAgICAgICAgCi0gICAgSGFuZGxlJiBtX2hhbmRsZTsKLSAg
ICBWTSogbV92bTsKLSAgICBTdWJzcGFjZSogbV9zdWJzcGFjZTsKLQotICAgIENvdW50aW5nTG9j
ayBtX2xvY2s7Ci0gICAgCi0gICAgLy8gVGhlIGFjdHVhbCBtYXJrIGNvdW50IGNhbiBiZSBjb21w
dXRlZCBieSBkb2luZzogbV9iaWFzZWRNYXJrQ291bnQgLSBtX21hcmtDb3VudEJpYXMuIE5vdGUK
LSAgICAvLyB0aGF0IHRoaXMgY291bnQgaXMgcmFjeS4gSXQgd2lsbCBhY2N1cmF0ZWx5IGRldGVj
dCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IHplcm8gdGhpbmdzIHdlcmUKLSAgICAvLyBtYXJrZWQs
IGJ1dCBpZiBOIHRoaW5ncyBnb3QgbWFya2VkLCB0aGVuIHRoaXMgbWF5IHJlcG9ydCBhbnl0aGlu
ZyBpbiB0aGUgcmFuZ2UgWzEsIE5dIChvcgotICAgIC8vIGJlZm9yZSB1bmJpYXNlZCwgaXQgd291
bGQgYmUgWzEgKyBtX21hcmtDb3VudEJpYXMsIE4gKyBtX21hcmtDb3VudEJpYXNdLikKLSAgICBp
bnQxNl90IG1fYmlhc2VkTWFya0NvdW50OwotICAgIAotICAgIC8vIFdlIGJpYXMgdGhlIG1hcmsg
Y291bnQgc28gdGhhdCBpZiBtX2JpYXNlZE1hcmtDb3VudCA+PSAwIHRoZW4gdGhlIGJsb2NrIHNo
b3VsZCBiZSByZXRpcmVkLgotICAgIC8vIFdlIGdvIHRvIGFsbCB0aGlzIHRyb3VibGUgdG8gbWFr
ZSBtYXJraW5nIGEgYml0IGZhc3RlcjogdGhpcyB3YXksIG1hcmtpbmcga25vd3Mgd2hlbiB0bwot
ICAgIC8vIHJldGlyZSBhIGJsb2NrIHVzaW5nIGEganMvam5zIG9uIG1fYmlhc2VkTWFya0NvdW50
LgotICAgIC8vCi0gICAgLy8gRm9yIGV4YW1wbGUsIGlmIGEgYmxvY2sgaGFzIHJvb20gZm9yIDEw
MCBvYmplY3RzIGFuZCByZXRpcmVtZW50IGhhcHBlbnMgd2hlbmV2ZXIgOTAlIGFyZQotICAgIC8v
IGxpdmUsIHRoZW4gbV9tYXJrQ291bnRCaWFzIHdpbGwgYmUgLTkwLiBUaGlzIHdheSwgd2hlbiBt
YXJraW5nIGJlZ2lucywgdGhpcyB3aWxsIGNhdXNlIHVzIHRvCi0gICAgLy8gc2V0IG1fYmlhc2Vk
TWFya0NvdW50IHRvIC05MCBhcyB3ZWxsLCBzaW5jZToKLSAgICAvLwotICAgIC8vICAgICBtX2Jp
YXNlZE1hcmtDb3VudCA9IGFjdHVhbE1hcmtDb3VudCArIG1fbWFya0NvdW50Qmlhcy4KLSAgICAv
LwotICAgIC8vIE1hcmtpbmcgYW4gb2JqZWN0IHdpbGwgaW5jcmVtZW50IG1fYmlhc2VkTWFya0Nv
dW50LiBPbmNlIDkwIG9iamVjdHMgZ2V0IG1hcmtlZCwgd2Ugd2lsbCBoYXZlCi0gICAgLy8gbV9i
aWFzZWRNYXJrQ291bnQgPSAwLCB3aGljaCB3aWxsIHRyaWdnZXIgcmV0aXJlbWVudC4gSW4gb3Ro
ZXIgd29yZHMsIHdlIHdhbnQgdG8gc2V0Ci0gICAgLy8gbV9tYXJrQ291bnRCaWFzIGxpa2Ugc286
Ci0gICAgLy8KLSAgICAvLyAgICAgbV9tYXJrQ291bnRCaWFzID0gLShtaW5NYXJrZWRCbG9ja1V0
aWxpemF0aW9uICogY2VsbHNQZXJCbG9jaykKLSAgICAvLwotICAgIC8vIEFsbCBvZiB0aGlzIGFs
c28gbWVhbnMgdGhhdCB5b3UgY2FuIGRldGVjdCBpZiBhbnkgb2JqZWN0cyBhcmUgbWFya2VkIGJ5
IGRvaW5nOgotICAgIC8vCi0gICAgLy8gICAgIG1fYmlhc2VkTWFya0NvdW50ICE9IG1fbWFya0Nv
dW50QmlhcwotICAgIGludDE2X3QgbV9tYXJrQ291bnRCaWFzOworfTsKIAotICAgIEhlYXBWZXJz
aW9uIG1fbWFya2luZ1ZlcnNpb247CitpbmxpbmUgTWFya2VkQmxvY2s6OkZvb3RlciYgTWFya2Vk
QmxvY2s6OmZvb3RlcigpCit7CisgICAgcmV0dXJuICpiaXR3aXNlX2Nhc3Q8TWFya2VkQmxvY2s6
OkZvb3Rlcio+KGF0b21zKCkgKyBlbmRBdG9tKTsKK30KIAotICAgIEJpdG1hcDxhdG9tc1BlckJs
b2NrPiBtX21hcmtzOwotfTsKK2lubGluZSBjb25zdCBNYXJrZWRCbG9jazo6Rm9vdGVyJiBNYXJr
ZWRCbG9jazo6Zm9vdGVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxNYXJrZWRC
bG9jayo+KHRoaXMpLT5mb290ZXIoKTsKK30KIAogaW5saW5lIE1hcmtlZEJsb2NrOjpIYW5kbGUm
IE1hcmtlZEJsb2NrOjpoYW5kbGUoKQogewotICAgIHJldHVybiBtX2hhbmRsZTsKKyAgICByZXR1
cm4gZm9vdGVyKCkubV9oYW5kbGU7Cit9CisKK2lubGluZSBjb25zdCBNYXJrZWRCbG9jazo6SGFu
ZGxlJiBNYXJrZWRCbG9jazo6aGFuZGxlKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY29uc3RfY2Fz
dDxNYXJrZWRCbG9jayo+KHRoaXMpLT5oYW5kbGUoKTsKIH0KIAogaW5saW5lIE1hcmtlZEJsb2Nr
JiBNYXJrZWRCbG9jazo6SGFuZGxlOjpibG9jaygpCkBAIC0zNjcsOSArNDA2LDkgQEAgaW5saW5l
IE1hcmtlZEJsb2NrJiBNYXJrZWRCbG9jazo6SGFuZGxlOgogICAgIHJldHVybiAqbV9ibG9jazsK
IH0KIAotaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6Zmlyc3RBdG9tKCkKK2lubGluZSBNYXJr
ZWRCbG9jazo6Rm9vdGVyJiBNYXJrZWRCbG9jazo6SGFuZGxlOjpibG9ja0Zvb3RlcigpCiB7Ci0g
ICAgcmV0dXJuIFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZjxhdG9tU2l6ZT4oc2l6ZW9mKE1hcmtl
ZEJsb2NrKSkgLyBhdG9tU2l6ZTsKKyAgICByZXR1cm4gYmxvY2soKS5mb290ZXIoKTsKIH0KIAog
aW5saW5lIE1hcmtlZEJsb2NrOjpBdG9tKiBNYXJrZWRCbG9jazo6YXRvbXMoKQpAQCAtMzc5LDEz
ICs0MTgsMTMgQEAgaW5saW5lIE1hcmtlZEJsb2NrOjpBdG9tKiBNYXJrZWRCbG9jazo6YQogCiBp
bmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChjb25zdCB2b2lkKiBwKQogewot
ICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBhdG9tQWxpZ25tZW50TWFz
ayk7CisgICAgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHApICYgYXRvbUFs
aWdubWVudE1hc2spOwogfQogCiBpbmxpbmUgdm9pZCogTWFya2VkQmxvY2s6OkhhbmRsZTo6Y2Vs
bEFsaWduKHZvaWQqIHApCiB7Ci0gICAgQml0cyBiYXNlID0gcmVpbnRlcnByZXRfY2FzdDxCaXRz
PihibG9jaygpLmF0b21zKCkgKyBmaXJzdEF0b20oKSk7Ci0gICAgQml0cyBiaXRzID0gcmVpbnRl
cnByZXRfY2FzdDxCaXRzPihwKTsKKyAgICB1aW50cHRyX3QgYmFzZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90PihibG9jaygpLmF0b21zKCkpOworICAgIHVpbnRwdHJfdCBiaXRzID0gcmVp
bnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHApOwogICAgIGJpdHMgLT0gYmFzZTsKICAgICBiaXRz
IC09IGJpdHMgJSBjZWxsU2l6ZSgpOwogICAgIGJpdHMgKz0gYmFzZTsKQEAgLTM5NCw3ICs0MzMs
NyBAQCBpbmxpbmUgdm9pZCogTWFya2VkQmxvY2s6OkhhbmRsZTo6Y2VsbEFsCiAKIGlubGluZSBN
YXJrZWRCbG9jayogTWFya2VkQmxvY2s6OmJsb2NrRm9yKGNvbnN0IHZvaWQqIHApCiB7Ci0gICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxvY2sqPihyZWludGVycHJldF9jYXN0PEJp
dHM+KHApICYgYmxvY2tNYXNrKTsKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNYXJrZWRC
bG9jayo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwKSAmIGJsb2NrTWFzayk7CiB9CiAK
IGlubGluZSBCbG9ja0RpcmVjdG9yeSogTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlyZWN0b3J5KCkg
Y29uc3QKQEAgLTQxOSw3ICs0NTgsNyBAQCBpbmxpbmUgVk0qIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OnZtKCkgY29uCiAKIGlubGluZSBWTSogTWFya2VkQmxvY2s6OnZtKCkgY29uc3QKIHsKLSAgICBy
ZXR1cm4gbV92bTsKKyAgICByZXR1cm4gZm9vdGVyKCkubV92bTsKIH0KIAogaW5saW5lIFdlYWtT
ZXQmIE1hcmtlZEJsb2NrOjpIYW5kbGU6OndlYWtTZXQoKQpAQCAtNDI5LDcgKzQ2OCw3IEBAIGlu
bGluZSBXZWFrU2V0JiBNYXJrZWRCbG9jazo6SGFuZGxlOjp3ZWEKIAogaW5saW5lIFdlYWtTZXQm
IE1hcmtlZEJsb2NrOjp3ZWFrU2V0KCkKIHsKLSAgICByZXR1cm4gbV9oYW5kbGUud2Vha1NldCgp
OworICAgIHJldHVybiBoYW5kbGUoKS53ZWFrU2V0KCk7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtl
ZEJsb2NrOjpIYW5kbGU6OnNocmluaygpCkBAIC00NTQsNyArNDkzLDcgQEAgaW5saW5lIHNpemVf
dCBNYXJrZWRCbG9jazo6SGFuZGxlOjpjZWxsUwogCiBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2Nr
OjpjZWxsU2l6ZSgpCiB7Ci0gICAgcmV0dXJuIG1faGFuZGxlLmNlbGxTaXplKCk7CisgICAgcmV0
dXJuIGhhbmRsZSgpLmNlbGxTaXplKCk7CiB9CiAKIGlubGluZSBjb25zdCBDZWxsQXR0cmlidXRl
cyYgTWFya2VkQmxvY2s6OkhhbmRsZTo6YXR0cmlidXRlcygpIGNvbnN0CkBAIC00NjQsNyArNTAz
LDcgQEAgaW5saW5lIGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBNYXJrZWRCbG9jawogCiBpbmxpbmUg
Y29uc3QgQ2VsbEF0dHJpYnV0ZXMmIE1hcmtlZEJsb2NrOjphdHRyaWJ1dGVzKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gbV9oYW5kbGUuYXR0cmlidXRlcygpOworICAgIHJldHVybiBoYW5kbGUoKS5h
dHRyaWJ1dGVzKCk7CiB9CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6Om5lZWRz
RGVzdHJ1Y3Rpb24oKSBjb25zdApAQCAtNDk0LDE3ICs1MzMsMTcgQEAgaW5saW5lIHNpemVfdCBN
YXJrZWRCbG9jazo6SGFuZGxlOjpzaXplKAogCiBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjph
dG9tTnVtYmVyKGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIChyZWludGVycHJldF9jYXN0
PEJpdHM+KHApIC0gcmVpbnRlcnByZXRfY2FzdDxCaXRzPih0aGlzKSkgLyBhdG9tU2l6ZTsKKyAg
ICByZXR1cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwKSAtIHJlaW50ZXJwcmV0X2Nh
c3Q8dWludHB0cl90Pih0aGlzKSkgLyBhdG9tU2l6ZTsKIH0KIAogaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OmFyZU1hcmtzU3RhbGUoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAg
cmV0dXJuIG1hcmtpbmdWZXJzaW9uICE9IG1fbWFya2luZ1ZlcnNpb247CisgICAgcmV0dXJuIG1h
cmtpbmdWZXJzaW9uICE9IGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb247CiB9CiAKIGlubGluZSBE
ZXBlbmRlbmN5IE1hcmtlZEJsb2NrOjphYm91dFRvTWFyayhIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbikKIHsKLSAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAg
ICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gZm9vdGVyKCkubV9tYXJraW5nVmVyc2lvbjsKICAgICBp
ZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIGFib3V0VG9N
YXJrU2xvdyhtYXJraW5nVmVyc2lvbik7CiAgICAgcmV0dXJuIERlcGVuZGVuY3k6OmZlbmNlKHZl
cnNpb24pOwpAQCAtNTE3LDMyICs1NTYsMzIgQEAgaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6Okhh
bmRsZTo6YXNzZXJ0TQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcoY29u
c3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gbV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSk7Cisg
ICAgcmV0dXJuIGZvb3RlcigpLm1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCkpOwogfQogCiBpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24s
IGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1Zl
cnNpb247CisgICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IGZvb3RlcigpLm1fbWFya2luZ1ZlcnNp
b247CiAgICAgaWYgKFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIERl
cGVuZGVuY3k6OmZlbmNlKHZlcnNpb24pKTsKKyAgICByZXR1cm4gZm9vdGVyKCkubV9tYXJrcy5n
ZXQoYXRvbU51bWJlcihwKSwgRGVwZW5kZW5jeTo6ZmVuY2UodmVyc2lvbikpOwogfQogCiBpbmxp
bmUgYm9vbCBNYXJrZWRCbG9jazo6aXNNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQogewogICAgIGFzc2VydE1hcmtzTm90U3RhbGUoKTsKLSAgICByZXR1cm4gbV9t
YXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIGZvb3Rlcigp
Lm1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOwogfQogCiBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6dGVzdEFuZFNldE1hcmtlZChjb25zdCB2b2lkKiBwLCBEZXBlbmRlbmN5
IGRlcGVuZGVuY3kpCiB7CiAgICAgYXNzZXJ0TWFya3NOb3RTdGFsZSgpOwotICAgIHJldHVybiBt
X21hcmtzLmNvbmN1cnJlbnRUZXN0QW5kU2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOwor
ICAgIHJldHVybiBmb290ZXIoKS5tX21hcmtzLmNvbmN1cnJlbnRUZXN0QW5kU2V0KGF0b21OdW1i
ZXIocCksIGRlcGVuZGVuY3kpOwogfQogCiBpbmxpbmUgY29uc3QgQml0bWFwPE1hcmtlZEJsb2Nr
OjphdG9tc1BlckJsb2NrPiYgTWFya2VkQmxvY2s6Om1hcmtzKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gbV9tYXJrczsKKyAgICByZXR1cm4gZm9vdGVyKCkubV9tYXJrczsKIH0KIAogaW5saW5lIGJv
b2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNOZXdseUFsbG9jYXRlZChjb25zdCB2b2lkKiBwKQpA
QCAtNTY5LDEyICs2MDgsOSBAQCBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aXNBdG9tKGNvbnN0
IHZvCiB7CiAgICAgQVNTRVJUKE1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKHApKTsKICAgICBz
aXplX3QgYXRvbU51bWJlciA9IHRoaXMtPmF0b21OdW1iZXIocCk7Ci0gICAgc2l6ZV90IGZpcnN0
QXRvbSA9IE1hcmtlZEJsb2NrOjpmaXJzdEF0b20oKTsKLSAgICBpZiAoYXRvbU51bWJlciA8IGZp
cnN0QXRvbSkgLy8gRmlsdGVycyBwb2ludGVycyBpbnRvIE1hcmtlZEJsb2NrIG1ldGFkYXRhLgot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgaWYgKChhdG9tTnVtYmVyIC0gZmlyc3RBdG9tKSAl
IG1faGFuZGxlLm1fYXRvbXNQZXJDZWxsKSAvLyBGaWx0ZXJzIHBvaW50ZXJzIGludG8gY2VsbCBt
aWRkbGVzLgorICAgIGlmIChhdG9tTnVtYmVyICUgaGFuZGxlKCkubV9hdG9tc1BlckNlbGwpIC8v
IEZpbHRlcnMgcG9pbnRlcnMgaW50byBjZWxsIG1pZGRsZXMuCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBpZiAoYXRvbU51bWJlciA+PSBtX2hhbmRsZS5tX2VuZEF0b20pIC8vIEZpbHRlcnMg
cG9pbnRlcnMgaW50byBpbnZhbGlkIGNlbGxzIG91dCBvZiB0aGUgcmFuZ2UuCisgICAgaWYgKGF0
b21OdW1iZXIgPj0gaGFuZGxlKCkubV9lbmRBdG9tKSAvLyBGaWx0ZXJzIHBvaW50ZXJzIGludG8g
aW52YWxpZCBjZWxscyBvdXQgb2YgdGhlIHJhbmdlLgogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgcmV0dXJuIHRydWU7CiB9CkBAIC01ODMsNyArNjE5LDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1l
IEZ1bmN0b3I+CiBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZv
ckVhY2hDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgSGVhcENlbGw6OktpbmQg
a2luZCA9IG1fYXR0cmlidXRlcy5jZWxsS2luZDsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RB
dG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAg
ICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJm1fYmxv
Y2stPmF0b21zKClbaV0pOwogICAgICAgICBpZiAoZnVuY3RvcihjZWxsLCBraW5kKSA9PSBJdGVy
YXRpb25TdGF0dXM6OkRvbmUpCiAgICAgICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpE
b25lOwpAQCAtNTkzLDE1ICs2MjksMTUgQEAgaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRC
bG9jazo6SGFuZAogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6aGFzQW55TWFya2VkKCkgY29u
c3QKIHsKLSAgICByZXR1cm4gbV9iaWFzZWRNYXJrQ291bnQgIT0gbV9tYXJrQ291bnRCaWFzOwor
ICAgIHJldHVybiBmb290ZXIoKS5tX2JpYXNlZE1hcmtDb3VudCAhPSBmb290ZXIoKS5tX21hcmtD
b3VudEJpYXM7CiB9CiAKIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpub3RlTWFya2VkKCkKIHsK
ICAgICAvLyBUaGlzIGlzIHJhY3kgYnkgZGVzaWduLiBXZSBkb24ndCB3YW50IHRvIHBheSB0aGUg
cHJpY2Ugb2YgYW4gYXRvbWljIGluY3JlbWVudCEKLSAgICBpbnQxNl90IGJpYXNlZE1hcmtDb3Vu
dCA9IG1fYmlhc2VkTWFya0NvdW50OworICAgIGludDE2X3QgYmlhc2VkTWFya0NvdW50ID0gZm9v
dGVyKCkubV9iaWFzZWRNYXJrQ291bnQ7CiAgICAgKytiaWFzZWRNYXJrQ291bnQ7Ci0gICAgbV9i
aWFzZWRNYXJrQ291bnQgPSBiaWFzZWRNYXJrQ291bnQ7CisgICAgZm9vdGVyKCkubV9iaWFzZWRN
YXJrQ291bnQgPSBiaWFzZWRNYXJrQ291bnQ7CiAgICAgaWYgKFVOTElLRUxZKCFiaWFzZWRNYXJr
Q291bnQpKQogICAgICAgICBub3RlTWFya2VkU2xvdygpOwogfQpAQCAtNjE2LDcgKzY1Miw3IEBA
IHN0cnVjdCBNYXJrZWRCbG9ja0hhc2ggOiBQdHJIYXNoPEpTQzo6TWEKICAgICAgICAgLy8gQWxp
Z25lZCBWTSByZWdpb25zIHRlbmQgdG8gYmUgbW9ub3RvbmljYWxseSBpbmNyZWFzaW5nIGludGVn
ZXJzLAogICAgICAgICAvLyB3aGljaCBpcyBhIGdyZWF0IGhhc2ggZnVuY3Rpb24sIGJ1dCB3ZSBo
YXZlIHRvIHJlbW92ZSB0aGUgbG93IGJpdHMsCiAgICAgICAgIC8vIHNpbmNlIHRoZXkncmUgYWx3
YXlzIHplcm8sIHdoaWNoIGlzIGEgdGVycmlibGUgaGFzaCBmdW5jdGlvbiEKLSAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlNDOjpCaXRzPihrZXkpIC8gSlNDOjpNYXJrZWRCbG9jazo6
YmxvY2tTaXplOworICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGtl
eSkgLyBKU0M6Ok1hcmtlZEJsb2NrOjpibG9ja1NpemU7CiAgICAgfQogfTsKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHJldmlz
aW9uIDIyNzcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIGlubGluZSBNYXJrZWRTcGFj
ZSogTWFya2VkQmxvY2s6OkhhbmRsZToKIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtz
Q29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQog
ewotICAgIHJldHVybiBtYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhtX21hcmtpbmdW
ZXJzaW9uLCBtYXJraW5nVmVyc2lvbik7CisgICAgcmV0dXJuIG1hcmtzQ29udmV5TGl2ZW5lc3NE
dXJpbmdNYXJraW5nKGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb24sIG1hcmtpbmdWZXJzaW9uKTsK
IH0KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdN
YXJraW5nKEhlYXBWZXJzaW9uIG15TWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG1hcmtpbmdW
ZXJzaW9uKQpAQCAtMTM4LDggKzEzOCw5IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBNYXJrZWRCbG9j
azo6SGFuZGxlOjoKICAgICAvLyBpbXBhY3Qgb24gcGVyZiAtIGFyb3VuZCAyJSBvbiBzcGxheSBp
ZiB5b3UgZ2V0IGl0IHdyb25nLgogCiAgICAgTWFya2VkQmxvY2smIGJsb2NrID0gdGhpcy0+Ymxv
Y2soKTsKKyAgICBNYXJrZWRCbG9jazo6Rm9vdGVyJiBmb290ZXIgPSBibG9jay5mb290ZXIoKTsK
ICAgICAKLSAgICBhdXRvIGNvdW50ID0gYmxvY2subV9sb2NrLnRyeU9wdGltaXN0aWNGZW5jZWxl
c3NSZWFkKCk7CisgICAgYXV0byBjb3VudCA9IGZvb3Rlci5tX2xvY2sudHJ5T3B0aW1pc3RpY0Zl
bmNlbGVzc1JlYWQoKTsKICAgICBpZiAoY291bnQudmFsdWUpIHsKICAgICAgICAgRGVwZW5kZW5j
eSBmZW5jZUJlZm9yZSA9IERlcGVuZGVuY3k6OmZlbmNlKGNvdW50LmlucHV0KTsKICAgICAgICAg
TWFya2VkQmxvY2s6OkhhbmRsZSogZmVuY2VkVGhpcyA9IGZlbmNlQmVmb3JlLmNvbnN1bWUodGhp
cyk7CkBAIC0xNDksMjUgKzE1MCwyNiBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFya2VkQmxvY2s6
OkhhbmRsZTo6CiAgICAgICAgIEhlYXBWZXJzaW9uIG15TmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0g
ZmVuY2VkVGhpcy0+bV9uZXdseUFsbG9jYXRlZFZlcnNpb247CiAgICAgICAgIGlmIChteU5ld2x5
QWxsb2NhdGVkVmVyc2lvbiA9PSBuZXdseUFsbG9jYXRlZFZlcnNpb24pIHsKICAgICAgICAgICAg
IGJvb2wgcmVzdWx0ID0gZmVuY2VkVGhpcy0+aXNOZXdseUFsbG9jYXRlZChjZWxsKTsKLSAgICAg
ICAgICAgIGlmIChibG9jay5tX2xvY2suZmVuY2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIERl
cGVuZGVuY3k6OmZlbmNlKHJlc3VsdCkpKQorICAgICAgICAgICAgaWYgKGZvb3Rlci5tX2xvY2su
ZmVuY2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6OmZlbmNlKHJlc3VsdCkp
KQogICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0gZWxzZSB7CiAgICAg
ICAgICAgICBNYXJrZWRCbG9jayYgZmVuY2VkQmxvY2sgPSAqZmVuY2VCZWZvcmUuY29uc3VtZSgm
YmxvY2spOworICAgICAgICAgICAgTWFya2VkQmxvY2s6OkZvb3RlciYgZmVuY2VkRm9vdGVyID0g
ZmVuY2VkQmxvY2suZm9vdGVyKCk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEhlYXBWZXJz
aW9uIG15TWFya2luZ1ZlcnNpb24gPSBmZW5jZWRCbG9jay5tX21hcmtpbmdWZXJzaW9uOworICAg
ICAgICAgICAgSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lvbiA9IGZlbmNlZEZvb3Rlci5tX21h
cmtpbmdWZXJzaW9uOwogICAgICAgICAgICAgaWYgKG15TWFya2luZ1ZlcnNpb24gIT0gbWFya2lu
Z1ZlcnNpb24KICAgICAgICAgICAgICAgICAmJiAoIWlzTWFya2luZyB8fCAhZmVuY2VkQmxvY2su
bWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobXlNYXJraW5nVmVyc2lvbiwgbWFya2lu
Z1ZlcnNpb24pKSkgewotICAgICAgICAgICAgICAgIGlmIChibG9jay5tX2xvY2suZmVuY2VsZXNz
VmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6OmZlbmNlKG15TWFya2luZ1ZlcnNpb24p
KSkKKyAgICAgICAgICAgICAgICBpZiAoZm9vdGVyLm1fbG9jay5mZW5jZWxlc3NWYWxpZGF0ZShj
b3VudC52YWx1ZSwgRGVwZW5kZW5jeTo6ZmVuY2UobXlNYXJraW5nVmVyc2lvbikpKQogICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmVuY2VkQmxvY2subV9tYXJrcy5nZXQoYmxvY2suYXRv
bU51bWJlcihjZWxsKSk7Ci0gICAgICAgICAgICAgICAgaWYgKGJsb2NrLm1fbG9jay5mZW5jZWxl
c3NWYWxpZGF0ZShjb3VudC52YWx1ZSwgRGVwZW5kZW5jeTo6ZmVuY2UocmVzdWx0KSkpCisgICAg
ICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmZW5jZWRGb290ZXIubV9tYXJrcy5nZXQoYmxvY2su
YXRvbU51bWJlcihjZWxsKSk7CisgICAgICAgICAgICAgICAgaWYgKGZvb3Rlci5tX2xvY2suZmVu
Y2VsZXNzVmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6OmZlbmNlKHJlc3VsdCkpKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICAgICAgfQogICAgICAg
ICB9CiAgICAgfQogICAgIAotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2subV9sb2Nr
KTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGZvb3Rlci5tX2xvY2spOwogCiAgICAgQVNT
RVJUKCFpc0ZyZWVMaXN0ZWQoKSk7CiAgICAgCkBAIC0xODIsNyArMTg0LDcgQEAgQUxXQVlTX0lO
TElORSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OgogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIH0KICAgICAKLSAgICByZXR1cm4gYmxvY2subV9tYXJrcy5nZXQoYmxvY2suYXRvbU51
bWJlcihjZWxsKSk7CisgICAgcmV0dXJuIGZvb3Rlci5tX21hcmtzLmdldChibG9jay5hdG9tTnVt
YmVyKGNlbGwpKTsKIH0KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZl
Q2VsbChIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbmV3bHlBbGxvY2F0
ZWRWZXJzaW9uLCBib29sIGlzTWFya2luZywgY29uc3Qgdm9pZCogcCkKQEAgLTI0MCw2ICsyNDIs
NyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgU3VwZXJT
YW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwogCiAgICAgTWFya2VkQmxvY2sm
IGJsb2NrID0gdGhpcy0+YmxvY2soKTsKKyAgICBNYXJrZWRCbG9jazo6Rm9vdGVyJiBmb290ZXIg
PSBibG9jay5mb290ZXIoKTsKICAgICAKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2co
UmF3UG9pbnRlcih0aGlzKSwgIi8iLCBSYXdQb2ludGVyKCZibG9jayksICI6IE1hcmtlZEJsb2Nr
OjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlZXAhXG4iKTsKQEAgLTI2MiwxMiArMjY1LDEyIEBAIHZv
aWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgJiYgbmV3bHlB
bGxvY2F0ZWRNb2RlID09IERvZXNOb3RIYXZlTmV3bHlBbGxvY2F0ZWQpIHsKICAgICAgICAgCiAg
ICAgICAgIC8vIFRoaXMgaXMgYW4gaW5jcmVkaWJseSBwb3dlcmZ1bCBhc3NlcnRpb24gdGhhdCBj
aGVja3MgdGhlIHNhbml0eSBvZiBvdXIgYmxvY2sgYml0cy4KLSAgICAgICAgaWYgKG1hcmtzTW9k
ZSA9PSBNYXJrc05vdFN0YWxlICYmICFibG9jay5tX21hcmtzLmlzRW1wdHkoKSkgeworICAgICAg
ICBpZiAobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgIWZvb3Rlci5tX21hcmtzLmlzRW1w
dHkoKSkgewogICAgICAgICAgICAgV1RGOjpkYXRhRmlsZSgpLmF0b21pY2FsbHkoCiAgICAgICAg
ICAgICAgICAgWyZdIChQcmludFN0cmVhbSYgb3V0KSB7CiAgICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiQmxvY2sgIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiOiBtYXJrcyBub3QgZW1wdHkh
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJCbG9jayBsb2NrIGlzIGhlbGQ6
ICIsIGJsb2NrLm1fbG9jay5pc0hlbGQoKSwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIG91
dC5wcmludCgiTWFya2luZyB2ZXJzaW9uIG9mIGJsb2NrOiAiLCBibG9jay5tX21hcmtpbmdWZXJz
aW9uLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJCbG9jayBsb2NrIGlz
IGhlbGQ6ICIsIGZvb3Rlci5tX2xvY2suaXNIZWxkKCksICJcbiIpOworICAgICAgICAgICAgICAg
ICAgICBvdXQucHJpbnQoIk1hcmtpbmcgdmVyc2lvbiBvZiBibG9jazogIiwgZm9vdGVyLm1fbWFy
a2luZ1ZlcnNpb24sICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQoIk1hcmtp
bmcgdmVyc2lvbiBvZiBoZWFwOiAiLCBzcGFjZSgpLT5tYXJraW5nVmVyc2lvbigpLCAiXG4iKTsK
ICAgICAgICAgICAgICAgICAgICAgVU5SRUFDSEFCTEVfRk9SX1BMQVRGT1JNKCk7CiAgICAgICAg
ICAgICAgICAgfSk7CkBAIC0yNzYsMTIgKzI3OSwxMiBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIGNoYXIqIHN0YXJ0T2ZMYXN0Q2VsbCA9IHN0YXRp
Y19jYXN0PGNoYXIqPihjZWxsQWxpZ24oYmxvY2suYXRvbXMoKSArIG1fZW5kQXRvbSAtIDEpKTsK
ICAgICAgICAgY2hhciogcGF5bG9hZEVuZCA9IHN0YXJ0T2ZMYXN0Q2VsbCArIGNlbGxTaXplOwog
ICAgICAgICBSRUxFQVNFX0FTU0VSVChwYXlsb2FkRW5kIC0gTWFya2VkQmxvY2s6OmJsb2NrU2l6
ZSA8PSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KCZibG9jaykpOwotICAgICAgICBjaGFyKiBwYXlsb2Fk
QmVnaW4gPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGJsb2NrLmF0b21zKCkgKyBmaXJzdEF0b20oKSk7
CisgICAgICAgIGNoYXIqIHBheWxvYWRCZWdpbiA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oYmxvY2su
YXRvbXMoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAoc3dlZXBNb2RlID09IFN3ZWVwVG9GcmVl
TGlzdCkKICAgICAgICAgICAgIHNldElzRnJlZUxpc3RlZCgpOwogICAgICAgICBpZiAoc3BhY2Uo
KS0+aXNNYXJraW5nKCkpCi0gICAgICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7CisgICAg
ICAgICAgICBmb290ZXIubV9sb2NrLnVubG9jaygpOwogICAgICAgICBpZiAoZGVzdHJ1Y3Rpb25N
b2RlICE9IEJsb2NrSGFzTm9EZXN0cnVjdG9ycykgewogICAgICAgICAgICAgZm9yIChjaGFyKiBj
ZWxsID0gcGF5bG9hZEJlZ2luOyBjZWxsIDwgcGF5bG9hZEVuZDsgY2VsbCArPSBjZWxsU2l6ZSkK
ICAgICAgICAgICAgICAgICBkZXN0cm95KGNlbGwpOwpAQCAtMzIwLDkgKzMyMyw5IEBAIHZvaWQg
TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgICAgICsrY291bnQ7
CiAgICAgICAgIH0KICAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8
IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgIGlmIChlbXB0
eU1vZGUgPT0gTm90RW1wdHkKLSAgICAgICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtzTm90
U3RhbGUgJiYgYmxvY2subV9tYXJrcy5nZXQoaSkpCisgICAgICAgICAgICAmJiAoKG1hcmtzTW9k
ZSA9PSBNYXJrc05vdFN0YWxlICYmIGZvb3Rlci5tX21hcmtzLmdldChpKSkKICAgICAgICAgICAg
ICAgICB8fCAobmV3bHlBbGxvY2F0ZWRNb2RlID09IEhhc05ld2x5QWxsb2NhdGVkICYmIG1fbmV3
bHlBbGxvY2F0ZWQuZ2V0KGkpKSkpIHsKICAgICAgICAgICAgIGlzRW1wdHkgPSBmYWxzZTsKICAg
ICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzQwLDcgKzM0Myw3IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24g
PSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb247CiAgICAgCiAgICAgaWYgKHNwYWNlKCktPmlzTWFy
a2luZygpKQotICAgICAgICBibG9jay5tX2xvY2sudW5sb2NrKCk7CisgICAgICAgIGZvb3Rlci5t
X2xvY2sudW5sb2NrKCk7CiAgICAgCiAgICAgaWYgKGRlc3RydWN0aW9uTW9kZSA9PSBCbG9ja0hh
c0Rlc3RydWN0b3JzQW5kQ29sbGVjdG9ySXNSdW5uaW5nKSB7CiAgICAgICAgIGZvciAoc2l6ZV90
IGkgOiBkZWFkQ2VsbHMpCkBAIC00OTIsNyArNDk1LDcgQEAgaW5saW5lIEl0ZXJhdGlvblN0YXR1
cyBNYXJrZWRCbG9jazo6SGFuZAogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODAzMTUKICAgICAKICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0gbV9hdHRy
aWJ1dGVzLmNlbGxLaW5kOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1f
ZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgIEhlYXBDZWxsKiBj
ZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMoKVtp
XSk7CiAgICAgICAgIGlmICghaXNMaXZlKGNlbGwpKQogICAgICAgICAgICAgY29udGludWU7CkBA
IC01MDcsNyArNTEwLDcgQEAgdGVtcGxhdGUgPHR5cGVuYW1lIEZ1bmN0b3I+CiBpbmxpbmUgSXRl
cmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hEZWFkQ2VsbChjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogewogICAgIEhlYXBDZWxsOjpLaW5kIGtpbmQgPSBtX2F0dHJpYnV0
ZXMuY2VsbEtpbmQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRB
dG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAgICAgSGVhcENlbGwqIGNlbGwg
PSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Jsb2NrLT5hdG9tcygpW2ldKTsK
ICAgICAgICAgaWYgKGlzTGl2ZShjZWxsKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtNTI3
LDggKzUzMCw4IEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6OkhhbmQKICAg
ICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKICAgICBpZiAoYXJlTWFya3NTdGFsZSkKICAgICAgICAg
cmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6Q29udGludWU7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZp
cnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Ci0gICAgICAg
IGlmICghYmxvY2subV9tYXJrcy5nZXQoaSkpCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICAgICAgaWYgKCFibG9jay5mb290
ZXIoKS5tX21hcmtzLmdldChpKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAgICAgIEhl
YXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+
YXRvbXMoKVtpXSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3Bh
Y2UuY3BwCShyZXZpc2lvbiAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9N
YXJrZWRTcGFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw3ICsxMzUsNiBAQCBjb25zdCBW
ZWN0b3I8c2l6ZV90PiYgc2l6ZUNsYXNzZXMoKQogICAgICAgICAgICAgLy8gRklYTUU6IEFsbCBv
ZiB0aGVzZSB0aGluZ3Mgc2hvdWxkIGhhdmUgSXNvU3Vic3BhY2VzLgogICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3OTg3NgogICAgICAgICAg
ICAgYWRkKHNpemVvZihVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrKSk7Ci0gICAgICAgICAgICBh
ZGQoc2l6ZW9mKEZ1bmN0aW9uQ29kZUJsb2NrKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEpT
U3RyaW5nKSk7CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKEpTRnVuY3Rpb24pKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCShyZXZpc2lvbiAyMjc3MTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFjZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01MCwyNSArNTAsMjUgQEAgY2xhc3MgTWFya2VkU3BhY2UgewogICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKE1hcmtlZFNwYWNlKTsKIHB1YmxpYzoKICAgICAvLyBzaXplU3RlcCBpcyBy
ZWFsbHkgYSBzeW5vbnltIGZvciBhdG9tU2l6ZTsgaXQncyBubyBhY2NpZGVudCB0aGF0IHRoZXkg
YXJlIHRoZSBzYW1lLgotICAgIHN0YXRpYyBjb25zdCBzaXplX3Qgc2l6ZVN0ZXAgPSBNYXJrZWRC
bG9jazo6YXRvbVNpemU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc2l6ZVN0ZXAgPSBN
YXJrZWRCbG9jazo6YXRvbVNpemU7CiAgICAgCiAgICAgLy8gU2l6ZXMgdXAgdG8gdGhpcyBhbW91
bnQgZ2V0IGEgc2l6ZSBjbGFzcyBmb3IgZWFjaCBzaXplIHN0ZXAuCi0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBwcmVjaXNlQ3V0b2ZmID0gODA7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qg
cHJlY2lzZUN1dG9mZiA9IDgwOwogICAgIAotICAgIC8vIFRoZSBhbW91bnQgb2YgYXZhaWxhYmxl
IHBheWxvYWQgaW4gYSBibG9jayBpcyB0aGUgYmxvY2sncyBzaXplIG1pbnVzIHRoZSBoZWFkZXIu
IEJ1dCB0aGUKKyAgICAvLyBUaGUgYW1vdW50IG9mIGF2YWlsYWJsZSBwYXlsb2FkIGluIGEgYmxv
Y2sgaXMgdGhlIGJsb2NrJ3Mgc2l6ZSBtaW51cyB0aGUgZm9vdGVyLiBCdXQgdGhlCiAgICAgLy8g
aGVhZGVyIHNpemUgbWlnaHQgbm90IGJlIGF0b20gc2l6ZSBhbGlnbmVkLCBzbyB3ZSByb3VuZCBk
b3duIHRoZSByZXN1bHQgYWNjb3JkaW5nbHkuCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9j
a1BheWxvYWQgPSAoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAtIHNpemVvZihNYXJrZWRCbG9jaykp
ICYgfihNYXJrZWRCbG9jazo6YXRvbVNpemUgLSAxKTsKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBibG9ja1BheWxvYWQgPSAoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAtIHNpemVvZihNYXJr
ZWRCbG9jazo6Rm9vdGVyKSkgJiB+KE1hcmtlZEJsb2NrOjphdG9tU2l6ZSAtIDEpOwogICAgIAog
ICAgIC8vIFRoZSBsYXJnZXN0IGNlbGwgd2UncmUgd2lsbGluZyB0byBhbGxvY2F0ZSBpbiBhIE1h
cmtlZEJsb2NrIHRoZSAibm9ybWFsIHdheSIgKGkuZS4gdXNpbmcgc2l6ZQogICAgIC8vIGNsYXNz
ZXMsIHJhdGhlciB0aGFuIGEgbGFyZ2UgYWxsb2NhdGlvbikgaXMgaGFsZiB0aGUgc2l6ZSBvZiB0
aGUgcGF5bG9hZCwgcm91bmRlZCBkb3duLiBUaGlzCiAgICAgLy8gZW5zdXJlcyB0aGF0IHdlIG9u
bHkgdXNlIHRoZSBzaXplIGNsYXNzIGFwcHJvYWNoIGlmIGl0IG1lYW5zIGJlaW5nIGFibGUgdG8g
cGFjayB0d28gdGhpbmdzCiAgICAgLy8gaW50byBvbmUgYmxvY2suCi0gICAgc3RhdGljIGNvbnN0
IHNpemVfdCBsYXJnZUN1dG9mZiA9IChibG9ja1BheWxvYWQgLyAyKSAmIH4oc2l6ZVN0ZXAgLSAx
KTsKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBsYXJnZUN1dG9mZiA9IChibG9ja1BheWxv
YWQgLyAyKSAmIH4oc2l6ZVN0ZXAgLSAxKTsKIAotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgbnVt
U2l6ZUNsYXNzZXMgPSBsYXJnZUN1dG9mZiAvIHNpemVTdGVwOworICAgIHN0YXRpYyBjb25zdGV4
cHIgc2l6ZV90IG51bVNpemVDbGFzc2VzID0gbGFyZ2VDdXRvZmYgLyBzaXplU3RlcDsKICAgICAK
LSAgICBzdGF0aWMgY29uc3QgSGVhcFZlcnNpb24gbnVsbFZlcnNpb24gPSAwOyAvLyBUaGUgdmVy
c2lvbiBvZiBmcmVzaGx5IGFsbG9jYXRlZCBibG9ja3MuCi0gICAgc3RhdGljIGNvbnN0IEhlYXBW
ZXJzaW9uIGluaXRpYWxWZXJzaW9uID0gMjsgLy8gVGhlIHZlcnNpb24gdGhhdCB0aGUgaGVhcCBz
dGFydHMgb3V0IHdpdGguIFNldCB0byBtYWtlIHN1cmUgdGhhdCBuZXh0VmVyc2lvbihudWxsVmVy
c2lvbikgIT0gaW5pdGlhbFZlcnNpb24uCisgICAgc3RhdGljIGNvbnN0ZXhwciBIZWFwVmVyc2lv
biBudWxsVmVyc2lvbiA9IDA7IC8vIFRoZSB2ZXJzaW9uIG9mIGZyZXNobHkgYWxsb2NhdGVkIGJs
b2Nrcy4KKyAgICBzdGF0aWMgY29uc3RleHByIEhlYXBWZXJzaW9uIGluaXRpYWxWZXJzaW9uID0g
MjsgLy8gVGhlIHZlcnNpb24gdGhhdCB0aGUgaGVhcCBzdGFydHMgb3V0IHdpdGguIFNldCB0byBt
YWtlIHN1cmUgdGhhdCBuZXh0VmVyc2lvbihudWxsVmVyc2lvbikgIT0gaW5pdGlhbFZlcnNpb24u
CiAgICAgCiAgICAgc3RhdGljIEhlYXBWZXJzaW9uIG5leHRWZXJzaW9uKEhlYXBWZXJzaW9uIHZl
cnNpb24pCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDIyNzcxNikKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNt
CSh3b3JraW5nIGNvcHkpCkBAIC0zMDcsNyArMzA3LDcgQEAgZW5kCiBfaGFuZGxlVW5jYXVnaHRF
eGNlcHRpb246CiAgICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0MwogICAg
IGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwotICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3Qz
XSwgdDMKKyAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpG
b290ZXI6Om1fdm1bdDNdLCB0MwogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCiAgICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvckNh
dGNoW3QzXSwgY2ZyCiAgICAgc3RvcmVwIDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10KQEAg
LTYzNCw3ICs2MzQsNyBAQCBlbmQKIG1hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGxhYmVsKQogICAg
IGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMKICAgICBhbmRwIE1hcmtlZEJs
b2NrTWFzaywgdDMKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10sIHQzCisgICAgbG9h
ZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3Qz
XSwgdDMKICAgICBidGl6IFZNOjptX2V4Y2VwdGlvblt0M10sIC5ub0V4Y2VwdGlvbgogICAgIGpt
cCBsYWJlbAogLm5vRXhjZXB0aW9uOgpAQCAtMjAwMCw3ICsyMDAwLDcgQEAgX2xsaW50X29wX2Nh
dGNoOgogICAgICMgYW5kIGhhdmUgc2V0IFZNOjp0YXJnZXRJbnRlcnByZXRlclBDRm9yVGhyb3cu
CiAgICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0MwogICAgIGFuZHAgTWFy
a2VkQmxvY2tNYXNrLCB0MwotICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAg
ICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1f
dm1bdDNdLCB0MwogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVT
YXZlc0J1ZmZlcih0MywgdDApCiAgICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXSwg
Y2ZyCiAgICAgc3RvcmVwIDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10KQEAgLTIwMTUsNyAr
MjAxNSw3IEBAIF9sbGludF9vcF9jYXRjaDoKIC5pc0NhdGNoYWJsZUV4Y2VwdGlvbjoKICAgICBs
b2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9j
a01hc2ssIHQzCi0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0MworICAgIGxvYWRw
IE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0M10s
IHQzCiAKICAgICBsb2FkaSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAogICAgIHN0b3JlaSAwLCBW
TTo6bV9leGNlcHRpb25bdDNdCkBAIC0yMDUzLDcgKzIwNTMsNyBAQCBfbGxpbnRfdGhyb3dfZnJv
bV9zbG93X3BhdGhfdHJhbXBvbGluZToKICAgICAjIFRoaXMgZXNzZW50aWFsbHkgZW11bGF0ZXMg
dGhlIEpJVCdzIHRocm93aW5nIHByb3RvY29sLgogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MQog
ICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MQotICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3Zt
W3QxXSwgdDEKKyAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2Nr
OjpGb290ZXI6Om1fdm1bdDFdLCB0MQogICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodDEsIHQyKQogICAgIGptcCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9y
VGhyb3dbdDFdCiAKQEAgLTIwNzIsNyArMjA3Miw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9s
aW5lKGV4ZWN1dGFibGVPZmYKICAgICBpZiBYODYgb3IgWDg2X1dJTgogICAgICAgICBzdWJwIDgs
IHNwICMgYWxpZ24gc3RhY2sgcG9pbnRlcgogICAgICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywg
dDEKLSAgICAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDFdLCB0MworICAgICAgICBsb2Fk
cCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDFd
LCB0MwogICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQogICAgICAgICBt
b3ZlIGNmciwgYTAgICMgYTAgPSBlY3gKICAgICAgICAgc3RvcmVwIGEwLCBbc3BdCkBAIC0yMDgy
LDcgKzIwODIsNyBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAg
ICAgICAgIGNhbGwgZXhlY3V0YWJsZU9mZnNldFRvRnVuY3Rpb25bdDFdCiAgICAgICAgIGxvYWRw
IENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMKICAgICAgICAgYW5kcCBNYXJrZWRCbG9j
a01hc2ssIHQzCi0gICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAgICAg
ICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjpt
X3ZtW3QzXSwgdDMKICAgICAgICAgYWRkcCA4LCBzcAogICAgIGVsc2lmIEFSTSBvciBBUk12NyBv
ciBBUk12N19UUkFESVRJT05BTCBvciBDX0xPT1Agb3IgTUlQUwogICAgICAgICBpZiBNSVBTCkBA
IC0yMDk1LDcgKzIwOTUsNyBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxl
T2ZmCiAgICAgICAgIGVuZAogICAgICAgICAjIHQxIGFscmVhZHkgY29udGFpbnMgdGhlIENhbGxl
ZS4KICAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQxCi0gICAgICAgIGxvYWRwIE1hcmtl
ZEJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICAgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZz
ZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QxXSwgdDEKICAgICAgICAgc3RvcmVwIGNm
ciwgVk06OnRvcENhbGxGcmFtZVt0MV0KICAgICAgICAgbW92ZSBjZnIsIGEwCiAgICAgICAgIGxv
YWRpIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDEKQEAgLTIxMDgsNyArMjEwOCw3IEBA
IG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgZW5kCiAg
ICAgICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMKICAgICAgICAgYW5k
cCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3Qz
XSwgdDMKKyAgICAgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9j
azo6Rm9vdGVyOjptX3ZtW3QzXSwgdDMKICAgICAgICAgaWYgTUlQUwogICAgICAgICAgICAgYWRk
cCAyNCwgc3AKICAgICAgICAgZWxzZQpAQCAtMjE0MCw3ICsyMTQwLDcgQEAgbWFjcm8gaW50ZXJu
YWxGdW5jdGlvbkNhbGxUcmFtcG9saW5lKG9mZgogICAgIGlmIFg4NiBvciBYODZfV0lOCiAgICAg
ICAgIHN1YnAgOCwgc3AgIyBhbGlnbiBzdGFjayBwb2ludGVyCiAgICAgICAgIGFuZHAgTWFya2Vk
QmxvY2tNYXNrLCB0MQotICAgICAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0MV0sIHQzCisg
ICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rl
cjo6bV92bVt0MV0sIHQzCiAgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDNd
CiAgICAgICAgIG1vdmUgY2ZyLCBhMCAgIyBhMCA9IGVjeAogICAgICAgICBzdG9yZXAgYTAsIFtz
cF0KQEAgLTIxNDksMTMgKzIxNDksMTMgQEAgbWFjcm8gaW50ZXJuYWxGdW5jdGlvbkNhbGxUcmFt
cG9saW5lKG9mZgogICAgICAgICBjYWxsIG9mZnNldE9mRnVuY3Rpb25bdDFdCiAgICAgICAgIGxv
YWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMKICAgICAgICAgYW5kcCBNYXJrZWRC
bG9ja01hc2ssIHQzCi0gICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAg
ICAgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVy
OjptX3ZtW3QzXSwgdDMKICAgICAgICAgYWRkcCA4LCBzcAogICAgIGVsc2lmIEFSTSBvciBBUk12
NyBvciBBUk12N19UUkFESVRJT05BTCBvciBDX0xPT1Agb3IgTUlQUwogICAgICAgICBzdWJwIDgs
IHNwICMgYWxpZ24gc3RhY2sgcG9pbnRlcgogICAgICAgICAjIHQxIGFscmVhZHkgY29udGFpbnMg
dGhlIENhbGxlZS4KICAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQxCi0gICAgICAgIGxv
YWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICAgICAgbG9hZHAgTWFya2VkQmxvY2tG
b290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QxXSwgdDEKICAgICAgICAg
c3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MV0KICAgICAgICAgbW92ZSBjZnIsIGEwCiAg
ICAgICAgIGxvYWRpIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDEKQEAgLTIxNjcsNyAr
MjE2Nyw3IEBAIG1hY3JvIGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShvZmYKICAgICAg
ICAgZW5kCiAgICAgICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMKICAg
ICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgICAgIGxvYWRwIE1hcmtlZEJsb2Nr
OjptX3ZtW3QzXSwgdDMKKyAgICAgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBN
YXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QzXSwgdDMKICAgICAgICAgYWRkcCA4LCBzcAogICAg
IGVsc2UKICAgICAgICAgZXJyb3IKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
b3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAyMjc3MTYpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtMjgwLDcgKzI4MCw3IEBAIGVuZAogX2hhbmRsZVVuY2F1Z2h0RXhj
ZXB0aW9uOgogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tN
YXNrLCB0MwotICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAgICBsb2FkcCBN
YXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0
MwogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZl
cih0MywgdDApCiAgICAgbG9hZHAgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXSwgY2ZyCiAgICAg
c3RvcmVwIDAsIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10KQEAgLTU2MSw3ICs1NjEsNyBAQCBl
bmQKIG1hY3JvIGJyYW5jaElmRXhjZXB0aW9uKGxhYmVsKQogICAgIGxvYWRwIENhbGxlZVtjZnJd
LCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwotICAgIGxvYWRwIE1hcmtlZEJsb2Nr
OjptX3ZtW3QzXSwgdDMKKyAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtl
ZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogICAgIGJ0cXogVk06Om1fZXhjZXB0aW9uW3Qz
XSwgLm5vRXhjZXB0aW9uCiAgICAgam1wIGxhYmVsCiAubm9FeGNlcHRpb246CkBAIC0yMDAyLDcg
KzIwMDIsNyBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgIyBhbmQgaGF2ZSBzZXQgVk06OnRhcmdl
dEludGVycHJldGVyUENGb3JUaHJvdy4KICAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMKICAgICBh
bmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10s
IHQzCisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9v
dGVyOjptX3ZtW3QzXSwgdDMKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodDMsIHQwKQogICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aFt0M10sIGNmcgogICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdCkBAIC0y
MDIyLDcgKzIwMjIsNyBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAuaXNDYXRjaGFibGVFeGNlcHRpb246
CiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQz
Ci0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0MworICAgIGxvYWRwIE1hcmtlZEJs
b2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0M10sIHQzCiAKICAg
ICBsb2FkcSBWTTo6bV9leGNlcHRpb25bdDNdLCB0MAogICAgIHN0b3JlcSAwLCBWTTo6bV9leGNl
cHRpb25bdDNdCkBAIC0yMDUyLDcgKzIwNTIsNyBAQCBfbGxpbnRfb3BfZW5kOgogX2xsaW50X3Ro
cm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQx
CiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQxCi0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1f
dm1bdDFdLCB0MQorICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxv
Y2s6OkZvb3Rlcjo6bV92bVt0MV0sIHQxCiAgICAgY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih0MSwgdDIpCiAKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Ns
b3dfcGF0aF9oYW5kbGVfZXhjZXB0aW9uKQpAQCAtMjA2Miw3ICsyMDYyLDcgQEAgX2xsaW50X3Ro
cm93X2Zyb21fc2xvd19wYXRoX3RyYW1wb2xpbmU6CiAgICAgIyBUaGlzIGVzc2VudGlhbGx5IGVt
dWxhdGVzIHRoZSBKSVQncyB0aHJvd2luZyBwcm90b2NvbC4KICAgICBsb2FkcCBDYWxsZWVbY2Zy
XSwgdDEKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDEKLSAgICBsb2FkcCBNYXJrZWRCbG9j
azo6bV92bVt0MV0sIHQxCisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJr
ZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QxXSwgdDEKICAgICBqbXAgVk06OnRhcmdldE1hY2hpbmVQ
Q0ZvclRocm93W3QxXQogCiAKQEAgLTIwNzcsNyArMjA3Nyw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxU
cmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICBzdG9yZXAgMCwgQ29kZUJsb2NrW2Nmcl0KICAg
ICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDAKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDAsIHQx
Ci0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDFdLCB0MQorICAgIGxvYWRwIE1hcmtlZEJs
b2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0MV0sIHQxCiAgICAg
c3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MV0KICAgICBpZiBBUk02NCBvciBDX0xPT1AK
ICAgICAgICAgc3RvcmVwIGxyLCBSZXR1cm5QQ1tjZnJdCkBAIC0yMTA0LDcgKzIxMDQsNyBAQCBt
YWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAKICAgICBsb2FkcCBDYWxs
ZWVbY2ZyXSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICBsb2FkcCBNYXJr
ZWRCbG9jazo6bV92bVt0M10sIHQzCisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQg
KyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QzXSwgdDMKIAogICAgIGJ0cW56IFZNOjptX2V4
Y2VwdGlvblt0M10sIC5oYW5kbGVFeGNlcHRpb24KIApAQCAtMjEyMSw3ICsyMTIxLDcgQEAgbWFj
cm8gaW50ZXJuYWxGdW5jdGlvbkNhbGxUcmFtcG9saW5lKG9mZgogICAgIHN0b3JlcCAwLCBDb2Rl
QmxvY2tbY2ZyXQogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MAogICAgIGFuZHAgTWFya2VkQmxv
Y2tNYXNrLCB0MCwgdDEKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0MV0sIHQxCisgICAg
bG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3Zt
W3QxXSwgdDEKICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QxXQogICAgIGlmIEFS
TTY0IG9yIENfTE9PUAogICAgICAgICBzdG9yZXAgbHIsIFJldHVyblBDW2Nmcl0KQEAgLTIxNDcs
NyArMjE0Nyw3IEBAIG1hY3JvIGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShvZmYKIAog
ICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0Mwot
ICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAgICBsb2FkcCBNYXJrZWRCbG9j
a0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogCiAgICAg
YnRxbnogVk06Om1fZXhjZXB0aW9uW3QzXSwgLmhhbmRsZUV4Y2VwdGlvbgogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CShyZXZpc2lvbiAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTQzNiw2ICs0MzYsNyBAQCBjb25z
dCBOb3RJbml0aWFsaXphdGlvbiA9IGNvbnN0ZXhwciBJbml0CiAKIGNvbnN0IE1hcmtlZEJsb2Nr
U2l6ZSA9IGNvbnN0ZXhwciBNYXJrZWRCbG9jazo6YmxvY2tTaXplCiBjb25zdCBNYXJrZWRCbG9j
a01hc2sgPSB+KE1hcmtlZEJsb2NrU2l6ZSAtIDEpCitjb25zdCBNYXJrZWRCbG9ja0Zvb3Rlck9m
ZnNldCA9IGNvbnN0ZXhwciBNYXJrZWRCbG9jazo6b2Zmc2V0T2ZGb290ZXIKIAogY29uc3QgQmxh
Y2tUaHJlc2hvbGQgPSBjb25zdGV4cHIgYmxhY2tUaHJlc2hvbGQKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332483</attachid>
            <date>2018-01-27 14:09:41 -0800</date>
            <delta_ts>2018-01-27 14:20:51 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>47713</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc4IEBA
CisyMDE4LTAxLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TWFya2VkQmxvY2sgc2hvdWxkIGhhdmUgYSBmb290ZXIgaW5zdGVhZCBvZiBhIGhlYWRlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjE3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlz
IG1vdmVzIHRoZSBNYXJrZWRCbG9jaydzIG1ldGEtZGF0YSBmcm9tIHRoZSBoZWFkZXIgdG8gdGhl
IGZvb3Rlci4gVGhpcyBkb2Vzbid0IHJlYWxseQorICAgICAgICBjaGFuZ2UgYW55dGhpbmcgZXhj
ZXB0IGZvciBzb21lIGNvbXBpbGUtdGltZSBjb25zdGFudHMsIHNvIGl0IHNob3VsZCBub3QgYWZm
ZWN0IHBlcmZvcm1hbmNlLgorCisgICAgICAgICogaGVhcC9CbG9ja0RpcmVjdG9yeS5jcHA6Cisg
ICAgICAgIChKU0M6OmJsb2NrSGVhZGVyU2l6ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkJs
b2NrRGlyZWN0b3J5OjpibG9ja1NpemVGb3JCeXRlcyk6IERlbGV0ZWQuCisgICAgICAgICogaGVh
cC9CbG9ja0RpcmVjdG9yeS5oOgorICAgICAgICAqIGhlYXAvSGVhcFV0aWwuaDoKKyAgICAgICAg
KEpTQzo6SGVhcFV0aWw6OmZpbmRHQ09iamVjdFBvaW50ZXJzRm9yTWFya2luZyk6CisgICAgICAg
ICogaGVhcC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpNYXJr
ZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp+TWFya2VkQmxvY2spOgorICAg
ICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Rm9vdGVyOjpGb290ZXIpOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6Rm9vdGVyOjp+Rm9vdGVyKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFu
ZGxlOjpsYXN0Q2hhbmNlVG9GaW5hbGl6ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpI
YW5kbGU6OnJlc3VtZUFsbG9jYXRpbmcpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJv
dXRUb01hcmtTbG93KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnJlc2V0TWFya3MpOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXNzZXJ0TWFya3NOb3RTdGFsZSk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZENvbnN1bWVGcmVlTGlzdCk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjptYXJrQ291bnQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9j
azo6Y2xlYXJIYXNBbnlNYXJrZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxl
OjpkaWRBZGRUb0RpcmVjdG9yeSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmRpZFJlbW92ZUZyb21EaXJlY3RvcnkpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFu
ZGxlOjpzd2VlcCk6CisgICAgICAgICogaGVhcC9NYXJrZWRCbG9jay5oOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6bWFya2luZ1ZlcnNpb24gY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6bG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpzdWJzcGFjZSBjb25z
dCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpmb290ZXIpOgorICAgICAgICAoSlNDOjpN
YXJrZWRCbG9jazo6Zm9vdGVyIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Omhh
bmRsZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpoYW5kbGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpibG9ja0Zvb3Rlcik6CisgICAgICAgIChKU0M6
Ok1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVkKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OkhhbmRsZTo6Y2VsbEFsaWduKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmJsb2NrRm9y
KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OnZtIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OndlYWtTZXQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6Y2VsbFNp
emUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXR0cmlidXRlcyBjb25zdCk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphdG9tTnVtYmVyKToKKyAgICAgICAgKEpTQzo6TWFya2Vk
QmxvY2s6OmFyZU1hcmtzU3RhbGUpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YWJvdXRU
b01hcmspOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWRSYXcpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6aXNNYXJrZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9j
azo6dGVzdEFuZFNldE1hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjptYXJrcyBj
b25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjppc0F0b20pOgorICAgICAgICAoSlND
OjpNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNoQ2VsbCk6CisgICAgICAgIChKU0M6Ok1hcmtl
ZEJsb2NrOjpoYXNBbnlNYXJrZWQgY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6
bm90ZU1hcmtlZCk6CisgICAgICAgIChXVEY6Ok1hcmtlZEJsb2NrSGFzaDo6aGFzaCk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpmaXJzdEF0b20pOiBEZWxldGVkLgorICAgICAgICAqIGhl
YXAvTWFya2VkQmxvY2tJbmxpbmVzLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjptYXJr
c0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpIYW5kbGU6OmlzTGl2ZSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnNw
ZWNpYWxpemVkU3dlZXApOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JF
YWNoTGl2ZUNlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNo
RGVhZENlbGwpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNoTWFy
a2VkQ2VsbCk6CisgICAgICAgICogaGVhcC9NYXJrZWRTcGFjZS5jcHA6CisgICAgICAgICogaGVh
cC9NYXJrZWRTcGFjZS5oOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
OgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAg
ICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKwogMjAxOC0wMS0yNyAgWXVzdWtl
IFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBERkcgc3RyZW5ndGgg
cmVkdWN0aW9uIGZhaWxzIHRvIGNvbnZlcnQgTnVtYmVyVG9TdHJpbmdXaXRoVmFsaWRSYWRpeENv
bnN0YW50IGZvciAwIHRvIGNvbnN0YW50ICcwJwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcAkocmV2aXNpb24gMjI3NzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05MCwxOSArOTAsNiBAQCBNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6Zmlu
CiAgICAgcmV0dXJuIG1fYmxvY2tzW21fYWxsb2NhdGlvbkN1cnNvcl07CiB9CiAKLXN0YXRpYyBz
aXplX3QgYmxvY2tIZWFkZXJTaXplKCkKLXsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0
aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oc2l6ZW9mKE1hcmtlZEJsb2NrKSk7Ci19Ci0K
LXNpemVfdCBCbG9ja0RpcmVjdG9yeTo6YmxvY2tTaXplRm9yQnl0ZXMoc2l6ZV90IGJ5dGVzKQot
ewotICAgIHNpemVfdCBtaW5CbG9ja1NpemUgPSBNYXJrZWRCbG9jazo6YmxvY2tTaXplOwotICAg
IHNpemVfdCBtaW5BbGxvY2F0aW9uU2l6ZSA9IGJsb2NrSGVhZGVyU2l6ZSgpICsgV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mPE1hcmtlZEJsb2NrOjphdG9tU2l6ZT4oYnl0ZXMpOwotICAgIG1pbkFs
bG9jYXRpb25TaXplID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKFdURjo6cGFnZVNpemUoKSwg
bWluQWxsb2NhdGlvblNpemUpOwotICAgIHJldHVybiBzdGQ6Om1heChtaW5CbG9ja1NpemUsIG1p
bkFsbG9jYXRpb25TaXplKTsKLX0KLQogTWFya2VkQmxvY2s6OkhhbmRsZSogQmxvY2tEaXJlY3Rv
cnk6OnRyeUFsbG9jYXRlQmxvY2soKQogewogICAgIFN1cGVyU2FtcGxlclNjb3BlIHN1cGVyU2Ft
cGxlclNjb3BlKGZhbHNlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0Jsb2Nr
RGlyZWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxv
Y2tEaXJlY3RvcnkuaAkocmV2aXNpb24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvQmxvY2tEaXJlY3RvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMTEzLDggKzExMyw2IEBA
IHB1YmxpYzoKIAogICAgIGJvb2wgaXNQYWdlZE91dChkb3VibGUgZGVhZGxpbmUpOwogICAgIAot
ICAgIHN0YXRpYyBzaXplX3QgYmxvY2tTaXplRm9yQnl0ZXMoc2l6ZV90KTsKLSAgICAKICAgICBM
b2NrJiBiaXR2ZWN0b3JMb2NrKCkgeyByZXR1cm4gbV9iaXR2ZWN0b3JMb2NrOyB9CiAKICNkZWZp
bmUgQkxPQ0tfRElSRUNUT1JZX0JJVF9BQ0NFU1NPUlMobG93ZXJCaXROYW1lLCBjYXBpdGFsQml0
TmFtZSkgICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXBVdGlsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaAkocmV2
aXNpb24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE2LTIw
MTggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCkBAIC0xMjQsNyArMTI0LDcgQEAgcHVibGljOgogICAgIAogICAgICAgICAvLyBB
bHNvLCBhIGJ1dHRlcmZseSBjb3VsZCBwb2ludCBhdCB0aGUgZW5kIG9mIGFuIG9iamVjdCBwbHVz
IHNpemVvZihJbmRleGluZ0hlYWRlcikuIEluIHRoYXQKICAgICAgICAgLy8gY2FzZSwgdGhpcyBp
cyBwb2ludGluZyB0byB0aGUgb2JqZWN0IHRvIHRoZSByaWdodCBvZiB0aGUgb25lIHdlIHNob3Vs
ZCBiZSBtYXJraW5nLgotICAgICAgICBpZiAoY2FuZGlkYXRlLT5hdG9tTnVtYmVyKGFsaWduZWRQ
b2ludGVyKSA+IE1hcmtlZEJsb2NrOjpmaXJzdEF0b20oKQorICAgICAgICBpZiAoY2FuZGlkYXRl
LT5hdG9tTnVtYmVyKGFsaWduZWRQb2ludGVyKSA+IDAKICAgICAgICAgICAgICYmIHBvaW50ZXIg
PD0gYWxpZ25lZFBvaW50ZXIgKyBzaXplb2YoSW5kZXhpbmdIZWFkZXIpKQogICAgICAgICAgICAg
dHJ5UG9pbnRlcihhbGlnbmVkUG9pbnRlciAtIGNhbmRpZGF0ZS0+Y2VsbFNpemUoKSk7CiAgICAg
fQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2
aXNpb24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2su
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NiwxMiArODYsMjYgQEAgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6fkhhbmRsZSgpCiB9CiAKIE1hcmtlZEJsb2NrOjpNYXJrZWRCbG9jayhWTSYgdm0sIEhhbmRs
ZSYgaGFuZGxlKQoreworICAgIG5ldyAoJmZvb3RlcigpKSBGb290ZXIodm0sIGhhbmRsZSk7Cisg
ICAgaWYgKGZhbHNlKQorICAgICAgICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IEFsbG9j
YXRlZC5cbiIpOworfQorCitNYXJrZWRCbG9jazo6fk1hcmtlZEJsb2NrKCkKK3sKKyAgICBmb290
ZXIoKS5+Rm9vdGVyKCk7Cit9CisKK01hcmtlZEJsb2NrOjpGb290ZXI6OkZvb3RlcihWTSYgdm0s
IEhhbmRsZSYgaGFuZGxlKQogICAgIDogbV9oYW5kbGUoaGFuZGxlKQogICAgICwgbV92bSgmdm0p
CiAgICAgLCBtX21hcmtpbmdWZXJzaW9uKE1hcmtlZFNwYWNlOjpudWxsVmVyc2lvbikKIHsKLSAg
ICBpZiAoZmFsc2UpCi0gICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2Nh
dGVkLlxuIik7Cit9CisKK01hcmtlZEJsb2NrOjpGb290ZXI6On5Gb290ZXIoKQorewogfQogCiB2
b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnVuc3dlZXBXaXRoTm9OZXdseUFsbG9jYXRlZCgpCkBA
IC0xMDgsNyArMTIyLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzZXRJc0ZyZWVMaXN0
ZQogCiB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6OnN0b3BBbGxvY2F0aW5nKGNvbnN0IEZyZWVM
aXN0JiBmcmVlTGlzdCkKIHsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJsb2NrKCkubV9s
b2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJsb2NrRm9vdGVyKCkubV9sb2NrKTsK
ICAgICAKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwg
IjogTWFya2VkQmxvY2s6OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmchXG4iKTsKQEAgLTE1NSw5ICsx
NjksOSBAQCB2b2lkIE1hcmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpCiB7CiAgICAg
ZGlyZWN0b3J5KCktPnNldElzQWxsb2NhdGVkKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgZmFs
c2UpOwogICAgIGRpcmVjdG9yeSgpLT5zZXRJc0Rlc3RydWN0aWJsZShOb0xvY2tpbmdOZWNlc3Nh
cnksIHRoaXMsIHRydWUpOwotICAgIG1fYmxvY2stPm1fbWFya3MuY2xlYXJBbGwoKTsKLSAgICBt
X2Jsb2NrLT5jbGVhckhhc0FueU1hcmtlZCgpOwotICAgIG1fYmxvY2stPm1fbWFya2luZ1ZlcnNp
b24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24oKTsKKyAgICBibG9ja0Zv
b3RlcigpLm1fbWFya3MuY2xlYXJBbGwoKTsKKyAgICBibG9jaygpLmNsZWFySGFzQW55TWFya2Vk
KCk7CisgICAgYmxvY2tGb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RT
cGFjZSgpLm1hcmtpbmdWZXJzaW9uKCk7CiAgICAgbV93ZWFrU2V0Lmxhc3RDaGFuY2VUb0ZpbmFs
aXplKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZC5jbGVhckFsbCgpOwogICAgIG1fbmV3bHlBbGxv
Y2F0ZWRWZXJzaW9uID0gaGVhcCgpLT5vYmplY3RTcGFjZSgpLm5ld2x5QWxsb2NhdGVkVmVyc2lv
bigpOwpAQCAtMTY3LDcgKzE4MSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6bGFzdENo
YW5jZVRvRmkKIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyhGcmVl
TGlzdCYgZnJlZUxpc3QpCiB7CiAgICAgewotICAgICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGJsb2NrKCkubV9sb2NrKTsKKyAgICAgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhibG9ja0Zv
b3RlcigpLm1fbG9jayk7CiAgICAgICAgIAogICAgICAgICBpZiAoZmFsc2UpCiAgICAgICAgICAg
ICBkYXRhTG9nKFJhd1BvaW50ZXIodGhpcyksICI6IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnJlc3Vt
ZUFsbG9jYXRpbmchXG4iKTsKQEAgLTIwMCw3ICsyMTQsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnphcChjb25zdCBGcmVlCiB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3co
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCiB7CiAgICAgQVNTRVJUKHZtKCktPmhlYXAub2Jq
ZWN0U3BhY2UoKS5pc01hcmtpbmcoKSk7Ci0gICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhtX2xv
Y2spOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9vdGVyKCkubV9sb2NrKTsKICAgICAK
ICAgICBpZiAoIWFyZU1hcmtzU3RhbGUobWFya2luZ1ZlcnNpb24pKQogICAgICAgICByZXR1cm47
CkBAIC0yMTcsNyArMjMxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmtTbG93KEhl
YXBWZQogICAgICAgICAvLyBkYXRlIHZlcnNpb24hIElmIGl0IGRvZXMsIHRoZW4gd2Ugd2FudCB0
byBsZWF2ZSB0aGUgbmV3bHlBbGxvY2F0ZWQgYWxvbmUsIHNpbmNlIHRoYXQKICAgICAgICAgLy8g
bWVhbnMgdGhhdCB3ZSBoYWQgYWxsb2NhdGVkIGluIHRoaXMgcHJldmlvdXNseSBlbXB0eSBibG9j
ayBidXQgZGlkIG5vdCBmaWxsIGl0IHVwLCBzbwogICAgICAgICAvLyB3ZSBjcmVhdGVkIGEgbmV3
bHlBbGxvY2F0ZWQuCi0gICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKKyAgICAgICAgZm9vdGVy
KCkubV9tYXJrcy5jbGVhckFsbCgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChmYWxzZSkK
ICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogRG9pbmcgdGhpbmdzLlxu
Iik7CkBAIC0yMzAsMTYgKzI0NCwxNiBAQCB2b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Ns
b3coSGVhcFZlCiAgICAgICAgICAgICAvLyBjYW5ub3QgYmUgbGFzdENoYW5jZVRvRmluYWxpemUu
IFNvIGl0IG11c3QgYmUgc3RvcEFsbG9jYXRpbmcuIFRoYXQgbWVhbnMgdGhhdCB3ZSBqdXN0CiAg
ICAgICAgICAgICAvLyBjb21wdXRlZCB0aGUgbmV3bHlBbGxvY2F0ZWQgYml0cyBqdXN0IGJlZm9y
ZSB0aGUgc3RhcnQgb2YgYW4gaW5jcmVtZW50LiBXaGVuIHdlIGFyZSBpbiB0aGF0CiAgICAgICAg
ICAgICAvLyBtb2RlLCBpdCBzZWVtcyBhcyBpZiBuZXdseUFsbG9jYXRlZCBzaG91bGQgc3Vic3Vt
ZSBtYXJrcy4KLSAgICAgICAgICAgIEFTU0VSVChoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVkLnN1
YnN1bWVzKG1fbWFya3MpKTsKLSAgICAgICAgICAgIG1fbWFya3MuY2xlYXJBbGwoKTsKKyAgICAg
ICAgICAgIEFTU0VSVChoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVkLnN1YnN1bWVzKGZvb3Rlcigp
Lm1fbWFya3MpKTsKKyAgICAgICAgICAgIGZvb3RlcigpLm1fbWFya3MuY2xlYXJBbGwoKTsKICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWQuc2V0
QW5kQ2xlYXIobV9tYXJrcyk7CisgICAgICAgICAgICBoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVk
LnNldEFuZENsZWFyKGZvb3RlcigpLm1fbWFya3MpOwogICAgICAgICAgICAgaGFuZGxlKCkubV9u
ZXdseUFsbG9jYXRlZFZlcnNpb24gPSBuZXdseUFsbG9jYXRlZFZlcnNpb247CiAgICAgICAgIH0K
ICAgICB9CiAgICAgY2xlYXJIYXNBbnlNYXJrZWQoKTsKICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwotICAgIG1fbWFya2luZ1ZlcnNpb24gPSBtYXJraW5nVmVyc2lvbjsKKyAgICBmb290ZXIo
KS5tX21hcmtpbmdWZXJzaW9uID0gbWFya2luZ1ZlcnNpb247CiAgICAgCiAgICAgLy8gVGhpcyBt
ZWFucyB3ZSdyZSB0aGUgZmlyc3Qgb25lcyB0byBtYXJrIGFueSBvYmplY3QgaW4gdGhpcyBibG9j
ay4KICAgICBkaXJlY3RvcnktPnNldElzTWFya2luZ05vdEVtcHR5KGhvbGRMb2NrKGRpcmVjdG9y
eS0+Yml0dmVjdG9yTG9jaygpKSwgJmhhbmRsZSgpLCB0cnVlKTsKQEAgLTI2MCwxNCArMjc0LDE0
IEBAIHZvaWQgTWFya2VkQmxvY2s6OnJlc2V0TWFya3MoKQogICAgIC8vIHZlcnNpb24gaXMgbnVs
bCwgYWJvdXRUb01hcmtTbG93KCkgd2lsbCBhc3N1bWUgdGhhdCB0aGUgbWFya3Mgd2VyZSBub3Qg
c3RhbGUgYXMgb2YgYmVmb3JlCiAgICAgLy8gYmVnaW5NYXJraW5nKCkuIEhlbmNlIHRoZSBuZWVk
IHRvIHdoaXAgdGhlIG1hcmtzIGludG8gc2hhcGUuCiAgICAgaWYgKGFyZU1hcmtzU3RhbGUoKSkK
LSAgICAgICAgbV9tYXJrcy5jbGVhckFsbCgpOwotICAgIG1fbWFya2luZ1ZlcnNpb24gPSBNYXJr
ZWRTcGFjZTo6bnVsbFZlcnNpb247CisgICAgICAgIGZvb3RlcigpLm1fbWFya3MuY2xlYXJBbGwo
KTsKKyAgICBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uID0gTWFya2VkU3BhY2U6Om51bGxWZXJz
aW9uOwogfQogCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogdm9pZCBNYXJrZWRCbG9jazo6YXNzZXJ0
TWFya3NOb3RTdGFsZSgpCiB7Ci0gICAgQVNTRVJUKG1fbWFya2luZ1ZlcnNpb24gPT0gdm0oKS0+
aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOworICAgIEFTU0VSVChmb290ZXIo
KS5tX21hcmtpbmdWZXJzaW9uID09IHZtKCktPmhlYXAub2JqZWN0U3BhY2UoKS5tYXJraW5nVmVy
c2lvbigpKTsKIH0KICNlbmRpZiAvLyAhQVNTRVJUX0RJU0FCTEVECiAKQEAgLTI4OCw3ICszMDIs
NyBAQCBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2b2lkKiBwCiAKIHZvaWQgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0KCkKIHsKLSAgICBhdXRvIGxvY2tl
ciA9IGhvbGRMb2NrKGJsb2NrKCkubV9sb2NrKTsKKyAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2Nr
KGJsb2NrRm9vdGVyKCkubV9sb2NrKTsKICAgICBpZiAoZmFsc2UpCiAgICAgICAgIGRhdGFMb2co
UmF3UG9pbnRlcih0aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWVM
aXN0IVxuIik7CiAgICAgQVNTRVJUKGlzRnJlZUxpc3RlZCgpKTsKQEAgLTI5OCwxMiArMzEyLDEy
IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQ29uc3VtZUZyZWUKIAogc2l6ZV90IE1h
cmtlZEJsb2NrOjptYXJrQ291bnQoKQogewotICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKCkgPyAw
IDogbV9tYXJrcy5jb3VudCgpOworICAgIHJldHVybiBhcmVNYXJrc1N0YWxlKCkgPyAwIDogZm9v
dGVyKCkubV9tYXJrcy5jb3VudCgpOwogfQogCiB2b2lkIE1hcmtlZEJsb2NrOjpjbGVhckhhc0Fu
eU1hcmtlZCgpCiB7Ci0gICAgbV9iaWFzZWRNYXJrQ291bnQgPSBtX21hcmtDb3VudEJpYXM7Cisg
ICAgZm9vdGVyKCkubV9iaWFzZWRNYXJrQ291bnQgPSBmb290ZXIoKS5tX21hcmtDb3VudEJpYXM7
CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6Om5vdGVNYXJrZWRTbG93KCkKQEAgLTMyOSwxMSArMzQz
LDExIEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkQWRkVG9EaXJlY3QKICAgICAKICAg
ICBtX2luZGV4ID0gaW5kZXg7CiAgICAgbV9kaXJlY3RvcnkgPSBkaXJlY3Rvcnk7Ci0gICAgbV9i
bG9jay0+bV9zdWJzcGFjZSA9IGRpcmVjdG9yeS0+c3Vic3BhY2UoKTsKKyAgICBibG9ja0Zvb3Rl
cigpLm1fc3Vic3BhY2UgPSBkaXJlY3RvcnktPnN1YnNwYWNlKCk7CiAgICAgCiAgICAgc2l6ZV90
IGNlbGxTaXplID0gZGlyZWN0b3J5LT5jZWxsU2l6ZSgpOwogICAgIG1fYXRvbXNQZXJDZWxsID0g
KGNlbGxTaXplICsgYXRvbVNpemUgLSAxKSAvIGF0b21TaXplOwotICAgIG1fZW5kQXRvbSA9IGF0
b21zUGVyQmxvY2sgLSBtX2F0b21zUGVyQ2VsbCArIDE7CisgICAgbV9lbmRBdG9tID0gZW5kQXRv
bSAtIG1fYXRvbXNQZXJDZWxsICsgMTsKICAgICAKICAgICBtX2F0dHJpYnV0ZXMgPSBkaXJlY3Rv
cnktPmF0dHJpYnV0ZXMoKTsKIApAQCAtMzQ3LDcgKzM2MSw3IEBAIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6ZGlkQWRkVG9EaXJlY3QKICAgICBSRUxFQVNFX0FTU0VSVChtYXJrQ291bnRCaWFz
IDwgMCk7CiAgICAgCiAgICAgLy8gVGhpcyBtZWFucyB3ZSBoYXZlbid0IG1hcmtlZCBhbnl0aGlu
ZyB5ZXQuCi0gICAgYmxvY2soKS5tX2JpYXNlZE1hcmtDb3VudCA9IGJsb2NrKCkubV9tYXJrQ291
bnRCaWFzID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4obWFya0NvdW50Qmlhcyk7CisgICAgYmxvY2tG
b290ZXIoKS5tX2JpYXNlZE1hcmtDb3VudCA9IGJsb2NrRm9vdGVyKCkubV9tYXJrQ291bnRCaWFz
ID0gc3RhdGljX2Nhc3Q8aW50MTZfdD4obWFya0NvdW50Qmlhcyk7CiB9CiAKIHZvaWQgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbURpcmVjdG9yeSgpCkBAIC0zNTcsNyArMzcxLDcg
QEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRSZW1vdmVGcm9tRAogICAgIAogICAgIG1f
aW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHNpemVfdD46Om1heCgpOwogICAgIG1fZGlyZWN0
b3J5ID0gbnVsbHB0cjsKLSAgICBtX2Jsb2NrLT5tX3N1YnNwYWNlID0gbnVsbHB0cjsKKyAgICBi
bG9ja0Zvb3RlcigpLm1fc3Vic3BhY2UgPSBudWxscHRyOwogfQogCiAjaWYgIUFTU0VSVF9ESVNB
QkxFRApAQCAtNDEwLDcgKzQyNCw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3dlZXAo
RnJlZUxpc3QKICAgICB9CiAgICAgCiAgICAgaWYgKHNwYWNlKCktPmlzTWFya2luZygpKQotICAg
ICAgICBibG9jaygpLm1fbG9jay5sb2NrKCk7CisgICAgICAgIGJsb2NrRm9vdGVyKCkubV9sb2Nr
LmxvY2soKTsKICAgICAKICAgICBzdWJzcGFjZSgpLT5kaWRCZWdpblN3ZWVwaW5nVG9GcmVlTGlz
dCh0aGlzKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJs
b2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxv
Y2suaAkocmV2aXNpb24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtNDMsNyArNDMsNiBAQCBjbGFzcyBNYXJrZWRT
cGFjZTsKIGNsYXNzIFNsb3RWaXNpdG9yOwogY2xhc3MgU3Vic3BhY2U7CiAKLXR5cGVkZWYgdWlu
dHB0cl90IEJpdHM7CiB0eXBlZGVmIHVpbnQzMl90IEhlYXBWZXJzaW9uOwogCiAvLyBBIG1hcmtl
ZCBibG9jayBpcyBhIHBhZ2UtYWxpZ25lZCBjb250YWluZXIgZm9yIGhlYXAtYWxsb2NhdGVkIG9i
amVjdHMuCkBAIC02MCwxNiArNTksMTggQEAgY2xhc3MgTWFya2VkQmxvY2sgewogICAgIGZyaWVu
ZCBzdHJ1Y3QgVmVyaWZ5TWFya2VkOwogCiBwdWJsaWM6CisgICAgY2xhc3MgRm9vdGVyOwogICAg
IGNsYXNzIEhhbmRsZTsKIHByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEZvb3RlcjsKICAgICBm
cmllbmQgY2xhc3MgSGFuZGxlOwogcHVibGljOgotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYXRv
bVNpemUgPSAxNjsgLy8gYnl0ZXMKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGJsb2NrU2l6ZSA9
IDE2ICogS0I7Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBibG9ja01hc2sgPSB+KGJsb2NrU2l6
ZSAtIDEpOyAvLyBibG9ja1NpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KLQotICAgIHN0YXRp
YyBjb25zdCBzaXplX3QgYXRvbXNQZXJCbG9jayA9IGJsb2NrU2l6ZSAvIGF0b21TaXplOworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGF0b21TaXplID0gMTY7IC8vIGJ5dGVzCisgICAgc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgYmxvY2tTaXplID0gMTYgKiBLQjsKKyAgICBzdGF0aWMgY29u
c3RleHByIHNpemVfdCBibG9ja01hc2sgPSB+KGJsb2NrU2l6ZSAtIDEpOyAvLyBibG9ja1NpemUg
bXVzdCBiZSBhIHBvd2VyIG9mIHR3by4KIAorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGF0
b21zUGVyQmxvY2sgPSBibG9ja1NpemUgLyBhdG9tU2l6ZTsKKyAgICAKICAgICBzdGF0aWNfYXNz
ZXJ0KCEoTWFya2VkQmxvY2s6OmF0b21TaXplICYgKE1hcmtlZEJsb2NrOjphdG9tU2l6ZSAtIDEp
KSwgIk1hcmtlZEJsb2NrOjphdG9tU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiIpOwogICAg
IHN0YXRpY19hc3NlcnQoIShNYXJrZWRCbG9jazo6YmxvY2tTaXplICYgKE1hcmtlZEJsb2NrOjpi
bG9ja1NpemUgLSAxKSksICJNYXJrZWRCbG9jazo6YmxvY2tTaXplIG11c3QgYmUgYSBwb3dlciBv
ZiB0d28uIik7CiAgICAgCkBAIC0xMDMsNiArMTA0LDcgQEAgcHVibGljOgogICAgICAgICB+SGFu
ZGxlKCk7CiAgICAgICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2smIGJsb2NrKCk7CisgICAg
ICAgIE1hcmtlZEJsb2NrOjpGb290ZXImIGJsb2NrRm9vdGVyKCk7CiAgICAgICAgICAgICAKICAg
ICAgICAgdm9pZCogY2VsbEFsaWduKHZvaWQqKTsKICAgICAgICAgICAgIApAQCAtMjQ0LDEwICsy
NDYsNzEgQEAgcHVibGljOgogICAgICAgICAgICAgCiAgICAgICAgIE1hcmtlZEJsb2NrKiBtX2Js
b2NrIHsgbnVsbHB0ciB9OwogICAgIH07CisKK3ByaXZhdGU6ICAgIAorICAgIHN0YXRpYyBjb25z
dGV4cHIgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOworCisgICAgdHlw
ZWRlZiBjaGFyIEF0b21bYXRvbVNpemVdOworCitwdWJsaWM6CisgICAgY2xhc3MgRm9vdGVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIEZvb3RlcihWTSYsIEhhbmRsZSYpOworICAgICAgICB+Rm9v
dGVyKCk7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CisgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrZWRCbG9jazsKKyAg
ICAgICAgCisgICAgICAgIEhhbmRsZSYgbV9oYW5kbGU7CisgICAgICAgIFZNKiBtX3ZtOworICAg
ICAgICBTdWJzcGFjZSogbV9zdWJzcGFjZTsKKworICAgICAgICBDb3VudGluZ0xvY2sgbV9sb2Nr
OworICAgIAorICAgICAgICAvLyBUaGUgYWN0dWFsIG1hcmsgY291bnQgY2FuIGJlIGNvbXB1dGVk
IGJ5IGRvaW5nOiBtX2JpYXNlZE1hcmtDb3VudCAtIG1fbWFya0NvdW50Qmlhcy4gTm90ZQorICAg
ICAgICAvLyB0aGF0IHRoaXMgY291bnQgaXMgcmFjeS4gSXQgd2lsbCBhY2N1cmF0ZWx5IGRldGVj
dCB3aGV0aGVyIG9yIG5vdCBleGFjdGx5IHplcm8gdGhpbmdzIHdlcmUKKyAgICAgICAgLy8gbWFy
a2VkLCBidXQgaWYgTiB0aGluZ3MgZ290IG1hcmtlZCwgdGhlbiB0aGlzIG1heSByZXBvcnQgYW55
dGhpbmcgaW4gdGhlIHJhbmdlIFsxLCBOXSAob3IKKyAgICAgICAgLy8gYmVmb3JlIHVuYmlhc2Vk
LCBpdCB3b3VsZCBiZSBbMSArIG1fbWFya0NvdW50QmlhcywgTiArIG1fbWFya0NvdW50Qmlhc10u
KQorICAgICAgICBpbnQxNl90IG1fYmlhc2VkTWFya0NvdW50OworICAgIAorICAgICAgICAvLyBX
ZSBiaWFzIHRoZSBtYXJrIGNvdW50IHNvIHRoYXQgaWYgbV9iaWFzZWRNYXJrQ291bnQgPj0gMCB0
aGVuIHRoZSBibG9jayBzaG91bGQgYmUgcmV0aXJlZC4KKyAgICAgICAgLy8gV2UgZ28gdG8gYWxs
IHRoaXMgdHJvdWJsZSB0byBtYWtlIG1hcmtpbmcgYSBiaXQgZmFzdGVyOiB0aGlzIHdheSwgbWFy
a2luZyBrbm93cyB3aGVuIHRvCisgICAgICAgIC8vIHJldGlyZSBhIGJsb2NrIHVzaW5nIGEganMv
am5zIG9uIG1fYmlhc2VkTWFya0NvdW50LgorICAgICAgICAvLworICAgICAgICAvLyBGb3IgZXhh
bXBsZSwgaWYgYSBibG9jayBoYXMgcm9vbSBmb3IgMTAwIG9iamVjdHMgYW5kIHJldGlyZW1lbnQg
aGFwcGVucyB3aGVuZXZlciA5MCUgYXJlCisgICAgICAgIC8vIGxpdmUsIHRoZW4gbV9tYXJrQ291
bnRCaWFzIHdpbGwgYmUgLTkwLiBUaGlzIHdheSwgd2hlbiBtYXJraW5nIGJlZ2lucywgdGhpcyB3
aWxsIGNhdXNlIHVzIHRvCisgICAgICAgIC8vIHNldCBtX2JpYXNlZE1hcmtDb3VudCB0byAtOTAg
YXMgd2VsbCwgc2luY2U6CisgICAgICAgIC8vCisgICAgICAgIC8vICAgICBtX2JpYXNlZE1hcmtD
b3VudCA9IGFjdHVhbE1hcmtDb3VudCArIG1fbWFya0NvdW50Qmlhcy4KKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gTWFya2luZyBhbiBvYmplY3Qgd2lsbCBpbmNyZW1lbnQgbV9iaWFzZWRNYXJrQ291
bnQuIE9uY2UgOTAgb2JqZWN0cyBnZXQgbWFya2VkLCB3ZSB3aWxsIGhhdmUKKyAgICAgICAgLy8g
bV9iaWFzZWRNYXJrQ291bnQgPSAwLCB3aGljaCB3aWxsIHRyaWdnZXIgcmV0aXJlbWVudC4gSW4g
b3RoZXIgd29yZHMsIHdlIHdhbnQgdG8gc2V0CisgICAgICAgIC8vIG1fbWFya0NvdW50QmlhcyBs
aWtlIHNvOgorICAgICAgICAvLworICAgICAgICAvLyAgICAgbV9tYXJrQ291bnRCaWFzID0gLSht
aW5NYXJrZWRCbG9ja1V0aWxpemF0aW9uICogY2VsbHNQZXJCbG9jaykKKyAgICAgICAgLy8KKyAg
ICAgICAgLy8gQWxsIG9mIHRoaXMgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGFu
eSBvYmplY3RzIGFyZSBtYXJrZWQgYnkgZG9pbmc6CisgICAgICAgIC8vCisgICAgICAgIC8vICAg
ICBtX2JpYXNlZE1hcmtDb3VudCAhPSBtX21hcmtDb3VudEJpYXMKKyAgICAgICAgaW50MTZfdCBt
X21hcmtDb3VudEJpYXM7CisKKyAgICAgICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsK
KworICAgICAgICBCaXRtYXA8YXRvbXNQZXJCbG9jaz4gbV9tYXJrczsKKyAgICB9OwogICAgICAg
ICAKK3ByaXZhdGU6ICAgIAorICAgIEZvb3RlciYgZm9vdGVyKCk7CisgICAgY29uc3QgRm9vdGVy
JiBmb290ZXIoKSBjb25zdDsKKworcHVibGljOgorICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90
IGVuZEF0b20gPSAoYmxvY2tTaXplIC0gc2l6ZW9mKEZvb3RlcikpIC8gYXRvbVNpemU7CisKICAg
ICBzdGF0aWMgTWFya2VkQmxvY2s6OkhhbmRsZSogdHJ5Q3JlYXRlKEhlYXAmLCBBbGlnbmVkTWVt
b3J5QWxsb2NhdG9yKik7CiAgICAgICAgIAogICAgIEhhbmRsZSYgaGFuZGxlKCk7CisgICAgY29u
c3QgSGFuZGxlJiBoYW5kbGUoKSBjb25zdDsKICAgICAgICAgCiAgICAgVk0qIHZtKCkgY29uc3Q7
CiAgICAgaW5saW5lIEhlYXAqIGhlYXAoKSBjb25zdDsKQEAgLTI1NSw3ICszMTgsNiBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgYm9vbCBpc0F0b21BbGlnbmVkKGNvbnN0IHZvaWQqKTsKICAgICBz
dGF0aWMgTWFya2VkQmxvY2sqIGJsb2NrRm9yKGNvbnN0IHZvaWQqKTsKLSAgICBzdGF0aWMgc2l6
ZV90IGZpcnN0QXRvbSgpOwogICAgIHNpemVfdCBhdG9tTnVtYmVyKGNvbnN0IHZvaWQqKTsKICAg
ICAgICAgCiAgICAgc2l6ZV90IG1hcmtDb3VudCgpOwpAQCAtMjk1LDIwICszNTcsMTkgQEAgcHVi
bGljOgogICAgIHZvaWQgcmVzZXRNYXJrcygpOwogICAgIAogICAgIGJvb2wgaXNNYXJrZWRSYXco
Y29uc3Qgdm9pZCogcCk7Ci0gICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24oKSBjb25zdCB7
IHJldHVybiBtX21hcmtpbmdWZXJzaW9uOyB9CisgICAgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24oKSBjb25zdCB7IHJldHVybiBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uOyB9CiAgICAgCiAg
ICAgY29uc3QgQml0bWFwPGF0b21zUGVyQmxvY2s+JiBtYXJrcygpIGNvbnN0OwogICAgIAotICAg
IENvdW50aW5nTG9jayYgbG9jaygpIHsgcmV0dXJuIG1fbG9jazsgfQorICAgIENvdW50aW5nTG9j
ayYgbG9jaygpIHsgcmV0dXJuIGZvb3RlcigpLm1fbG9jazsgfQogICAgIAotICAgIFN1YnNwYWNl
KiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3Vic3BhY2U7IH0KKyAgICBTdWJzcGFjZSog
c3Vic3BhY2UoKSBjb25zdCB7IHJldHVybiBmb290ZXIoKS5tX3N1YnNwYWNlOyB9CisgICAgCisg
ICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgb2Zmc2V0T2ZGb290ZXIgPSBlbmRBdG9tICogYXRv
bVNpemU7CiAKIHByaXZhdGU6Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tQWxpZ25tZW50
TWFzayA9IGF0b21TaXplIC0gMTsKLQotICAgIHR5cGVkZWYgY2hhciBBdG9tW2F0b21TaXplXTsK
LQogICAgIE1hcmtlZEJsb2NrKFZNJiwgSGFuZGxlJik7CisgICAgfk1hcmtlZEJsb2NrKCk7CiAg
ICAgQXRvbSogYXRvbXMoKTsKICAgICAgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBh
Ym91dFRvTWFya1Nsb3coSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwpAQCAtMzE4LDQ4ICsz
NzksMjYgQEAgcHJpdmF0ZToKICAgICAKICAgICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVu
ZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbik7CiAgICAgaW5saW5l
IGJvb2wgbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVhcFZlcnNpb24gbXlNYXJr
aW5nVmVyc2lvbiwgSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pOwotICAgICAgICAKLSAgICBI
YW5kbGUmIG1faGFuZGxlOwotICAgIFZNKiBtX3ZtOwotICAgIFN1YnNwYWNlKiBtX3N1YnNwYWNl
OwotCi0gICAgQ291bnRpbmdMb2NrIG1fbG9jazsKLSAgICAKLSAgICAvLyBUaGUgYWN0dWFsIG1h
cmsgY291bnQgY2FuIGJlIGNvbXB1dGVkIGJ5IGRvaW5nOiBtX2JpYXNlZE1hcmtDb3VudCAtIG1f
bWFya0NvdW50Qmlhcy4gTm90ZQotICAgIC8vIHRoYXQgdGhpcyBjb3VudCBpcyByYWN5LiBJdCB3
aWxsIGFjY3VyYXRlbHkgZGV0ZWN0IHdoZXRoZXIgb3Igbm90IGV4YWN0bHkgemVybyB0aGluZ3Mg
d2VyZQotICAgIC8vIG1hcmtlZCwgYnV0IGlmIE4gdGhpbmdzIGdvdCBtYXJrZWQsIHRoZW4gdGhp
cyBtYXkgcmVwb3J0IGFueXRoaW5nIGluIHRoZSByYW5nZSBbMSwgTl0gKG9yCi0gICAgLy8gYmVm
b3JlIHVuYmlhc2VkLCBpdCB3b3VsZCBiZSBbMSArIG1fbWFya0NvdW50QmlhcywgTiArIG1fbWFy
a0NvdW50Qmlhc10uKQotICAgIGludDE2X3QgbV9iaWFzZWRNYXJrQ291bnQ7Ci0gICAgCi0gICAg
Ly8gV2UgYmlhcyB0aGUgbWFyayBjb3VudCBzbyB0aGF0IGlmIG1fYmlhc2VkTWFya0NvdW50ID49
IDAgdGhlbiB0aGUgYmxvY2sgc2hvdWxkIGJlIHJldGlyZWQuCi0gICAgLy8gV2UgZ28gdG8gYWxs
IHRoaXMgdHJvdWJsZSB0byBtYWtlIG1hcmtpbmcgYSBiaXQgZmFzdGVyOiB0aGlzIHdheSwgbWFy
a2luZyBrbm93cyB3aGVuIHRvCi0gICAgLy8gcmV0aXJlIGEgYmxvY2sgdXNpbmcgYSBqcy9qbnMg
b24gbV9iaWFzZWRNYXJrQ291bnQuCi0gICAgLy8KLSAgICAvLyBGb3IgZXhhbXBsZSwgaWYgYSBi
bG9jayBoYXMgcm9vbSBmb3IgMTAwIG9iamVjdHMgYW5kIHJldGlyZW1lbnQgaGFwcGVucyB3aGVu
ZXZlciA5MCUgYXJlCi0gICAgLy8gbGl2ZSwgdGhlbiBtX21hcmtDb3VudEJpYXMgd2lsbCBiZSAt
OTAuIFRoaXMgd2F5LCB3aGVuIG1hcmtpbmcgYmVnaW5zLCB0aGlzIHdpbGwgY2F1c2UgdXMgdG8K
LSAgICAvLyBzZXQgbV9iaWFzZWRNYXJrQ291bnQgdG8gLTkwIGFzIHdlbGwsIHNpbmNlOgotICAg
IC8vCi0gICAgLy8gICAgIG1fYmlhc2VkTWFya0NvdW50ID0gYWN0dWFsTWFya0NvdW50ICsgbV9t
YXJrQ291bnRCaWFzLgotICAgIC8vCi0gICAgLy8gTWFya2luZyBhbiBvYmplY3Qgd2lsbCBpbmNy
ZW1lbnQgbV9iaWFzZWRNYXJrQ291bnQuIE9uY2UgOTAgb2JqZWN0cyBnZXQgbWFya2VkLCB3ZSB3
aWxsIGhhdmUKLSAgICAvLyBtX2JpYXNlZE1hcmtDb3VudCA9IDAsIHdoaWNoIHdpbGwgdHJpZ2dl
ciByZXRpcmVtZW50LiBJbiBvdGhlciB3b3Jkcywgd2Ugd2FudCB0byBzZXQKLSAgICAvLyBtX21h
cmtDb3VudEJpYXMgbGlrZSBzbzoKLSAgICAvLwotICAgIC8vICAgICBtX21hcmtDb3VudEJpYXMg
PSAtKG1pbk1hcmtlZEJsb2NrVXRpbGl6YXRpb24gKiBjZWxsc1BlckJsb2NrKQotICAgIC8vCi0g
ICAgLy8gQWxsIG9mIHRoaXMgYWxzbyBtZWFucyB0aGF0IHlvdSBjYW4gZGV0ZWN0IGlmIGFueSBv
YmplY3RzIGFyZSBtYXJrZWQgYnkgZG9pbmc6Ci0gICAgLy8KLSAgICAvLyAgICAgbV9iaWFzZWRN
YXJrQ291bnQgIT0gbV9tYXJrQ291bnRCaWFzCi0gICAgaW50MTZfdCBtX21hcmtDb3VudEJpYXM7
Cit9OwogCi0gICAgSGVhcFZlcnNpb24gbV9tYXJraW5nVmVyc2lvbjsKK2lubGluZSBNYXJrZWRC
bG9jazo6Rm9vdGVyJiBNYXJrZWRCbG9jazo6Zm9vdGVyKCkKK3sKKyAgICByZXR1cm4gKmJpdHdp
c2VfY2FzdDxNYXJrZWRCbG9jazo6Rm9vdGVyKj4oYXRvbXMoKSArIGVuZEF0b20pOworfQogCi0g
ICAgQml0bWFwPGF0b21zUGVyQmxvY2s+IG1fbWFya3M7Ci19OworaW5saW5lIGNvbnN0IE1hcmtl
ZEJsb2NrOjpGb290ZXImIE1hcmtlZEJsb2NrOjpmb290ZXIoKSBjb25zdAoreworICAgIHJldHVy
biBjb25zdF9jYXN0PE1hcmtlZEJsb2NrKj4odGhpcyktPmZvb3RlcigpOworfQogCiBpbmxpbmUg
TWFya2VkQmxvY2s6OkhhbmRsZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpCiB7Ci0gICAgcmV0dXJu
IG1faGFuZGxlOworICAgIHJldHVybiBmb290ZXIoKS5tX2hhbmRsZTsKK30KKworaW5saW5lIGNv
bnN0IE1hcmtlZEJsb2NrOjpIYW5kbGUmIE1hcmtlZEJsb2NrOjpoYW5kbGUoKSBjb25zdAorewor
ICAgIHJldHVybiBjb25zdF9jYXN0PE1hcmtlZEJsb2NrKj4odGhpcyktPmhhbmRsZSgpOwogfQog
CiBpbmxpbmUgTWFya2VkQmxvY2smIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmJsb2NrKCkKQEAgLTM2
Nyw5ICs0MDYsOSBAQCBpbmxpbmUgTWFya2VkQmxvY2smIE1hcmtlZEJsb2NrOjpIYW5kbGU6CiAg
ICAgcmV0dXJuICptX2Jsb2NrOwogfQogCi1pbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjpmaXJz
dEF0b20oKQoraW5saW5lIE1hcmtlZEJsb2NrOjpGb290ZXImIE1hcmtlZEJsb2NrOjpIYW5kbGU6
OmJsb2NrRm9vdGVyKCkKIHsKLSAgICByZXR1cm4gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mPGF0
b21TaXplPihzaXplb2YoTWFya2VkQmxvY2spKSAvIGF0b21TaXplOworICAgIHJldHVybiBibG9j
aygpLmZvb3RlcigpOwogfQogCiBpbmxpbmUgTWFya2VkQmxvY2s6OkF0b20qIE1hcmtlZEJsb2Nr
OjphdG9tcygpCkBAIC0zNzksMTMgKzQxOCwxMyBAQCBpbmxpbmUgTWFya2VkQmxvY2s6OkF0b20q
IE1hcmtlZEJsb2NrOjphCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc0F0b21BbGlnbmVk
KGNvbnN0IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuICEocmVpbnRlcnByZXRfY2FzdDxCaXRzPihw
KSAmIGF0b21BbGlnbm1lbnRNYXNrKTsKKyAgICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdD4ocCkgJiBhdG9tQWxpZ25tZW50TWFzayk7CiB9CiAKIGlubGluZSB2b2lkKiBNYXJr
ZWRCbG9jazo6SGFuZGxlOjpjZWxsQWxpZ24odm9pZCogcCkKIHsKLSAgICBCaXRzIGJhc2UgPSBy
ZWludGVycHJldF9jYXN0PEJpdHM+KGJsb2NrKCkuYXRvbXMoKSArIGZpcnN0QXRvbSgpKTsKLSAg
ICBCaXRzIGJpdHMgPSByZWludGVycHJldF9jYXN0PEJpdHM+KHApOworICAgIHVpbnRwdHJfdCBi
YXNlID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KGJsb2NrKCkuYXRvbXMoKSk7CisgICAg
dWludHB0cl90IGJpdHMgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocCk7CiAgICAgYml0
cyAtPSBiYXNlOwogICAgIGJpdHMgLT0gYml0cyAlIGNlbGxTaXplKCk7CiAgICAgYml0cyArPSBi
YXNlOwpAQCAtMzk0LDcgKzQzMyw3IEBAIGlubGluZSB2b2lkKiBNYXJrZWRCbG9jazo6SGFuZGxl
OjpjZWxsQWwKIAogaW5saW5lIE1hcmtlZEJsb2NrKiBNYXJrZWRCbG9jazo6YmxvY2tGb3IoY29u
c3Qgdm9pZCogcCkKIHsKLSAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNYXJrZWRCbG9jayo+
KHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgJiBibG9ja01hc2spOworICAgIHJldHVybiByZWlu
dGVycHJldF9jYXN0PE1hcmtlZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHAp
ICYgYmxvY2tNYXNrKTsKIH0KIAogaW5saW5lIEJsb2NrRGlyZWN0b3J5KiBNYXJrZWRCbG9jazo6
SGFuZGxlOjpkaXJlY3RvcnkoKSBjb25zdApAQCAtNDE5LDcgKzQ1OCw3IEBAIGlubGluZSBWTSog
TWFya2VkQmxvY2s6OkhhbmRsZTo6dm0oKSBjb24KIAogaW5saW5lIFZNKiBNYXJrZWRCbG9jazo6
dm0oKSBjb25zdAogewotICAgIHJldHVybiBtX3ZtOworICAgIHJldHVybiBmb290ZXIoKS5tX3Zt
OwogfQogCiBpbmxpbmUgV2Vha1NldCYgTWFya2VkQmxvY2s6OkhhbmRsZTo6d2Vha1NldCgpCkBA
IC00MjksNyArNDY4LDcgQEAgaW5saW5lIFdlYWtTZXQmIE1hcmtlZEJsb2NrOjpIYW5kbGU6Ondl
YQogCiBpbmxpbmUgV2Vha1NldCYgTWFya2VkQmxvY2s6OndlYWtTZXQoKQogewotICAgIHJldHVy
biBtX2hhbmRsZS53ZWFrU2V0KCk7CisgICAgcmV0dXJuIGhhbmRsZSgpLndlYWtTZXQoKTsKIH0K
IAogaW5saW5lIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c2hyaW5rKCkKQEAgLTQ1NCw3ICs0
OTMsNyBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNlbGxTCiAKIGlubGlu
ZSBzaXplX3QgTWFya2VkQmxvY2s6OmNlbGxTaXplKCkKIHsKLSAgICByZXR1cm4gbV9oYW5kbGUu
Y2VsbFNpemUoKTsKKyAgICByZXR1cm4gaGFuZGxlKCkuY2VsbFNpemUoKTsKIH0KIAogaW5saW5l
IGNvbnN0IENlbGxBdHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6SGFuZGxlOjphdHRyaWJ1dGVzKCkg
Y29uc3QKQEAgLTQ2NCw3ICs1MDMsNyBAQCBpbmxpbmUgY29uc3QgQ2VsbEF0dHJpYnV0ZXMmIE1h
cmtlZEJsb2NrCiAKIGlubGluZSBjb25zdCBDZWxsQXR0cmlidXRlcyYgTWFya2VkQmxvY2s6OmF0
dHJpYnV0ZXMoKSBjb25zdAogewotICAgIHJldHVybiBtX2hhbmRsZS5hdHRyaWJ1dGVzKCk7Cisg
ICAgcmV0dXJuIGhhbmRsZSgpLmF0dHJpYnV0ZXMoKTsKIH0KIAogaW5saW5lIGJvb2wgTWFya2Vk
QmxvY2s6OkhhbmRsZTo6bmVlZHNEZXN0cnVjdGlvbigpIGNvbnN0CkBAIC00OTQsMTcgKzUzMywx
NyBAQCBpbmxpbmUgc2l6ZV90IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNpemUoCiAKIGlubGluZSBz
aXplX3QgTWFya2VkQmxvY2s6OmF0b21OdW1iZXIoY29uc3Qgdm9pZCogcCkKIHsKLSAgICByZXR1
cm4gKHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4ocCkgLSByZWludGVycHJldF9jYXN0PEJpdHM+KHRo
aXMpKSAvIGF0b21TaXplOworICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+
KHApIC0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3Q+KHRoaXMpKSAvIGF0b21TaXplOwogfQog
CiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZShIZWFwVmVyc2lvbiBtYXJr
aW5nVmVyc2lvbikKIHsKLSAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gbV9tYXJraW5nVmVy
c2lvbjsKKyAgICByZXR1cm4gbWFya2luZ1ZlcnNpb24gIT0gZm9vdGVyKCkubV9tYXJraW5nVmVy
c2lvbjsKIH0KIAogaW5saW5lIERlcGVuZGVuY3kgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrKEhl
YXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBt
X21hcmtpbmdWZXJzaW9uOworICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBmb290ZXIoKS5tX21h
cmtpbmdWZXJzaW9uOwogICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9u
KSkKICAgICAgICAgYWJvdXRUb01hcmtTbG93KG1hcmtpbmdWZXJzaW9uKTsKICAgICByZXR1cm4g
RGVwZW5kZW5jeTo6ZmVuY2UodmVyc2lvbik7CkBAIC01MTcsMzIgKzU1NiwzMiBAQCBpbmxpbmUg
dm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjphc3NlcnRNCiAKIGlubGluZSBib29sIE1hcmtlZEJs
b2NrOjppc01hcmtlZFJhdyhjb25zdCB2b2lkKiBwKQogewotICAgIHJldHVybiBtX21hcmtzLmdl
dChhdG9tTnVtYmVyKHApKTsKKyAgICByZXR1cm4gZm9vdGVyKCkubV9tYXJrcy5nZXQoYXRvbU51
bWJlcihwKSk7CiB9CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChIZWFwVmVy
c2lvbiBtYXJraW5nVmVyc2lvbiwgY29uc3Qgdm9pZCogcCkKIHsKLSAgICBIZWFwVmVyc2lvbiB2
ZXJzaW9uID0gbV9tYXJraW5nVmVyc2lvbjsKKyAgICBIZWFwVmVyc2lvbiB2ZXJzaW9uID0gZm9v
dGVyKCkubV9tYXJraW5nVmVyc2lvbjsKICAgICBpZiAoVU5MSUtFTFkodmVyc2lvbiAhPSBtYXJr
aW5nVmVyc2lvbikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9tYXJrcy5n
ZXQoYXRvbU51bWJlcihwKSwgRGVwZW5kZW5jeTo6ZmVuY2UodmVyc2lvbikpOworICAgIHJldHVy
biBmb290ZXIoKS5tX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBEZXBlbmRlbmN5OjpmZW5jZSh2
ZXJzaW9uKSk7CiB9CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjppc01hcmtlZChjb25zdCB2
b2lkKiBwLCBEZXBlbmRlbmN5IGRlcGVuZGVuY3kpCiB7CiAgICAgYXNzZXJ0TWFya3NOb3RTdGFs
ZSgpOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsK
KyAgICByZXR1cm4gZm9vdGVyKCkubV9tYXJrcy5nZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5j
eSk7CiB9CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2VkKGNvbnN0
IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVwZW5kZW5jeSkKIHsKICAgICBhc3NlcnRNYXJrc05vdFN0
YWxlKCk7Ci0gICAgcmV0dXJuIG1fbWFya3MuY29uY3VycmVudFRlc3RBbmRTZXQoYXRvbU51bWJl
cihwKSwgZGVwZW5kZW5jeSk7CisgICAgcmV0dXJuIGZvb3RlcigpLm1fbWFya3MuY29uY3VycmVu
dFRlc3RBbmRTZXQoYXRvbU51bWJlcihwKSwgZGVwZW5kZW5jeSk7CiB9CiAKIGlubGluZSBjb25z
dCBCaXRtYXA8TWFya2VkQmxvY2s6OmF0b21zUGVyQmxvY2s+JiBNYXJrZWRCbG9jazo6bWFya3Mo
KSBjb25zdAogewotICAgIHJldHVybiBtX21hcmtzOworICAgIHJldHVybiBmb290ZXIoKS5tX21h
cmtzOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjppc05ld2x5QWxsb2Nh
dGVkKGNvbnN0IHZvaWQqIHApCkBAIC01NjksMTIgKzYwOCw5IEBAIGlubGluZSBib29sIE1hcmtl
ZEJsb2NrOjppc0F0b20oY29uc3Qgdm8KIHsKICAgICBBU1NFUlQoTWFya2VkQmxvY2s6OmlzQXRv
bUFsaWduZWQocCkpOwogICAgIHNpemVfdCBhdG9tTnVtYmVyID0gdGhpcy0+YXRvbU51bWJlcihw
KTsKLSAgICBzaXplX3QgZmlyc3RBdG9tID0gTWFya2VkQmxvY2s6OmZpcnN0QXRvbSgpOwotICAg
IGlmIChhdG9tTnVtYmVyIDwgZmlyc3RBdG9tKSAvLyBGaWx0ZXJzIHBvaW50ZXJzIGludG8gTWFy
a2VkQmxvY2sgbWV0YWRhdGEuCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBpZiAoKGF0b21O
dW1iZXIgLSBmaXJzdEF0b20pICUgbV9oYW5kbGUubV9hdG9tc1BlckNlbGwpIC8vIEZpbHRlcnMg
cG9pbnRlcnMgaW50byBjZWxsIG1pZGRsZXMuCisgICAgaWYgKGF0b21OdW1iZXIgJSBoYW5kbGUo
KS5tX2F0b21zUGVyQ2VsbCkgLy8gRmlsdGVycyBwb2ludGVycyBpbnRvIGNlbGwgbWlkZGxlcy4K
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmIChhdG9tTnVtYmVyID49IG1faGFuZGxlLm1f
ZW5kQXRvbSkgLy8gRmlsdGVycyBwb2ludGVycyBpbnRvIGludmFsaWQgY2VsbHMgb3V0IG9mIHRo
ZSByYW5nZS4KKyAgICBpZiAoYXRvbU51bWJlciA+PSBoYW5kbGUoKS5tX2VuZEF0b20pIC8vIEZp
bHRlcnMgcG9pbnRlcnMgaW50byBpbnZhbGlkIGNlbGxzIG91dCBvZiB0aGUgcmFuZ2UuCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTU4Myw3ICs2MTksNyBA
QCB0ZW1wbGF0ZSA8dHlwZW5hbWUgRnVuY3Rvcj4KIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6Zm9yRWFjaENlbGwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsK
ICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0gbV9hdHRyaWJ1dGVzLmNlbGxLaW5kOwotICAgIGZv
ciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVy
Q2VsbCkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRv
bXNQZXJDZWxsKSB7CiAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdF9w
dHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMoKVtpXSk7CiAgICAgICAgIGlmIChmdW5jdG9y
KGNlbGwsIGtpbmQpID09IEl0ZXJhdGlvblN0YXR1czo6RG9uZSkKICAgICAgICAgICAgIHJldHVy
biBJdGVyYXRpb25TdGF0dXM6OkRvbmU7CkBAIC01OTMsMTUgKzYyOSwxNSBAQCBpbmxpbmUgSXRl
cmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kCiAKIGlubGluZSBib29sIE1hcmtlZEJsb2Nr
OjpoYXNBbnlNYXJrZWQoKSBjb25zdAogewotICAgIHJldHVybiBtX2JpYXNlZE1hcmtDb3VudCAh
PSBtX21hcmtDb3VudEJpYXM7CisgICAgcmV0dXJuIGZvb3RlcigpLm1fYmlhc2VkTWFya0NvdW50
ICE9IGZvb3RlcigpLm1fbWFya0NvdW50QmlhczsKIH0KIAogaW5saW5lIHZvaWQgTWFya2VkQmxv
Y2s6Om5vdGVNYXJrZWQoKQogewogICAgIC8vIFRoaXMgaXMgcmFjeSBieSBkZXNpZ24uIFdlIGRv
bid0IHdhbnQgdG8gcGF5IHRoZSBwcmljZSBvZiBhbiBhdG9taWMgaW5jcmVtZW50IQotICAgIGlu
dDE2X3QgYmlhc2VkTWFya0NvdW50ID0gbV9iaWFzZWRNYXJrQ291bnQ7CisgICAgaW50MTZfdCBi
aWFzZWRNYXJrQ291bnQgPSBmb290ZXIoKS5tX2JpYXNlZE1hcmtDb3VudDsKICAgICArK2JpYXNl
ZE1hcmtDb3VudDsKLSAgICBtX2JpYXNlZE1hcmtDb3VudCA9IGJpYXNlZE1hcmtDb3VudDsKKyAg
ICBmb290ZXIoKS5tX2JpYXNlZE1hcmtDb3VudCA9IGJpYXNlZE1hcmtDb3VudDsKICAgICBpZiAo
VU5MSUtFTFkoIWJpYXNlZE1hcmtDb3VudCkpCiAgICAgICAgIG5vdGVNYXJrZWRTbG93KCk7CiB9
CkBAIC02MTYsNyArNjUyLDcgQEAgc3RydWN0IE1hcmtlZEJsb2NrSGFzaCA6IFB0ckhhc2g8SlND
OjpNYQogICAgICAgICAvLyBBbGlnbmVkIFZNIHJlZ2lvbnMgdGVuZCB0byBiZSBtb25vdG9uaWNh
bGx5IGluY3JlYXNpbmcgaW50ZWdlcnMsCiAgICAgICAgIC8vIHdoaWNoIGlzIGEgZ3JlYXQgaGFz
aCBmdW5jdGlvbiwgYnV0IHdlIGhhdmUgdG8gcmVtb3ZlIHRoZSBsb3cgYml0cywKICAgICAgICAg
Ly8gc2luY2UgdGhleSdyZSBhbHdheXMgemVybywgd2hpY2ggaXMgYSB0ZXJyaWJsZSBoYXNoIGZ1
bmN0aW9uIQotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0M6OkJpdHM+KGtleSkg
LyBKU0M6Ok1hcmtlZEJsb2NrOjpibG9ja1NpemU7CisgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHVpbnRwdHJfdD4oa2V5KSAvIEpTQzo6TWFya2VkQmxvY2s6OmJsb2NrU2l6ZTsKICAg
ICB9CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lu
bGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRC
bG9ja0lubGluZXMuaAkocmV2aXNpb24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2tJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDcgKzY3LDcg
QEAgaW5saW5lIE1hcmtlZFNwYWNlKiBNYXJrZWRCbG9jazo6SGFuZGxlOgogCiBpbmxpbmUgYm9v
bCBNYXJrZWRCbG9jazo6bWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVhcFZlcnNp
b24gbWFya2luZ1ZlcnNpb24pCiB7Ci0gICAgcmV0dXJuIG1hcmtzQ29udmV5TGl2ZW5lc3NEdXJp
bmdNYXJraW5nKG1fbWFya2luZ1ZlcnNpb24sIG1hcmtpbmdWZXJzaW9uKTsKKyAgICByZXR1cm4g
bWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoZm9vdGVyKCkubV9tYXJraW5nVmVyc2lv
biwgbWFya2luZ1ZlcnNpb24pOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6bWFya3ND
b252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcoSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lvbiwg
SGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24pCkBAIC0xMzgsOCArMTM4LDkgQEAgQUxXQVlTX0lO
TElORSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OgogICAgIC8vIGltcGFjdCBvbiBwZXJmIC0g
YXJvdW5kIDIlIG9uIHNwbGF5IGlmIHlvdSBnZXQgaXQgd3JvbmcuCiAKICAgICBNYXJrZWRCbG9j
ayYgYmxvY2sgPSB0aGlzLT5ibG9jaygpOworICAgIE1hcmtlZEJsb2NrOjpGb290ZXImIGZvb3Rl
ciA9IGJsb2NrLmZvb3RlcigpOwogICAgIAotICAgIGF1dG8gY291bnQgPSBibG9jay5tX2xvY2su
dHJ5T3B0aW1pc3RpY0ZlbmNlbGVzc1JlYWQoKTsKKyAgICBhdXRvIGNvdW50ID0gZm9vdGVyLm1f
bG9jay50cnlPcHRpbWlzdGljRmVuY2VsZXNzUmVhZCgpOwogICAgIGlmIChjb3VudC52YWx1ZSkg
ewogICAgICAgICBEZXBlbmRlbmN5IGZlbmNlQmVmb3JlID0gRGVwZW5kZW5jeTo6ZmVuY2UoY291
bnQuaW5wdXQpOwogICAgICAgICBNYXJrZWRCbG9jazo6SGFuZGxlKiBmZW5jZWRUaGlzID0gZmVu
Y2VCZWZvcmUuY29uc3VtZSh0aGlzKTsKQEAgLTE0OSwyNSArMTUwLDI2IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjoKICAgICAgICAgSGVhcFZlcnNpb24gbXlOZXds
eUFsbG9jYXRlZFZlcnNpb24gPSBmZW5jZWRUaGlzLT5tX25ld2x5QWxsb2NhdGVkVmVyc2lvbjsK
ICAgICAgICAgaWYgKG15TmV3bHlBbGxvY2F0ZWRWZXJzaW9uID09IG5ld2x5QWxsb2NhdGVkVmVy
c2lvbikgewogICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmZW5jZWRUaGlzLT5pc05ld2x5QWxs
b2NhdGVkKGNlbGwpOwotICAgICAgICAgICAgaWYgKGJsb2NrLm1fbG9jay5mZW5jZWxlc3NWYWxp
ZGF0ZShjb3VudC52YWx1ZSwgRGVwZW5kZW5jeTo6ZmVuY2UocmVzdWx0KSkpCisgICAgICAgICAg
ICBpZiAoZm9vdGVyLm1fbG9jay5mZW5jZWxlc3NWYWxpZGF0ZShjb3VudC52YWx1ZSwgRGVwZW5k
ZW5jeTo6ZmVuY2UocmVzdWx0KSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIE1hcmtlZEJsb2NrJiBmZW5jZWRCbG9jayA9ICpm
ZW5jZUJlZm9yZS5jb25zdW1lKCZibG9jayk7CisgICAgICAgICAgICBNYXJrZWRCbG9jazo6Rm9v
dGVyJiBmZW5jZWRGb290ZXIgPSBmZW5jZWRCbG9jay5mb290ZXIoKTsKICAgICAgICAgICAgIAot
ICAgICAgICAgICAgSGVhcFZlcnNpb24gbXlNYXJraW5nVmVyc2lvbiA9IGZlbmNlZEJsb2NrLm1f
bWFya2luZ1ZlcnNpb247CisgICAgICAgICAgICBIZWFwVmVyc2lvbiBteU1hcmtpbmdWZXJzaW9u
ID0gZmVuY2VkRm9vdGVyLm1fbWFya2luZ1ZlcnNpb247CiAgICAgICAgICAgICBpZiAobXlNYXJr
aW5nVmVyc2lvbiAhPSBtYXJraW5nVmVyc2lvbgogICAgICAgICAgICAgICAgICYmICghaXNNYXJr
aW5nIHx8ICFmZW5jZWRCbG9jay5tYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhteU1h
cmtpbmdWZXJzaW9uLCBtYXJraW5nVmVyc2lvbikpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJs
b2NrLm1fbG9jay5mZW5jZWxlc3NWYWxpZGF0ZShjb3VudC52YWx1ZSwgRGVwZW5kZW5jeTo6ZmVu
Y2UobXlNYXJraW5nVmVyc2lvbikpKQorICAgICAgICAgICAgICAgIGlmIChmb290ZXIubV9sb2Nr
LmZlbmNlbGVzc1ZhbGlkYXRlKGNvdW50LnZhbHVlLCBEZXBlbmRlbmN5OjpmZW5jZShteU1hcmtp
bmdWZXJzaW9uKSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmZW5jZWRCbG9jay5t
X21hcmtzLmdldChibG9jay5hdG9tTnVtYmVyKGNlbGwpKTsKLSAgICAgICAgICAgICAgICBpZiAo
YmxvY2subV9sb2NrLmZlbmNlbGVzc1ZhbGlkYXRlKGNvdW50LnZhbHVlLCBEZXBlbmRlbmN5Ojpm
ZW5jZShyZXN1bHQpKSkKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZlbmNlZEZvb3Rl
ci5tX21hcmtzLmdldChibG9jay5hdG9tTnVtYmVyKGNlbGwpKTsKKyAgICAgICAgICAgICAgICBp
ZiAoZm9vdGVyLm1fbG9jay5mZW5jZWxlc3NWYWxpZGF0ZShjb3VudC52YWx1ZSwgRGVwZW5kZW5j
eTo6ZmVuY2UocmVzdWx0KSkpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgYXV0byBsb2NrZXIgPSBo
b2xkTG9jayhibG9jay5tX2xvY2spOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soZm9vdGVy
Lm1fbG9jayk7CiAKICAgICBBU1NFUlQoIWlzRnJlZUxpc3RlZCgpKTsKICAgICAKQEAgLTE4Miw3
ICsxODQsNyBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFya2VkQmxvY2s6OkhhbmRsZTo6CiAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAotICAgIHJldHVybiBibG9jay5tX21h
cmtzLmdldChibG9jay5hdG9tTnVtYmVyKGNlbGwpKTsKKyAgICByZXR1cm4gZm9vdGVyLm1fbWFy
a3MuZ2V0KGJsb2NrLmF0b21OdW1iZXIoY2VsbCkpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRC
bG9jazo6SGFuZGxlOjppc0xpdmVDZWxsKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBIZWFw
VmVyc2lvbiBuZXdseUFsbG9jYXRlZFZlcnNpb24sIGJvb2wgaXNNYXJraW5nLCBjb25zdCB2b2lk
KiBwKQpAQCAtMjQwLDYgKzI0Miw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lh
bGl6ZWRTd2UKICAgICBTdXBlclNhbXBsZXJTY29wZSBzdXBlclNhbXBsZXJTY29wZShmYWxzZSk7
CiAKICAgICBNYXJrZWRCbG9jayYgYmxvY2sgPSB0aGlzLT5ibG9jaygpOworICAgIE1hcmtlZEJs
b2NrOjpGb290ZXImIGZvb3RlciA9IGJsb2NrLmZvb3RlcigpOwogICAgIAogICAgIGlmIChmYWxz
ZSkKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiLyIsIFJhd1BvaW50ZXIoJmJs
b2NrKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCFcbiIpOwpAQCAt
MjYyLDEyICsyNjUsMTIgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3
ZQogICAgICAgICAmJiBuZXdseUFsbG9jYXRlZE1vZGUgPT0gRG9lc05vdEhhdmVOZXdseUFsbG9j
YXRlZCkgewogICAgICAgICAKICAgICAgICAgLy8gVGhpcyBpcyBhbiBpbmNyZWRpYmx5IHBvd2Vy
ZnVsIGFzc2VydGlvbiB0aGF0IGNoZWNrcyB0aGUgc2FuaXR5IG9mIG91ciBibG9jayBiaXRzLgot
ICAgICAgICBpZiAobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgIWJsb2NrLm1fbWFya3Mu
aXNFbXB0eSgpKSB7CisgICAgICAgIGlmIChtYXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSAmJiAh
Zm9vdGVyLm1fbWFya3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBXVEY6OmRhdGFGaWxlKCku
YXRvbWljYWxseSgKICAgICAgICAgICAgICAgICBbJl0gKFByaW50U3RyZWFtJiBvdXQpIHsKICAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJCbG9jayAiLCBSYXdQb2ludGVyKCZibG9jayks
ICI6IG1hcmtzIG5vdCBlbXB0eSFcbiIpOwotICAgICAgICAgICAgICAgICAgICBvdXQucHJpbnQo
IkJsb2NrIGxvY2sgaXMgaGVsZDogIiwgYmxvY2subV9sb2NrLmlzSGVsZCgpLCAiXG4iKTsKLSAg
ICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJNYXJraW5nIHZlcnNpb24gb2YgYmxvY2s6ICIs
IGJsb2NrLm1fbWFya2luZ1ZlcnNpb24sICJcbiIpOworICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIkJsb2NrIGxvY2sgaXMgaGVsZDogIiwgZm9vdGVyLm1fbG9jay5pc0hlbGQoKSwgIlxu
Iik7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiTWFya2luZyB2ZXJzaW9uIG9mIGJs
b2NrOiAiLCBmb290ZXIubV9tYXJraW5nVmVyc2lvbiwgIlxuIik7CiAgICAgICAgICAgICAgICAg
ICAgIG91dC5wcmludCgiTWFya2luZyB2ZXJzaW9uIG9mIGhlYXA6ICIsIHNwYWNlKCktPm1hcmtp
bmdWZXJzaW9uKCksICJcbiIpOwogICAgICAgICAgICAgICAgICAgICBVTlJFQUNIQUJMRV9GT1Jf
UExBVEZPUk0oKTsKICAgICAgICAgICAgICAgICB9KTsKQEAgLTI3NiwxMiArMjc5LDEyIEBAIHZv
aWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2UKICAgICAgICAgY2hhciogc3Rh
cnRPZkxhc3RDZWxsID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGNlbGxBbGlnbihibG9jay5hdG9tcygp
ICsgbV9lbmRBdG9tIC0gMSkpOwogICAgICAgICBjaGFyKiBwYXlsb2FkRW5kID0gc3RhcnRPZkxh
c3RDZWxsICsgY2VsbFNpemU7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHBheWxvYWRFbmQgLSBN
YXJrZWRCbG9jazo6YmxvY2tTaXplIDw9IGJpdHdpc2VfY2FzdDxjaGFyKj4oJmJsb2NrKSk7Ci0g
ICAgICAgIGNoYXIqIHBheWxvYWRCZWdpbiA9IGJpdHdpc2VfY2FzdDxjaGFyKj4oYmxvY2suYXRv
bXMoKSArIGZpcnN0QXRvbSgpKTsKKyAgICAgICAgY2hhciogcGF5bG9hZEJlZ2luID0gYml0d2lz
ZV9jYXN0PGNoYXIqPihibG9jay5hdG9tcygpKTsKICAgICAgICAgCiAgICAgICAgIGlmIChzd2Vl
cE1vZGUgPT0gU3dlZXBUb0ZyZWVMaXN0KQogICAgICAgICAgICAgc2V0SXNGcmVlTGlzdGVkKCk7
CiAgICAgICAgIGlmIChzcGFjZSgpLT5pc01hcmtpbmcoKSkKLSAgICAgICAgICAgIGJsb2NrLm1f
bG9jay51bmxvY2soKTsKKyAgICAgICAgICAgIGZvb3Rlci5tX2xvY2sudW5sb2NrKCk7CiAgICAg
ICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgIT0gQmxvY2tIYXNOb0Rlc3RydWN0b3JzKSB7CiAgICAg
ICAgICAgICBmb3IgKGNoYXIqIGNlbGwgPSBwYXlsb2FkQmVnaW47IGNlbGwgPCBwYXlsb2FkRW5k
OyBjZWxsICs9IGNlbGxTaXplKQogICAgICAgICAgICAgICAgIGRlc3Ryb3koY2VsbCk7CkBAIC0z
MjAsOSArMzIzLDkgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZQog
ICAgICAgICAgICAgKytjb3VudDsKICAgICAgICAgfQogICAgIH07Ci0gICAgZm9yIChzaXplX3Qg
aSA9IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwp
IHsKICAgICAgICAgaWYgKGVtcHR5TW9kZSA9PSBOb3RFbXB0eQotICAgICAgICAgICAgJiYgKCht
YXJrc01vZGUgPT0gTWFya3NOb3RTdGFsZSAmJiBibG9jay5tX21hcmtzLmdldChpKSkKKyAgICAg
ICAgICAgICYmICgobWFya3NNb2RlID09IE1hcmtzTm90U3RhbGUgJiYgZm9vdGVyLm1fbWFya3Mu
Z2V0KGkpKQogICAgICAgICAgICAgICAgIHx8IChuZXdseUFsbG9jYXRlZE1vZGUgPT0gSGFzTmV3
bHlBbGxvY2F0ZWQgJiYgbV9uZXdseUFsbG9jYXRlZC5nZXQoaSkpKSkgewogICAgICAgICAgICAg
aXNFbXB0eSA9IGZhbHNlOwogICAgICAgICAgICAgY29udGludWU7CkBAIC0zNDAsNyArMzQzLDcg
QEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZQogICAgICAgICBtX25l
d2x5QWxsb2NhdGVkVmVyc2lvbiA9IE1hcmtlZFNwYWNlOjpudWxsVmVyc2lvbjsKICAgICAKICAg
ICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCi0gICAgICAgIGJsb2NrLm1fbG9jay51bmxvY2so
KTsKKyAgICAgICAgZm9vdGVyLm1fbG9jay51bmxvY2soKTsKICAgICAKICAgICBpZiAoZGVzdHJ1
Y3Rpb25Nb2RlID09IEJsb2NrSGFzRGVzdHJ1Y3RvcnNBbmRDb2xsZWN0b3JJc1J1bm5pbmcpIHsK
ICAgICAgICAgZm9yIChzaXplX3QgaSA6IGRlYWRDZWxscykKQEAgLTQ5Miw3ICs0OTUsNyBAQCBp
bmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kCiAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4MDMxNQogICAgIAogICAgIEhlYXBDZWxs
OjpLaW5kIGtpbmQgPSBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7Ci0gICAgZm9yIChzaXplX3QgaSA9
IGZpcnN0QXRvbSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsK
ICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+
KCZtX2Jsb2NrLT5hdG9tcygpW2ldKTsKICAgICAgICAgaWYgKCFpc0xpdmUoY2VsbCkpCiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTUwNyw3ICs1MTAsNyBAQCB0ZW1wbGF0ZSA8dHlwZW5hbWUg
RnVuY3Rvcj4KIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxvY2s6OkhhbmRsZTo6Zm9y
RWFjaERlYWRDZWxsKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7CiAgICAgSGVhcENlbGw6Oktp
bmQga2luZCA9IG1fYXR0cmlidXRlcy5jZWxsS2luZDsKLSAgICBmb3IgKHNpemVfdCBpID0gZmly
c3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAg
ICAgICBIZWFwQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJm1f
YmxvY2stPmF0b21zKClbaV0pOwogICAgICAgICBpZiAoaXNMaXZlKGNlbGwpKQogICAgICAgICAg
ICAgY29udGludWU7CkBAIC01MjcsOCArNTMwLDggQEAgaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBN
YXJrZWRCbG9jazo6SGFuZAogICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwogICAgIGlmIChhcmVN
YXJrc1N0YWxlKQogICAgICAgICByZXR1cm4gSXRlcmF0aW9uU3RhdHVzOjpDb250aW51ZTsKLSAg
ICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9t
c1BlckNlbGwpIHsKLSAgICAgICAgaWYgKCFibG9jay5tX21hcmtzLmdldChpKSkKKyAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAg
ICAgICBpZiAoIWJsb2NrLmZvb3RlcigpLm1fbWFya3MuZ2V0KGkpKQogICAgICAgICAgICAgY29u
dGludWU7CiAKICAgICAgICAgSGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxI
ZWFwQ2VsbCo+KCZtX2Jsb2NrLT5hdG9tcygpW2ldKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaGVhcC9NYXJrZWRTcGFjZS5jcHAJKHJldmlzaW9uIDIyNzcxNikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1
LDcgKzEzNSw2IEBAIGNvbnN0IFZlY3RvcjxzaXplX3Q+JiBzaXplQ2xhc3NlcygpCiAgICAgICAg
ICAgICAvLyBGSVhNRTogQWxsIG9mIHRoZXNlIHRoaW5ncyBzaG91bGQgaGF2ZSBJc29TdWJzcGFj
ZXMuCiAgICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTc5ODc2CiAgICAgICAgICAgICBhZGQoc2l6ZW9mKFVubGlua2VkRnVuY3Rpb25Db2RlQmxv
Y2spKTsKLSAgICAgICAgICAgIGFkZChzaXplb2YoRnVuY3Rpb25Db2RlQmxvY2spKTsKICAgICAg
ICAgICAgIGFkZChzaXplb2YoSlNTdHJpbmcpKTsKICAgICAgICAgICAgIGFkZChzaXplb2YoSlNG
dW5jdGlvbikpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRTcGFj
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmgJKHJldmlzaW9uIDIyNzcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtl
ZFNwYWNlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDI1ICs1MCwyNSBAQCBjbGFzcyBNYXJrZWRT
cGFjZSB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTWFya2VkU3BhY2UpOwogcHVibGljOgog
ICAgIC8vIHNpemVTdGVwIGlzIHJlYWxseSBhIHN5bm9ueW0gZm9yIGF0b21TaXplOyBpdCdzIG5v
IGFjY2lkZW50IHRoYXQgdGhleSBhcmUgdGhlIHNhbWUuCi0gICAgc3RhdGljIGNvbnN0IHNpemVf
dCBzaXplU3RlcCA9IE1hcmtlZEJsb2NrOjphdG9tU2l6ZTsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBzaXplU3RlcCA9IE1hcmtlZEJsb2NrOjphdG9tU2l6ZTsKICAgICAKICAgICAvLyBT
aXplcyB1cCB0byB0aGlzIGFtb3VudCBnZXQgYSBzaXplIGNsYXNzIGZvciBlYWNoIHNpemUgc3Rl
cC4KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHByZWNpc2VDdXRvZmYgPSA4MDsKKyAgICBzdGF0
aWMgY29uc3RleHByIHNpemVfdCBwcmVjaXNlQ3V0b2ZmID0gODA7CiAgICAgCi0gICAgLy8gVGhl
IGFtb3VudCBvZiBhdmFpbGFibGUgcGF5bG9hZCBpbiBhIGJsb2NrIGlzIHRoZSBibG9jaydzIHNp
emUgbWludXMgdGhlIGhlYWRlci4gQnV0IHRoZQorICAgIC8vIFRoZSBhbW91bnQgb2YgYXZhaWxh
YmxlIHBheWxvYWQgaW4gYSBibG9jayBpcyB0aGUgYmxvY2sncyBzaXplIG1pbnVzIHRoZSBmb290
ZXIuIEJ1dCB0aGUKICAgICAvLyBoZWFkZXIgc2l6ZSBtaWdodCBub3QgYmUgYXRvbSBzaXplIGFs
aWduZWQsIHNvIHdlIHJvdW5kIGRvd24gdGhlIHJlc3VsdCBhY2NvcmRpbmdseS4KLSAgICBzdGF0
aWMgY29uc3Qgc2l6ZV90IGJsb2NrUGF5bG9hZCA9IChNYXJrZWRCbG9jazo6YmxvY2tTaXplIC0g
c2l6ZW9mKE1hcmtlZEJsb2NrKSkgJiB+KE1hcmtlZEJsb2NrOjphdG9tU2l6ZSAtIDEpOworICAg
IHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGJsb2NrUGF5bG9hZCA9IChNYXJrZWRCbG9jazo6Ymxv
Y2tTaXplIC0gc2l6ZW9mKE1hcmtlZEJsb2NrOjpGb290ZXIpKSAmIH4oTWFya2VkQmxvY2s6OmF0
b21TaXplIC0gMSk7CiAgICAgCiAgICAgLy8gVGhlIGxhcmdlc3QgY2VsbCB3ZSdyZSB3aWxsaW5n
IHRvIGFsbG9jYXRlIGluIGEgTWFya2VkQmxvY2sgdGhlICJub3JtYWwgd2F5IiAoaS5lLiB1c2lu
ZyBzaXplCiAgICAgLy8gY2xhc3NlcywgcmF0aGVyIHRoYW4gYSBsYXJnZSBhbGxvY2F0aW9uKSBp
cyBoYWxmIHRoZSBzaXplIG9mIHRoZSBwYXlsb2FkLCByb3VuZGVkIGRvd24uIFRoaXMKICAgICAv
LyBlbnN1cmVzIHRoYXQgd2Ugb25seSB1c2UgdGhlIHNpemUgY2xhc3MgYXBwcm9hY2ggaWYgaXQg
bWVhbnMgYmVpbmcgYWJsZSB0byBwYWNrIHR3byB0aGluZ3MKICAgICAvLyBpbnRvIG9uZSBibG9j
ay4KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGxhcmdlQ3V0b2ZmID0gKGJsb2NrUGF5bG9hZCAv
IDIpICYgfihzaXplU3RlcCAtIDEpOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGxhcmdl
Q3V0b2ZmID0gKGJsb2NrUGF5bG9hZCAvIDIpICYgfihzaXplU3RlcCAtIDEpOwogCi0gICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBudW1TaXplQ2xhc3NlcyA9IGxhcmdlQ3V0b2ZmIC8gc2l6ZVN0ZXA7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbnVtU2l6ZUNsYXNzZXMgPSBsYXJnZUN1dG9m
ZiAvIHNpemVTdGVwOwogICAgIAotICAgIHN0YXRpYyBjb25zdCBIZWFwVmVyc2lvbiBudWxsVmVy
c2lvbiA9IDA7IC8vIFRoZSB2ZXJzaW9uIG9mIGZyZXNobHkgYWxsb2NhdGVkIGJsb2Nrcy4KLSAg
ICBzdGF0aWMgY29uc3QgSGVhcFZlcnNpb24gaW5pdGlhbFZlcnNpb24gPSAyOyAvLyBUaGUgdmVy
c2lvbiB0aGF0IHRoZSBoZWFwIHN0YXJ0cyBvdXQgd2l0aC4gU2V0IHRvIG1ha2Ugc3VyZSB0aGF0
IG5leHRWZXJzaW9uKG51bGxWZXJzaW9uKSAhPSBpbml0aWFsVmVyc2lvbi4KKyAgICBzdGF0aWMg
Y29uc3RleHByIEhlYXBWZXJzaW9uIG51bGxWZXJzaW9uID0gMDsgLy8gVGhlIHZlcnNpb24gb2Yg
ZnJlc2hseSBhbGxvY2F0ZWQgYmxvY2tzLgorICAgIHN0YXRpYyBjb25zdGV4cHIgSGVhcFZlcnNp
b24gaW5pdGlhbFZlcnNpb24gPSAyOyAvLyBUaGUgdmVyc2lvbiB0aGF0IHRoZSBoZWFwIHN0YXJ0
cyBvdXQgd2l0aC4gU2V0IHRvIG1ha2Ugc3VyZSB0aGF0IG5leHRWZXJzaW9uKG51bGxWZXJzaW9u
KSAhPSBpbml0aWFsVmVyc2lvbi4KICAgICAKICAgICBzdGF0aWMgSGVhcFZlcnNpb24gbmV4dFZl
cnNpb24oSGVhcFZlcnNpb24gdmVyc2lvbikKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
cmV2aXNpb24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTMwNyw3ICszMDcsNyBAQCBl
bmQKIF9oYW5kbGVVbmNhdWdodEV4Y2VwdGlvbjoKICAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2Fk
T2Zmc2V0W2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgbG9hZHAg
TWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0MworICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zm
c2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0M10sIHQzCiAgICAgcmVzdG9yZUNhbGxl
ZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHQzLCB0MCkKICAgICBsb2Fk
cCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdLCBjZnIKICAgICBzdG9yZXAgMCwgVk06OmNhbGxG
cmFtZUZvckNhdGNoW3QzXQpAQCAtNjM0LDcgKzYzNCw3IEBAIGVuZAogbWFjcm8gYnJhbmNoSWZF
eGNlcHRpb24obGFiZWwpCiAgICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0
MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwotICAgIGxvYWRwIE1hcmtlZEJsb2NrOjpt
X3ZtW3QzXSwgdDMKKyAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJs
b2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogICAgIGJ0aXogVk06Om1fZXhjZXB0aW9uW3QzXSwg
Lm5vRXhjZXB0aW9uCiAgICAgam1wIGxhYmVsCiAubm9FeGNlcHRpb246CkBAIC0yMDAwLDcgKzIw
MDAsNyBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAgICAgIyBhbmQgaGF2ZSBzZXQgVk06OnRhcmdldElu
dGVycHJldGVyUENGb3JUaHJvdy4KICAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nm
cl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgbG9hZHAgTWFya2VkQmxv
Y2s6Om1fdm1bdDNdLCB0MworICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFy
a2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0M10sIHQzCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJv
bVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHQzLCB0MCkKICAgICBsb2FkcCBWTTo6Y2Fs
bEZyYW1lRm9yQ2F0Y2hbdDNdLCBjZnIKICAgICBzdG9yZXAgMCwgVk06OmNhbGxGcmFtZUZvckNh
dGNoW3QzXQpAQCAtMjAxNSw3ICsyMDE1LDcgQEAgX2xsaW50X29wX2NhdGNoOgogLmlzQ2F0Y2hh
YmxlRXhjZXB0aW9uOgogICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMK
ICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92
bVt0M10sIHQzCisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9j
azo6Rm9vdGVyOjptX3ZtW3QzXSwgdDMKIAogICAgIGxvYWRpIFZNOjptX2V4Y2VwdGlvblt0M10s
IHQwCiAgICAgc3RvcmVpIDAsIFZNOjptX2V4Y2VwdGlvblt0M10KQEAgLTIwNTMsNyArMjA1Myw3
IEBAIF9sbGludF90aHJvd19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgogICAgICMgVGhpcyBl
c3NlbnRpYWxseSBlbXVsYXRlcyB0aGUgSklUJ3MgdGhyb3dpbmcgcHJvdG9jb2wuCiAgICAgbG9h
ZHAgQ2FsbGVlW2Nmcl0sIHQxCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQxCi0gICAgbG9h
ZHAgTWFya2VkQmxvY2s6Om1fdm1bdDFdLCB0MQorICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVy
T2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0MV0sIHQxCiAgICAgY29weUNhbGxl
ZVNhdmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MSwgdDIpCiAgICAgam1wIFZN
Ojp0YXJnZXRNYWNoaW5lUENGb3JUaHJvd1t0MV0KIApAQCAtMjA3Miw3ICsyMDcyLDcgQEAgbWFj
cm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgIGlmIFg4NiBvciBYODZf
V0lOCiAgICAgICAgIHN1YnAgOCwgc3AgIyBhbGlnbiBzdGFjayBwb2ludGVyCiAgICAgICAgIGFu
ZHAgTWFya2VkQmxvY2tNYXNrLCB0MQotICAgICAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0
MV0sIHQzCisgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxv
Y2s6OkZvb3Rlcjo6bV92bVt0MV0sIHQzCiAgICAgICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxs
RnJhbWVbdDNdCiAgICAgICAgIG1vdmUgY2ZyLCBhMCAgIyBhMCA9IGVjeAogICAgICAgICBzdG9y
ZXAgYTAsIFtzcF0KQEAgLTIwODIsNyArMjA4Miw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9s
aW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgY2FsbCBleGVjdXRhYmxlT2Zmc2V0VG9GdW5jdGlv
blt0MV0KICAgICAgICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0MwogICAg
ICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICAgICAgbG9hZHAgTWFya2VkQmxvY2s6
Om1fdm1bdDNdLCB0MworICAgICAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1h
cmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogICAgICAgICBhZGRwIDgsIHNwCiAgICAg
ZWxzaWYgQVJNIG9yIEFSTXY3IG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIENfTE9PUCBvciBNSVBT
CiAgICAgICAgIGlmIE1JUFMKQEAgLTIwOTUsNyArMjA5NSw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxU
cmFtcG9saW5lKGV4ZWN1dGFibGVPZmYKICAgICAgICAgZW5kCiAgICAgICAgICMgdDEgYWxyZWFk
eSBjb250YWlucyB0aGUgQ2FsbGVlLgogICAgICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDEK
LSAgICAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDFdLCB0MQorICAgICAgICBsb2FkcCBN
YXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDFdLCB0
MQogICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QxXQogICAgICAgICBtb3Zl
IGNmciwgYTAKICAgICAgICAgbG9hZGkgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0MQpA
QCAtMjEwOCw3ICsyMTA4LDcgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJs
ZU9mZgogICAgICAgICBlbmQKICAgICAgICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtj
ZnJdLCB0MwogICAgICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICAgICAgbG9hZHAg
TWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0MworICAgICAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rl
ck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogICAgICAgICBpZiBN
SVBTCiAgICAgICAgICAgICBhZGRwIDI0LCBzcAogICAgICAgICBlbHNlCkBAIC0yMTQwLDcgKzIx
NDAsNyBAQCBtYWNybyBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUob2ZmCiAgICAgaWYg
WDg2IG9yIFg4Nl9XSU4KICAgICAgICAgc3VicCA4LCBzcCAjIGFsaWduIHN0YWNrIHBvaW50ZXIK
ICAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQxCi0gICAgICAgIGxvYWRwIE1hcmtlZEJs
b2NrOjptX3ZtW3QxXSwgdDMKKyAgICAgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQg
KyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QxXSwgdDMKICAgICAgICAgc3RvcmVwIGNmciwg
Vk06OnRvcENhbGxGcmFtZVt0M10KICAgICAgICAgbW92ZSBjZnIsIGEwICAjIGEwID0gZWN4CiAg
ICAgICAgIHN0b3JlcCBhMCwgW3NwXQpAQCAtMjE0OSwxMyArMjE0OSwxMyBAQCBtYWNybyBpbnRl
cm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUob2ZmCiAgICAgICAgIGNhbGwgb2Zmc2V0T2ZGdW5j
dGlvblt0MV0KICAgICAgICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0Mwog
ICAgICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICAgICAgbG9hZHAgTWFya2VkQmxv
Y2s6Om1fdm1bdDNdLCB0MworICAgICAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCAr
IE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogICAgICAgICBhZGRwIDgsIHNwCiAg
ICAgZWxzaWYgQVJNIG9yIEFSTXY3IG9yIEFSTXY3X1RSQURJVElPTkFMIG9yIENfTE9PUCBvciBN
SVBTCiAgICAgICAgIHN1YnAgOCwgc3AgIyBhbGlnbiBzdGFjayBwb2ludGVyCiAgICAgICAgICMg
dDEgYWxyZWFkeSBjb250YWlucyB0aGUgQ2FsbGVlLgogICAgICAgICBhbmRwIE1hcmtlZEJsb2Nr
TWFzaywgdDEKLSAgICAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDFdLCB0MQorICAgICAg
ICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1f
dm1bdDFdLCB0MQogICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QxXQogICAg
ICAgICBtb3ZlIGNmciwgYTAKICAgICAgICAgbG9hZGkgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtj
ZnJdLCB0MQpAQCAtMjE2Nyw3ICsyMTY3LDcgQEAgbWFjcm8gaW50ZXJuYWxGdW5jdGlvbkNhbGxU
cmFtcG9saW5lKG9mZgogICAgICAgICBlbmQKICAgICAgICAgbG9hZHAgQ2FsbGVlICsgUGF5bG9h
ZE9mZnNldFtjZnJdLCB0MwogICAgICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICAg
ICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0MworICAgICAgICBsb2FkcCBNYXJrZWRC
bG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogICAg
ICAgICBhZGRwIDgsIHNwCiAgICAgZWxzZQogICAgICAgICBlcnJvcgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDIyNzcxNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC0yODAsNyArMjgwLDcgQEAgZW5k
CiBfaGFuZGxlVW5jYXVnaHRFeGNlcHRpb246CiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAg
ICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1b
dDNdLCB0MworICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6
OkZvb3Rlcjo6bV92bVt0M10sIHQzCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlG
cmFtZUNhbGxlZVNhdmVzQnVmZmVyKHQzLCB0MCkKICAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9y
Q2F0Y2hbdDNdLCBjZnIKICAgICBzdG9yZXAgMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXQpA
QCAtNTYxLDcgKzU2MSw3IEBAIGVuZAogbWFjcm8gYnJhbmNoSWZFeGNlcHRpb24obGFiZWwpCiAg
ICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCi0g
ICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0MworICAgIGxvYWRwIE1hcmtlZEJsb2Nr
Rm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0M10sIHQzCiAgICAgYnRx
eiBWTTo6bV9leGNlcHRpb25bdDNdLCAubm9FeGNlcHRpb24KICAgICBqbXAgbGFiZWwKIC5ub0V4
Y2VwdGlvbjoKQEAgLTIwMDIsNyArMjAwMiw3IEBAIF9sbGludF9vcF9jYXRjaDoKICAgICAjIGFu
ZCBoYXZlIHNldCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93LgogICAgIGxvYWRwIENh
bGxlZVtjZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwotICAgIGxvYWRwIE1h
cmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNl
dCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogICAgIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih0MywgdDApCiAgICAgbG9hZHAg
Vk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXSwgY2ZyCiAgICAgc3RvcmVwIDAsIFZNOjpjYWxsRnJh
bWVGb3JDYXRjaFt0M10KQEAgLTIwMjIsNyArMjAyMiw3IEBAIF9sbGludF9vcF9jYXRjaDoKIC5p
c0NhdGNoYWJsZUV4Y2VwdGlvbjoKICAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMKICAgICBhbmRw
IE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10sIHQz
CisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVy
OjptX3ZtW3QzXSwgdDMKIAogICAgIGxvYWRxIFZNOjptX2V4Y2VwdGlvblt0M10sIHQwCiAgICAg
c3RvcmVxIDAsIFZNOjptX2V4Y2VwdGlvblt0M10KQEAgLTIwNTIsNyArMjA1Miw3IEBAIF9sbGlu
dF9vcF9lbmQ6CiBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKICAgICBs
b2FkcCBDYWxsZWVbY2ZyXSwgdDEKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDEKLSAgICBs
b2FkcCBNYXJrZWRCbG9jazo6bV92bVt0MV0sIHQxCisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290
ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QxXSwgdDEKICAgICBjb3B5Q2Fs
bGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHQxLCB0MikKIAogICAgIGNh
bGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX2hhbmRsZV9leGNlcHRpb24pCkBAIC0yMDYyLDcg
KzIwNjIsNyBAQCBfbGxpbnRfdGhyb3dfZnJvbV9zbG93X3BhdGhfdHJhbXBvbGluZToKICAgICAj
IFRoaXMgZXNzZW50aWFsbHkgZW11bGF0ZXMgdGhlIEpJVCdzIHRocm93aW5nIHByb3RvY29sLgog
ICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MQogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MQot
ICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICBsb2FkcCBNYXJrZWRCbG9j
a0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDFdLCB0MQogICAgIGpt
cCBWTTo6dGFyZ2V0TWFjaGluZVBDRm9yVGhyb3dbdDFdCiAKIApAQCAtMjA3Nyw3ICsyMDc3LDcg
QEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAgIHN0b3JlcCAw
LCBDb2RlQmxvY2tbY2ZyXQogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MAogICAgIGFuZHAgTWFy
a2VkQmxvY2tNYXNrLCB0MCwgdDEKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0MV0sIHQx
CisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVy
OjptX3ZtW3QxXSwgdDEKICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QxXQogICAg
IGlmIEFSTTY0IG9yIENfTE9PUAogICAgICAgICBzdG9yZXAgbHIsIFJldHVyblBDW2Nmcl0KQEAg
LTIxMDQsNyArMjEwNCw3IEBAIG1hY3JvIG5hdGl2ZUNhbGxUcmFtcG9saW5lKGV4ZWN1dGFibGVP
ZmYKIAogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNr
LCB0MwotICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAgICBsb2FkcCBNYXJr
ZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0Mwog
CiAgICAgYnRxbnogVk06Om1fZXhjZXB0aW9uW3QzXSwgLmhhbmRsZUV4Y2VwdGlvbgogCkBAIC0y
MTIxLDcgKzIxMjEsNyBAQCBtYWNybyBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUob2Zm
CiAgICAgc3RvcmVwIDAsIENvZGVCbG9ja1tjZnJdCiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQw
CiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQwLCB0MQotICAgIGxvYWRwIE1hcmtlZEJsb2Nr
OjptX3ZtW3QxXSwgdDEKKyAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtl
ZEJsb2NrOjpGb290ZXI6Om1fdm1bdDFdLCB0MQogICAgIHN0b3JlcCBjZnIsIFZNOjp0b3BDYWxs
RnJhbWVbdDFdCiAgICAgaWYgQVJNNjQgb3IgQ19MT09QCiAgICAgICAgIHN0b3JlcCBsciwgUmV0
dXJuUENbY2ZyXQpAQCAtMjE0Nyw3ICsyMTQ3LDcgQEAgbWFjcm8gaW50ZXJuYWxGdW5jdGlvbkNh
bGxUcmFtcG9saW5lKG9mZgogCiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAgICAgYW5kcCBN
YXJrZWRCbG9ja01hc2ssIHQzCi0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0Mwor
ICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6
bV92bVt0M10sIHQzCiAKICAgICBidHFueiBWTTo6bV9leGNlcHRpb25bdDNdLCAuaGFuZGxlRXhj
ZXB0aW9uCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDIyNzcxNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAt
NDM2LDYgKzQzNiw3IEBAIGNvbnN0IE5vdEluaXRpYWxpemF0aW9uID0gY29uc3RleHByIEluaXQK
IAogY29uc3QgTWFya2VkQmxvY2tTaXplID0gY29uc3RleHByIE1hcmtlZEJsb2NrOjpibG9ja1Np
emUKIGNvbnN0IE1hcmtlZEJsb2NrTWFzayA9IH4oTWFya2VkQmxvY2tTaXplIC0gMSkKK2NvbnN0
IE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ID0gY29uc3RleHByIE1hcmtlZEJsb2NrOjpvZmZzZXRP
ZkZvb3RlcgogCiBjb25zdCBCbGFja1RocmVzaG9sZCA9IGNvbnN0ZXhwciBibGFja1RocmVzaG9s
ZAogCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>332484</attachid>
            <date>2018-01-27 14:20:51 -0800</date>
            <delta_ts>2018-01-27 15:13:24 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>48375</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjI3NzE2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDg2IEBA
CisyMDE4LTAxLTI3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
TWFya2VkQmxvY2sgc2hvdWxkIGhhdmUgYSBmb290ZXIgaW5zdGVhZCBvZiBhIGhlYWRlcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTgyMjE3CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUaGlz
IG1vdmVzIHRoZSBNYXJrZWRCbG9jaydzIG1ldGEtZGF0YSBmcm9tIHRoZSBoZWFkZXIgdG8gdGhl
IGZvb3Rlci4gVGhpcyBkb2Vzbid0IHJlYWxseQorICAgICAgICBjaGFuZ2UgYW55dGhpbmcgZXhj
ZXB0IGZvciBzb21lIGNvbXBpbGUtdGltZSBjb25zdGFudHMsIHNvIGl0IHNob3VsZCBub3QgYWZm
ZWN0IHBlcmZvcm1hbmNlLgorICAgICAgICAKKyAgICAgICAgVGhpcyBjaGFuZ2UgaXMgdG8gaGVs
cCBwcm90ZWN0IGFnYWluc3QgU3BlY3RyZSBhdHRhY2tzIG9uIHN0cnVjdHVyZSBjaGVja3MsIHdo
aWNoIGFsbG93IGZvcgorICAgICAgICBzbWFsbC1vZmZzZXQgb3V0LW9mLWJvdW5kcyBhY2Nlc3Mu
IEJ5IHB1dHRpbmcgdGhlIG1ldGEtZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBibG9jaywgc21hbGwK
KyAgICAgICAgT09CcyB3aWxsIG9ubHkgZ2V0IHRvIG90aGVyIG9iamVjdHMgaW4gdGhlIHNhbWUg
YmxvY2sgb3IgdGhlIGJsb2NrIGZvb3Rlci4gVGhlIGJsb2NrIGZvb3RlcgorICAgICAgICBpcyBu
b3Qgc3VwZXIgaW50ZXJlc3RpbmcuIFNvLCBpZiB3ZSBjb21iaW5lIHRoaXMgd2l0aCB0aGUgVExD
IGNoYW5nZSAocjIyNzYxNyksIHRoaXMgbWVhbnMgd2UKKyAgICAgICAgY2FuIHVzZSBibG9ja3Mg
YXMgdGhlIG1lY2hhbmlzbSBvZiBhY2hpZXZpbmcgZGlzdGFuY2UgYmV0d2VlbiBvYmplY3RzIGZy
b20gZGlmZmVyZW50IG9yaWdpbnMuCisgICAgICAgIFdlIGp1c3QgbmVlZCB0byBhdm9pZCBldmVy
IHB1dHRpbmcgb2JqZWN0cyBmcm9tIGRpZmZlcmVudCBvcmlnaW5zIGluIHRoZSBzYW1lIGJsb2Nr
LiBUaGF0J3MKKyAgICAgICAgd2hhdCBidWcgMTgxNjM2IGlzIGFib3V0LgorICAgICAgICAKKyAg
ICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5LmNwcDoKKyAgICAgICAgKEpTQzo6YmxvY2tIZWFk
ZXJTaXplKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QmxvY2tEaXJlY3Rvcnk6OmJsb2NrU2l6
ZUZvckJ5dGVzKTogRGVsZXRlZC4KKyAgICAgICAgKiBoZWFwL0Jsb2NrRGlyZWN0b3J5Lmg6Cisg
ICAgICAgICogaGVhcC9IZWFwVXRpbC5oOgorICAgICAgICAoSlNDOjpIZWFwVXRpbDo6ZmluZEdD
T2JqZWN0UG9pbnRlcnNGb3JNYXJraW5nKToKKyAgICAgICAgKiBoZWFwL01hcmtlZEJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Ok1hcmtlZEJsb2NrKToKKyAgICAgICAgKEpT
Qzo6TWFya2VkQmxvY2s6On5NYXJrZWRCbG9jayk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2Nr
OjpGb290ZXI6OkZvb3Rlcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpGb290ZXI6On5G
b290ZXIpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpzdG9wQWxsb2NhdGlu
Zyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6Omxhc3RDaGFuY2VUb0ZpbmFs
aXplKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGlu
Zyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3cpOgorICAgICAg
ICAoSlNDOjpNYXJrZWRCbG9jazo6cmVzZXRNYXJrcyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJs
b2NrOjphc3NlcnRNYXJrc05vdFN0YWxlKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Okhh
bmRsZTo6ZGlkQ29uc3VtZUZyZWVMaXN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om1h
cmtDb3VudCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjbGVhckhhc0FueU1hcmtlZCk6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpZEFkZFRvRGlyZWN0b3J5KToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6ZGlkUmVtb3ZlRnJvbURpcmVjdG9y
eSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OnN3ZWVwKToKKyAgICAgICAg
KiBoZWFwL01hcmtlZEJsb2NrLmg6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjptYXJraW5n
VmVyc2lvbiBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpsb2NrKToKKyAgICAg
ICAgKEpTQzo6TWFya2VkQmxvY2s6OnN1YnNwYWNlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFy
a2VkQmxvY2s6OmZvb3Rlcik6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpmb290ZXIgY29u
c3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6aGFuZGxlKToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmhhbmRsZSBjb25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpI
YW5kbGU6OmJsb2NrRm9vdGVyKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OmlzQXRvbUFs
aWduZWQpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6SGFuZGxlOjpjZWxsQWxpZ24pOgor
ICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tGb3IpOgorICAgICAgICAoSlNDOjpNYXJr
ZWRCbG9jazo6dm0gY29uc3QpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6d2Vha1NldCk6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjZWxsU2l6ZSk6CisgICAgICAgIChKU0M6Ok1h
cmtlZEJsb2NrOjphdHRyaWJ1dGVzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OmF0b21OdW1iZXIpOgorICAgICAgICAoSlNDOjpNYXJrZWRCbG9jazo6YXJlTWFya3NTdGFsZSk6
CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjphYm91dFRvTWFyayk6CisgICAgICAgIChKU0M6
Ok1hcmtlZEJsb2NrOjppc01hcmtlZFJhdyk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpp
c01hcmtlZCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjp0ZXN0QW5kU2V0TWFya2VkKToK
KyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om1hcmtzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
TWFya2VkQmxvY2s6OmlzQXRvbSk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6
OmZvckVhY2hDZWxsKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Omhhc0FueU1hcmtlZCBj
b25zdCk6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpub3RlTWFya2VkKToKKyAgICAgICAg
KFdURjo6TWFya2VkQmxvY2tIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6
OmZpcnN0QXRvbSk6IERlbGV0ZWQuCisgICAgICAgICogaGVhcC9NYXJrZWRCbG9ja0lubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6Om1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdN
YXJraW5nKToKKyAgICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6aXNMaXZlKToKKyAg
ICAgICAgKEpTQzo6TWFya2VkQmxvY2s6OkhhbmRsZTo6c3BlY2lhbGl6ZWRTd2VlcCk6CisgICAg
ICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hMaXZlQ2VsbCk6CisgICAgICAg
IChKU0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hEZWFkQ2VsbCk6CisgICAgICAgIChK
U0M6Ok1hcmtlZEJsb2NrOjpIYW5kbGU6OmZvckVhY2hNYXJrZWRDZWxsKToKKyAgICAgICAgKiBo
ZWFwL01hcmtlZFNwYWNlLmNwcDoKKyAgICAgICAgKiBoZWFwL01hcmtlZFNwYWNlLmg6CisgICAg
ICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVy
cHJldGVyNjQuYXNtOgorCiAyMDE4LTAxLTI3ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPgogCiAgICAgICAgIERGRyBzdHJlbmd0aCByZWR1Y3Rpb24gZmFpbHMgdG8gY29u
dmVydCBOdW1iZXJUb1N0cmluZ1dpdGhWYWxpZFJhZGl4Q29uc3RhbnQgZm9yIDAgdG8gY29uc3Rh
bnQgJzAnCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3Rv
cnkuY3BwCShyZXZpc2lvbiAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9C
bG9ja0RpcmVjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTkwLDE5ICs5MCw2IEBAIE1hcmtl
ZEJsb2NrOjpIYW5kbGUqIEJsb2NrRGlyZWN0b3J5OjpmaW4KICAgICByZXR1cm4gbV9ibG9ja3Nb
bV9hbGxvY2F0aW9uQ3Vyc29yXTsKIH0KIAotc3RhdGljIHNpemVfdCBibG9ja0hlYWRlclNpemUo
KQotewotICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2VkQmxvY2s6OmF0
b21TaXplPihzaXplb2YoTWFya2VkQmxvY2spKTsKLX0KLQotc2l6ZV90IEJsb2NrRGlyZWN0b3J5
OjpibG9ja1NpemVGb3JCeXRlcyhzaXplX3QgYnl0ZXMpCi17Ci0gICAgc2l6ZV90IG1pbkJsb2Nr
U2l6ZSA9IE1hcmtlZEJsb2NrOjpibG9ja1NpemU7Ci0gICAgc2l6ZV90IG1pbkFsbG9jYXRpb25T
aXplID0gYmxvY2tIZWFkZXJTaXplKCkgKyBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8TWFya2Vk
QmxvY2s6OmF0b21TaXplPihieXRlcyk7Ci0gICAgbWluQWxsb2NhdGlvblNpemUgPSBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2YoV1RGOjpwYWdlU2l6ZSgpLCBtaW5BbGxvY2F0aW9uU2l6ZSk7Ci0g
ICAgcmV0dXJuIHN0ZDo6bWF4KG1pbkJsb2NrU2l6ZSwgbWluQWxsb2NhdGlvblNpemUpOwotfQot
CiBNYXJrZWRCbG9jazo6SGFuZGxlKiBCbG9ja0RpcmVjdG9yeTo6dHJ5QWxsb2NhdGVCbG9jaygp
CiB7CiAgICAgU3VwZXJTYW1wbGVyU2NvcGUgc3VwZXJTYW1wbGVyU2NvcGUoZmFsc2UpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvQmxvY2tEaXJlY3RvcnkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5oCShyZXZpc2lv
biAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9CbG9ja0RpcmVjdG9yeS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xMTMsOCArMTEzLDYgQEAgcHVibGljOgogCiAgICAgYm9vbCBp
c1BhZ2VkT3V0KGRvdWJsZSBkZWFkbGluZSk7CiAgICAgCi0gICAgc3RhdGljIHNpemVfdCBibG9j
a1NpemVGb3JCeXRlcyhzaXplX3QpOwotICAgIAogICAgIExvY2smIGJpdHZlY3RvckxvY2soKSB7
IHJldHVybiBtX2JpdHZlY3RvckxvY2s7IH0KIAogI2RlZmluZSBCTE9DS19ESVJFQ1RPUllfQklU
X0FDQ0VTU09SUyhsb3dlckJpdE5hbWUsIGNhcGl0YWxCaXROYW1lKSAgICAgXApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcFV0aWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCShyZXZpc2lvbiAyMjc3MTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwVXRpbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUg
KzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTEyNCw3ICsx
MjQsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgICAgIC8vIEFsc28sIGEgYnV0dGVyZmx5IGNvdWxk
IHBvaW50IGF0IHRoZSBlbmQgb2YgYW4gb2JqZWN0IHBsdXMgc2l6ZW9mKEluZGV4aW5nSGVhZGVy
KS4gSW4gdGhhdAogICAgICAgICAvLyBjYXNlLCB0aGlzIGlzIHBvaW50aW5nIHRvIHRoZSBvYmpl
Y3QgdG8gdGhlIHJpZ2h0IG9mIHRoZSBvbmUgd2Ugc2hvdWxkIGJlIG1hcmtpbmcuCi0gICAgICAg
IGlmIChjYW5kaWRhdGUtPmF0b21OdW1iZXIoYWxpZ25lZFBvaW50ZXIpID4gTWFya2VkQmxvY2s6
OmZpcnN0QXRvbSgpCisgICAgICAgIGlmIChjYW5kaWRhdGUtPmF0b21OdW1iZXIoYWxpZ25lZFBv
aW50ZXIpID4gMAogICAgICAgICAgICAgJiYgcG9pbnRlciA8PSBhbGlnbmVkUG9pbnRlciArIHNp
emVvZihJbmRleGluZ0hlYWRlcikpCiAgICAgICAgICAgICB0cnlQb2ludGVyKGFsaWduZWRQb2lu
dGVyIC0gY2FuZGlkYXRlLT5jZWxsU2l6ZSgpKTsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCShyZXZpc2lvbiAyMjc3MTYpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg2LDEyICs4NiwyNiBAQCBNYXJrZWRCbG9jazo6SGFuZGxlOjp+SGFuZGxlKCkKIH0KIAogTWFy
a2VkQmxvY2s6Ok1hcmtlZEJsb2NrKFZNJiB2bSwgSGFuZGxlJiBoYW5kbGUpCit7CisgICAgbmV3
ICgmZm9vdGVyKCkpIEZvb3Rlcih2bSwgaGFuZGxlKTsKKyAgICBpZiAoZmFsc2UpCisgICAgICAg
IGRhdGFMb2coUmF3UG9pbnRlcih0aGlzKSwgIjogQWxsb2NhdGVkLlxuIik7Cit9CisKK01hcmtl
ZEJsb2NrOjp+TWFya2VkQmxvY2soKQoreworICAgIGZvb3RlcigpLn5Gb290ZXIoKTsKK30KKwor
TWFya2VkQmxvY2s6OkZvb3Rlcjo6Rm9vdGVyKFZNJiB2bSwgSGFuZGxlJiBoYW5kbGUpCiAgICAg
OiBtX2hhbmRsZShoYW5kbGUpCiAgICAgLCBtX3ZtKCZ2bSkKICAgICAsIG1fbWFya2luZ1ZlcnNp
b24oTWFya2VkU3BhY2U6Om51bGxWZXJzaW9uKQogewotICAgIGlmIChmYWxzZSkKLSAgICAgICAg
ZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBBbGxvY2F0ZWQuXG4iKTsKK30KKworTWFya2Vk
QmxvY2s6OkZvb3Rlcjo6fkZvb3RlcigpCit7CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRs
ZTo6dW5zd2VlcFdpdGhOb05ld2x5QWxsb2NhdGVkKCkKQEAgLTEwOCw3ICsxMjIsNyBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNldElzRnJlZUxpc3RlCiAKIHZvaWQgTWFya2VkQmxvY2s6
OkhhbmRsZTo6c3RvcEFsbG9jYXRpbmcoY29uc3QgRnJlZUxpc3QmIGZyZWVMaXN0KQogewotICAg
IGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2soKS5tX2xvY2spOworICAgIGF1dG8gbG9ja2Vy
ID0gaG9sZExvY2soYmxvY2tGb290ZXIoKS5tX2xvY2spOwogICAgIAogICAgIGlmIChmYWxzZSkK
ICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBNYXJrZWRCbG9jazo6SGFuZGxl
OjpzdG9wQWxsb2NhdGluZyFcbiIpOwpAQCAtMTU1LDkgKzE2OSw5IEBAIHZvaWQgTWFya2VkQmxv
Y2s6OkhhbmRsZTo6bGFzdENoYW5jZVRvRmkKIHsKICAgICBkaXJlY3RvcnkoKS0+c2V0SXNBbGxv
Y2F0ZWQoTm9Mb2NraW5nTmVjZXNzYXJ5LCB0aGlzLCBmYWxzZSk7CiAgICAgZGlyZWN0b3J5KCkt
PnNldElzRGVzdHJ1Y3RpYmxlKE5vTG9ja2luZ05lY2Vzc2FyeSwgdGhpcywgdHJ1ZSk7Ci0gICAg
bV9ibG9jay0+bV9tYXJrcy5jbGVhckFsbCgpOwotICAgIG1fYmxvY2stPmNsZWFySGFzQW55TWFy
a2VkKCk7Ci0gICAgbV9ibG9jay0+bV9tYXJraW5nVmVyc2lvbiA9IGhlYXAoKS0+b2JqZWN0U3Bh
Y2UoKS5tYXJraW5nVmVyc2lvbigpOworICAgIGJsb2NrRm9vdGVyKCkubV9tYXJrcy5jbGVhckFs
bCgpOworICAgIGJsb2NrKCkuY2xlYXJIYXNBbnlNYXJrZWQoKTsKKyAgICBibG9ja0Zvb3Rlcigp
Lm1fbWFya2luZ1ZlcnNpb24gPSBoZWFwKCktPm9iamVjdFNwYWNlKCkubWFya2luZ1ZlcnNpb24o
KTsKICAgICBtX3dlYWtTZXQubGFzdENoYW5jZVRvRmluYWxpemUoKTsKICAgICBtX25ld2x5QWxs
b2NhdGVkLmNsZWFyQWxsKCk7CiAgICAgbV9uZXdseUFsbG9jYXRlZFZlcnNpb24gPSBoZWFwKCkt
Pm9iamVjdFNwYWNlKCkubmV3bHlBbGxvY2F0ZWRWZXJzaW9uKCk7CkBAIC0xNjcsNyArMTgxLDcg
QEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpsYXN0Q2hhbmNlVG9GaQogdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpyZXN1bWVBbGxvY2F0aW5nKEZyZWVMaXN0JiBmcmVlTGlzdCkKIHsKICAg
ICB7Ci0gICAgICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2soKS5tX2xvY2spOworICAg
ICAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJsb2NrRm9vdGVyKCkubV9sb2NrKTsKICAgICAg
ICAgCiAgICAgICAgIGlmIChmYWxzZSkKICAgICAgICAgICAgIGRhdGFMb2coUmF3UG9pbnRlcih0
aGlzKSwgIjogTWFya2VkQmxvY2s6OkhhbmRsZTo6cmVzdW1lQWxsb2NhdGluZyFcbiIpOwpAQCAt
MjAwLDcgKzIxNCw3IEBAIHZvaWQgTWFya2VkQmxvY2s6OkhhbmRsZTo6emFwKGNvbnN0IEZyZWUK
IHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbikKIHsKICAgICBBU1NFUlQodm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLmlzTWFya2luZygp
KTsKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKG1fbG9jayk7CisgICAgYXV0byBsb2NrZXIg
PSBob2xkTG9jayhmb290ZXIoKS5tX2xvY2spOwogICAgIAogICAgIGlmICghYXJlTWFya3NTdGFs
ZShtYXJraW5nVmVyc2lvbikpCiAgICAgICAgIHJldHVybjsKQEAgLTIxNyw3ICsyMzEsNyBAQCB2
b2lkIE1hcmtlZEJsb2NrOjphYm91dFRvTWFya1Nsb3coSGVhcFZlCiAgICAgICAgIC8vIGRhdGUg
dmVyc2lvbiEgSWYgaXQgZG9lcywgdGhlbiB3ZSB3YW50IHRvIGxlYXZlIHRoZSBuZXdseUFsbG9j
YXRlZCBhbG9uZSwgc2luY2UgdGhhdAogICAgICAgICAvLyBtZWFucyB0aGF0IHdlIGhhZCBhbGxv
Y2F0ZWQgaW4gdGhpcyBwcmV2aW91c2x5IGVtcHR5IGJsb2NrIGJ1dCBkaWQgbm90IGZpbGwgaXQg
dXAsIHNvCiAgICAgICAgIC8vIHdlIGNyZWF0ZWQgYSBuZXdseUFsbG9jYXRlZC4KLSAgICAgICAg
bV9tYXJrcy5jbGVhckFsbCgpOworICAgICAgICBmb290ZXIoKS5tX21hcmtzLmNsZWFyQWxsKCk7
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKGZhbHNlKQogICAgICAgICAgICAgZGF0YUxvZyhS
YXdQb2ludGVyKHRoaXMpLCAiOiBEb2luZyB0aGluZ3MuXG4iKTsKQEAgLTIzMCwxNiArMjQ0LDE2
IEBAIHZvaWQgTWFya2VkQmxvY2s6OmFib3V0VG9NYXJrU2xvdyhIZWFwVmUKICAgICAgICAgICAg
IC8vIGNhbm5vdCBiZSBsYXN0Q2hhbmNlVG9GaW5hbGl6ZS4gU28gaXQgbXVzdCBiZSBzdG9wQWxs
b2NhdGluZy4gVGhhdCBtZWFucyB0aGF0IHdlIGp1c3QKICAgICAgICAgICAgIC8vIGNvbXB1dGVk
IHRoZSBuZXdseUFsbG9jYXRlZCBiaXRzIGp1c3QgYmVmb3JlIHRoZSBzdGFydCBvZiBhbiBpbmNy
ZW1lbnQuIFdoZW4gd2UgYXJlIGluIHRoYXQKICAgICAgICAgICAgIC8vIG1vZGUsIGl0IHNlZW1z
IGFzIGlmIG5ld2x5QWxsb2NhdGVkIHNob3VsZCBzdWJzdW1lIG1hcmtzLgotICAgICAgICAgICAg
QVNTRVJUKGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWQuc3Vic3VtZXMobV9tYXJrcykpOwotICAg
ICAgICAgICAgbV9tYXJrcy5jbGVhckFsbCgpOworICAgICAgICAgICAgQVNTRVJUKGhhbmRsZSgp
Lm1fbmV3bHlBbGxvY2F0ZWQuc3Vic3VtZXMoZm9vdGVyKCkubV9tYXJrcykpOworICAgICAgICAg
ICAgZm9vdGVyKCkubV9tYXJrcy5jbGVhckFsbCgpOwogICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgaGFuZGxlKCkubV9uZXdseUFsbG9jYXRlZC5zZXRBbmRDbGVhcihtX21hcmtzKTsKKyAg
ICAgICAgICAgIGhhbmRsZSgpLm1fbmV3bHlBbGxvY2F0ZWQuc2V0QW5kQ2xlYXIoZm9vdGVyKCku
bV9tYXJrcyk7CiAgICAgICAgICAgICBoYW5kbGUoKS5tX25ld2x5QWxsb2NhdGVkVmVyc2lvbiA9
IG5ld2x5QWxsb2NhdGVkVmVyc2lvbjsKICAgICAgICAgfQogICAgIH0KICAgICBjbGVhckhhc0Fu
eU1hcmtlZCgpOwogICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7Ci0gICAgbV9tYXJraW5nVmVy
c2lvbiA9IG1hcmtpbmdWZXJzaW9uOworICAgIGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb24gPSBt
YXJraW5nVmVyc2lvbjsKICAgICAKICAgICAvLyBUaGlzIG1lYW5zIHdlJ3JlIHRoZSBmaXJzdCBv
bmVzIHRvIG1hcmsgYW55IG9iamVjdCBpbiB0aGlzIGJsb2NrLgogICAgIGRpcmVjdG9yeS0+c2V0
SXNNYXJraW5nTm90RW1wdHkoaG9sZExvY2soZGlyZWN0b3J5LT5iaXR2ZWN0b3JMb2NrKCkpLCAm
aGFuZGxlKCksIHRydWUpOwpAQCAtMjYwLDE0ICsyNzQsMTQgQEAgdm9pZCBNYXJrZWRCbG9jazo6
cmVzZXRNYXJrcygpCiAgICAgLy8gdmVyc2lvbiBpcyBudWxsLCBhYm91dFRvTWFya1Nsb3coKSB3
aWxsIGFzc3VtZSB0aGF0IHRoZSBtYXJrcyB3ZXJlIG5vdCBzdGFsZSBhcyBvZiBiZWZvcmUKICAg
ICAvLyBiZWdpbk1hcmtpbmcoKS4gSGVuY2UgdGhlIG5lZWQgdG8gd2hpcCB0aGUgbWFya3MgaW50
byBzaGFwZS4KICAgICBpZiAoYXJlTWFya3NTdGFsZSgpKQotICAgICAgICBtX21hcmtzLmNsZWFy
QWxsKCk7Ci0gICAgbV9tYXJraW5nVmVyc2lvbiA9IE1hcmtlZFNwYWNlOjpudWxsVmVyc2lvbjsK
KyAgICAgICAgZm9vdGVyKCkubV9tYXJrcy5jbGVhckFsbCgpOworICAgIGZvb3RlcigpLm1fbWFy
a2luZ1ZlcnNpb24gPSBNYXJrZWRTcGFjZTo6bnVsbFZlcnNpb247CiB9CiAKICNpZiAhQVNTRVJU
X0RJU0FCTEVECiB2b2lkIE1hcmtlZEJsb2NrOjphc3NlcnRNYXJrc05vdFN0YWxlKCkKIHsKLSAg
ICBBU1NFUlQobV9tYXJraW5nVmVyc2lvbiA9PSB2bSgpLT5oZWFwLm9iamVjdFNwYWNlKCkubWFy
a2luZ1ZlcnNpb24oKSk7CisgICAgQVNTRVJUKGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb24gPT0g
dm0oKS0+aGVhcC5vYmplY3RTcGFjZSgpLm1hcmtpbmdWZXJzaW9uKCkpOwogfQogI2VuZGlmIC8v
ICFBU1NFUlRfRElTQUJMRUQKIApAQCAtMjg4LDcgKzMwMiw3IEBAIGJvb2wgTWFya2VkQmxvY2s6
OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAKIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRD
b25zdW1lRnJlZUxpc3QoKQogewotICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2soKS5t
X2xvY2spOworICAgIGF1dG8gbG9ja2VyID0gaG9sZExvY2soYmxvY2tGb290ZXIoKS5tX2xvY2sp
OwogICAgIGlmIChmYWxzZSkKICAgICAgICAgZGF0YUxvZyhSYXdQb2ludGVyKHRoaXMpLCAiOiBN
YXJrZWRCbG9jazo6SGFuZGxlOjpkaWRDb25zdW1lRnJlZUxpc3QhXG4iKTsKICAgICBBU1NFUlQo
aXNGcmVlTGlzdGVkKCkpOwpAQCAtMjk4LDEyICszMTIsMTIgQEAgdm9pZCBNYXJrZWRCbG9jazo6
SGFuZGxlOjpkaWRDb25zdW1lRnJlZQogCiBzaXplX3QgTWFya2VkQmxvY2s6Om1hcmtDb3VudCgp
CiB7Ci0gICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUoKSA/IDAgOiBtX21hcmtzLmNvdW50KCk7Cisg
ICAgcmV0dXJuIGFyZU1hcmtzU3RhbGUoKSA/IDAgOiBmb290ZXIoKS5tX21hcmtzLmNvdW50KCk7
CiB9CiAKIHZvaWQgTWFya2VkQmxvY2s6OmNsZWFySGFzQW55TWFya2VkKCkKIHsKLSAgICBtX2Jp
YXNlZE1hcmtDb3VudCA9IG1fbWFya0NvdW50QmlhczsKKyAgICBmb290ZXIoKS5tX2JpYXNlZE1h
cmtDb3VudCA9IGZvb3RlcigpLm1fbWFya0NvdW50QmlhczsKIH0KIAogdm9pZCBNYXJrZWRCbG9j
azo6bm90ZU1hcmtlZFNsb3coKQpAQCAtMzI5LDExICszNDMsMTEgQEAgdm9pZCBNYXJrZWRCbG9j
azo6SGFuZGxlOjpkaWRBZGRUb0RpcmVjdAogICAgIAogICAgIG1faW5kZXggPSBpbmRleDsKICAg
ICBtX2RpcmVjdG9yeSA9IGRpcmVjdG9yeTsKLSAgICBtX2Jsb2NrLT5tX3N1YnNwYWNlID0gZGly
ZWN0b3J5LT5zdWJzcGFjZSgpOworICAgIGJsb2NrRm9vdGVyKCkubV9zdWJzcGFjZSA9IGRpcmVj
dG9yeS0+c3Vic3BhY2UoKTsKICAgICAKICAgICBzaXplX3QgY2VsbFNpemUgPSBkaXJlY3Rvcnkt
PmNlbGxTaXplKCk7CiAgICAgbV9hdG9tc1BlckNlbGwgPSAoY2VsbFNpemUgKyBhdG9tU2l6ZSAt
IDEpIC8gYXRvbVNpemU7Ci0gICAgbV9lbmRBdG9tID0gYXRvbXNQZXJCbG9jayAtIG1fYXRvbXNQ
ZXJDZWxsICsgMTsKKyAgICBtX2VuZEF0b20gPSBlbmRBdG9tIC0gbV9hdG9tc1BlckNlbGwgKyAx
OwogICAgIAogICAgIG1fYXR0cmlidXRlcyA9IGRpcmVjdG9yeS0+YXR0cmlidXRlcygpOwogCkBA
IC0zNDcsNyArMzYxLDcgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRBZGRUb0RpcmVj
dAogICAgIFJFTEVBU0VfQVNTRVJUKG1hcmtDb3VudEJpYXMgPCAwKTsKICAgICAKICAgICAvLyBU
aGlzIG1lYW5zIHdlIGhhdmVuJ3QgbWFya2VkIGFueXRoaW5nIHlldC4KLSAgICBibG9jaygpLm1f
Ymlhc2VkTWFya0NvdW50ID0gYmxvY2soKS5tX21hcmtDb3VudEJpYXMgPSBzdGF0aWNfY2FzdDxp
bnQxNl90PihtYXJrQ291bnRCaWFzKTsKKyAgICBibG9ja0Zvb3RlcigpLm1fYmlhc2VkTWFya0Nv
dW50ID0gYmxvY2tGb290ZXIoKS5tX21hcmtDb3VudEJpYXMgPSBzdGF0aWNfY2FzdDxpbnQxNl90
PihtYXJrQ291bnRCaWFzKTsKIH0KIAogdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpkaWRSZW1v
dmVGcm9tRGlyZWN0b3J5KCkKQEAgLTM1Nyw3ICszNzEsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OmRpZFJlbW92ZUZyb21ECiAgICAgCiAgICAgbV9pbmRleCA9IHN0ZDo6bnVtZXJpY19s
aW1pdHM8c2l6ZV90Pjo6bWF4KCk7CiAgICAgbV9kaXJlY3RvcnkgPSBudWxscHRyOwotICAgIG1f
YmxvY2stPm1fc3Vic3BhY2UgPSBudWxscHRyOworICAgIGJsb2NrRm9vdGVyKCkubV9zdWJzcGFj
ZSA9IG51bGxwdHI7CiB9CiAKICNpZiAhQVNTRVJUX0RJU0FCTEVECkBAIC00MTAsNyArNDI0LDcg
QEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzd2VlcChGcmVlTGlzdAogICAgIH0KICAgICAK
ICAgICBpZiAoc3BhY2UoKS0+aXNNYXJraW5nKCkpCi0gICAgICAgIGJsb2NrKCkubV9sb2NrLmxv
Y2soKTsKKyAgICAgICAgYmxvY2tGb290ZXIoKS5tX2xvY2subG9jaygpOwogICAgIAogICAgIHN1
YnNwYWNlKCktPmRpZEJlZ2luU3dlZXBpbmdUb0ZyZWVMaXN0KHRoaXMpOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCShyZXZpc2lvbiAyMjc3MTYp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Myw3ICs0Myw2IEBAIGNsYXNzIE1hcmtlZFNwYWNlOwogY2xhc3MgU2xvdFZpc2l0
b3I7CiBjbGFzcyBTdWJzcGFjZTsKIAotdHlwZWRlZiB1aW50cHRyX3QgQml0czsKIHR5cGVkZWYg
dWludDMyX3QgSGVhcFZlcnNpb247CiAKIC8vIEEgbWFya2VkIGJsb2NrIGlzIGEgcGFnZS1hbGln
bmVkIGNvbnRhaW5lciBmb3IgaGVhcC1hbGxvY2F0ZWQgb2JqZWN0cy4KQEAgLTYwLDE2ICs1OSwx
OCBAQCBjbGFzcyBNYXJrZWRCbG9jayB7CiAgICAgZnJpZW5kIHN0cnVjdCBWZXJpZnlNYXJrZWQ7
CiAKIHB1YmxpYzoKKyAgICBjbGFzcyBGb290ZXI7CiAgICAgY2xhc3MgSGFuZGxlOwogcHJpdmF0
ZToKKyAgICBmcmllbmQgY2xhc3MgRm9vdGVyOwogICAgIGZyaWVuZCBjbGFzcyBIYW5kbGU7CiBw
dWJsaWM6Ci0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tU2l6ZSA9IDE2OyAvLyBieXRlcwot
ICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tTaXplID0gMTYgKiBLQjsKLSAgICBzdGF0aWMg
Y29uc3Qgc2l6ZV90IGJsb2NrTWFzayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2NrU2l6ZSBt
dXN0IGJlIGEgcG93ZXIgb2YgdHdvLgotCi0gICAgc3RhdGljIGNvbnN0IHNpemVfdCBhdG9tc1Bl
ckJsb2NrID0gYmxvY2tTaXplIC8gYXRvbVNpemU7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgYXRvbVNpemUgPSAxNjsgLy8gYnl0ZXMKKyAgICBzdGF0aWMgY29uc3RleHByIHNpemVfdCBi
bG9ja1NpemUgPSAxNiAqIEtCOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IGJsb2NrTWFz
ayA9IH4oYmxvY2tTaXplIC0gMSk7IC8vIGJsb2NrU2l6ZSBtdXN0IGJlIGEgcG93ZXIgb2YgdHdv
LgogCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgYXRvbXNQZXJCbG9jayA9IGJsb2NrU2l6
ZSAvIGF0b21TaXplOworICAgIAogICAgIHN0YXRpY19hc3NlcnQoIShNYXJrZWRCbG9jazo6YXRv
bVNpemUgJiAoTWFya2VkQmxvY2s6OmF0b21TaXplIC0gMSkpLCAiTWFya2VkQmxvY2s6OmF0b21T
aXplIG11c3QgYmUgYSBwb3dlciBvZiB0d28uIik7CiAgICAgc3RhdGljX2Fzc2VydCghKE1hcmtl
ZEJsb2NrOjpibG9ja1NpemUgJiAoTWFya2VkQmxvY2s6OmJsb2NrU2l6ZSAtIDEpKSwgIk1hcmtl
ZEJsb2NrOjpibG9ja1NpemUgbXVzdCBiZSBhIHBvd2VyIG9mIHR3by4iKTsKICAgICAKQEAgLTEw
Myw2ICsxMDQsNyBAQCBwdWJsaWM6CiAgICAgICAgIH5IYW5kbGUoKTsKICAgICAgICAgICAgIAog
ICAgICAgICBNYXJrZWRCbG9jayYgYmxvY2soKTsKKyAgICAgICAgTWFya2VkQmxvY2s6OkZvb3Rl
ciYgYmxvY2tGb290ZXIoKTsKICAgICAgICAgICAgIAogICAgICAgICB2b2lkKiBjZWxsQWxpZ24o
dm9pZCopOwogICAgICAgICAgICAgCkBAIC0yNDQsMTAgKzI0Niw3MSBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAKICAgICAgICAgTWFya2VkQmxvY2sqIG1fYmxvY2sgeyBudWxscHRyIH07CiAgICAg
fTsKKworcHJpdmF0ZTogICAgCisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgYXRvbUFsaWdu
bWVudE1hc2sgPSBhdG9tU2l6ZSAtIDE7CisKKyAgICB0eXBlZGVmIGNoYXIgQXRvbVthdG9tU2l6
ZV07CisKK3B1YmxpYzoKKyAgICBjbGFzcyBGb290ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAg
Rm9vdGVyKFZNJiwgSGFuZGxlJik7CisgICAgICAgIH5Gb290ZXIoKTsKKyAgICAgICAgCisgICAg
cHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIE1hcmtlZEJsb2NrOworICAgICAgICAKKyAgICAgICAgSGFuZGxl
JiBtX2hhbmRsZTsKKyAgICAgICAgVk0qIG1fdm07CisgICAgICAgIFN1YnNwYWNlKiBtX3N1YnNw
YWNlOworCisgICAgICAgIENvdW50aW5nTG9jayBtX2xvY2s7CisgICAgCisgICAgICAgIC8vIFRo
ZSBhY3R1YWwgbWFyayBjb3VudCBjYW4gYmUgY29tcHV0ZWQgYnkgZG9pbmc6IG1fYmlhc2VkTWFy
a0NvdW50IC0gbV9tYXJrQ291bnRCaWFzLiBOb3RlCisgICAgICAgIC8vIHRoYXQgdGhpcyBjb3Vu
dCBpcyByYWN5LiBJdCB3aWxsIGFjY3VyYXRlbHkgZGV0ZWN0IHdoZXRoZXIgb3Igbm90IGV4YWN0
bHkgemVybyB0aGluZ3Mgd2VyZQorICAgICAgICAvLyBtYXJrZWQsIGJ1dCBpZiBOIHRoaW5ncyBn
b3QgbWFya2VkLCB0aGVuIHRoaXMgbWF5IHJlcG9ydCBhbnl0aGluZyBpbiB0aGUgcmFuZ2UgWzEs
IE5dIChvcgorICAgICAgICAvLyBiZWZvcmUgdW5iaWFzZWQsIGl0IHdvdWxkIGJlIFsxICsgbV9t
YXJrQ291bnRCaWFzLCBOICsgbV9tYXJrQ291bnRCaWFzXS4pCisgICAgICAgIGludDE2X3QgbV9i
aWFzZWRNYXJrQ291bnQ7CisgICAgCisgICAgICAgIC8vIFdlIGJpYXMgdGhlIG1hcmsgY291bnQg
c28gdGhhdCBpZiBtX2JpYXNlZE1hcmtDb3VudCA+PSAwIHRoZW4gdGhlIGJsb2NrIHNob3VsZCBi
ZSByZXRpcmVkLgorICAgICAgICAvLyBXZSBnbyB0byBhbGwgdGhpcyB0cm91YmxlIHRvIG1ha2Ug
bWFya2luZyBhIGJpdCBmYXN0ZXI6IHRoaXMgd2F5LCBtYXJraW5nIGtub3dzIHdoZW4gdG8KKyAg
ICAgICAgLy8gcmV0aXJlIGEgYmxvY2sgdXNpbmcgYSBqcy9qbnMgb24gbV9iaWFzZWRNYXJrQ291
bnQuCisgICAgICAgIC8vCisgICAgICAgIC8vIEZvciBleGFtcGxlLCBpZiBhIGJsb2NrIGhhcyBy
b29tIGZvciAxMDAgb2JqZWN0cyBhbmQgcmV0aXJlbWVudCBoYXBwZW5zIHdoZW5ldmVyIDkwJSBh
cmUKKyAgICAgICAgLy8gbGl2ZSwgdGhlbiBtX21hcmtDb3VudEJpYXMgd2lsbCBiZSAtOTAuIFRo
aXMgd2F5LCB3aGVuIG1hcmtpbmcgYmVnaW5zLCB0aGlzIHdpbGwgY2F1c2UgdXMgdG8KKyAgICAg
ICAgLy8gc2V0IG1fYmlhc2VkTWFya0NvdW50IHRvIC05MCBhcyB3ZWxsLCBzaW5jZToKKyAgICAg
ICAgLy8KKyAgICAgICAgLy8gICAgIG1fYmlhc2VkTWFya0NvdW50ID0gYWN0dWFsTWFya0NvdW50
ICsgbV9tYXJrQ291bnRCaWFzLgorICAgICAgICAvLworICAgICAgICAvLyBNYXJraW5nIGFuIG9i
amVjdCB3aWxsIGluY3JlbWVudCBtX2JpYXNlZE1hcmtDb3VudC4gT25jZSA5MCBvYmplY3RzIGdl
dCBtYXJrZWQsIHdlIHdpbGwgaGF2ZQorICAgICAgICAvLyBtX2JpYXNlZE1hcmtDb3VudCA9IDAs
IHdoaWNoIHdpbGwgdHJpZ2dlciByZXRpcmVtZW50LiBJbiBvdGhlciB3b3Jkcywgd2Ugd2FudCB0
byBzZXQKKyAgICAgICAgLy8gbV9tYXJrQ291bnRCaWFzIGxpa2Ugc286CisgICAgICAgIC8vCisg
ICAgICAgIC8vICAgICBtX21hcmtDb3VudEJpYXMgPSAtKG1pbk1hcmtlZEJsb2NrVXRpbGl6YXRp
b24gKiBjZWxsc1BlckJsb2NrKQorICAgICAgICAvLworICAgICAgICAvLyBBbGwgb2YgdGhpcyBh
bHNvIG1lYW5zIHRoYXQgeW91IGNhbiBkZXRlY3QgaWYgYW55IG9iamVjdHMgYXJlIG1hcmtlZCBi
eSBkb2luZzoKKyAgICAgICAgLy8KKyAgICAgICAgLy8gICAgIG1fYmlhc2VkTWFya0NvdW50ICE9
IG1fbWFya0NvdW50QmlhcworICAgICAgICBpbnQxNl90IG1fbWFya0NvdW50QmlhczsKKworICAg
ICAgICBIZWFwVmVyc2lvbiBtX21hcmtpbmdWZXJzaW9uOworCisgICAgICAgIEJpdG1hcDxhdG9t
c1BlckJsb2NrPiBtX21hcmtzOworICAgIH07CiAgICAgICAgIAorcHJpdmF0ZTogICAgCisgICAg
Rm9vdGVyJiBmb290ZXIoKTsKKyAgICBjb25zdCBGb290ZXImIGZvb3RlcigpIGNvbnN0OworCitw
dWJsaWM6CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgZW5kQXRvbSA9IChibG9ja1NpemUg
LSBzaXplb2YoRm9vdGVyKSkgLyBhdG9tU2l6ZTsKKwogICAgIHN0YXRpYyBNYXJrZWRCbG9jazo6
SGFuZGxlKiB0cnlDcmVhdGUoSGVhcCYsIEFsaWduZWRNZW1vcnlBbGxvY2F0b3IqKTsKICAgICAg
ICAgCiAgICAgSGFuZGxlJiBoYW5kbGUoKTsKKyAgICBjb25zdCBIYW5kbGUmIGhhbmRsZSgpIGNv
bnN0OwogICAgICAgICAKICAgICBWTSogdm0oKSBjb25zdDsKICAgICBpbmxpbmUgSGVhcCogaGVh
cCgpIGNvbnN0OwpAQCAtMjU1LDcgKzMxOCw2IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBib29s
IGlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCopOwogICAgIHN0YXRpYyBNYXJrZWRCbG9jayogYmxv
Y2tGb3IoY29uc3Qgdm9pZCopOwotICAgIHN0YXRpYyBzaXplX3QgZmlyc3RBdG9tKCk7CiAgICAg
c2l6ZV90IGF0b21OdW1iZXIoY29uc3Qgdm9pZCopOwogICAgICAgICAKICAgICBzaXplX3QgbWFy
a0NvdW50KCk7CkBAIC0yOTUsMjAgKzM1NywxOSBAQCBwdWJsaWM6CiAgICAgdm9pZCByZXNldE1h
cmtzKCk7CiAgICAgCiAgICAgYm9vbCBpc01hcmtlZFJhdyhjb25zdCB2b2lkKiBwKTsKLSAgICBI
ZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fbWFya2luZ1ZlcnNp
b247IH0KKyAgICBIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbigpIGNvbnN0IHsgcmV0dXJuIGZv
b3RlcigpLm1fbWFya2luZ1ZlcnNpb247IH0KICAgICAKICAgICBjb25zdCBCaXRtYXA8YXRvbXNQ
ZXJCbG9jaz4mIG1hcmtzKCkgY29uc3Q7CiAgICAgCi0gICAgQ291bnRpbmdMb2NrJiBsb2NrKCkg
eyByZXR1cm4gbV9sb2NrOyB9CisgICAgQ291bnRpbmdMb2NrJiBsb2NrKCkgeyByZXR1cm4gZm9v
dGVyKCkubV9sb2NrOyB9CiAgICAgCi0gICAgU3Vic3BhY2UqIHN1YnNwYWNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdWJzcGFjZTsgfQorICAgIFN1YnNwYWNlKiBzdWJzcGFjZSgpIGNvbnN0IHsgcmV0
dXJuIGZvb3RlcigpLm1fc3Vic3BhY2U7IH0KKyAgICAKKyAgICBzdGF0aWMgY29uc3RleHByIHNp
emVfdCBvZmZzZXRPZkZvb3RlciA9IGVuZEF0b20gKiBhdG9tU2l6ZTsKIAogcHJpdmF0ZToKLSAg
ICBzdGF0aWMgY29uc3Qgc2l6ZV90IGF0b21BbGlnbm1lbnRNYXNrID0gYXRvbVNpemUgLSAxOwot
Ci0gICAgdHlwZWRlZiBjaGFyIEF0b21bYXRvbVNpemVdOwotCiAgICAgTWFya2VkQmxvY2soVk0m
LCBIYW5kbGUmKTsKKyAgICB+TWFya2VkQmxvY2soKTsKICAgICBBdG9tKiBhdG9tcygpOwogICAg
ICAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGFib3V0VG9NYXJrU2xvdyhIZWFwVmVy
c2lvbiBtYXJraW5nVmVyc2lvbik7CkBAIC0zMTgsNDggKzM3OSwyNiBAQCBwcml2YXRlOgogICAg
IAogICAgIGlubGluZSBib29sIG1hcmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKEhlYXBW
ZXJzaW9uIG1hcmtpbmdWZXJzaW9uKTsKICAgICBpbmxpbmUgYm9vbCBtYXJrc0NvbnZleUxpdmVu
ZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lv
biBtYXJraW5nVmVyc2lvbik7Ci0gICAgICAgIAotICAgIEhhbmRsZSYgbV9oYW5kbGU7Ci0gICAg
Vk0qIG1fdm07Ci0gICAgU3Vic3BhY2UqIG1fc3Vic3BhY2U7Ci0KLSAgICBDb3VudGluZ0xvY2sg
bV9sb2NrOwotICAgIAotICAgIC8vIFRoZSBhY3R1YWwgbWFyayBjb3VudCBjYW4gYmUgY29tcHV0
ZWQgYnkgZG9pbmc6IG1fYmlhc2VkTWFya0NvdW50IC0gbV9tYXJrQ291bnRCaWFzLiBOb3RlCi0g
ICAgLy8gdGhhdCB0aGlzIGNvdW50IGlzIHJhY3kuIEl0IHdpbGwgYWNjdXJhdGVseSBkZXRlY3Qg
d2hldGhlciBvciBub3QgZXhhY3RseSB6ZXJvIHRoaW5ncyB3ZXJlCi0gICAgLy8gbWFya2VkLCBi
dXQgaWYgTiB0aGluZ3MgZ290IG1hcmtlZCwgdGhlbiB0aGlzIG1heSByZXBvcnQgYW55dGhpbmcg
aW4gdGhlIHJhbmdlIFsxLCBOXSAob3IKLSAgICAvLyBiZWZvcmUgdW5iaWFzZWQsIGl0IHdvdWxk
IGJlIFsxICsgbV9tYXJrQ291bnRCaWFzLCBOICsgbV9tYXJrQ291bnRCaWFzXS4pCi0gICAgaW50
MTZfdCBtX2JpYXNlZE1hcmtDb3VudDsKLSAgICAKLSAgICAvLyBXZSBiaWFzIHRoZSBtYXJrIGNv
dW50IHNvIHRoYXQgaWYgbV9iaWFzZWRNYXJrQ291bnQgPj0gMCB0aGVuIHRoZSBibG9jayBzaG91
bGQgYmUgcmV0aXJlZC4KLSAgICAvLyBXZSBnbyB0byBhbGwgdGhpcyB0cm91YmxlIHRvIG1ha2Ug
bWFya2luZyBhIGJpdCBmYXN0ZXI6IHRoaXMgd2F5LCBtYXJraW5nIGtub3dzIHdoZW4gdG8KLSAg
ICAvLyByZXRpcmUgYSBibG9jayB1c2luZyBhIGpzL2pucyBvbiBtX2JpYXNlZE1hcmtDb3VudC4K
LSAgICAvLwotICAgIC8vIEZvciBleGFtcGxlLCBpZiBhIGJsb2NrIGhhcyByb29tIGZvciAxMDAg
b2JqZWN0cyBhbmQgcmV0aXJlbWVudCBoYXBwZW5zIHdoZW5ldmVyIDkwJSBhcmUKLSAgICAvLyBs
aXZlLCB0aGVuIG1fbWFya0NvdW50QmlhcyB3aWxsIGJlIC05MC4gVGhpcyB3YXksIHdoZW4gbWFy
a2luZyBiZWdpbnMsIHRoaXMgd2lsbCBjYXVzZSB1cyB0bwotICAgIC8vIHNldCBtX2JpYXNlZE1h
cmtDb3VudCB0byAtOTAgYXMgd2VsbCwgc2luY2U6Ci0gICAgLy8KLSAgICAvLyAgICAgbV9iaWFz
ZWRNYXJrQ291bnQgPSBhY3R1YWxNYXJrQ291bnQgKyBtX21hcmtDb3VudEJpYXMuCi0gICAgLy8K
LSAgICAvLyBNYXJraW5nIGFuIG9iamVjdCB3aWxsIGluY3JlbWVudCBtX2JpYXNlZE1hcmtDb3Vu
dC4gT25jZSA5MCBvYmplY3RzIGdldCBtYXJrZWQsIHdlIHdpbGwgaGF2ZQotICAgIC8vIG1fYmlh
c2VkTWFya0NvdW50ID0gMCwgd2hpY2ggd2lsbCB0cmlnZ2VyIHJldGlyZW1lbnQuIEluIG90aGVy
IHdvcmRzLCB3ZSB3YW50IHRvIHNldAotICAgIC8vIG1fbWFya0NvdW50QmlhcyBsaWtlIHNvOgot
ICAgIC8vCi0gICAgLy8gICAgIG1fbWFya0NvdW50QmlhcyA9IC0obWluTWFya2VkQmxvY2tVdGls
aXphdGlvbiAqIGNlbGxzUGVyQmxvY2spCi0gICAgLy8KLSAgICAvLyBBbGwgb2YgdGhpcyBhbHNv
IG1lYW5zIHRoYXQgeW91IGNhbiBkZXRlY3QgaWYgYW55IG9iamVjdHMgYXJlIG1hcmtlZCBieSBk
b2luZzoKLSAgICAvLwotICAgIC8vICAgICBtX2JpYXNlZE1hcmtDb3VudCAhPSBtX21hcmtDb3Vu
dEJpYXMKLSAgICBpbnQxNl90IG1fbWFya0NvdW50QmlhczsKK307CiAKLSAgICBIZWFwVmVyc2lv
biBtX21hcmtpbmdWZXJzaW9uOworaW5saW5lIE1hcmtlZEJsb2NrOjpGb290ZXImIE1hcmtlZEJs
b2NrOjpmb290ZXIoKQoreworICAgIHJldHVybiAqYml0d2lzZV9jYXN0PE1hcmtlZEJsb2NrOjpG
b290ZXIqPihhdG9tcygpICsgZW5kQXRvbSk7Cit9CiAKLSAgICBCaXRtYXA8YXRvbXNQZXJCbG9j
az4gbV9tYXJrczsKLX07CitpbmxpbmUgY29uc3QgTWFya2VkQmxvY2s6OkZvb3RlciYgTWFya2Vk
QmxvY2s6OmZvb3RlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8TWFya2VkQmxv
Y2sqPih0aGlzKS0+Zm9vdGVyKCk7Cit9CiAKIGlubGluZSBNYXJrZWRCbG9jazo6SGFuZGxlJiBN
YXJrZWRCbG9jazo6aGFuZGxlKCkKIHsKLSAgICByZXR1cm4gbV9oYW5kbGU7CisgICAgcmV0dXJu
IGZvb3RlcigpLm1faGFuZGxlOworfQorCitpbmxpbmUgY29uc3QgTWFya2VkQmxvY2s6OkhhbmRs
ZSYgTWFya2VkQmxvY2s6OmhhbmRsZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNvbnN0X2Nhc3Q8
TWFya2VkQmxvY2sqPih0aGlzKS0+aGFuZGxlKCk7CiB9CiAKIGlubGluZSBNYXJrZWRCbG9jayYg
TWFya2VkQmxvY2s6OkhhbmRsZTo6YmxvY2soKQpAQCAtMzY3LDkgKzQwNiw5IEBAIGlubGluZSBN
YXJrZWRCbG9jayYgTWFya2VkQmxvY2s6OkhhbmRsZToKICAgICByZXR1cm4gKm1fYmxvY2s7CiB9
CiAKLWlubGluZSBzaXplX3QgTWFya2VkQmxvY2s6OmZpcnN0QXRvbSgpCitpbmxpbmUgTWFya2Vk
QmxvY2s6OkZvb3RlciYgTWFya2VkQmxvY2s6OkhhbmRsZTo6YmxvY2tGb290ZXIoKQogewotICAg
IHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8YXRvbVNpemU+KHNpemVvZihNYXJrZWRC
bG9jaykpIC8gYXRvbVNpemU7CisgICAgcmV0dXJuIGJsb2NrKCkuZm9vdGVyKCk7CiB9CiAKIGlu
bGluZSBNYXJrZWRCbG9jazo6QXRvbSogTWFya2VkQmxvY2s6OmF0b21zKCkKQEAgLTM3OSwxMyAr
NDE4LDEzIEBAIGlubGluZSBNYXJrZWRCbG9jazo6QXRvbSogTWFya2VkQmxvY2s6OmEKIAogaW5s
aW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzQXRvbUFsaWduZWQoY29uc3Qgdm9pZCogcCkKIHsKLSAg
ICByZXR1cm4gIShyZWludGVycHJldF9jYXN0PEJpdHM+KHApICYgYXRvbUFsaWdubWVudE1hc2sp
OworICAgIHJldHVybiAhKHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwKSAmIGF0b21BbGln
bm1lbnRNYXNrKTsKIH0KIAogaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNlbGxB
bGlnbih2b2lkKiBwKQogewotICAgIEJpdHMgYmFzZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4o
YmxvY2soKS5hdG9tcygpICsgZmlyc3RBdG9tKCkpOwotICAgIEJpdHMgYml0cyA9IHJlaW50ZXJw
cmV0X2Nhc3Q8Qml0cz4ocCk7CisgICAgdWludHB0cl90IGJhc2UgPSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4oYmxvY2soKS5hdG9tcygpKTsKKyAgICB1aW50cHRyX3QgYml0cyA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihwKTsKICAgICBiaXRzIC09IGJhc2U7CiAgICAgYml0cyAt
PSBiaXRzICUgY2VsbFNpemUoKTsKICAgICBiaXRzICs9IGJhc2U7CkBAIC0zOTQsNyArNDMzLDcg
QEAgaW5saW5lIHZvaWQqIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmNlbGxBbAogCiBpbmxpbmUgTWFy
a2VkQmxvY2sqIE1hcmtlZEJsb2NrOjpibG9ja0Zvcihjb25zdCB2b2lkKiBwKQogewotICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PE1hcmtlZEJsb2NrKj4ocmVpbnRlcnByZXRfY2FzdDxCaXRz
PihwKSAmIGJsb2NrTWFzayk7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWFya2VkQmxv
Y2sqPihyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocCkgJiBibG9ja01hc2spOwogfQogCiBp
bmxpbmUgQmxvY2tEaXJlY3RvcnkqIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmRpcmVjdG9yeSgpIGNv
bnN0CkBAIC00MTksNyArNDU4LDcgQEAgaW5saW5lIFZNKiBNYXJrZWRCbG9jazo6SGFuZGxlOjp2
bSgpIGNvbgogCiBpbmxpbmUgVk0qIE1hcmtlZEJsb2NrOjp2bSgpIGNvbnN0CiB7Ci0gICAgcmV0
dXJuIG1fdm07CisgICAgcmV0dXJuIGZvb3RlcigpLm1fdm07CiB9CiAKIGlubGluZSBXZWFrU2V0
JiBNYXJrZWRCbG9jazo6SGFuZGxlOjp3ZWFrU2V0KCkKQEAgLTQyOSw3ICs0NjgsNyBAQCBpbmxp
bmUgV2Vha1NldCYgTWFya2VkQmxvY2s6OkhhbmRsZTo6d2VhCiAKIGlubGluZSBXZWFrU2V0JiBN
YXJrZWRCbG9jazo6d2Vha1NldCgpCiB7Ci0gICAgcmV0dXJuIG1faGFuZGxlLndlYWtTZXQoKTsK
KyAgICByZXR1cm4gaGFuZGxlKCkud2Vha1NldCgpOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRC
bG9jazo6SGFuZGxlOjpzaHJpbmsoKQpAQCAtNDU0LDcgKzQ5Myw3IEBAIGlubGluZSBzaXplX3Qg
TWFya2VkQmxvY2s6OkhhbmRsZTo6Y2VsbFMKIAogaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6
Y2VsbFNpemUoKQogewotICAgIHJldHVybiBtX2hhbmRsZS5jZWxsU2l6ZSgpOworICAgIHJldHVy
biBoYW5kbGUoKS5jZWxsU2l6ZSgpOwogfQogCiBpbmxpbmUgY29uc3QgQ2VsbEF0dHJpYnV0ZXMm
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmF0dHJpYnV0ZXMoKSBjb25zdApAQCAtNDY0LDcgKzUwMyw3
IEBAIGlubGluZSBjb25zdCBDZWxsQXR0cmlidXRlcyYgTWFya2VkQmxvY2sKIAogaW5saW5lIGNv
bnN0IENlbGxBdHRyaWJ1dGVzJiBNYXJrZWRCbG9jazo6YXR0cmlidXRlcygpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIG1faGFuZGxlLmF0dHJpYnV0ZXMoKTsKKyAgICByZXR1cm4gaGFuZGxlKCkuYXR0
cmlidXRlcygpOwogfQogCiBpbmxpbmUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjpuZWVkc0Rl
c3RydWN0aW9uKCkgY29uc3QKQEAgLTQ5NCwxNyArNTMzLDE3IEBAIGlubGluZSBzaXplX3QgTWFy
a2VkQmxvY2s6OkhhbmRsZTo6c2l6ZSgKIAogaW5saW5lIHNpemVfdCBNYXJrZWRCbG9jazo6YXRv
bU51bWJlcihjb25zdCB2b2lkKiBwKQogewotICAgIHJldHVybiAocmVpbnRlcnByZXRfY2FzdDxC
aXRzPihwKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8Qml0cz4odGhpcykpIC8gYXRvbVNpemU7CisgICAg
cmV0dXJuIChyZWludGVycHJldF9jYXN0PHVpbnRwdHJfdD4ocCkgLSByZWludGVycHJldF9jYXN0
PHVpbnRwdHJfdD4odGhpcykpIC8gYXRvbVNpemU7CiB9CiAKIGlubGluZSBib29sIE1hcmtlZEJs
b2NrOjphcmVNYXJrc1N0YWxlKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uKQogewotICAgIHJl
dHVybiBtYXJraW5nVmVyc2lvbiAhPSBtX21hcmtpbmdWZXJzaW9uOworICAgIHJldHVybiBtYXJr
aW5nVmVyc2lvbiAhPSBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uOwogfQogCiBpbmxpbmUgRGVw
ZW5kZW5jeSBNYXJrZWRCbG9jazo6YWJvdXRUb01hcmsoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNp
b24pCiB7Ci0gICAgSGVhcFZlcnNpb24gdmVyc2lvbiA9IG1fbWFya2luZ1ZlcnNpb247CisgICAg
SGVhcFZlcnNpb24gdmVyc2lvbiA9IGZvb3RlcigpLm1fbWFya2luZ1ZlcnNpb247CiAgICAgaWYg
KFVOTElLRUxZKHZlcnNpb24gIT0gbWFya2luZ1ZlcnNpb24pKQogICAgICAgICBhYm91dFRvTWFy
a1Nsb3cobWFya2luZ1ZlcnNpb24pOwogICAgIHJldHVybiBEZXBlbmRlbmN5OjpmZW5jZSh2ZXJz
aW9uKTsKQEAgLTUxNywzMiArNTU2LDMyIEBAIGlubGluZSB2b2lkIE1hcmtlZEJsb2NrOjpIYW5k
bGU6OmFzc2VydE0KIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkUmF3KGNvbnN0
IHZvaWQqIHApCiB7Ci0gICAgcmV0dXJuIG1fbWFya3MuZ2V0KGF0b21OdW1iZXIocCkpOworICAg
IHJldHVybiBmb290ZXIoKS5tX21hcmtzLmdldChhdG9tTnVtYmVyKHApKTsKIH0KIAogaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKEhlYXBWZXJzaW9uIG1hcmtpbmdWZXJzaW9uLCBj
b25zdCB2b2lkKiBwKQogewotICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBtX21hcmtpbmdWZXJz
aW9uOworICAgIEhlYXBWZXJzaW9uIHZlcnNpb24gPSBmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9u
OwogICAgIGlmIChVTkxJS0VMWSh2ZXJzaW9uICE9IG1hcmtpbmdWZXJzaW9uKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBEZXBl
bmRlbmN5OjpmZW5jZSh2ZXJzaW9uKSk7CisgICAgcmV0dXJuIGZvb3RlcigpLm1fbWFya3MuZ2V0
KGF0b21OdW1iZXIocCksIERlcGVuZGVuY3k6OmZlbmNlKHZlcnNpb24pKTsKIH0KIAogaW5saW5l
IGJvb2wgTWFya2VkQmxvY2s6OmlzTWFya2VkKGNvbnN0IHZvaWQqIHAsIERlcGVuZGVuY3kgZGVw
ZW5kZW5jeSkKIHsKICAgICBhc3NlcnRNYXJrc05vdFN0YWxlKCk7Ci0gICAgcmV0dXJuIG1fbWFy
a3MuZ2V0KGF0b21OdW1iZXIocCksIGRlcGVuZGVuY3kpOworICAgIHJldHVybiBmb290ZXIoKS5t
X21hcmtzLmdldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsKIH0KIAogaW5saW5lIGJvb2wg
TWFya2VkQmxvY2s6OnRlc3RBbmRTZXRNYXJrZWQoY29uc3Qgdm9pZCogcCwgRGVwZW5kZW5jeSBk
ZXBlbmRlbmN5KQogewogICAgIGFzc2VydE1hcmtzTm90U3RhbGUoKTsKLSAgICByZXR1cm4gbV9t
YXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVyKHApLCBkZXBlbmRlbmN5KTsKKyAg
ICByZXR1cm4gZm9vdGVyKCkubV9tYXJrcy5jb25jdXJyZW50VGVzdEFuZFNldChhdG9tTnVtYmVy
KHApLCBkZXBlbmRlbmN5KTsKIH0KIAogaW5saW5lIGNvbnN0IEJpdG1hcDxNYXJrZWRCbG9jazo6
YXRvbXNQZXJCbG9jaz4mIE1hcmtlZEJsb2NrOjptYXJrcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJu
IG1fbWFya3M7CisgICAgcmV0dXJuIGZvb3RlcigpLm1fbWFya3M7CiB9CiAKIGlubGluZSBib29s
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTmV3bHlBbGxvY2F0ZWQoY29uc3Qgdm9pZCogcCkKQEAg
LTU2OSwxMiArNjA4LDkgQEAgaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6OmlzQXRvbShjb25zdCB2
bwogewogICAgIEFTU0VSVChNYXJrZWRCbG9jazo6aXNBdG9tQWxpZ25lZChwKSk7CiAgICAgc2l6
ZV90IGF0b21OdW1iZXIgPSB0aGlzLT5hdG9tTnVtYmVyKHApOwotICAgIHNpemVfdCBmaXJzdEF0
b20gPSBNYXJrZWRCbG9jazo6Zmlyc3RBdG9tKCk7Ci0gICAgaWYgKGF0b21OdW1iZXIgPCBmaXJz
dEF0b20pIC8vIEZpbHRlcnMgcG9pbnRlcnMgaW50byBNYXJrZWRCbG9jayBtZXRhZGF0YS4KLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGlmICgoYXRvbU51bWJlciAtIGZpcnN0QXRvbSkgJSBt
X2hhbmRsZS5tX2F0b21zUGVyQ2VsbCkgLy8gRmlsdGVycyBwb2ludGVycyBpbnRvIGNlbGwgbWlk
ZGxlcy4KKyAgICBpZiAoYXRvbU51bWJlciAlIGhhbmRsZSgpLm1fYXRvbXNQZXJDZWxsKSAvLyBG
aWx0ZXJzIHBvaW50ZXJzIGludG8gY2VsbCBtaWRkbGVzLgogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgaWYgKGF0b21OdW1iZXIgPj0gbV9oYW5kbGUubV9lbmRBdG9tKSAvLyBGaWx0ZXJzIHBv
aW50ZXJzIGludG8gaW52YWxpZCBjZWxscyBvdXQgb2YgdGhlIHJhbmdlLgorICAgIGlmIChhdG9t
TnVtYmVyID49IGhhbmRsZSgpLm1fZW5kQXRvbSkgLy8gRmlsdGVycyBwb2ludGVycyBpbnRvIGlu
dmFsaWQgY2VsbHMgb3V0IG9mIHRoZSByYW5nZS4KICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAg
IHJldHVybiB0cnVlOwogfQpAQCAtNTgzLDcgKzYxOSw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBG
dW5jdG9yPgogaW5saW5lIEl0ZXJhdGlvblN0YXR1cyBNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JF
YWNoQ2VsbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewogICAgIEhlYXBDZWxsOjpLaW5kIGtp
bmQgPSBtX2F0dHJpYnV0ZXMuY2VsbEtpbmQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0QXRv
bSgpOyBpIDwgbV9lbmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKICAgICAgICAg
SGVhcENlbGwqIGNlbGwgPSByZWludGVycHJldF9jYXN0X3B0cjxIZWFwQ2VsbCo+KCZtX2Jsb2Nr
LT5hdG9tcygpW2ldKTsKICAgICAgICAgaWYgKGZ1bmN0b3IoY2VsbCwga2luZCkgPT0gSXRlcmF0
aW9uU3RhdHVzOjpEb25lKQogICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdGlvblN0YXR1czo6RG9u
ZTsKQEAgLTU5MywxNSArNjI5LDE1IEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMgTWFya2VkQmxv
Y2s6OkhhbmQKIAogaW5saW5lIGJvb2wgTWFya2VkQmxvY2s6Omhhc0FueU1hcmtlZCgpIGNvbnN0
CiB7Ci0gICAgcmV0dXJuIG1fYmlhc2VkTWFya0NvdW50ICE9IG1fbWFya0NvdW50QmlhczsKKyAg
ICByZXR1cm4gZm9vdGVyKCkubV9iaWFzZWRNYXJrQ291bnQgIT0gZm9vdGVyKCkubV9tYXJrQ291
bnRCaWFzOwogfQogCiBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6bm90ZU1hcmtlZCgpCiB7CiAg
ICAgLy8gVGhpcyBpcyByYWN5IGJ5IGRlc2lnbi4gV2UgZG9uJ3Qgd2FudCB0byBwYXkgdGhlIHBy
aWNlIG9mIGFuIGF0b21pYyBpbmNyZW1lbnQhCi0gICAgaW50MTZfdCBiaWFzZWRNYXJrQ291bnQg
PSBtX2JpYXNlZE1hcmtDb3VudDsKKyAgICBpbnQxNl90IGJpYXNlZE1hcmtDb3VudCA9IGZvb3Rl
cigpLm1fYmlhc2VkTWFya0NvdW50OwogICAgICsrYmlhc2VkTWFya0NvdW50OwotICAgIG1fYmlh
c2VkTWFya0NvdW50ID0gYmlhc2VkTWFya0NvdW50OworICAgIGZvb3RlcigpLm1fYmlhc2VkTWFy
a0NvdW50ID0gYmlhc2VkTWFya0NvdW50OwogICAgIGlmIChVTkxJS0VMWSghYmlhc2VkTWFya0Nv
dW50KSkKICAgICAgICAgbm90ZU1hcmtlZFNsb3coKTsKIH0KQEAgLTYxNiw3ICs2NTIsNyBAQCBz
dHJ1Y3QgTWFya2VkQmxvY2tIYXNoIDogUHRySGFzaDxKU0M6Ok1hCiAgICAgICAgIC8vIEFsaWdu
ZWQgVk0gcmVnaW9ucyB0ZW5kIHRvIGJlIG1vbm90b25pY2FsbHkgaW5jcmVhc2luZyBpbnRlZ2Vy
cywKICAgICAgICAgLy8gd2hpY2ggaXMgYSBncmVhdCBoYXNoIGZ1bmN0aW9uLCBidXQgd2UgaGF2
ZSB0byByZW1vdmUgdGhlIGxvdyBiaXRzLAogICAgICAgICAvLyBzaW5jZSB0aGV5J3JlIGFsd2F5
cyB6ZXJvLCB3aGljaCBpcyBhIHRlcnJpYmxlIGhhc2ggZnVuY3Rpb24hCi0gICAgICAgIHJldHVy
biByZWludGVycHJldF9jYXN0PEpTQzo6Qml0cz4oa2V5KSAvIEpTQzo6TWFya2VkQmxvY2s6OmJs
b2NrU2l6ZTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihrZXkp
IC8gSlNDOjpNYXJrZWRCbG9jazo6YmxvY2tTaXplOwogICAgIH0KIH07CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZEJsb2NrSW5saW5lcy5oCShyZXZpc2lv
biAyMjc3MTYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrZWRCbG9ja0lubGlu
ZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNyArNjcsNyBAQCBpbmxpbmUgTWFya2VkU3BhY2Uq
IE1hcmtlZEJsb2NrOjpIYW5kbGU6CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjptYXJrc0Nv
bnZleUxpdmVuZXNzRHVyaW5nTWFya2luZyhIZWFwVmVyc2lvbiBtYXJraW5nVmVyc2lvbikKIHsK
LSAgICByZXR1cm4gbWFya3NDb252ZXlMaXZlbmVzc0R1cmluZ01hcmtpbmcobV9tYXJraW5nVmVy
c2lvbiwgbWFya2luZ1ZlcnNpb24pOworICAgIHJldHVybiBtYXJrc0NvbnZleUxpdmVuZXNzRHVy
aW5nTWFya2luZyhmb290ZXIoKS5tX21hcmtpbmdWZXJzaW9uLCBtYXJraW5nVmVyc2lvbik7CiB9
CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjptYXJrc0NvbnZleUxpdmVuZXNzRHVyaW5nTWFy
a2luZyhIZWFwVmVyc2lvbiBteU1hcmtpbmdWZXJzaW9uLCBIZWFwVmVyc2lvbiBtYXJraW5nVmVy
c2lvbikKQEAgLTEzOCw4ICsxMzgsOSBAQCBBTFdBWVNfSU5MSU5FIGJvb2wgTWFya2VkQmxvY2s6
OkhhbmRsZTo6CiAgICAgLy8gaW1wYWN0IG9uIHBlcmYgLSBhcm91bmQgMiUgb24gc3BsYXkgaWYg
eW91IGdldCBpdCB3cm9uZy4KIAogICAgIE1hcmtlZEJsb2NrJiBibG9jayA9IHRoaXMtPmJsb2Nr
KCk7CisgICAgTWFya2VkQmxvY2s6OkZvb3RlciYgZm9vdGVyID0gYmxvY2suZm9vdGVyKCk7CiAg
ICAgCi0gICAgYXV0byBjb3VudCA9IGJsb2NrLm1fbG9jay50cnlPcHRpbWlzdGljRmVuY2VsZXNz
UmVhZCgpOworICAgIGF1dG8gY291bnQgPSBmb290ZXIubV9sb2NrLnRyeU9wdGltaXN0aWNGZW5j
ZWxlc3NSZWFkKCk7CiAgICAgaWYgKGNvdW50LnZhbHVlKSB7CiAgICAgICAgIERlcGVuZGVuY3kg
ZmVuY2VCZWZvcmUgPSBEZXBlbmRlbmN5OjpmZW5jZShjb3VudC5pbnB1dCk7CiAgICAgICAgIE1h
cmtlZEJsb2NrOjpIYW5kbGUqIGZlbmNlZFRoaXMgPSBmZW5jZUJlZm9yZS5jb25zdW1lKHRoaXMp
OwpAQCAtMTQ5LDI1ICsxNTAsMjYgQEAgQUxXQVlTX0lOTElORSBib29sIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OgogICAgICAgICBIZWFwVmVyc2lvbiBteU5ld2x5QWxsb2NhdGVkVmVyc2lvbiA9IGZl
bmNlZFRoaXMtPm1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uOwogICAgICAgICBpZiAobXlOZXdseUFs
bG9jYXRlZFZlcnNpb24gPT0gbmV3bHlBbGxvY2F0ZWRWZXJzaW9uKSB7CiAgICAgICAgICAgICBi
b29sIHJlc3VsdCA9IGZlbmNlZFRoaXMtPmlzTmV3bHlBbGxvY2F0ZWQoY2VsbCk7Ci0gICAgICAg
ICAgICBpZiAoYmxvY2subV9sb2NrLmZlbmNlbGVzc1ZhbGlkYXRlKGNvdW50LnZhbHVlLCBEZXBl
bmRlbmN5OjpmZW5jZShyZXN1bHQpKSkKKyAgICAgICAgICAgIGlmIChmb290ZXIubV9sb2NrLmZl
bmNlbGVzc1ZhbGlkYXRlKGNvdW50LnZhbHVlLCBEZXBlbmRlbmN5OjpmZW5jZShyZXN1bHQpKSkK
ICAgICAgICAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICB9IGVsc2UgewogICAgICAg
ICAgICAgTWFya2VkQmxvY2smIGZlbmNlZEJsb2NrID0gKmZlbmNlQmVmb3JlLmNvbnN1bWUoJmJs
b2NrKTsKKyAgICAgICAgICAgIE1hcmtlZEJsb2NrOjpGb290ZXImIGZlbmNlZEZvb3RlciA9IGZl
bmNlZEJsb2NrLmZvb3RlcigpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBIZWFwVmVyc2lv
biBteU1hcmtpbmdWZXJzaW9uID0gZmVuY2VkQmxvY2subV9tYXJraW5nVmVyc2lvbjsKKyAgICAg
ICAgICAgIEhlYXBWZXJzaW9uIG15TWFya2luZ1ZlcnNpb24gPSBmZW5jZWRGb290ZXIubV9tYXJr
aW5nVmVyc2lvbjsKICAgICAgICAgICAgIGlmIChteU1hcmtpbmdWZXJzaW9uICE9IG1hcmtpbmdW
ZXJzaW9uCiAgICAgICAgICAgICAgICAgJiYgKCFpc01hcmtpbmcgfHwgIWZlbmNlZEJsb2NrLm1h
cmtzQ29udmV5TGl2ZW5lc3NEdXJpbmdNYXJraW5nKG15TWFya2luZ1ZlcnNpb24sIG1hcmtpbmdW
ZXJzaW9uKSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYmxvY2subV9sb2NrLmZlbmNlbGVzc1Zh
bGlkYXRlKGNvdW50LnZhbHVlLCBEZXBlbmRlbmN5OjpmZW5jZShteU1hcmtpbmdWZXJzaW9uKSkp
CisgICAgICAgICAgICAgICAgaWYgKGZvb3Rlci5tX2xvY2suZmVuY2VsZXNzVmFsaWRhdGUoY291
bnQudmFsdWUsIERlcGVuZGVuY3k6OmZlbmNlKG15TWFya2luZ1ZlcnNpb24pKSkKICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBib29sIHJlc3VsdCA9IGZlbmNlZEJsb2NrLm1fbWFya3MuZ2V0KGJsb2NrLmF0b21O
dW1iZXIoY2VsbCkpOwotICAgICAgICAgICAgICAgIGlmIChibG9jay5tX2xvY2suZmVuY2VsZXNz
VmFsaWRhdGUoY291bnQudmFsdWUsIERlcGVuZGVuY3k6OmZlbmNlKHJlc3VsdCkpKQorICAgICAg
ICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmVuY2VkRm9vdGVyLm1fbWFya3MuZ2V0KGJsb2NrLmF0
b21OdW1iZXIoY2VsbCkpOworICAgICAgICAgICAgICAgIGlmIChmb290ZXIubV9sb2NrLmZlbmNl
bGVzc1ZhbGlkYXRlKGNvdW50LnZhbHVlLCBEZXBlbmRlbmN5OjpmZW5jZShyZXN1bHQpKSkKICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KICAgICAKLSAgICBhdXRvIGxvY2tlciA9IGhvbGRMb2NrKGJsb2NrLm1fbG9jayk7
CisgICAgYXV0byBsb2NrZXIgPSBob2xkTG9jayhmb290ZXIubV9sb2NrKTsKIAogICAgIEFTU0VS
VCghaXNGcmVlTGlzdGVkKCkpOwogICAgIApAQCAtMTgyLDcgKzE4NCw3IEBAIEFMV0FZU19JTkxJ
TkUgYm9vbCBNYXJrZWRCbG9jazo6SGFuZGxlOjoKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAgICAgCi0gICAgcmV0dXJuIGJsb2NrLm1fbWFya3MuZ2V0KGJsb2NrLmF0b21OdW1i
ZXIoY2VsbCkpOworICAgIHJldHVybiBmb290ZXIubV9tYXJrcy5nZXQoYmxvY2suYXRvbU51bWJl
cihjZWxsKSk7CiB9CiAKIGlubGluZSBib29sIE1hcmtlZEJsb2NrOjpIYW5kbGU6OmlzTGl2ZUNl
bGwoSGVhcFZlcnNpb24gbWFya2luZ1ZlcnNpb24sIEhlYXBWZXJzaW9uIG5ld2x5QWxsb2NhdGVk
VmVyc2lvbiwgYm9vbCBpc01hcmtpbmcsIGNvbnN0IHZvaWQqIHApCkBAIC0yNDAsNiArMjQyLDcg
QEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxlOjpzcGVjaWFsaXplZFN3ZQogICAgIFN1cGVyU2Ft
cGxlclNjb3BlIHN1cGVyU2FtcGxlclNjb3BlKGZhbHNlKTsKIAogICAgIE1hcmtlZEJsb2NrJiBi
bG9jayA9IHRoaXMtPmJsb2NrKCk7CisgICAgTWFya2VkQmxvY2s6OkZvb3RlciYgZm9vdGVyID0g
YmxvY2suZm9vdGVyKCk7CiAgICAgCiAgICAgaWYgKGZhbHNlKQogICAgICAgICBkYXRhTG9nKFJh
d1BvaW50ZXIodGhpcyksICIvIiwgUmF3UG9pbnRlcigmYmxvY2spLCAiOiBNYXJrZWRCbG9jazo6
SGFuZGxlOjpzcGVjaWFsaXplZFN3ZWVwIVxuIik7CkBAIC0yNjIsMTIgKzI2NSwxMiBAQCB2b2lk
IE1hcmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgICYmIG5ld2x5QWxs
b2NhdGVkTW9kZSA9PSBEb2VzTm90SGF2ZU5ld2x5QWxsb2NhdGVkKSB7CiAgICAgICAgIAogICAg
ICAgICAvLyBUaGlzIGlzIGFuIGluY3JlZGlibHkgcG93ZXJmdWwgYXNzZXJ0aW9uIHRoYXQgY2hl
Y2tzIHRoZSBzYW5pdHkgb2Ygb3VyIGJsb2NrIGJpdHMuCi0gICAgICAgIGlmIChtYXJrc01vZGUg
PT0gTWFya3NOb3RTdGFsZSAmJiAhYmxvY2subV9tYXJrcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
aWYgKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0YWxlICYmICFmb290ZXIubV9tYXJrcy5pc0VtcHR5
KCkpIHsKICAgICAgICAgICAgIFdURjo6ZGF0YUZpbGUoKS5hdG9taWNhbGx5KAogICAgICAgICAg
ICAgICAgIFsmXSAoUHJpbnRTdHJlYW0mIG91dCkgewogICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIkJsb2NrICIsIFJhd1BvaW50ZXIoJmJsb2NrKSwgIjogbWFya3Mgbm90IGVtcHR5IVxu
Iik7Ci0gICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2sgbG9jayBpcyBoZWxkOiAi
LCBibG9jay5tX2xvY2suaXNIZWxkKCksICJcbiIpOwotICAgICAgICAgICAgICAgICAgICBvdXQu
cHJpbnQoIk1hcmtpbmcgdmVyc2lvbiBvZiBibG9jazogIiwgYmxvY2subV9tYXJraW5nVmVyc2lv
biwgIlxuIik7CisgICAgICAgICAgICAgICAgICAgIG91dC5wcmludCgiQmxvY2sgbG9jayBpcyBo
ZWxkOiAiLCBmb290ZXIubV9sb2NrLmlzSGVsZCgpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAg
ICAgb3V0LnByaW50KCJNYXJraW5nIHZlcnNpb24gb2YgYmxvY2s6ICIsIGZvb3Rlci5tX21hcmtp
bmdWZXJzaW9uLCAiXG4iKTsKICAgICAgICAgICAgICAgICAgICAgb3V0LnByaW50KCJNYXJraW5n
IHZlcnNpb24gb2YgaGVhcDogIiwgc3BhY2UoKS0+bWFya2luZ1ZlcnNpb24oKSwgIlxuIik7CiAg
ICAgICAgICAgICAgICAgICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOwogICAgICAgICAg
ICAgICAgIH0pOwpAQCAtMjc2LDEyICsyNzksMTIgQEAgdm9pZCBNYXJrZWRCbG9jazo6SGFuZGxl
OjpzcGVjaWFsaXplZFN3ZQogICAgICAgICBjaGFyKiBzdGFydE9mTGFzdENlbGwgPSBzdGF0aWNf
Y2FzdDxjaGFyKj4oY2VsbEFsaWduKGJsb2NrLmF0b21zKCkgKyBtX2VuZEF0b20gLSAxKSk7CiAg
ICAgICAgIGNoYXIqIHBheWxvYWRFbmQgPSBzdGFydE9mTGFzdENlbGwgKyBjZWxsU2l6ZTsKICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQocGF5bG9hZEVuZCAtIE1hcmtlZEJsb2NrOjpibG9ja1NpemUg
PD0gYml0d2lzZV9jYXN0PGNoYXIqPigmYmxvY2spKTsKLSAgICAgICAgY2hhciogcGF5bG9hZEJl
Z2luID0gYml0d2lzZV9jYXN0PGNoYXIqPihibG9jay5hdG9tcygpICsgZmlyc3RBdG9tKCkpOwor
ICAgICAgICBjaGFyKiBwYXlsb2FkQmVnaW4gPSBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGJsb2NrLmF0
b21zKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKHN3ZWVwTW9kZSA9PSBTd2VlcFRvRnJlZUxp
c3QpCiAgICAgICAgICAgICBzZXRJc0ZyZWVMaXN0ZWQoKTsKICAgICAgICAgaWYgKHNwYWNlKCkt
PmlzTWFya2luZygpKQotICAgICAgICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOworICAgICAg
ICAgICAgZm9vdGVyLm1fbG9jay51bmxvY2soKTsKICAgICAgICAgaWYgKGRlc3RydWN0aW9uTW9k
ZSAhPSBCbG9ja0hhc05vRGVzdHJ1Y3RvcnMpIHsKICAgICAgICAgICAgIGZvciAoY2hhciogY2Vs
bCA9IHBheWxvYWRCZWdpbjsgY2VsbCA8IHBheWxvYWRFbmQ7IGNlbGwgKz0gY2VsbFNpemUpCiAg
ICAgICAgICAgICAgICAgZGVzdHJveShjZWxsKTsKQEAgLTMyMCw5ICszMjMsOSBAQCB2b2lkIE1h
cmtlZEJsb2NrOjpIYW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgICAgICArK2NvdW50Owog
ICAgICAgICB9CiAgICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBt
X2VuZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAgICBpZiAoZW1wdHlN
b2RlID09IE5vdEVtcHR5Ci0gICAgICAgICAgICAmJiAoKG1hcmtzTW9kZSA9PSBNYXJrc05vdFN0
YWxlICYmIGJsb2NrLm1fbWFya3MuZ2V0KGkpKQorICAgICAgICAgICAgJiYgKChtYXJrc01vZGUg
PT0gTWFya3NOb3RTdGFsZSAmJiBmb290ZXIubV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICAg
ICAgfHwgKG5ld2x5QWxsb2NhdGVkTW9kZSA9PSBIYXNOZXdseUFsbG9jYXRlZCAmJiBtX25ld2x5
QWxsb2NhdGVkLmdldChpKSkpKSB7CiAgICAgICAgICAgICBpc0VtcHR5ID0gZmFsc2U7CiAgICAg
ICAgICAgICBjb250aW51ZTsKQEAgLTM0MCw3ICszNDMsNyBAQCB2b2lkIE1hcmtlZEJsb2NrOjpI
YW5kbGU6OnNwZWNpYWxpemVkU3dlCiAgICAgICAgIG1fbmV3bHlBbGxvY2F0ZWRWZXJzaW9uID0g
TWFya2VkU3BhY2U6Om51bGxWZXJzaW9uOwogICAgIAogICAgIGlmIChzcGFjZSgpLT5pc01hcmtp
bmcoKSkKLSAgICAgICAgYmxvY2subV9sb2NrLnVubG9jaygpOworICAgICAgICBmb290ZXIubV9s
b2NrLnVubG9jaygpOwogICAgIAogICAgIGlmIChkZXN0cnVjdGlvbk1vZGUgPT0gQmxvY2tIYXNE
ZXN0cnVjdG9yc0FuZENvbGxlY3RvcklzUnVubmluZykgewogICAgICAgICBmb3IgKHNpemVfdCBp
IDogZGVhZENlbGxzKQpAQCAtNDkyLDcgKzQ5NSw3IEBAIGlubGluZSBJdGVyYXRpb25TdGF0dXMg
TWFya2VkQmxvY2s6OkhhbmQKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTgwMzE1CiAgICAgCiAgICAgSGVhcENlbGw6OktpbmQga2luZCA9IG1fYXR0cmli
dXRlcy5jZWxsS2luZDsKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3RBdG9tKCk7IGkgPCBtX2Vu
ZEF0b207IGkgKz0gbV9hdG9tc1BlckNlbGwpIHsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewogICAgICAgICBIZWFwQ2VsbCogY2Vs
bCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJm1fYmxvY2stPmF0b21zKClbaV0p
OwogICAgICAgICBpZiAoIWlzTGl2ZShjZWxsKSkKICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAt
NTA3LDcgKzUxMCw3IEBAIHRlbXBsYXRlIDx0eXBlbmFtZSBGdW5jdG9yPgogaW5saW5lIEl0ZXJh
dGlvblN0YXR1cyBNYXJrZWRCbG9jazo6SGFuZGxlOjpmb3JFYWNoRGVhZENlbGwoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKIHsKICAgICBIZWFwQ2VsbDo6S2luZCBraW5kID0gbV9hdHRyaWJ1dGVz
LmNlbGxLaW5kOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJzdEF0b20oKTsgaSA8IG1fZW5kQXRv
bTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgeworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9l
bmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CiAgICAgICAgIEhlYXBDZWxsKiBjZWxsID0g
cmVpbnRlcnByZXRfY2FzdF9wdHI8SGVhcENlbGwqPigmbV9ibG9jay0+YXRvbXMoKVtpXSk7CiAg
ICAgICAgIGlmIChpc0xpdmUoY2VsbCkpCiAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTUyNyw4
ICs1MzAsOCBAQCBpbmxpbmUgSXRlcmF0aW9uU3RhdHVzIE1hcmtlZEJsb2NrOjpIYW5kCiAgICAg
V1RGOjpsb2FkTG9hZEZlbmNlKCk7CiAgICAgaWYgKGFyZU1hcmtzU3RhbGUpCiAgICAgICAgIHJl
dHVybiBJdGVyYXRpb25TdGF0dXM6OkNvbnRpbnVlOwotICAgIGZvciAoc2l6ZV90IGkgPSBmaXJz
dEF0b20oKTsgaSA8IG1fZW5kQXRvbTsgaSArPSBtX2F0b21zUGVyQ2VsbCkgewotICAgICAgICBp
ZiAoIWJsb2NrLm1fbWFya3MuZ2V0KGkpKQorICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9l
bmRBdG9tOyBpICs9IG1fYXRvbXNQZXJDZWxsKSB7CisgICAgICAgIGlmICghYmxvY2suZm9vdGVy
KCkubV9tYXJrcy5nZXQoaSkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBIZWFw
Q2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nhc3RfcHRyPEhlYXBDZWxsKj4oJm1fYmxvY2stPmF0
b21zKClbaV0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNl
LmNwcAkocmV2aXNpb24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFy
a2VkU3BhY2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzUsNyArMTM1LDYgQEAgY29uc3QgVmVj
dG9yPHNpemVfdD4mIHNpemVDbGFzc2VzKCkKICAgICAgICAgICAgIC8vIEZJWE1FOiBBbGwgb2Yg
dGhlc2UgdGhpbmdzIHNob3VsZCBoYXZlIElzb1N1YnNwYWNlcy4KICAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzk4NzYKICAgICAgICAgICAg
IGFkZChzaXplb2YoVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jaykpOwotICAgICAgICAgICAgYWRk
KHNpemVvZihGdW5jdGlvbkNvZGVCbG9jaykpOwogICAgICAgICAgICAgYWRkKHNpemVvZihKU1N0
cmluZykpOwogICAgICAgICAgICAgYWRkKHNpemVvZihKU0Z1bmN0aW9uKSk7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtlZFNwYWNlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkocmV2aXNpb24gMjI3NzE2KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya2VkU3BhY2UuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsMjUgKzUwLDI1IEBAIGNsYXNzIE1hcmtlZFNwYWNlIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShNYXJrZWRTcGFjZSk7CiBwdWJsaWM6CiAgICAgLy8gc2l6ZVN0ZXAgaXMgcmVh
bGx5IGEgc3lub255bSBmb3IgYXRvbVNpemU7IGl0J3Mgbm8gYWNjaWRlbnQgdGhhdCB0aGV5IGFy
ZSB0aGUgc2FtZS4KLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IHNpemVTdGVwID0gTWFya2VkQmxv
Y2s6OmF0b21TaXplOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNpemVTdGVwID0gTWFy
a2VkQmxvY2s6OmF0b21TaXplOwogICAgIAogICAgIC8vIFNpemVzIHVwIHRvIHRoaXMgYW1vdW50
IGdldCBhIHNpemUgY2xhc3MgZm9yIGVhY2ggc2l6ZSBzdGVwLgotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgcHJlY2lzZUN1dG9mZiA9IDgwOworICAgIHN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHBy
ZWNpc2VDdXRvZmYgPSA4MDsKICAgICAKLSAgICAvLyBUaGUgYW1vdW50IG9mIGF2YWlsYWJsZSBw
YXlsb2FkIGluIGEgYmxvY2sgaXMgdGhlIGJsb2NrJ3Mgc2l6ZSBtaW51cyB0aGUgaGVhZGVyLiBC
dXQgdGhlCisgICAgLy8gVGhlIGFtb3VudCBvZiBhdmFpbGFibGUgcGF5bG9hZCBpbiBhIGJsb2Nr
IGlzIHRoZSBibG9jaydzIHNpemUgbWludXMgdGhlIGZvb3Rlci4gQnV0IHRoZQogICAgIC8vIGhl
YWRlciBzaXplIG1pZ2h0IG5vdCBiZSBhdG9tIHNpemUgYWxpZ25lZCwgc28gd2Ugcm91bmQgZG93
biB0aGUgcmVzdWx0IGFjY29yZGluZ2x5LgotICAgIHN0YXRpYyBjb25zdCBzaXplX3QgYmxvY2tQ
YXlsb2FkID0gKE1hcmtlZEJsb2NrOjpibG9ja1NpemUgLSBzaXplb2YoTWFya2VkQmxvY2spKSAm
IH4oTWFya2VkQmxvY2s6OmF0b21TaXplIC0gMSk7CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgYmxvY2tQYXlsb2FkID0gKE1hcmtlZEJsb2NrOjpibG9ja1NpemUgLSBzaXplb2YoTWFya2Vk
QmxvY2s6OkZvb3RlcikpICYgfihNYXJrZWRCbG9jazo6YXRvbVNpemUgLSAxKTsKICAgICAKICAg
ICAvLyBUaGUgbGFyZ2VzdCBjZWxsIHdlJ3JlIHdpbGxpbmcgdG8gYWxsb2NhdGUgaW4gYSBNYXJr
ZWRCbG9jayB0aGUgIm5vcm1hbCB3YXkiIChpLmUuIHVzaW5nIHNpemUKICAgICAvLyBjbGFzc2Vz
LCByYXRoZXIgdGhhbiBhIGxhcmdlIGFsbG9jYXRpb24pIGlzIGhhbGYgdGhlIHNpemUgb2YgdGhl
IHBheWxvYWQsIHJvdW5kZWQgZG93bi4gVGhpcwogICAgIC8vIGVuc3VyZXMgdGhhdCB3ZSBvbmx5
IHVzZSB0aGUgc2l6ZSBjbGFzcyBhcHByb2FjaCBpZiBpdCBtZWFucyBiZWluZyBhYmxlIHRvIHBh
Y2sgdHdvIHRoaW5ncwogICAgIC8vIGludG8gb25lIGJsb2NrLgotICAgIHN0YXRpYyBjb25zdCBz
aXplX3QgbGFyZ2VDdXRvZmYgPSAoYmxvY2tQYXlsb2FkIC8gMikgJiB+KHNpemVTdGVwIC0gMSk7
CisgICAgc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgbGFyZ2VDdXRvZmYgPSAoYmxvY2tQYXlsb2Fk
IC8gMikgJiB+KHNpemVTdGVwIC0gMSk7CiAKLSAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IG51bVNp
emVDbGFzc2VzID0gbGFyZ2VDdXRvZmYgLyBzaXplU3RlcDsKKyAgICBzdGF0aWMgY29uc3RleHBy
IHNpemVfdCBudW1TaXplQ2xhc3NlcyA9IGxhcmdlQ3V0b2ZmIC8gc2l6ZVN0ZXA7CiAgICAgCi0g
ICAgc3RhdGljIGNvbnN0IEhlYXBWZXJzaW9uIG51bGxWZXJzaW9uID0gMDsgLy8gVGhlIHZlcnNp
b24gb2YgZnJlc2hseSBhbGxvY2F0ZWQgYmxvY2tzLgotICAgIHN0YXRpYyBjb25zdCBIZWFwVmVy
c2lvbiBpbml0aWFsVmVyc2lvbiA9IDI7IC8vIFRoZSB2ZXJzaW9uIHRoYXQgdGhlIGhlYXAgc3Rh
cnRzIG91dCB3aXRoLiBTZXQgdG8gbWFrZSBzdXJlIHRoYXQgbmV4dFZlcnNpb24obnVsbFZlcnNp
b24pICE9IGluaXRpYWxWZXJzaW9uLgorICAgIHN0YXRpYyBjb25zdGV4cHIgSGVhcFZlcnNpb24g
bnVsbFZlcnNpb24gPSAwOyAvLyBUaGUgdmVyc2lvbiBvZiBmcmVzaGx5IGFsbG9jYXRlZCBibG9j
a3MuCisgICAgc3RhdGljIGNvbnN0ZXhwciBIZWFwVmVyc2lvbiBpbml0aWFsVmVyc2lvbiA9IDI7
IC8vIFRoZSB2ZXJzaW9uIHRoYXQgdGhlIGhlYXAgc3RhcnRzIG91dCB3aXRoLiBTZXQgdG8gbWFr
ZSBzdXJlIHRoYXQgbmV4dFZlcnNpb24obnVsbFZlcnNpb24pICE9IGluaXRpYWxWZXJzaW9uLgog
ICAgIAogICAgIHN0YXRpYyBIZWFwVmVyc2lvbiBuZXh0VmVyc2lvbihIZWFwVmVyc2lvbiB2ZXJz
aW9uKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAyMjc3MTYpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQko
d29ya2luZyBjb3B5KQpAQCAtMzA3LDcgKzMwNyw3IEBAIGVuZAogX2hhbmRsZVVuY2F1Z2h0RXhj
ZXB0aW9uOgogICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMKICAgICBh
bmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10s
IHQzCisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9v
dGVyOjptX3ZtW3QzXSwgdDMKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodDMsIHQwKQogICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JDYXRj
aFt0M10sIGNmcgogICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdCkBAIC02
MzQsNyArNjM0LDcgQEAgZW5kCiBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihsYWJlbCkKICAgICBs
b2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9j
a01hc2ssIHQzCi0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0MworICAgIGxvYWRw
IE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0M10s
IHQzCiAgICAgYnRpeiBWTTo6bV9leGNlcHRpb25bdDNdLCAubm9FeGNlcHRpb24KICAgICBqbXAg
bGFiZWwKIC5ub0V4Y2VwdGlvbjoKQEAgLTIwMDAsNyArMjAwMCw3IEBAIF9sbGludF9vcF9jYXRj
aDoKICAgICAjIGFuZCBoYXZlIHNldCBWTTo6dGFyZ2V0SW50ZXJwcmV0ZXJQQ0ZvclRocm93Lgog
ICAgIGxvYWRwIENhbGxlZSArIFBheWxvYWRPZmZzZXRbY2ZyXSwgdDMKICAgICBhbmRwIE1hcmtl
ZEJsb2NrTWFzaywgdDMKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10sIHQzCisgICAg
bG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3Zt
W3QzXSwgdDMKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2
ZXNCdWZmZXIodDMsIHQwKQogICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10sIGNm
cgogICAgIHN0b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdCkBAIC0yMDE1LDcgKzIw
MTUsNyBAQCBfbGxpbnRfb3BfY2F0Y2g6CiAuaXNDYXRjaGFibGVFeGNlcHRpb246CiAgICAgbG9h
ZHAgQ2FsbGVlICsgUGF5bG9hZE9mZnNldFtjZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tN
YXNrLCB0MwotICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAgICBsb2FkcCBN
YXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0
MwogCiAgICAgbG9hZGkgVk06Om1fZXhjZXB0aW9uW3QzXSwgdDAKICAgICBzdG9yZWkgMCwgVk06
Om1fZXhjZXB0aW9uW3QzXQpAQCAtMjA1Myw3ICsyMDUzLDcgQEAgX2xsaW50X3Rocm93X2Zyb21f
c2xvd19wYXRoX3RyYW1wb2xpbmU6CiAgICAgIyBUaGlzIGVzc2VudGlhbGx5IGVtdWxhdGVzIHRo
ZSBKSVQncyB0aHJvd2luZyBwcm90b2NvbC4KICAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDEKICAg
ICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDEKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0
MV0sIHQxCisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6
Rm9vdGVyOjptX3ZtW3QxXSwgdDEKICAgICBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHQxLCB0MikKICAgICBqbXAgVk06OnRhcmdldE1hY2hpbmVQQ0ZvclRo
cm93W3QxXQogCkBAIC0yMDcyLDcgKzIwNzIsNyBAQCBtYWNybyBuYXRpdmVDYWxsVHJhbXBvbGlu
ZShleGVjdXRhYmxlT2ZmCiAgICAgaWYgWDg2IG9yIFg4Nl9XSU4KICAgICAgICAgc3VicCA4LCBz
cCAjIGFsaWduIHN0YWNrIHBvaW50ZXIKICAgICAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQx
Ci0gICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QxXSwgdDMKKyAgICAgICAgbG9hZHAg
TWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QxXSwg
dDMKICAgICAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0M10KICAgICAgICAgbW92
ZSBjZnIsIGEwICAjIGEwID0gZWN4CiAgICAgICAgIHN0b3JlcCBhMCwgW3NwXQpAQCAtMjA4Miw3
ICsyMDgyLDcgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogICAg
ICAgICBjYWxsIGV4ZWN1dGFibGVPZmZzZXRUb0Z1bmN0aW9uW3QxXQogICAgICAgICBsb2FkcCBD
YWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCiAgICAgICAgIGFuZHAgTWFya2VkQmxvY2tN
YXNrLCB0MwotICAgICAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10sIHQzCisgICAgICAg
IGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92
bVt0M10sIHQzCiAgICAgICAgIGFkZHAgOCwgc3AKICAgICBlbHNpZiBBUk0gb3IgQVJNdjcgb3Ig
QVJNdjdfVFJBRElUSU9OQUwgb3IgQ19MT09QIG9yIE1JUFMKICAgICAgICAgaWYgTUlQUwpAQCAt
MjA5NSw3ICsyMDk1LDcgQEAgbWFjcm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9m
ZgogICAgICAgICBlbmQKICAgICAgICAgIyB0MSBhbHJlYWR5IGNvbnRhaW5zIHRoZSBDYWxsZWUu
CiAgICAgICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MQotICAgICAgICBsb2FkcCBNYXJrZWRC
bG9jazo6bV92bVt0MV0sIHQxCisgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0
ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0MV0sIHQxCiAgICAgICAgIHN0b3JlcCBjZnIs
IFZNOjp0b3BDYWxsRnJhbWVbdDFdCiAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAgICAgICBsb2Fk
aSBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQxCkBAIC0yMTA4LDcgKzIxMDgsNyBAQCBt
YWNybyBuYXRpdmVDYWxsVHJhbXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgICAgIGVuZAogICAg
ICAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCiAgICAgICAgIGFuZHAg
TWFya2VkQmxvY2tNYXNrLCB0MwotICAgICAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10s
IHQzCisgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6
OkZvb3Rlcjo6bV92bVt0M10sIHQzCiAgICAgICAgIGlmIE1JUFMKICAgICAgICAgICAgIGFkZHAg
MjQsIHNwCiAgICAgICAgIGVsc2UKQEAgLTIxNDAsNyArMjE0MCw3IEBAIG1hY3JvIGludGVybmFs
RnVuY3Rpb25DYWxsVHJhbXBvbGluZShvZmYKICAgICBpZiBYODYgb3IgWDg2X1dJTgogICAgICAg
ICBzdWJwIDgsIHNwICMgYWxpZ24gc3RhY2sgcG9pbnRlcgogICAgICAgICBhbmRwIE1hcmtlZEJs
b2NrTWFzaywgdDEKLSAgICAgICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDFdLCB0MworICAg
ICAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6
Om1fdm1bdDFdLCB0MwogICAgICAgICBzdG9yZXAgY2ZyLCBWTTo6dG9wQ2FsbEZyYW1lW3QzXQog
ICAgICAgICBtb3ZlIGNmciwgYTAgICMgYTAgPSBlY3gKICAgICAgICAgc3RvcmVwIGEwLCBbc3Bd
CkBAIC0yMTQ5LDEzICsyMTQ5LDEzIEBAIG1hY3JvIGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBv
bGluZShvZmYKICAgICAgICAgY2FsbCBvZmZzZXRPZkZ1bmN0aW9uW3QxXQogICAgICAgICBsb2Fk
cCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCiAgICAgICAgIGFuZHAgTWFya2VkQmxv
Y2tNYXNrLCB0MwotICAgICAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10sIHQzCisgICAg
ICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6
bV92bVt0M10sIHQzCiAgICAgICAgIGFkZHAgOCwgc3AKICAgICBlbHNpZiBBUk0gb3IgQVJNdjcg
b3IgQVJNdjdfVFJBRElUSU9OQUwgb3IgQ19MT09QIG9yIE1JUFMKICAgICAgICAgc3VicCA4LCBz
cCAjIGFsaWduIHN0YWNrIHBvaW50ZXIKICAgICAgICAgIyB0MSBhbHJlYWR5IGNvbnRhaW5zIHRo
ZSBDYWxsZWUuCiAgICAgICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MQotICAgICAgICBsb2Fk
cCBNYXJrZWRCbG9jazo6bV92bVt0MV0sIHQxCisgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9v
dGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0MV0sIHQxCiAgICAgICAgIHN0
b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDFdCiAgICAgICAgIG1vdmUgY2ZyLCBhMAogICAg
ICAgICBsb2FkaSBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQxCkBAIC0yMTY3LDcgKzIx
NjcsNyBAQCBtYWNybyBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUob2ZmCiAgICAgICAg
IGVuZAogICAgICAgICBsb2FkcCBDYWxsZWUgKyBQYXlsb2FkT2Zmc2V0W2Nmcl0sIHQzCiAgICAg
ICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MwotICAgICAgICBsb2FkcCBNYXJrZWRCbG9jazo6
bV92bVt0M10sIHQzCisgICAgICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFy
a2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0M10sIHQzCiAgICAgICAgIGFkZHAgOCwgc3AKICAgICBl
bHNlCiAgICAgICAgIGVycm9yCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMjI3NzE2KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTI4MCw3ICsyODAsNyBAQCBlbmQKIF9oYW5kbGVVbmNhdWdodEV4Y2Vw
dGlvbjoKICAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFz
aywgdDMKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10sIHQzCisgICAgbG9hZHAgTWFy
a2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QzXSwgdDMK
ICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dDMsIHQwKQogICAgIGxvYWRwIFZNOjpjYWxsRnJhbWVGb3JDYXRjaFt0M10sIGNmcgogICAgIHN0
b3JlcCAwLCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hbdDNdCkBAIC01NjEsNyArNTYxLDcgQEAgZW5k
CiBtYWNybyBicmFuY2hJZkV4Y2VwdGlvbihsYWJlbCkKICAgICBsb2FkcCBDYWxsZWVbY2ZyXSwg
dDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAgICBsb2FkcCBNYXJrZWRCbG9jazo6
bV92bVt0M10sIHQzCisgICAgbG9hZHAgTWFya2VkQmxvY2tGb290ZXJPZmZzZXQgKyBNYXJrZWRC
bG9jazo6Rm9vdGVyOjptX3ZtW3QzXSwgdDMKICAgICBidHF6IFZNOjptX2V4Y2VwdGlvblt0M10s
IC5ub0V4Y2VwdGlvbgogICAgIGptcCBsYWJlbAogLm5vRXhjZXB0aW9uOgpAQCAtMjAwMiw3ICsy
MDAyLDcgQEAgX2xsaW50X29wX2NhdGNoOgogICAgICMgYW5kIGhhdmUgc2V0IFZNOjp0YXJnZXRJ
bnRlcnByZXRlclBDRm9yVGhyb3cuCiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0sIHQzCiAgICAgYW5k
cCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDNdLCB0
MworICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rl
cjo6bV92bVt0M10sIHQzCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNh
bGxlZVNhdmVzQnVmZmVyKHQzLCB0MCkKICAgICBsb2FkcCBWTTo6Y2FsbEZyYW1lRm9yQ2F0Y2hb
dDNdLCBjZnIKICAgICBzdG9yZXAgMCwgVk06OmNhbGxGcmFtZUZvckNhdGNoW3QzXQpAQCAtMjAy
Miw3ICsyMDIyLDcgQEAgX2xsaW50X29wX2NhdGNoOgogLmlzQ2F0Y2hhYmxlRXhjZXB0aW9uOgog
ICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MwogICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0Mwot
ICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QzXSwgdDMKKyAgICBsb2FkcCBNYXJrZWRCbG9j
a0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDNdLCB0MwogCiAgICAg
bG9hZHEgVk06Om1fZXhjZXB0aW9uW3QzXSwgdDAKICAgICBzdG9yZXEgMCwgVk06Om1fZXhjZXB0
aW9uW3QzXQpAQCAtMjA1Miw3ICsyMDUyLDcgQEAgX2xsaW50X29wX2VuZDoKIF9sbGludF90aHJv
d19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgogICAgIGxvYWRwIENhbGxlZVtjZnJdLCB0MQog
ICAgIGFuZHAgTWFya2VkQmxvY2tNYXNrLCB0MQotICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3Zt
W3QxXSwgdDEKKyAgICBsb2FkcCBNYXJrZWRCbG9ja0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2Nr
OjpGb290ZXI6Om1fdm1bdDFdLCB0MQogICAgIGNvcHlDYWxsZWVTYXZlc1RvVk1FbnRyeUZyYW1l
Q2FsbGVlU2F2ZXNCdWZmZXIodDEsIHQyKQogCiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93
X3BhdGhfaGFuZGxlX2V4Y2VwdGlvbikKQEAgLTIwNjIsNyArMjA2Miw3IEBAIF9sbGludF90aHJv
d19mcm9tX3Nsb3dfcGF0aF90cmFtcG9saW5lOgogICAgICMgVGhpcyBlc3NlbnRpYWxseSBlbXVs
YXRlcyB0aGUgSklUJ3MgdGhyb3dpbmcgcHJvdG9jb2wuCiAgICAgbG9hZHAgQ2FsbGVlW2Nmcl0s
IHQxCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQxCi0gICAgbG9hZHAgTWFya2VkQmxvY2s6
Om1fdm1bdDFdLCB0MQorICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2Vk
QmxvY2s6OkZvb3Rlcjo6bV92bVt0MV0sIHQxCiAgICAgam1wIFZNOjp0YXJnZXRNYWNoaW5lUENG
b3JUaHJvd1t0MV0KIAogCkBAIC0yMDc3LDcgKzIwNzcsNyBAQCBtYWNybyBuYXRpdmVDYWxsVHJh
bXBvbGluZShleGVjdXRhYmxlT2ZmCiAgICAgc3RvcmVwIDAsIENvZGVCbG9ja1tjZnJdCiAgICAg
bG9hZHAgQ2FsbGVlW2Nmcl0sIHQwCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQwLCB0MQot
ICAgIGxvYWRwIE1hcmtlZEJsb2NrOjptX3ZtW3QxXSwgdDEKKyAgICBsb2FkcCBNYXJrZWRCbG9j
a0Zvb3Rlck9mZnNldCArIE1hcmtlZEJsb2NrOjpGb290ZXI6Om1fdm1bdDFdLCB0MQogICAgIHN0
b3JlcCBjZnIsIFZNOjp0b3BDYWxsRnJhbWVbdDFdCiAgICAgaWYgQVJNNjQgb3IgQ19MT09QCiAg
ICAgICAgIHN0b3JlcCBsciwgUmV0dXJuUENbY2ZyXQpAQCAtMjEwNCw3ICsyMTA0LDcgQEAgbWFj
cm8gbmF0aXZlQ2FsbFRyYW1wb2xpbmUoZXhlY3V0YWJsZU9mZgogCiAgICAgbG9hZHAgQ2FsbGVl
W2Nmcl0sIHQzCiAgICAgYW5kcCBNYXJrZWRCbG9ja01hc2ssIHQzCi0gICAgbG9hZHAgTWFya2Vk
QmxvY2s6Om1fdm1bdDNdLCB0MworICAgIGxvYWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsg
TWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0M10sIHQzCiAKICAgICBidHFueiBWTTo6bV9leGNl
cHRpb25bdDNdLCAuaGFuZGxlRXhjZXB0aW9uCiAKQEAgLTIxMjEsNyArMjEyMSw3IEBAIG1hY3Jv
IGludGVybmFsRnVuY3Rpb25DYWxsVHJhbXBvbGluZShvZmYKICAgICBzdG9yZXAgMCwgQ29kZUJs
b2NrW2Nmcl0KICAgICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDAKICAgICBhbmRwIE1hcmtlZEJsb2Nr
TWFzaywgdDAsIHQxCi0gICAgbG9hZHAgTWFya2VkQmxvY2s6Om1fdm1bdDFdLCB0MQorICAgIGxv
YWRwIE1hcmtlZEJsb2NrRm9vdGVyT2Zmc2V0ICsgTWFya2VkQmxvY2s6OkZvb3Rlcjo6bV92bVt0
MV0sIHQxCiAgICAgc3RvcmVwIGNmciwgVk06OnRvcENhbGxGcmFtZVt0MV0KICAgICBpZiBBUk02
NCBvciBDX0xPT1AKICAgICAgICAgc3RvcmVwIGxyLCBSZXR1cm5QQ1tjZnJdCkBAIC0yMTQ3LDcg
KzIxNDcsNyBAQCBtYWNybyBpbnRlcm5hbEZ1bmN0aW9uQ2FsbFRyYW1wb2xpbmUob2ZmCiAKICAg
ICBsb2FkcCBDYWxsZWVbY2ZyXSwgdDMKICAgICBhbmRwIE1hcmtlZEJsb2NrTWFzaywgdDMKLSAg
ICBsb2FkcCBNYXJrZWRCbG9jazo6bV92bVt0M10sIHQzCisgICAgbG9hZHAgTWFya2VkQmxvY2tG
b290ZXJPZmZzZXQgKyBNYXJrZWRCbG9jazo6Rm9vdGVyOjptX3ZtW3QzXSwgdDMKIAogICAgIGJ0
cW56IFZNOjptX2V4Y2VwdGlvblt0M10sIC5oYW5kbGVFeGNlcHRpb24KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
cmV2aXNpb24gMjI3NzE2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC00MzYsNiArNDM2LDcgQEAgY29uc3Qg
Tm90SW5pdGlhbGl6YXRpb24gPSBjb25zdGV4cHIgSW5pdAogCiBjb25zdCBNYXJrZWRCbG9ja1Np
emUgPSBjb25zdGV4cHIgTWFya2VkQmxvY2s6OmJsb2NrU2l6ZQogY29uc3QgTWFya2VkQmxvY2tN
YXNrID0gfihNYXJrZWRCbG9ja1NpemUgLSAxKQorY29uc3QgTWFya2VkQmxvY2tGb290ZXJPZmZz
ZXQgPSBjb25zdGV4cHIgTWFya2VkQmxvY2s6Om9mZnNldE9mRm9vdGVyCiAKIGNvbnN0IEJsYWNr
VGhyZXNob2xkID0gY29uc3RleHByIGJsYWNrVGhyZXNob2xkCiAK
</data>
<flag name="review"
          id="351427"
          type_id="1"
          status="+"
          setter="jfbastien"
    />
          </attachment>
      

    </bug>

</bugzilla>