<?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>176345</bug_id>
          
          <creation_ts>2017-09-04 20:14:11 -0700</creation_ts>
          <short_desc>[DFG] PutByVal with Array::Generic is too generic</short_desc>
          <delta_ts>2017-09-27 12:37:30 -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>buildbot</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1345309</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-04 20:14:11 -0700</bug_when>
    <thetext>Worth looking into it.
https://arewefastyet.com/#machine=29&amp;view=single&amp;suite=six-speed&amp;subtest=object-assign-es5</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346769</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-08 04:43:25 -0700</bug_when>
    <thetext>We should have some fixup to remove runtime branches.
For example,

PutByVal(CellUse, StringUse, UntypedUse).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346771</commentid>
    <comment_count>2</comment_count>
      <attachid>320257</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-08 05:33:46 -0700</bug_when>
    <thetext>Created attachment 320257
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346875</commentid>
    <comment_count>3</comment_count>
      <attachid>320257</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-08 11:20:35 -0700</bug_when>
    <thetext>Comment on attachment 320257
Patch

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

&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:151
&gt; +        RELEASE_ASSERT(base-&gt;isObject());

what guarantees this? Inside Fixup, you speculate Cell, not object? If it&apos;s guaranteed, why don&apos;t you speculate object?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346879</commentid>
    <comment_count>4</comment_count>
      <attachid>320257</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-08 11:23:35 -0700</bug_when>
    <thetext>Comment on attachment 320257
Patch

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

&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:151
&gt;&gt; +        RELEASE_ASSERT(base-&gt;isObject());
&gt; 
&gt; what guarantees this? Inside Fixup, you speculate Cell, not object? If it&apos;s guaranteed, why don&apos;t you speculate object?

This is originally guaranteed in operationPutByVal generic functions too. This is because we emit `op_put_by_val` with direct flag only for objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346884</commentid>
    <comment_count>5</comment_count>
      <attachid>320257</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-08 11:26:02 -0700</bug_when>
    <thetext>Comment on attachment 320257
Patch

Cool!

