<?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>238411</bug_id>
          
          <creation_ts>2022-03-25 23:24:34 -0700</creation_ts>
          <short_desc>[JSC] Include argumentRegisters in identity of SlowPathCallKey when clobberAllRegsInFTLICSlowPath is enabled</short_desc>
          <delta_ts>2022-03-26 04:39:17 -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="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>tzagallo</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1855353</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-25 23:24:34 -0700</bug_when>
    <thetext>[JSC] Remove clobberAllRegsInFTLICSlowPath</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855354</commentid>
    <comment_count>1</comment_count>
      <attachid>455835</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-26 00:15:34 -0700</bug_when>
    <thetext>Created attachment 455835
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855366</commentid>
    <comment_count>2</comment_count>
      <attachid>455835</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2022-03-26 03:22:57 -0700</bug_when>
    <thetext>Comment on attachment 455835
Patch

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

r=me with suggestions.

&gt; Source/JavaScriptCore/ChangeLog:16
&gt; +        While SlowPathCallKey includes argumentRegisters, it is not used for identity check. But this argumentRegisters
&gt; +        is only effective to the resulted code in FTLThunks only when Options::clobberAllRegsInFTLICSlowPath is specified.
&gt; +        Just including argumentRegisters will cause code size regression since we will lose a chance to duplicate thunks
&gt; +        while argumentRegisters is unrelated when Options::clobberAllRegsInFTLICSlowPath is not true. This bug causes
&gt; +        x64 Debug JSC failures after enabling DataIC because the same FTLThunks should not be picked for the different
&gt; +        argument registers when Options::clobberAllRegsInFTLICSlowPath is true.
&gt; +
&gt; +        In this patch, we make argumentRegisters in SlowPathCallKey effective only when Options::clobberAllRegsInFTLICSlowPath
&gt; +        is specified. And we also refactor SlowPathCallKey to reduce size of it from 40 to 24 on x64.

I suggest rephrasing this as:

&quot;While SlowPathCallKey includes argumentRegisters, it is not used for its identity check. But this argumentRegisters
is effectual on the resulting code in FTLThunks if Options::clobberAllRegsInFTLICSlowPath is set. This causes
x64 Debug JSC test failures after enabling DataIC because the same FTLThunks should not be picked for different
argument registers when Options::clobberAllRegsInFTLICSlowPath is true.

However, always including argumentRegisters in the identity check will cause a code size regression since we will
lose a chance to duplicate thunks when argumentRegisters is ineffectual. Note that Options::clobberAllRegsInFTLICSlowPath
is only set for debugging use cases. Hence, argumentRegisters is normally not effectual.

In this patch, we include argumentRegisters in SlowPathCallKey&apos;s identity check only when Options::clobberAllRegsInFTLICSlowPath
is set.  And we also refactor SlowPathCallKey to reduce size of it from 40 to 24 on x64.&quot;

If you choose to make m_offset a bitfield (see below), you should drop the &quot;on x64&quot; part here.

&gt; Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:139
&gt; +    constexpr FunctionPtr(std::nullptr_t) { };

The semicolon is not needed.

&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:120
&gt; +    if (Options::clobberAllRegsInFTLICSlowPath())

Use UNLIKELY?

&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:128
&gt; +    if (Options::clobberAllRegsInFTLICSlowPath())

Use UNLIKELY?

&gt; Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:129
&gt; +        return PtrHash&lt;void*&gt;::hash(callTarget().executableAddress()) + m_offset + m_usedRegisters.hash() + indirectOffset() + static_cast&lt;unsigned&gt;(m_type);

Maybe add a comment above here saying that &quot;m_numberOfUsedArgumentRegistersIfClobberingCheckIsEnabled is intentionally not included because it will always be 0 unless Options::clobberAllRegsInFTLICSlowPath() is set, and Options::clobberAllRegsInFTLICSlowPath() is only set in debugging use cases.&quot;

&gt; Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:139
&gt;      ptrdiff_t m_offset { 0 };

I think you can make SlowPathCallKey fit in 24 bytes too on ARM64 if you move this to the end and make it a 48 bit bitfield, which should be more than enough bits.  You can probably even make it a 32-bit bitfield given that the value of this ptrdiff_t is computed from number of args + number of registers if I understand the code correctly.  If you do make this a bitfield, I recommend adding a debug ASSERT in the constructor to verify that the incoming value used to initialize this does indeed fit in the bitfield.

&gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:203
&gt; +    if (Options::clobberAllRegsInFTLICSlowPath()) {

Use UNLIKELY?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855368</commentid>
    <comment_count>3</comment_count>
      <attachid>455835</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-26 04:15:00 -0700</bug_when>
    <thetext>Comment on attachment 455835
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/ChangeLog:16
&gt;&gt; +        is specified. And we also refactor SlowPathCallKey to reduce size of it from 40 to 24 on x64.
&gt; 
&gt; I suggest rephrasing this as:
&gt; 
&gt; &quot;While SlowPathCallKey includes argumentRegisters, it is not used for its identity check. But this argumentRegisters
&gt; is effectual on the resulting code in FTLThunks if Options::clobberAllRegsInFTLICSlowPath is set. This causes
&gt; x64 Debug JSC test failures after enabling DataIC because the same FTLThunks should not be picked for different
&gt; argument registers when Options::clobberAllRegsInFTLICSlowPath is true.
&gt; 
&gt; However, always including argumentRegisters in the identity check will cause a code size regression since we will
&gt; lose a chance to duplicate thunks when argumentRegisters is ineffectual. Note that Options::clobberAllRegsInFTLICSlowPath
&gt; is only set for debugging use cases. Hence, argumentRegisters is normally not effectual.
&gt; 
&gt; In this patch, we include argumentRegisters in SlowPathCallKey&apos;s identity check only when Options::clobberAllRegsInFTLICSlowPath
&gt; is set.  And we also refactor SlowPathCallKey to reduce size of it from 40 to 24 on x64.&quot;
&gt; 
&gt; If you choose to make m_offset a bitfield (see below), you should drop the &quot;on x64&quot; part here.

Changed.

&gt;&gt; Source/JavaScriptCore/assembler/MacroAssemblerCodeRef.h:139
&gt;&gt; +    constexpr FunctionPtr(std::nullptr_t) { };
&gt; 
&gt; The semicolon is not needed.

Fixed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:120
&gt;&gt; +    if (Options::clobberAllRegsInFTLICSlowPath())
&gt; 
&gt; Use UNLIKELY?

Fixed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:128
&gt;&gt; +    if (Options::clobberAllRegsInFTLICSlowPath())
&gt; 
&gt; Use UNLIKELY?

Fixed.

&gt;&gt; Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:129
&gt;&gt; +        return PtrHash&lt;void*&gt;::hash(callTarget().executableAddress()) + m_offset + m_usedRegisters.hash() + indirectOffset() + static_cast&lt;unsigned&gt;(m_type);
&gt; 
&gt; Maybe add a comment above here saying that &quot;m_numberOfUsedArgumentRegistersIfClobberingCheckIsEnabled is intentionally not included because it will always be 0 unless Options::clobberAllRegsInFTLICSlowPath() is set, and Options::clobberAllRegsInFTLICSlowPath() is only set in debugging use cases.&quot;

Added.

&gt;&gt; Source/JavaScriptCore/ftl/FTLSlowPathCallKey.h:139
&gt;&gt;      ptrdiff_t m_offset { 0 };
&gt; 
&gt; I think you can make SlowPathCallKey fit in 24 bytes too on ARM64 if you move this to the end and make it a 48 bit bitfield, which should be more than enough bits.  You can probably even make it a 32-bit bitfield given that the value of this ptrdiff_t is computed from number of args + number of registers if I understand the code correctly.  If you do make this a bitfield, I recommend adding a debug ASSERT in the constructor to verify that the incoming value used to initialize this does indeed fit in the bitfield.

Sounds good!

&gt;&gt; Source/JavaScriptCore/ftl/FTLThunks.cpp:203
&gt;&gt; +    if (Options::clobberAllRegsInFTLICSlowPath()) {
&gt; 
&gt; Use UNLIKELY?

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855370</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2022-03-26 04:38:35 -0700</bug_when>
    <thetext>Committed r291935 (248906@trunk): &lt;https://commits.webkit.org/248906@trunk&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1855371</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-26 04:39:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/90875203&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455835</attachid>
            <date>2022-03-26 00:15:34 -0700</date>
            <delta_ts>2022-03-26 03:22:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-238411-20220326001533.patch</filename>
            <type>text/plain</type>
            <size>22135</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxOTMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
Y2IxNGFmZWY1YmQ1MDY1ODdjZmVjODI4ZGZkZGI5MDQ3NTI5OGM3Li5iZDNlMjAyNmNmMGYwMTIz
ZjgxZTMzMmZiMmI5Mzk2ZWI2NmNlZDI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw0OCBAQAorMjAyMi0wMy0yNiAgWXVzdWtlIFN1enVraSAgPHlzdXp1a2lAYXBwbGUuY29t
PgorCisgICAgICAgIFtKU0NdIEluY2x1ZGUgYXJndW1lbnRSZWdpc3RlcnMgaW4gaWRlbnRpdHkg
b2YgU2xvd1BhdGhDYWxsS2V5IHdoZW4gY2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGggaXMg
ZW5hYmxlZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjM4NDExCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
V2hpbGUgU2xvd1BhdGhDYWxsS2V5IGluY2x1ZGVzIGFyZ3VtZW50UmVnaXN0ZXJzLCBpdCBpcyBu
b3QgdXNlZCBmb3IgaWRlbnRpdHkgY2hlY2suIEJ1dCB0aGlzIGFyZ3VtZW50UmVnaXN0ZXJzCisg
ICAgICAgIGlzIG9ubHkgZWZmZWN0aXZlIHRvIHRoZSByZXN1bHRlZCBjb2RlIGluIEZUTFRodW5r
cyBvbmx5IHdoZW4gT3B0aW9uczo6Y2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGggaXMgc3Bl
Y2lmaWVkLgorICAgICAgICBKdXN0IGluY2x1ZGluZyBhcmd1bWVudFJlZ2lzdGVycyB3aWxsIGNh
dXNlIGNvZGUgc2l6ZSByZWdyZXNzaW9uIHNpbmNlIHdlIHdpbGwgbG9zZSBhIGNoYW5jZSB0byBk
dXBsaWNhdGUgdGh1bmtzCisgICAgICAgIHdoaWxlIGFyZ3VtZW50UmVnaXN0ZXJzIGlzIHVucmVs
YXRlZCB3aGVuIE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5GVExJQ1Nsb3dQYXRoIGlzIG5vdCB0
cnVlLiBUaGlzIGJ1ZyBjYXVzZXMKKyAgICAgICAgeDY0IERlYnVnIEpTQyBmYWlsdXJlcyBhZnRl
ciBlbmFibGluZyBEYXRhSUMgYmVjYXVzZSB0aGUgc2FtZSBGVExUaHVua3Mgc2hvdWxkIG5vdCBi
ZSBwaWNrZWQgZm9yIHRoZSBkaWZmZXJlbnQKKyAgICAgICAgYXJndW1lbnQgcmVnaXN0ZXJzIHdo
ZW4gT3B0aW9uczo6Y2xvYmJlckFsbFJlZ3NJbkZUTElDU2xvd1BhdGggaXMgdHJ1ZS4KKworICAg
ICAgICBJbiB0aGlzIHBhdGNoLCB3ZSBtYWtlIGFyZ3VtZW50UmVnaXN0ZXJzIGluIFNsb3dQYXRo
Q2FsbEtleSBlZmZlY3RpdmUgb25seSB3aGVuIE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5GVExJ
Q1Nsb3dQYXRoCisgICAgICAgIGlzIHNwZWNpZmllZC4gQW5kIHdlIGFsc28gcmVmYWN0b3IgU2xv
d1BhdGhDYWxsS2V5IHRvIHJlZHVjZSBzaXplIG9mIGl0IGZyb20gNDAgdG8gMjQgb24geDY0Lgor
CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAg
ICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmg6CisgICAgICAgIChKU0M6
OkNGdW5jdGlvblB0cjo6Q0Z1bmN0aW9uUHRyKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25QdHI6
OkZ1bmN0aW9uUHRyKToKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0IGNvbnN0KToK
KyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsS2V5LmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpTbG93UGF0aENhbGxLZXk6OmR1bXAgY29uc3QpOgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0
aENhbGxLZXkuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OlNsb3dQYXRo
Q2FsbEtleSk6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpjYWxsVGFyZ2V0
IGNvbnN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpTbG93UGF0aENhbGxLZXk6OnVzZWRSZWdpc3Rl
cnMgY29uc3QpOgorICAgICAgICAoSlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6YXJndW1lbnRS
ZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCBjb25zdCk6CisgICAgICAgIChKU0M6
OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjppbmRpcmVjdE9mZnNldCBjb25zdCk6CisgICAgICAgIChK
U0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5Ojp3aXRoQ2FsbFRhcmdldCk6CisgICAgICAgIChKU0M6
OkZUTDo6U2xvd1BhdGhDYWxsS2V5Ojppc0VtcHR5VmFsdWUgY29uc3QpOgorICAgICAgICAoSlND
OjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6aXNEZWxldGVkVmFsdWUgY29uc3QpOgorICAgICAgICAo
SlNDOjpGVEw6OlNsb3dQYXRoQ2FsbEtleTo6b3BlcmF0b3I9PSBjb25zdCk6CisgICAgICAgIChK
U0M6OkZUTDo6U2xvd1BhdGhDYWxsS2V5OjpoYXNoIGNvbnN0KToKKyAgICAgICAgKEpTQzo6RlRM
OjpTbG93UGF0aENhbGxLZXk6OmFyZ3VtZW50UmVnaXN0ZXJzIGNvbnN0KTogRGVsZXRlZC4KKyAg
ICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpyZWdpc3RlckNs
b2JiZXJDaGVjayk6CisgICAgICAgIChKU0M6OkZUTDo6c2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAqIGppdC9IYXNoYWJsZVJlZ2lzdGVyU2V0Lmg6IFJlbW92ZWQuCisgICAg
ICAgICogaml0L1JlZ2lzdGVyU2V0Lmg6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0SGFzaDo6
aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ2lzdGVyU2V0SGFzaDo6ZXF1YWwpOgorCiAyMDIyLTAz
LTI1ICBZdXN1a2UgU3V6dWtpICA8eXN1enVraUBhcHBsZS5jb20+CiAKICAgICAgICAgW0pTQ10g
Q2xlYW4gdXAgRGF0YUlDIHBvbHltb3JwaGljIGNhbGwgY29kZSBmb3IgT3B0aW1pemluZ0NhbGxM
aW5rSW5mbwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBiMjYwZjI4NWRhNmEwZGMz
ODM5MjFjNWYyZDk0MDU3OWI2Y2FkYjg2Li43NzBjZGJmNDg3YThmNGY5OGM1YTliNTM0YzRkYzZj
YjVhOWJjOWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNTE3LDcgKzUxNyw2
IEBACiAJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxsLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MjFC
Qzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovOyB9OwogCQkwRkI1NDY3
NzE0RjU5QjVDMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc2MTRGNTlBRDEwMDJD
Mjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBN
ZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07Ci0JCTBGQjU3MDY5MjY3QTY0MkUwMDgwRkE4QiAvKiBIYXNoYWJsZVJlZ2lz
dGVyU2V0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkI1NzA2ODI2N0E2NDJFMDA4MEZBOEIgLyogSGFzaGFibGVSZWdpc3RlclNldC5oICovOyB9Owog
CQkwRkI3RjM5NTE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlDb252ZW50aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCN0YzODkxNUVEOEUzODAw
RjE2N0IyIC8qIEFycmF5Q29udmVudGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI3RjM5NjE1RUQ4RTQ2MDBGMTY3QjIgLyogQXJyYXlT
dG9yYWdlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RkI3RjM4QTE1RUQ4RTM4MDBGMTY3QjIgLyogQXJyYXlTdG9yYWdlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCN0YzOTcxNUVEOEU0NjAwRjE2
N0IyIC8qIEJ1dHRlcmZseS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0zMTYxLDcgKzMxNjAs
NiBAQAogCQkwRkI1NDY3ODE0RjVDNDY4MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2Zp
bGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gTGF6eU9wZXJhbmRW
YWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3QTE0
RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdDMTRGNUNGRDMwMDJDMjk4OSAv
KiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkI1NzA2ODI2N0E2NDJFMDA4MEZBOEIgLyogSGFzaGFi
bGVSZWdpc3RlclNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIYXNoYWJs
ZVJlZ2lzdGVyU2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjdGMzg5MTVF
RDhFMzgwMEYxNjdCMiAvKiBBcnJheUNvbnZlbnRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFycmF5Q29udmVudGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCN0YzOEExNUVEOEUzODAwRjE2N0IyIC8qIEFycmF5U3RvcmFnZS5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcnJheVN0b3JhZ2UuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZCN0YzOEIxNUVEOEUzODAwRjE2N0IyIC8qIEJ1dHRlcmZseS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCdXR0ZXJmbHkuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTY1NzEsNyArNjU2OSw2IEBACiAJCQkJMEY3NjZEMkUxNUE4RENE
RDAwOEYzNjNFIC8qIEdDQXdhcmVKSVRTdHViUm91dGluZS5oICovLAogCQkJCTBGOTMyNzRDMUMx
RjY2QUEwMENGNjU2NCAvKiBHUFJJbmZvLmNwcCAqLywKIAkJCQkwRjI0RTUzRjE3RUE5RjU5MDBB
QkIyMTcgLyogR1BSSW5mby5oICovLAotCQkJCTBGQjU3MDY4MjY3QTY0MkUwMDgwRkE4QiAvKiBI
YXNoYWJsZVJlZ2lzdGVyU2V0LmggKi8sCiAJCQkJREMyMTQzMDUxQ0EzMkU1MjAwMEE4ODY5IC8q
IElDU3RhdHMuY3BwICovLAogCQkJCURDMjE0MzA2MUNBMzJFNTIwMDBBODg2OSAvKiBJQ1N0YXRz
LmggKi8sCiAJCQkJREU1QTA5RkYxQkEzQUMzRTAwM0Q0NDI0IC8qIEludHJpbnNpY0VtaXR0ZXIu
Y3BwICovLApAQCAtMTA0MjksNyArMTA0MjYsNiBAQAogCQkJCTBGMEI4M0E5MTRCQ0Y1NjIwMDg4
NUI0RiAvKiBIYW5kbGVySW5mby5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQyRTMxMzYxMzRGRjBB
NjAwQUZBREI1IC8qIEhhbmRsZVNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ3ODI5N0IxMzc5
RThBODAwQTdDMkEzIC8qIEhhbmRsZVR5cGVzLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkI1NzA2
OTI2N0E2NDJFMDA4MEZBOEIgLyogSGFzaGFibGVSZWdpc3RlclNldC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzlBMDkwODAxRDc2ODQ2NTAwOEI4ODlCIC8qIEhhc2hNYXBJbXBsLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlGRUY1QjQyMzI2MjhBMEVFMDAxNkU3NzYgLyogSGFzaE1hcEltcGxJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk3OURGQ0JEQjFEODhDNTk2MDA1MjdEMDMgLyogSGFzT3du
UHJvcGVydHlDYWNoZS5oIGluIEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAppbmRleCAxZWEzMjQ1
NDE1YWIwOGE0NWM3ZDNlNTk1OTYwYzQ0NWIxOWZmNzUxLi5jMjU3YjJkZTczMjFjMjk4NjM1OTE1
YzY5MGU5NjdkMmMzNWM2ZTVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTY4LDggKzY4LDggQEAgY2xh
c3MgQ0Z1bmN0aW9uUHRyIHsKIHB1YmxpYzoKICAgICB1c2luZyBQdHIgPSB2b2lkKCopKCk7CiAK
LSAgICBDRnVuY3Rpb25QdHIoKSB7IH0KLSAgICBDRnVuY3Rpb25QdHIoc3RkOjpudWxscHRyX3Qp
IHsgfQorICAgIGNvbnN0ZXhwciBDRnVuY3Rpb25QdHIoKSA9IGRlZmF1bHQ7CisgICAgY29uc3Rl
eHByIENGdW5jdGlvblB0cihzdGQ6Om51bGxwdHJfdCkgeyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBl
bmFtZSBSZXR1cm5UeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgY29uc3RleHByIENG
dW5jdGlvblB0cihSZXR1cm5UeXBlKCZwdHIpKEFyZ3VtZW50cy4uLikpCkBAIC0xMzUsOCArMTM1
LDggQEAgY2xhc3MgQ0Z1bmN0aW9uUHRyIHsKIHRlbXBsYXRlPFB0clRhZyB0YWcgPSBDRnVuY3Rp
b25QdHJUYWc+CiBjbGFzcyBGdW5jdGlvblB0ciB7CiBwdWJsaWM6Ci0gICAgRnVuY3Rpb25QdHIo
KSB7IH0KLSAgICBGdW5jdGlvblB0cihzdGQ6Om51bGxwdHJfdCkgeyB9CisgICAgY29uc3RleHBy
IEZ1bmN0aW9uUHRyKCkgPSBkZWZhdWx0OworICAgIGNvbnN0ZXhwciBGdW5jdGlvblB0cihzdGQ6
Om51bGxwdHJfdCkgeyB9OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUmV0dXJuVHlwZSwgdHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIEZ1bmN0aW9uUHRyKFJldHVyblR5cGUoKnZhbHVlKShB
cmd1bWVudHMuLi4pKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
bG93UGF0aENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENh
bGwuY3BwCmluZGV4IGI0ZTQ3NThlNThmYjFlNzkyNmM2YTA3MTgzNzMxNTg5ODdjNzZkNTcuLjZk
Yzk3NjhiZWUyNWMyZDg1ZDU4NjMwNWYyMjQ2ODI0NThiNzgwYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAKQEAgLTExNiwxMiArMTE2LDE4IEBA
IFNsb3dQYXRoQ2FsbENvbnRleHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKIAogU2xvd1BhdGhD
YWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQoRnVuY3Rpb25QdHI8Q0Z1
bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KSBjb25zdAogewotICAgIHJldHVybiBTbG93UGF0aENh
bGxLZXkobV90aHVua1NhdmVTZXQsIGNhbGxUYXJnZXQsIG1fYXJndW1lbnRSZWdpc3RlcnMsIG1f
b2Zmc2V0LCAwKTsKKyAgICB1aW50OF90IG51bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZD
bG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQgPSAwOworICAgIGlmIChPcHRpb25zOjpjbG9iYmVyQWxs
UmVnc0luRlRMSUNTbG93UGF0aCgpKQorICAgICAgICBudW1iZXJPZlVzZWRBcmd1bWVudFJlZ2lz
dGVyc0lmQ2xvYmJlcmluZ0NoZWNrSXNFbmFibGVkID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VN
RU5UX1JFR0lTVEVSUywgbV9udW1BcmdzKTsKKyAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KG1f
dGh1bmtTYXZlU2V0LCBjYWxsVGFyZ2V0LCBudW1iZXJPZlVzZWRBcmd1bWVudFJlZ2lzdGVyc0lm
Q2xvYmJlcmluZ0NoZWNrSXNFbmFibGVkLCBtX29mZnNldCwgMCk7CiB9CiAKIFNsb3dQYXRoQ2Fs
bEtleSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KENDYWxsSGVscGVyczo6QWRk
cmVzcyBhZGRyZXNzKSBjb25zdAogewotICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkobV90aHVu
a1NhdmVTZXQsIG51bGxwdHIsIG1fYXJndW1lbnRSZWdpc3RlcnMsIG1fb2Zmc2V0LCBhZGRyZXNz
Lm9mZnNldCk7CisgICAgdWludDhfdCBudW1iZXJPZlVzZWRBcmd1bWVudFJlZ2lzdGVyc0lmQ2xv
YmJlcmluZ0NoZWNrSXNFbmFibGVkID0gMDsKKyAgICBpZiAoT3B0aW9uczo6Y2xvYmJlckFsbFJl
Z3NJbkZUTElDU2xvd1BhdGgoKSkKKyAgICAgICAgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3Rl
cnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVO
VF9SRUdJU1RFUlMsIG1fbnVtQXJncyk7CisgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3Ro
dW5rU2F2ZVNldCwgbnVsbHB0ciwgbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2Ji
ZXJpbmdDaGVja0lzRW5hYmxlZCwgbV9vZmZzZXQsIGFkZHJlc3Mub2Zmc2V0KTsKIH0KIAogU2xv
d1BhdGhDYWxsIFNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKFZNJiB2bSwgRnVuY3Rpb25Q
dHI8Q0Z1bmN0aW9uUHRyVGFnPiBjYWxsVGFyZ2V0KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuY3BwCmluZGV4IGM0ZTdlODI2MWZkNDczNmIxZDMz
NzJiZWY1NTEzZWZlNWFhMzlhODYuLjA4M2IzNTM2YTU4ZThjZDVhMzUwNGI5NDQzZWFmYmM5YTM5
NmM4NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsS2V5LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bEtleS5jcHAKQEAgLTMyLDcgKzMyLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAogdm9pZCBTbG93UGF0aENhbGxLZXk6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
IHsKLSAgICBvdXQucHJpbnQoIjx1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzLCAi
LCBvZmZzZXQgPSAiLCBtX29mZnNldCwgIiwgaW5kaXJlY3RPZmZzZXQgPSAiLCBtX2luZGlyZWN0
T2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJnZXQuZXhlY3V0
YWJsZUFkZHJlc3MoKSksICIsIGFyZ3VtZW50UmVnaXN0ZXJzID0gIiwgbV9hcmd1bWVudFJlZ2lz
dGVycywgIj4iKTsKKyAgICBvdXQucHJpbnQoIjx1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVn
aXN0ZXJzLCAiLCBvZmZzZXQgPSAiLCBtX29mZnNldCwgIiwgaW5kaXJlY3RPZmZzZXQgPSAiLCBt
X2luZGlyZWN0T2Zmc2V0LCAiLCBjYWxsVGFyZ2V0ID0gIiwgUmF3UG9pbnRlcihtX2NhbGxUYXJn
ZXQuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOworICAgIGlmIChPcHRpb25zOjpjbG9iYmVyQWxsUmVn
c0luRlRMSUNTbG93UGF0aCgpKQorICAgICAgICBvdXQucHJpbnQoIiwgYXJndW1lbnRSZWdpc3Rl
cnMgPSAiLCBhcmd1bWVudFJlZ2lzdGVyc0lmQ2xvYmJlcmluZ0NoZWNrSXNFbmFibGVkKCkpOwor
ICAgIG91dC5wcmludCgiPiIpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGxLZXkuaAppbmRleCA5OGYz
YTMwYjc0MTM2NzRmNjQzZDEzODk1NTc1MTdmYTFjODIzMjIyLi43ZTU0ZDg0YTM0MTc4N2M3YmMz
OGYxMWM5MjA4NzcwMWIzZGFlODQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbEtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsS2V5LmgKQEAgLTI3LDggKzI3LDggQEAKIAogI2lmIEVOQUJMRShGVExf
SklUKQogCi0jaW5jbHVkZSAiSGFzaGFibGVSZWdpc3RlclNldC5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIApAQCAtNDQsMzEgKzQ0LDU3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIAogY2xhc3MgU2xvd1BhdGhDYWxsS2V5IHsKIHB1YmxpYzoK
LSAgICBTbG93UGF0aENhbGxLZXkoKQotICAgICAgICA6IG1fb2Zmc2V0KDApCisgICAgZW51bSBj
bGFzcyBUeXBlIDogdWludDhfdCB7CisgICAgICAgIC8vIEZvciBIYXNoVGFibGVzLgorICAgICAg
ICBFbXB0eSwKKyAgICAgICAgRGVsZXRlZCwKKworICAgICAgICBEaXJlY3QsCisgICAgICAgIElu
ZGlyZWN0LAorICAgIH07CisgICAgU2xvd1BhdGhDYWxsS2V5KCkgPSBkZWZhdWx0OworICAgIAor
ICAgIFNsb3dQYXRoQ2FsbEtleShjb25zdCBSZWdpc3RlclNldCYgc2V0LCBGdW5jdGlvblB0cjxD
RnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQsIHVpbnQ4X3QgbnVtYmVyT2ZVc2VkQXJndW1lbnRS
ZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCwgcHRyZGlmZl90IG9mZnNldCwgaW50
MzJfdCBpbmRpcmVjdE9mZnNldCkKKyAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAg
ICwgbV91c2VkUmVnaXN0ZXJzKHNldCkKKyAgICAgICAgLCBtX251bWJlck9mVXNlZEFyZ3VtZW50
UmVnaXN0ZXJzSWZDbG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQobnVtYmVyT2ZVc2VkQXJndW1lbnRS
ZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCkKICAgICB7CisgICAgICAgIGlmIChj
YWxsVGFyZ2V0KSB7CisgICAgICAgICAgICBtX2NhbGxUYXJnZXQgPSBjYWxsVGFyZ2V0LnJldGFn
Z2VkPE9wZXJhdGlvblB0clRhZz4oKTsKKyAgICAgICAgICAgIG1fdHlwZSA9IFR5cGU6OkRpcmVj
dDsKKyAgICAgICAgICAgIEFTU0VSVCghaW5kaXJlY3RPZmZzZXQpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbV9pbmRpcmVjdE9mZnNldCA9IGluZGlyZWN0T2Zmc2V0OworICAgICAg
ICAgICAgbV90eXBlID0gVHlwZTo6SW5kaXJlY3Q7CisgICAgICAgIH0KICAgICB9CiAgICAgCi0g
ICAgU2xvd1BhdGhDYWxsS2V5KAotICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgc2V0LCBGdW5j
dGlvblB0cjxDRnVuY3Rpb25QdHJUYWc+IGNhbGxUYXJnZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiBh
cmd1bWVudFJlZ2lzdGVycywKLSAgICAgICAgcHRyZGlmZl90IG9mZnNldCwgaW50MzJfdCBpbmRp
cmVjdE9mZnNldCkKLSAgICAgICAgOiBtX3VzZWRSZWdpc3RlcnMoc2V0KQotICAgICAgICAsIG1f
Y2FsbFRhcmdldChjYWxsVGFyZ2V0LnJldGFnZ2VkPE9wZXJhdGlvblB0clRhZz4oKSkKLSAgICAg
ICAgLCBtX2FyZ3VtZW50UmVnaXN0ZXJzKGFyZ3VtZW50UmVnaXN0ZXJzKQotICAgICAgICAsIG1f
b2Zmc2V0KG9mZnNldCkKLSAgICAgICAgLCBtX2luZGlyZWN0T2Zmc2V0KGluZGlyZWN0T2Zmc2V0
KQorICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbFRhcmdldCgpIGNvbnN0CiAg
ICAgeworICAgICAgICBpZiAobV90eXBlID09IFR5cGU6OkRpcmVjdCkKKyAgICAgICAgICAgIHJl
dHVybiBtX2NhbGxUYXJnZXQ7CisgICAgICAgIHJldHVybiBudWxscHRyOwogICAgIH0KLSAgICAK
LSAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlZFJlZ2lzdGVyczsgfQotICAgIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4gY2FsbFRh
cmdldCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFRhcmdldDsgfQotICAgIGNvbnN0IFJlZ2lzdGVy
U2V0JiBhcmd1bWVudFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fYXJndW1lbnRSZWdpc3Rl
cnM7IH0KICAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0K
LSAgICBpbnQzMl90IGluZGlyZWN0T2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRpcmVjdE9m
ZnNldDsgfQorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyBy
ZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CisgICAgUmVnaXN0ZXJTZXQgYXJndW1lbnRSZWdpc3Rl
cnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCgpIGNvbnN0CisgICAgeworICAgICAgICBSRUxF
QVNFX0FTU0VSVChPcHRpb25zOjpjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCgpKTsKKyAg
ICAgICAgUmVnaXN0ZXJTZXQgYXJndW1lbnRSZWdpc3RlcnM7CisgICAgICAgIGZvciAodWludDhf
dCBpID0gMDsgaSA8IG1fbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdD
aGVja0lzRW5hYmxlZDsgKytpKQorICAgICAgICAgICAgYXJndW1lbnRSZWdpc3RlcnMuc2V0KEdQ
UkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgICAgIHJldHVybiBhcmd1bWVudFJl
Z2lzdGVyczsKKyAgICB9CisgICAgaW50MzJfdCBpbmRpcmVjdE9mZnNldCgpIGNvbnN0CisgICAg
eworICAgICAgICBpZiAobV90eXBlID09IFR5cGU6OkluZGlyZWN0KQorICAgICAgICAgICAgcmV0
dXJuIG1faW5kaXJlY3RPZmZzZXQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0KICAgICAKICAg
ICBTbG93UGF0aENhbGxLZXkgd2l0aENhbGxUYXJnZXQoRnVuY3Rpb25QdHI8Q0Z1bmN0aW9uUHRy
VGFnPiBjYWxsVGFyZ2V0KQogICAgIHsKLSAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1
c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIGFyZ3VtZW50UmVnaXN0ZXJzKCksIG9mZnNldCgp
LCBpbmRpcmVjdE9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2Vk
UmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQsIG1fbnVtYmVyT2ZVc2VkQXJndW1lbnRSZWdpc3RlcnNJ
ZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCwgb2Zmc2V0KCksIGluZGlyZWN0T2Zmc2V0KCkpOwog
ICAgIH0KICAgICAKICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKQEAgLTc3LDM4
ICsxMDMsNDYgQEAgY2xhc3MgU2xvd1BhdGhDYWxsS2V5IHsKICAgICBlbnVtIERlbGV0ZWRWYWx1
ZVRhZyB7IERlbGV0ZWRWYWx1ZSB9OwogICAgIAogICAgIFNsb3dQYXRoQ2FsbEtleShFbXB0eVZh
bHVlVGFnKQotICAgICAgICA6IG1fdXNlZFJlZ2lzdGVycyhIYXNoYWJsZVJlZ2lzdGVyU2V0OjpF
bXB0eVZhbHVlKQorICAgICAgICA6IG1fdHlwZShUeXBlOjpFbXB0eSkKICAgICB7CiAgICAgfQog
ICAgIAogICAgIFNsb3dQYXRoQ2FsbEtleShEZWxldGVkVmFsdWVUYWcpCi0gICAgICAgIDogbV91
c2VkUmVnaXN0ZXJzKEhhc2hhYmxlUmVnaXN0ZXJTZXQ6OkRlbGV0ZWRWYWx1ZSkKKyAgICAgICAg
OiBtX3R5cGUoVHlwZTo6RGVsZXRlZCkKICAgICB7CiAgICAgfQogICAgIAotICAgIGJvb2wgaXNF
bXB0eVZhbHVlKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmlzRW1wdHlWYWx1ZSgp
OyB9Ci0gICAgYm9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lz
dGVycy5pc0RlbGV0ZWRWYWx1ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5VmFsdWUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUgPT0gVHlwZTo6RW1wdHk7IH0KKyAgICBib29sIGlzRGVsZXRlZFZhbHVl
KCkgY29uc3QgeyByZXR1cm4gbV90eXBlID09IFR5cGU6OkRlbGV0ZWQ7IH0KICAgICAKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgU2xvd1BhdGhDYWxsS2V5JiBvdGhlcikgY29uc3QKICAgICB7
Ci0gICAgICAgIHJldHVybiBtX3VzZWRSZWdpc3RlcnMgPT0gb3RoZXIubV91c2VkUmVnaXN0ZXJz
Ci0gICAgICAgICAgICAmJiBtX2NhbGxUYXJnZXQgPT0gb3RoZXIubV9jYWxsVGFyZ2V0Ci0gICAg
ICAgICAgICAmJiBtX29mZnNldCA9PSBvdGhlci5tX29mZnNldAotICAgICAgICAgICAgJiYgbV9p
bmRpcmVjdE9mZnNldCA9PSBvdGhlci5tX2luZGlyZWN0T2Zmc2V0OworICAgICAgICByZXR1cm4g
bV9vZmZzZXQgPT0gb3RoZXIubV9vZmZzZXQKKyAgICAgICAgICAgICYmIG1fdXNlZFJlZ2lzdGVy
cyA9PSBvdGhlci5tX3VzZWRSZWdpc3RlcnMKKyAgICAgICAgICAgICYmIG1fbnVtYmVyT2ZVc2Vk
QXJndW1lbnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCA9PSBvdGhlci5tX251
bWJlck9mVXNlZEFyZ3VtZW50UmVnaXN0ZXJzSWZDbG9iYmVyaW5nQ2hlY2tJc0VuYWJsZWQKKyAg
ICAgICAgICAgICYmIG1fdHlwZSA9PSBvdGhlci5tX3R5cGUKKyAgICAgICAgICAgICYmIGNhbGxU
YXJnZXQoKSA9PSBvdGhlci5jYWxsVGFyZ2V0KCkKKyAgICAgICAgICAgICYmIGluZGlyZWN0T2Zm
c2V0KCkgPT0gb3RoZXIuaW5kaXJlY3RPZmZzZXQoKTsKICAgICB9CiAgICAgdW5zaWduZWQgaGFz
aCgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gbV91c2VkUmVnaXN0ZXJzLmhhc2goKSAr
IFB0ckhhc2g8dm9pZCo+OjpoYXNoKG1fY2FsbFRhcmdldC5leGVjdXRhYmxlQWRkcmVzcygpKSAr
IG1fb2Zmc2V0ICsgbV9pbmRpcmVjdE9mZnNldDsKKyAgICAgICAgcmV0dXJuIFB0ckhhc2g8dm9p
ZCo+OjpoYXNoKGNhbGxUYXJnZXQoKS5leGVjdXRhYmxlQWRkcmVzcygpKSArIG1fb2Zmc2V0ICsg
bV91c2VkUmVnaXN0ZXJzLmhhc2goKSArIGluZGlyZWN0T2Zmc2V0KCkgKyBzdGF0aWNfY2FzdDx1
bnNpZ25lZD4obV90eXBlKTsKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgSGFzaGFibGVSZWdpc3Rl
clNldCBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPiBt
X2NhbGxUYXJnZXQ7Ci0gICAgUmVnaXN0ZXJTZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsKKyAgICBz
dGF0aWNfYXNzZXJ0KE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgPD0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50OF90Pjo6bWF4KCkpOworCisgICAgdW5pb24geworICAgICAgICBGdW5jdGlv
blB0cjxPcGVyYXRpb25QdHJUYWc+IG1fY2FsbFRhcmdldCB7IH07CisgICAgICAgIGludDMyX3Qg
bV9pbmRpcmVjdE9mZnNldDsKKyAgICB9OwogICAgIHB0cmRpZmZfdCBtX29mZnNldCB7IDAgfTsK
LSAgICBpbnQzMl90IG1faW5kaXJlY3RPZmZzZXQgeyAwIH07CisgICAgUmVnaXN0ZXJTZXQgbV91
c2VkUmVnaXN0ZXJzOworICAgIHVpbnQ4X3QgbV9udW1iZXJPZlVzZWRBcmd1bWVudFJlZ2lzdGVy
c0lmQ2xvYmJlcmluZ0NoZWNrSXNFbmFibGVkIHsgMCB9OworICAgIFR5cGUgbV90eXBlIHsgVHlw
ZTo6RW1wdHkgfTsKIH07CiAKKwogc3RydWN0IFNsb3dQYXRoQ2FsbEtleUhhc2ggewogICAgIHN0
YXRpYyB1bnNpZ25lZCBoYXNoKGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYga2V5KSB7IHJldHVybiBr
ZXkuaGFzaCgpOyB9CiAgICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgU2xvd1BhdGhDYWxsS2V5
JiBhLCBjb25zdCBTbG93UGF0aENhbGxLZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCmluZGV4IGRlODIxMzg1MTBmMTEwYjBmYmE4
ZmE3YzYwMWU1MTIyNjFmMjIzMDcuLjIxYTYxN2VkODNhY2I1NjM4NzZiYTA0MzBiYTkyYTJjN2Iz
YzI3ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5jcHAKQEAgLTEzOSw5
ICsxMzksNyBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IGxhenlTbG93
UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSYgdgogCiBzdGF0aWMgdm9pZCByZWdpc3Rl
ckNsb2JiZXJDaGVjayhBc3NlbWJseUhlbHBlcnMmIGppdCwgUmVnaXN0ZXJTZXQgZG9udENsb2Ji
ZXIpCiB7Ci0gICAgaWYgKCFPcHRpb25zOjpjbG9iYmVyQWxsUmVnc0luRlRMSUNTbG93UGF0aCgp
KQotICAgICAgICByZXR1cm47Ci0gICAgCisgICAgQVNTRVJUKE9wdGlvbnM6OmNsb2JiZXJBbGxS
ZWdzSW5GVExJQ1Nsb3dQYXRoKCkpOwogICAgIFJlZ2lzdGVyU2V0IGNsb2JiZXIgPSBSZWdpc3Rl
clNldDo6YWxsUmVnaXN0ZXJzKCk7CiAgICAgY2xvYmJlci5leGNsdWRlKFJlZ2lzdGVyU2V0Ojpy
ZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOwogICAgIGNsb2JiZXIuZXhjbHVkZShSZWdpc3Rl
clNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CkBAIC0yMDIsMTAgKzIwMCwxMiBAQCBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWY8SklUVGh1bmtQdHJUYWc+IHNsb3dQYXRoQ2FsbFRodW5rR2VuZXJhdG9yKFZN
JiB2bSwgY29uc3QgUwogICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpub25BcmdHUFIxLCBBc3Nl
bWJseUhlbHBlcnM6OkFkZHJlc3MoTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
LCBrZXkub2Zmc2V0KCkpKTsKICAgICBqaXQucHJlcGFyZUNhbGxPcGVyYXRpb24odm0pOwogICAg
IAotICAgIFJlZ2lzdGVyU2V0IGRvbnRDbG9iYmVyID0ga2V5LmFyZ3VtZW50UmVnaXN0ZXJzKCk7
Ci0gICAgaWYgKCFrZXkuY2FsbFRhcmdldCgpKQotICAgICAgICBkb250Q2xvYmJlci5zZXQoR1BS
SW5mbzo6bm9uQXJnR1BSMCk7Ci0gICAgcmVnaXN0ZXJDbG9iYmVyQ2hlY2soaml0LCBXVEZNb3Zl
KGRvbnRDbG9iYmVyKSk7CisgICAgaWYgKE9wdGlvbnM6OmNsb2JiZXJBbGxSZWdzSW5GVExJQ1Ns
b3dQYXRoKCkpIHsKKyAgICAgICAgUmVnaXN0ZXJTZXQgZG9udENsb2JiZXIgPSBrZXkuYXJndW1l
bnRSZWdpc3RlcnNJZkNsb2JiZXJpbmdDaGVja0lzRW5hYmxlZCgpOworICAgICAgICBpZiAoIWtl
eS5jYWxsVGFyZ2V0KCkpCisgICAgICAgICAgICBkb250Q2xvYmJlci5zZXQoR1BSSW5mbzo6bm9u
QXJnR1BSMCk7CisgICAgICAgIHJlZ2lzdGVyQ2xvYmJlckNoZWNrKGppdCwgV1RGTW92ZShkb250
Q2xvYmJlcikpOworICAgIH0KIAogICAgIEFzc2VtYmx5SGVscGVyczo6Q2FsbCBjYWxsOwogICAg
IGlmIChrZXkuY2FsbFRhcmdldCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9IYXNoYWJsZVJlZ2lzdGVyU2V0LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hh
c2hhYmxlUmVnaXN0ZXJTZXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzFkYjc3
ZTkxNWQ2Nzc5NDQ2YjY1MjgxY2ZiMDNhYWE4ZDY2NmY2My4uMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0hhc2hh
YmxlUmVnaXN0ZXJTZXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk2ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMjEgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
ZiAhRU5BQkxFKENfTE9PUCkKLQotI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCi0KLW5hbWVzcGFj
ZSBKU0MgewotCi1jbGFzcyBIYXNoYWJsZVJlZ2lzdGVyU2V0IDogcHVibGljIFJlZ2lzdGVyU2V0
IHsKLSAgICBlbnVtIFN0YXRlIHsKLSAgICAgICAgTm9ybWFsLAotICAgICAgICBFbXB0eSwKLSAg
ICAgICAgRGVsZXRlZAotICAgIH07Ci0KLXB1YmxpYzoKLSAgICBjb25zdGV4cHIgSGFzaGFibGVS
ZWdpc3RlclNldCgpIHsgfQotCi0gICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gUmVncz4KLSAgICBj
b25zdGV4cHIgZXhwbGljaXQgSGFzaGFibGVSZWdpc3RlclNldChSZWdzLi4uIHJlZ3MpCi0gICAg
ICAgIDogUmVnaXN0ZXJTZXQocmVncy4uLikKLSAgICB7Ci0gICAgfQotCi0gICAgZW51bSBFbXB0
eVZhbHVlVGFnIHsgRW1wdHlWYWx1ZSB9OwotICAgIGVudW0gRGVsZXRlZFZhbHVlVGFnIHsgRGVs
ZXRlZFZhbHVlIH07Ci0gICAgCi0gICAgSGFzaGFibGVSZWdpc3RlclNldChFbXB0eVZhbHVlVGFn
KQotICAgICAgICA6IG1fc3RhdGUoRW1wdHkpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBIYXNo
YWJsZVJlZ2lzdGVyU2V0KERlbGV0ZWRWYWx1ZVRhZykKLSAgICAgICAgOiBtX3N0YXRlKERlbGV0
ZWQpCi0gICAgewotICAgIH0KLSAgICAKLSAgICBib29sIGlzRW1wdHlWYWx1ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9zdGF0ZSA9PSBFbXB0eTsKLSAgICB9Ci0gICAgCi0gICAg
Ym9vbCBpc0RlbGV0ZWRWYWx1ZSgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9zdGF0
ZSA9PSBEZWxldGVkOwotICAgIH0KLSAgICAKLXByaXZhdGU6Ci0gICAgU3RhdGUgbV9zdGF0ZSB7
IE5vcm1hbCB9OwotfTsKLQotc3RydWN0IFJlZ2lzdGVyU2V0SGFzaCB7Ci0gICAgc3RhdGljIHVu
c2lnbmVkIGhhc2goY29uc3QgSGFzaGFibGVSZWdpc3RlclNldCYgc2V0KSB7IHJldHVybiBzZXQu
aGFzaCgpOyB9Ci0gICAgc3RhdGljIGJvb2wgZXF1YWwoY29uc3QgSGFzaGFibGVSZWdpc3RlclNl
dCYgYSwgY29uc3QgSGFzaGFibGVSZWdpc3RlclNldCYgYikgeyByZXR1cm4gYSA9PSBiOyB9Ci0g
ICAgc3RhdGljIGNvbnN0ZXhwciBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVkID0g
ZmFsc2U7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotbmFtZXNwYWNlIFdURiB7Ci0KLXRl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKLXRlbXBsYXRlPD4gc3RydWN0
IERlZmF1bHRIYXNoPEpTQzo6SGFzaGFibGVSZWdpc3RlclNldD4gOiBKU0M6OlJlZ2lzdGVyU2V0
SGFzaCB7IH07Ci0KLXRlbXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwotdGVt
cGxhdGU8PiBzdHJ1Y3QgSGFzaFRyYWl0czxKU0M6Okhhc2hhYmxlUmVnaXN0ZXJTZXQ+IDogcHVi
bGljIEN1c3RvbUhhc2hUcmFpdHM8SlNDOjpIYXNoYWJsZVJlZ2lzdGVyU2V0PiB7IH07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gIUVOQUJMRShDX0xPT1ApCi0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuaAppbmRleCBjOWUzN2Y0OTQ3NGNmNzU4MjZkNGMx
NWMzOTE5ZmNjNWI2ZTA4YjgzLi5kNTA2ZjA2NDUyMDEzZmEyNzIzYzEzY2EyZDIwY2JiMzM3OWZm
NDFhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5oCkBAIC0yMDIsNiAr
MjAyLDE5IEBAIGNsYXNzIFJlZ2lzdGVyU2V0IHsKICAgICBSZWdpc3RlckJpdG1hcCBtX2JpdHM7
CiB9OwogCitzdHJ1Y3QgUmVnaXN0ZXJTZXRIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBSZWdpc3RlclNldCYgc2V0KSB7IHJldHVybiBzZXQuaGFzaCgpOyB9CisgICAgc3Rh
dGljIGJvb2wgZXF1YWwoY29uc3QgUmVnaXN0ZXJTZXQmIGEsIGNvbnN0IFJlZ2lzdGVyU2V0JiBi
KSB7IHJldHVybiBhID09IGI7IH0KKyAgICBzdGF0aWMgY29uc3RleHByIGJvb2wgc2FmZVRvQ29t
cGFyZVRvRW1wdHlPckRlbGV0ZWQgPSBmYWxzZTsKK307CisKIH0gLy8gbmFtZXNwYWNlIEpTQwog
CituYW1lc3BhY2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVD4gc3RydWN0IERlZmF1bHRI
YXNoOwordGVtcGxhdGU8PiBzdHJ1Y3QgRGVmYXVsdEhhc2g8SlNDOjpSZWdpc3RlclNldD4gOiBK
U0M6OlJlZ2lzdGVyU2V0SGFzaCB7IH07CisKK30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYg
Ly8gIUVOQUJMRShDX0xPT1ApCg==
</data>
<flag name="review"
          id="483927"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
    <flag name="commit-queue"
          id="483929"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>