<?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>228053</bug_id>
          
          <creation_ts>2021-07-17 20:01:48 -0700</creation_ts>
          <short_desc>DFGByteCodeParser.cpp should avoid resizing the Operands&lt;&gt; of every BasicBlock on every inlining</short_desc>
          <delta_ts>2021-11-19 15:17:55 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>REOPENED</bug_status>
          <resolution></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>
          <dependson>233387</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Robin Morisset">rmorisset</reporter>
          <assigned_to name="Robin Morisset">rmorisset</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1777735</commentid>
    <comment_count>0</comment_count>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-07-17 20:01:48 -0700</bug_when>
    <thetext>The dfg bytecode parser only makes use of block-&gt;variablesAtTail. But currently it updates the size of variablesAtHead, valuesAtHead, valuesAtTail and intersectionOfPastValuesAtHead every single time it changes the number of Tmps and/or Locals. This happens notably whenever it inlines a function.
It is not nearly as cheap as it looks, as each resizing may reallocate a Vector, requires filling the new slots with zeros, and requires moving the existing values (which are all 0) to the new Vector. This was obvious when looking at profiling of JS2: bzero + memmove are the two hottest C++ functions, and the manipulation of Operands is partly responsible.
It can be easily improved: only resize block-&gt;variablesAtTail on inlining, and initialize all of the other operands at the very end of the DFGByteCodeParser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777736</commentid>
    <comment_count>1</comment_count>
      <attachid>433740</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-07-17 20:06:08 -0700</bug_when>
    <thetext>Created attachment 433740
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777739</commentid>
    <comment_count>2</comment_count>
      <attachid>433742</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-07-17 20:09:43 -0700</bug_when>
    <thetext>Created attachment 433742
Patch

updated Changelog with perf numbers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1777740</commentid>
    <comment_count>3</comment_count>
      <attachid>433743</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-07-17 20:11:37 -0700</bug_when>
    <thetext>Created attachment 433743
Patch

Fix style nitpick.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1779352</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-07-24 20:02:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/81064797&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816168</commentid>
    <comment_count>5</comment_count>
      <attachid>433743</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2021-11-17 15:57:14 -0800</bug_when>
    <thetext>Comment on attachment 433743
Patch

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:8971
&gt; +        block-&gt;variablesAtHead = Operands&lt;Node*&gt;(m_numArguments, m_numLocals, m_numTmps);
&gt; +        block-&gt;valuesAtHead = Operands&lt;AbstractValue&gt;(m_numArguments, m_numLocals, m_numTmps);
&gt; +        block-&gt;valuesAtTail = Operands&lt;AbstractValue&gt;(m_numArguments, m_numLocals, m_numTmps);
&gt; +        block-&gt;intersectionOfPastValuesAtHead = Operands&lt;AbstractValue&gt;(m_numArguments, m_numLocals, m_numTmps);

nit: Use the OperandsLike constructor so these lines of code don&apos;t have to change in the future if we change the Operands constructor you&apos;re invoking?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816260</commentid>
    <comment_count>6</comment_count>
      <attachid>444624</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2021-11-17 18:20:26 -0800</bug_when>
    <thetext>Created attachment 444624
Patch

Applied Saam&apos;s suggestion and rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1816647</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-11-18 14:57:05 -0800</bug_when>
    <thetext>Committed r286030 (244418@main): &lt;https://commits.webkit.org/244418@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 444624.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1817022</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2021-11-19 15:17:55 -0800</bug_when>
    <thetext>Re-opened since this is blocked by bug 233387</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433740</attachid>
            <date>2021-07-17 20:06:08 -0700</date>
            <delta_ts>2021-07-17 20:09:43 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch228053</filename>
            <type>text/plain</type>
            <size>14121</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDExNDU1NzJhZjdhNy4uYjZiODJkZGRkNGUzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAorMjAyMS0wNy0xNyAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBzaG91bGQgYXZvaWQgcmVzaXppbmcgdGhlIE9wZXJhbmRzPD4gb2YgZXZlcnkg