I think that we can make the Generic case even better by implementing it as an inline cache.  Then we can have baseline, DFG, and FTL share that inline cache.  And we could use it for better array access profiling.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346896</commentid>
    <comment_count>6</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-08 11:55:18 -0700</bug_when>
    <thetext>(In reply to Filip Pizlo from comment #5)
&gt; Comment on attachment 320257 [details]
&gt; Patch
&gt; 
&gt; Cool!
&gt; 
&gt; I think that we can make the Generic case even better by implementing it as
&gt; an inline cache.  Then we can have baseline, DFG, and FTL share that inline
&gt; cache.  And we could use it for better array access profiling.

It sounds nice. We already have IC for GetByVal if it sees only one String/Symbol Identifier. But adding this type of IC (String/Symbol specialization) could further improve performance in baseline, DFG, and FTL.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346898</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-08 11:58:40 -0700</bug_when>
    <thetext>Committed r221793: &lt;http://trac.webkit.org/changeset/221793&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1346910</commentid>
    <comment_count>8</comment_count>
      <attachid>320257</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-08 12:42:30 -0700</bug_when>
    <thetext>Comment on attachment 320257
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:151
&gt;&gt;&gt; +        RELEASE_ASSERT(base-&gt;isObject());
&gt;&gt; 
&gt;&gt; what guarantees this? Inside Fixup, you speculate Cell, not object? If it&apos;s guaranteed, why don&apos;t you speculate object?
&gt; 
&gt; This is originally guaranteed in operationPutByVal generic functions too. This is because we emit `op_put_by_val` with direct flag only for objects.

Right, but your patch looks like it’s calling this from non-direct case. Am I missing something?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347052</commentid>
    <comment_count>9</comment_count>
      <attachid>320257</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2017-09-08 21:53:34 -0700</bug_when>
    <thetext>Comment on attachment 320257
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:151
&gt;&gt;&gt;&gt; +        RELEASE_ASSERT(base-&gt;isObject());
&gt;&gt;&gt; 
&gt;&gt;&gt; what guarantees this? Inside Fixup, you speculate Cell, not object? If it&apos;s guaranteed, why don&apos;t you speculate object?
&gt;&gt; 
&gt;&gt; This is originally guaranteed in operationPutByVal generic functions too. This is because we emit `op_put_by_val` with direct flag only for objects.
&gt; 
&gt; Right, but your patch looks like it’s calling this from non-direct case. Am I missing something?

This &quot;direct&quot; template param is true only when it&apos;s used for PutByValDirect.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1347061</commentid>
    <comment_count>10</comment_count>
      <attachid>320257</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-09-08 22:40:58 -0700</bug_when>
    <thetext>Comment on attachment 320257
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/JavaScriptCore/dfg/DFGOperations.cpp:151
&gt;&gt;&gt;&gt;&gt; +        RELEASE_ASSERT(base-&gt;isObject());
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; what guarantees this? Inside Fixup, you speculate Cell, not object? If it&apos;s guaranteed, why don&apos;t you speculate object?
&gt;&gt;&gt; 
&gt;&gt;&gt; This is originally guaranteed in operationPutByVal generic functions too. This is because we emit `op_put_by_val` with direct flag only for objects.
&gt;&gt; 
&gt;&gt; Right, but your patch looks like it’s calling this from non-direct case. Am I missing something?
&gt; 
&gt; This &quot;direct&quot; template param is true only when it&apos;s used for PutByValDirect.

Sorry I was completely misreading the code. This LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353539</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 12:37:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/34693626&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>320257</attachid>
            <date>2017-09-08 05:33:46 -0700</date>
            <delta_ts>2017-09-08 11:26:02 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-176345-20170908213345.patch</filename>
            <type>text/plain</type>
            <size>30602</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIxNzc3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
OWUxMGFiNTI5NmExMTlhYjJlNmU3MTE5MTRhNjFjZjU1ODMwNGVmLi4yMGU2MDAxYjQ3ODU2NjM3
ZWY1NzY1ODU5ZDI5MWRhMzEzMTI2ZmQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0NSBAQAorMjAxNy0wOS0wOCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBQdXRCeVZhbCB3aXRoIEFycmF5OjpHZW5lcmljIGlzIHRv
byBnZW5lcmljCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNzYzNDUKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBPdXIgREZHL0ZUTCdzIFB1dEJ5VmFsIHdpdGggQXJyYXk6OkdlbmVyaWMgaXMgdG9vIGdlbmVy
aWMgaW1wbGVtZW50YXRpb24uCisgICAgICAgIFdlIGNvdWxkIGhhdmUgdGhlIGNhc2UgbGlrZSwK
KworICAgICAgICAgICAgZHN0W2tleV0gPSBzcmNba2V5XTsKKworICAgICAgICB3aXRoIHN0cmlu
ZyBvciBzeW1ib2wga2V5cy4gQnV0IHRoZXkgYXJlIGhhbmRsZWQgaW4gc2xvdyBwYXRoLgorICAg
ICAgICBUaGlzIHBhdGNoIGFkZHMgUHV0QnlWYWwoQ2VsbFVzZSwgU3RyaW5nVXNlL1N5bWJvbFVz
ZSwgVW50eXBlZFVzZSkuIFRoZXkgZ28KKyAgICAgICAgdG8gb3B0aW1pemVkIHBhdGggdGhhdCBk
b2VzIG5vdCBoYXZlIGdlbmVyaWMgY2hlY2tzIGxpa2UgKGlzSW50MzIoKSAvIGlzRG91YmxlKCkg
ZXRjLikuCisKKyAgICAgICAgVGhpcyBpbXByb3ZlcyBTaXhTcGVlZCBvYmplY3QtYXNzaWduLmVz
NSBieSA5LjElLgorCisgICAgICAgIG9iamVjdC1hc3NpZ24uZXM1ICAgICAgICAgICAgIDQyNC4z
MTU5Ky0xMS4wNDcxICAgIF4gICAgMzg4Ljg3NzErLTEwLjkyMzkgICAgICAgXiBkZWZpbml0ZWx5
IDEuMDkxMXggZmFzdGVyCisKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZH
T3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6cHV0QnlWYWwpOgorICAgICAgICAo
SlNDOjpERkc6OnB1dEJ5VmFsSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpERkc6OnB1dEJ5VmFs
Q2VsbEludGVybmFsKToKKyAgICAgICAgKEpTQzo6REZHOjpwdXRCeVZhbENlbGxTdHJpbmdJbnRl
cm5hbCk6CisgICAgICAgIChKU0M6OkRGRzo6b3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbCk6IERl
bGV0ZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyk6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3ltYm9sKToKKyAgICAgICAg
KiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2
ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJf
NjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAg
ICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMu
Y3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpjb21waWxlUHV0QnlW
YWwpOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisKIDIwMTctMDktMDcgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIFVzZSBKSVQgcHJvYmVzIGZvciBE
RkcgT1NSIGV4aXQuCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAppbmRleCBkZWM4MTliYzZiNmMyNzY5ZWY1NDU4YWI3NDkwMTFlNDljMDViOTgwLi43OWFjMzEz
NzQyM2NjMGUwY2E4NGEzOWUzZDg5YWVlNzJlNzUyNGRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAgLTg1Miw2ICs4NTIsMTkgQEAgY2xhc3MgRml4
dXBQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICBjYXNlIEFycmF5OjpGb3JjZUV4aXQ6CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpHZW5l
cmljOgorICAgICAgICAgICAgICAgIGlmIChjaGlsZDEtPnNob3VsZFNwZWN1bGF0ZUNlbGwoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLT5zaG91bGRTcGVjdWxhdGVTdHJpbmco
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgZml4RWRnZTxDZWxsVXNlPihjaGlsZDEpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgZml4RWRnZTxTdHJpbmdVc2U+KGNoaWxkMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgICAgIGlmIChjaGlsZDItPnNob3VsZFNwZWN1bGF0ZVN5bWJvbCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBmaXhFZGdlPENlbGxVc2U+KGNoaWxkMSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBmaXhFZGdlPFN5bWJvbFVzZT4oY2hpbGQyKTsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgfQogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAgICAgICAgICAgLy8gRHVlIHRvIHJl
Z2lzdGVyIHByZXNzdXJlIG9uIDMyLWJpdCwgd2Ugc3BlY3VsYXRlIGNlbGwgYW5kCiAgICAgICAg
ICAgICAgICAgLy8gaWdub3JlIHRoZSBiYXNlLWlzLW5vdC1jZWxsIGNhc2UgZW50aXJlbHkgYnkg
bGV0dGluZyB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CmluZGV4IDcwNzgyZmI4MmZhODcyNzFiYmM5ZmE1OGNjZGZhZGUwNmFmOWYzNTEuLjVlNWRiNTQ2
ZDhjN2FjMTg0ZDc4ZTUwZTRlMmE5ZDM0OGFiNzBmODEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcApAQCAtNzUsMTAgKzc1LDggQEAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3QsIGJvb2wgZGlyZWN0
Pgotc3RhdGljIGlubGluZSB2b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBi
YXNlVmFsdWUsIHVpbnQzMl90IGluZGV4LCBKU1ZhbHVlIHZhbHVlKQorc3RhdGljIGlubGluZSB2
b2lkIHB1dEJ5VmFsKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
dWludDMyX3QgaW5kZXgsIEpTVmFsdWUgdmFsdWUpCiB7Ci0gICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgQVNT
RVJUKGlzSW5kZXgoaW5kZXgpKTsKICAgICBpZiAoZGlyZWN0KSB7CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGJhc2VWYWx1ZS5pc09iamVjdCgpKTsKQEAgLTEwMCwxMSArOTgsOSBAQCBzdGF0aWMg
aW5saW5lIHZvaWQgcHV0QnlWYWwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGJhc2VWYWx1ZSwg
dWludDMyX3QgaW5kZXgsCiB9CiAKIHRlbXBsYXRlPGJvb2wgc3RyaWN0LCBib29sIGRpcmVjdD4K
LUFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQorQUxXQVlTX0lOTElORSBzdGF0aWMgdm9pZCBwdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0ZSog
ZXhlYywgVk0mIHZtLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0q
IHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgYXV0byBzY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUo
KnZtKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBh
dXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CiAKICAgICBKU1ZhbHVlIGJhc2VW
YWx1ZSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkQmFzZSk7CiAgICAgSlNWYWx1ZSBwcm9wZXJ0
eSA9IEpTVmFsdWU6OmRlY29kZShlbmNvZGVkUHJvcGVydHkpOwpAQCAtMTE0LDcgKzExMCw3IEBA
IEFMV0FZU19JTkxJTkUgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bEludGVybmFsKEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIC8vIERlc3BpdGUgaXRzIG5hbWUsIEpT
VmFsdWU6OmlzVUludDMyIHdpbGwgcmV0dXJuIHRydWUgb25seSBmb3IgcG9zaXRpdmUgYm94ZWQg
aW50MzJfdDsgYWxsIHRob3NlIHZhbHVlcyBhcmUgdmFsaWQgYXJyYXkgaW5kaWNlcy4KICAgICAg
ICAgQVNTRVJUKGlzSW5kZXgocHJvcGVydHkuYXNVSW50MzIoKSkpOwogICAgICAgICBzY29wZS5y
ZWxlYXNlKCk7Ci0gICAgICAgIHB1dEJ5VmFsPHN0cmljdCwgZGlyZWN0PihleGVjLCBiYXNlVmFs
dWUsIHByb3BlcnR5LmFzVUludDMyKCksIHZhbHVlKTsKKyAgICAgICAgcHV0QnlWYWw8c3RyaWN0
LCBkaXJlY3Q+KGV4ZWMsIHZtLCBiYXNlVmFsdWUsIHByb3BlcnR5LmFzVUludDMyKCksIHZhbHVl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTIzLDcgKzExOSw3IEBAIEFMV0FZU19J
TkxJTkUgc3RhdGljIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEludGVybmFs
KEV4ZWNTdGF0ZSogZXhlCiAgICAgICAgIHVpbnQzMl90IHByb3BlcnR5QXNVSW50MzIgPSBzdGF0
aWNfY2FzdDx1aW50MzJfdD4ocHJvcGVydHlBc0RvdWJsZSk7CiAgICAgICAgIGlmIChwcm9wZXJ0
eUFzRG91YmxlID09IHByb3BlcnR5QXNVSW50MzIgJiYgaXNJbmRleChwcm9wZXJ0eUFzVUludDMy
KSkgewogICAgICAgICAgICAgc2NvcGUucmVsZWFzZSgpOwotICAgICAgICAgICAgcHV0QnlWYWw8
c3RyaWN0LCBkaXJlY3Q+KGV4ZWMsIGJhc2VWYWx1ZSwgcHJvcGVydHlBc1VJbnQzMiwgdmFsdWUp
OworICAgICAgICAgICAgcHV0QnlWYWw8c3RyaWN0LCBkaXJlY3Q+KGV4ZWMsIHZtLCBiYXNlVmFs
dWUsIHByb3BlcnR5QXNVSW50MzIsIHZhbHVlKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogICAgIH0KQEAgLTE0MCwxMyArMTM2LDQwIEBAIEFMV0FZU19JTkxJTkUgc3RhdGljIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsKEV4ZWNTdGF0ZSogZXhl
CiAgICAgICAgICAgICBhc09iamVjdChiYXNlVmFsdWUpLT5wdXREaXJlY3RJbmRleChleGVjLCBp
bmRleC52YWx1ZSgpLCB2YWx1ZSwgMCwgc3RyaWN0ID8gUHV0RGlyZWN0SW5kZXhTaG91bGRUaHJv
dyA6IFB1dERpcmVjdEluZGV4U2hvdWxkTm90VGhyb3cpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGFzT2JqZWN0KGJhc2VWYWx1ZSktPnB1dERpcmVjdCgqdm0sIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworICAgICAgICBhc09iamVjdChiYXNlVmFsdWUpLT5w
dXREaXJlY3Qodm0sIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogICAgICAgICByZXR1cm47
CiAgICAgfQogICAgIHNjb3BlLnJlbGVhc2UoKTsKICAgICBiYXNlVmFsdWUucHV0KGV4ZWMsIHBy
b3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOwogfQogCit0ZW1wbGF0ZTxib29sIHN0cmljdCwgYm9v
bCBkaXJlY3Q+CitBTFdBWVNfSU5MSU5FIHN0YXRpYyB2b2lkIHB1dEJ5VmFsQ2VsbEludGVybmFs
KEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZtLCBKU0NlbGwqIGJhc2UsIFByb3BlcnR5TmFtZSBwcm9w
ZXJ0eU5hbWUsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgUHV0UHJvcGVydHlTbG90IHNsb3QoYmFz
ZSwgc3RyaWN0KTsKKyAgICBpZiAoZGlyZWN0KSB7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJh
c2UtPmlzT2JqZWN0KCkpOworICAgICAgICBpZiAoc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gaW5k
ZXggPSBwYXJzZUluZGV4KHByb3BlcnR5TmFtZSkpCisgICAgICAgICAgICBhc09iamVjdChiYXNl
KS0+cHV0RGlyZWN0SW5kZXgoZXhlYywgaW5kZXgudmFsdWUoKSwgdmFsdWUsIDAsIHN0cmljdCA/
IFB1dERpcmVjdEluZGV4U2hvdWxkVGhyb3cgOiBQdXREaXJlY3RJbmRleFNob3VsZE5vdFRocm93
KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgYXNPYmplY3QoYmFzZSktPnB1dERpcmVjdCh2
bSwgcHJvcGVydHlOYW1lLCB2YWx1ZSwgc2xvdCk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cisg
ICAgYmFzZS0+cHV0SW5saW5lKGV4ZWMsIHByb3BlcnR5TmFtZSwgdmFsdWUsIHNsb3QpOworfQor
Cit0ZW1wbGF0ZTxib29sIHN0cmljdCwgYm9vbCBkaXJlY3Q+CitBTFdBWVNfSU5MSU5FIHN0YXRp
YyB2b2lkIHB1dEJ5VmFsQ2VsbFN0cmluZ0ludGVybmFsKEV4ZWNTdGF0ZSogZXhlYywgVk0mIHZt
LCBKU0NlbGwqIGJhc2UsIEpTU3RyaW5nKiBwcm9wZXJ0eSwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBhdXRvIHNjb3BlID0gREVDTEFSRV9USFJPV19TQ09QRSh2bSk7CisKKyAgICBhdXRvIHByb3Bl
cnR5TmFtZSA9IHByb3BlcnR5LT50b0lkZW50aWZpZXIoZXhlYyk7CisgICAgUkVUVVJOX0lGX0VY
Q0VQVElPTihzY29wZSwgdm9pZCgpKTsKKworICAgIHNjb3BlLnJlbGVhc2UoKTsKKyAgICBwdXRC
eVZhbENlbGxJbnRlcm5hbDxzdHJpY3QsIGRpcmVjdD4oZXhlYywgdm0sIGJhc2UsIHByb3BlcnR5
TmFtZSwgdmFsdWUpOworfQorCiB0ZW1wbGF0ZTx0eXBlbmFtZSBWaWV3Q2xhc3M+CiBjaGFyKiBu
ZXdUeXBlZEFycmF5V2l0aFNpemUoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgaW50MzJfdCBzaXplLCBjaGFyKiB2ZWN0b3IpCiB7CkBAIC01ODYsMzQgKzYwOSw2NiBAQCBF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkdldEJ5VmFsU3RyaW5nSW50KEV4
ZWNTdGF0ZSogZXhlYywgSlNTdHJpbgogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0
QnlWYWxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZlQ2FsbEZyYW1lVHJh
Y2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRp
dmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCi0gICAgb3BlcmF0aW9u
UHV0QnlWYWxJbnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgZW5jb2RlZEJhc2UsIGVuY29kZWRQ
cm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKKyAgICBwdXRCeVZhbEludGVybmFsPHRydWUsIGZhbHNl
PihleGVjLCB2bSwgZW5jb2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsK
IH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsTm9uU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4
ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2Vy
IHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAotICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8
ZmFsc2UsIGZhbHNlPihleGVjLCBlbmNvZGVkQmFzZSwgZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVk
VmFsdWUpOworICAgIHB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2UsIGZhbHNlPihleGVjLCB2bSwgZW5j
b2RlZEJhc2UsIGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpT
Q2VsbCogY2VsbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCiB7Ci0gICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7Ci0gICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CiAgICAgCi0g
ICAgb3BlcmF0aW9uUHV0QnlWYWxJbnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgSlNWYWx1ZTo6
ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CisgICAgcHV0QnlW
YWxJbnRlcm5hbDx0cnVlLCBmYWxzZT4oZXhlYywgdm0sIEpTVmFsdWU6OmVuY29kZShjZWxsKSwg
ZW5jb2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlWYWxDZWxsTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBj
ZWxsLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKLSAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJh
bWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAg
IE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKICAgICAKLSAgICBvcGVy
YXRpb25QdXRCeVZhbEludGVybmFsPGZhbHNlLCBmYWxzZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2Rl
KGNlbGwpLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CisgICAgcHV0QnlWYWxJbnRl
cm5hbDxmYWxzZSwgZmFsc2U+KGV4ZWMsIHZtLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29k
ZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2Vs
bCwgSlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKworICAgIHB1dEJ5VmFsQ2VsbFN0cmluZ0ludGVybmFsPHRydWUsIGZhbHNlPihl
eGVjLCB2bSwgY2VsbCwgYXNTdHJpbmcoc3RyaW5nKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRW
YWx1ZSkpOworfQorCit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3Ry
aW5nTm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN0cmlu
ZywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZt
KCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAg
cHV0QnlWYWxDZWxsU3RyaW5nSW50ZXJuYWw8ZmFsc2UsIGZhbHNlPihleGVjLCB2bSwgY2VsbCwg
YXNTdHJpbmcoc3RyaW5nKSwgSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSkpOworfQorCit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0KEV4ZWNT
dGF0ZSogZXhlYywgSlNDZWxsKiBjZWxsLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUg
ZW5jb2RlZFZhbHVlKQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworCisgICAgcHV0QnlWYWxDZWxsSW50ZXJu
YWw8dHJ1ZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxsLCBhc1N5bWJvbChzeW1ib2wpLT5wcml2YXRl
TmFtZSgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3ZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTeW1ib2xOb25TdHJpY3QoRXhlY1N0YXRlKiBl
eGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBwdXRCeVZhbENlbGxJbnRlcm5hbDxmYWxz
ZSwgZmFsc2U+KGV4ZWMsIHZtLCBjZWxsLCBhc1N5bWJvbChzeW1ib2wpLT5wcml2YXRlTmFtZSgp
LCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSogZXhl
YywgSlNPYmplY3QqIGFycmF5LCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
VmFsdWUpCkBAIC02ODIsMzQgKzczNyw2NiBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
UHV0RG91YmxlQnlWYWxCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChFeGVjU3RhdGUqCiAKIHZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdFN0cmljdChFeGVjU3RhdGUq
IGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVk
UHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKIHsKLSAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKLSAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKHZtLCBleGVjKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKICAgICAKLSAgICBvcGVyYXRpb25QdXRCeVZhbEludGVybmFsPHRydWUs
IHRydWU+KGV4ZWMsIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7
CisgICAgcHV0QnlWYWxJbnRlcm5hbDx0cnVlLCB0cnVlPihleGVjLCB2bSwgZW5jb2RlZEJhc2Us
IGVuY29kZWRQcm9wZXJ0eSwgZW5jb2RlZFZhbHVlKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9uU3RyaWN0KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEJhc2UsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5j
b2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwot
ICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9
IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMp
OwogICAgIAotICAgIG9wZXJhdGlvblB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2UsIHRydWU+KGV4ZWMs
IGVuY29kZWRCYXNlLCBlbmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CisgICAgcHV0QnlW
YWxJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGVuY29kZWRCYXNlLCBlbmNvZGVkUHJv
cGVydHksIGVuY29kZWRWYWx1ZSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Q
dXRCeVZhbERpcmVjdENlbGxTdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNl
ciB0cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAotICAgIG9wZXJhdGlvblB1
dEJ5VmFsSW50ZXJuYWw8dHJ1ZSwgdHJ1ZT4oZXhlYywgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBl
bmNvZGVkUHJvcGVydHksIGVuY29kZWRWYWx1ZSk7CisgICAgcHV0QnlWYWxJbnRlcm5hbDx0cnVl
LCB0cnVlPihleGVjLCB2bSwgSlNWYWx1ZTo6ZW5jb2RlKGNlbGwpLCBlbmNvZGVkUHJvcGVydHks
IGVuY29kZWRWYWx1ZSk7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZh
bERpcmVjdENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEVuY29k
ZWRKU1ZhbHVlIGVuY29kZWRQcm9wZXJ0eSwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQog
ewotICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwotICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIodm0sIGV4ZWMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwogICAgIAotICAgIG9wZXJhdGlvblB1dEJ5
VmFsSW50ZXJuYWw8ZmFsc2UsIHRydWU+KGV4ZWMsIEpTVmFsdWU6OmVuY29kZShjZWxsKSwgZW5j
b2RlZFByb3BlcnR5LCBlbmNvZGVkVmFsdWUpOworICAgIHB1dEJ5VmFsSW50ZXJuYWw8ZmFsc2Us
IHRydWU+KGV4ZWMsIHZtLCBKU1ZhbHVlOjplbmNvZGUoY2VsbCksIGVuY29kZWRQcm9wZXJ0eSwg
ZW5jb2RlZFZhbHVlKTsKK30KKwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFs
RGlyZWN0Q2VsbFN0cmluZ1N0cmljdChFeGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgSlND
ZWxsKiBzdHJpbmcsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVj
KTsKKworICAgIHB1dEJ5VmFsQ2VsbFN0cmluZ0ludGVybmFsPHRydWUsIHRydWU+KGV4ZWMsIHZt
LCBjZWxsLCBhc1N0cmluZyhzdHJpbmcpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7
Cit9CisKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTdHJp
bmdOb25TdHJpY3QoRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3RyaW5n
LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBw
dXRCeVZhbENlbGxTdHJpbmdJbnRlcm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIGFz
U3RyaW5nKHN0cmluZyksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKK30KKwordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbFN0cmljdChF
eGVjU3RhdGUqIGV4ZWMsIEpTQ2VsbCogY2VsbCwgSlNDZWxsKiBzeW1ib2wsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKworICAgIHB1dEJ5VmFsQ2VsbElu
dGVybmFsPHRydWUsIHRydWU+KGV4ZWMsIHZtLCBjZWxsLCBhc1N5bWJvbChzeW1ib2wpLT5wcml2
YXRlTmFtZSgpLCBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKSk7Cit9CisKK3ZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbERpcmVjdENlbGxTeW1ib2xOb25TdHJpY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU0NlbGwqIGNlbGwsIEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVkSlNWYWx1
ZSBlbmNvZGVkVmFsdWUpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisKKyAgICBwdXRCeVZhbENlbGxJbnRl
cm5hbDxmYWxzZSwgdHJ1ZT4oZXhlYywgdm0sIGNlbGwsIGFzU3ltYm9sKHN5bWJvbCktPnByaXZh
dGVOYW1lKCksIEpTVmFsdWU6OmRlY29kZShlbmNvZGVkVmFsdWUpKTsKIH0KIAogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3VuZHNTdHJpY3Qo
RXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCogYXJyYXksIGludDMyX3QgaW5kZXgsIEVuY29kZWRK
U1ZhbHVlIGVuY29kZWRWYWx1ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgKaW5kZXggZmM5ZGYxOGYxNWI2OTliNzAwZDAxYjYzN2ViODVjYmQ1Y2JhYzY0ZS4uOWNm
N2IwMGQ0N2I1ZTdmNTgxOWYzMjM1MjQ0MzNjM2UyZDFiYzdlOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKQEAgLTEwMSw2ICsxMDEsMTAgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsU3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRCYXMKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbE5vblN0
cmljdChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQmFzZSwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRF
Uk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJpY3QoRXhl
Y1N0YXRlKiwgSlNDZWxsKiwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXRCeVZhbENlbGxOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFByb3BlcnR5LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENlbGxTdHJp
bmdTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiBzdHJpbmcsIEVuY29kZWRKU1Zh
bHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0Nl
bGwqIHN0cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0KEV4ZWNT
dGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCogc3ltYm9sLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFs
dWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbENl
bGxTeW1ib2xOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiBzeW1ib2wsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblB1dEJ5VmFsQmV5b25kQXJyYXlCb3VuZHNTdHJpY3QoRXhlY1N0YXRlKiwg
SlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdU
Rl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeVZhbEJleW9uZEFy
cmF5Qm91bmRzTm9uU3RyaWN0KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwg
RW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc05vblN0cmljdChF
eGVjU3RhdGUqLCBKU09iamVjdCosIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwpAQCAtMTA4LDYgKzExMiwxMCBAQCB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RTdHJpY3QoRXhlY1N0YXRlKiwgRW5jb2RlZEpT
VmFsdWUgZW5jbwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Tm9u
U3RyaWN0KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRCYXNlLCBFbmNvZGVkSlNW
YWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lO
VEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN0
cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHks
IEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbE5vblN0cmljdChFeGVjU3RhdGUqLCBK
U0NlbGwqLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkUHJvcGVydHksIEVuY29kZWRKU1ZhbHVlIGVu
Y29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1
dEJ5VmFsRGlyZWN0Q2VsbFN0cmluZ1N0cmljdChFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
IHN0cmluZywgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKSBXVEZfSU5URVJOQUw7Cit2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nTm9uU3RyaWN0
KEV4ZWNTdGF0ZSosIEpTQ2VsbCosIEpTQ2VsbCogc3RyaW5nLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRC
eVZhbERpcmVjdENlbGxTeW1ib2xTdHJpY3QoRXhlY1N0YXRlKiwgSlNDZWxsKiwgSlNDZWxsKiBz
eW1ib2wsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN5bWJvbE5vblN0cmljdChF
eGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqIHN5bWJvbCwgRW5jb2RlZEpTVmFsdWUgZW5jb2Rl
ZFZhbHVlKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0QnlW
YWxEaXJlY3RCZXlvbmRBcnJheUJvdW5kc1N0cmljdChFeGVjU3RhdGUqLCBKU09iamVjdCosIGlu
dDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkgV1RGX0lOVEVSTkFMOwog
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0QmV5b25kQXJyYXlCb3Vu
ZHNOb25TdHJpY3QoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBpbnQzMl90IGluZGV4LCBFbmNvZGVk
SlNWYWx1ZSBlbmNvZGVkVmFsdWUpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25QdXREb3VibGVCeVZhbEJleW9uZEFycmF5Qm91bmRzU3RyaWN0KEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgaW50MzJfdCBpbmRleCwgZG91YmxlIHZhbHVlKSBXVEZfSU5URVJOQUw7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCmluZGV4
IDcwYzdmNmIzZDhlODI0ZTMzNmJjY2Y2MThmOWNkOGQ0YmJlYjFiOTkuLjJhOWFlMjIyMDE3OWZm
NTg2NjIzNzAzMGM4MTgyOTg4YzZmMDA5YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCkBAIC0zMTQ0LDYgKzMxNDQsNDQgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBlZEFycmF5KEdQUlJlZyBi
YXNlLCBHUFJSZWcgcHJvcGUKICAgICBub1Jlc3VsdChub2RlKTsKIH0KIAordm9pZCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTdHJpbmcoTm9kZSogbm9kZSwgRWRn
ZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMykKK3sKKyAgICBTcGVjdWxhdGVD
ZWxsT3BlcmFuZCBhcmcxKHRoaXMsIGNoaWxkMSk7CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQg
YXJnMih0aGlzLCBjaGlsZDIpOworICAgIEpTVmFsdWVPcGVyYW5kIGFyZzModGhpcywgY2hpbGQz
KTsKKworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJnMS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQ
UiA9IGFyZzIuZ3ByKCk7CisgICAgSlNWYWx1ZVJlZ3MgYXJnM1JlZ3MgPSBhcmczLmpzVmFsdWVS
ZWdzKCk7CisKKyAgICBzcGVjdWxhdGVTdHJpbmcoY2hpbGQyLCBhcmcyR1BSKTsKKworICAgIGZs
dXNoUmVnaXN0ZXJzKCk7CisgICAgY2FsbE9wZXJhdGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Io
bm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ1N0cmlj
dCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdCwgYXJnMUdQUiwgYXJnMkdQ
UiwgYXJnM1JlZ3MpOworICAgIG1faml0LmV4Y2VwdGlvbkNoZWNrKCk7CisKKyAgICBub1Jlc3Vs
dChub2RlKTsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVB1dEJ5VmFsRm9yQ2Vs
bFdpdGhTeW1ib2woTm9kZSogbm9kZSwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2Um
IGNoaWxkMykKK3sKKyAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBhcmcxKHRoaXMsIGNoaWxkMSk7
CisgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgYXJnMih0aGlzLCBjaGlsZDIpOworICAgIEpTVmFs
dWVPcGVyYW5kIGFyZzModGhpcywgY2hpbGQzKTsKKworICAgIEdQUlJlZyBhcmcxR1BSID0gYXJn
MS5ncHIoKTsKKyAgICBHUFJSZWcgYXJnMkdQUiA9IGFyZzIuZ3ByKCk7CisgICAgSlNWYWx1ZVJl
Z3MgYXJnM1JlZ3MgPSBhcmczLmpzVmFsdWVSZWdzKCk7CisKKyAgICBzcGVjdWxhdGVTeW1ib2wo
Y2hpbGQyLCBhcmcyR1BSKTsKKworICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgY2FsbE9wZXJh
dGlvbihtX2ppdC5pc1N0cmljdE1vZGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKSA/IG9wZXJh
dGlvblB1dEJ5VmFsQ2VsbFN5bWJvbFN0cmljdCA6IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN5bWJv
bE5vblN0cmljdCwgYXJnMUdQUiwgYXJnMkdQUiwgYXJnM1JlZ3MpOworICAgIG1faml0LmV4Y2Vw
dGlvbkNoZWNrKCk7CisKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUluc3RhbmNlT2ZGb3JPYmplY3QoTm9kZSosIEdQUlJlZyB2YWx1ZVJlZywg
R1BSUmVnIHByb3RvdHlwZVJlZywgR1BSUmVnIHNjcmF0Y2hSZWcsIEdQUlJlZyBzY3JhdGNoMlJl
ZykKIHsKICAgICAvLyBDaGVjayB0aGF0IHByb3RvdHlwZSBpcyBhbiBvYmplY3QuCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggNTBiMWQwOWQ2
OWQ1OWQyNGI1NzM4NWViMWI0YzZlZWFkNmE4MmViYS4uOTgxMWNkZGMyN2RjMzkzNWZkNDUwYWQx
MWY1NjY0MzM4MzVjNjQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQuaApAQCAtMTg4NSw2ICsxODg1LDExIEBAIGNsYXNzIFNwZWN1bGF0aXZlSklU
IHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEsIGFyZzIs
IGFyZzMpOwogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KKyAg
ICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQ0ogb3Bl
cmF0aW9uLCBHUFJSZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEpTVmFsdWVSZWdzIGFyZzMpCisgICAg
eworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwg
YXJnMy5wYXlsb2FkR1BSKCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24p
OworICAgIH0KIAogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oWl9KSVRPcGVy
YXRpb25fRUogb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBKU1ZhbHVlUmVncyBhcmcxKQogICAg
IHsKQEAgLTI0MjMsNiArMjQyOCwxMSBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgICAg
IG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxLCBhcmcyLnBheWxvYWRHUFIo
KSwgYXJnMi50YWdHUFIoKSwgYXJnMy5wYXlsb2FkR1BSKCksIGFyZzMudGFnR1BSKCkpOwogICAg
ICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KKyAgICBKSVRDb21waWxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VDQ0ogb3BlcmF0aW9uLCBHUFJS
ZWcgYXJnMSwgR1BSUmVnIGFyZzIsIEpTVmFsdWVSZWdzIGFyZzMpCisgICAgeworICAgICAgICBt
X2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSwgYXJnMiwgRUFCSV8zMkJJVF9E
VU1NWV9BUkcgYXJnMy5wYXlsb2FkR1BSKCksIGFyZzMudGFnR1BSKCkpOworICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgIH0KIAogICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVBaSiBvcGVyYXRpb24sIEdQUlJlZyBhcmcx
LCBHUFJSZWcgYXJnMiwgSlNWYWx1ZVJlZ3MgYXJnMykKICAgICB7CkBAIC0yODczLDYgKzI4ODMs
OCBAQCBjbGFzcyBTcGVjdWxhdGl2ZUpJVCB7CiAgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JJ
bnRUeXBlZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFy
cmF5VHlwZSk7CiAgICAgdm9pZCBjb21waWxlR2V0QnlWYWxPbkZsb2F0VHlwZWRBcnJheShOb2Rl
KiwgVHlwZWRBcnJheVR5cGUpOwogICAgIHZvaWQgY29tcGlsZVB1dEJ5VmFsRm9yRmxvYXRUeXBl
ZEFycmF5KEdQUlJlZyBiYXNlLCBHUFJSZWcgcHJvcGVydHksIE5vZGUqLCBUeXBlZEFycmF5VHlw
ZSk7CisgICAgdm9pZCBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhOb2RlKiwgRWRn
ZSYgY2hpbGQxLCBFZGdlJiBjaGlsZDIsIEVkZ2UmIGNoaWxkMyk7CisgICAgdm9pZCBjb21waWxl
UHV0QnlWYWxGb3JDZWxsV2l0aFN5bWJvbChOb2RlKiwgRWRnZSYgY2hpbGQxLCBFZGdlJiBjaGls
ZDIsIEVkZ2UmIGNoaWxkMyk7CiAgICAgLy8gSWYgdGhpcyByZXR1cm5zIGZhbHNlIGl0IG1lYW5z
IHRoYXQgd2UgdGVybWluYXRlZCBzcGVjdWxhdGl2ZSBleGVjdXRpb24uCiAgICAgYm9vbCBnZXRJ
bnRUeXBlZEFycmF5U3RvcmVPcGVyYW5kKAogICAgICAgICBHUFJUZW1wb3JhcnkmIHZhbHVlLApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAKaW5kZXggMzhmYjVkZTJmM2VhMzNlODVkZmVhOTFjOGZkYjBjNmUwYjY3NzE1YS4uNzM1
MWQwNDRmM2RjOGY4NTRkMzlmY2I5YmQyNmEyODFkZjFlZDU2OCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0yODkx
LDYgKzI4OTEsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6IHsKICAgICAg
ICAgICAgIEFTU0VSVChub2RlLT5vcCgpID09IFB1dEJ5VmFsIHx8IG5vZGUtPm9wKCkgPT0gUHV0
QnlWYWxEaXJlY3QpOworCisgICAgICAgICAgICBpZiAoY2hpbGQxLnVzZUtpbmQoKSA9PSBDZWxs
VXNlKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNl
KSB7CisgICAgICAgICAgICAgICAgICAgIGNvbXBpbGVQdXRCeVZhbEZvckNlbGxXaXRoU3RyaW5n
KG5vZGUsIGNoaWxkMSwgY2hpbGQyLCBjaGlsZDMpOworICAgICAgICAgICAgICAgICAgICBhbHJl
YWR5SGFuZGxlZCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN5bWJv
bFVzZSkgeworICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN5
bWJvbChub2RlLCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAg
YWxyZWFkeUhhbmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFNw
ZWN1bGF0ZUNlbGxPcGVyYW5kIGJhc2UodGhpcywgY2hpbGQxKTsgLy8gU2F2ZSBhIHJlZ2lzdGVy
LCBzcGVjdWxhdGUgY2VsbC4gV2UnbGwgcHJvYmFibHkgYmUgcmlnaHQuCiAgICAgICAgICAgICBK
U1ZhbHVlT3BlcmFuZCBwcm9wZXJ0eSh0aGlzLCBjaGlsZDIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggMjg2MjFkNjI3MjFl
ZDM5MmEwMTViODdlMGRmM2I1M2FiZDgzOTdkMS4uOGExOTBkMDBkODIwM2IwZDAxMzAyYTZjN2Zk
NDBiOTYyYTQzZmRlYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUNjQuY3BwCkBAIC0yOTY0LDYgKzI5NjQsMjAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQXJyYXk6OkdlbmVyaWM6IHsKICAgICAgICAgICAgIERGR19BU1NFUlQobV9qaXQuZ3JhcGgo
KSwgbm9kZSwgbm9kZS0+b3AoKSA9PSBQdXRCeVZhbCB8fCBub2RlLT5vcCgpID09IFB1dEJ5VmFs
RGlyZWN0KTsKKworICAgICAgICAgICAgaWYgKGNoaWxkMS51c2VLaW5kKCkgPT0gQ2VsbFVzZSkg
eworICAgICAgICAgICAgICAgIGlmIChjaGlsZDIudXNlS2luZCgpID09IFN0cmluZ1VzZSkgewor
ICAgICAgICAgICAgICAgICAgICBjb21waWxlUHV0QnlWYWxGb3JDZWxsV2l0aFN0cmluZyhub2Rl
LCBjaGlsZDEsIGNoaWxkMiwgY2hpbGQzKTsKKyAgICAgICAgICAgICAgICAgICAgYWxyZWFkeUhh
bmRsZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICBpZiAoY2hpbGQyLnVzZUtpbmQoKSA9PSBTeW1ib2xVc2Up
IHsKKyAgICAgICAgICAgICAgICAgICAgY29tcGlsZVB1dEJ5VmFsRm9yQ2VsbFdpdGhTeW1ib2wo
bm9kZSwgY2hpbGQxLCBjaGlsZDIsIGNoaWxkMyk7CisgICAgICAgICAgICAgICAgICAgIGFscmVh
ZHlIYW5kbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcxKHRoaXMsIGNoaWxkMSk7CiAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcyKHRoaXMsIGNoaWxkMik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9CMy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKaW5kZXggNjJiNmNmYTI4NGUzODg0NzZiMzUxNDdlOGQ1Y2ZkMTI1MGYxNTg2
My4uY2ExYTRjZTJmNDkxMThiMmY5MzhmZTQzMTlmZjczYThjNTBiY2ZhNCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvQjMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0IzLmNwcApAQCAtMzgzMSw2ICszODMx
LDQxIEBAIGNsYXNzIExvd2VyREZHVG9CMyB7CiAgICAgICAgIAogICAgICAgICBzd2l0Y2ggKG1f
bm9kZS0+YXJyYXlNb2RlKCkudHlwZSgpKSB7CiAgICAgICAgIGNhc2UgQXJyYXk6OkdlbmVyaWM6
IHsKKyAgICAgICAgICAgIGlmIChjaGlsZDEudXNlS2luZCgpID09IENlbGxVc2UpIHsKKyAgICAg
ICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9FQ0NKIG9wZXJhdGlvbiA9IG51bGxwdHI7CisgICAg
ICAgICAgICAgICAgaWYgKGNoaWxkMi51c2VLaW5kKCkgPT0gU3RyaW5nVXNlKSB7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9y
aWdpbi5zZW1hbnRpYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0g
b3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RDZWxsU3RyaW5nU3RyaWN0OworICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzU3Ry
aWN0TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxDZWxsU3RyaW5nU3RyaWN0Owor
ICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsQ2VsbFN0cmluZ05vblN0cmljdDsKKyAgICAg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvbiksIG1fY2FsbEZyYW1lLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N0
cmluZyhjaGlsZDIpLCBsb3dKU1ZhbHVlKGNoaWxkMykpOworICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKGNoaWxkMi51
c2VLaW5kKCkgPT0gU3ltYm9sVXNlKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChtX25vZGUt
Pm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICht
X2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYykpCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3BlcmF0aW9uUHV0QnlWYWxEaXJlY3RD
ZWxsU3ltYm9sU3RyaWN0OworICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1dEJ5VmFsRGlyZWN0Q2Vs
bFN5bWJvbE5vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmlzU3RyaWN0TW9kZUZvcihtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYykpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uID0gb3Bl
cmF0aW9uUHV0QnlWYWxDZWxsU3ltYm9sU3RyaWN0OworICAgICAgICAgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbiA9IG9wZXJhdGlvblB1
dEJ5VmFsQ2VsbFN5bWJvbE5vblN0cmljdDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgICAgICB2bUNhbGwoVm9pZCwgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbiksIG1f
Y2FsbEZyYW1lLCBsb3dDZWxsKGNoaWxkMSksIGxvd1N5bWJvbChjaGlsZDIpLCBsb3dKU1ZhbHVl
KGNoaWxkMykpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAg
fQorICAgICAgICAgICAgfQorCiAgICAgICAgICAgICBWX0pJVE9wZXJhdGlvbl9FSkpKIG9wZXJh
dGlvbjsKICAgICAgICAgICAgIGlmIChtX25vZGUtPm9wKCkgPT0gUHV0QnlWYWxEaXJlY3QpIHsK
ICAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5pc1N0cmljdE1vZGVGb3IobV9ub2RlLT5vcmln
aW4uc2VtYW50aWMpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApp
bmRleCAyZjMyNjJmNDVlNTE2MGRmN2UxZjg2N2MwMTZiYmUzMDlmY2FlMTFhLi5jMjNjNDBiZjRi
MTE4OTNkMmUxZjIxMjU5ZDBlYTMyYjE0MjQ3MTVlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjY1LDYgKzI2NSw3IEBAIHR5cGVkZWYgdm9pZCAoSklU
X09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNQU1BTKShFeGVjU3RhdGUqLCBKU0NlbGwqLCB2
b2lkKiwKIHR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNaKShF
eGVjU3RhdGUqLCBKU0NlbGwqLCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCAoSklUX09QRVJBVElP
TiAqVl9KSVRPcGVyYXRpb25fRUNDKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwqKTsKIHR5
cGVkZWYgdm9pZCAoSklUX09QRVJBVElPTiAqVl9KSVRPcGVyYXRpb25fRUNsaUpzZikoRXhlY1N0
YXRlKiwgQ2FsbExpbmtJbmZvKiwgSlNGdW5jdGlvbiopOwordHlwZWRlZiB2b2lkIChKSVRfT1BF
UkFUSU9OICpWX0pJVE9wZXJhdGlvbl9FQ0NKKShFeGVjU3RhdGUqLCBKU0NlbGwqLCBKU0NlbGwq
LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3Bl
cmF0aW9uX0VaU3ltdGFiSikoRXhlY1N0YXRlKiwgaW50MzJfdCwgU3ltYm9sVGFibGUqLCBFbmNv
ZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgKEpJVF9PUEVSQVRJT04gKlZfSklUT3BlcmF0aW9u
X0VKKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgKEpJVF9PUEVS
QVRJT04gKlZfSklUT3BlcmF0aW9uX0VKQ0kpKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBK
U0NlbGwqLCBVbmlxdWVkU3RyaW5nSW1wbCopOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VM
b2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA4ZDQzNjU5Y2M2MTQ3NWQ0MzU2YzJjNDU1MDMz
YjliZTkwYThkOTUwLi5lODJjNWVkYTVkNDk2ODBiMmJiODEwNjBmMWVhMjFhYTg0Y2ZiMTMxIDEw
MDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDE4IEBACisyMDE3LTA5LTA4ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPgorCisgICAgICAgIFtERkddIFB1dEJ5VmFsIHdpdGggQXJyYXk6OkdlbmVyaWMgaXMg
dG9vIGdlbmVyaWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NjM0NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogc3RyZXNzL29iamVjdC1hc3NpZ24tc3ltYm9scy5qczogQWRkZWQuCisgICAgICAgIChz
aG91bGRCZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAgICAgKiBzdHJlc3Mvb2JqZWN0LWFzc2ln
bi5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgICh0ZXN0KToKKyAgICAg
ICAgKGkuc2hvdWxkQmUuSlNPTi5zdHJpbmdpZnkudGVzdCk6CisKIDIwMTctMDktMDcgIFBlciBB
cm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtXaW4zMl0gMTAgSlND
IHN0cmVzcyB0ZXN0cyBhcmUgZmFpbGluZy4KZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL29i
amVjdC1hc3NpZ24tc3ltYm9scy5qcyBiL0pTVGVzdHMvc3RyZXNzL29iamVjdC1hc3NpZ24tc3lt
Ym9scy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5kNjQ5ZWVhZmY0NThmMmQ1MzZiMDc0YmUyZWNlNDIzODYyNDFl
NTk5Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3Mvb2JqZWN0LWFzc2lnbi1zeW1i
b2xzLmpzCkBAIC0wLDAgKzEsMzggQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0
ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCit2YXIgYSA9IFN5bWJvbCgiYSIpOwor
dmFyIGIgPSBTeW1ib2woImIiKTsKK3ZhciBjID0gU3ltYm9sKCJjIik7Cit2YXIgZCA9IFN5bWJv
bCgiZCIpOwordmFyIGUgPSBTeW1ib2woImUiKTsKKwordmFyIG9iaiA9IHsKKyAgICBbYV06IDEs
CisgICAgW2JdOiAyLAorICAgIFtjXTogMywKKyAgICBbZF06IG51bGwsCisgICAgW2VdOiAnZScK
K307CisKK2Z1bmN0aW9uIHRlc3Qoc3JjKSB7CisgICAgdmFyIG8gPSB7fTsKKyAgICB2YXIga2V5
cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoc3JjKTsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGtleXMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgdmFyIGtleSA9IGtleXNbaV07Cisg
ICAgICAgIG9ba2V5XSA9IHNyY1trZXldOworICAgIH0KKyAgICByZXR1cm4gbzsKK30KK25vSW5s
aW5lKHRlc3QpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNDsgKytpKSB7CisgICAgdmFyIHJl
c3VsdCA9IHRlc3Qob2JqKTsKKyAgICBzaG91bGRCZShyZXN1bHRbYV0sIDEpOworICAgIHNob3Vs
ZEJlKHJlc3VsdFtiXSwgMik7CisgICAgc2hvdWxkQmUocmVzdWx0W2NdLCAzKTsKKyAgICBzaG91
bGRCZShyZXN1bHRbZF0sIG51bGwpOworICAgIHNob3VsZEJlKHJlc3VsdFtlXSwgJ2UnKTsKK30K
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL29iamVjdC1hc3NpZ24uanMgYi9KU1Rlc3RzL3N0
cmVzcy9vYmplY3QtYXNzaWduLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ0NTcyYTJmNDdiNzQ2ZThjZDRkNDAx
ZjExNzMwZTY3NmExMDlmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9vYmpl
Y3QtYXNzaWduLmpzCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwg
ZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCit2YXIgb2JqID0geworICAg
IGE6IDEsCisgICAgYjogMiwKKyAgICBjOiAzLAorICAgIGQ6IG51bGwsCisgICAgZTogJ2UnCit9
OworCitmdW5jdGlvbiB0ZXN0KHNyYykgeworICAgIHZhciBvID0ge307CisgICAgdmFyIGtleXMg
PSBPYmplY3Qua2V5cyhzcmMpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwga2V5cy5sZW5ndGg7
ICsraSkgeworICAgICAgICB2YXIga2V5ID0ga2V5c1tpXTsKKyAgICAgICAgb1trZXldID0gc3Jj
W2tleV07CisgICAgfQorICAgIHJldHVybiBvOworfQorbm9JbmxpbmUodGVzdCk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMWU0OyArK2kpCisgICAgc2hvdWxkQmUoSlNPTi5zdHJpbmdpZnkodGVz
dChvYmopKSwgYHsiYSI6MSwiYiI6MiwiYyI6MywiZCI6bnVsbCwiZSI6ImUifWApOwo=
</data>
<flag name="review"
          id="340393"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>