<?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>237207</bug_id>
          
          <creation_ts>2022-02-25 06:27:25 -0800</creation_ts>
          <short_desc>[JSC] Reuse known register values on ARMv7</short_desc>
          <delta_ts>2022-03-15 06:44:39 -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>New Bugs</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="Angelos Oikonomopoulos">angelos</reporter>
          <assigned_to name="Angelos Oikonomopoulos">angelos</assigned_to>
          <cc>achristensen</cc>
    
    <cc>aperez</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glore</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
    
    <cc>zan</cc>
    
    <cc>zdobersek</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1845998</commentid>
    <comment_count>0</comment_count>
    <who name="Angelos Oikonomopoulos">angelos</who>
    <bug_when>2022-02-25 06:27:25 -0800</bug_when>
    <thetext>[JSC] Reuse known register values on ARMv7</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845999</commentid>
    <comment_count>1</comment_count>
      <attachid>453209</attachid>
    <who name="Angelos Oikonomopoulos">angelos</who>
    <bug_when>2022-02-25 06:32:21 -0800</bug_when>
    <thetext>Created attachment 453209
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846558</commentid>
    <comment_count>2</comment_count>
      <attachid>453209</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-02-28 00:44:17 -0800</bug_when>
    <thetext>Comment on attachment 453209
Patch

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

&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:358
&gt; -            DisallowMacroScratchRegisterUsage disallowScratch(jit);
&gt;              jit.loadPtr(CCallHelpers::Address(callLinkInfoGPR, offsetOfCallee()), scratchGPR);
&gt; +            DisallowMacroScratchRegisterUsage disallowScratch(jit);

Is this necessary? In theory it shouldn&apos;t cause problems, but it feels safer to me to disallow usage for the whole block, load including.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846564</commentid>
    <comment_count>3</comment_count>
    <who name="Angelos Oikonomopoulos">angelos</who>
    <bug_when>2022-02-28 01:02:26 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #2)
&gt; Comment on attachment 453209 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453209&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:358
&gt; &gt; -            DisallowMacroScratchRegisterUsage disallowScratch(jit);
&gt; &gt;              jit.loadPtr(CCallHelpers::Address(callLinkInfoGPR, offsetOfCallee()), scratchGPR);
&gt; &gt; +            DisallowMacroScratchRegisterUsage disallowScratch(jit);
&gt; 
&gt; Is this necessary? In theory it shouldn&apos;t cause problems, but it feels safer
&gt; to me to disallow usage for the whole block, load including.

It&apos;s necessary for the code to work in its current form, but not strictly necessary. The difference here is that loadPtr (indirectly) does RELEASE_ASSERT(m_allowScratchRegister) because it explicitly invalidates the associated CachedRegister by calling cachedAddressTempRegister().invalidate().

One could have all callers of load*() invalidate the destination register instead, but that felt a bit more error prone. Especially since my base tree didn&apos;t include any caller that would need to skip the invalidation (I discovered this new usage when rebasing on Friday). I&apos;m open to changing things around if anyone thinks that would be more appropriate (either in theory or in practice).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846567</commentid>
    <comment_count>4</comment_count>
      <attachid>453209</attachid>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-02-28 01:09:37 -0800</bug_when>
    <thetext>Comment on attachment 453209
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:358
&gt;&gt;&gt; +            DisallowMacroScratchRegisterUsage disallowScratch(jit);
&gt;&gt; 
&gt;&gt; Is this necessary? In theory it shouldn&apos;t cause problems, but it feels safer to me to disallow usage for the whole block, load including.
&gt; 
&gt; It&apos;s necessary for the code to work in its current form, but not strictly necessary. The difference here is that loadPtr (indirectly) does RELEASE_ASSERT(m_allowScratchRegister) because it explicitly invalidates the associated CachedRegister by calling cachedAddressTempRegister().invalidate().
&gt; 
&gt; One could have all callers of load*() invalidate the destination register instead, but that felt a bit more error prone. Especially since my base tree didn&apos;t include any caller that would need to skip the invalidation (I discovered this new usage when rebasing on Friday). I&apos;m open to changing things around if anyone thinks that would be more appropriate (either in theory or in practice).

I think the change should be fine. It was actually me changing it to the current form in bug #236064. Even if the scratch register will be needed for address resolution, it will be used as the load destination at the very end of this operation, and it&apos;s mostly after where we want to actively disallow the usage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846570</commentid>
    <comment_count>5</comment_count>
    <who name="Angelos Oikonomopoulos">angelos</who>
    <bug_when>2022-02-28 01:14:54 -0800</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #4)
&gt; Comment on attachment 453209 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453209&amp;action=review
&gt; 
&gt; &gt;&gt;&gt; Source/JavaScriptCore/bytecode/CallLinkInfo.cpp:358
&gt; &gt;&gt;&gt; +            DisallowMacroScratchRegisterUsage disallowScratch(jit);
&gt; &gt;&gt; 
&gt; &gt;&gt; Is this necessary? In theory it shouldn&apos;t cause problems, but it feels safer to me to disallow usage for the whole block, load including.
&gt; &gt; 
&gt; &gt; It&apos;s necessary for the code to work in its current form, but not strictly necessary. The difference here is that loadPtr (indirectly) does RELEASE_ASSERT(m_allowScratchRegister) because it explicitly invalidates the associated CachedRegister by calling cachedAddressTempRegister().invalidate().
&gt; &gt; 
&gt; &gt; One could have all callers of load*() invalidate the destination register instead, but that felt a bit more error prone. Especially since my base tree didn&apos;t include any caller that would need to skip the invalidation (I discovered this new usage when rebasing on Friday). I&apos;m open to changing things around if anyone thinks that would be more appropriate (either in theory or in practice).
&gt; 
&gt; I think the change should be fine. It was actually me changing it to the
&gt; current form in bug #236064. Even if the scratch register will be needed for
&gt; address resolution, it will be used as the load destination at the very end
&gt; of this operation, and it&apos;s mostly after where we want to actively disallow
&gt; the usage.

Yah, I tracked down the commit that made this change ;-)