QmFzaWNCbG9jayBvbiBldmVyeSBpbmxpbmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIGRmZyBieXRlY29kZSBwYXJzZXIgb25seSBtYWtlcyB1
c2Ugb2YgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC4KKyAgICAgICAgQnV0IGN1cnJlbnRseSBpdCB1
cGRhdGVzIHRoZSBzaXplIG9mIHZhcmlhYmxlc0F0SGVhZCwgdmFsdWVzQXRIZWFkLCB2YWx1ZXNB
dFRhaWwgYW5kIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZCBldmVyeSBzaW5nbGUgdGlt
ZSBpdCBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgVG1wcyBhbmQvb3IgTG9jYWxzLgorICAgICAgICBU
aGlzIGhhcHBlbnMgbm90YWJseSB3aGVuZXZlciBpdCBpbmxpbmVzIGEgZnVuY3Rpb24uCisKKyAg
ICAgICAgSXQgaXMgbm90IG5lYXJseSBhcyBjaGVhcCBhcyBpdCBsb29rcywgYXMgZWFjaCByZXNp
emluZyBtYXkgcmVhbGxvY2F0ZSBhIFZlY3RvciwgcmVxdWlyZXMgZmlsbGluZyB0aGUgbmV3IHNs
b3RzIHdpdGggemVyb3MsIGFuZCByZXF1aXJlcyBtb3ZpbmcgdGhlIGV4aXN0aW5nIHZhbHVlcyAo
d2hpY2ggYXJlIGFsbCAwKSB0byB0aGUgbmV3IFZlY3Rvci4KKyAgICAgICAgVGhpcyB3YXMgb2J2
aW91cyB3aGVuIGxvb2tpbmcgYXQgcHJvZmlsaW5nIG9mIEpTMjogYnplcm8gKyBtZW1tb3ZlIGFy
ZSB0aGUgdHdvIGhvdHRlc3QgQysrIGZ1bmN0aW9ucywgYW5kIHRoZSBtYW5pcHVsYXRpb24gb2Yg
T3BlcmFuZHMgaXMgcGFydGx5IHJlc3BvbnNpYmxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4
ZXMgdGhpcyBieSBvbmx5IHJlc2l6aW5nIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwgZHVyaW5nIHRo
ZSBleGVjdXRpb24gb2YgdGhlIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGluaXRpYWxpemluZyBhbGwg
b2YgdGhlIG90aGVyIG9wZXJhbmRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiBpdC4KKyAgICAgICAgSXQg
YWxzbyBtZXJnZXMgdGhlIGFkanVzdG1lbnQgb2YgbnVtTG9jYWxzIGFuZCBvZiBudW1UbXBzIGZv
ciB2YXJpYWJsZXNBdFRhaWwgZHVyaW5nIGlubGluaW5nLCB0byBhdm9pZCBhY2NpZGVudGFsbHkg
bW92aW5nIGRhdGEgdHdpY2UuCisKKyAgICAgICAgKiBieXRlY29kZS9PcGVyYW5kcy5oOgorICAg
ICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzQW5kVG1wcyk6CisgICAgICAgICogZGZn
L0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAg
ICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6ZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRUYWlsKToKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW5zdXJlTG9jYWxzQW5kVG1wc0ZvclZhcmlhYmxlc0F0
VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlQmxvY2sp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0ZVRhcmdldGFibGVC
bG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJn
ZXRhYmxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjppbmxpbmVD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0lu
bGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlR2V0QnlJ
ZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVB1dEJ5SWQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisKIDIwMjEtMDctMTUg
IFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBIYXJk
ZW4gZGVmYXVsdFRpbWVab25lIHJldHJpZXZhbApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvT3BlcmFuZHMuaAppbmRleCA3ZjUwYWVmMjFhYWQuLmNlZWM3NDJhYmFiMSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTI3MiwxNiArMjcyLDI1IEBA
IHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5zdXJlVG1wcyhzaXplX3Qg
c2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgpKQorICAgIHZvaWQgZW5zdXJlTG9jYWxz
QW5kVG1wcyhzaXplX3QgbmV3TnVtTG9jYWxzLCBzaXplX3QgbmV3TnVtVG1wcywgY29uc3QgVCYg
ZW5zdXJlZFZhbHVlID0gVCgpKQogICAgIHsKLSAgICAgICAgaWYgKHNpemUgPD0gbnVtYmVyT2ZU
bXBzKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChuZXdOdW1Mb2NhbHMg
Pj0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChuZXdOdW1UbXBzID49IG51bWJl
ck9mVG1wcygpKTsKKworICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0gbnVtYmVyT2ZMb2Nh
bHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRtcHMoKTsKIAogICAg
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgc2l6ZV90IG5l
d1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMoKSArIHNpemU7Cisg
ICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSArIG5ld051bUxvY2Fs
cyArIG5ld051bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6ZSk7CiAKKyAgICAg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisgICAgICAgICAgICBt
X3ZhbHVlc1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgob2xkTnVtVG1wcyAt
IDEgLSBpKV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7CiAgICAgICAg
IGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0czxUPjo6bmVlZHNJ
bml0aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuZXdO
dW1Mb2NhbHMgLSBvbGROdW1Mb2NhbHM7ICsraSkKKyAgICAgICAgICAgICAgICBtX3ZhbHVlc1ts
b2NhbEluZGV4KG9sZE51bUxvY2FscyArIGkpXSA9IGVuc3VyZWRWYWx1ZTsKICAgICAgICAgICAg
IGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQogICAgICAgICAgICAg
ICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCA5MjRmNmQ0M2M0NjkuLmJkN2Q3
YzIwZGFmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
CkBAIC02MywyNCArNjMsNiBAQCBCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygpCiB7CiB9CiAKLXZv
aWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxvY2FscykKLXsKLSAg
ICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgdmFyaWFi
bGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgIHZhbHVlc0F0SGVhZC5l
bnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB2YWx1ZXNBdFRhaWwuZW5zdXJlTG9jYWxz
KG5ld051bUxvY2Fscyk7Ci0gICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkLmVuc3Vy
ZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Ci19Ci0KLXZv
aWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKQotewotICAgIHZh
cmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZhcmlhYmxlc0F0VGFp
bC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5l
d051bVRtcHMpOwotICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAg
IGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMsIEFi
c3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Ci19Ci0KIHZvaWQgQmFzaWNCbG9jazo6cmVwbGFjZVRl
cm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBOb2RlQW5kSW5kZXggcmVz
dWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNC
bG9jay5oCmluZGV4IDJjOGE2MTM2ZjM1OC4uN2VjZWEyMDQ3ZTc4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtNTMsOSArNTMsNiBAQCBzdHJ1Y3QgQmFz
aWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgICAgICBmbG9hdCBleGVjdXRp
b25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fs
cyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOwotICAgIHZvaWQgZW5zdXJlVG1wcyh1bnNpZ25lZCBu
ZXdOdW1UbXBzKTsKLSAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbm9k
ZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gIXNpemUoKTsg
fQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rlc1tpXTsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBhMjk2
YzRiODdjODUuLjE2M2I3Y2E0NmNmZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTEzOCwyNCArMTM4LDI1IEBAIHByaXZhdGU6CiAg
ICAgLy8gSnVzdCBwYXJzZSBmcm9tIG1fY3VycmVudEluZGV4IHRvIHRoZSBlbmQgb2YgdGhlIGN1
cnJlbnQgQ29kZUJsb2NrLgogICAgIHZvaWQgcGFyc2VDb2RlQmxvY2soKTsKICAgICAKLSAgICB2
b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCisgICAgdm9pZCBlbnN1cmVM
b2NhbHNGb3JWYXJpYWJsZXNBdFRhaWwodW5zaWduZWQgbmV3TnVtTG9jYWxzKQogICAgIHsKICAg
ICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5nIHRvIHJhaXNlIG1fbnVt
TG9jYWxzIGZyb20gIiwgbV9udW1Mb2NhbHMsICIgdG8gIiwgbmV3TnVtTG9jYWxzLCAiXG4iKTsK
ICAgICAgICAgaWYgKG5ld051bUxvY2FscyA8PSBtX251bUxvY2FscykKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7CiAgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQotICAgICAgICAgICAg
bV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7CisgICAgICAgICAg
ICBtX2dyYXBoLmJsb2NrKGkpLT52YXJpYWJsZXNBdFRhaWwuZW5zdXJlTG9jYWxzKG5ld051bUxv
Y2Fscyk7CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVkIG5ld051bVRtcHMp
CisgICAgdm9pZCBlbnN1cmVMb2NhbHNBbmRUbXBzRm9yVmFyaWFibGVzQXRUYWlsKHVuc2lnbmVk
IG5ld051bUxvY2FscywgdW5zaWduZWQgbmV3TnVtVG1wcykKICAgICB7Ci0gICAgICAgIFZFUkJP
U0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1UbXBzIGZyb20gIiwg
bV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOwotICAgICAgICBpZiAobmV3TnVt
VG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVMb2NhbHNB
bmRUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1Mb2NhbHMvbV9udW1UbXBzIGZyb20gIiwgbV9u
dW1Mb2NhbHMsICIvIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bUxvY2FscywgIi8iLCBuZXdO
dW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051bUxvY2FscyA8PSBtX251bUxvY2FscyAm
JiBuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
bV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBzdGQ6Om1heCht
X251bUxvY2FscywgbmV3TnVtTG9jYWxzKTsKKyAgICAgICAgbV9udW1UbXBzID0gc3RkOjptYXgo
bV9udW1UbXBzLCBuZXdOdW1UbXBzKTsKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X2dyYXBoLm51bUJsb2NrcygpOyArK2kpCi0gICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT5l
bnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+dmFy
aWFibGVzQXRUYWlsLmVuc3VyZUxvY2Fsc0FuZFRtcHMobV9udW1Mb2NhbHMsIG1fbnVtVG1wcyk7
CiAgICAgfQogCiAKQEAgLTE3MSw2ICsxNzIsOCBAQCBwcml2YXRlOgogICAgIC8vIHRoYW4gdG8g
bW92ZSB0aGUgcmlnaHQgaW5kZXggYWxsIHRoZSB3YXkgdG8gdGhlIHRyZWF0bWVudCBvZiBvcF9y
ZXQuCiAgICAgQmFzaWNCbG9jayogYWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRl
eCk7CiAgICAgQmFzaWNCbG9jayogYWxsb2NhdGVVbnRhcmdldGFibGVCbG9jaygpOworICAgIC8v
IEhlbHBlciBmb3IgYWxsb2NhdGVUYXJnZXRhYmxlQmxvY2sgYW5kIGFsbG9jYXRlVW50YXJnZXRh
YmxlQmxvY2ssIGRvIG5vdCB1c2UgZGlyZWN0bHkKKyAgICBCYXNpY0Jsb2NrKiBhbGxvY2F0ZUJs
b2NrKEJ5dGVjb2RlSW5kZXggaW5kZXgpOwogICAgIC8vIEFuIHVudGFyZ2V0YWJsZSBibG9jayBj
YW4gYmUgZ2l2ZW4gYSBieXRlY29kZUluZGV4IHRvIGJlIGxhdGVyIG1hbmFnZWQgYnkgbGlua0Js
b2NrLCBidXQgb25seSBvbmNlLCBhbmQgaXQgY2FuIG5ldmVyIGdvIGluIHRoZSBvdGhlciBkaXJl
Y3Rpb24KICAgICB2b2lkIG1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayosIEJ5dGVjb2Rl
SW5kZXgpOwogICAgIHZvaWQgYWRkSnVtcFRvKEJhc2ljQmxvY2sqKTsKQEAgLTEyNjIsMjQgKzEy
NjUsMzIgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzQW55Rm9yY2VPU1JFeGl0cyB7IGZhbHNl
IH07CiB9OwogCitCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVCbG9jayhCeXRl
Y29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgLy8gV2UgZG9uJ3QgYm90aGVyIGluaXRp
YWxpemluZyBtb3N0IE9wZXJhbmRzIGhlcmUsIHNpbmNlIGlubGluaW5nIGNhbiBjaGFuZ2UgdGhl
IG51bWJlciBvZiBsb2NhbHMgYW5kIHRtcHMuCisgICAgLy8gV2Ugb25seSBpbml0aWFsaXplIHZh
cmlhYmxlc0F0VGFpbCBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHBhcnQgd2hpY2ggaXMgdXNlZCBp
biB0aGUgYnl0ZWNvZGUgcGFyc2VyCisgICAgLy8gV2Ugd2lsbCBpbml0aWFsaXplIGFsbCBvZiB0
aGUgb3RoZXIgT3BlcmFuZHMgaW4gYnVsayBhdCB0aGUgZW5kIG9mIHRoZSBwaGFzZS4KKyAgICBS
ZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJ
bmRleCwgMCwgMCwgMCwgMSkpOworICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxvY2sucHRy
KCk7CisgICAgYmxvY2tQdHItPnZhcmlhYmxlc0F0VGFpbCA9IE9wZXJhbmRzPE5vZGUqPihtX251
bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcyk7CisgICAgbV9ncmFwaC5hcHBlbmRC
bG9jayhXVEZNb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIGJsb2NrUHRyOworfQorCiBCYXNpY0Js
b2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNvZGVJbmRl
eCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChieXRlY29kZUluZGV4KTsKLSAgICBSZWY8
QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNvZGVJbmRl
eCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKLSAgICBCYXNp
Y0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5raW5nVGFy
Z2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBieXRlY29k
ZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5z
aXplKCkpCiAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlua2luZ1Rh
cmdldHMubGFzdCgpLT5ieXRlY29kZUJlZ2luLm9mZnNldCgpIDwgYnl0ZWNvZGVJbmRleC5vZmZz
ZXQoKSk7CisgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBhbGxvY2F0ZUJsb2NrKGJ5dGVjb2Rl
SW5kZXgpOwogICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0cy5hcHBl
bmQoYmxvY2tQdHIpOwotICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9jaykpOwog
ICAgIHJldHVybiBibG9ja1B0cjsKIH0KIAogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJzZXI6OmFs
bG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBibG9jayA9
IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJndW1lbnRz
LCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7Ci0gICAgQmFzaWNCbG9jayogYmxvY2tQdHIg
PSBibG9jay5wdHIoKTsKLSAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxvY2spKTsK
KyAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGFsbG9jYXRlQmxvY2soQnl0ZWNvZGVJbmRleCgp
KTsKICAgICBWRVJCT1NFX0xPRygiQWRkaW5nIG5ldyB1bnRhcmdldGFibGUgYmxvY2s6ICIsIGJs
b2NrUHRyLT5pbmRleCwgIlxuIik7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwogfQpAQCAtMTY3Nywx
MSArMTY4OCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2FsbFRh
cmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LCBDYWxsVmFyaWFuCiAgICAgCiAgICAgT3BlcmFuZCBp
bmxpbmVDYWxsRnJhbWVTdGFydCA9IFZpcnR1YWxSZWdpc3RlcihtX2lubGluZVN0YWNrVG9wLT5y
ZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1cCkpLnZh
bHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgCi0gICAgZW5z
dXJlTG9jYWxzKAotICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xvY2FsKCkgKyAxICsK
LSAgICAgICAgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBjb2RlQmxvY2stPm51
bUNhbGxlZUxvY2FscygpKTsKLSAgICAKLSAgICBlbnN1cmVUbXBzKChtX2lubGluZVN0YWNrVG9w
LT5tX2lubGluZUNhbGxGcmFtZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1l
LT50bXBPZmZzZXQgOiAwKSArIG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5udW1UbXBz
KCkgKyBjb2RlQmxvY2stPm51bVRtcHMoKSk7CisgICAgdW5zaWduZWQgbnVtTG9jYWxzID0gaW5s
aW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArIENhbGxGcmFtZTo6aGVhZGVyU2l6ZUlu
UmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICB1bnNpZ25lZCBu
dW1UbXBzID0gKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lID8gbV9pbmxpbmVT
dGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9pbmxpbmVTdGFj
a1RvcC0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSArIGNvZGVCbG9jay0+bnVtVG1wcygpOworICAg
IGVuc3VyZUxvY2Fsc0FuZFRtcHNGb3JWYXJpYWJsZXNBdFRhaWwobnVtTG9jYWxzLCBudW1UbXBz
KTsKIAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJndW1l
bnRQb3NpdGlvbnMuc2l6ZSgpOwogCkBAIC0xOTk0LDcgKzIwMDMsNyBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIE9wZXJh
bmQgcmVzdWx0LAogICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9CiAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCi0gICAgICAgIGVu
c3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCkudG9Mb2Nh
bCgpKTsKKyAgICAgICAgZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRUYWlsKFZpcnR1YWxSZWdp
c3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgICAgICAKICAgICAg
ICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzOwogICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0ID0gbV9p
bmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudFN0YXJ0
KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CkBAIC00NzcxLDcgKzQ3ODAsNyBAQCB2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICBzdGFja0FsaWdubWVudFJl
Z2lzdGVycygpLAogICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwogICAgIAotICAgIGVuc3VyZUxv
Y2FscygKKyAgICBlbnN1cmVMb2NhbHNGb3JWYXJpYWJsZXNBdFRhaWwoCiAgICAgICAgIG1faW5s
aW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3Rlcihy
ZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCkBAIC01MTY1LDcgKzUxNzQsNyBAQCB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgc3RhY2tBbGln
bm1lbnRSZWdpc3RlcnMoKSwKICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CiAgICAgCi0g
ICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRU
YWlsKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAogICAgICAg
ICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAg
ICAgCkBAIC04OTUxLDYgKzg5NjAsMTcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQog
ICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAgICAgbGlua0Jsb2NrcyhpbmxpbmVTdGFja0VudHJ5Lm1f
dW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xpbmtpbmdUYXJnZXRzKTsK
IAorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9y
ZGVyKCkpIHsKKyAgICAgICAgLy8gV2Uga2VwdCBibG9jay0+dmFyaWFibGVzQXRUYWlsIHVwZGF0
ZWQgdGhyb3VnaG91dCwgYnV0IG5vdCB0aGUgb3RoZXIgT3BlcmFuZHMsIHRvIGF2b2lkIGhhdmlu
ZyB0byByZXNpemUgdGhlbSBldmVyeSB0aW1lIHdlIGlubGluZQorICAgICAgICBBU1NFUlQoYmxv
Y2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fbnVtQXJndW1lbnRz
KTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZMb2NhbHMo
KSA9PSBtX251bUxvY2Fscyk7CisgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRUYWls
Lm51bWJlck9mVG1wcygpID09IG1fbnVtVG1wcyk7CisgICAgICAgIGJsb2NrLT52YXJpYWJsZXNB
dEhlYWQgPSBPcGVyYW5kczxOb2RlKj4obV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251
bVRtcHMpOworICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkID0gT3BlcmFuZHM8QWJzdHJhY3RW
YWx1ZT4obV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMpOworICAgICAgICBi
bG9jay0+dmFsdWVzQXRUYWlsID0gT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4obV9udW1Bcmd1bWVu
dHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMpOworICAgICAgICBibG9jay0+aW50ZXJzZWN0aW9u
T2ZQYXN0VmFsdWVzQXRIZWFkID0gT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4obV9udW1Bcmd1bWVu
dHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMpOworICAgIH0KKwogICAgIGlmIChtX2hhc0FueUZv
cmNlT1NSRXhpdHMpIHsKICAgICAgICAgQmxvY2tTZXQgYmxvY2tzVG9JZ25vcmU7CiAgICAgICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJhbE9yZGVyKCkp
IHsKQEAgLTkwOTAsMTYgKzkxMTAsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZSgpCiAg
ICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICBtX2dyYXBoLmtpbGxVbnJl
YWNoYWJsZUJsb2NrcygpOwogCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5kZXggPSBtX2dy
YXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJs
b2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgaWYgKCFibG9jaykKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkxvY2FscygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5u
dW1iZXJPZkxvY2FscygpKTsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQu
bnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRU
YWlsLm51bWJlck9mTG9jYWxzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFk
Lm51bWJlck9mTG9jYWxzKCkpOwotICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFp
bC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVh
ZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICB9Ci0KICAgICBtX2dyYXBoLm1fdG1wcyA9IG1f
bnVtVG1wczsKICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7CiAgICAgbV9n
cmFwaC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433742</attachid>
            <date>2021-07-17 20:09:43 -0700</date>
            <delta_ts>2021-07-17 20:11:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch228053</filename>
            <type>text/plain</type>
            <size>14250</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDExNDU1NzJhZjdhNy4uYWIxZTM5MWQzZmU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAyMS0wNy0xNyAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBzaG91bGQgYXZvaWQgcmVzaXppbmcgdGhlIE9wZXJhbmRzPD4gb2YgZXZlcnkg
