<?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>183982</bug_id>
          
          <creation_ts>2018-03-24 06:50:29 -0700</creation_ts>
          <short_desc>[JSC] Add options to report parsing and bytecode compiling times</short_desc>
          <delta_ts>2018-03-24 12:29:08 -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>darin</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1409087</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-24 06:50:29 -0700</bug_when>
    <thetext>[JSC] Add options to report parsing and bytecode compiling times</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409088</commentid>
    <comment_count>1</comment_count>
      <attachid>336472</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-24 06:52:35 -0700</bug_when>
    <thetext>Created attachment 336472
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409106</commentid>
    <comment_count>2</comment_count>
      <attachid>336472</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-24 11:24:18 -0700</bug_when>
    <thetext>Comment on attachment 336472
Patch

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

r=me with issues addressed.

&gt; Source/JavaScriptCore/bytecode/ParseHash.cpp:50
&gt; +    if (!hashForCall)
&gt; +        hashForCall = 1;
&gt; +    if (!hashForConstruct)
&gt; +        hashForConstruct = 1;

CodeForCall has value 0, and CodeForConstruct has value 1.  The only way that hashForCall is 0 is if hash is 0, which means that hasForConstruct being 0 ^ 1 i.e. 1.  Similarly, if hash has value 1, then both hashForCall and hashForConstruct will end up having the same value of 1.  Is this intentional?  

My gut feeling is that there&apos;s more value in having hashForCall and hashForConstruct being different.  If either hashForCall or hashForConstruct is 0, I suggest using a different value like 0xbb4472, which prints as #AAzero once it goes thru our integerToSixCharacterHashString() conversion.  This way one will be #AAzero when the other is #AAAAAB (i.e. 0x1).

Sidenote: I would prefer a snazzier hash like #zzzero or #zerooo or #00zero or #zero00 (or uppercase equivalents), but alas, those are not encodable in an unsigned hash value.  So, #AAzero is the best we can do. =(

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:392
&gt; +            if (result.isValid())
&gt; +                return result;

You&apos;re returning early when the result is valid i.e. under normal circumstance, we&apos;ll never report the byte code compile times.  I think you meant to test !result.isValid() instead.