Still, I&apos;m not 100% sure from the above which change you think should be fine. Would you rather I keep the loadPtr out of DisallowMacroScratchRegisterUsage (i.e. keep the submitted patch as is)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846571</commentid>
    <comment_count>6</comment_count>
    <who name="Zan Dobersek">zan</who>
    <bug_when>2022-02-28 01:18:43 -0800</bug_when>
    <thetext>Keep the submitted patch as-is, with the Disallow struct moved after loadPtr, where it used to be.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846575</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-02-28 01:57:46 -0800</bug_when>
    <thetext>Committed r290589 (247867@main): &lt;https://commits.webkit.org/247867@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 453209.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846576</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-02-28 01:58:19 -0800</bug_when>
    <thetext>&lt;rdar://problem/89548061&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851266</commentid>
    <comment_count>9</comment_count>
    <who name="Angelos Oikonomopoulos">angelos</who>
    <bug_when>2022-03-15 06:44:39 -0700</bug_when>
    <thetext>(In reply to Zan Dobersek from comment #6)
&gt; Keep the submitted patch as-is, with the Disallow struct moved after
&gt; loadPtr, where it used to be.

See also: https://bugs.webkit.org/show_bug.cgi?id=237888.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453209</attachid>
            <date>2022-02-25 06:32:21 -0800</date>
            <delta_ts>2022-02-28 01:57:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-237207-20220225143219.patch</filename>
            <type>text/plain</type>
            <size>38476</size>
            <attacher name="Angelos Oikonomopoulos">angelos</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNTAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ODM2YjVhNWJiYTFmZDMwYmZkOWNmZTUzODg2YTc4ZjQxMDAyODkyLi4xZTczM2M2ZjhkZWYyYTFm
MTE4MmZjZDU3MDhiZjFhN2UxMzBhNWM1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw3MCBAQAorMjAyMi0wMi0yNSAgQW5nZWxvcyBPaWtvbm9tb3BvdWxvcyAgPGFuZ2Vsb3NA
aWdhbGlhLmNvbT4KKworICAgICAgICBbSlNDXSBSZXVzZSBrbm93biByZWdpc3RlciB2YWx1ZXMg
b24gQVJNdjcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIzNzIwNworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IFNldCB1cCBhIENhY2hlZFRlbXBSZWdpc3RlciBmb3IgZWFjaCBvZiBhZGRyZXNzVGVtcFJlZ2lz
dGVyLAorICAgICAgICBkYXRhVGVtcFJlZ2lzdGVyIG9uIEFSTXY3IGFuZCB1c2UgdGhlbSB0byBn
ZW5lcmF0ZSBzaG9ydGVyIGluc3RydWN0aW9uCisgICAgICAgIHNlcXVlbmNlcyB3aGVuIHBvc3Np
YmxlLgorCisgICAgICAgIFNhdmVzIDEuNS0yJSBvZiBjb2RlIHNpemUgb24gSlMyIHdpdGggbm8g
bWVhc3VyYWJsZSBkaWZmZXJlbmNlIGluCisgICAgICAgIHBlcmZvcm1hbmNlLgorCisgICAgICAg
ICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QWJz
dHJhY3RNYWNyb0Fzc2VtYmxlcjo6Q2FjaGVkVGVtcFJlZ2lzdGVyOjp2YWx1ZSk6CisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuY3BwOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlcjo6cHJvYmUpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TXY3Lmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Ok1hY3JvQXNzZW1ibGVy
QVJNdjcpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjphZGQzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmdldEVmZmVjdGl2ZUFkZHJlc3MpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjphZGQ2NCk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6OmxzaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk12Nzo6bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojpyc2hp
ZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnVyc2hpZnQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmxvYWQzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmxvYWQxNik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6OmxvYWQxNlNpZ25lZEV4dGVuZFRvMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTXY3Ojpsb2FkOCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6
OmxvYWQ4U2lnbmVkRXh0ZW5kVG8zMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
djc6OmxvYWRQYWlyMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpzdG9y
ZTgpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpzdG9yZVBhaXIzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmxvYWREb3VibGUpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojpsb2FkRmxvYXQpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTXY3OjpzdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6OnN0b3JlRmxvYXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3
OjpicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTXY3OjpicmFuY2hDb252ZXJ0RG91YmxlVG9JbnQzMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNdjc6OmxvbmdfbW92ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNdjc6OnNob3J0X21vdmUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3
Ojptb3ZlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6Y29tcGFyZTMyQW5k
U2V0RmxhZ3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpicmFuY2g4KToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6YnJhbmNoVGVzdDgpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpicmFuY2hUZXN0MTYpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpmYXJKdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk12Nzo6YnJhbmNoTXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TXY3OjpuZWFyQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Om5lYXJU
YWlsQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OmNhbGwpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3Ojpjb21wYXJlOCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNdjc6OnRlc3Q4KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk12Nzo6anVtcCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Om1ha2VC
cmFuY2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpzZXR1cEFybUFkZHJl
c3MpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjptYWtlQmFzZUluZGV4QmFz
ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Om1vdmVGaXhlZFdpZHRoRW5j
b2RpbmcpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTXY3OjpjYWNoZWREYXRhVGVt
cFJlZ2lzdGVyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6Y2FjaGVkQWRk
cmVzc1RlbXBSZWdpc3Rlcik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNdjc6Omdl
dENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTXY3OjpnZXRDYWNoZWRBZGRyZXNzVGVtcFJlZ2lzdGVySURBbmRJbnZh
bGlkYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9DYWxsTGlua0luZm8uY3BwOgorICAgICAgICAo
SlNDOjpDYWxsTGlua0luZm86OmVtaXRGYXN0UGF0aEltcGwpOgorCiAyMDIyLTAyLTI0ICBDaHJp
cyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgW0NvY29hXSBPbmx5IGNsZWFy
IElDVSBjYWNoZSB3aGVuIHRpbWUgem9uZSBpcyBjaGFuZ2VkCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCmluZGV4
IDg5N2M1M2Y2NDMwYWEyNWVkNjhmMjVmMGJkN2RkNTk2YmM1ZDg4MjAuLjJhZjliYjkwNWFkZTMx
OTBlNDZlNTZkYTYwMzI3MjQwMGEwOGE1NGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCkBAIC0xMDcyLDcg
KzEwNzIsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICAgICAgQUxXQVlTX0lOTElORSBSZWdpc3RlcklE
IHJlZ2lzdGVySUROb0ludmFsaWRhdGUoKSB7IHJldHVybiBtX3JlZ2lzdGVySUQ7IH0KIAotICAg
ICAgICBib29sIHZhbHVlKGludHB0cl90JiB2YWx1ZSkKKyAgICAgICAgV0FSTl9VTlVTRURfUkVU
VVJOIGJvb2wgdmFsdWUoaW50cHRyX3QmIHZhbHVlKQogICAgICAgICB7CiAgICAgICAgICAgICB2
YWx1ZSA9IG1fdmFsdWU7CiAgICAgICAgICAgICByZXR1cm4gbV9tYXNtLT5pc1RlbXBSZWdpc3Rl
clZhbGlkKG1fdmFsaWRCaXQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5jcHAKaW5kZXggZjc1ZjRkMDk1NGRiNGYzNjMz
OTFjMTllZGZiMjA2MTFmODk4YTk4Ny4uYWVjMGU0ZjE5ZTVkN2QzMzcwNDVhMmNiOTU3MDEzNzUx
NWM1MDA0OSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTXY3LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyQVJNdjcuY3BwCkBAIC0zNzIsNiArMzcyLDcgQEAgdm9pZCBNYWNyb0Fz
c2VtYmxlcjo6cHJvYmUoUHJvYmU6OkZ1bmN0aW9uIGZ1bmN0aW9uLCB2b2lkKiBhcmcpCiAgICAg
c3RvcmUzMihsciwgQWRkcmVzcyhzcCwgb2Zmc2V0b2YoSW5jb21pbmdSZWNvcmQsIGxyKSkpOwog
ICAgIHN0b3JlMzIoaXAsIEFkZHJlc3Moc3AsIG9mZnNldG9mKEluY29taW5nUmVjb3JkLCBpcCkp
KTsKICAgICBtX2Fzc2VtYmxlci5tcnMoaXAsIGFwc3IpOworICAgIGNhY2hlZERhdGFUZW1wUmVn
aXN0ZXIoKS5pbnZhbGlkYXRlKCk7CiAgICAgc3RvcmUzMihpcCwgQWRkcmVzcyhzcCwgb2Zmc2V0
b2YoSW5jb21pbmdSZWNvcmQsIGFwc3IpKSk7CiAgICAgc3RvcmUzMihyMCwgQWRkcmVzcyhzcCwg
b2Zmc2V0b2YoSW5jb21pbmdSZWNvcmQsIHIwKSkpOwogICAgIHN0b3JlMzIocjEsIEFkZHJlc3Mo
c3AsIG9mZnNldG9mKEluY29taW5nUmVjb3JkLCByMSkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKaW5kZXggY2QxMjlm
NmQ5YTg3ZTA2OWFlY2ZhNDI0YWZlNzBmMGYxMTVjZDE0NS4uMjhmNzlhYTdmMWU1ZjU1NGFmNmUy
OGQ3ODFhNzRhMGY3NmIyNjlhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3LmgKQEAgLTYzLDYgKzYzLDggQEAgcHVibGlj
OgogCiAgICAgTWFjcm9Bc3NlbWJsZXJBUk12NygpCiAgICAgICAgIDogbV9tYWtlSnVtcFBhdGNo
YWJsZShmYWxzZSkKKyAgICAgICAgLCBtX2NhY2hlZERhdGFUZW1wUmVnaXN0ZXIodGhpcywgZGF0
YVRlbXBSZWdpc3RlcikKKyAgICAgICAgLCBtX2NhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXIodGhp
cywgYWRkcmVzc1RlbXBSZWdpc3RlcikKICAgICB7CiAgICAgfQogCkBAIC0xOTMsOCArMTk1LDkg
QEAgcHVibGljOgogICAgIHsKICAgICAgICAgLy8gQXZvaWQgdW5wcmVkaWN0YWJsZSBpbnN0cnVj
dGlvbiBpZiB0aGUgZGVzdGluYXRpb24gaXMgdGhlIHN0YWNrIHBvaW50ZXIKICAgICAgICAgaWYg
KGRlc3QgPT0gQVJNUmVnaXN0ZXJzOjpzcCAmJiBzcmMgIT0gZGVzdCkgewotICAgICAgICAgICAg
YWRkMzIoaW1tLCBzcmMsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOwotICAgICAgICAgICAgbW92ZShh
ZGRyZXNzVGVtcFJlZ2lzdGVyLCBkZXN0KTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRj
aCA9IGdldENhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAg
ICAgICAgIGFkZDMyKGltbSwgc3JjLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIG1vdmUoc2NyYXRj
aCwgZGVzdCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIApAQCAtMjIyLDYgKzIy
NSw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKICAgICB7CisgICAgICAgIC8vIGxvYWQzMiB3aWxsIGludmFsaWRhdGUgdGhlIGNhY2hl
ZERhdGFUZW1wUmVnaXN0ZXIoKSBmb3IgdXMKICAgICAgICAgbG9hZDMyKHNyYywgZGF0YVRlbXBS
ZWdpc3Rlcik7CiAgICAgICAgIGFkZDMyKGRhdGFUZW1wUmVnaXN0ZXIsIGRlc3QpOwogICAgIH0K
QEAgLTIzNCw4ICsyMzgsOSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGdldEVmZmVjdGl2ZUFkZHJl
c3MoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIG1f
YXNzZW1ibGVyLmxzbChhZGRyZXNzVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmluZGV4LCBzdGF0aWNf
Y2FzdDxpbnQ+KGFkZHJlc3Muc2NhbGUpKTsKLSAgICAgICAgbV9hc3NlbWJsZXIuYWRkKGRlc3Qs
IGFkZHJlc3MuYmFzZSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIFJlZ2lzdGVySUQg
c2NyYXRjaCA9IGdldENhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIubHNsKHNjcmF0Y2gsIGFkZHJlc3MuaW5kZXgsIHN0YXRpY19j
YXN0PGludD4oYWRkcmVzcy5zY2FsZSkpOworICAgICAgICBtX2Fzc2VtYmxlci5hZGQoZGVzdCwg
YWRkcmVzcy5iYXNlLCBzY3JhdGNoKTsKICAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0KQogICAg
ICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKGFkZHJlc3Mub2Zmc2V0KSwgZGVzdCk7CiAgICAg
fQpAQCAtMjQ3LDIyICsyNTIsMjMgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkNjQoVHJ1
c3RlZEltbTMyIGltbSwgQWJzb2x1dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgeworICAgICAgICBS
ZWdpc3RlcklEIHNjcmF0Y2ggPSBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlk
YXRlKCk7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgYWRkcmVz
c1RlbXBSZWdpc3Rlcik7CiAKLSAgICAgICAgbV9hc3NlbWJsZXIubGRyKGRhdGFUZW1wUmVnaXN0
ZXIsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDEyKDAp
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyKHNjcmF0Y2gsIGFkZHJlc3NUZW1wUmVnaXN0ZXIs
IEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDEyKDApKTsKICAgICAgICAgQVJNVGh1bWJJbW1l
ZGlhdGUgYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VFbmNvZGVkSW1tKGltbS5tX3Zh
bHVlKTsKICAgICAgICAgaWYgKGFybUltbS5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBhcm1JbW0pOwor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkX1Moc2NyYXRjaCwgc2NyYXRjaCwgYXJtSW1tKTsK
ICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICBtb3ZlKGltbSwgYWRkcmVzc1RlbXBSZWdpc3Rl
cik7Ci0gICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRfUyhkYXRhVGVtcFJlZ2lzdGVyLCBkYXRh
VGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmFkZF9TKHNjcmF0Y2gsIHNjcmF0Y2gsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOwogICAgICAg
ICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MubV9wdHIpLCBhZGRyZXNzVGVtcFJlZ2lz
dGVyKTsKICAgICAgICAgfQotICAgICAgICBtX2Fzc2VtYmxlci5zdHIoZGF0YVRlbXBSZWdpc3Rl
ciwgYWRkcmVzc1RlbXBSZWdpc3RlciwgQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTIoMCkp
OworICAgICAgICBtX2Fzc2VtYmxlci5zdHIoc2NyYXRjaCwgYWRkcmVzc1RlbXBSZWdpc3Rlciwg
QVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTIoMCkpOwogCi0gICAgICAgIG1fYXNzZW1ibGVy
LmxkcihkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBBUk1UaHVtYkltbWVk
aWF0ZTo6bWFrZVVJbnQxMig0KSk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmFkYyhkYXRhVGVtcFJl
Z2lzdGVyLCBkYXRhVGVtcFJlZ2lzdGVyLCBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJ
bW0oaW1tLm1fdmFsdWUgPj4gMzEpKTsKLSAgICAgICAgbV9hc3NlbWJsZXIuc3RyKGRhdGFUZW1w
UmVnaXN0ZXIsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUlu
dDEyKDQpKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyKHNjcmF0Y2gsIGFkZHJlc3NUZW1wUmVn
aXN0ZXIsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDEyKDQpKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYWRjKHNjcmF0Y2gsIHNjcmF0Y2gsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlRW5jb2Rl
ZEltbShpbW0ubV92YWx1ZSA+PiAzMSkpOworICAgICAgICBtX2Fzc2VtYmxlci5zdHIoc2NyYXRj
aCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTIoNCkp
OwogICAgIH0KIAogICAgIHZvaWQgYW5kMTYoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
QEAgLTMxNywxMiArMzIzLDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
CisgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJ
REFuZEludmFsaWRhdGUoKTsKICAgICAgICAgLy8gQ2xhbXAgdGhlIHNoaWZ0IHRvIHRoZSByYW5n
ZSAwLi4zMQogICAgICAgICBBUk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVk
aWF0ZTo6bWFrZUVuY29kZWRJbW0oMHgxZik7CiAgICAgICAgIEFTU0VSVChhcm1JbW0uaXNWYWxp
ZCgpKTsKLSAgICAgICAgbV9hc3NlbWJsZXIuQVJNX2FuZChkYXRhVGVtcFJlZ2lzdGVyLCBzaGlm
dEFtb3VudCwgYXJtSW1tKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuQVJNX2FuZChzY3JhdGNoLCBz
aGlmdEFtb3VudCwgYXJtSW1tKTsKIAotICAgICAgICBtX2Fzc2VtYmxlci5sc2woZGVzdCwgc3Jj
LCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubHNsKGRlc3QsIHNyYywg
c2NyYXRjaCk7CiAgICAgfQogCiAgICAgdm9pZCBsc2hpZnQzMihSZWdpc3RlcklEIHNyYywgVHJ1
c3RlZEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMzQyLDE3ICszNDksMjAgQEAgcHVi
bGljOgogCiAgICAgdm9pZCBtdWwzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIuc211bGwoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlciwg
ZGVzdCwgc3JjKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gZ2V0Q2FjaGVkRGF0YVRl
bXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICBtX2Fzc2VtYmxlci5zbXVsbChk
ZXN0LCBzY3JhdGNoLCBkZXN0LCBzcmMpOwogICAgIH0KIAogICAgIHZvaWQgbXVsMzIoUmVnaXN0
ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAg
ICAgICBtX2Fzc2VtYmxlci5zbXVsbChkZXN0LCBkYXRhVGVtcFJlZ2lzdGVyLCBsZWZ0LCByaWdo
dCk7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0
ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuc211bGwoZGVzdCwgc2Ny
YXRjaCwgbGVmdCwgcmlnaHQpOwogICAgIH0KIAogICAgIHZvaWQgbXVsMzIoVHJ1c3RlZEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIG1v
dmUoaW1tLCBkYXRhVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgY2FjaGVkRGF0YVRlbXBSZWdpc3Rl
cigpLmludmFsaWRhdGUoKTsKICAgICAgICAgbV9hc3NlbWJsZXIuc211bGwoZGVzdCwgZGF0YVRl
bXBSZWdpc3Rlciwgc3JjLCBkYXRhVGVtcFJlZ2lzdGVyKTsKICAgICB9CiAKQEAgLTQ3NywxMiAr
NDg3LDEzIEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgc2hpZnRBbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyYXRjaCA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRh
dGUoKTsKICAgICAgICAgLy8gQ2xhbXAgdGhlIHNoaWZ0IHRvIHRoZSByYW5nZSAwLi4zMQogICAg
ICAgICBBUk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVu
Y29kZWRJbW0oMHgxZik7CiAgICAgICAgIEFTU0VSVChhcm1JbW0uaXNWYWxpZCgpKTsKLSAgICAg
ICAgbV9hc3NlbWJsZXIuQVJNX2FuZChkYXRhVGVtcFJlZ2lzdGVyLCBzaGlmdEFtb3VudCwgYXJt
SW1tKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuQVJNX2FuZChzY3JhdGNoLCBzaGlmdEFtb3VudCwg
YXJtSW1tKTsKIAotICAgICAgICBtX2Fzc2VtYmxlci5hc3IoZGVzdCwgc3JjLCBkYXRhVGVtcFJl
Z2lzdGVyKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuYXNyKGRlc3QsIHNyYywgc2NyYXRjaCk7CiAg
ICAgfQogCiAgICAgdm9pZCByc2hpZnQzMihSZWdpc3RlcklEIHNyYywgVHJ1c3RlZEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtNTA1LDEyICs1MTYsMTMgQEAgcHVibGljOgogCiAgICAg
dm9pZCB1cnNoaWZ0MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgc2hpZnRBbW91bnQsIFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7CisgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IGdldENh
Y2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKICAgICAgICAgLy8gQ2xhbXAg
dGhlIHNoaWZ0IHRvIHRoZSByYW5nZSAwLi4zMQogICAgICAgICBBUk1UaHVtYkltbWVkaWF0ZSBh
cm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJbW0oMHgxZik7CiAgICAgICAg
IEFTU0VSVChhcm1JbW0uaXNWYWxpZCgpKTsKLSAgICAgICAgbV9hc3NlbWJsZXIuQVJNX2FuZChk
YXRhVGVtcFJlZ2lzdGVyLCBzaGlmdEFtb3VudCwgYXJtSW1tKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuQVJNX2FuZChzY3JhdGNoLCBzaGlmdEFtb3VudCwgYXJtSW1tKTsKICAgICAgICAgCi0gICAg
ICAgIG1fYXNzZW1ibGVyLmxzcihkZXN0LCBzcmMsIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAg
ICBtX2Fzc2VtYmxlci5sc3IoZGVzdCwgc3JjLCBzY3JhdGNoKTsKICAgICB9CiAgICAgCiAgICAg
dm9pZCB1cnNoaWZ0MzIoUmVnaXN0ZXJJRCBzcmMsIFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKQEAgLTY1OCw2ICs2NzAsMTEgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICB2b2lk
IGxvYWQzMihBcm1BZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CisgICAg
ICAgIGlmIChkZXN0ID09IGFkZHJlc3NUZW1wUmVnaXN0ZXIpCisgICAgICAgICAgICBjYWNoZWRB
ZGRyZXNzVGVtcFJlZ2lzdGVyKCkuaW52YWxpZGF0ZSgpOworICAgICAgICBlbHNlIGlmIChkZXN0
ID09IGRhdGFUZW1wUmVnaXN0ZXIpCisgICAgICAgICAgICBjYWNoZWREYXRhVGVtcFJlZ2lzdGVy
KCkuaW52YWxpZGF0ZSgpOworCiAgICAgICAgIGlmIChhZGRyZXNzLnR5cGUgPT0gQXJtQWRkcmVz
czo6SGFzSW5kZXgpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHIoZGVzdCwgYWRkcmVzcy5i
YXNlLCBhZGRyZXNzLnUuaW5kZXgsIGFkZHJlc3MudS5zY2FsZSk7CiAgICAgICAgIGVsc2UgaWYg
KGFkZHJlc3MudS5vZmZzZXQgPj0gMCkgewpAQCAtNjcyLDYgKzY4OSwxMSBAQCBwcml2YXRlOgog
CiAgICAgdm9pZCBsb2FkMTYoQXJtQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCiAg
ICAgeworICAgICAgICBpZiAoZGVzdCA9PSBhZGRyZXNzVGVtcFJlZ2lzdGVyKQorICAgICAgICAg
ICAgY2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcigpLmludmFsaWRhdGUoKTsKKyAgICAgICAgZWxz
ZSBpZiAoZGVzdCA9PSBkYXRhVGVtcFJlZ2lzdGVyKQorICAgICAgICAgICAgY2FjaGVkRGF0YVRl
bXBSZWdpc3RlcigpLmludmFsaWRhdGUoKTsKKwogICAgICAgICBpZiAoYWRkcmVzcy50eXBlID09
IEFybUFkZHJlc3M6Okhhc0luZGV4KQogICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyaChkZXN0
LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MudS5pbmRleCwgYWRkcmVzcy51LnNjYWxlKTsKICAgICAg
ICAgZWxzZSBpZiAoYWRkcmVzcy51Lm9mZnNldCA+PSAwKSB7CkBAIC02ODcsMTEgKzcwOSwyMSBA
QCBwcml2YXRlOgogICAgIHZvaWQgbG9hZDE2U2lnbmVkRXh0ZW5kVG8zMihBcm1BZGRyZXNzIGFk
ZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChhZGRyZXNzLnR5
cGUgPT0gQXJtQWRkcmVzczo6SGFzSW5kZXgpOworICAgICAgICBpZiAoZGVzdCA9PSBhZGRyZXNz
VGVtcFJlZ2lzdGVyKQorICAgICAgICAgICAgY2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcigpLmlu
dmFsaWRhdGUoKTsKKyAgICAgICAgZWxzZSBpZiAoZGVzdCA9PSBkYXRhVGVtcFJlZ2lzdGVyKQor
ICAgICAgICAgICAgY2FjaGVkRGF0YVRlbXBSZWdpc3RlcigpLmludmFsaWRhdGUoKTsKKwogICAg
ICAgICBtX2Fzc2VtYmxlci5sZHJzaChkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MudS5pbmRl
eCwgYWRkcmVzcy51LnNjYWxlKTsKICAgICB9CiAKICAgICB2b2lkIGxvYWQ4KEFybUFkZHJlc3Mg
YWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKKyAgICAgICAgaWYgKGRlc3QgPT0gYWRk
cmVzc1RlbXBSZWdpc3RlcikKKyAgICAgICAgICAgIGNhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXIo
KS5pbnZhbGlkYXRlKCk7CisgICAgICAgIGVsc2UgaWYgKGRlc3QgPT0gZGF0YVRlbXBSZWdpc3Rl
cikKKyAgICAgICAgICAgIGNhY2hlZERhdGFUZW1wUmVnaXN0ZXIoKS5pbnZhbGlkYXRlKCk7CisK
ICAgICAgICAgaWYgKGFkZHJlc3MudHlwZSA9PSBBcm1BZGRyZXNzOjpIYXNJbmRleCkKICAgICAg
ICAgICAgIG1fYXNzZW1ibGVyLmxkcmIoZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLnUuaW5k
ZXgsIGFkZHJlc3MudS5zY2FsZSk7CiAgICAgICAgIGVsc2UgaWYgKGFkZHJlc3MudS5vZmZzZXQg
Pj0gMCkgewpAQCAtNzA3LDYgKzczOSwxMSBAQCBwcml2YXRlOgogICAgIHZvaWQgbG9hZDhTaWdu
ZWRFeHRlbmRUbzMyKEFybUFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsK
ICAgICAgICAgQVNTRVJUKGFkZHJlc3MudHlwZSA9PSBBcm1BZGRyZXNzOjpIYXNJbmRleCk7Cisg
ICAgICAgIGlmIChkZXN0ID09IGFkZHJlc3NUZW1wUmVnaXN0ZXIpCisgICAgICAgICAgICBjYWNo
ZWRBZGRyZXNzVGVtcFJlZ2lzdGVyKCkuaW52YWxpZGF0ZSgpOworICAgICAgICBlbHNlIGlmIChk
ZXN0ID09IGRhdGFUZW1wUmVnaXN0ZXIpCisgICAgICAgICAgICBjYWNoZWREYXRhVGVtcFJlZ2lz
dGVyKCkuaW52YWxpZGF0ZSgpOworCiAgICAgICAgIG1fYXNzZW1ibGVyLmxkcnNiKGRlc3QsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy51LmluZGV4LCBhZGRyZXNzLnUuc2NhbGUpOwogICAgIH0KIApA
QCAtNzc5LDYgKzgxNiw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihhZGRyZXNzKSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CiAgICAgICAgIG1fYXNzZW1ibGVy
LmxkcihkZXN0LCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJ
bnQxNigwKSk7CisgICAgICAgIGNhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXIoKS5pbnZhbGlkYXRl
KCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgYWJvcnRXaXRoUmVhc29uKEFib3J0UmVhc29uIHJl
YXNvbikKQEAgLTg3NSw5ICs5MTMsMTMgQEAgcHVibGljOgogICAgICAgICBpbnQzMl90IGFic09m
ZnNldCA9IGFkZHJlc3Mub2Zmc2V0OwogICAgICAgICBpZiAoYWJzT2Zmc2V0IDwgMCkKICAgICAg
ICAgICAgIGFic09mZnNldCA9IC1hYnNPZmZzZXQ7Ci0gICAgICAgIGlmICghKGFic09mZnNldCAm
IH4weDNmYykpCisgICAgICAgIGlmICghKGFic09mZnNldCAmIH4weDNmYykpIHsKKyAgICAgICAg
ICAgIGlmICgoZGVzdDEgPT0gYWRkcmVzc1RlbXBSZWdpc3RlcikgfHwgKGRlc3QyID09IGFkZHJl
c3NUZW1wUmVnaXN0ZXIpKQorICAgICAgICAgICAgICAgIGNhY2hlZEFkZHJlc3NUZW1wUmVnaXN0
ZXIoKS5pbnZhbGlkYXRlKCk7CisgICAgICAgICAgICBpZiAoKGRlc3QxID09IGRhdGFUZW1wUmVn
aXN0ZXIpIHx8IChkZXN0MiA9PSBkYXRhVGVtcFJlZ2lzdGVyKSkKKyAgICAgICAgICAgICAgICBj
YWNoZWREYXRhVGVtcFJlZ2lzdGVyKCkuaW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgbV9hc3Nl
bWJsZXIubGRyZChkZXN0MSwgZGVzdDIsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQsIC8q
IGluZGV4OiAqLyB0cnVlLCAvKiB3YmFjazogKi8gZmFsc2UpOwotICAgICAgICBlbHNlIGlmIChh
ZGRyZXNzLmJhc2UgPT0gZGVzdDEpIHsKKyAgICAgICAgfSBlbHNlIGlmIChhZGRyZXNzLmJhc2Ug
PT0gZGVzdDEpIHsKICAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLndpdGhPZmZzZXQoNCksIGRl
c3QyKTsKICAgICAgICAgICAgIGxvYWQzMihhZGRyZXNzLCBkZXN0MSk7CiAgICAgICAgIH0gZWxz
ZSB7CkBAIC05NTIsOCArOTk0LDkgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgc3RvcmU4KFJl
Z2lzdGVySUQgc3JjLCBjb25zdCB2b2lkICphZGRyZXNzKQogICAgIHsKLSAgICAgICAgbW92ZShU
cnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgc3Rv
cmU4KHNyYywgQXJtQWRkcmVzcyhhZGRyZXNzVGVtcFJlZ2lzdGVyLCAwKSk7CisgICAgICAgIFJl
Z2lzdGVySUQgc2NyYXRjaCA9IGdldENhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKTsKKyAgICAgICAgbW92ZShUcnVzdGVkSW1tUHRyKGFkZHJlc3MpLCBzY3JhdGNoKTsK
KyAgICAgICAgc3RvcmU4KHNyYywgQXJtQWRkcmVzcyhzY3JhdGNoLCAwKSk7CiAgICAgfQogICAg
IAogICAgIHZvaWQgc3RvcmU4KFRydXN0ZWRJbW0zMiBpbW0sIGNvbnN0IHZvaWQgKmFkZHJlc3Mp
CkBAIC0xMDIzLDE0ICsxMDY2LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHN0b3JlUGFpcjMyKFJl
Z2lzdGVySUQgc3JjMSwgUmVnaXN0ZXJJRCBzcmMyLCBCYXNlSW5kZXggYWRkcmVzcykKICAgICB7
CiAgICAgICAgIEFTU0VSVChzcmMxICE9IGRhdGFUZW1wUmVnaXN0ZXIgJiYgc3JjMiAhPSBkYXRh
VGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gZ2V0Q2FjaGVkRGF0
YVRlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOwogICAgICAgICAvLyBUaGUgJ2FkZHJlc3NU
ZW1wUmVnaXN0ZXInIG1pZ2h0IGJlIHVzZWQgd2hlbiB0aGUgb2Zmc2V0IGlzIHdpZGUsIHNvIHVz
ZSAnZGF0YVRlbXBSZWdpc3RlcicKICAgICAgICAgaWYgKGFkZHJlc3Muc2NhbGUgPT0gVGltZXNP
bmUpCi0gICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLmluZGV4KTsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZChzY3Jh
dGNoLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgpOwogICAgICAgICBlbHNlIHsKICAgICAg
ICAgICAgIFNoaWZ0VHlwZUFuZEFtb3VudCBzaGlmdCB7IEFSTVNoaWZ0VHlwZTo6U1JUeXBlX0xT
TCwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGFkZHJlc3Muc2NhbGUpIH07Ci0gICAgICAgICAgICBt
X2Fzc2VtYmxlci5hZGQoZGF0YVRlbXBSZWdpc3RlciwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLmlu
ZGV4LCBzaGlmdCk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGQoc2NyYXRjaCwgYWRkcmVz
cy5iYXNlLCBhZGRyZXNzLmluZGV4LCBzaGlmdCk7CiAgICAgICAgIH0KLSAgICAgICAgc3RvcmVQ
YWlyMzIoc3JjMSwgc3JjMiwgQWRkcmVzcyhkYXRhVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNl
dCkpOworICAgICAgICBzdG9yZVBhaXIzMihzcmMxLCBzcmMyLCBBZGRyZXNzKHNjcmF0Y2gsIGFk
ZHJlc3Mub2Zmc2V0KSk7CiAgICAgfQogCiAgICAgdm9pZCBzdG9yZVBhaXIzMihSZWdpc3RlcklE
IHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwgY29uc3Qgdm9pZCogYWRkcmVzcykKQEAgLTEwODMsOCAr
MTEyNyw5IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBBcm0gdmZwIGFkZHJlc3NlcyBjYW4gYmUg
b2Zmc2V0IGJ5IGEgOS1iaXQgb25lcy1jb21wIGltbWVkaWF0ZSwgbGVmdCBzaGlmdGVkIGJ5IDIu
CiAgICAgICAgIGlmICgob2Zmc2V0ICYgMykgfHwgKG9mZnNldCA+ICgyNTUgKiA0KSkgfHwgKG9m
ZnNldCA8IC0oMjU1ICogNCkpKSB7Ci0gICAgICAgICAgICBhZGQzMihUcnVzdGVkSW1tMzIob2Zm
c2V0KSwgYmFzZSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7Ci0gICAgICAgICAgICBiYXNlID0gYWRk
cmVzc1RlbXBSZWdpc3RlcjsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IGdldENh
Y2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAgICAgIGFk
ZDMyKFRydXN0ZWRJbW0zMihvZmZzZXQpLCBiYXNlLCBzY3JhdGNoKTsKKyAgICAgICAgICAgIGJh
c2UgPSBzY3JhdGNoOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAgICAgICAgfQogICAgICAg
ICAKQEAgLTEwOTgsOCArMTE0Myw5IEBAIHB1YmxpYzoKIAogICAgICAgICAvLyBBcm0gdmZwIGFk
ZHJlc3NlcyBjYW4gYmUgb2Zmc2V0IGJ5IGEgOS1iaXQgb25lcy1jb21wIGltbWVkaWF0ZSwgbGVm
dCBzaGlmdGVkIGJ5IDIuCiAgICAgICAgIGlmICgob2Zmc2V0ICYgMykgfHwgKG9mZnNldCA+ICgy
NTUgKiA0KSkgfHwgKG9mZnNldCA8IC0oMjU1ICogNCkpKSB7Ci0gICAgICAgICAgICBhZGQzMihU
cnVzdGVkSW1tMzIob2Zmc2V0KSwgYmFzZSwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7Ci0gICAgICAg
ICAgICBiYXNlID0gYWRkcmVzc1RlbXBSZWdpc3RlcjsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQg
c2NyYXRjaCA9IGdldENhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsK
KyAgICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihvZmZzZXQpLCBiYXNlLCBzY3JhdGNoKTsK
KyAgICAgICAgICAgIGJhc2UgPSBzY3JhdGNoOwogICAgICAgICAgICAgb2Zmc2V0ID0gMDsKICAg
ICAgICAgfQogICAgICAgICAKQEAgLTExMTEsNiArMTE1Nyw3IEBAIHB1YmxpYzoKICAgICAgICAg
bW92ZShhZGRyZXNzLmluZGV4LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKICAgICAgICAgbHNoaWZ0
MzIoVHJ1c3RlZEltbTMyKGFkZHJlc3Muc2NhbGUpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKICAg
ICAgICAgYWRkMzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAg
Y2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcigpLmludmFsaWRhdGUoKTsKICAgICAgICAgbG9hZERv
dWJsZShBZGRyZXNzKGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGFkZHJlc3Mub2Zmc2V0KSwgZGVzdCk7
CiAgICAgfQogICAgIApAQCAtMTExOSw2ICsxMTY2LDcgQEAgcHVibGljOgogICAgICAgICBtb3Zl
KGFkZHJlc3MuaW5kZXgsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOwogICAgICAgICBsc2hpZnQzMihU
cnVzdGVkSW1tMzIoYWRkcmVzcy5zY2FsZSksIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOwogICAgICAg
ICBhZGQzMihhZGRyZXNzLmJhc2UsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBjYWNo
ZWRBZGRyZXNzVGVtcFJlZ2lzdGVyKCkuaW52YWxpZGF0ZSgpOwogICAgICAgICBsb2FkRmxvYXQo
QWRkcmVzcyhhZGRyZXNzVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLm9mZnNldCksIGRlc3QpOwogICAg
IH0KIApAQCAtMTE1Miw4ICsxMjAwLDkgQEAgcHVibGljOgogCiAgICAgICAgIC8vIEFybSB2ZnAg
YWRkcmVzc2VzIGNhbiBiZSBvZmZzZXQgYnkgYSA5LWJpdCBvbmVzLWNvbXAgaW1tZWRpYXRlLCBs
ZWZ0IHNoaWZ0ZWQgYnkgMi4KICAgICAgICAgaWYgKChvZmZzZXQgJiAzKSB8fCAob2Zmc2V0ID4g
KDI1NSAqIDQpKSB8fCAob2Zmc2V0IDwgLSgyNTUgKiA0KSkpIHsKLSAgICAgICAgICAgIGFkZDMy
KFRydXN0ZWRJbW0zMihvZmZzZXQpLCBiYXNlLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKLSAgICAg
ICAgICAgIGJhc2UgPSBhZGRyZXNzVGVtcFJlZ2lzdGVyOworICAgICAgICAgICAgUmVnaXN0ZXJJ
RCBzY3JhdGNoID0gZ2V0Q2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgp
OworICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG9mZnNldCksIGJhc2UsIHNjcmF0Y2gp
OworICAgICAgICAgICAgYmFzZSA9IHNjcmF0Y2g7CiAgICAgICAgICAgICBvZmZzZXQgPSAwOwog
ICAgICAgICB9CiAgICAgICAgIApAQCAtMTE2Nyw4ICsxMjE2LDkgQEAgcHVibGljOgogCiAgICAg
ICAgIC8vIEFybSB2ZnAgYWRkcmVzc2VzIGNhbiBiZSBvZmZzZXQgYnkgYSA5LWJpdCBvbmVzLWNv
bXAgaW1tZWRpYXRlLCBsZWZ0IHNoaWZ0ZWQgYnkgMi4KICAgICAgICAgaWYgKChvZmZzZXQgJiAz
KSB8fCAob2Zmc2V0ID4gKDI1NSAqIDQpKSB8fCAob2Zmc2V0IDwgLSgyNTUgKiA0KSkpIHsKLSAg
ICAgICAgICAgIGFkZDMyKFRydXN0ZWRJbW0zMihvZmZzZXQpLCBiYXNlLCBhZGRyZXNzVGVtcFJl
Z2lzdGVyKTsKLSAgICAgICAgICAgIGJhc2UgPSBhZGRyZXNzVGVtcFJlZ2lzdGVyOworICAgICAg
ICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gZ2V0Q2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcklE
QW5kSW52YWxpZGF0ZSgpOworICAgICAgICAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKG9mZnNldCks
IGJhc2UsIHNjcmF0Y2gpOworICAgICAgICAgICAgYmFzZSA9IHNjcmF0Y2g7CiAgICAgICAgICAg
ICBvZmZzZXQgPSAwOwogICAgICAgICB9CiAgICAgICAgIApAQCAtMTE4Niw2ICsxMjM2LDcgQEAg
cHVibGljOgogICAgICAgICBtb3ZlKGFkZHJlc3MuaW5kZXgsIGFkZHJlc3NUZW1wUmVnaXN0ZXIp
OwogICAgICAgICBsc2hpZnQzMihUcnVzdGVkSW1tMzIoYWRkcmVzcy5zY2FsZSksIGFkZHJlc3NU
ZW1wUmVnaXN0ZXIpOwogICAgICAgICBhZGQzMihhZGRyZXNzLmJhc2UsIGFkZHJlc3NUZW1wUmVn
aXN0ZXIpOworICAgICAgICBjYWNoZWRBZGRyZXNzVGVtcFJlZ2lzdGVyKCkuaW52YWxpZGF0ZSgp
OwogICAgICAgICBzdG9yZURvdWJsZShzcmMsIEFkZHJlc3MoYWRkcmVzc1RlbXBSZWdpc3Rlciwg
YWRkcmVzcy5vZmZzZXQpKTsKICAgICB9CiAgICAgCkBAIC0xMTk0LDYgKzEyNDUsNyBAQCBwdWJs
aWM6CiAgICAgICAgIG1vdmUoYWRkcmVzcy5pbmRleCwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CiAg
ICAgICAgIGxzaGlmdDMyKFRydXN0ZWRJbW0zMihhZGRyZXNzLnNjYWxlKSwgYWRkcmVzc1RlbXBS
ZWdpc3Rlcik7CiAgICAgICAgIGFkZDMyKGFkZHJlc3MuYmFzZSwgYWRkcmVzc1RlbXBSZWdpc3Rl
cik7CisgICAgICAgIGNhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXIoKS5pbnZhbGlkYXRlKCk7CiAg
ICAgICAgIHN0b3JlRmxvYXQoc3JjLCBBZGRyZXNzKGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGFkZHJl
c3Mub2Zmc2V0KSk7CiAgICAgfQogICAgIApAQCAtMTM2Myw2ICsxNDE1LDcgQEAgcHVibGljOgog
ICAgIGVudW0gQnJhbmNoVHJ1bmNhdGVUeXBlIHsgQnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCwgQnJh
bmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwgfTsKICAgICBKdW1wIGJyYW5jaFRydW5jYXRlRG91Ymxl
VG9JbnQzMihGUFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QsIEJyYW5jaFRydW5jYXRl
VHlwZSBicmFuY2hUeXBlID0gQnJhbmNoSWZUcnVuY2F0ZUZhaWxlZCkKICAgICB7CisgICAgICAg
IFJlZ2lzdGVySUQgc2NyYXRjaCA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFs
aWRhdGUoKTsKICAgICAgICAgLy8gQ29udmVydCBpbnRvIGRlc3QuCiAgICAgICAgIG1fYXNzZW1i
bGVyLnZjdnRfZmxvYXRpbmdQb2ludFRvU2lnbmVkKGZwVGVtcFJlZ2lzdGVyQXNTaW5nbGUoKSwg
c3JjKTsKICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihkZXN0LCBmcFRlbXBSZWdpc3RlckFzU2lu
Z2xlKCkpOwpAQCAtMTM3MCw4ICsxNDIzLDggQEAgcHVibGljOgogICAgICAgICAvLyBDYWxjdWxh
dGUgMnggZGVzdC4gIElmIHRoZSB2YWx1ZSBwb3RlbnRpYWxseSB1bmRlcmZsb3dlZCwgaXQgd2ls
bCBoYXZlCiAgICAgICAgIC8vIGNsYW1wZWQgdG8gMHg4MDAwMDAwMCwgc28gMnggZGVzdCBpcyB6
ZXJvIGluIHRoaXMgY2FzZS4gSW4gdGhlIGNhc2Ugb2YKICAgICAgICAgLy8gb3ZlcmZsb3cgdGhl
IHJlc3VsdCB3aWxsIGJlIGVxdWFsIHRvIC0yLgotICAgICAgICBKdW1wIHVuZGVyZmxvdyA9IGJy
YW5jaEFkZDMyKFplcm8sIGRlc3QsIGRlc3QsIGRhdGFUZW1wUmVnaXN0ZXIpOwotICAgICAgICBK
dW1wIG5vT3ZlcmZsb3cgPSBicmFuY2gzMihOb3RFcXVhbCwgZGF0YVRlbXBSZWdpc3RlciwgVHJ1
c3RlZEltbTMyKC0yKSk7CisgICAgICAgIEp1bXAgdW5kZXJmbG93ID0gYnJhbmNoQWRkMzIoWmVy
bywgZGVzdCwgZGVzdCwgc2NyYXRjaCk7CisgICAgICAgIEp1bXAgbm9PdmVyZmxvdyA9IGJyYW5j
aDMyKE5vdEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoLTIpKTsKIAogICAgICAgICAvLyBG
b3IgQnJhbmNoSWZUcnVuY2F0ZVN1Y2Nlc3NmdWwsIHdlIGJyYW5jaCBpZiAnbm9PdmVyZmxvdycg
anVtcHMuCiAgICAgICAgIHVuZGVyZmxvdy5saW5rKHRoaXMpOwpAQCAtMTQxNCw4ICsxNDY3LDkg
QEAgcHVibGljOgogICAgICAgICAvLyBUZXN0IGZvciBuZWdhdGl2ZSB6ZXJvLgogICAgICAgICBp
ZiAobmVnWmVyb0NoZWNrKSB7CiAgICAgICAgICAgICBKdW1wIHZhbHVlSXNOb25aZXJvID0gYnJh
bmNoVGVzdDMyKE5vblplcm8sIGRlc3QpOwotICAgICAgICAgICAgbV9hc3NlbWJsZXIudm1vdihk
YXRhVGVtcFJlZ2lzdGVyLCBBUk1SZWdpc3RlcnM6OmFzU2luZ2xlVXBwZXIoc3JjKSk7Ci0gICAg
ICAgICAgICBmYWlsdXJlQ2FzZXMuYXBwZW5kKGJyYW5jaDMyKExlc3NUaGFuLCBkYXRhVGVtcFJl
Z2lzdGVyLCBUcnVzdGVkSW1tMzIoMCkpKTsKKyAgICAgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRj
aCA9IGdldENhY2hlZERhdGFUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKKyAgICAgICAg
ICAgIG1fYXNzZW1ibGVyLnZtb3Yoc2NyYXRjaCwgQVJNUmVnaXN0ZXJzOjphc1NpbmdsZVVwcGVy
KHNyYykpOworICAgICAgICAgICAgZmFpbHVyZUNhc2VzLmFwcGVuZChicmFuY2gzMihMZXNzVGhh
biwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKDApKSk7CiAgICAgICAgICAgICB2YWx1ZUlzTm9uWmVy
by5saW5rKHRoaXMpOwogICAgICAgICB9CiAgICAgfQpAQCAtMTQ4Miw3ICsxNTM2LDM5IEBAIHB1
YmxpYzoKICAgICB7CiAgICAgICAgIG1fYXNzZW1ibGVyLnB1c2goMSA8PCBzcmMxIHwgMSA8PCBz
cmMyKTsKICAgICB9Ci0gICAgCisKKyAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbG9uZ19tb3ZlKFRy
dXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIHVpbnQzMl90
IHZhbHVlID0gaW1tLm1fdmFsdWU7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdihkZXN0LCBBUk1U
aHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNih2YWx1ZSkpOworICAgICAgICBpZiAodmFsdWUgJiAw
eGZmZmYwMDAwKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubW92dChkZXN0LCBBUk1UaHVtYklt
bWVkaWF0ZTo6bWFrZVVJbnQxNih2YWx1ZSA+PiAxNikpOworICAgIH0KKworICAgIGJvb2wgc2hv
cnRfbW92ZShSZWdpc3RlcklEIGRlc3QsIENhY2hlZFRlbXBSZWdpc3RlciYgY2FjaGVkUmVnaXN0
ZXIsIGludHB0cl90IHZhbHVlQXNJbnQpCisgICAgeworICAgICAgICBpbnRwdHJfdCBjdXJyZW50
UmVnaXN0ZXJDb250ZW50czsKKyAgICAgICAgaWYgKGNhY2hlZFJlZ2lzdGVyLnZhbHVlKGN1cnJl
bnRSZWdpc3RlckNvbnRlbnRzKSkgeworICAgICAgICAgICAgaW50cHRyX3QgdmFsdWVEZWx0YSA9
IHZhbHVlQXNJbnQgLSBjdXJyZW50UmVnaXN0ZXJDb250ZW50czsKKyAgICAgICAgICAgIGludHB0
cl90IHZhbHVlRGVsdGFTYXZlID0gdmFsdWVEZWx0YTsKKyAgICAgICAgICAgIGlmICh2YWx1ZURl
bHRhIDwgMCkgeworICAgICAgICAgICAgICAgIHZhbHVlRGVsdGEgPSAtdmFsdWVEZWx0YTsKKyAg
ICAgICAgICAgIH0gZWxzZSBpZiAoIXZhbHVlRGVsdGEpIHsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB2YWx1ZURlbHRhIGlzIDAsIG5vIG5lZWQgdG8gZW1pdCBvciB1cGRhdGUgYW55dGhpbmcuCisg
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBB
Uk1UaHVtYkltbWVkaWF0ZSBhcm1JbW0gPSBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZUVuY29kZWRJ
bW0odmFsdWVEZWx0YSk7CisgICAgICAgICAgICBpZiAoYXJtSW1tLmlzVmFsaWQoKSkgeworICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZURlbHRhU2F2ZSA+IDApCisgICAgICAgICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmFkZChkZXN0LCBkZXN0LCBhcm1JbW0pOworICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHZhbHVlRGVsdGFTYXZlIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuc3ViKGRlc3QsIGRlc3QsIGFybUltbSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0K
KwogICAgIC8vIFJlZ2lzdGVyIG1vdmUgb3BlcmF0aW9uczoKICAgICAvLwogICAgIC8vIE1vdmUg
dmFsdWVzIGluIHJlZ2lzdGVycy4KQEAgLTE0OTIsMjIgKzE1NzgsMzcgQEAgcHVibGljOgogICAg
ICAgICB1aW50MzJfdCB2YWx1ZSA9IGltbS5tX3ZhbHVlOwogCiAgICAgICAgIEFSTVRodW1iSW1t
ZWRpYXRlIGFybUltbSA9IEFSTVRodW1iSW1tZWRpYXRlOjptYWtlRW5jb2RlZEltbSh2YWx1ZSk7
CisgICAgICAgIGludHB0cl90IHZhbHVlQXNJbnQgPSByZWludGVycHJldF9jYXN0PGludHB0cl90
PihyZWludGVycHJldF9jYXN0PHZvaWQgKj4odmFsdWUpKTsKIAogICAgICAgICBpZiAoYXJtSW1t
LmlzVmFsaWQoKSkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdihkZXN0LCBhcm1JbW0pOwog
ICAgICAgICBlbHNlIGlmICgoYXJtSW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VFbmNvZGVk
SW1tKH52YWx1ZSkpLmlzVmFsaWQoKSkKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLm12bihkZXN0
LCBhcm1JbW0pOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdihk
ZXN0LCBBUk1UaHVtYkltbWVkaWF0ZTo6bWFrZVVJbnQxNih2YWx1ZSkpOwotICAgICAgICAgICAg
aWYgKHZhbHVlICYgMHhmZmZmMDAwMCkKLSAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3Z0
KGRlc3QsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDE2KHZhbHVlID4+IDE2KSk7CisgICAg
ICAgIGVsc2UgaWYgKGRlc3QgPT0gYWRkcmVzc1RlbXBSZWdpc3RlcikgeworICAgICAgICAgICAg
aWYgKCFzaG9ydF9tb3ZlKGRlc3QsIGNhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXIoKSwgdmFsdWVB
c0ludCkpCisgICAgICAgICAgICAgICAgbG9uZ19tb3ZlKGltbSwgZGVzdCk7CisgICAgICAgIH0g
ZWxzZSBpZiAoZGVzdCA9PSBkYXRhVGVtcFJlZ2lzdGVyKSB7CisgICAgICAgICAgICBpZiAoIXNo
b3J0X21vdmUoZGVzdCwgY2FjaGVkRGF0YVRlbXBSZWdpc3RlcigpLCB2YWx1ZUFzSW50KSkKKyAg
ICAgICAgICAgICAgICBsb25nX21vdmUoaW1tLCBkZXN0KTsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIGxvbmdfbW92ZShpbW0sIGRlc3QpOwogICAgICAgICB9CisKKyAgICAgICAgaWYg
KGRlc3QgPT0gYWRkcmVzc1RlbXBSZWdpc3RlcikKKyAgICAgICAgICAgIGNhY2hlZEFkZHJlc3NU
ZW1wUmVnaXN0ZXIoKS5zZXRWYWx1ZSh2YWx1ZUFzSW50KTsKKyAgICAgICAgZWxzZSBpZiAoZGVz
dCA9PSBkYXRhVGVtcFJlZ2lzdGVyKQorICAgICAgICAgICAgY2FjaGVkRGF0YVRlbXBSZWdpc3Rl
cigpLnNldFZhbHVlKHZhbHVlQXNJbnQpOworCiAgICAgfQogCiAgICAgdm9pZCBtb3ZlKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewogICAgICAgICBpZiAoc3JjICE9IGRl
c3QpCiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5tb3YoZGVzdCwgc3JjKTsKKyAgICAgICAgaWYg
KGRlc3QgPT0gZGF0YVRlbXBSZWdpc3RlcikKKyAgICAgICAgICAgIGNhY2hlZERhdGFUZW1wUmVn
aXN0ZXIoKS5pbnZhbGlkYXRlKCk7CisgICAgICAgIGVsc2UgaWYgKGRlc3QgPT0gYWRkcmVzc1Rl
bXBSZWdpc3RlcikKKyAgICAgICAgICAgIGNhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXIoKS5pbnZh
bGlkYXRlKCk7CiAgICAgfQogCiAgICAgdm9pZCBtb3ZlKFRydXN0ZWRJbW1QdHIgaW1tLCBSZWdp
c3RlcklEIGRlc3QpCkBAIC0xNjA5LDcgKzE3MTAsOCBAQCBwcml2YXRlOgogICAgICAgICBpZiAo
YXJtSW1tLmlzVmFsaWQoKSkgewogICAgICAgICAgICAgaWYgKCEobGVmdCAmIDgpICYmIGFybUlt
bS5pc1VJbnQzKCkgJiYgKGxlZnQgIT0gYWRkcmVzc1RlbXBSZWdpc3RlcikpIHsKICAgICAgICAg
ICAgICAgICAvLyBUaGlzIGlzIGNvbW1vbiBlbm91Z2ggdG8gd2FycmFudCBhIHNwZWNpYWwgY2Fz
ZSB0byBzYXZlIDIgYnl0ZXMKLSAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRfUyhhZGRy
ZXNzVGVtcFJlZ2lzdGVyLCBsZWZ0LCBhcm1JbW0pOworICAgICAgICAgICAgICAgIFJlZ2lzdGVy
SUQgc2NyYXRjaCA9IGdldENhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUo
KTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5hZGRfUyhzY3JhdGNoLCBsZWZ0LCBhcm1J
bW0pOwogICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmNtbihsZWZ0LCBhcm1JbW0pOwpAQCAtMTc3OSwxNyArMTg4MSwxOSBAQCBw
dWJsaWM6CiAgICAgSnVtcCBicmFuY2g4KFJlbGF0aW9uYWxDb25kaXRpb24gY29uZCwgQWRkcmVz
cyBsZWZ0LCBUcnVzdGVkSW1tMzIgcmlnaHQpCiAgICAgewogICAgICAgICAvLyB1c2UgYWRkcmVz
c1RlbXBSZWdpc3RlciBpbmNhc2UgdGhlIGJyYW5jaDggd2UgY2FsbCB1c2VzIGRhdGFUZW1wUmVn
aXN0ZXIuIDotLworICAgICAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSBnZXRDYWNoZWRBZGRyZXNz
VGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CiAgICAgICAgIFRydXN0ZWRJbW0zMiByaWdo
dDggPSBNYWNyb0Fzc2VtYmxlckhlbHBlcnM6Om1hc2s4T25Db25kaXRpb24oKnRoaXMsIGNvbmQs
IHJpZ2h0KTsKLSAgICAgICAgTWFjcm9Bc3NlbWJsZXJIZWxwZXJzOjpsb2FkOE9uQ29uZGl0aW9u
KCp0aGlzLCBjb25kLCBsZWZ0LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJu
IGJyYW5jaDgoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgcmlnaHQ4KTsKKyAgICAgICAgTWFj
cm9Bc3NlbWJsZXJIZWxwZXJzOjpsb2FkOE9uQ29uZGl0aW9uKCp0aGlzLCBjb25kLCBsZWZ0LCBz
Y3JhdGNoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDgoY29uZCwgc2NyYXRjaCwgcmlnaHQ4KTsK
ICAgICB9CiAKICAgICBKdW1wIGJyYW5jaDgoUmVsYXRpb25hbENvbmRpdGlvbiBjb25kLCBCYXNl
SW5kZXggbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0KQogICAgIHsKICAgICAgICAgLy8gdXNlIGFk
ZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNlIHRoZSBicmFuY2gzMiB3ZSBjYWxsIHVzZXMgZGF0YVRl
bXBSZWdpc3Rlci4gOi0vCisgICAgICAgIFJlZ2lzdGVySUQgc2NyYXRjaCA9IGdldENhY2hlZEFk
ZHJlc3NUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRhdGUoKTsKICAgICAgICAgVHJ1c3RlZEltbTMy
IHJpZ2h0OCA9IE1hY3JvQXNzZW1ibGVySGVscGVyczo6bWFzazhPbkNvbmRpdGlvbigqdGhpcywg
Y29uZCwgcmlnaHQpOwotICAgICAgICBNYWNyb0Fzc2VtYmxlckhlbHBlcnM6OmxvYWQ4T25Db25k
aXRpb24oKnRoaXMsIGNvbmQsIGxlZnQsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOwotICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgcmlnaHQ4KTsKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJIZWxwZXJzOjpsb2FkOE9uQ29uZGl0aW9uKCp0aGlzLCBjb25kLCBs
ZWZ0LCBzY3JhdGNoKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIHNjcmF0Y2gsIHJp
Z2h0OCk7CiAgICAgfQogICAgIAogICAgIEp1bXAgYnJhbmNoOChSZWxhdGlvbmFsQ29uZGl0aW9u
IGNvbmQsIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgcmlnaHQpCkBAIC0x
ODQwLDE3ICsxOTQ0LDE5IEBAIHB1YmxpYzoKICAgICBKdW1wIGJyYW5jaFRlc3Q4KFJlc3VsdENv
bmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVz
dGVkSW1tMzIoLTEpKQogICAgIHsKICAgICAgICAgLy8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIg
aW5jYXNlIHRoZSBicmFuY2hUZXN0MzIgd2UgY2FsbCB1c2VzIGRhdGFUZW1wUmVnaXN0ZXIuIDot
LworICAgICAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSBnZXRDYWNoZWRBZGRyZXNzVGVtcFJlZ2lz
dGVySURBbmRJbnZhbGlkYXRlKCk7CiAgICAgICAgIFRydXN0ZWRJbW0zMiBtYXNrOCA9IE1hY3Jv
QXNzZW1ibGVySGVscGVyczo6bWFzazhPbkNvbmRpdGlvbigqdGhpcywgY29uZCwgbWFzayk7Ci0g
ICAgICAgIE1hY3JvQXNzZW1ibGVySGVscGVyczo6bG9hZDhPbkNvbmRpdGlvbigqdGhpcywgY29u
ZCwgYWRkcmVzcywgYWRkcmVzc1RlbXBSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBicmFuY2hU
ZXN0MzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgbWFzazgpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlckhlbHBlcnM6OmxvYWQ4T25Db25kaXRpb24oKnRoaXMsIGNvbmQsIGFkZHJlc3MsIHNj
cmF0Y2gpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIHNjcmF0Y2gsIG1hc2s4
KTsKICAgICB9CiAKICAgICBKdW1wIGJyYW5jaFRlc3Q4KFJlc3VsdENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGFkZHJlc3MsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKICAg
ICB7CiAgICAgICAgIC8vIHVzZSBhZGRyZXNzVGVtcFJlZ2lzdGVyIGluY2FzZSB0aGUgYnJhbmNo
VGVzdDMyIHdlIGNhbGwgdXNlcyBkYXRhVGVtcFJlZ2lzdGVyLiA6LS8KKyAgICAgICAgUmVnaXN0
ZXJJRCBzY3JhdGNoID0gZ2V0Q2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0
ZSgpOwogICAgICAgICBUcnVzdGVkSW1tMzIgbWFzazggPSBNYWNyb0Fzc2VtYmxlckhlbHBlcnM6
Om1hc2s4T25Db25kaXRpb24oKnRoaXMsIGNvbmQsIG1hc2spOwotICAgICAgICBNYWNyb0Fzc2Vt
YmxlckhlbHBlcnM6OmxvYWQ4T25Db25kaXRpb24oKnRoaXMsIGNvbmQsIGFkZHJlc3MsIGFkZHJl
c3NUZW1wUmVnaXN0ZXIpOwotICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIGFkZHJl
c3NUZW1wUmVnaXN0ZXIsIG1hc2s4KTsKKyAgICAgICAgTWFjcm9Bc3NlbWJsZXJIZWxwZXJzOjps
b2FkOE9uQ29uZGl0aW9uKCp0aGlzLCBjb25kLCBhZGRyZXNzLCBzY3JhdGNoKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBzY3JhdGNoLCBtYXNrOCk7CiAgICAgfQogCiAgICAg
SnVtcCBicmFuY2hUZXN0OChSZXN1bHRDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGFk
ZHJlc3MsIFRydXN0ZWRJbW0zMiBtYXNrID0gVHJ1c3RlZEltbTMyKC0xKSkKQEAgLTE4NjUsMTcg
KzE5NzEsMTkgQEAgcHVibGljOgogICAgIEp1bXAgYnJhbmNoVGVzdDE2KFJlc3VsdENvbmRpdGlv
biBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1t
MzIoLTEpKQogICAgIHsKICAgICAgICAgLy8gdXNlIGFkZHJlc3NUZW1wUmVnaXN0ZXIgaW5jYXNl
IHRoZSBicmFuY2hUZXN0MzIgd2UgY2FsbCB1c2VzIGRhdGFUZW1wUmVnaXN0ZXIuIDotLworICAg
ICAgICBSZWdpc3RlcklEIHNjcmF0Y2ggPSBnZXRDYWNoZWRBZGRyZXNzVGVtcFJlZ2lzdGVySURB
bmRJbnZhbGlkYXRlKCk7CiAgICAgICAgIFRydXN0ZWRJbW0zMiBtYXNrMTYgPSBNYWNyb0Fzc2Vt
YmxlckhlbHBlcnM6Om1hc2sxNk9uQ29uZGl0aW9uKCp0aGlzLCBjb25kLCBtYXNrKTsKLSAgICAg
ICAgTWFjcm9Bc3NlbWJsZXJIZWxwZXJzOjpsb2FkMTZPbkNvbmRpdGlvbigqdGhpcywgY29uZCwg
YWRkcmVzcywgYWRkcmVzc1RlbXBSZWdpc3Rlcik7Ci0gICAgICAgIHJldHVybiBicmFuY2hUZXN0
MzIoY29uZCwgYWRkcmVzc1RlbXBSZWdpc3RlciwgbWFzazE2KTsKKyAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJIZWxwZXJzOjpsb2FkMTZPbkNvbmRpdGlvbigqdGhpcywgY29uZCwgYWRkcmVzcywgc2Ny
YXRjaCk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgc2NyYXRjaCwgbWFzazE2
KTsKICAgICB9CiAKICAgICBKdW1wIGJyYW5jaFRlc3QxNihSZXN1bHRDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzayA9IFRydXN0ZWRJbW0zMigtMSkpCiAg
ICAgewogICAgICAgICAvLyB1c2UgYWRkcmVzc1RlbXBSZWdpc3RlciBpbmNhc2UgdGhlIGJyYW5j
aFRlc3QzMiB3ZSBjYWxsIHVzZXMgZGF0YVRlbXBSZWdpc3Rlci4gOi0vCisgICAgICAgIFJlZ2lz
dGVySUQgc2NyYXRjaCA9IGdldENhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXJJREFuZEludmFsaWRh
dGUoKTsKICAgICAgICAgVHJ1c3RlZEltbTMyIG1hc2sxNiA9IE1hY3JvQXNzZW1ibGVySGVscGVy
czo6bWFzazE2T25Db25kaXRpb24oKnRoaXMsIGNvbmQsIG1hc2spOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlckhlbHBlcnM6OmxvYWQxNk9uQ29uZGl0aW9uKCp0aGlzLCBjb25kLCBhZGRyZXNzLCBh
ZGRyZXNzVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBh
ZGRyZXNzVGVtcFJlZ2lzdGVyLCBtYXNrMTYpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckhlbHBl
cnM6OmxvYWQxNk9uQ29uZGl0aW9uKCp0aGlzLCBjb25kLCBhZGRyZXNzLCBzY3JhdGNoKTsKKyAg
ICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBzY3JhdGNoLCBtYXNrMTYpOwogICAgIH0K
IAogICAgIEp1bXAgYnJhbmNoVGVzdDE2KFJlc3VsdENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcywgVHJ1c3RlZEltbTMyIG1hc2sgPSBUcnVzdGVkSW1tMzIoLTEpKQpAQCAt
MTg4OSwxMiArMTk5NywxNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGZhckp1bXAoUmVnaXN0ZXJJ
RCB0YXJnZXQsIFB0clRhZykKICAgICB7CisgICAgICAgIGNhY2hlZERhdGFUZW1wUmVnaXN0ZXIo
KS5pbnZhbGlkYXRlKCk7CisgICAgICAgIGNhY2hlZEFkZHJlc3NUZW1wUmVnaXN0ZXIoKS5pbnZh
bGlkYXRlKCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmJ4KHRhcmdldCk7CiAgICAgfQogCiAgICAg
dm9pZCBmYXJKdW1wKFRydXN0ZWRJbW1QdHIgdGFyZ2V0LCBQdHJUYWcpCiAgICAgewogICAgICAg
ICBtb3ZlKHRhcmdldCwgYWRkcmVzc1RlbXBSZWdpc3Rlcik7CisgICAgICAgIGNhY2hlZERhdGFU
ZW1wUmVnaXN0ZXIoKS5pbnZhbGlkYXRlKCk7CisgICAgICAgIGNhY2hlZEFkZHJlc3NUZW1wUmVn
aXN0ZXIoKS5pbnZhbGlkYXRlKCk7CiAgICAgICAgIG1fYXNzZW1ibGVyLmJ4KGFkZHJlc3NUZW1w
UmVnaXN0ZXIpOwogICAgIH0KIApAQCAtMTkwMiw2ICsyMDE0LDcgQEAgcHVibGljOgogICAgIHZv
aWQgZmFySnVtcChBZGRyZXNzIGFkZHJlc3MsIFB0clRhZykKICAgICB7CiAgICAgICAgIGxvYWQz
MihhZGRyZXNzLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgY2FjaGVkRGF0YVRlbXBS
ZWdpc3RlcigpLmludmFsaWRhdGUoKTsgLy8gYWRkcmVzc1RlbXBSZWdpc3RlciBhbHJlYWR5IGlu
dmFsaWRhdGVkIGJ5IHRoZSBsb2FkCiAgICAgICAgIG1fYXNzZW1ibGVyLmJ4KGFkZHJlc3NUZW1w
UmVnaXN0ZXIpOwogICAgIH0KICAgICAKQEAgLTE5MDksNiArMjAyMiw3IEBAIHB1YmxpYzoKICAg
ICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgYWRkcmVzc1Rl
bXBSZWdpc3Rlcik7CiAgICAgICAgIGxvYWQzMihBZGRyZXNzKGFkZHJlc3NUZW1wUmVnaXN0ZXIp
LCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgY2FjaGVkRGF0YVRlbXBSZWdpc3Rlcigp
LmludmFsaWRhdGUoKTsKICAgICAgICAgbV9hc3NlbWJsZXIuYngoYWRkcmVzc1RlbXBSZWdpc3Rl
cik7CiAgICAgfQogCkBAIC0xOTc3LDEwICsyMDkxLDExIEBAIHB1YmxpYzoKICAgICBKdW1wIGJy
YW5jaE11bDMyKFJlc3VsdENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVy
SUQgc3JjMiwgUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIuc211
bGwoZGVzdCwgZGF0YVRlbXBSZWdpc3Rlciwgc3JjMSwgc3JjMik7Ci0KKyAgICAgICAgLy8gVGhl
IGludmFsaWRhdGlvbiBvZiBjYWNoZWREYXRhVGVtcFJlZ2lzdGVyIGlzIGhhbmRsZWQgYnkgdGhl
IGJyYW5jaC4KICAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKLSAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFzcihhZGRyZXNzVGVtcFJlZ2lzdGVyLCBkZXN0LCAzMSk7Ci0gICAgICAgICAg
ICByZXR1cm4gYnJhbmNoMzIoTm90RXF1YWwsIGFkZHJlc3NUZW1wUmVnaXN0ZXIsIGRhdGFUZW1w
UmVnaXN0ZXIpOworICAgICAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gZ2V0Q2FjaGVkQWRk
cmVzc1RlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYXNyKHNjcmF0Y2gsIGRlc3QsIDMxKTsKKyAgICAgICAgICAgIHJldHVybiBicmFuY2gzMihO
b3RFcXVhbCwgc2NyYXRjaCwgZGF0YVRlbXBSZWdpc3Rlcik7CiAgICAgICAgIH0KIAogICAgICAg
ICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIGRlc3QpOwpAQCAtMjA2MywyOSArMjE3OCwzNCBA
QCBwdWJsaWM6CiAgICAgQUxXQVlTX0lOTElORSBDYWxsIG5lYXJDYWxsKCkKICAgICB7CiAgICAg
ICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoVHJ1c3RlZEltbTMyKDApLCBkYXRhVGVtcFJlZ2lz
dGVyKTsKKyAgICAgICAgaW52YWxpZGF0ZUFsbFRlbXBSZWdpc3RlcnMoKTsKICAgICAgICAgcmV0
dXJuIENhbGwobV9hc3NlbWJsZXIuYmx4KGRhdGFUZW1wUmVnaXN0ZXIpLCBDYWxsOjpMaW5rYWJs
ZU5lYXIpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgQ2FsbCBuZWFyVGFpbENhbGwoKQog
ICAgIHsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhUcnVzdGVkSW1tMzIoMCksIGRh
dGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBpbnZhbGlkYXRlQWxsVGVtcFJlZ2lzdGVycygpOwog
ICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyKSwgQ2Fs
bDo6TGlua2FibGVOZWFyVGFpbCk7CiAgICAgfQogCiAgICAgQUxXQVlTX0lOTElORSBDYWxsIGNh
bGwoUHRyVGFnKQogICAgIHsKICAgICAgICAgbW92ZUZpeGVkV2lkdGhFbmNvZGluZyhUcnVzdGVk
SW1tMzIoMCksIGRhdGFUZW1wUmVnaXN0ZXIpOworICAgICAgICBpbnZhbGlkYXRlQWxsVGVtcFJl
Z2lzdGVycygpOwogICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgoZGF0YVRlbXBS
ZWdpc3RlciksIENhbGw6OkxpbmthYmxlKTsKICAgICB9CiAKICAgICBBTFdBWVNfSU5MSU5FIENh
bGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCwgUHRyVGFnKQogICAgIHsKKyAgICAgICAgaW52YWxp
ZGF0ZUFsbFRlbXBSZWdpc3RlcnMoKTsKICAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIu
Ymx4KHRhcmdldCksIENhbGw6Ok5vbmUpOwogICAgIH0KIAogICAgIEFMV0FZU19JTkxJTkUgQ2Fs
bCBjYWxsKEFkZHJlc3MgYWRkcmVzcywgUHRyVGFnKQogICAgIHsKICAgICAgICAgbG9hZDMyKGFk
ZHJlc3MsIGFkZHJlc3NUZW1wUmVnaXN0ZXIpOworICAgICAgICBjYWNoZWREYXRhVGVtcFJlZ2lz
dGVyKCkuaW52YWxpZGF0ZSgpOwogICAgICAgICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5ibHgo
YWRkcmVzc1RlbXBSZWdpc3RlciksIENhbGw6Ok5vbmUpOwogICAgIH0KIApAQCAtMjExNSw4ICsy
MjM1LDkgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGFyZTgoUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kLCBBZGRyZXNzIGxlZnQsIFRydXN0ZWRJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgVHJ1c3RlZEltbTMyIHJpZ2h0OCA9IE1hY3JvQXNzZW1ibGVySGVscGVy
czo6bWFzazhPbkNvbmRpdGlvbigqdGhpcywgY29uZCwgcmlnaHQpOwotICAgICAgICBNYWNyb0Fz
c2VtYmxlckhlbHBlcnM6OmxvYWQ4T25Db25kaXRpb24oKnRoaXMsIGNvbmQsIGxlZnQsIGFkZHJl
c3NUZW1wUmVnaXN0ZXIpOwotICAgICAgICBjb21wYXJlMzIoY29uZCwgYWRkcmVzc1RlbXBSZWdp
c3RlciwgcmlnaHQ4LCBkZXN0KTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gZ2V0Q2Fj
aGVkQWRkcmVzc1RlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICBNYWNyb0Fz
c2VtYmxlckhlbHBlcnM6OmxvYWQ4T25Db25kaXRpb24oKnRoaXMsIGNvbmQsIGxlZnQsIHNjcmF0
Y2gpOworICAgICAgICBjb21wYXJlMzIoY29uZCwgc2NyYXRjaCwgcmlnaHQ4LCBkZXN0KTsKICAg
ICB9CiAKICAgICB2b2lkIGNvbXBhcmUzMihSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgbGVmdCwgVHJ1c3RlZEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCkBAIC0yMTQz
LDggKzIyNjQsOSBAQCBwdWJsaWM6CiAgICAgdm9pZCB0ZXN0OChSZXN1bHRDb25kaXRpb24gY29u
ZCwgQWRkcmVzcyBhZGRyZXNzLCBUcnVzdGVkSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKICAgICAgICAgVHJ1c3RlZEltbTMyIG1hc2s4ID0gTWFjcm9Bc3NlbWJsZXJIZWxwZXJz
OjptYXNrOE9uQ29uZGl0aW9uKCp0aGlzLCBjb25kLCBtYXNrKTsKLSAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJIZWxwZXJzOjpsb2FkOE9uQ29uZGl0aW9uKCp0aGlzLCBjb25kLCBhZGRyZXNzLCBhZGRy
ZXNzVGVtcFJlZ2lzdGVyKTsKLSAgICAgICAgdGVzdDMyKGFkZHJlc3NUZW1wUmVnaXN0ZXIsIG1h
c2s4KTsKKyAgICAgICAgUmVnaXN0ZXJJRCBzY3JhdGNoID0gZ2V0Q2FjaGVkQWRkcmVzc1RlbXBS
ZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpOworICAgICAgICBNYWNyb0Fzc2VtYmxlckhlbHBlcnM6
OmxvYWQ4T25Db25kaXRpb24oKnRoaXMsIGNvbmQsIGFkZHJlc3MsIHNjcmF0Y2gpOworICAgICAg
ICB0ZXN0MzIoc2NyYXRjaCwgbWFzazgpOwogICAgICAgICBtX2Fzc2VtYmxlci5pdChhcm1WN0Nv
bmRpdGlvbihjb25kKSwgZmFsc2UpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3YoZGVzdCwgQVJN
VGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTYoMSkpOwogICAgICAgICBtX2Fzc2VtYmxlci5tb3Yo
ZGVzdCwgQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50MTYoMCkpOwpAQCAtMjMyNyw2ICsyNDQ5
LDcgQEAgcHJvdGVjdGVkOgogICAgIHsKICAgICAgICAgbV9hc3NlbWJsZXIubGFiZWwoKTsgLy8g
Rm9yY2Ugbm9wLXBhZGRpbmcgaWYgd2UncmUgaW4gdGhlIG1pZGRsZSBvZiBhIHdhdGNocG9pbnQu
CiAgICAgICAgIG1vdmVGaXhlZFdpZHRoRW5jb2RpbmcoVHJ1c3RlZEltbTMyKDApLCBkYXRhVGVt
cFJlZ2lzdGVyKTsKKyAgICAgICAgY2FjaGVkRGF0YVRlbXBSZWdpc3RlcigpLmludmFsaWRhdGUo
KTsKICAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuYngoZGF0YVRlbXBSZWdpc3Rlciks
IG1fbWFrZUp1bXBQYXRjaGFibGUgPyBBUk12N0Fzc2VtYmxlcjo6SnVtcE5vQ29uZGl0aW9uRml4
ZWRTaXplIDogQVJNdjdBc3NlbWJsZXI6Okp1bXBOb0NvbmRpdGlvbik7CiAgICAgfQogCkBAIC0y
MzM1LDYgKzI0NTgsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIG1fYXNzZW1ibGVyLmxhYmVsKCk7
IC8vIEZvcmNlIG5vcC1wYWRkaW5nIGlmIHdlJ3JlIGluIHRoZSBtaWRkbGUgb2YgYSB3YXRjaHBv
aW50LgogICAgICAgICBtX2Fzc2VtYmxlci5pdChjb25kLCB0cnVlLCB0cnVlKTsKICAgICAgICAg
bW92ZUZpeGVkV2lkdGhFbmNvZGluZyhUcnVzdGVkSW1tMzIoMCksIGRhdGFUZW1wUmVnaXN0ZXIp
OworICAgICAgICBjYWNoZWREYXRhVGVtcFJlZ2lzdGVyKCkuaW52YWxpZGF0ZSgpOwogICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5ieChkYXRhVGVtcFJlZ2lzdGVyKSwgbV9tYWtlSnVt
cFBhdGNoYWJsZSA/IEFSTXY3QXNzZW1ibGVyOjpKdW1wQ29uZGl0aW9uRml4ZWRTaXplIDogQVJN
djdBc3NlbWJsZXI6Okp1bXBDb25kaXRpb24sIGNvbmQpOwogICAgIH0KICAgICBBTFdBWVNfSU5M
SU5FIEp1bXAgbWFrZUJyYW5jaChSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmQpIHsgcmV0dXJuIG1h
a2VCcmFuY2goYXJtVjdDb25kaXRpb24oY29uZCkpOyB9CkBAIC0yMzQ1LDEwICsyNDY5LDEyIEBA
IHByb3RlY3RlZDoKICAgICB7CiAgICAgICAgIGlmIChhZGRyZXNzLm9mZnNldCkgewogICAgICAg
ICAgICAgQVJNVGh1bWJJbW1lZGlhdGUgaW1tID0gQVJNVGh1bWJJbW1lZGlhdGU6Om1ha2VVSW50
MTJPckVuY29kZWRJbW0oYWRkcmVzcy5vZmZzZXQpOwotICAgICAgICAgICAgaWYgKGltbS5pc1Zh
bGlkKCkpCi0gICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuYWRkKGFkZHJlc3NUZW1wUmVnaXN0
ZXIsIGFkZHJlc3MuYmFzZSwgaW1tKTsKLSAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAg
aWYgKGltbS5pc1ZhbGlkKCkpIHsKKyAgICAgICAgICAgICAgICBSZWdpc3RlcklEIHNjcmF0Y2gg
PSBnZXRDYWNoZWRBZGRyZXNzVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRlKCk7CisgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYWRkKHNjcmF0Y2gsIGFkZHJlc3MuYmFzZSwgaW1tKTsKKyAg
ICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoYWRk
cmVzcy5vZmZzZXQpLCBhZGRyZXNzVGVtcFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBjYWNo
ZWRBZGRyZXNzVGVtcFJlZ2lzdGVyKCkuaW52YWxpZGF0ZSgpOwogICAgICAgICAgICAgICAgIG1f
YXNzZW1ibGVyLmFkZChhZGRyZXNzVGVtcFJlZ2lzdGVyLCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBh
ZGRyZXNzLmJhc2UpOwogICAgICAgICAgICAgfQogCkBAIC0yMzc5LDEyICsyNTA1LDE4IEBAIHBy
b3RlY3RlZDoKICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZChhZGRyZXNzVGVtcFJlZ2lzdGVy
LCBhZGRyZXNzVGVtcFJlZ2lzdGVyLCBhZGRyZXNzLmJhc2UpOwogICAgICAgICB9CiAKKyAgICAg
ICAgY2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcigpLmludmFsaWRhdGUoKTsKICAgICAgICAgcmV0
dXJuIGFkZHJlc3NUZW1wUmVnaXN0ZXI7CiAgICAgfQogCiAgICAgdm9pZCBtb3ZlRml4ZWRXaWR0
aEVuY29kaW5nKFRydXN0ZWRJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZHN0KQogICAgIHsKICAgICAg
ICAgdWludDMyX3QgdmFsdWUgPSBpbW0ubV92YWx1ZTsKKyAgICAgICAgaW50cHRyX3QgdmFsdWVB
c0ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCAq
Pih2YWx1ZSkpOworICAgICAgICBpZiAoZHN0ID09IGRhdGFUZW1wUmVnaXN0ZXIpCisgICAgICAg
ICAgICBjYWNoZWREYXRhVGVtcFJlZ2lzdGVyKCkuc2V0VmFsdWUodmFsdWVBc0ludCk7CisgICAg
ICAgIGVsc2UgaWYgKGRzdCA9PSBhZGRyZXNzVGVtcFJlZ2lzdGVyKQorICAgICAgICAgICAgY2Fj
aGVkQWRkcmVzc1RlbXBSZWdpc3RlcigpLnNldFZhbHVlKHZhbHVlQXNJbnQpOwogICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZUMyhkc3QsIEFSTVRodW1iSW1tZWRpYXRlOjptYWtlVUludDE2KHZhbHVl
ICYgMHhmZmZmKSk7CiAgICAgICAgIG1fYXNzZW1ibGVyLm1vdnQoZHN0LCBBUk1UaHVtYkltbWVk
aWF0ZTo6bWFrZVVJbnQxNih2YWx1ZSA+PiAxNikpOwogICAgIH0KQEAgLTI0MDQsNiArMjUzNiwy
NiBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBUk12N0Fzc2VtYmxl
cjo6Q29uZGl0aW9uPihjb25kKTsKICAgICB9CiAKKyAgICBBTFdBWVNfSU5MSU5FIENhY2hlZFRl
bXBSZWdpc3RlciYgY2FjaGVkRGF0YVRlbXBSZWdpc3RlcigpCisgICAgeworICAgICAgICByZXR1
cm4gbV9jYWNoZWREYXRhVGVtcFJlZ2lzdGVyOworICAgIH0KKworICAgIEFMV0FZU19JTkxJTkUg
Q2FjaGVkVGVtcFJlZ2lzdGVyJiBjYWNoZWRBZGRyZXNzVGVtcFJlZ2lzdGVyKCkKKyAgICB7Cisg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG1fYWxsb3dTY3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBy
ZXR1cm4gbV9jYWNoZWRBZGRyZXNzVGVtcFJlZ2lzdGVyOworICAgIH0KKworICAgIEFMV0FZU19J
TkxJTkUgUmVnaXN0ZXJJRCBnZXRDYWNoZWREYXRhVGVtcFJlZ2lzdGVySURBbmRJbnZhbGlkYXRl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWNoZWREYXRhVGVtcFJlZ2lzdGVyKCkucmVnaXN0
ZXJJREludmFsaWRhdGUoKTsKKyAgICB9CisKKyAgICBBTFdBWVNfSU5MSU5FIFJlZ2lzdGVySUQg
Z2V0Q2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcklEQW5kSW52YWxpZGF0ZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gY2FjaGVkQWRkcmVzc1RlbXBSZWdpc3RlcigpLnJlZ2lzdGVySURJbnZhbGlk
YXRlKCk7CisgICAgfQogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIApA
QCAtMjQxNyw2ICsyNTY5LDggQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBib29sIG1fbWFrZUp1
bXBQYXRjaGFibGU7CisgICAgQ2FjaGVkVGVtcFJlZ2lzdGVyIG1fY2FjaGVkRGF0YVRlbXBSZWdp
c3RlcjsKKyAgICBDYWNoZWRUZW1wUmVnaXN0ZXIgbV9jYWNoZWRBZGRyZXNzVGVtcFJlZ2lzdGVy
OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtJbmZvLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTGlua0luZm8uY3BwCmluZGV4IDBlOTNhNDYxMDhhY2QwZWJiNmY1N2EzYTNh
MTQ5NGM2OTYwMmViNjAuLjZkZjc3YjVhODZjNmRiZWJhYzkzNTlmYTk2MmFjOWJkZDg2NDVjMmEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8u
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua0luZm8uY3Bw
CkBAIC0zNTQsOCArMzU0LDggQEAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IENhbGxMaW5rSW5m
bzo6ZW1pdEZhc3RQYXRoSW1wbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW4KICAgICAgICAgICAg
IHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKENDYWxsSGVscGVyczo6Tm90RXF1YWwsIGNh
bGxlZUFkZHJlc3MsIGNhbGxlZUdQUikpOwogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2hHUFIgPSBqaXQuc2NyYXRjaFJlZ2lzdGVyKCk7Ci0gICAgICAgICAgICBE
aXNhbGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CiAg
ICAgICAgICAgICBqaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoY2FsbExpbmtJbmZv
R1BSLCBvZmZzZXRPZkNhbGxlZSgpKSwgc2NyYXRjaEdQUik7CisgICAgICAgICAgICBEaXNhbGxv
d01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgZGlzYWxsb3dTY3JhdGNoKGppdCk7CiAgICAgICAg
ICAgICBnb1BvbHltb3JwaGljID0gaml0LmJyYW5jaFRlc3RQdHIoQ0NhbGxIZWxwZXJzOjpOb25a
ZXJvLCBzY3JhdGNoR1BSLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihwb2x5bW9ycGhpY0Nh
bGxlZU1hc2spKTsKICAgICAgICAgICAgIHNsb3dQYXRoLmFwcGVuZChqaXQuYnJhbmNoUHRyKEND
YWxsSGVscGVyczo6Tm90RXF1YWwsIHNjcmF0Y2hHUFIsIGNhbGxlZUdQUikpOwogICAgICAgICB9
Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>