QmFzaWNCbG9jayBvbiBldmVyeSBpbmxpbmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIGRmZyBieXRlY29kZSBwYXJzZXIgb25seSBtYWtlcyB1
c2Ugb2YgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC4KKyAgICAgICAgQnV0IGN1cnJlbnRseSBpdCB1
cGRhdGVzIHRoZSBzaXplIG9mIHZhcmlhYmxlc0F0SGVhZCwgdmFsdWVzQXRIZWFkLCB2YWx1ZXNB
dFRhaWwgYW5kIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZCBldmVyeSBzaW5nbGUgdGlt
ZSBpdCBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgVG1wcyBhbmQvb3IgTG9jYWxzLgorICAgICAgICBU
aGlzIGhhcHBlbnMgbm90YWJseSB3aGVuZXZlciBpdCBpbmxpbmVzIGEgZnVuY3Rpb24uCisKKyAg
ICAgICAgSXQgaXMgbm90IG5lYXJseSBhcyBjaGVhcCBhcyBpdCBsb29rcywgYXMgZWFjaCByZXNp
emluZyBtYXkgcmVhbGxvY2F0ZSBhIFZlY3RvciwgcmVxdWlyZXMgZmlsbGluZyB0aGUgbmV3IHNs
b3RzIHdpdGggemVyb3MsIGFuZCByZXF1aXJlcyBtb3ZpbmcgdGhlIGV4aXN0aW5nIHZhbHVlcyAo
d2hpY2ggYXJlIGFsbCAwKSB0byB0aGUgbmV3IFZlY3Rvci4KKyAgICAgICAgVGhpcyB3YXMgb2J2
aW91cyB3aGVuIGxvb2tpbmcgYXQgcHJvZmlsaW5nIG9mIEpTMjogYnplcm8gKyBtZW1tb3ZlIGFy
ZSB0aGUgdHdvIGhvdHRlc3QgQysrIGZ1bmN0aW9ucywgYW5kIHRoZSBtYW5pcHVsYXRpb24gb2Yg
T3BlcmFuZHMgaXMgcGFydGx5IHJlc3BvbnNpYmxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4
ZXMgdGhpcyBieSBvbmx5IHJlc2l6aW5nIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwgZHVyaW5nIHRo
ZSBleGVjdXRpb24gb2YgdGhlIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGluaXRpYWxpemluZyBhbGwg
b2YgdGhlIG90aGVyIG9wZXJhbmRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiBpdC4KKyAgICAgICAgSXQg
YWxzbyBtZXJnZXMgdGhlIGFkanVzdG1lbnQgb2YgbnVtTG9jYWxzIGFuZCBvZiBudW1UbXBzIGZv
ciB2YXJpYWJsZXNBdFRhaWwgZHVyaW5nIGlubGluaW5nLCB0byBhdm9pZCBhY2NpZGVudGFsbHkg
bW92aW5nIGRhdGEgdHdpY2UuCisKKyAgICAgICAgT24gSmV0U3RyZWFtMiBvbiBhbiBNMSBNQlAs
IGl0IGNoYW5nZXMgdGhlIHRvdGFsIHRpbWUgc3BlbnQgaW4gdGhlIERGR0J5dGVDb2RlUGFyc2Vy
IGZyb20gMTI0MC0xMjYwbXMgdG8gMTE1NS0xMTcwbXMuCisKKyAgICAgICAgKiBieXRlY29kZS9P
cGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzQW5kVG1wcyk6
CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAqIGRmZy9ERkdCYXNp
Y0Jsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRUYWls
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW5zdXJlTG9jYWxzQW5kVG1w
c0ZvclZhcmlhYmxlc0F0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmFsbG9jYXRlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxv
Y2F0ZVRhcmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlVmFyYXJnc0lubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6
CisKIDIwMjEtMDctMTUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbSlNDXSBIYXJkZW4gZGVmYXVsdFRpbWVab25lIHJldHJpZXZhbApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCA3ZjUwYWVmMjFhYWQuLmNlZWM3NDJh
YmFiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTI3
MiwxNiArMjcyLDI1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5z
dXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgpKQorICAgIHZv
aWQgZW5zdXJlTG9jYWxzQW5kVG1wcyhzaXplX3QgbmV3TnVtTG9jYWxzLCBzaXplX3QgbmV3TnVt
VG1wcywgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgpKQogICAgIHsKLSAgICAgICAgaWYgKHNp
emUgPD0gbnVtYmVyT2ZUbXBzKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VS
VChuZXdOdW1Mb2NhbHMgPj0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChuZXdO
dW1UbXBzID49IG51bWJlck9mVG1wcygpKTsKKworICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxz
ID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJP
ZlRtcHMoKTsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAg
ICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2Nh
bHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMo
KSArIG5ld051bUxvY2FscyArIG5ld051bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3
U2l6ZSk7CiAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kp
CisgICAgICAgICAgICBtX3ZhbHVlc1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5k
ZXgob2xkTnVtVG1wcyAtIDEgLSBpKV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1M
b2NhbHM7CiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRy
YWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBuZXdOdW1Mb2NhbHMgLSBvbGROdW1Mb2NhbHM7ICsraSkKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2FscyArIGkpXSA9IGVuc3VyZWRWYWx1
ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytp
KQogICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCA5MjRm
NmQ0M2M0NjkuLmJkN2Q3YzIwZGFmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCkBAIC02MywyNCArNjMsNiBAQCBCYXNpY0Jsb2NrOjp+QmFzaWNCbG9j
aygpCiB7CiB9CiAKLXZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051
bUxvY2FscykKLXsKLSAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7Ci0gICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAg
IHZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB2YWx1ZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFs
dWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxU
b3AoKSk7Ci19Ci0KLXZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1U
bXBzKQotewotICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAg
IHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZhbHVlc0F0SGVh
ZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVUbXBzKG5l
d051bVRtcHMpOwotICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVUbXBz
KG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Ci19Ci0KIHZvaWQgQmFzaWNC
bG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBO
b2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IDJjOGE2MTM2ZjM1OC4uN2VjZWEyMDQ3ZTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtNTMsOSArNTMs
NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgICAg
ICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKLSAgICB2
b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOwotICAgIHZvaWQgZW5zdXJl
VG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKLSAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIXNpemUoKTsgfQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAppbmRleCBhMjk2YzRiODdjODUuLjE2M2I3Y2E0NmNmZSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTEzOCwyNCArMTM4LDI1
IEBAIHByaXZhdGU6CiAgICAgLy8gSnVzdCBwYXJzZSBmcm9tIG1fY3VycmVudEluZGV4IHRvIHRo
ZSBlbmQgb2YgdGhlIGN1cnJlbnQgQ29kZUJsb2NrLgogICAgIHZvaWQgcGFyc2VDb2RlQmxvY2so
KTsKICAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCisg
ICAgdm9pZCBlbnN1cmVMb2NhbHNGb3JWYXJpYWJsZXNBdFRhaWwodW5zaWduZWQgbmV3TnVtTG9j
YWxzKQogICAgIHsKICAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5n
IHRvIHJhaXNlIG1fbnVtTG9jYWxzIGZyb20gIiwgbV9udW1Mb2NhbHMsICIgdG8gIiwgbmV3TnVt
TG9jYWxzLCAiXG4iKTsKICAgICAgICAgaWYgKG5ld051bUxvY2FscyA8PSBtX251bUxvY2FscykK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytp
KQotICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7CisgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT52YXJpYWJsZXNBdFRhaWwuZW5zdXJl
TG9jYWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVUbXBzKHVuc2ln
bmVkIG5ld051bVRtcHMpCisgICAgdm9pZCBlbnN1cmVMb2NhbHNBbmRUbXBzRm9yVmFyaWFibGVz
QXRUYWlsKHVuc2lnbmVkIG5ld051bUxvY2FscywgdW5zaWduZWQgbmV3TnVtVG1wcykKICAgICB7
Ci0gICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9u
dW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOwotICAg
ICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgIFZFUkJPU0VfTE9HKCIg
ICBlbnN1cmVMb2NhbHNBbmRUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1Mb2NhbHMvbV9udW1U
bXBzIGZyb20gIiwgbV9udW1Mb2NhbHMsICIvIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bUxv
Y2FscywgIi8iLCBuZXdOdW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051bUxvY2FscyA8
PSBtX251bUxvY2FscyAmJiBuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAgICAgICAgbV9udW1Mb2Nh
bHMgPSBzdGQ6Om1heChtX251bUxvY2FscywgbmV3TnVtTG9jYWxzKTsKKyAgICAgICAgbV9udW1U
bXBzID0gc3RkOjptYXgobV9udW1UbXBzLCBuZXdOdW1UbXBzKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCi0gICAgICAgICAgICBtX2dy
YXBoLmJsb2NrKGkpLT5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgICAgICAgICAgbV9ncmFw
aC5ibG9jayhpKS0+dmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2Fsc0FuZFRtcHMobV9udW1Mb2Nh
bHMsIG1fbnVtVG1wcyk7CiAgICAgfQogCiAKQEAgLTE3MSw2ICsxNzIsOCBAQCBwcml2YXRlOgog
ICAgIC8vIHRoYW4gdG8gbW92ZSB0aGUgcmlnaHQgaW5kZXggYWxsIHRoZSB3YXkgdG8gdGhlIHRy
ZWF0bWVudCBvZiBvcF9yZXQuCiAgICAgQmFzaWNCbG9jayogYWxsb2NhdGVUYXJnZXRhYmxlQmxv
Y2soQnl0ZWNvZGVJbmRleCk7CiAgICAgQmFzaWNCbG9jayogYWxsb2NhdGVVbnRhcmdldGFibGVC
bG9jaygpOworICAgIC8vIEhlbHBlciBmb3IgYWxsb2NhdGVUYXJnZXRhYmxlQmxvY2sgYW5kIGFs
bG9jYXRlVW50YXJnZXRhYmxlQmxvY2ssIGRvIG5vdCB1c2UgZGlyZWN0bHkKKyAgICBCYXNpY0Js
b2NrKiBhbGxvY2F0ZUJsb2NrKEJ5dGVjb2RlSW5kZXggaW5kZXgpOwogICAgIC8vIEFuIHVudGFy
Z2V0YWJsZSBibG9jayBjYW4gYmUgZ2l2ZW4gYSBieXRlY29kZUluZGV4IHRvIGJlIGxhdGVyIG1h
bmFnZWQgYnkgbGlua0Jsb2NrLCBidXQgb25seSBvbmNlLCBhbmQgaXQgY2FuIG5ldmVyIGdvIGlu
IHRoZSBvdGhlciBkaXJlY3Rpb24KICAgICB2b2lkIG1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNC
bG9jayosIEJ5dGVjb2RlSW5kZXgpOwogICAgIHZvaWQgYWRkSnVtcFRvKEJhc2ljQmxvY2sqKTsK
QEAgLTEyNjIsMjQgKzEyNjUsMzIgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzQW55Rm9yY2VP
U1JFeGl0cyB7IGZhbHNlIH07CiB9OwogCitCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxs
b2NhdGVCbG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgLy8gV2UgZG9u
J3QgYm90aGVyIGluaXRpYWxpemluZyBtb3N0IE9wZXJhbmRzIGhlcmUsIHNpbmNlIGlubGluaW5n
IGNhbiBjaGFuZ2UgdGhlIG51bWJlciBvZiBsb2NhbHMgYW5kIHRtcHMuCisgICAgLy8gV2Ugb25s
eSBpbml0aWFsaXplIHZhcmlhYmxlc0F0VGFpbCBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHBhcnQg
d2hpY2ggaXMgdXNlZCBpbiB0aGUgYnl0ZWNvZGUgcGFyc2VyCisgICAgLy8gV2Ugd2lsbCBpbml0
aWFsaXplIGFsbCBvZiB0aGUgb3RoZXIgT3BlcmFuZHMgaW4gYnVsayBhdCB0aGUgZW5kIG9mIHRo
ZSBwaGFzZS4KKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2lj
QmxvY2soYnl0ZWNvZGVJbmRleCwgMCwgMCwgMCwgMSkpOworICAgIEJhc2ljQmxvY2sqIGJsb2Nr
UHRyID0gYmxvY2sucHRyKCk7CisgICAgYmxvY2tQdHItPnZhcmlhYmxlc0F0VGFpbCA9IE9wZXJh
bmRzPE5vZGUqPihtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcyk7CisgICAg
bV9ncmFwaC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIGJsb2NrUHRy
OworfQorCiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxv
Y2soQnl0ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChieXRlY29kZUlu
ZGV4KTsKLSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxv
Y2soYnl0ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMs
IDEpKTsKLSAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1f
YmxvY2tMaW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBv
cmRlciBvZiBieXRlY29kZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tM
aW5raW5nVGFyZ2V0cy5zaXplKCkpCiAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5t
X2Jsb2NrTGlua2luZ1RhcmdldHMubGFzdCgpLT5ieXRlY29kZUJlZ2luLm9mZnNldCgpIDwgYnl0
ZWNvZGVJbmRleC5vZmZzZXQoKSk7CisgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBhbGxvY2F0
ZUJsb2NrKGJ5dGVjb2RlSW5kZXgpOwogICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5r
aW5nVGFyZ2V0cy5hcHBlbmQoYmxvY2tQdHIpOwotICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RG
TW92ZShibG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKIH0KIAogQmFzaWNCbG9jayogQnl0
ZUNvZGVQYXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNp
Y0Jsb2NrPiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCks
IG1fbnVtQXJndW1lbnRzLCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7Ci0gICAgQmFzaWNC
bG9jayogYmxvY2tQdHIgPSBibG9jay5wdHIoKTsKLSAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdU
Rk1vdmUoYmxvY2spKTsKKyAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGFsbG9jYXRlQmxvY2so
Qnl0ZWNvZGVJbmRleCgpKTsKICAgICBWRVJCT1NFX0xPRygiQWRkaW5nIG5ldyB1bnRhcmdldGFi
bGUgYmxvY2s6ICIsIGJsb2NrUHRyLT5pbmRleCwgIlxuIik7CiAgICAgcmV0dXJuIGJsb2NrUHRy
OwogfQpAQCAtMTY3NywxMSArMTY4OCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNh
bGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LCBDYWxsVmFyaWFuCiAgICAg
CiAgICAgT3BlcmFuZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZpcnR1YWxSZWdpc3RlcihtX2lu
bGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0
QWZ0ZXJGaXh1cCkpLnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7
CiAgICAgCi0gICAgZW5zdXJlTG9jYWxzKAotICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC50
b0xvY2FsKCkgKyAxICsKLSAgICAgICAgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMg
KyBjb2RlQmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsKLSAgICAKLSAgICBlbnN1cmVUbXBzKCht
X2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSA/IG1faW5saW5lU3RhY2tUb3AtPm1f
aW5saW5lQ2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5udW1UbXBzKCkgKyBjb2RlQmxvY2stPm51bVRtcHMoKSk7CisgICAgdW5zaWduZWQg
bnVtTG9jYWxzID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsK
KyAgICB1bnNpZ25lZCBudW1UbXBzID0gKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZy
YW1lID8gbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDAp
ICsgbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSArIGNvZGVCbG9jay0+
bnVtVG1wcygpOworICAgIGVuc3VyZUxvY2Fsc0FuZFRtcHNGb3JWYXJpYWJsZXNBdFRhaWwobnVt
TG9jYWxzLCBudW1UbXBzKTsKIAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBt
X2dyYXBoLm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCkBAIC0xOTk0LDcgKzIwMDMsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRh
cmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LAogICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9m
ZnNldCA9CiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIocmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAg
ICAgCi0gICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rl
ck9mZnNldCkudG9Mb2NhbCgpKTsKKyAgICAgICAgZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRU
YWlsKFZpcnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0KS50b0xvY2FsKCkpOwog
ICAgICAgICAKICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNldCArIENh
bGxGcmFtZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwogICAgICAgICBpbnQgcmVtYXBwZWRBcmd1
bWVudFN0YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rl
cihhcmd1bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CkBAIC00NzcxLDcg
KzQ3ODAsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICBz
dGFja0FsaWdubWVudFJlZ2lzdGVycygpLAogICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwogICAg
IAotICAgIGVuc3VyZUxvY2FscygKKyAgICBlbnN1cmVMb2NhbHNGb3JWYXJpYWJsZXNBdFRhaWwo
CiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKICAgICAgICAgICAgIFZp
cnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCkBAIC01MTY1
LDcgKzUxNzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAg
ICAgICAgc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKICAgICAgICAgICAgIC1yZWdpc3Rlck9m
ZnNldCk7CiAgICAgCi0gICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgZW5zdXJlTG9jYWxz
Rm9yVmFyaWFibGVzQXRUYWlsKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkp
LnRvTG9jYWwoKSk7CiAgICAgCkBAIC04OTUxLDYgKzg5NjAsMTcgQEAgdm9pZCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2UoKQogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAgICAgbGlua0Jsb2Nrcyhpbmxp
bmVTdGFja0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xp
bmtpbmdUYXJnZXRzKTsKIAorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJs
b2Nrc0luTmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgLy8gV2Uga2VwdCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsIHVwZGF0ZWQgdGhyb3VnaG91dCwgYnV0IG5vdCB0aGUgb3RoZXIgT3BlcmFuZHMs
IHRvIGF2b2lkIGhhdmluZyB0byByZXNpemUgdGhlbSBldmVyeSB0aW1lIHdlIGlubGluZQorICAg
ICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09
IG1fbnVtQXJndW1lbnRzKTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwu
bnVtYmVyT2ZMb2NhbHMoKSA9PSBtX251bUxvY2Fscyk7CisgICAgICAgIEFTU0VSVChibG9jay0+
dmFyaWFibGVzQXRUYWlsLm51bWJlck9mVG1wcygpID09IG1fbnVtVG1wcyk7CisgICAgICAgIGJs
b2NrLT52YXJpYWJsZXNBdEhlYWQgPSBPcGVyYW5kczxOb2RlKj4obV9udW1Bcmd1bWVudHMsIG1f
bnVtTG9jYWxzLCBtX251bVRtcHMpOworICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkID0gT3Bl
cmFuZHM8QWJzdHJhY3RWYWx1ZT4obV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRt
cHMpOworICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsID0gT3BlcmFuZHM8QWJzdHJhY3RWYWx1
ZT4obV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMpOworICAgICAgICBibG9j
ay0+aW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkID0gT3BlcmFuZHM8QWJzdHJhY3RWYWx1
ZT4obV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMpOworICAgIH0KKwogICAg
IGlmIChtX2hhc0FueUZvcmNlT1NSRXhpdHMpIHsKICAgICAgICAgQmxvY2tTZXQgYmxvY2tzVG9J
Z25vcmU7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKQEAgLTkwOTAsMTYgKzkxMTAsNiBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZSgpCiAgICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICBt
X2dyYXBoLmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOwogCi0gICAgZm9yIChCbG9ja0luZGV4IGJs
b2NrSW5kZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAg
IEJhc2ljQmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAg
aWYgKCFibG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoYmxvY2st
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IG1fZ3JhcGguYmxvY2soMCktPnZh
cmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52
YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIEFTU0VSVChibG9j
ay0+dmFyaWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+
dmFyaWFibGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAgICAgICBBU1NFUlQoYmxvY2st
PnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fZ3JhcGguYmxvY2soMCkt
PnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICB9Ci0KICAgICBtX2dy
YXBoLm1fdG1wcyA9IG1fbnVtVG1wczsKICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1M
b2NhbHM7CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>433743</attachid>
            <date>2021-07-17 20:11:37 -0700</date>
            <delta_ts>2021-11-17 18:20:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch228053</filename>
            <type>text/plain</type>
            <size>14244</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDExNDU1NzJhZjdhNy4uYWIxZTM5MWQzZmU0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAyMS0wNy0xNyAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBzaG91bGQgYXZvaWQgcmVzaXppbmcgdGhlIE9wZXJhbmRzPD4gb2YgZXZlcnkg
