<?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>224578</bug_id>
          
          <creation_ts>2021-04-14 14:48:01 -0700</creation_ts>
          <short_desc>[JSC] DFG / FTL should inline switch_string</short_desc>
          <delta_ts>2021-04-22 01:27:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <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>1750348</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-14 14:48:01 -0700</bug_when>
    <thetext>After r275840, we no longer copy string table in CodeBlock! (mainly for memory saving).
This unlocks ability to inline op_switch_string in DFG / FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1752941</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-04-21 14:48:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/76980854&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753051</commentid>
    <comment_count>2</comment_count>
      <attachid>426776</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-21 22:43:54 -0700</bug_when>
    <thetext>Created attachment 426776
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753065</commentid>
    <comment_count>3</comment_count>
      <attachid>426776</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2021-04-22 00:10:10 -0700</bug_when>
    <thetext>Comment on attachment 426776
Patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        This allows DFG / FTL to inline CodeBlock which includes op_switch_string. We were not able

I suggest &quot;were previously not able&quot;.

&gt; Source/JavaScriptCore/ChangeLog:13
&gt; +        1. We handle StringJumpTable / UnlinkedStringJumpTable in the same way to SimpleJumpTable / UnlinkedSimpleJumpTable.

/same way to/same way as/.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:16748
&gt;          LValue branchOffset = vmCall(

Can you rename this node to `branchIndex` to match `operationSwitchStringAndGetIndex`?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753066</commentid>
    <comment_count>4</comment_count>
      <attachid>426776</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-22 00:12:46 -0700</bug_when>
    <thetext>Comment on attachment 426776
Patch

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

&gt;&gt; Source/JavaScriptCore/ChangeLog:10
&gt;&gt; +        This allows DFG / FTL to inline CodeBlock which includes op_switch_string. We were not able
&gt; 
&gt; I suggest &quot;were previously not able&quot;.

Fixed.

&gt;&gt; Source/JavaScriptCore/ChangeLog:13
&gt;&gt; +        1. We handle StringJumpTable / UnlinkedStringJumpTable in the same way to SimpleJumpTable / UnlinkedSimpleJumpTable.
&gt; 
&gt; /same way to/same way as/.

Fixed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToB3.cpp:16748
&gt;&gt;          LValue branchOffset = vmCall(
&gt; 
&gt; Can you rename this node to `branchIndex` to match `operationSwitchStringAndGetIndex`?

Oops, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1753078</commentid>
    <comment_count>5</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2021-04-22 01:27:53 -0700</bug_when>
    <thetext>Committed r276427 (236890@main): &lt;https://commits.webkit.org/236890@main&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>426776</attachid>
            <date>2021-04-21 22:43:54 -0700</date>
            <delta_ts>2021-04-22 00:10:10 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-224578-20210421224354.patch</filename>
            <type>text/plain</type>
            <size>36839</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc2NDE1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBl
MjJiNzExMTdhMmNhYTM2NmJhYTVkNDYyY2VlMDNlY2Q1ZDdjMGE2Li42MWZlMjIzYTY2ZDQ1ZDNk
ZGFjYzQ2MmMzOTA0ZGQ3OTE4N2QyMDYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAyMS0wNC0yMSAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIERGRyAvIEZUTCBzaG91bGQgaW5saW5lIHN3aXRjaF9zdHJpbmcK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNDU3OAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEJlY2F1c2Ug
b2YgcjI3NTg0MCBjaGFuZ2UsIHdlIG5vIGxvbmdlciBjb3B5IFN0cmluZ0p1bXBUYWJsZSB3aGVu
IGNvbXBpbGluZyBERkcgLyBGVEwgY29kZS4KKyAgICAgICAgSW5zdGVhZCB3ZSBhcmUgdXNpbmcg
YSBwb2ludGVyIHRvIFVubGlua2VkU3RyaW5nVGFibGUgc3RvcmVkIGluIFVubGlua2VkQ29kZUJs
b2NrLgorICAgICAgICBUaGlzIGFsbG93cyBERkcgLyBGVEwgdG8gaW5saW5lIENvZGVCbG9jayB3
aGljaCBpbmNsdWRlcyBvcF9zd2l0Y2hfc3RyaW5nLiBXZSB3ZXJlIG5vdCBhYmxlCisgICAgICAg
IHRvIGRvIHRoYXQgYmVjYXVzZSB3ZSBjYW5ub3QgY29weSBTdHJpbmdJbXBsIGluIERGRyAvIEZU
TCBjb25jdXJyZW50IGNvbXBpbGVyIHRocmVhZC4KKworICAgICAgICAxLiBXZSBoYW5kbGUgU3Ry
aW5nSnVtcFRhYmxlIC8gVW5saW5rZWRTdHJpbmdKdW1wVGFibGUgaW4gdGhlIHNhbWUgd2F5IHRv
IFNpbXBsZUp1bXBUYWJsZSAvIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlLgorICAgICAgICAyLiBX
ZSBwdXQgbV9jdGlEZWZhdWx0IG9mIFN0cmluZ0p1bXBUYWJsZSBpbiB0aGUgbGFzdCBlbGVtZW50
IG9mIG1fY3RpT2Zmc2V0cyB2ZWN0b3Igb2YgU3RyaW5nSnVtcFRhYmxlIHRvIG1ha2UKKyAgICAg
ICAgICAgc2l6ZW9mKFN0cmluZ0p1bXBUYWJsZSkgc21hbGwuCisgICAgICAgIDMuIFdlIHVzZSBt
X2luZGV4SW5UYWJsZSBpbnN0ZWFkIG9mIG1fYnJhbmNoT2Zmc2V0IGluIEZUTCBzd2l0Y2ggZ2Vu
ZXJhdGlvbiB0byBtYWtlIHN3aXRjaCB0YWJsZSBkZW5zZS4KKworICAgICAgICBUaGUgbWljcm9i
ZW5jaG1hcmsgc2hvd3MgMzAlIGltcHJvdmVtZW50IGJlY2F1c2Ugb2YgdW5sb2NraW5nIGlubGlu
aW5nIGZlYXR1cmUuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBU
b1QgICAgICAgICAgICAgICAgICAgICBQYXRjaGVkCisKKyAgICAgICAgICAgIHN3aXRjaC1pbmxp
bmluZyAgICAgICAyNy4xMjM4Ky0wLjI3MDggICAgIF4gICAgIDIwLjI2MzArLTAuMTQ3NyAgICAg
ICAgXiBkZWZpbml0ZWx5IDEuMzM4NnggZmFzdGVyCisKKyAgICAgICAgICAgIDxnZW9tZXRyaWM+
ICAgICAgICAgICAyNy4xMjM4Ky0wLjI3MDggICAgIF4gICAgIDIwLjI2MzArLTAuMTQ3NyAgICAg
ICAgXiBkZWZpbml0ZWx5IDEuMzM4NnggZmFzdGVyCisKKyAgICAgICAgKiBieXRlY29kZS9KdW1w
VGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3RyaW5nSnVtcFRhYmxlOjplbnN1cmVDVElUYWJsZSk6
CisgICAgICAgIChKU0M6OlN0cmluZ0p1bXBUYWJsZTo6Y3RpRm9yVmFsdWUgY29uc3QpOgorICAg
ICAgICAoSlNDOjpTdHJpbmdKdW1wVGFibGU6OmN0aURlZmF1bHQgY29uc3QpOgorICAgICAgICAo
SlNDOjpTdHJpbmdKdW1wVGFibGU6OmlzRW1wdHkgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L1VubGlua2VkQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OlVubGlua2VkU3RyaW5nSnVtcFRh
YmxlOjppbmRleEZvclZhbHVlIGNvbnN0KToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5s
aW5lU3RhY2tFbnRyeSk6CisgICAgICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGgu
aDoKKyAgICAgICAgKiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkpJVENvbXBpbGVyOjpsaW5rKToKKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OkRGRzo6SlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKToKKyAgICAgICAgKiBk
ZmcvREZHT3BlcmF0aW9ucy5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6
CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0
cmluZyk6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9CMy5jcHA6CisgICAgICAgIChKU0M6
OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6OnN3aXRjaFN0cmluZ1Nsb3cpOgorICAgICAgICAqIGZ0
bC9GVExPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04pOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmg6CisgICAgICAgICogaml0
L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6bGluayk6CisgICAgICAgICogaml0L0pJVE9w
Y29kZXMuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyk6Cisg
ICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQ19ERUZJTkVfSklUX09QRVJBVElPTik6CisKIDIwMjEtMDQtMjEgIEFk
cmlhbiBQZXJleiBkZSBDYXN0cm8gIDxhcGVyZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBOb24t
dW5pZmllZCBidWlsZCBmaXhlcywgbWlkIEFwcmlsIDIwMjEgZWRpdGlvbgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0p1bXBUYWJsZS5oCmluZGV4IGUyYzNlZWEzMGMyYTdjM2ZhYzY2
NjNjMjJiM2VkZDkwNDhjZjVlMTIuLjkyN2IzZWY4ZWMxYmQyMjhhMDI2MzkzN2IxZDkzOWNjZjE0
ZDk2NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9KdW1wVGFi
bGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSnVtcFRhYmxlLmgKQEAg
LTQyLDE5ICs0MiwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICNpZiBFTkFCTEUoSklUKQogICAgIHN0
cnVjdCBTdHJpbmdKdW1wVGFibGUgewogICAgICAgICBGaXhlZFZlY3RvcjxDb2RlTG9jYXRpb25M
YWJlbDxKU1N3aXRjaFB0clRhZz4+IG1fY3RpT2Zmc2V0czsKLSAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWw8SlNTd2l0Y2hQdHJUYWc+IG1fY3RpRGVmYXVsdDsgLy8gRklYTUU6IGl0IHNob3VsZCBu
b3QgYmUgbmVjZXNzYXJ5IHRvIHN0b3JlIHRoaXMuCisKKyAgICAgICAgdm9pZCBlbnN1cmVDVElU
YWJsZShjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSkKKyAgICAg
ICAgeworICAgICAgICAgICAgaWYgKCFpc0VtcHR5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICAgICAgbV9jdGlPZmZzZXRzID0gRml4ZWRWZWN0b3I8Q29kZUxvY2F0aW9uTGFi
ZWw8SlNTd2l0Y2hQdHJUYWc+Pih1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgpICsg
MSk7CisgICAgICAgIH0KIAogICAgICAgICBpbmxpbmUgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0
Y2hQdHJUYWc+IGN0aUZvclZhbHVlKGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlLCBTdHJpbmdJbXBsKiB2YWx1ZSkgY29uc3QKICAgICAgICAgewogICAgICAgICAg
ICAgYXV0byBsb2MgPSB1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFibGUuZmluZCh2YWx1ZSk7CiAg
ICAgICAgICAgICBpZiAobG9jID09IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5lbmQoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gbV9jdGlEZWZhdWx0OworICAgICAgICAgICAgICAgIHJl
dHVybiBtX2N0aU9mZnNldHNbdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnNpemUoKV07CiAg
ICAgICAgICAgICByZXR1cm4gbV9jdGlPZmZzZXRzW2xvYy0+dmFsdWUubV9pbmRleEluVGFibGVd
OwogICAgICAgICB9CisKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJUYWc+
IGN0aURlZmF1bHQoKSBjb25zdCB7IHJldHVybiBtX2N0aU9mZnNldHMubGFzdCgpOyB9CisKKyAg
ICAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV9jdGlPZmZzZXRzLmlzRW1wdHko
KTsgfQogICAgIH07Ci0jZW5kaWYKIAotI2lmIEVOQUJMRShKSVQpCiAgICAgc3RydWN0IFNpbXBs
ZUp1bXBUYWJsZSB7CiAgICAgICAgIEZpeGVkVmVjdG9yPENvZGVMb2NhdGlvbkxhYmVsPEpTU3dp
dGNoUHRyVGFnPj4gbV9jdGlPZmZzZXRzOwogICAgICAgICBDb2RlTG9jYXRpb25MYWJlbDxKU1N3
aXRjaFB0clRhZz4gbV9jdGlEZWZhdWx0OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1VubGlua2VkQ29kZUJsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVW5saW5rZWRDb2RlQmxvY2suaAppbmRleCAzYWE1NjEzZTdlZDE3M2E2N2Y0MDBm
YzRlMDJhNTUwYjJjODg3YjUzLi5iNDIxMDQ2N2NlMmQ3Zjk5ZmUzMmU1OGEzMDc0OTMyMzA1NDY4
NTcxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVW5saW5rZWRD
b2RlQmxvY2suaApAQCAtOTIsNiArOTIsMTMgQEAgc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRh
YmxlIHsKICAgICAgICAgcmV0dXJuIGxvYy0+dmFsdWUubV9icmFuY2hPZmZzZXQ7CiAgICAgfQog
CisgICAgaW5saW5lIHVuc2lnbmVkIGluZGV4Rm9yVmFsdWUoU3RyaW5nSW1wbCogdmFsdWUsIHVu
c2lnbmVkIGRlZmF1bHRJbmRleCkgY29uc3QKKyAgICB7CisgICAgICAgIGF1dG8gbG9jID0gbV9v
ZmZzZXRUYWJsZS5maW5kKHZhbHVlKTsKKyAgICAgICAgaWYgKGxvYyA9PSBtX29mZnNldFRhYmxl
LmVuZCgpKQorICAgICAgICAgICAgcmV0dXJuIGRlZmF1bHRJbmRleDsKKyAgICAgICAgcmV0dXJu
IGxvYy0+dmFsdWUubV9pbmRleEluVGFibGU7CisgICAgfQogfTsKIAogc3RydWN0IFVubGlua2Vk
U2ltcGxlSnVtcFRhYmxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKaW5kZXggNDkyOTFiNDYwMjhjYmQyOGMxM2QxYjJlNmE0YTU5MDFjZTZm
ODA1Ni4uNDA4ZGMwOGMxNDMwODNmODE4NDkyN2IyYThlNTk1MmQ3YWIwOGRmYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTExODUs
NiArMTE4NSw3IEBAIGNsYXNzIEJ5dGVDb2RlUGFyc2VyIHsKICAgICAgICAgLy8gZGlyZWN0LCBj
YWxsZXIpLgogICAgICAgICBWZWN0b3I8dW5zaWduZWQ+IG1faWRlbnRpZmllclJlbWFwOwogICAg
ICAgICBWZWN0b3I8dW5zaWduZWQ+IG1fc3dpdGNoUmVtYXA7CisgICAgICAgIFZlY3Rvcjx1bnNp
Z25lZD4gbV9zdHJpbmdTd2l0Y2hSZW1hcDsKICAgICAgICAgCiAgICAgICAgIC8vIFRoZXNlIGFy
ZSBibG9ja3Mgd2hvc2UgdGVybWluYWwgaXMgYSBKdW1wLCBCcmFuY2ggb3IgU3dpdGNoLCBhbmQg
d2hvc2UgdGFyZ2V0IGhhcyBub3QgeWV0IGJlZW4gbGlua2VkLgogICAgICAgICAvLyBUaGVpciB0
ZXJtaW5hbCBpbnN0ZWFkIHJlZmVycyB0byBhIGJ5dGVjb2RlIGluZGV4LCBhbmQgdGhlIHJpZ2h0
IEJCIGNhbiBiZSBmb3VuZCBpbiBtX2Jsb2NrTGlua2luZ1RhcmdldHMuCkBAIC02OTExLDEwICs2
OTEyLDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQp
CiAgICAgICAgICAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFN3
aXRjaFN0cmluZz4oKTsKICAgICAgICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqbV9ncmFwaC5t
X3N3aXRjaERhdGEuYWRkKCk7CiAgICAgICAgICAgICBkYXRhLmtpbmQgPSBTd2l0Y2hTdHJpbmc7
Ci0gICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBieXRlY29kZS5tX3RhYmxlSW5k
ZXg7CisgICAgICAgICAgICBkYXRhLnN3aXRjaFRhYmxlSW5kZXggPSBtX2lubGluZVN0YWNrVG9w
LT5tX3N0cmluZ1N3aXRjaFJlbWFwW2J5dGVjb2RlLm1fdGFibGVJbmRleF07CiAgICAgICAgICAg
ICBkYXRhLmZhbGxUaHJvdWdoLnNldEJ5dGVjb2RlSW5kZXgobV9jdXJyZW50SW5kZXgub2Zmc2V0
KCkgKyBqdW1wVGFyZ2V0KGJ5dGVjb2RlLm1fZGVmYXVsdE9mZnNldCkpOwotICAgICAgICAgICAg
Y29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlu
a2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCk7Ci0gICAgICAg
ICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdGFibGUubV9vZmZzZXRUYWJsZSkgeworICAg
ICAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBt
X2dyYXBoLnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEuc3dpdGNoVGFibGVJbmRl
eCk7CisgICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIGVudHJ5IDogdW5saW5rZWRUYWJsZS5t
X29mZnNldFRhYmxlKSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgdGFyZ2V0ID0gbV9jdXJy
ZW50SW5kZXgub2Zmc2V0KCkgKyBlbnRyeS52YWx1ZS5tX2JyYW5jaE9mZnNldDsKICAgICAgICAg
ICAgICAgICBpZiAodGFyZ2V0ID09IGRhdGEuZmFsbFRocm91Z2guYnl0ZWNvZGVJbmRleCgpKQog
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKQEAgLTg1NTEsNiArODU1MiwxMyBAQCBCeXRl
Q29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5saW5lU3RhY2tFbnRyeSgKICAgICAgICAg
bV9zd2l0Y2hSZW1hcFtpXSA9IGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fdW5saW5rZWRTd2l0
Y2hKdW1wVGFibGVzLnNpemUoKTsKICAgICAgICAgYnl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV91
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXMuYXBwZW5kKCZjb2RlQmxvY2stPnVubGlua2VkU3dpdGNo
SnVtcFRhYmxlKGkpKTsKICAgICB9CisKKyAgICBtX3N0cmluZ1N3aXRjaFJlbWFwLnJlc2l6ZShj
b2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzKCkpOworICAg
IGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5yZXNpemUo
Ynl0ZUNvZGVQYXJzZXItPm1fZ3JhcGgubV9zdHJpbmdTd2l0Y2hKdW1wVGFibGVzLnNpemUoKSAr
IGNvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZXMoKSk7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNvZGVCbG9jay0+bnVtYmVyT2ZVbmxpbmtlZFN0
cmluZ1N3aXRjaEp1bXBUYWJsZXMoKTsgKytpKSB7CisgICAgICAgIG1fc3RyaW5nU3dpdGNoUmVt
YXBbaV0gPSBieXRlQ29kZVBhcnNlci0+bV9ncmFwaC5tX3VubGlua2VkU3RyaW5nU3dpdGNoSnVt
cFRhYmxlcy5zaXplKCk7CisgICAgICAgIGJ5dGVDb2RlUGFyc2VyLT5tX2dyYXBoLm1fdW5saW5r
ZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGVzLmFwcGVuZCgmY29kZUJsb2NrLT51bmxpbmtlZFN0cmlu
Z1N3aXRjaEp1bXBUYWJsZShpKSk7CisgICAgfQogICAgIAogICAgIG1fYXJndW1lbnRQb3NpdGlv
bnMucmVzaXplKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzV2l0aEZpeHVwKTsKICAgICBmb3Ig
KGludCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzV2l0aEZpeHVwOyArK2kp
IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAppbmRl
eCBhY2EwMGRlNGY2NTFmOTRlYTQ4Yzk0YzY4NTk5ZWE1ZDI3ZWRiYzEyLi5mNWUyMmExMGE0ZDEy
NjVkYjVjZGM3MWIyMzFkMDZkNTE2MTdlZDZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0yOTYsOSArMjk2LDkgQEAgQ2FwYWJpbGl0eUxl
dmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRCBvcGNvZGVJRCwgQ29kZUJsb2NrKiBjb2RlQmxv
Y2ssIGNvbnN0IEkKICAgICBjYXNlIG9wX3B1dF9wcml2YXRlX25hbWU6CiAgICAgY2FzZSBvcF9z
ZXRfcHJpdmF0ZV9icmFuZDoKICAgICBjYXNlIG9wX2NoZWNrX3ByaXZhdGVfYnJhbmQ6CisgICAg
Y2FzZSBvcF9zd2l0Y2hfc3RyaW5nOgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGlu
ZTsKIAotICAgIGNhc2Ugb3Bfc3dpdGNoX3N0cmluZzogLy8gRG9uJ3QgaW5saW5lIGJlY2F1c2Ug
d2UgZG9uJ3Qgd2FudCB0byBjb3B5IHN0cmluZyB0YWJsZXMgaW4gdGhlIGNvbmN1cnJlbnQgSklU
LgogICAgIGNhc2Ugb3BfY2FsbF9ldmFsOgogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZTsKIApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCmluZGV4IDFhN2JkZDI5MDMyYzA5NmEwZDBj
N2QwNjQ5NTVmNmJkZTY1ZGU2MjUuLmQyYmQ4OTdkNGY4NDVjNjg2ODU4NmRhZjJiYmM3NDkxYTM4
YTE4ZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKQEAgLTEwNjYsNiArMTA2
Niw5IEBAIGNsYXNzIEdyYXBoIGZpbmFsIDogcHVibGljIHZpcnR1YWwgU2Nhbm5hYmxlIHsKICAg
ICBjb25zdCBVbmxpbmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRTd2l0Y2hKdW1wVGFibGUo
dW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuICptX3VubGlua2VkU3dpdGNoSnVtcFRhYmxl
c1tpbmRleF07IH0KICAgICBTaW1wbGVKdW1wVGFibGUmIHN3aXRjaEp1bXBUYWJsZSh1bnNpZ25l
ZCBpbmRleCkgeyByZXR1cm4gbV9zd2l0Y2hKdW1wVGFibGVzW2luZGV4XTsgfQogCisgICAgY29u
c3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxl
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiAqbV91bmxpbmtlZFN0cmluZ1N3aXRjaEp1
bXBUYWJsZXNbaW5kZXhdOyB9CisgICAgU3RyaW5nSnVtcFRhYmxlJiBzdHJpbmdTd2l0Y2hKdW1w
VGFibGUodW5zaWduZWQgaW5kZXgpIHsgcmV0dXJuIG1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlc1tp
bmRleF07IH0KKwogICAgIHZvaWQgYXBwZW5kQ2F0Y2hFbnRyeXBvaW50KEJ5dGVjb2RlSW5kZXgg
Ynl0ZWNvZGVJbmRleCwgTWFjcm9Bc3NlbWJsZXJDb2RlUHRyPEV4Y2VwdGlvbkhhbmRsZXJQdHJU
YWc+IG1hY2hpbmVDb2RlLCBWZWN0b3I8Rmx1c2hGb3JtYXQ+JiYgYXJndW1lbnRGb3JtYXRzKQog
ICAgIHsKICAgICAgICAgbV9jYXRjaEVudHJ5cG9pbnRzLmFwcGVuZChDYXRjaEVudHJ5cG9pbnRE
YXRhIHsgbWFjaGluZUNvZGUsIEZpeGVkVmVjdG9yPEZsdXNoRm9ybWF0PihXVEZNb3ZlKGFyZ3Vt
ZW50Rm9ybWF0cykpLCBieXRlY29kZUluZGV4IH0pOwpAQCAtMTA4MSw4ICsxMDg0LDExIEBAIGNs
YXNzIEdyYXBoIGZpbmFsIDogcHVibGljIHZpcnR1YWwgU2Nhbm5hYmxlIHsKICAgICBWZWN0b3I8
QmFzaWNCbG9jayosIDE+IG1fcm9vdHM7CiAgICAgVmVjdG9yPEVkZ2UsIDE2PiBtX3ZhckFyZ0No
aWxkcmVuOwogCi0gICAgVmVjdG9yPGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlKj4gbV91
bmxpbmtlZFN3aXRjaEp1bXBUYWJsZXM7IC8vIFVubGlua2VkU2ltcGxlSnVtcFRhYmxlIGlzIGtl
cHQgYnkgVW5saW5rZWRDb2RlQmxvY2tzIHJldGFpbmVkIGJ5IGJhc2VsaW5lIENvZGVCbG9ja3Mg
aGFuZGxlZCBieSBERkcgLyBGVEwuCisgICAgLy8gVW5saW5rZWRTaW1wbGVKdW1wVGFibGUvVW5s
aW5rZWRTdHJpbmdKdW1wVGFibGUgYXJlIGtlcHQgYnkgVW5saW5rZWRDb2RlQmxvY2tzIHJldGFp
bmVkIGJ5IGJhc2VsaW5lIENvZGVCbG9ja3MgaGFuZGxlZCBieSBERkcgLyBGVEwuCisgICAgVmVj
dG9yPGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlKj4gbV91bmxpbmtlZFN3aXRjaEp1bXBU
YWJsZXM7CiAgICAgVmVjdG9yPFNpbXBsZUp1bXBUYWJsZT4gbV9zd2l0Y2hKdW1wVGFibGVzOwor
ICAgIFZlY3Rvcjxjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSo+IG1fdW5saW5rZWRTdHJp
bmdTd2l0Y2hKdW1wVGFibGVzOworICAgIFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+IG1fc3RyaW5n
U3dpdGNoSnVtcFRhYmxlczsKIAogICAgIEhhc2hNYXA8RW5jb2RlZEpTVmFsdWUsIEZyb3plblZh
bHVlKiwgRW5jb2RlZEpTVmFsdWVIYXNoLCBFbmNvZGVkSlNWYWx1ZUhhc2hUcmFpdHM+IG1fZnJv
emVuVmFsdWVNYXA7CiAgICAgQmFnPEZyb3plblZhbHVlPiBtX2Zyb3plblZhbHVlczsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKaW5kZXggZjhhYzVmMGI4
ZjYxOGQyOTNiZWU1OWRiYTY0ZmM2MjQyMTUzN2M4Mi4uZjIyODI3ZDQ5YTljMTBkYjMwNzU2ZDRj
ZjA1NDAzNTBiYTMwZWFiNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRD
b21waWxlci5jcHAKQEAgLTE3Niw2MiArMTc2LDYyIEBAIHZvaWQgSklUQ29tcGlsZXI6Omxpbmso
TGlua0J1ZmZlciYgbGlua0J1ZmZlcikKICAgICAKICAgICBtX2dyYXBoLnJlZ2lzdGVyRnJvemVu
VmFsdWVzKCk7CiAKLSAgICBpZiAobV9jb2RlQmxvY2stPm51bWJlck9mVW5saW5rZWRTdHJpbmdT
d2l0Y2hKdW1wVGFibGVzKCkgfHwgIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHko
KSkgeworICAgIGlmICghbV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMuaXNFbXB0eSgp
IHx8ICFtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpIHsKICAgICAgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihtX2NvZGVCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgaWYg
KG1fY29kZUJsb2NrLT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKQot
ICAgICAgICAgICAgbV9jb2RlQmxvY2stPmVuc3VyZUpJVERhdGEobG9ja2VyKS5tX3N0cmluZ1N3
aXRjaEp1bXBUYWJsZXMgPSBGaXhlZFZlY3RvcjxTdHJpbmdKdW1wVGFibGU+KG1fY29kZUJsb2Nr
LT5udW1iZXJPZlVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlcygpKTsKKyAgICAgICAgaWYg
KCFtX2dyYXBoLm1fc3RyaW5nU3dpdGNoSnVtcFRhYmxlcy5pc0VtcHR5KCkpCisgICAgICAgICAg
ICBtX2NvZGVCbG9jay0+ZW5zdXJlSklURGF0YShsb2NrZXIpLm1fc3RyaW5nU3dpdGNoSnVtcFRh
YmxlcyA9IFdURk1vdmUobV9ncmFwaC5tX3N0cmluZ1N3aXRjaEp1bXBUYWJsZXMpOwogICAgICAg
ICBpZiAoIW1fZ3JhcGgubV9zd2l0Y2hKdW1wVGFibGVzLmlzRW1wdHkoKSkKICAgICAgICAgICAg
IG1fY29kZUJsb2NrLT5lbnN1cmVKSVREYXRhKGxvY2tlcikubV9zd2l0Y2hKdW1wVGFibGVzID0g
V1RGTW92ZShtX2dyYXBoLm1fc3dpdGNoSnVtcFRhYmxlcyk7CiAgICAgfQogCiAgICAgZm9yIChC
YWc8U3dpdGNoRGF0YT46Oml0ZXJhdG9yIGl0ZXIgPSBtX2dyYXBoLm1fc3dpdGNoRGF0YS5iZWdp
bigpOyAhIWl0ZXI7ICsraXRlcikgewogICAgICAgICBTd2l0Y2hEYXRhJiBkYXRhID0gKippdGVy
OwotICAgICAgICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKSB7Ci0gICAgICAgICAgICBBU1NF
UlQoZGF0YS5raW5kID09IFN3aXRjaFN0cmluZyB8fCBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRh
YmxlKGRhdGEuc3dpdGNoVGFibGVJbmRleCkuaXNFbXB0eSgpKTsKLSAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICBzd2l0Y2ggKGRhdGEua2luZCkgeworICAgICAgICBjYXNlIFN3aXRjaENo
YXI6CisgICAgICAgIGNhc2UgU3dpdGNoSW1tOiB7CisgICAgICAgICAgICBpZiAoIWRhdGEuZGlk
VXNlSnVtcFRhYmxlKSB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fY29kZUJsb2NrLT5zd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KS5pc0VtcHR5KCkpOworICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjb25zdCBVbmxp
bmtlZFNpbXBsZUp1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTd2l0
Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICAgICAgICAgIFNpbXBsZUp1
bXBUYWJsZSYgbGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+c3dpdGNoSnVtcFRhYmxlKGRhdGEu
c3dpdGNoVGFibGVJbmRleCk7CisgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQg
PSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRh
LmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOworICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQo
bGlua2VkVGFibGUubV9jdGlPZmZzZXRzLnNpemUoKSA9PSB1bmxpbmtlZFRhYmxlLm1fYnJhbmNo
T2Zmc2V0cy5zaXplKCkpOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gbGlua2VkVGFi
bGUubV9jdGlPZmZzZXRzLnNpemUoKTsgai0tOykKKyAgICAgICAgICAgICAgICBsaW5rZWRUYWJs
ZS5tX2N0aU9mZnNldHNbal0gPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQ7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGogPSBkYXRhLmNhc2VzLnNpemUoKTsgai0tOykgeworICAgICAgICAg
ICAgICAgIFN3aXRjaENhc2UmIG15Q2FzZSA9IGRhdGEuY2FzZXNbal07CisgICAgICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlPZmZzZXRzW215Q2FzZS52YWx1ZS5zd2l0Y2hMb29rdXBWYWx1
ZShkYXRhLmtpbmQpIC0gdW5saW5rZWRUYWJsZS5tX21pbl0gPQorICAgICAgICAgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fYmxvY2tIZWFkc1tteUNh
c2UudGFyZ2V0LmJsb2NrLT5pbmRleF0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGlmIChkYXRhLmtpbmQgPT0gU3dpdGNo
U3RyaW5nKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBSRUxFQVNF
X0FTU0VSVChkYXRhLmtpbmQgPT0gU3dpdGNoSW1tIHx8IGRhdGEua2luZCA9PSBTd2l0Y2hDaGFy
KTsKLSAgICAgICAgCi0gICAgICAgIGNvbnN0IFVubGlua2VkU2ltcGxlSnVtcFRhYmxlJiB1bmxp
bmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRh
YmxlSW5kZXgpOwotICAgICAgICBTaW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2Rl
QmxvY2stPnN3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxlSW5kZXgpOwotICAgICAgICBs
aW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQ
dHJUYWc+KG1fYmxvY2tIZWFkc1tkYXRhLmZhbGxUaHJvdWdoLmJsb2NrLT5pbmRleF0pOwotICAg
ICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMuc2l6ZSgpID09IHVu
bGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKSk7Ci0gICAgICAgIGZvciAodW5zaWdu
ZWQgaiA9IGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0cy5zaXplKCk7IGotLTspCi0gICAgICAgICAg
ICBsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHNbal0gPSBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQ7
Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IGRhdGEuY2FzZXMuc2l6ZSgpOyBqLS07KSB7Ci0g
ICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2VzW2pdOwotICAgICAgICAg
ICAgbGlua2VkVGFibGUubV9jdGlPZmZzZXRzW215Q2FzZS52YWx1ZS5zd2l0Y2hMb29rdXBWYWx1
ZShkYXRhLmtpbmQpIC0gdW5saW5rZWRUYWJsZS5tX21pbl0gPQotICAgICAgICAgICAgICAgIGxp
bmtCdWZmZXIubG9jYXRpb25PZjxKU1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW215Q2FzZS50
YXJnZXQuYmxvY2stPmluZGV4XSk7CisKKyAgICAgICAgY2FzZSBTd2l0Y2hTdHJpbmc6IHsKKyAg
ICAgICAgICAgIGlmICghZGF0YS5kaWRVc2VKdW1wVGFibGUpIHsKKyAgICAgICAgICAgICAgICBB
U1NFUlQobV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRjaFRhYmxl
SW5kZXgpLmlzRW1wdHkoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtl
ZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZShkYXRhLnN3aXRj
aFRhYmxlSW5kZXgpOworICAgICAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9
IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4
KTsKKyAgICAgICAgICAgIGF1dG8gY3RpRGVmYXVsdCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZjxK
U1N3aXRjaFB0clRhZz4obV9ibG9ja0hlYWRzW2RhdGEuZmFsbFRocm91Z2guYmxvY2stPmluZGV4
XSk7CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMu
c2l6ZSgpID09IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkgKyAxKTsKKyAgICAg
ICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHMpCisgICAg
ICAgICAgICAgICAgZW50cnkgPSBjdGlEZWZhdWx0OworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gZGF0YS5jYXNlcy5zaXplKCk7IGotLTspIHsKKyAgICAgICAgICAgICAgICBTd2l0Y2hD
YXNlJiBteUNhc2UgPSBkYXRhLmNhc2VzW2pdOworICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9
IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5maW5kKG15Q2FzZS52YWx1ZS5zdHJpbmdJbXBs
KCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGl0ZXIgIT0gdW5saW5rZWRUYWJs
ZS5tX29mZnNldFRhYmxlLmVuZCgpKTsKKyAgICAgICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0
aU9mZnNldHNbaXRlci0+dmFsdWUubV9pbmRleEluVGFibGVdID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbbXlDYXNlLnRhcmdldC5ibG9jay0+aW5k
ZXhdKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAg
fQotICAgIAotICAgIC8vIE5PVEU6IHdlIGNhbm5vdCBjbGVhciBzdHJpbmcgc3dpdGNoIHRhYmxl
cyBiZWNhdXNlICgxKSB3ZSdyZSBydW5uaW5nIGNvbmN1cnJlbnRseQotICAgIC8vIGFuZCB3ZSBj
YW5ub3QgZGVyZWYgU3RyaW5nSW1wbCdzIGFuZCAoMikgaXQgd291bGQgYmUgd2VpcmQgdG8gZGVy
ZWYgdGhvc2UKLSAgICAvLyBTdHJpbmdJbXBsJ3Mgc2luY2Ugd2UgcmVmZXIgdG8gdGhlbS4KLSAg
ICBmb3IgKEJhZzxTd2l0Y2hEYXRhPjo6aXRlcmF0b3Igc3dpdGNoRGF0YUl0ZXIgPSBtX2dyYXBo
Lm1fc3dpdGNoRGF0YS5iZWdpbigpOyAhIXN3aXRjaERhdGFJdGVyOyArK3N3aXRjaERhdGFJdGVy
KSB7Ci0gICAgICAgIFN3aXRjaERhdGEmIGRhdGEgPSAqKnN3aXRjaERhdGFJdGVyOwotICAgICAg
ICBpZiAoIWRhdGEuZGlkVXNlSnVtcFRhYmxlKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgIAotICAgICAgICBpZiAoZGF0YS5raW5kICE9IFN3aXRjaFN0cmluZykKLSAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFi
bGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1w
VGFibGUoZGF0YS5zd2l0Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgU3RyaW5nSnVtcFRhYmxlJiBs
aW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS5zd2l0
Y2hUYWJsZUluZGV4KTsKLSAgICAgICAgbGlua2VkVGFibGUubV9jdGlEZWZhdWx0ID0gbGlua0J1
ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbZGF0YS5mYWxsVGhy
b3VnaC5ibG9jay0+aW5kZXhdKTsKLSAgICAgICAgbGlua2VkVGFibGUubV9jdGlPZmZzZXRzID0g
Rml4ZWRWZWN0b3I8Q29kZUxvY2F0aW9uTGFiZWw8SlNTd2l0Y2hQdHJUYWc+Pih1bmxpbmtlZFRh
YmxlLm1fb2Zmc2V0VGFibGUuc2l6ZSgpKTsKLQotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDog
bGlua2VkVGFibGUubV9jdGlPZmZzZXRzKQotICAgICAgICAgICAgZW50cnkgPSBsaW5rZWRUYWJs
ZS5tX2N0aURlZmF1bHQ7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaiA9IGRhdGEuY2FzZXMuc2l6
ZSgpOyBqLS07KSB7Ci0gICAgICAgICAgICBTd2l0Y2hDYXNlJiBteUNhc2UgPSBkYXRhLmNhc2Vz
W2pdOwotICAgICAgICAgICAgYXV0byBpdGVyID0gdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxl
LmZpbmQobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChpdGVyICE9IHVubGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5lbmQoKSk7Ci0gICAgICAg
ICAgICBsaW5rZWRUYWJsZS5tX2N0aU9mZnNldHNbaXRlci0+dmFsdWUubV9pbmRleEluVGFibGVd
ID0gbGlua0J1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2Jsb2NrSGVhZHNbbXlD
YXNlLnRhcmdldC5ibG9jay0+aW5kZXhdKTsKKworICAgICAgICBjYXNlIFN3aXRjaENlbGw6Cisg
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCmluZGV4IDI2YmZiNzIxNDAzNmY2MDNkYTI1NTQ2ZDYwNDJjMzk0ODNlYWQy
ZWUuLjkyMzFmNDdjZTk3ZTgzNzY0ZGEzODAxOTI0OWVmOTcwMzFlYzNhYmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtMjcwNiw3ICsyNzA2LDcg
QEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkZpbmRTd2l0Y2hJbW1UYXJnZXRG
b3JEb3VibGUsIGNoYXIqLCAoVk0qIHZtUG8KICAgICByZXR1cm4gbGlua2VkVGFibGUubV9jdGlE
ZWZhdWx0LmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOwogfQogCi1KU0NfREVGSU5FX0pJVF9P
UEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0KiBn
bG9iYWxPYmplY3QsIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyogc3RyaW5nKSkKK0pTQ19E
RUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmcsIGNoYXIqLCAoSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgc2l6ZV90IHRhYmxlSW5kZXgsIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlKiB1bmxpbmtlZFRhYmxlLCBKU1N0cmluZyogc3RyaW5nKSkKIHsKICAg
ICBWTSYgdm0gPSBnbG9iYWxPYmplY3QtPnZtKCk7CiAgICAgQ2FsbEZyYW1lKiBjYWxsRnJhbWUg
PSBERUNMQVJFX0NBTExfRlJBTUUodm0pOwpAQCAtMjcxOCw4ICsyNzE4LDcgQEAgSlNDX0RFRklO
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZywgY2hhciosIChKU0dsb2JhbE9i
amVjdCogZ2xvYmFsT2IKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIG51bGxw
dHIpOwogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gY2FsbEZyYW1lLT5jb2RlQmxvY2soKTsK
ICAgICBjb25zdCBTdHJpbmdKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gY29kZUJsb2NrLT5zdHJp
bmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7Ci0gICAgY29uc3QgVW5saW5rZWRTdHJpbmdK
dW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBjb2RlQmxvY2stPnVubGlua2VkU3RyaW5nU3dpdGNo
SnVtcFRhYmxlKHRhYmxlSW5kZXgpOwotICAgIHJldHVybiBsaW5rZWRUYWJsZS5jdGlGb3JWYWx1
ZSh1bmxpbmtlZFRhYmxlLCBzdHJJbXBsKS5leGVjdXRhYmxlQWRkcmVzczxjaGFyKj4oKTsKKyAg
ICByZXR1cm4gbGlua2VkVGFibGUuY3RpRm9yVmFsdWUoKnVubGlua2VkVGFibGUsIHN0ckltcGwp
LmV4ZWN1dGFibGVBZGRyZXNzPGNoYXIqPigpOwogfQogCiBKU0NfREVGSU5FX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0ltcGxMZXNzLCB1aW50cHRyX3QsIChTdHJpbmdJbXBs
KiBhLCBTdHJpbmdJbXBsKiBiKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgKaW5kZXggOTQ5NTUxMjYyOWQzNDBhZDU1NmFjYzNmNWNhNzkxZGJkZjY3ODk5YS4uNTJj
ZGJlODI2NjE2ZWJjNGE5MmQwNThiMDAxZWMzOGVmYzJhM2Q0OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTM1LDYgKzM1LDcgQEAgbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIERhdGVJbnN0YW5jZTsKIGNsYXNzIEpTQmlnSW50Oworc3RydWN0IFVubGlu
a2VkU3RyaW5nSnVtcFRhYmxlOwogCiBuYW1lc3BhY2UgREZHIHsKIApAQCAtMjY5LDcgKzI3MCw3
IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uTWFrZVJvcGUzLCBKU1N0cmlu
ZyosIChKU0dsb2JhbE9iamVjdCosIEpTU3RyCiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9w
ZXJhdGlvblN0ckNhdDIsIEpTU3RyaW5nKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFs
dWUsIEVuY29kZWRKU1ZhbHVlKSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlv
blN0ckNhdDMsIEpTU3RyaW5nKiwgKEpTR2xvYmFsT2JqZWN0KiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkpOwogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlLCBjaGFyKiwgKFZNKiwgRW5j
b2RlZEpTVmFsdWUsIHNpemVfdCB0YWJsZUluZGV4LCBpbnQzMl90KSk7Ci1KU0NfREVDTEFSRV9K
SVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3aXRjaFN0cmluZywgY2hhciosIChKU0dsb2JhbE9iamVj
dCosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopKTsKK0pTQ19ERUNMQVJFX0pJVF9PUEVS
QVRJT04ob3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBjaGFyKiwgKEpTR2xvYmFsT2JqZWN0Kiwgc2l6
ZV90IHRhYmxlSW5kZXgsIGNvbnN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxlKiwgSlNTdHJpbmcq
KSk7CiBKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdJbXBs
TGVzcywgdWludHB0cl90LCAoU3RyaW5nSW1wbCosIFN0cmluZ0ltcGwqKSk7CiBKU0NfREVDTEFS
RV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbkNvbXBhcmVTdHJpbmdJbXBsTGVzc0VxLCB1aW50cHRy
X3QsIChTdHJpbmdJbXBsKiwgU3RyaW5nSW1wbCopKTsKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uQ29tcGFyZVN0cmluZ0ltcGxHcmVhdGVyLCB1aW50cHRyX3QsIChTdHJpbmdJ
bXBsKiwgU3RyaW5nSW1wbCopKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggZGFjODI1NGU2N2JhN2E1ODA2N2RiNzBmMjcxNDRlYjE3
ZjU1YjIyOC4uNzk5MGY4NjAyN2I4M2Q1MzRiMzY4YzQ2NjY5YWU5OWVkNjllZGNmMSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTEx
NzgyLDcgKzExNzgyLDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRCaW5hcnlTd2l0Y2hT
dHJpbmdSZWN1cnNlKAogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdFN3aXRjaFN0cmluZ09uU3Ry
aW5nKE5vZGUqIG5vZGUsIFN3aXRjaERhdGEqIGRhdGEsIEdQUlJlZyBzdHJpbmcpCiB7CiAgICAg
ZGF0YS0+ZGlkVXNlSnVtcFRhYmxlID0gdHJ1ZTsKLSAgICAKKworICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9ncmFwaC51bmxpbmtlZFN0cmluZ1N3
aXRjaEp1bXBUYWJsZShkYXRhLT5zd2l0Y2hUYWJsZUluZGV4KTsKKyAgICBTdHJpbmdKdW1wVGFi
bGUmIGxpbmtlZFRhYmxlID0gbV9qaXQuZ3JhcGgoKS5zdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0
YS0+c3dpdGNoVGFibGVJbmRleCk7CisgICAgbGlua2VkVGFibGUuZW5zdXJlQ1RJVGFibGUodW5s
aW5rZWRUYWJsZSk7CisKICAgICBib29sIGNhbkRvQmluYXJ5U3dpdGNoID0gdHJ1ZTsKICAgICB1
bnNpZ25lZCB0b3RhbExlbmd0aCA9IDA7CiAgICAgCkBAIC0xMTgwMSw4ICsxMTgwNSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyhOb2RlKiBub2RlLCBT
d2l0Y2hEYXRhKiBkYXRhLCBHUFJSCiAKICAgICBpZiAoIWNhbkRvQmluYXJ5U3dpdGNoIHx8IHRv
dGFsTGVuZ3RoID4gT3B0aW9uczo6bWF4aW11bUJpbmFyeVN0cmluZ1N3aXRjaFRvdGFsTGVuZ3Ro
KCkpIHsKICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICAgICAgY2FsbE9wZXJhdGlvbigK
LSAgICAgICAgICAgIG9wZXJhdGlvblN3aXRjaFN0cmluZywgc3RyaW5nLCBUcnVzdGVkSW1tUHRy
Ojp3ZWFrUG9pbnRlcihtX2dyYXBoLCBtX2dyYXBoLmdsb2JhbE9iamVjdEZvcihub2RlLT5vcmln
aW4uc2VtYW50aWMpKSwgc3RhdGljX2Nhc3Q8c2l6ZV90PihkYXRhLT5zd2l0Y2hUYWJsZUluZGV4
KSwgc3RyaW5nKTsKKyAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmcs
IHN0cmluZywgVHJ1c3RlZEltbVB0cjo6d2Vha1BvaW50ZXIobV9ncmFwaCwgbV9ncmFwaC5nbG9i
YWxPYmplY3RGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSksIHN0YXRpY19jYXN0PHNpemVfdD4o
ZGF0YS0+c3dpdGNoVGFibGVJbmRleCksICZ1bmxpbmtlZFRhYmxlLCBzdHJpbmcpOwogICAgICAg
ICBtX2ppdC5leGNlcHRpb25DaGVjaygpOwogICAgICAgICBtX2ppdC5mYXJKdW1wKHN0cmluZywg
SlNTd2l0Y2hQdHJUYWcpOwogICAgICAgICByZXR1cm47CkBAIC0xMTgzOSw3ICsxMTg0Miw3IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRTd2l0Y2hTdHJpbmdPblN0cmluZyhOb2RlKiBub2Rl
LCBTd2l0Y2hEYXRhKiBkYXRhLCBHUFJSCiAgICAgCiAgICAgc2xvd0Nhc2VzLmxpbmsoJm1faml0
KTsKICAgICBzaWxlbnRTcGlsbEFsbFJlZ2lzdGVycyhzdHJpbmcpOwotICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcsIFRydXN0ZWRJbW1QdHI6OndlYWtQb2lu
dGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU3dpdGNoU3RyaW5nLCBzdHJpbmcsIFRydXN0
ZWRJbW1QdHI6OndlYWtQb2ludGVyKG1fZ3JhcGgsIG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYykpLCBzdGF0aWNfY2FzdDxzaXplX3Q+KGRhdGEtPnN3aXRjaFRh
YmxlSW5kZXgpLCAmdW5saW5rZWRUYWJsZSwgc3RyaW5nKTsKICAgICBzaWxlbnRGaWxsQWxsUmVn
aXN0ZXJzKCk7CiAgICAgbV9qaXQuZXhjZXB0aW9uQ2hlY2soKTsKICAgICBtX2ppdC5mYXJKdW1w
KHN0cmluZywgSlNTd2l0Y2hQdHJUYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCmluZGV4IGIyNTU2MzcwN2VkMzEzYjY5ZTU1ZDcwOWE1NmQxYTJi
NTUzOTJmYjEuLjZkOGFlOWQ0MDZkN2RmZTNmYTZmOGFmZDU0N2I0MWExMjdkODM3NjMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAKQEAgLTE2NzQy
LDEyICsxNjc0MiwxMiBAQCBjbGFzcyBMb3dlckRGR1RvQjMgewogICAgICAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ0MzY5CiAKICAgICAgICAgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fb3JpZ2lu
LnNlbWFudGljKTsKKworICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5s
aW5rZWRUYWJsZSA9IG1fZ3JhcGgudW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUoZGF0YS0+
c3dpdGNoVGFibGVJbmRleCk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgYnJhbmNoT2Zmc2V0
ID0gdm1DYWxsKAotICAgICAgICAgICAgSW50MzIsIG9wZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdl
dEJyYW5jaE9mZnNldCwKLSAgICAgICAgICAgIHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIG1f
b3V0LmNvbnN0SW50UHRyKGRhdGEtPnN3aXRjaFRhYmxlSW5kZXgpLCBzdHJpbmcpOwotICAgICAg
ICAKLSAgICAgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUmIHRhYmxlID0gY29kZUJs
b2NrKCktPnVubGlua2VkU3RyaW5nU3dpdGNoSnVtcFRhYmxlKGRhdGEtPnN3aXRjaFRhYmxlSW5k
ZXgpOworICAgICAgICAgICAgSW50MzIsIG9wZXJhdGlvblN3aXRjaFN0cmluZ0FuZEdldEluZGV4
LAorICAgICAgICAgICAgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgbV9vdXQuY29uc3RJbnRQ
dHIoJnVubGlua2VkVGFibGUpLCBzdHJpbmcpOwogICAgICAgICAKICAgICAgICAgVmVjdG9yPFN3
aXRjaENhc2U+IGNhc2VzOwogICAgICAgICAvLyBUaGVzZSBtYXkgYmUgbmVnYXRpdmUsIG9yIHpl
cm8sIG9yIHByb2JhYmx5IG90aGVyIHN0dWZmLCB0b28uIFdlIGRvbid0IHdhbnQgdG8gbWVzcyB3
aXRoIEhhc2hTZXQncyBjb3JuZXIgY2FzZXMgYW5kIHdlIGRvbid0IHJlYWxseSBjYXJlIGFib3V0
IHRocm91Z2hwdXQgaGVyZS4KQEAgLTE2Nzg1LDE0ICsxNjc4NSwxNSBAQCBjbGFzcyBMb3dlckRG
R1RvQjMgewogICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NDYzNQogICAgICAgICAgICAgCiAgICAgICAgICAgICBERkc6OlN3aXRjaENhc2Ug
bXlDYXNlID0gZGF0YS0+Y2FzZXNbaV07Ci0gICAgICAgICAgICBhdXRvIGl0ZXIgPSB0YWJsZS5t
X29mZnNldFRhYmxlLmZpbmQobXlDYXNlLnZhbHVlLnN0cmluZ0ltcGwoKSk7Ci0gICAgICAgICAg
ICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgaXRlciAhPSB0YWJsZS5tX29mZnNldFRhYmxl
LmVuZCgpKTsKKyAgICAgICAgICAgIGF1dG8gaXRlciA9IHVubGlua2VkVGFibGUubV9vZmZzZXRU
YWJsZS5maW5kKG15Q2FzZS52YWx1ZS5zdHJpbmdJbXBsKCkpOworICAgICAgICAgICAgREZHX0FT
U0VSVChtX2dyYXBoLCBtX25vZGUsIGl0ZXIgIT0gdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxl
LmVuZCgpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKCFhbHJlYWR5SGFuZGxlZC5p
bnNlcnQoaXRlci0+dmFsdWUubV9icmFuY2hPZmZzZXQpLnNlY29uZCkKKyAgICAgICAgICAgIC8v
IFVzZSBtX2luZGV4SW5UYWJsZSBpbnN0ZWFkIG9mIG1fYnJhbmNoT2Zmc2V0IHRvIG1ha2UgU3dp
dGNoIHRhYmxlIGRlbnNlLgorICAgICAgICAgICAgaWYgKCFhbHJlYWR5SGFuZGxlZC5pbnNlcnQo
aXRlci0+dmFsdWUubV9pbmRleEluVGFibGUpLnNlY29uZCkKICAgICAgICAgICAgICAgICBjb250
aW51ZTsKIAogICAgICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UoCi0gICAgICAgICAg
ICAgICAgbV9vdXQuY29uc3RJbnQzMihpdGVyLT52YWx1ZS5tX2JyYW5jaE9mZnNldCksCisgICAg
ICAgICAgICAgICAgbV9vdXQuY29uc3RJbnQzMihpdGVyLT52YWx1ZS5tX2luZGV4SW5UYWJsZSks
CiAgICAgICAgICAgICAgICAgbG93QmxvY2sobXlDYXNlLnRhcmdldC5ibG9jayksIFdlaWdodCht
eUNhc2UudGFyZ2V0LmNvdW50KSkpOwogICAgICAgICB9CiAgICAgICAgIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKaW5kZXggYTU1MTZjOTA0ZTU4YmY5YWM2
OGM5ODljYTZmNjYwMWU5MTk2NmFjZC4uMjU4MDRhMTUyOTQwNzA4OTMyMTQ3NDRjMjVkMjZlOWE1
ZDdlNDcxYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRp
b25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3Bw
CkBAIC02OTgsNyArNjk4LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvbk1h
dGVyaWFsaXplT2JqZWN0SW5PU1IsIEpTQ2VsbCosIChKU0dsb2JhbE9iamUKICAgICB9CiB9CiAK
LUpTQ19ERUZJTkVfSklUX09QRVJBVElPTihvcGVyYXRpb25Td2l0Y2hTdHJpbmdBbmRHZXRCcmFu
Y2hPZmZzZXQsIGludDMyX3QsIChKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBzaXplX3Qg
dGFibGVJbmRleCwgSlNTdHJpbmcqIHN0cmluZykpCitKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nQW5kR2V0SW5kZXgsIHVuc2lnbmVkLCAoSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCwgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUqIHVubGlua2Vk
VGFibGUsIEpTU3RyaW5nKiBzdHJpbmcpKQogewogICAgIFZNJiB2bSA9IGdsb2JhbE9iamVjdC0+
dm0oKTsKICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZSA9IERFQ0xBUkVfQ0FMTF9GUkFNRSh2bSk7
CkBAIC03MDksNyArNzA5LDcgQEAgSlNDX0RFRklORV9KSVRfT1BFUkFUSU9OKG9wZXJhdGlvblN3
aXRjaFN0cmluZ0FuZEdldEJyYW5jaE9mZnNldCwgaW50MzJfdCwgKEpTR2wKIAogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgMCk7CiAKLSAgICByZXR1cm4gY2FsbEZyYW1lLT5j
b2RlQmxvY2soKS0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkub2Zm
c2V0Rm9yVmFsdWUoc3RySW1wbCwgc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkp
OworICAgIHJldHVybiB1bmxpbmtlZFRhYmxlLT5pbmRleEZvclZhbHVlKHN0ckltcGwsIHN0ZDo6
bnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSk7CiB9CiAKIEpTQ19ERUZJTkVfSklUX09Q
RVJBVElPTihvcGVyYXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUsIGludDMyX3QsIChKU0ds
b2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0NlbGwqIG9iamVjdCkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCmluZGV4IDVjZjgzNzg5YzcyNGQ2NTIwZGU0YTgx
ZTRmM2I1Zjc3MDcxZTE1ZTkuLjViYjhkMzBiN2IxMDFkNDA2MmI2ZjY2ZTkyYzBlM2EwZjhkM2Ex
ZTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCkBAIC0zMCw3
ICszMCwxMSBAQAogI2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIgogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CituYW1lc3BhY2UgSlNDIHsKKworc3RydWN0IFVubGlua2VkU3RyaW5nSnVtcFRhYmxl
OworCituYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgTGF6eVNsb3dQYXRoOwogCkBAIC00MCw3ICs0
NCw3IEBAIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJ
bk9TUiwgdm9pZCwgKEpTR2xvYmFsT2JqZWN0KiwKIAogSlNDX0RFQ0xBUkVfSklUX09QRVJBVElP
TihvcGVyYXRpb25Db21waWxlRlRMTGF6eVNsb3dQYXRoLCB2b2lkKiwgKENhbGxGcmFtZSosIHVu
c2lnbmVkKSk7CiAKLUpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uU3dpdGNoU3Ry
aW5nQW5kR2V0QnJhbmNoT2Zmc2V0LCBpbnQzMl90LCAoSlNHbG9iYWxPYmplY3QqLCBzaXplX3Qg
dGFibGVJbmRleCwgSlNTdHJpbmcqKSk7CitKU0NfREVDTEFSRV9KSVRfT1BFUkFUSU9OKG9wZXJh
dGlvblN3aXRjaFN0cmluZ0FuZEdldEluZGV4LCB1bnNpZ25lZCwgKEpTR2xvYmFsT2JqZWN0Kiwg
Y29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUqLCBKU1N0cmluZyopKTsKIEpTQ19ERUNMQVJF
X0pJVF9PUEVSQVRJT04ob3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNUeXBlb2ZUeXBlLCBpbnQzMl90
LCAoSlNHbG9iYWxPYmplY3QqLCBKU0NlbGwqKSk7CiAKIEpTQ19ERUNMQVJFX0pJVF9PUEVSQVRJ
T04ob3BlcmF0aW9uUmVwb3J0Qm91bmRzQ2hlY2tFbGltaW5hdGlvbkVycm9yQW5kQ3Jhc2gsIHZv
aWQsIChpbnRwdHJfdCBjb2RlQmxvY2tBc0ludFB0ciwgaW50MzJfdCwgaW50MzJfdCwgaW50MzJf
dCwgaW50MzJfdCwgaW50MzJfdCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCmluZGV4IGI2
NmExM2YyOTJmY2FmNTc0NmYxOTg5MmEyODQ0ZjA5MzY3OGZhYWUuLjY2YWQ4NGIwZDYyMGUxNjE0
MDk4MDM2ZTJhNDJmZDRiYWUwODEzZWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKQEAg
LTg2OCwzNiArODY4LDM2IEBAIENvbXBpbGF0aW9uUmVzdWx0IEpJVDo6bGluaygpCiAgICAgLy8g
VHJhbnNsYXRlIHZQQyBvZmZzZXRzIGludG8gYWRkcmVzc2VzIGluIEpJVCBnZW5lcmF0ZWQgY29k
ZSwgZm9yIHN3aXRjaCB0YWJsZXMuCiAgICAgZm9yIChhdXRvJiByZWNvcmQgOiBtX3N3aXRjaGVz
KSB7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0ID0gcmVjb3JkLmJ5dGVjb2RlSW5k
ZXgub2Zmc2V0KCk7CisgICAgICAgIHVuc2lnbmVkIHRhYmxlSW5kZXggPSByZWNvcmQudGFibGVJ
bmRleDsKIAotICAgICAgICBpZiAocmVjb3JkLnR5cGUgIT0gU3dpdGNoUmVjb3JkOjpTdHJpbmcp
IHsKLSAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZSB8fCByZWNvcmQudHlwZSA9PSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3Rlcik7IAotCi0gICAg
ICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gcmVjb3JkLnRhYmxlSW5kZXg7CisgICAgICAg
IHN3aXRjaCAocmVjb3JkLnR5cGUpIHsKKyAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkltbWVk
aWF0ZToKKyAgICAgICAgY2FzZSBTd2l0Y2hSZWNvcmQ6OkNoYXJhY3RlcjogewogICAgICAgICAg
ICAgY29uc3QgVW5saW5rZWRTaW1wbGVKdW1wVGFibGUmIHVubGlua2VkVGFibGUgPSBtX2NvZGVC
bG9jay0+dW5saW5rZWRTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgICAgICAgICBT
aW1wbGVKdW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKICAgICAgICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdCA9IHBh
dGNoQnVmZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zm
c2V0ICsgcmVjb3JkLmRlZmF1bHRPZmZzZXRdKTsKLQogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBqID0gMDsgaiA8IHVubGlua2VkVGFibGUubV9icmFuY2hPZmZzZXRzLnNpemUoKTsgKytqKSB7
CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gdW5saW5rZWRUYWJsZS5tX2JyYW5j
aE9mZnNldHNbal07CiAgICAgICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlPZmZzZXRzW2pd
ID0gb2Zmc2V0CiAgICAgICAgICAgICAgICAgICAgID8gcGF0Y2hCdWZmZXIubG9jYXRpb25PZjxK
U1N3aXRjaFB0clRhZz4obV9sYWJlbHNbYnl0ZWNvZGVPZmZzZXQgKyBvZmZzZXRdKQogICAgICAg
ICAgICAgICAgICAgICA6IGxpbmtlZFRhYmxlLm1fY3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIEFTU0VSVChyZWNvcmQudHlwZSA9PSBTd2l0
Y2hSZWNvcmQ6OlN0cmluZyk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogCi0gICAg
ICAgICAgICB1bnNpZ25lZCB0YWJsZUluZGV4ID0gcmVjb3JkLnRhYmxlSW5kZXg7CisgICAgICAg
IGNhc2UgU3dpdGNoUmVjb3JkOjpTdHJpbmc6IHsKICAgICAgICAgICAgIGNvbnN0IFVubGlua2Vk
U3RyaW5nSnVtcFRhYmxlJiB1bmxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnVubGlua2VkU3Ry
aW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwogICAgICAgICAgICAgU3RyaW5nSnVtcFRh
YmxlJiBsaW5rZWRUYWJsZSA9IG1fY29kZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7Ci0gICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQgPSBwYXRjaEJ1
ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVsc1tieXRlY29kZU9mZnNldCAr
IHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7Ci0gICAgICAgICAgICBsaW5rZWRUYWJsZS5tX2N0aU9m
ZnNldHMgPSBGaXhlZFZlY3RvcjxDb2RlTG9jYXRpb25MYWJlbDxKU1N3aXRjaFB0clRhZz4+KHVu
bGlua2VkVGFibGUubV9vZmZzZXRUYWJsZS5zaXplKCkpOwotCisgICAgICAgICAgICBhdXRvIGN0
aURlZmF1bHQgPSBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mPEpTU3dpdGNoUHRyVGFnPihtX2xhYmVs
c1tieXRlY29kZU9mZnNldCArIHJlY29yZC5kZWZhdWx0T2Zmc2V0XSk7CiAgICAgICAgICAgICBm
b3IgKGF1dG8mIGxvY2F0aW9uIDogdW5saW5rZWRUYWJsZS5tX29mZnNldFRhYmxlLnZhbHVlcygp
KSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgb2Zmc2V0ID0gbG9jYXRpb24ubV9icmFuY2hP
ZmZzZXQ7CiAgICAgICAgICAgICAgICAgbGlua2VkVGFibGUubV9jdGlPZmZzZXRzW2xvY2F0aW9u
Lm1faW5kZXhJblRhYmxlXSA9IG9mZnNldAogICAgICAgICAgICAgICAgICAgICA/IHBhdGNoQnVm
ZmVyLmxvY2F0aW9uT2Y8SlNTd2l0Y2hQdHJUYWc+KG1fbGFiZWxzW2J5dGVjb2RlT2Zmc2V0ICsg
b2Zmc2V0XSkKLSAgICAgICAgICAgICAgICAgICAgOiBsaW5rZWRUYWJsZS5tX2N0aURlZmF1bHQ7
CisgICAgICAgICAgICAgICAgICAgIDogY3RpRGVmYXVsdDsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIGxpbmtlZFRhYmxlLm1fY3RpT2Zmc2V0c1t1bmxpbmtlZFRhYmxlLm1fb2Zmc2V0VGFi
bGUuc2l6ZSgpXSA9IGN0aURlZmF1bHQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQog
ICAgICAgICB9CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAppbmRleCA3MTk4MTBkNWQ4YjFjMzIwN2VlMjAwM2VlYTVkOTJiMzdhNGU0YWUxLi4wZDM2OTE0
NjRkYmU1NGI2ZGE5OTI2YmQ0OWY0ZmU0YzE1MjRiY2M3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTk0MCw3ICs5NDAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIFZpcnR1YWxSZWdpc3RlciBzY3J1dGluZWUgPSBieXRlY29kZS5tX3NjcnV0aW5lZTsKIAog
ICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0
aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCisgICAgY29uc3QgVW5saW5rZWRTdHJpbmdKdW1wVGFibGUm
IHVubGlua2VkVGFibGUgPSBtX2NvZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFi
bGUodGFibGVJbmRleCk7CisgICAgU3RyaW5nSnVtcFRhYmxlJiBsaW5rZWRUYWJsZSA9IG1fY29k
ZUJsb2NrLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAgbV9zd2l0Y2hl
cy5hcHBlbmQoU3dpdGNoUmVjb3JkKHRhYmxlSW5kZXgsIG1fYnl0ZWNvZGVJbmRleCwgZGVmYXVs
dE9mZnNldCwgU3dpdGNoUmVjb3JkOjpTdHJpbmcpKTsKKyAgICBsaW5rZWRUYWJsZS5lbnN1cmVD
VElUYWJsZSh1bmxpbmtlZFRhYmxlKTsKIAogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2Ny
dXRpbmVlLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Td2l0Y2hTdHJpbmdX
aXRoVW5rbm93bktleVR5cGUsIFRydXN0ZWRJbW1QdHIobV9jb2RlQmxvY2stPmdsb2JhbE9iamVj
dCgpKSwgcmVnVDAsIHRhYmxlSW5kZXgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGFiZjE3YjNmYTMwNTVmY2JkZjY5MWM0MmQ2NzgyNTJl
N2M0MzY5ZDUuLjJmNWU5NmFlM2VkNzEwYzAwMmE1NjU2YjE3Y2Y3ZTViM2FiZmQ4ZDkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTEwMzAs
NyArMTAzMCwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNjcnV0aW5l
ZSA9IGJ5dGVjb2RlLm1fc2NydXRpbmVlOwogCiAgICAgLy8gY3JlYXRlIGp1bXAgdGFibGUgZm9y
IHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRlbWVudC4KKyAgICBj
b25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IG1fY29kZUJsb2Nr
LT51bmxpbmtlZFN0cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKKyAgICBTdHJpbmdK
dW1wVGFibGUmIGxpbmtlZFRhYmxlID0gbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKICAgICBtX3N3aXRjaGVzLmFwcGVuZChTd2l0Y2hSZWNvcmQodGFibGVJ
bmRleCwgbV9ieXRlY29kZUluZGV4LCBkZWZhdWx0T2Zmc2V0LCBTd2l0Y2hSZWNvcmQ6OlN0cmlu
ZykpOworICAgIGxpbmtlZFRhYmxlLmVuc3VyZUNUSVRhYmxlKHVubGlua2VkVGFibGUpOwogCiAg
ICAgZW1pdExvYWQoc2NydXRpbmVlLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBtX2NvZGVCbG9jay0+Z2xv
YmFsT2JqZWN0KCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIHRhYmxlSW5kZXgpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggYmFkYmYyM2Ez
ZTJiZmY0YTE2N2Q5YTk2ZjhiYjFjNTkwMTdmMDBjNy4uZmMzOTkxNGExZDU0MjQ1NjJlNzkxOWY1
MWVjZGIxNTMzODYyZjA0NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRPcGVyYXRpb25zLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCkBAIC0yODU5LDcgKzI4NTksNyBAQCBKU0NfREVGSU5FX0pJVF9PUEVSQVRJT04o
b3BlcmF0aW9uU3dpdGNoU3RyaW5nV2l0aFVua25vd25LZXlUeXBlLCBjaGFyKiwgKEpTR2xvYgog
ICAgICAgICBjb25zdCBVbmxpbmtlZFN0cmluZ0p1bXBUYWJsZSYgdW5saW5rZWRUYWJsZSA9IGNv
ZGVCbG9jay0+dW5saW5rZWRTdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CiAgICAg
ICAgIHJlc3VsdCA9IGxpbmtlZFRhYmxlLmN0aUZvclZhbHVlKHVubGlua2VkVGFibGUsIHZhbHVl
KS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgIH0gZWxzZQotICAgICAgICByZXN1bHQgPSBsaW5r
ZWRUYWJsZS5tX2N0aURlZmF1bHQuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgcmVzdWx0
ID0gbGlua2VkVGFibGUuY3RpRGVmYXVsdCgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAKICAgICBh
c3NlcnRJc1RhZ2dlZFdpdGg8SlNTd2l0Y2hQdHJUYWc+KHJlc3VsdCk7CiAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHJlc3VsdCk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5n
ZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4IDIxYmVjNWY5ZjYyNjhmMDA1ZTkxZDdiMDEy
OTRlZGY0N2FkYjQ3YmQuLjBiNDk2Y2MwM2VmMTFhMDVjMzIxY2VkMTBhN2Y1NjdhN2RkYzY5MzIg
MTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9nCisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTggQEAKKzIwMjEtMDQtMjEgIFl1c3VrZSBTdXp1a2kgIDx5c3V6dWtpQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBERkcgLyBGVEwgc2hvdWxkIGlubGluZSBzd2l0Y2hfc3Ry
aW5nCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjQ1
NzgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1p
Y3JvYmVuY2htYXJrcy9zd2l0Y2gtaW5saW5pbmcuanM6IEFkZGVkLgorICAgICAgICAoaW5uZXIp
OgorICAgICAgICAob3V0ZXIpOgorICAgICAgICAqIHN0cmVzcy9zd2l0Y2gtaW5saW5pbmctbmVz
dGVkLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKGlubmVyKToKKyAg
ICAgICAgKG91dGVyKToKKwogMjAyMS0wNC0yMSAgQ2FpbyBMaW1hICA8dGljYWlvbGltYUBnbWFp
bC5jb20+CiAKICAgICAgICAgW0pTQ10gVW5za2lwIHNvbWUgdGVzdHMgZm9yIEFSTXY3IGFuZCBN
SVBTCmRpZmYgLS1naXQgYS9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9zd2l0Y2gtaW5saW5pbmcu
anMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9zd2l0Y2gtaW5saW5pbmcuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjFjOThiZjE3MDk1MGMzMmZhMmQyZDJiMzU1Mjg2MGJlYjZlYTUxMAotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvbWljcm9iZW5jaG1hcmtzL3N3aXRjaC1pbmxpbmluZy5qcwpAQCAtMCww
ICsxLDMxIEBACitmdW5jdGlvbiBpbm5lcih2YWx1ZSkKK3sKKyAgICBzd2l0Y2ggKHZhbHVlKSB7
CisgICAgY2FzZSAiRXhwcmVzc2lvblN0YXRlbWVudCI6CisgICAgICAgIHJldHVybiAwOworICAg
IGNhc2UgIkJyZWFrU3RhdGVtZW50IjoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSAiVGhy
b3dTdGF0ZW1lbnQiOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlICJJZlN0YXRlbWVudCI6
CisgICAgICAgIHJldHVybiAzOworICAgIGNhc2UgIldoaWxlU3RhdGVtZW50IjoKKyAgICAgICAg
cmV0dXJuIDQ7CisgICAgY2FzZSAiRG9XaGlsZVN0YXRlbWVudCI6CisgICAgICAgIHJldHVybiA1
OworICAgIGNhc2UgIkZvclN0YXRlbWVudCI6CisgICAgICAgIHJldHVybiA2OworICAgIH0KK30K
KworZnVuY3Rpb24gb3V0ZXIodmFsdWUpCit7CisgICAgcmV0dXJuIGlubmVyKHZhbHVlKTsKK30K
K25vSW5saW5lKG91dGVyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTY7ICsraSkgeworICAg
IG91dGVyKCJEb1doaWxlIiArICJTdGF0ZW1lbnQiKTsKKyAgICBvdXRlcigiRm9yIiArICJTdGF0
ZW1lbnQiKTsKKyAgICBvdXRlcigiIik7Cit9CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9z
d2l0Y2gtaW5saW5pbmctbmVzdGVkLmpzIGIvSlNUZXN0cy9zdHJlc3Mvc3dpdGNoLWlubGluaW5n
LW5lc3RlZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWQxNTg3MGU2NjJhZjgxYWI2ZjY3NDFlNjM1YjUyMzZm
ODg5NGFkCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvc3dpdGNoLWlubGluaW5n
LW5lc3RlZC5qcwpAQCAtMCwwICsxLDU2IEBACisKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwg
ZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCisKK2Z1bmN0aW9uIGlubmVy
KHZhbHVlKSB7CisgICAgc3dpdGNoICh2YWx1ZSArICJTdGF0ZW1lbnQiKSB7CisgICAgY2FzZSAi
RXhwcmVzc2lvblN0YXRlbWVudCI6CisgICAgICAgIHJldHVybiAwOworICAgIGNhc2UgIkJyZWFr
U3RhdGVtZW50IjoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSAiVGhyb3dTdGF0ZW1lbnQi
OgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlICJJZlN0YXRlbWVudCI6CisgICAgICAgIHJl
dHVybiAzOworICAgIGNhc2UgIldoaWxlU3RhdGVtZW50IjoKKyAgICAgICAgcmV0dXJuIDQ7Cisg
ICAgY2FzZSAiRG9XaGlsZVN0YXRlbWVudCI6CisgICAgICAgIHJldHVybiA1OworICAgIGNhc2Ug
IkZvclN0YXRlbWVudCI6CisgICAgICAgIHJldHVybiA2OworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiA3OworICAgIH0KK30KKworZnVuY3Rpb24gb3V0ZXIodmFsdWUpIHsKKyAgICBzd2l0
Y2ggKHZhbHVlKSB7CisgICAgY2FzZSAiRXhwcmVzc2lvbiI6CisgICAgICAgIHJldHVybiAwICsg
aW5uZXIodmFsdWUpOworICAgIGNhc2UgIkJyZWFrIjoKKyAgICAgICAgcmV0dXJuIDEgKyBpbm5l
cih2YWx1ZSk7CisgICAgY2FzZSAiVGhyb3ciOgorICAgICAgICByZXR1cm4gMiArIGlubmVyKHZh
bHVlKTsKKyAgICBjYXNlICJJZiI6CisgICAgICAgIHJldHVybiAzICsgaW5uZXIodmFsdWUpOwor
ICAgIGNhc2UgIldoaWxlIjoKKyAgICAgICAgcmV0dXJuIDQgKyBpbm5lcih2YWx1ZSk7CisgICAg
Y2FzZSAiRG9XaGlsZSI6CisgICAgICAgIHJldHVybiA1ICsgaW5uZXIodmFsdWUpOworICAgIGNh
c2UgIkZvciI6CisgICAgICAgIHJldHVybiA2ICsgaW5uZXIodmFsdWUpOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiA3ICsgaW5uZXIodmFsdWUpOworICAgIH0KK30KK25vSW5saW5lKG91
dGVyKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAzZTU7ICsraSkgeworICAgIHNob3VsZEJlKG91
dGVyKCJEbyIgKyAiV2hpbGUiKSwgMTApOworICAgIHNob3VsZEJlKG91dGVyKCJGIiArICJvciIp
LCAxMik7CisgICAgc2hvdWxkQmUob3V0ZXIoIiIpLCAxNCk7CisgICAgc2hvdWxkQmUob3V0ZXIo
IlRFU1QiKSwgMTQpOworfQo=
</data>
<flag name="review"
          id="447153"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>