On that note, would we want to also dump failed compile times (with a &quot;Failed to compile &quot; header instead) when the result is invalid?  We did consume time compiling after all.  I&apos;m not insisting on this, but just wanted to share the thought for consideration.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:396
&gt; +                dataLog(&quot;Compiled #&quot;, CodeBlockHash(sourceCode, unlinkedCodeBlock-&gt;isConstructor() ? CodeForConstruct : CodeForCall), &quot; into bytecode &quot;, bytecodeGenerator-&gt;instructions().size(), &quot; instructions in &quot;, (after - before).milliseconds(), &quot; ms.\n&quot;);

FYI, alternatively, you can just use dataLogLn() and leave out the &quot;\n&quot; at the end.

&gt; Source/JavaScriptCore/parser/Parser.h:1978
&gt; +    if (UNLIKELY(!result))
&gt;          return result;

Ditto.  Would we want to also dump &quot;failed parse&quot; times?

&gt; Source/JavaScriptCore/parser/Parser.h:1983
&gt; +        dataLog(&quot;Parsed #&quot;, hash.hashForCall(), &quot;/#&quot;, hash.hashForConstruct(), &quot; in &quot;, (after - before).milliseconds(), &quot; ms.\n&quot;);

Ditto. You can alternately use dataLogLn() and leave out the &quot;\n&quot; at the end.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409109</commentid>
    <comment_count>3</comment_count>
      <attachid>336472</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-24 11:41:05 -0700</bug_when>
    <thetext>Comment on attachment 336472
Patch

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

&gt;&gt; Source/JavaScriptCore/bytecode/ParseHash.cpp:50
&gt;&gt; +        hashForConstruct = 1;
&gt; 
&gt; CodeForCall has value 0, and CodeForConstruct has value 1.  The only way that hashForCall is 0 is if hash is 0, which means that hasForConstruct being 0 ^ 1 i.e. 1.  Similarly, if hash has value 1, then both hashForCall and hashForConstruct will end up having the same value of 1.  Is this intentional?  
&gt; 
&gt; My gut feeling is that there&apos;s more value in having hashForCall and hashForConstruct being different.  If either hashForCall or hashForConstruct is 0, I suggest using a different value like 0xbb4472, which prints as #AAzero once it goes thru our integerToSixCharacterHashString() conversion.  This way one will be #AAzero when the other is #AAAAAB (i.e. 0x1).
&gt; 
&gt; Sidenote: I would prefer a snazzier hash like #zzzero or #zerooo or #00zero or #zero00 (or uppercase equivalents), but alas, those are not encodable in an unsigned hash value.  So, #AAzero is the best we can do. =(

Yes, right now, this is the same to CodeBlockHash&apos;s algorithm, which is important to track the same source consistently with the same hash.
&quot;#AAzero&quot; sounds good. I&apos;ll change CodeBlockHash too.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:392
&gt;&gt; +                return result;
&gt; 
&gt; You&apos;re returning early when the result is valid i.e. under normal circumstance, we&apos;ll never report the byte code compile times.  I think you meant to test !result.isValid() instead.
&gt; 
&gt; On that note, would we want to also dump failed compile times (with a &quot;Failed to compile &quot; header instead) when the result is invalid?  We did consume time compiling after all.  I&apos;m not insisting on this, but just wanted to share the thought for consideration.

A bit interestingly, this result is ParserError. So result.isValid() means we failed to generate bytecodes.
Reporting &quot;Failed to compile&quot; case sounds reasonable. I&apos;ll add this.

&gt;&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:396
&gt;&gt; +                dataLog(&quot;Compiled #&quot;, CodeBlockHash(sourceCode, unlinkedCodeBlock-&gt;isConstructor() ? CodeForConstruct : CodeForCall), &quot; into bytecode &quot;, bytecodeGenerator-&gt;instructions().size(), &quot; instructions in &quot;, (after - before).milliseconds(), &quot; ms.\n&quot;);
&gt; 
&gt; FYI, alternatively, you can just use dataLogLn() and leave out the &quot;\n&quot; at the end.

Fixed.

&gt;&gt; Source/JavaScriptCore/parser/Parser.h:1978
&gt;&gt;          return result;
&gt; 
&gt; Ditto.  Would we want to also dump &quot;failed parse&quot; times?

Added.

&gt;&gt; Source/JavaScriptCore/parser/Parser.h:1983
&gt;&gt; +        dataLog(&quot;Parsed #&quot;, hash.hashForCall(), &quot;/#&quot;, hash.hashForConstruct(), &quot; in &quot;, (after - before).milliseconds(), &quot; ms.\n&quot;);
&gt; 
&gt; Ditto. You can alternately use dataLogLn() and leave out the &quot;\n&quot; at the end.

Fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409111</commentid>
    <comment_count>4</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-24 12:04:23 -0700</bug_when>
    <thetext>Committed r229952: &lt;https://trac.webkit.org/changeset/229952&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409112</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-03-24 12:05:15 -0700</bug_when>
    <thetext>&lt;rdar://problem/38829993&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409121</commentid>
    <comment_count>6</comment_count>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2018-03-24 12:20:26 -0700</bug_when>
    <thetext>(In reply to Yusuke Suzuki from comment #4)
&gt; Committed r229952: &lt;https://trac.webkit.org/changeset/229952&gt;

Oh, I didn&apos;t think you were going to fix the hash before you xor in the CodeForCall/Construct:

    if (hash == 0 || hash == 1)
        hash += 0xbb4472;

May I suggest a different constant instead:

    if (hash == 0 || hash == 1)
        hash += 0x2d5a93d0; // Ensures a non-zero hash, and gets us #Azero0 for CodeForCall and #Azero1 for CodeForConstruct.

Please also add that comment so that it&apos;ll be clear why we chose this odd constant.  rs=me to just change this in a follow up patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1409124</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-03-24 12:29:08 -0700</bug_when>
    <thetext>Committed r229953: &lt;https://trac.webkit.org/changeset/229953&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>336472</attachid>
            <date>2018-03-24 06:52:35 -0700</date>
            <delta_ts>2018-03-24 11:24:32 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-183982-20180324225234.patch</filename>
            <type>text/plain</type>
            <size>18942</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjI5OTUwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAz
MTkwYmFlN2JjYWZjZmU3MzY0MzczYzJhOWEyY2IzOTQ3YjMzNDlhLi5lZDlkZTM5OWE4ODMyNmU3
MzRmOTFmMTY1ZDQzYWQwNDQxNTNmMjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzMSBAQAorMjAxOC0wMy0yNCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgb3B0aW9ucyB0byByZXBvcnQgcGFyc2luZyBhbmQg
Ynl0ZWNvZGUgY29tcGlsaW5nIHRpbWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xODM5ODIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGFkZHMgcmVwb3J0UGFyc2VUaW1lcyBhbmQgcmVw
b3J0Qnl0ZWNvZGVDb21waWxlVGltZXMgb3B0aW9ucy4KKyAgICAgICAgV2hlbiB0aGV5IGFyZSBl
bmFibGVkLCBKU0MgcmVwb3J0cyB0aW1lcyBjb25zdW1lZCBmb3IgcGFyc2luZyBhbmQgYnl0ZWNv
ZGUKKyAgICAgICAgY29tcGlsaW5nLgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBi
eXRlY29kZS9QYXJzZUhhc2guY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6UGFyc2VIYXNoOjpQ
YXJzZUhhc2gpOgorICAgICAgICAqIGJ5dGVjb2RlL1BhcnNlSGFzaC5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6UGFyc2VIYXNoOjpoYXNoRm9yQ2FsbCBjb25zdCk6CisgICAgICAgIChKU0M6OlBh
cnNlSGFzaDo6aGFzaEZvckNvbnN0cnVjdCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvVW5s
aW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpnZW5lcmF0ZVVubGlu
a2VkRnVuY3Rpb25Db2RlQmxvY2spOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5oOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUpOgor
ICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OmdlbmVyYXRlVW5saW5rZWRD
b2RlQmxvY2spOgorICAgICAgICAqIHJ1bnRpbWUvT3B0aW9ucy5oOgorCiAyMDE4LTAzLTIzICBU
aW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCB0aGUg
YnVpbGQgd2l0aCBubyBwYXN0ZWJvYXJkCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4
IDBlMDY4ZmIwODNkYWExMWUyYWIyYzQ0Njg3OGE0ZWE3NjkyMjBiYTMuLjU2Nzg0MmEyZDM0YTU2
ODgzYWRlZDJjNTlkMWEzNDE3ODNhZGI2NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CkBAIC0xNzAxLDYgKzE3MDEsNyBAQAogCQlFMzNGNTA4MTFCODQyOUE0MDA0MTM4NTYgLyogSlNJ
bnRlcm5hbFByb21pc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUzM0Y1MDdGMUI4NDI5QTQwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzM0Y1MDg1
MUI4NDM3QTAwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZURlZmVycmVkLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzNGNTA4MzFCODQzN0EwMDA0
MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VEZWZlcnJlZC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzM0Y1MDg3MUI4NDQ5RUYwMDQxMzg1NiAv
KiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzRjUwODYxQjg0NDlFRjAwNDEzODU2IC8qIEpT
SW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IubHV0LmggKi87IH07CisJCUUzNEU2NTc1MjA2NjhF
QUEwMEZCODFBQyAvKiBQYXJzZUhhc2guaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzNEU2NTczMjA2NjhFOEQwMEZCODFBQyAvKiBQYXJzZUhhc2guaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzRFREJG
NzFEQjVGRkM5MDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzRFREJGNjFEQjVGRkMxMDBEQzg3QTUgLyogRnJh
bWVUcmFjZXJzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTM1MDcwOEExREM0OUJCRjAwODlCQ0Q2IC8qIERPTUpJVFNpZ25hdHVyZS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM1MDcwODkxREM0OUJC
NjAwODlCQ0Q2IC8qIERPTUpJVFNpZ25hdHVyZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVT
ID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzNTQ2MjJCMUI2MDY1RDEwMDU0NTM4NiAvKiBDb25z
dHJ1Y3RBYmlsaXR5LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC00NTQ4LDYgKzQ1
NDksOCBAQAogCQlFMzNGNTA4MzFCODQzN0EwMDA0MTM4NTYgLyogSlNJbnRlcm5hbFByb21pc2VE
ZWZlcnJlZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsUHJv
bWlzZURlZmVycmVkLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUzM0Y1MDg2MUI4
NDQ5RUYwMDQxMzg1NiAvKiBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9yLmx1dC5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0ludGVybmFsUHJvbWlzZUNvbnN0cnVjdG9y
Lmx1dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNGNTA4ODFCODQ0QTFBMDA0
MTM4NTYgLyogSW50ZXJuYWxQcm9taXNlQ29uc3RydWN0b3IuanMgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmphdmFzY3JpcHQ7IHBhdGggPSBJbnRlcm5hbFByb21pc2VDb25zdHJ1Y3Rvci5qczsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM0RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8qIFBh
cnNlSGFzaC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZUhhc2guaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTM0RTY1NzQyMDY2OEU4RTAwRkI4MUFDIC8q
IFBhcnNlSGFzaC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQYXJz
ZUhhc2guY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzRFREJGNjFEQjVGRkMx
MDBEQzg3QTUgLyogRnJhbWVUcmFjZXJzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEZyYW1lVHJhY2Vycy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzUwNzA4
OTFEQzQ5QkI2MDA4OUJDRDYgLyogRE9NSklUU2lnbmF0dXJlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IERPTUpJVFNpZ25hdHVyZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMzU0NjIyQTFCNjA2NUQxMDA1NDUzODYgLyogQ29uc3RydWN0QWJpbGl0eS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdHJ1Y3RBYmlsaXR5Lmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03NjM5LDYgKzc2NDIsOCBAQAogCQkJCTk2OUEwNzk1
MEVEMUQzQUUwMEYxRjY4MSAvKiBPcGNvZGUuaCAqLywKIAkJCQkwRjJCREMyQjE1MUZERThCMDBD
RDg5MTAgLyogT3BlcmFuZHMuaCAqLywKIAkJCQlBNzA0NDdFOTE3QTBCRDQ2MDBGNTg5OEUgLyog
T3BlcmFuZHNJbmxpbmVzLmggKi8sCisJCQkJRTM0RTY1NzQyMDY2OEU4RTAwRkI4MUFDIC8qIFBh
cnNlSGFzaC5jcHAgKi8sCisJCQkJRTM0RTY1NzMyMDY2OEU4RDAwRkI4MUFDIC8qIFBhcnNlSGFz
aC5oICovLAogCQkJCTBGRjlDRTcxMUI5Q0Q2RDAwMDRFRENBNiAvKiBQb2x5bW9ycGhpY0FjY2Vz
cy5jcHAgKi8sCiAJCQkJMEZGOUNFNzIxQjlDRDZEMDAwNEVEQ0E2IC8qIFBvbHltb3JwaGljQWNj
ZXNzLmggKi8sCiAJCQkJNTIxMTMxRjUxRjgyQkYxMTAwN0NDRUVFIC8qIFBvbHlQcm90b0FjY2Vz
c0NoYWluLmNwcCAqLywKQEAgLTkyMzIsNiArOTIzNyw3IEBACiAJCQkJQkMxOEM0NDgwRTE2RjVD
RDAwQjM0NDYwIC8qIE9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRTIyOEVEMTQz
NkFCMjcwMDE5NkM0OCAvKiBPcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjlEQUEwQTFG
RDFDM0QzMDA3OUM1QjIgLyogUGFyYWxsZWxTb3VyY2VBZGFwdGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFMzRFNjU3NTIwNjY4RUFBMDBGQjgxQUMgLyogUGFyc2VIYXNoLmggaW4gSGVhZGVycyAq
LywKIAkJCQkzN0M3MzhEMjFFREI1NkU0MDAzRjJCMEIgLyogUGFyc2VJbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUJDMThDNDRCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBQYXJzZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMDUyQzM1MEZCNzkyMTkwMDQ4RkRDMyAvKiBQYXJzZXJBcmVuYS5oIGluIEhl
YWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggYjJkODY0ZmY4YWZlZTJi
ZDg2YTBhZWZhY2JmNWRmNjQ4ZTFjOTk2OS4uZDdmNTAyM2Q2Y2QzNmE2ZjQxYTZhM2Y0N2MzMWFh
Mzg1NTcxMWI3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjMyLDYgKzIzMiw3
IEBAIGJ5dGVjb2RlL01vZHVsZVByb2dyYW1Db2RlQmxvY2suY3BwCiBieXRlY29kZS9PYmplY3RQ
cm9wZXJ0eUNvbmRpdGlvbi5jcHAKIGJ5dGVjb2RlL09iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
LmNwcAogYnl0ZWNvZGUvT3Bjb2RlLmNwcAorYnl0ZWNvZGUvUGFyc2VIYXNoLmNwcAogYnl0ZWNv
ZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uY3BwCiBieXRlY29kZS9Qb2x5bW9ycGhpY0FjY2Vzcy5j
cHAKIGJ5dGVjb2RlL1ByZWNpc2VKdW1wVGFyZ2V0cy5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QYXJzZUhhc2guY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BhcnNlSGFzaC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTIzZjIxYjQzNzQ1OTRlYTQw
YWUxZmJhZTJmMDJiMmE2OGJjNzFmMgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9QYXJzZUhhc2guY3BwCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlBhcnNlSGFzaC5oIgorCisjaW5jbHVkZSAiU291cmNlQ29kZS5o
IgorI2luY2x1ZGUgPHd0Zi9TSEExLmg+CisjaW5jbHVkZSA8d3RmL1NpeENoYXJhY3Rlckhhc2gu
aD4KKworbmFtZXNwYWNlIEpTQyB7CisKK1BhcnNlSGFzaDo6UGFyc2VIYXNoKGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZUNvZGUpCit7CisgICAgU0hBMSBzaGExOworICAgIHNoYTEuYWRkQnl0ZXMo
c291cmNlQ29kZS50b1VURjgoKSk7CisgICAgU0hBMTo6RGlnZXN0IGRpZ2VzdDsKKyAgICBzaGEx
LmNvbXB1dGVIYXNoKGRpZ2VzdCk7CisgICAgdW5zaWduZWQgaGFzaCA9IGRpZ2VzdFswXSB8IChk
aWdlc3RbMV0gPDwgOCkgfCAoZGlnZXN0WzJdIDw8IDE2KSB8IChkaWdlc3RbM10gPDwgMjQpOwor
CisgICAgdW5zaWduZWQgaGFzaEZvckNhbGwgPSBoYXNoIF4gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KENvZGVGb3JDYWxsKTsKKyAgICB1bnNpZ25lZCBoYXNoRm9yQ29uc3RydWN0ID0gaGFzaCBeIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihDb2RlRm9yQ29uc3RydWN0KTsKKworICAgIC8vIEVuc3VyZSB0
aGF0IDAgY29ycmVzcG9uZHMgdG8gdGhlIGhhc2ggbm90IGhhdmluZyBiZWVuIGNvbXB1dGVkLgor
ICAgIGlmICghaGFzaEZvckNhbGwpCisgICAgICAgIGhhc2hGb3JDYWxsID0gMTsKKyAgICBpZiAo
IWhhc2hGb3JDb25zdHJ1Y3QpCisgICAgICAgIGhhc2hGb3JDb25zdHJ1Y3QgPSAxOworCisgICAg
bV9oYXNoRm9yQ2FsbCA9IENvZGVCbG9ja0hhc2goaGFzaEZvckNhbGwpOworICAgIG1faGFzaEZv
ckNvbnN0cnVjdCA9IENvZGVCbG9ja0hhc2goaGFzaEZvckNvbnN0cnVjdCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUGFyc2VIYXNoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUGFyc2VIYXNo
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNzUyMzBiNmM4NDI4OWUyZDI5NzJhOTM1MWE0ZTA4OTg5NjkxNjJhMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QYXJzZUhh
c2guaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ29kZUJsb2NrSGFz
aC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgUGFyc2VIYXNoIHsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBQYXJzZUhhc2goY29uc3QgU291cmNlQ29kZSYpOworCisgICAgQ29kZUJsb2Nr
SGFzaCBoYXNoRm9yQ2FsbCgpIGNvbnN0IHsgcmV0dXJuIG1faGFzaEZvckNhbGw7IH0KKyAgICBD
b2RlQmxvY2tIYXNoIGhhc2hGb3JDb25zdHJ1Y3QoKSBjb25zdCB7IHJldHVybiBtX2hhc2hGb3JD
b25zdHJ1Y3Q7IH0KKworcHJpdmF0ZToKKyAgICBDb2RlQmxvY2tIYXNoIG1faGFzaEZvckNhbGw7
CisgICAgQ29kZUJsb2NrSGFzaCBtX2hhc2hGb3JDb25zdHJ1Y3Q7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUuY3BwCmluZGV4IDU4MTcxOTU2M2Q5Y2RmNWM4
NWVmOTQ3ZGRiNDUyYWZlZGJiNjg4ZjQuLmNmZjcyNmE0Zjg2NGY1ZGMyOGIxZmU2ZjU1ZGJmYWMy
NjNlMDdkYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Vbmxp
bmtlZEZ1bmN0aW9uRXhlY3V0YWJsZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1VubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlLmNwcApAQCAtNjgsNyArNjgsNyBAQCBz
dGF0aWMgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogZ2VuZXJhdGVVbmxpbmtlZEZ1bmN0aW9u
Q29kZUJsb2NrKAogCiAgICAgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jayogcmVzdWx0ID0gVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlKCZ2bSwgRnVuY3Rpb25Db2RlLCBFeGVjdXRh
YmxlSW5mbyhmdW5jdGlvbi0+dXNlc0V2YWwoKSwgZnVuY3Rpb24tPmlzU3RyaWN0TW9kZSgpLCBr
aW5kID09IENvZGVGb3JDb25zdHJ1Y3QsIGZ1bmN0aW9uS2luZCA9PSBVbmxpbmtlZEJ1aWx0aW5G
dW5jdGlvbiwgZXhlY3V0YWJsZS0+Y29uc3RydWN0b3JLaW5kKCksIHNjcmlwdE1vZGUsIGV4ZWN1
dGFibGUtPnN1cGVyQmluZGluZygpLCBwYXJzZU1vZGUsIGV4ZWN1dGFibGUtPmRlcml2ZWRDb250
ZXh0VHlwZSgpLCBmYWxzZSwgaXNDbGFzc0NvbnRleHQsIEV2YWxDb250ZXh0VHlwZTo6RnVuY3Rp
b25FdmFsQ29udGV4dCksIGRlYnVnZ2VyTW9kZSk7CiAKLSAgICBlcnJvciA9IEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpnZW5lcmF0ZSh2bSwgZnVuY3Rpb24uZ2V0KCksIHJlc3VsdCwgZGVidWdnZXJNb2Rl
LCBleGVjdXRhYmxlLT5wYXJlbnRTY29wZVREWlZhcmlhYmxlcygpKTsKKyAgICBlcnJvciA9IEJ5
dGVjb2RlR2VuZXJhdG9yOjpnZW5lcmF0ZSh2bSwgZnVuY3Rpb24uZ2V0KCksIHNvdXJjZSwgcmVz
dWx0LCBkZWJ1Z2dlck1vZGUsIGV4ZWN1dGFibGUtPnBhcmVudFNjb3BlVERaVmFyaWFibGVzKCkp
OwogCiAgICAgaWYgKGVycm9yLmlzVmFsaWQoKSkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKaW5kZXggZGExMGU1M2FkMmJjMjg1M2Y2YjU0ODU1MDk2MzcxNzdlODIwYTVjMS4u
NzUyOWEzMDU0MjMxNGM0ZTcyOTcxYzI4MDZmYmU1ZThhMWE5OTFkNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApA
QCAtMzc4LDEyICszNzgsMjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIFN1cGVyQmluZGlu
ZyBzdXBlckJpbmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2NvZGVCbG9jay0+c3VwZXJCaW5kaW5n
KCk7IH0KICAgICAgICAgSlNQYXJzZXJTY3JpcHRNb2RlIHNjcmlwdE1vZGUoKSBjb25zdCB7IHJl
dHVybiBtX2NvZGVCbG9jay0+c2NyaXB0TW9kZSgpOyB9CiAKLSAgICAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJncz4KLSAgICAgICAgc3RhdGljIFBhcnNlckVycm9yIGdlbmVyYXRlKFZNJiB2
bSwgQXJncyYmIC4uLmFyZ3MpCisgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIE5vZGUsIHR5cGVu
YW1lIFVubGlua2VkQ29kZUJsb2NrPgorICAgICAgICBzdGF0aWMgUGFyc2VyRXJyb3IgZ2VuZXJh
dGUoVk0mIHZtLCBOb2RlKiBub2RlLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBVbmxp
bmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2ssIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1v
ZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIGVudmlyb25tZW50KQogICAgICAgICB7Cisg
ICAgICAgICAgICBNb25vdG9uaWNUaW1lIGJlZm9yZTsKKyAgICAgICAgICAgIGlmIChVTkxJS0VM
WShPcHRpb25zOjpyZXBvcnRCeXRlY29kZUNvbXBpbGVUaW1lcygpKSkKKyAgICAgICAgICAgICAg
ICBiZWZvcmUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKwogICAgICAgICAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwotICAgICAgICAgICAgYXV0byBieXRlY29kZUdlbmVyYXRvciA9IHN0
ZDo6bWFrZV91bmlxdWU8Qnl0ZWNvZGVHZW5lcmF0b3I+KHZtLCBzdGQ6OmZvcndhcmQ8QXJncz4o
YXJncykuLi4pOwotICAgICAgICAgICAgcmV0dXJuIGJ5dGVjb2RlR2VuZXJhdG9yLT5nZW5lcmF0
ZSgpOyAKKyAgICAgICAgICAgIGF1dG8gYnl0ZWNvZGVHZW5lcmF0b3IgPSBzdGQ6Om1ha2VfdW5p
cXVlPEJ5dGVjb2RlR2VuZXJhdG9yPih2bSwgbm9kZSwgdW5saW5rZWRDb2RlQmxvY2ssIGRlYnVn
Z2VyTW9kZSwgZW52aXJvbm1lbnQpOworICAgICAgICAgICAgYXV0byByZXN1bHQgPSBieXRlY29k
ZUdlbmVyYXRvci0+Z2VuZXJhdGUoKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQuaXNWYWxpZCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgICAgIGlmIChVTkxJ
S0VMWShPcHRpb25zOjpyZXBvcnRCeXRlY29kZUNvbXBpbGVUaW1lcygpKSkgeworICAgICAgICAg
ICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKKyAgICAg
ICAgICAgICAgICBkYXRhTG9nKCJDb21waWxlZCAjIiwgQ29kZUJsb2NrSGFzaChzb3VyY2VDb2Rl
LCB1bmxpbmtlZENvZGVCbG9jay0+aXNDb25zdHJ1Y3RvcigpID8gQ29kZUZvckNvbnN0cnVjdCA6
IENvZGVGb3JDYWxsKSwgIiBpbnRvIGJ5dGVjb2RlICIsIGJ5dGVjb2RlR2VuZXJhdG9yLT5pbnN0
cnVjdGlvbnMoKS5zaXplKCksICIgaW5zdHJ1Y3Rpb25zIGluICIsIChhZnRlciAtIGJlZm9yZSku
bWlsbGlzZWNvbmRzKCksICIgbXMuXG4iKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJl
dHVybiByZXN1bHQ7CiAgICAgICAgIH0KIAogICAgICAgICBib29sIGlzQXJndW1lbnROdW1iZXIo
Y29uc3QgSWRlbnRpZmllciYsIGludCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1BhcnNlci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIu
aAppbmRleCBmOTQwZTk2NzdiMzc2NzUwMTg5MWY1MGMxYThhYTZlY2M3YTFiNmFjLi5kMTc1YTlh
OWQ5ZmZmNDA0YTk2MTQxMWI0YTA4MGI5MzZkYzk4ODdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvUGFyc2VyLmgKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJMZXhlci5oIgogI2lu
Y2x1ZGUgIk1vZHVsZVNjb3BlRGF0YS5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCisjaW5jbHVkZSAi
UGFyc2VIYXNoLmgiCiAjaW5jbHVkZSAiUGFyc2VyQXJlbmEuaCIKICNpbmNsdWRlICJQYXJzZXJF
cnJvci5oIgogI2luY2x1ZGUgIlBhcnNlckZ1bmN0aW9uSW5mby5oIgpAQCAtMTk1MSwyMiArMTk1
MiwzNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgRGVidWdnZXJQ
YXJzZURhdGEqIGRlYnVnZ2VyUGFyc2VEYXRhID0gbnVsbHB0cikKIHsKICAgICBBU1NFUlQoIXNv
dXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pc051bGwoKSk7CisKKyAgICBNb25vdG9uaWNUaW1l
IGJlZm9yZTsKKyAgICBpZiAoVU5MSUtFTFkoT3B0aW9uczo6cmVwb3J0UGFyc2VUaW1lcygpKSkK
KyAgICAgICAgYmVmb3JlID0gTW9ub3RvbmljVGltZTo6bm93KCk7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UGFyc2VkTm9kZT4gcmVzdWx0OwogICAgIGlmIChzb3VyY2UucHJvdmlkZXIoKS0+c291
cmNlKCkuaXM4Qml0KCkpIHsKICAgICAgICAgUGFyc2VyPExleGVyPExDaGFyPj4gcGFyc2VyKHZt
LCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBwYXJzZU1vZGUs
IHN1cGVyQmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9yS2luZCwgZGVyaXZlZENvbnRleHRUeXBl
LCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCksIGV2YWxDb250ZXh0VHlwZSwgZGVidWdnZXJQYXJz
ZURhdGEpOwotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcmVzdWx0ID0gcGFy
c2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUpOworICAgICAgICBy
ZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSk7
CiAgICAgICAgIGlmIChwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lKQogICAgICAgICAgICAgKnBv
c2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUgPSBwYXJzZXIucG9zaXRpb25CZWZvcmVMYXN0TmV3bGlu
ZSgpOwogICAgICAgICBpZiAoYnVpbHRpbk1vZGUgPT0gSlNQYXJzZXJCdWlsdGluTW9kZTo6QnVp
bHRpbikgewogICAgICAgICAgICAgaWYgKCFyZXN1bHQpCiAgICAgICAgICAgICAgICAgV1RGOjpk
YXRhTG9nKCJFcnJvciBjb21waWxpbmcgYnVpbHRpbjogIiwgZXJyb3IubWVzc2FnZSgpLCAiXG4i
KTsKICAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0Uo
ZGVmYXVsdENvbnN0cnVjdG9yS2luZCA9PSBDb25zdHJ1Y3RvcktpbmQ6Ok5vbmUsICJCdWlsdGlu
RXhlY3V0YWJsZXM6OmNyZWF0ZURlZmF1bHRDb25zdHJ1Y3RvciBzaG91bGQgYWx3YXlzIHVzZSBh
IDgtYml0IHN0cmluZyIpOworICAgICAgICBQYXJzZXI8TGV4ZXI8VUNoYXI+PiBwYXJzZXIodm0s
IHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHNjcmlwdE1vZGUsIHBhcnNlTW9kZSwg
c3VwZXJCaW5kaW5nLCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kLCBkZXJpdmVkQ29udGV4dFR5cGUs
IGlzRXZhbE5vZGU8UGFyc2VkTm9kZT4oKSwgZXZhbENvbnRleHRUeXBlLCBkZWJ1Z2dlclBhcnNl
RGF0YSk7CisgICAgICAgIHJlc3VsdCA9IHBhcnNlci5wYXJzZTxQYXJzZWROb2RlPihlcnJvciwg
bmFtZSwgcGFyc2VNb2RlKTsKKyAgICAgICAgaWYgKHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUp
CisgICAgICAgICAgICAqcG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSA9IHBhcnNlci5wb3NpdGlv
bkJlZm9yZUxhc3ROZXdsaW5lKCk7CisgICAgfQorICAgIGlmIChVTkxJS0VMWSghcmVzdWx0KSkK
ICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpyZXBv
cnRQYXJzZVRpbWVzKCkpKSB7CisgICAgICAgIE1vbm90b25pY1RpbWUgYWZ0ZXIgPSBNb25vdG9u
aWNUaW1lOjpub3coKTsKKyAgICAgICAgUGFyc2VIYXNoIGhhc2goc291cmNlKTsKKyAgICAgICAg
ZGF0YUxvZygiUGFyc2VkICMiLCBoYXNoLmhhc2hGb3JDYWxsKCksICIvIyIsIGhhc2guaGFzaEZv
ckNvbnN0cnVjdCgpLCAiIGluICIsIChhZnRlciAtIGJlZm9yZSkubWlsbGlzZWNvbmRzKCksICIg
bXMuXG4iKTsKICAgICB9Ci0gICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZWZhdWx0Q29uc3RydWN0
b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgIkJ1aWx0aW5FeGVjdXRhYmxlczo6Y3Jl
YXRlRGVmYXVsdENvbnN0cnVjdG9yIHNob3VsZCBhbHdheXMgdXNlIGEgOC1iaXQgc3RyaW5nIik7
Ci0gICAgUGFyc2VyPExleGVyPFVDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2Rl
LCBzdHJpY3RNb2RlLCBzY3JpcHRNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVs
dENvbnN0cnVjdG9yS2luZCwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0V2YWxOb2RlPFBhcnNlZE5v
ZGU+KCksIGV2YWxDb250ZXh0VHlwZSwgZGVidWdnZXJQYXJzZURhdGEpOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxQYXJzZWROb2RlPiByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9kZT4oZXJy
b3IsIG5hbWUsIHBhcnNlTW9kZSk7Ci0gICAgaWYgKHBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUp
Ci0gICAgICAgICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVm
b3JlTGFzdE5ld2xpbmUoKTsKKwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKaW5kZXggNzNjYTVlYzJlMjM0Y2YzZDIzYTc1
ZTYwNDJhNjRkZjQ2NzAxNDQyOC4uYWI3MGI2NTM5N2ZiMzM1ZDJhMTIzYjJhNmIzYWUzYWU2M2M4
MWQ5YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKQEAgLTI0
OCw3ICsyNDgsNyBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIGdlbmVyYXRlVW5saW5rZWRDb2Rl
QmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YQogICAgIHVubGlua2VkQ29kZUJs
b2NrLT5zZXRTb3VyY2VVUkxEaXJlY3RpdmUoc291cmNlLnByb3ZpZGVyKCktPnNvdXJjZVVSTCgp
KTsKICAgICB1bmxpbmtlZENvZGVCbG9jay0+c2V0U291cmNlTWFwcGluZ1VSTERpcmVjdGl2ZShz
b3VyY2UucHJvdmlkZXIoKS0+c291cmNlTWFwcGluZ1VSTCgpKTsKIAotICAgIGVycm9yID0gQnl0
ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKHZtLCByb290Tm9kZS5nZXQoKSwgdW5saW5rZWRDb2Rl
QmxvY2ssIGRlYnVnZ2VyTW9kZSwgdmFyaWFibGVzVW5kZXJURFopOworICAgIGVycm9yID0gQnl0
ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKHZtLCByb290Tm9kZS5nZXQoKSwgc291cmNlLCB1bmxp
bmtlZENvZGVCbG9jaywgZGVidWdnZXJNb2RlLCB2YXJpYWJsZXNVbmRlclREWik7CiAKICAgICBp
ZiAoZXJyb3IuaXNWYWxpZCgpKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAppbmRleCBkMTQ4ZjVhMDdiNWExYTI1NmMyYzBiNWE4
MTYzNWMyYjcwNzc5ZDEyLi5mYTI1YjVmMzdhZTUxMGVlOTM0NGNjNmI5OWFiMzYyYzEzMzdjZTg3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCkBAIC0xOTUsNiArMTk1
LDggQEAgY29uc3RleHByIGJvb2wgZW5hYmxlQXN5bmNJdGVyYXRpb24gPSBmYWxzZTsKICAgICB2
KGJvb2wsIHJlcG9ydEZUTENvbXBpbGVUaW1lcywgZmFsc2UsIE5vcm1hbCwgImR1bXBzIEpTIGZ1
bmN0aW9uIHNpZ25hdHVyZSBhbmQgdGhlIHRpbWUgaXQgdG9vayB0byBGVEwgY29tcGlsZSIpIFwK
ICAgICB2KGJvb2wsIHJlcG9ydERGR1BoYXNlVGltZXMsIGZhbHNlLCBOb3JtYWwsICJkdW1wcyBK
UyBmdW5jdGlvbiBuYW1lIGFuZCB0aGUgdGltZSBpcyB0b29rIGZvciBlYWNoIERGRyBwaGFzZSIp
IFwKICAgICB2KGJvb2wsIHJlcG9ydFRvdGFsQ29tcGlsZVRpbWVzLCBmYWxzZSwgTm9ybWFsLCBu
dWxscHRyKSBcCisgICAgdihib29sLCByZXBvcnRQYXJzZVRpbWVzLCBmYWxzZSwgTm9ybWFsLCAi
ZHVtcHMgSlMgZnVuY3Rpb24gc2lnbmF0dXJlIGFuZCB0aGUgdGltZSBpdCB0b29rIHRvIHBhcnNl
IikgXAorICAgIHYoYm9vbCwgcmVwb3J0Qnl0ZWNvZGVDb21waWxlVGltZXMsIGZhbHNlLCBOb3Jt
YWwsICJkdW1wcyBKUyBmdW5jdGlvbiBzaWduYXR1cmUgYW5kIHRoZSB0aW1lIGl0IHRvb2sgdG8g
Ynl0ZWNvZGUgY29tcGlsZSIpIFwKICAgICB2KGJvb2wsIHZlcmJvc2VFeGl0UHJvZmlsZSwgZmFs
c2UsIE5vcm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmVyYm9zZUNGQSwgZmFsc2UsIE5v
cm1hbCwgbnVsbHB0cikgXAogICAgIHYoYm9vbCwgdmVyYm9zZURGR0ZhaWx1cmUsIGZhbHNlLCBO
b3JtYWwsIG51bGxwdHIpIFwK
</data>
<flag name="review"
          id="355007"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>