QmFzaWNCbG9jayBvbiBldmVyeSBpbmxpbmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgVGhlIGRmZyBieXRlY29kZSBwYXJzZXIgb25seSBtYWtlcyB1
c2Ugb2YgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC4KKyAgICAgICAgQnV0IGN1cnJlbnRseSBpdCB1
cGRhdGVzIHRoZSBzaXplIG9mIHZhcmlhYmxlc0F0SGVhZCwgdmFsdWVzQXRIZWFkLCB2YWx1ZXNB
dFRhaWwgYW5kIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZCBldmVyeSBzaW5nbGUgdGlt
ZSBpdCBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgVG1wcyBhbmQvb3IgTG9jYWxzLgorICAgICAgICBU
aGlzIGhhcHBlbnMgbm90YWJseSB3aGVuZXZlciBpdCBpbmxpbmVzIGEgZnVuY3Rpb24uCisKKyAg
ICAgICAgSXQgaXMgbm90IG5lYXJseSBhcyBjaGVhcCBhcyBpdCBsb29rcywgYXMgZWFjaCByZXNp
emluZyBtYXkgcmVhbGxvY2F0ZSBhIFZlY3RvciwgcmVxdWlyZXMgZmlsbGluZyB0aGUgbmV3IHNs
b3RzIHdpdGggemVyb3MsIGFuZCByZXF1aXJlcyBtb3ZpbmcgdGhlIGV4aXN0aW5nIHZhbHVlcyAo
d2hpY2ggYXJlIGFsbCAwKSB0byB0aGUgbmV3IFZlY3Rvci4KKyAgICAgICAgVGhpcyB3YXMgb2J2
aW91cyB3aGVuIGxvb2tpbmcgYXQgcHJvZmlsaW5nIG9mIEpTMjogYnplcm8gKyBtZW1tb3ZlIGFy
ZSB0aGUgdHdvIGhvdHRlc3QgQysrIGZ1bmN0aW9ucywgYW5kIHRoZSBtYW5pcHVsYXRpb24gb2Yg
T3BlcmFuZHMgaXMgcGFydGx5IHJlc3BvbnNpYmxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4
ZXMgdGhpcyBieSBvbmx5IHJlc2l6aW5nIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwgZHVyaW5nIHRo
ZSBleGVjdXRpb24gb2YgdGhlIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGluaXRpYWxpemluZyBhbGwg
b2YgdGhlIG90aGVyIG9wZXJhbmRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiBpdC4KKyAgICAgICAgSXQg
YWxzbyBtZXJnZXMgdGhlIGFkanVzdG1lbnQgb2YgbnVtTG9jYWxzIGFuZCBvZiBudW1UbXBzIGZv
ciB2YXJpYWJsZXNBdFRhaWwgZHVyaW5nIGlubGluaW5nLCB0byBhdm9pZCBhY2NpZGVudGFsbHkg
bW92aW5nIGRhdGEgdHdpY2UuCisKKyAgICAgICAgT24gSmV0U3RyZWFtMiBvbiBhbiBNMSBNQlAs
IGl0IGNoYW5nZXMgdGhlIHRvdGFsIHRpbWUgc3BlbnQgaW4gdGhlIERGR0J5dGVDb2RlUGFyc2Vy
IGZyb20gMTI0MC0xMjYwbXMgdG8gMTE1NS0xMTcwbXMuCisKKyAgICAgICAgKiBieXRlY29kZS9P
cGVyYW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzQW5kVG1wcyk6
CisgICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAqIGRmZy9ERkdCYXNp
Y0Jsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRUYWls
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW5zdXJlTG9jYWxzQW5kVG1w
c0ZvclZhcmlhYmxlc0F0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmFsbG9jYXRlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxv
Y2F0ZVRhcmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6
OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjppbmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlVmFyYXJnc0lubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6
CisKIDIwMjEtMDctMTUgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbSlNDXSBIYXJkZW4gZGVmYXVsdFRpbWVab25lIHJldHJpZXZhbApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCA3ZjUwYWVmMjFhYWQuLmNlZWM3NDJh
YmFiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTI3
MiwxNiArMjcyLDI1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5z
dXJlVG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgpKQorICAgIHZv
aWQgZW5zdXJlTG9jYWxzQW5kVG1wcyhzaXplX3QgbmV3TnVtTG9jYWxzLCBzaXplX3QgbmV3TnVt
VG1wcywgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgpKQogICAgIHsKLSAgICAgICAgaWYgKHNp
emUgPD0gbnVtYmVyT2ZUbXBzKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VS
VChuZXdOdW1Mb2NhbHMgPj0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChuZXdO
dW1UbXBzID49IG51bWJlck9mVG1wcygpKTsKKworICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxz
ID0gbnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJP
ZlRtcHMoKTsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAg
ICAgICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2Nh
bHMoKSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMo
KSArIG5ld051bUxvY2FscyArIG5ld051bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3
U2l6ZSk7CiAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kp
CisgICAgICAgICAgICBtX3ZhbHVlc1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5k
ZXgob2xkTnVtVG1wcyAtIDEgLSBpKV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1M
b2NhbHM7CiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRy
YWl0czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBuZXdOdW1Mb2NhbHMgLSBvbGROdW1Mb2NhbHM7ICsraSkKKyAgICAgICAgICAg
ICAgICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2FscyArIGkpXSA9IGVuc3VyZWRWYWx1
ZTsKICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytp
KQogICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCA5MjRm
NmQ0M2M0NjkuLmJkN2Q3YzIwZGFmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Jhc2ljQmxvY2suY3BwCkBAIC02MywyNCArNjMsNiBAQCBCYXNpY0Jsb2NrOjp+QmFzaWNCbG9j
aygpCiB7CiB9CiAKLXZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051
bUxvY2FscykKLXsKLSAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7Ci0gICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAg
IHZhbHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB2YWx1ZXNBdFRh
aWwuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFs
dWVzQXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxU
b3AoKSk7Ci19Ci0KLXZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1U
bXBzKQotewotICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAg
IHZhcmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZhbHVlc0F0SGVh
ZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVUbXBzKG5l
d051bVRtcHMpOwotICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVUbXBz
KG5ld051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Ci19Ci0KIHZvaWQgQmFzaWNC
bG9jazo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBO
b2RlQW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IDJjOGE2MTM2ZjM1OC4uN2VjZWEyMDQ3ZTc4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtNTMsOSArNTMs
NiBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgICAg
ICBmbG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKLSAgICB2
b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOwotICAgIHZvaWQgZW5zdXJl
VG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKLSAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gIXNpemUoKTsgfQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rl
c1tpXTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAppbmRleCBhMjk2YzRiODdjODUuLjNiY2VkMDM2ZjUxMyAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTEzOCwyNCArMTM4LDI1
IEBAIHByaXZhdGU6CiAgICAgLy8gSnVzdCBwYXJzZSBmcm9tIG1fY3VycmVudEluZGV4IHRvIHRo
ZSBlbmQgb2YgdGhlIGN1cnJlbnQgQ29kZUJsb2NrLgogICAgIHZvaWQgcGFyc2VDb2RlQmxvY2so
KTsKICAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCisg
ICAgdm9pZCBlbnN1cmVMb2NhbHNGb3JWYXJpYWJsZXNBdFRhaWwodW5zaWduZWQgbmV3TnVtTG9j
YWxzKQogICAgIHsKICAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5n
IHRvIHJhaXNlIG1fbnVtTG9jYWxzIGZyb20gIiwgbV9udW1Mb2NhbHMsICIgdG8gIiwgbmV3TnVt
TG9jYWxzLCAiXG4iKTsKICAgICAgICAgaWYgKG5ld051bUxvY2FscyA8PSBtX251bUxvY2FscykK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7
CiAgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytp
KQotICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fs
cyk7CisgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT52YXJpYWJsZXNBdFRhaWwuZW5zdXJl
TG9jYWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVUbXBzKHVuc2ln
bmVkIG5ld051bVRtcHMpCisgICAgdm9pZCBlbnN1cmVMb2NhbHNBbmRUbXBzRm9yVmFyaWFibGVz
QXRUYWlsKHVuc2lnbmVkIG5ld051bUxvY2FscywgdW5zaWduZWQgbmV3TnVtVG1wcykKICAgICB7
Ci0gICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9u
dW1UbXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOwotICAg
ICAgICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgIFZFUkJPU0VfTE9HKCIg
ICBlbnN1cmVMb2NhbHNBbmRUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1Mb2NhbHMvbV9udW1U
bXBzIGZyb20gIiwgbV9udW1Mb2NhbHMsICIvIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bUxv
Y2FscywgIi8iLCBuZXdOdW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051bUxvY2FscyA8
PSBtX251bUxvY2FscyAmJiBuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgbV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAgICAgICAgbV9udW1Mb2Nh
bHMgPSBzdGQ6Om1heChtX251bUxvY2FscywgbmV3TnVtTG9jYWxzKTsKKyAgICAgICAgbV9udW1U
bXBzID0gc3RkOjptYXgobV9udW1UbXBzLCBuZXdOdW1UbXBzKTsKICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCi0gICAgICAgICAgICBtX2dy
YXBoLmJsb2NrKGkpLT5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgICAgICAgICAgbV9ncmFw
aC5ibG9jayhpKS0+dmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2Fsc0FuZFRtcHMobV9udW1Mb2Nh
bHMsIG1fbnVtVG1wcyk7CiAgICAgfQogCiAKQEAgLTE3MSw2ICsxNzIsOCBAQCBwcml2YXRlOgog
ICAgIC8vIHRoYW4gdG8gbW92ZSB0aGUgcmlnaHQgaW5kZXggYWxsIHRoZSB3YXkgdG8gdGhlIHRy
ZWF0bWVudCBvZiBvcF9yZXQuCiAgICAgQmFzaWNCbG9jayogYWxsb2NhdGVUYXJnZXRhYmxlQmxv
Y2soQnl0ZWNvZGVJbmRleCk7CiAgICAgQmFzaWNCbG9jayogYWxsb2NhdGVVbnRhcmdldGFibGVC
bG9jaygpOworICAgIC8vIEhlbHBlciBmb3IgYWxsb2NhdGVUYXJnZXRhYmxlQmxvY2sgYW5kIGFs
bG9jYXRlVW50YXJnZXRhYmxlQmxvY2ssIGRvIG5vdCB1c2UgZGlyZWN0bHkKKyAgICBCYXNpY0Js
b2NrKiBhbGxvY2F0ZUJsb2NrKEJ5dGVjb2RlSW5kZXgpOwogICAgIC8vIEFuIHVudGFyZ2V0YWJs
ZSBibG9jayBjYW4gYmUgZ2l2ZW4gYSBieXRlY29kZUluZGV4IHRvIGJlIGxhdGVyIG1hbmFnZWQg
YnkgbGlua0Jsb2NrLCBidXQgb25seSBvbmNlLCBhbmQgaXQgY2FuIG5ldmVyIGdvIGluIHRoZSBv
dGhlciBkaXJlY3Rpb24KICAgICB2b2lkIG1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayos
IEJ5dGVjb2RlSW5kZXgpOwogICAgIHZvaWQgYWRkSnVtcFRvKEJhc2ljQmxvY2sqKTsKQEAgLTEy
NjIsMjQgKzEyNjUsMzIgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzQW55Rm9yY2VPU1JFeGl0
cyB7IGZhbHNlIH07CiB9OwogCitCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVC
bG9jayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgLy8gV2UgZG9uJ3QgYm90
aGVyIGluaXRpYWxpemluZyBtb3N0IE9wZXJhbmRzIGhlcmUsIHNpbmNlIGlubGluaW5nIGNhbiBj
aGFuZ2UgdGhlIG51bWJlciBvZiBsb2NhbHMgYW5kIHRtcHMuCisgICAgLy8gV2Ugb25seSBpbml0
aWFsaXplIHZhcmlhYmxlc0F0VGFpbCBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHBhcnQgd2hpY2gg
aXMgdXNlZCBpbiB0aGUgYnl0ZWNvZGUgcGFyc2VyCisgICAgLy8gV2Ugd2lsbCBpbml0aWFsaXpl
IGFsbCBvZiB0aGUgb3RoZXIgT3BlcmFuZHMgaW4gYnVsayBhdCB0aGUgZW5kIG9mIHRoZSBwaGFz
ZS4KKyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2so
Ynl0ZWNvZGVJbmRleCwgMCwgMCwgMCwgMSkpOworICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0g
YmxvY2sucHRyKCk7CisgICAgYmxvY2tQdHItPnZhcmlhYmxlc0F0VGFpbCA9IE9wZXJhbmRzPE5v
ZGUqPihtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcyk7CisgICAgbV9ncmFw
aC5hcHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIGJsb2NrUHRyOworfQor
CiBCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0
ZWNvZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChieXRlY29kZUluZGV4KTsK
LSAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0
ZWNvZGVJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsK
LSAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tM
aW5raW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBv
ZiBieXRlY29kZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5n
VGFyZ2V0cy5zaXplKCkpCiAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2Nr
TGlua2luZ1RhcmdldHMubGFzdCgpLT5ieXRlY29kZUJlZ2luLm9mZnNldCgpIDwgYnl0ZWNvZGVJ
bmRleC5vZmZzZXQoKSk7CisgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBhbGxvY2F0ZUJsb2Nr
KGJ5dGVjb2RlSW5kZXgpOwogICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5hcHBlbmQoYmxvY2tQdHIpOwotICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShi
bG9jaykpOwogICAgIHJldHVybiBibG9ja1B0cjsKIH0KIAogQmFzaWNCbG9jayogQnl0ZUNvZGVQ
YXJzZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNpY0Jsb2Nr
PiBibG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVt
QXJndW1lbnRzLCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7Ci0gICAgQmFzaWNCbG9jayog
YmxvY2tQdHIgPSBibG9jay5wdHIoKTsKLSAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUo
YmxvY2spKTsKKyAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGFsbG9jYXRlQmxvY2soQnl0ZWNv
ZGVJbmRleCgpKTsKICAgICBWRVJCT1NFX0xPRygiQWRkaW5nIG5ldyB1bnRhcmdldGFibGUgYmxv
Y2s6ICIsIGJsb2NrUHRyLT5pbmRleCwgIlxuIik7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwogfQpA
QCAtMTY3NywxMSArMTY4OCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9k
ZSogY2FsbFRhcmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LCBDYWxsVmFyaWFuCiAgICAgCiAgICAg
T3BlcmFuZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZpcnR1YWxSZWdpc3RlcihtX2lubGluZVN0
YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJG
aXh1cCkpLnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAg
Ci0gICAgZW5zdXJlTG9jYWxzKAotICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xvY2Fs
KCkgKyAxICsKLSAgICAgICAgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBjb2Rl
QmxvY2stPm51bUNhbGxlZUxvY2FscygpKTsKLSAgICAKLSAgICBlbnN1cmVUbXBzKChtX2lubGlu
ZVN0YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5l
Q2FsbEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2Nr
LT5udW1UbXBzKCkgKyBjb2RlQmxvY2stPm51bVRtcHMoKSk7CisgICAgdW5zaWduZWQgbnVtTG9j
YWxzID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArIENhbGxGcmFtZTo6aGVh
ZGVyU2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICB1
bnNpZ25lZCBudW1UbXBzID0gKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lID8g
bV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSArIGNvZGVCbG9jay0+bnVtVG1w
cygpOworICAgIGVuc3VyZUxvY2Fsc0FuZFRtcHNGb3JWYXJpYWJsZXNBdFRhaWwobnVtTG9jYWxz
LCBudW1UbXBzKTsKIAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBo
Lm1fYXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCkBAIC0xOTk0LDcgKzIwMDMsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5v
ZGUsIE9wZXJhbmQgcmVzdWx0LAogICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9
CiAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIo
cmVnaXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCi0g
ICAgICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNl
dCkudG9Mb2NhbCgpKTsKKyAgICAgICAgZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRUYWlsKFZp
cnR1YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgICAg
ICAKICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFt
ZTo6aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwogICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0
YXJ0ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1
bWVudFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CkBAIC00NzcxLDcgKzQ3ODAs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICBzdGFja0Fs
aWdubWVudFJlZ2lzdGVycygpLAogICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwogICAgIAotICAg
IGVuc3VyZUxvY2FscygKKyAgICBlbnN1cmVMb2NhbHNGb3JWYXJpYWJsZXNBdFRhaWwoCiAgICAg
ICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKICAgICAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCkBAIC01MTY1LDcgKzUx
NzQsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAg
c3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7
CiAgICAgCi0gICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgZW5zdXJlTG9jYWxzRm9yVmFy
aWFibGVzQXRUYWlsKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5k
KAogICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9j
YWwoKSk7CiAgICAgCkBAIC04OTUxLDYgKzg5NjAsMTcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2UoKQogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAgICAgbGlua0Jsb2NrcyhpbmxpbmVTdGFj
a0VudHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xpbmtpbmdU
YXJnZXRzKTsKIAorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0lu
TmF0dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgLy8gV2Uga2VwdCBibG9jay0+dmFyaWFibGVzQXRU
YWlsIHVwZGF0ZWQgdGhyb3VnaG91dCwgYnV0IG5vdCB0aGUgb3RoZXIgT3BlcmFuZHMsIHRvIGF2
b2lkIGhhdmluZyB0byByZXNpemUgdGhlbSBldmVyeSB0aW1lIHdlIGlubGluZQorICAgICAgICBB
U1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fbnVt
QXJndW1lbnRzKTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVy
T2ZMb2NhbHMoKSA9PSBtX251bUxvY2Fscyk7CisgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFi
bGVzQXRUYWlsLm51bWJlck9mVG1wcygpID09IG1fbnVtVG1wcyk7CisgICAgICAgIGJsb2NrLT52
YXJpYWJsZXNBdEhlYWQgPSBPcGVyYW5kczxOb2RlKj4obV9udW1Bcmd1bWVudHMsIG1fbnVtTG9j
YWxzLCBtX251bVRtcHMpOworICAgICAgICBibG9jay0+dmFsdWVzQXRIZWFkID0gT3BlcmFuZHM8
QWJzdHJhY3RWYWx1ZT4obV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMpOwor
ICAgICAgICBibG9jay0+dmFsdWVzQXRUYWlsID0gT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4obV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMpOworICAgICAgICBibG9jay0+aW50
ZXJzZWN0aW9uT2ZQYXN0VmFsdWVzQXRIZWFkID0gT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4obV9u
dW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMpOworICAgIH0KKwogICAgIGlmICht
X2hhc0FueUZvcmNlT1NSRXhpdHMpIHsKICAgICAgICAgQmxvY2tTZXQgYmxvY2tzVG9JZ25vcmU7
CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0dXJh
bE9yZGVyKCkpIHsKQEAgLTkwOTAsMTYgKzkxMTAsNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZSgpCiAgICAgbV9ncmFwaC5kZXRlcm1pbmVSZWFjaGFiaWxpdHkoKTsKICAgICBtX2dyYXBo
LmtpbGxVbnJlYWNoYWJsZUJsb2NrcygpOwogCi0gICAgZm9yIChCbG9ja0luZGV4IGJsb2NrSW5k
ZXggPSBtX2dyYXBoLm51bUJsb2NrcygpOyBibG9ja0luZGV4LS07KSB7Ci0gICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5ibG9jayhibG9ja0luZGV4KTsKLSAgICAgICAgaWYgKCFi
bG9jaykKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlh
Ymxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxl
c0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsKLSAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJs
ZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMoKSk7Ci0gICAgICAgIEFTU0VSVChibG9jay0+dmFy
aWFibGVzQXRUYWlsLm51bWJlck9mTG9jYWxzKCkgPT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFi
bGVzQXRIZWFkLm51bWJlck9mTG9jYWxzKCkpOwotICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlh
Ymxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlh
Ymxlc0F0SGVhZC5udW1iZXJPZkFyZ3VtZW50cygpKTsKLSAgICB9Ci0KICAgICBtX2dyYXBoLm1f
dG1wcyA9IG1fbnVtVG1wczsKICAgICBtX2dyYXBoLm1fbG9jYWxWYXJzID0gbV9udW1Mb2NhbHM7
CiAgICAgbV9ncmFwaC5tX3BhcmFtZXRlclNsb3RzID0gbV9wYXJhbWV0ZXJTbG90czsK
</data>
<flag name="review"
          id="456084"
          type_id="1"
          status="+"
          setter="saam"
    />
    <flag name="commit-queue"
          id="456085"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>444624</attachid>
            <date>2021-11-17 18:20:26 -0800</date>
            <delta_ts>2021-11-18 14:57:07 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch228053</filename>
            <type>text/plain</type>
            <size>14329</size>
            <attacher name="Robin Morisset">rmorisset</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDBkZmRlMDMyODM0My4uZTgyY2FiMmY4OGExIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOCBAQAorMjAyMS0xMS0xNyAgUm9i
aW4gTW9yaXNzZXQgIDxybW9yaXNzZXRAYXBwbGUuY29tPgorCisgICAgICAgIERGR0J5dGVDb2Rl
UGFyc2VyLmNwcCBzaG91bGQgYXZvaWQgcmVzaXppbmcgdGhlIE9wZXJhbmRzPD4gb2YgZXZlcnkg
QmFzaWNCbG9jayBvbiBldmVyeSBpbmxpbmluZworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjI4MDUzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgU2FhbSBC
YXJhdGkuCisKKyAgICAgICAgVGhlIGRmZyBieXRlY29kZSBwYXJzZXIgb25seSBtYWtlcyB1c2Ug
b2YgYmxvY2stPnZhcmlhYmxlc0F0VGFpbC4KKyAgICAgICAgQnV0IGN1cnJlbnRseSBpdCB1cGRh
dGVzIHRoZSBzaXplIG9mIHZhcmlhYmxlc0F0SGVhZCwgdmFsdWVzQXRIZWFkLCB2YWx1ZXNBdFRh
aWwgYW5kIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZCBldmVyeSBzaW5nbGUgdGltZSBp
dCBjaGFuZ2VzIHRoZSBudW1iZXIgb2YgVG1wcyBhbmQvb3IgTG9jYWxzLgorICAgICAgICBUaGlz
IGhhcHBlbnMgbm90YWJseSB3aGVuZXZlciBpdCBpbmxpbmVzIGEgZnVuY3Rpb24uCisKKyAgICAg
ICAgSXQgaXMgbm90IG5lYXJseSBhcyBjaGVhcCBhcyBpdCBsb29rcywgYXMgZWFjaCByZXNpemlu
ZyBtYXkgcmVhbGxvY2F0ZSBhIFZlY3RvciwgcmVxdWlyZXMgZmlsbGluZyB0aGUgbmV3IHNsb3Rz
IHdpdGggemVyb3MsIGFuZCByZXF1aXJlcyBtb3ZpbmcgdGhlIGV4aXN0aW5nIHZhbHVlcyAod2hp
Y2ggYXJlIGFsbCAwKSB0byB0aGUgbmV3IFZlY3Rvci4KKyAgICAgICAgVGhpcyB3YXMgb2J2aW91
cyB3aGVuIGxvb2tpbmcgYXQgcHJvZmlsaW5nIG9mIEpTMjogYnplcm8gKyBtZW1tb3ZlIGFyZSB0
aGUgdHdvIGhvdHRlc3QgQysrIGZ1bmN0aW9ucywgYW5kIHRoZSBtYW5pcHVsYXRpb24gb2YgT3Bl
cmFuZHMgaXMgcGFydGx5IHJlc3BvbnNpYmxlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZml4ZXMg
dGhpcyBieSBvbmx5IHJlc2l6aW5nIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwgZHVyaW5nIHRoZSBl
eGVjdXRpb24gb2YgdGhlIGJ5dGVjb2RlIHBhcnNlciwgYW5kIGluaXRpYWxpemluZyBhbGwgb2Yg
dGhlIG90aGVyIG9wZXJhbmRzIGF0IHRoZSB2ZXJ5IGVuZCBvZiBpdC4KKyAgICAgICAgSXQgYWxz
byBtZXJnZXMgdGhlIGFkanVzdG1lbnQgb2YgbnVtTG9jYWxzIGFuZCBvZiBudW1UbXBzIGZvciB2
YXJpYWJsZXNBdFRhaWwgZHVyaW5nIGlubGluaW5nLCB0byBhdm9pZCBhY2NpZGVudGFsbHkgbW92
aW5nIGRhdGEgdHdpY2UuCisKKyAgICAgICAgT24gSmV0U3RyZWFtMiBvbiBhbiBNMSBNQlAsIGl0
IGNoYW5nZXMgdGhlIHRvdGFsIHRpbWUgc3BlbnQgaW4gdGhlIERGR0J5dGVDb2RlUGFyc2VyIGZy
b20gMTI0MC0xMjYwbXMgdG8gMTE1NS0xMTcwbXMuCisKKyAgICAgICAgKiBieXRlY29kZS9PcGVy
YW5kcy5oOgorICAgICAgICAoSlNDOjpPcGVyYW5kczo6ZW5zdXJlTG9jYWxzQW5kVG1wcyk6Cisg
ICAgICAgICogZGZnL0RGR0Jhc2ljQmxvY2suY3BwOgorICAgICAgICAqIGRmZy9ERkdCYXNpY0Js
b2NrLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRUYWlsKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6ZW5zdXJlTG9jYWxzQW5kVG1wc0Zv
clZhcmlhYmxlc0F0VGFpbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFs
bG9jYXRlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxvY2F0
ZVRhcmdldGFibGVCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFs
bG9jYXRlVW50YXJnZXRhYmxlQmxvY2spOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFy
c2VyOjppbmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlVmFyYXJnc0lubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlR2V0QnlJZCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZVB1dEJ5SWQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZSk6CisK
IDIwMjEtMTEtMTcgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxlLmNvbT4KIAogICAgICAg
ICBbSlNDXSBSZXZpc2UgSlNPTi5wYXJzZSBhdG9taXplIHBvbGljeQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvT3BlcmFuZHMuaAppbmRleCAwNGM1MWU1ZTExMTcuLmM5MWJlN2NkMWFh
MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wZXJhbmRzLmgKQEAgLTI3NCwx
NiArMjc0LDI1IEBAIHB1YmxpYzoKICAgICAgICAgfQogICAgIH0KIAotICAgIHZvaWQgZW5zdXJl
VG1wcyhzaXplX3Qgc2l6ZSwgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgpKQorICAgIHZvaWQg
ZW5zdXJlTG9jYWxzQW5kVG1wcyhzaXplX3QgbmV3TnVtTG9jYWxzLCBzaXplX3QgbmV3TnVtVG1w
cywgY29uc3QgVCYgZW5zdXJlZFZhbHVlID0gVCgpKQogICAgIHsKLSAgICAgICAgaWYgKHNpemUg
PD0gbnVtYmVyT2ZUbXBzKCkpCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChu
ZXdOdW1Mb2NhbHMgPj0gbnVtYmVyT2ZMb2NhbHMoKSk7CisgICAgICAgIEFTU0VSVChuZXdOdW1U
bXBzID49IG51bWJlck9mVG1wcygpKTsKKworICAgICAgICBzaXplX3Qgb2xkTnVtTG9jYWxzID0g
bnVtYmVyT2ZMb2NhbHMoKTsKKyAgICAgICAgc2l6ZV90IG9sZE51bVRtcHMgPSBudW1iZXJPZlRt
cHMoKTsKIAogICAgICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAg
ICAgc2l6ZV90IG5ld1NpemUgPSBudW1iZXJPZkFyZ3VtZW50cygpICsgbnVtYmVyT2ZMb2NhbHMo
KSArIHNpemU7CisgICAgICAgIHNpemVfdCBuZXdTaXplID0gbnVtYmVyT2ZBcmd1bWVudHMoKSAr
IG5ld051bUxvY2FscyArIG5ld051bVRtcHM7CiAgICAgICAgIG1fdmFsdWVzLmdyb3cobmV3U2l6
ZSk7CiAKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBvbGROdW1UbXBzOyArK2kpCisg
ICAgICAgICAgICBtX3ZhbHVlc1tuZXdTaXplIC0gMSAtIGldID0gbV92YWx1ZXNbdG1wSW5kZXgo
b2xkTnVtVG1wcyAtIDEgLSBpKV07CisKKyAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2Nh
bHM7CiAgICAgICAgIGlmIChlbnN1cmVkVmFsdWUgIT0gVCgpIHx8ICFXVEY6OlZlY3RvclRyYWl0
czxUPjo6bmVlZHNJbml0aWFsaXphdGlvbikgeworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBuZXdOdW1Mb2NhbHMgLSBvbGROdW1Mb2NhbHM7ICsraSkKKyAgICAgICAgICAgICAg
ICBtX3ZhbHVlc1tsb2NhbEluZGV4KG9sZE51bUxvY2FscyArIGkpXSA9IGVuc3VyZWRWYWx1ZTsK
ICAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBvbGRTaXplOyBpIDwgbmV3U2l6ZTsgKytpKQog
ICAgICAgICAgICAgICAgIG1fdmFsdWVzW2ldID0gZW5zdXJlZFZhbHVlOwogICAgICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmNwcAppbmRleCA5MjRmNmQ0
M2M0NjkuLmJkN2Q3YzIwZGFmOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCYXNpY0Jsb2NrLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jh
c2ljQmxvY2suY3BwCkBAIC02MywyNCArNjMsNiBAQCBCYXNpY0Jsb2NrOjp+QmFzaWNCbG9jaygp
CiB7CiB9CiAKLXZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlTG9jYWxzKHVuc2lnbmVkIG5ld051bUxv
Y2FscykKLXsKLSAgICB2YXJpYWJsZXNBdEhlYWQuZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7
Ci0gICAgdmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMpOwotICAgIHZh
bHVlc0F0SGVhZC5lbnN1cmVMb2NhbHMobmV3TnVtTG9jYWxzKTsKLSAgICB2YWx1ZXNBdFRhaWwu
ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7Ci0gICAgaW50ZXJzZWN0aW9uT2ZQYXN0VmFsdWVz
QXRIZWFkLmVuc3VyZUxvY2FscyhuZXdOdW1Mb2NhbHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3Ao
KSk7Ci19Ci0KLXZvaWQgQmFzaWNCbG9jazo6ZW5zdXJlVG1wcyh1bnNpZ25lZCBuZXdOdW1UbXBz
KQotewotICAgIHZhcmlhYmxlc0F0SGVhZC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZh
cmlhYmxlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZhbHVlc0F0SGVhZC5l
bnN1cmVUbXBzKG5ld051bVRtcHMpOwotICAgIHZhbHVlc0F0VGFpbC5lbnN1cmVUbXBzKG5ld051
bVRtcHMpOwotICAgIGludGVyc2VjdGlvbk9mUGFzdFZhbHVlc0F0SGVhZC5lbnN1cmVUbXBzKG5l
d051bVRtcHMsIEFic3RyYWN0VmFsdWU6OmZ1bGxUb3AoKSk7Ci19Ci0KIHZvaWQgQmFzaWNCbG9j
azo6cmVwbGFjZVRlcm1pbmFsKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKIHsKICAgICBOb2Rl
QW5kSW5kZXggcmVzdWx0ID0gZmluZFRlcm1pbmFsKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQmFzaWNCbG9jay5oCmluZGV4IDJjOGE2MTM2ZjM1OC4uN2VjZWEyMDQ3ZTc4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtNTMsOSArNTMsNiBA
QCBzdHJ1Y3QgQmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogICAgICAgICBm
bG9hdCBleGVjdXRpb25Db3VudCk7CiAgICAgfkJhc2ljQmxvY2soKTsKICAgICAKLSAgICB2b2lk
IGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpOwotICAgIHZvaWQgZW5zdXJlVG1w
cyh1bnNpZ25lZCBuZXdOdW1UbXBzKTsKLSAgICAKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fbm9kZXMuc2l6ZSgpOyB9CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1
cm4gIXNpemUoKTsgfQogICAgIE5vZGUqJiBhdChzaXplX3QgaSkgeyByZXR1cm4gbV9ub2Rlc1tp
XTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBh
cnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAppbmRleCBlNDljNTI0ZWMzYzAuLmUxZjliODdkYzkyZSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTEzOCwyNCArMTM4LDI1IEBA
IHByaXZhdGU6CiAgICAgLy8gSnVzdCBwYXJzZSBmcm9tIG1fY3VycmVudEluZGV4IHRvIHRoZSBl
bmQgb2YgdGhlIGN1cnJlbnQgQ29kZUJsb2NrLgogICAgIHZvaWQgcGFyc2VDb2RlQmxvY2soKTsK
ICAgICAKLSAgICB2b2lkIGVuc3VyZUxvY2Fscyh1bnNpZ25lZCBuZXdOdW1Mb2NhbHMpCisgICAg
dm9pZCBlbnN1cmVMb2NhbHNGb3JWYXJpYWJsZXNBdFRhaWwodW5zaWduZWQgbmV3TnVtTG9jYWxz
KQogICAgIHsKICAgICAgICAgVkVSQk9TRV9MT0coIiAgIGVuc3VyZUxvY2FsczogdHJ5aW5nIHRv
IHJhaXNlIG1fbnVtTG9jYWxzIGZyb20gIiwgbV9udW1Mb2NhbHMsICIgdG8gIiwgbmV3TnVtTG9j
YWxzLCAiXG4iKTsKICAgICAgICAgaWYgKG5ld051bUxvY2FscyA8PSBtX251bUxvY2FscykKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgbV9udW1Mb2NhbHMgPSBuZXdOdW1Mb2NhbHM7CiAg
ICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbV9ncmFwaC5udW1CbG9ja3MoKTsgKytpKQot
ICAgICAgICAgICAgbV9ncmFwaC5ibG9jayhpKS0+ZW5zdXJlTG9jYWxzKG5ld051bUxvY2Fscyk7
CisgICAgICAgICAgICBtX2dyYXBoLmJsb2NrKGkpLT52YXJpYWJsZXNBdFRhaWwuZW5zdXJlTG9j
YWxzKG5ld051bUxvY2Fscyk7CiAgICAgfQogCi0gICAgdm9pZCBlbnN1cmVUbXBzKHVuc2lnbmVk
IG5ld051bVRtcHMpCisgICAgdm9pZCBlbnN1cmVMb2NhbHNBbmRUbXBzRm9yVmFyaWFibGVzQXRU
YWlsKHVuc2lnbmVkIG5ld051bUxvY2FscywgdW5zaWduZWQgbmV3TnVtVG1wcykKICAgICB7Ci0g
ICAgICAgIFZFUkJPU0VfTE9HKCIgICBlbnN1cmVUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1U
bXBzIGZyb20gIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bVRtcHMsICJcbiIpOwotICAgICAg
ICBpZiAobmV3TnVtVG1wcyA8PSBtX251bVRtcHMpCisgICAgICAgIFZFUkJPU0VfTE9HKCIgICBl
bnN1cmVMb2NhbHNBbmRUbXBzOiB0cnlpbmcgdG8gcmFpc2UgbV9udW1Mb2NhbHMvbV9udW1UbXBz
IGZyb20gIiwgbV9udW1Mb2NhbHMsICIvIiwgbV9udW1UbXBzLCAiIHRvICIsIG5ld051bUxvY2Fs
cywgIi8iLCBuZXdOdW1UbXBzLCAiXG4iKTsKKyAgICAgICAgaWYgKG5ld051bUxvY2FscyA8PSBt
X251bUxvY2FscyAmJiBuZXdOdW1UbXBzIDw9IG1fbnVtVG1wcykKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgbV9udW1UbXBzID0gbmV3TnVtVG1wczsKKyAgICAgICAgbV9udW1Mb2NhbHMg
PSBzdGQ6Om1heChtX251bUxvY2FscywgbmV3TnVtTG9jYWxzKTsKKyAgICAgICAgbV9udW1UbXBz
ID0gc3RkOjptYXgobV9udW1UbXBzLCBuZXdOdW1UbXBzKTsKICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBtX2dyYXBoLm51bUJsb2NrcygpOyArK2kpCi0gICAgICAgICAgICBtX2dyYXBo
LmJsb2NrKGkpLT5lbnN1cmVUbXBzKG5ld051bVRtcHMpOworICAgICAgICAgICAgbV9ncmFwaC5i
bG9jayhpKS0+dmFyaWFibGVzQXRUYWlsLmVuc3VyZUxvY2Fsc0FuZFRtcHMobV9udW1Mb2NhbHMs
IG1fbnVtVG1wcyk7CiAgICAgfQogCiAKQEAgLTE3MSw2ICsxNzIsOCBAQCBwcml2YXRlOgogICAg
IC8vIHRoYW4gdG8gbW92ZSB0aGUgcmlnaHQgaW5kZXggYWxsIHRoZSB3YXkgdG8gdGhlIHRyZWF0
bWVudCBvZiBvcF9yZXQuCiAgICAgQmFzaWNCbG9jayogYWxsb2NhdGVUYXJnZXRhYmxlQmxvY2so
Qnl0ZWNvZGVJbmRleCk7CiAgICAgQmFzaWNCbG9jayogYWxsb2NhdGVVbnRhcmdldGFibGVCbG9j
aygpOworICAgIC8vIEhlbHBlciBmb3IgYWxsb2NhdGVUYXJnZXRhYmxlQmxvY2sgYW5kIGFsbG9j
YXRlVW50YXJnZXRhYmxlQmxvY2ssIGRvIG5vdCB1c2UgZGlyZWN0bHkKKyAgICBCYXNpY0Jsb2Nr
KiBhbGxvY2F0ZUJsb2NrKEJ5dGVjb2RlSW5kZXgpOwogICAgIC8vIEFuIHVudGFyZ2V0YWJsZSBi
bG9jayBjYW4gYmUgZ2l2ZW4gYSBieXRlY29kZUluZGV4IHRvIGJlIGxhdGVyIG1hbmFnZWQgYnkg
bGlua0Jsb2NrLCBidXQgb25seSBvbmNlLCBhbmQgaXQgY2FuIG5ldmVyIGdvIGluIHRoZSBvdGhl
ciBkaXJlY3Rpb24KICAgICB2b2lkIG1ha2VCbG9ja1RhcmdldGFibGUoQmFzaWNCbG9jayosIEJ5
dGVjb2RlSW5kZXgpOwogICAgIHZvaWQgYWRkSnVtcFRvKEJhc2ljQmxvY2sqKTsKQEAgLTEyNjIs
MjQgKzEyNjUsMzIgQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzQW55Rm9yY2VPU1JFeGl0cyB7
IGZhbHNlIH07CiB9OwogCitCYXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVCbG9j
ayhCeXRlY29kZUluZGV4IGJ5dGVjb2RlSW5kZXgpCit7CisgICAgLy8gV2UgZG9uJ3QgYm90aGVy
IGluaXRpYWxpemluZyBtb3N0IE9wZXJhbmRzIGhlcmUsIHNpbmNlIGlubGluaW5nIGNhbiBjaGFu
Z2UgdGhlIG51bWJlciBvZiBsb2NhbHMgYW5kIHRtcHMuCisgICAgLy8gV2Ugb25seSBpbml0aWFs
aXplIHZhcmlhYmxlc0F0VGFpbCBiZWNhdXNlIGl0IGlzIHRoZSBvbmx5IHBhcnQgd2hpY2ggaXMg
dXNlZCBpbiB0aGUgYnl0ZWNvZGUgcGFyc2VyCisgICAgLy8gV2Ugd2lsbCBpbml0aWFsaXplIGFs
bCBvZiB0aGUgb3RoZXIgT3BlcmFuZHMgaW4gYnVsayBhdCB0aGUgZW5kIG9mIHRoZSBwaGFzZS4K
KyAgICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0
ZWNvZGVJbmRleCwgMCwgMCwgMCwgMSkpOworICAgIEJhc2ljQmxvY2sqIGJsb2NrUHRyID0gYmxv
Y2sucHRyKCk7CisgICAgYmxvY2tQdHItPnZhcmlhYmxlc0F0VGFpbCA9IE9wZXJhbmRzPE5vZGUq
PihtX251bUFyZ3VtZW50cywgbV9udW1Mb2NhbHMsIG1fbnVtVG1wcyk7CisgICAgbV9ncmFwaC5h
cHBlbmRCbG9jayhXVEZNb3ZlKGJsb2NrKSk7CisgICAgcmV0dXJuIGJsb2NrUHRyOworfQorCiBC
YXNpY0Jsb2NrKiBCeXRlQ29kZVBhcnNlcjo6YWxsb2NhdGVUYXJnZXRhYmxlQmxvY2soQnl0ZWNv
ZGVJbmRleCBieXRlY29kZUluZGV4KQogewogICAgIEFTU0VSVChieXRlY29kZUluZGV4KTsKLSAg
ICBSZWY8QmFzaWNCbG9jaz4gYmxvY2sgPSBhZG9wdFJlZigqbmV3IEJhc2ljQmxvY2soYnl0ZWNv
ZGVJbmRleCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxzLCBtX251bVRtcHMsIDEpKTsKLSAg
ICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGJsb2NrLnB0cigpOwogICAgIC8vIG1fYmxvY2tMaW5r
aW5nVGFyZ2V0cyBtdXN0IGFsd2F5cyBiZSBzb3J0ZWQgaW4gaW5jcmVhc2luZyBvcmRlciBvZiBi
eXRlY29kZUJlZ2luCiAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFy
Z2V0cy5zaXplKCkpCiAgICAgICAgIEFTU0VSVChtX2lubGluZVN0YWNrVG9wLT5tX2Jsb2NrTGlu
a2luZ1RhcmdldHMubGFzdCgpLT5ieXRlY29kZUJlZ2luLm9mZnNldCgpIDwgYnl0ZWNvZGVJbmRl
eC5vZmZzZXQoKSk7CisgICAgQmFzaWNCbG9jayogYmxvY2tQdHIgPSBhbGxvY2F0ZUJsb2NrKGJ5
dGVjb2RlSW5kZXgpOwogICAgIG1faW5saW5lU3RhY2tUb3AtPm1fYmxvY2tMaW5raW5nVGFyZ2V0
cy5hcHBlbmQoYmxvY2tQdHIpOwotICAgIG1fZ3JhcGguYXBwZW5kQmxvY2soV1RGTW92ZShibG9j
aykpOwogICAgIHJldHVybiBibG9ja1B0cjsKIH0KIAogQmFzaWNCbG9jayogQnl0ZUNvZGVQYXJz
ZXI6OmFsbG9jYXRlVW50YXJnZXRhYmxlQmxvY2soKQogewotICAgIFJlZjxCYXNpY0Jsb2NrPiBi
bG9jayA9IGFkb3B0UmVmKCpuZXcgQmFzaWNCbG9jayhCeXRlY29kZUluZGV4KCksIG1fbnVtQXJn
dW1lbnRzLCBtX251bUxvY2FscywgbV9udW1UbXBzLCAxKSk7Ci0gICAgQmFzaWNCbG9jayogYmxv
Y2tQdHIgPSBibG9jay5wdHIoKTsKLSAgICBtX2dyYXBoLmFwcGVuZEJsb2NrKFdURk1vdmUoYmxv
Y2spKTsKKyAgICBCYXNpY0Jsb2NrKiBibG9ja1B0ciA9IGFsbG9jYXRlQmxvY2soQnl0ZWNvZGVJ
bmRleCgpKTsKICAgICBWRVJCT1NFX0xPRygiQWRkaW5nIG5ldyB1bnRhcmdldGFibGUgYmxvY2s6
ICIsIGJsb2NrUHRyLT5pbmRleCwgIlxuIik7CiAgICAgcmV0dXJuIGJsb2NrUHRyOwogfQpAQCAt
MTY3NywxMSArMTY4OCw5IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSog
Y2FsbFRhcmdldE5vZGUsIE9wZXJhbmQgcmVzdWx0LCBDYWxsVmFyaWFuCiAgICAgCiAgICAgT3Bl
cmFuZCBpbmxpbmVDYWxsRnJhbWVTdGFydCA9IFZpcnR1YWxSZWdpc3RlcihtX2lubGluZVN0YWNr
VG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0QWZ0ZXJGaXh1
cCkpLnZhbHVlKCkgKyBDYWxsRnJhbWU6OmhlYWRlclNpemVJblJlZ2lzdGVycyk7CiAgICAgCi0g
ICAgZW5zdXJlTG9jYWxzKAotICAgICAgICBpbmxpbmVDYWxsRnJhbWVTdGFydC50b0xvY2FsKCkg
KyAxICsKLSAgICAgICAgQ2FsbEZyYW1lOjpoZWFkZXJTaXplSW5SZWdpc3RlcnMgKyBjb2RlQmxv
Y2stPm51bUNhbGxlZUxvY2FscygpKTsKLSAgICAKLSAgICBlbnN1cmVUbXBzKChtX2lubGluZVN0
YWNrVG9wLT5tX2lubGluZUNhbGxGcmFtZSA/IG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2Fs
bEZyYW1lLT50bXBPZmZzZXQgOiAwKSArIG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5u
dW1UbXBzKCkgKyBjb2RlQmxvY2stPm51bVRtcHMoKSk7CisgICAgdW5zaWduZWQgbnVtTG9jYWxz
ID0gaW5saW5lQ2FsbEZyYW1lU3RhcnQudG9Mb2NhbCgpICsgMSArIENhbGxGcmFtZTo6aGVhZGVy
U2l6ZUluUmVnaXN0ZXJzICsgY29kZUJsb2NrLT5udW1DYWxsZWVMb2NhbHMoKTsKKyAgICB1bnNp
Z25lZCBudW1UbXBzID0gKG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lID8gbV9p
bmxpbmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWUtPnRtcE9mZnNldCA6IDApICsgbV9pbmxp
bmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPm51bVRtcHMoKSArIGNvZGVCbG9jay0+bnVtVG1wcygp
OworICAgIGVuc3VyZUxvY2Fsc0FuZFRtcHNGb3JWYXJpYWJsZXNBdFRhaWwobnVtTG9jYWxzLCBu
dW1UbXBzKTsKIAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1f
YXJndW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCkBAIC0xOTk0LDcgKzIwMDMsNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUs
IE9wZXJhbmQgcmVzdWx0LAogICAgICAgICBpbnQgcmVtYXBwZWRSZWdpc3Rlck9mZnNldCA9CiAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIocmVn
aXN0ZXJPZmZzZXQpKS52aXJ0dWFsUmVnaXN0ZXIoKS5vZmZzZXQoKTsKICAgICAgICAgCi0gICAg
ICAgIGVuc3VyZUxvY2FscyhWaXJ0dWFsUmVnaXN0ZXIocmVtYXBwZWRSZWdpc3Rlck9mZnNldCku
dG9Mb2NhbCgpKTsKKyAgICAgICAgZW5zdXJlTG9jYWxzRm9yVmFyaWFibGVzQXRUYWlsKFZpcnR1
YWxSZWdpc3RlcihyZW1hcHBlZFJlZ2lzdGVyT2Zmc2V0KS50b0xvY2FsKCkpOwogICAgICAgICAK
ICAgICAgICAgaW50IGFyZ3VtZW50U3RhcnQgPSByZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6
aGVhZGVyU2l6ZUluUmVnaXN0ZXJzOwogICAgICAgICBpbnQgcmVtYXBwZWRBcmd1bWVudFN0YXJ0
ID0gbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVu
dFN0YXJ0KSkudmlydHVhbFJlZ2lzdGVyKCkub2Zmc2V0KCk7CkBAIC00NzkxLDcgKzQ4MDAsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVHZXRCeUlkKAogICAgICAgICBzdGFja0FsaWdu
bWVudFJlZ2lzdGVycygpLAogICAgICAgICAtcmVnaXN0ZXJPZmZzZXQpOwogICAgIAotICAgIGVu
c3VyZUxvY2FscygKKyAgICBlbnN1cmVMb2NhbHNGb3JWYXJpYWJsZXNBdFRhaWwoCiAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKICAgICAgICAgICAgIFZpcnR1YWxSZWdp
c3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwoKSk7CiAgICAgCkBAIC01MTg1LDcgKzUxOTQs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVQdXRCeUlkKAogICAgICAgICAgICAgc3Rh
Y2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwKICAgICAgICAgICAgIC1yZWdpc3Rlck9mZnNldCk7CiAg
ICAgCi0gICAgICAgIGVuc3VyZUxvY2FscygKKyAgICAgICAgZW5zdXJlTG9jYWxzRm9yVmFyaWFi
bGVzQXRUYWlsKAogICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAog
ICAgICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlcihyZWdpc3Rlck9mZnNldCkpLnRvTG9jYWwo
KSk7CiAgICAgCkBAIC05MDQwLDYgKzkwNDksMTcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2UoKQogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAgICAgbGlua0Jsb2NrcyhpbmxpbmVTdGFja0Vu
dHJ5Lm1fdW5saW5rZWRCbG9ja3MsIGlubGluZVN0YWNrRW50cnkubV9ibG9ja0xpbmtpbmdUYXJn
ZXRzKTsKIAorICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX2dyYXBoLmJsb2Nrc0luTmF0
dXJhbE9yZGVyKCkpIHsKKyAgICAgICAgLy8gV2Uga2VwdCBibG9jay0+dmFyaWFibGVzQXRUYWls
IHVwZGF0ZWQgdGhyb3VnaG91dCwgYnV0IG5vdCB0aGUgb3RoZXIgT3BlcmFuZHMsIHRvIGF2b2lk
IGhhdmluZyB0byByZXNpemUgdGhlbSBldmVyeSB0aW1lIHdlIGlubGluZQorICAgICAgICBBU1NF
UlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkFyZ3VtZW50cygpID09IG1fbnVtQXJn
dW1lbnRzKTsKKyAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZM
b2NhbHMoKSA9PSBtX251bUxvY2Fscyk7CisgICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVz
QXRUYWlsLm51bWJlck9mVG1wcygpID09IG1fbnVtVG1wcyk7CisgICAgICAgIGJsb2NrLT52YXJp
YWJsZXNBdEhlYWQgPSBPcGVyYW5kczxOb2RlKj4oT3BlcmFuZHNMaWtlLCBibG9jay0+dmFyaWFi
bGVzQXRUYWlsKTsKKyAgICAgICAgYmxvY2stPnZhbHVlc0F0SGVhZCA9IE9wZXJhbmRzPEFic3Ry
YWN0VmFsdWU+KE9wZXJhbmRzTGlrZSwgYmxvY2stPnZhcmlhYmxlc0F0VGFpbCk7CisgICAgICAg
IGJsb2NrLT52YWx1ZXNBdFRhaWwgPSBPcGVyYW5kczxBYnN0cmFjdFZhbHVlPihPcGVyYW5kc0xp
a2UsIGJsb2NrLT52YXJpYWJsZXNBdFRhaWwpOworICAgICAgICBibG9jay0+aW50ZXJzZWN0aW9u
T2ZQYXN0VmFsdWVzQXRIZWFkID0gT3BlcmFuZHM8QWJzdHJhY3RWYWx1ZT4oT3BlcmFuZHNMaWtl
LCBibG9jay0+dmFyaWFibGVzQXRUYWlsKTsKKyAgICB9CisKICAgICAvLyBXZSBydW4gYmFja3dh
cmRzIHByb3BhZ2F0aW9uIG5vdyBiZWNhdXNlIHRoZSBzb3VuZG5lc3Mgb2YgdGhhdCBwaGFzZQog
ICAgIC8vIHJlbGllcyBvbiBzZWVpbmcgdGhlIGdyYXBoIGFzIGlmIGl0IHdlcmUgYW4gSVIgb3Zl
ciBieXRlY29kZSwgc2luY2UKICAgICAvLyB0aGUgc3BlYy1jb3JyZWN0bmVzcyBvZiB0aGF0IHBo
YXNlIHJlbGllcyBvbiBzZWVpbmcgYWxsIGJ5dGVjb2RlIHVzZXMuCkBAIC05MTU2LDE2ICs5MTc2
LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2UoKQogICAgIG1fZ3JhcGguZGV0ZXJtaW5l
UmVhY2hhYmlsaXR5KCk7CiAgICAgbV9ncmFwaC5raWxsVW5yZWFjaGFibGVCbG9ja3MoKTsKIAot
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFwaC5udW1CbG9ja3MoKTsgYmxv
Y2tJbmRleC0tOykgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2so
YmxvY2tJbmRleCk7Ci0gICAgICAgIGlmICghYmxvY2spCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSA9
PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZMb2NhbHMoKSk7Ci0g
ICAgICAgIEFTU0VSVChibG9jay0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkg
PT0gbV9ncmFwaC5ibG9jaygwKS0+dmFyaWFibGVzQXRIZWFkLm51bWJlck9mQXJndW1lbnRzKCkp
OwotICAgICAgICBBU1NFUlQoYmxvY2stPnZhcmlhYmxlc0F0VGFpbC5udW1iZXJPZkxvY2Fscygp
ID09IG1fZ3JhcGguYmxvY2soMCktPnZhcmlhYmxlc0F0SGVhZC5udW1iZXJPZkxvY2FscygpKTsK
LSAgICAgICAgQVNTRVJUKGJsb2NrLT52YXJpYWJsZXNBdFRhaWwubnVtYmVyT2ZBcmd1bWVudHMo
KSA9PSBtX2dyYXBoLmJsb2NrKDApLT52YXJpYWJsZXNBdEhlYWQubnVtYmVyT2ZBcmd1bWVudHMo
KSk7Ci0gICAgfQotCiAgICAgbV9ncmFwaC5tX3RtcHMgPSBtX251bVRtcHM7CiAgICAgbV9ncmFw
aC5tX2xvY2FsVmFycyA9IG1fbnVtTG9jYWxzOwogICAgIG1fZ3JhcGgubV9wYXJhbWV0ZXJTbG90
cyA9IG1fcGFyYW1ldGVyU2xvdHM7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>