<?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>159332</bug_id>
          
          <creation_ts>2016-06-30 23:21:06 -0700</creation_ts>
          <short_desc>Scopes that are not under TDZ should still push their variables onto the TDZ stack so that lifting TDZ doesn&apos;t bypass that scope</short_desc>
          <delta_ts>2016-07-02 19:23:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1206997</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-30 23:21:06 -0700</bug_when>
    <thetext>This fixes an instacrash in this code:

function foo () {
try{}catch(e){}print(e);let e;
}

foo();

We lift TDZ for &quot;e&quot; in &quot;catch (e){}&quot;, but since that scope doesn&apos;t push anything onto the TDZ stack, we lift TDZ from &quot;let e&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207001</commentid>
    <comment_count>1</comment_count>
      <attachid>282514</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-06-30 23:26:19 -0700</bug_when>
    <thetext>Created attachment 282514
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207112</commentid>
    <comment_count>2</comment_count>
      <attachid>282514</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-01 07:59:21 -0700</bug_when>
    <thetext>Comment on attachment 282514
the patch

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

r=me
Oh wow, that&apos;s a huge bug. Nice find.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2019
&gt; +void BytecodeGenerator::popLexicalScopeInternal(VariableEnvironment&amp; environment, TDZRequirement)

I&apos;d either remove this last argument from the function or add an assert that it matches what&apos;s being removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207124</commentid>
    <comment_count>3</comment_count>
      <attachid>282514</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-01 08:30:42 -0700</bug_when>
    <thetext>Comment on attachment 282514
the patch

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

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2775
&gt;      for (UniquedStringImpl* function : functionsToRemove)
&gt;          environment.remove(function);
&gt;  
&gt; -    m_TDZStack.append(std::make_pair(WTFMove(environment), optimization));
&gt; +    TDZStackEntry entry;
&gt; +    entry.environment = WTFMove(environment);
&gt; +    entry.optimization = optimization;
&gt; +    entry.requirement = requirement;
&gt; +    m_TDZStack.append(WTFMove(entry));

For added safety along the same lines of this patch, I think  we should also change the code here that removes functions from the environment.
And instead, we should not emit a TDZ check or lift a TDZ check if the entry in the environment is a function.

I can&apos;t quite get this to crash, I think because of how we emit block scoped functions, but I think that this provides better safety in general.
It also future proofs changes to how we emit block scoped functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207141</commentid>
    <comment_count>4</comment_count>
      <attachid>282514</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-07-01 09:24:29 -0700</bug_when>
    <thetext>Comment on attachment 282514
the patch

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

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2176
&gt; -
&gt; +    

Please undo this.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2774
&gt; +    TDZStackEntry entry;
&gt; +    entry.environment = WTFMove(environment);
&gt; +    entry.optimization = optimization;
&gt; +    entry.requirement = requirement;

Can you use a constructor here instead?  That guarantees that all fields get initialized.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207205</commentid>
    <comment_count>5</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2016-07-01 11:32:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/27018958&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207412</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-01 19:30:02 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Comment on attachment 282514 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=282514&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2775
&gt; &gt;      for (UniquedStringImpl* function : functionsToRemove)
&gt; &gt;          environment.remove(function);
&gt; &gt;  
&gt; &gt; -    m_TDZStack.append(std::make_pair(WTFMove(environment), optimization));
&gt; &gt; +    TDZStackEntry entry;
&gt; &gt; +    entry.environment = WTFMove(environment);
&gt; &gt; +    entry.optimization = optimization;
&gt; &gt; +    entry.requirement = requirement;
&gt; &gt; +    m_TDZStack.append(WTFMove(entry));
&gt; 
&gt; For added safety along the same lines of this patch, I think  we should also
&gt; change the code here that removes functions from the environment.
&gt; And instead, we should not emit a TDZ check or lift a TDZ check if the entry
&gt; in the environment is a function.
&gt; 
&gt; I can&apos;t quite get this to crash, I think because of how we emit block scoped
&gt; functions, but I think that this provides better safety in general.
&gt; It also future proofs changes to how we emit block scoped functions.

Interesting.  I think I know how to fix all of these issues.  I&apos;ll post a new patch soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207423</commentid>
    <comment_count>7</comment_count>
      <attachid>282634</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-01 20:13:37 -0700</bug_when>
    <thetext>Created attachment 282634
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207431</commentid>
    <comment_count>8</comment_count>
      <attachid>282634</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-07-01 23:06:39 -0700</bug_when>
    <thetext>Comment on attachment 282634
the patch

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

r=me with a suggestion

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2767
&gt; +        map.add(entry.key, entry.value.isFunction() ? TDZNecessityLevel::NotNeeded: level);

Style: missing a space before :

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2774
&gt; +    // NOTE: This is conservative. If called at &quot;...&quot;, it will report &quot;x&quot; as being under TDZ:

This is indeed a bit unfortunate. Can you just write it so that you have a SmallPtrSet&lt;UniquedStringImpl*&gt; that represents things we&apos;ve seen that don&apos;t need TDZ so we can make it optimal?

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:892
&gt; +        Vector&lt;TDZMap&gt; m_TDZStack;

Nice. I like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207447</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-02 10:40:49 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; Comment on attachment 282634 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=282634&amp;action=review
&gt; 
&gt; r=me with a suggestion
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2767
&gt; &gt; +        map.add(entry.key, entry.value.isFunction() ? TDZNecessityLevel::NotNeeded: level);
&gt; 
&gt; Style: missing a space before :

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2774
&gt; &gt; +    // NOTE: This is conservative. If called at &quot;...&quot;, it will report &quot;x&quot; as being under TDZ:
&gt; 
&gt; This is indeed a bit unfortunate. Can you just write it so that you have a
&gt; SmallPtrSet&lt;UniquedStringImpl*&gt; that represents things we&apos;ve seen that don&apos;t
&gt; need TDZ so we can make it optimal?

This isn&apos;t a regression, so I think we should fix this issue in a different patch.
Filed: https://bugs.webkit.org/show_bug.cgi?id=159387

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.h:892
&gt; &gt; +        Vector&lt;TDZMap&gt; m_TDZStack;
&gt; 
&gt; Nice. I like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207452</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-07-02 10:47:01 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/202778</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1207475</commentid>
    <comment_count>11</comment_count>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2016-07-02 19:23:46 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Landed in https://trac.webkit.org/changeset/202778

Follow-up fix in r202781:  &lt;https://trac.webkit.org/changeset/202781&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282514</attachid>
            <date>2016-06-30 23:26:19 -0700</date>
            <delta_ts>2016-07-01 20:13:37 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>13688</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAyNzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ2IEBA
CisyMDE2LTA2LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2NvcGVzIHRoYXQgYXJlIG5vdCB1bmRlciBURFogc2hvdWxkIHN0aWxsIHB1c2ggdGhlaXIgdmFy
aWFibGVzIG9udG8gdGhlIFREWiBzdGFjayBzbyB0aGF0IGxpZnRpbmcgVERaIGRvZXNuJ3QgYnlw
YXNzIHRoYXQgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTMzMgorICAgICAgICByZGFyOi8vcHJvYmxlbS8yNzAxODk1OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBmaXhl
cyBhbiBpbnN0YWNyYXNoIGluIHRoaXMgY29kZToKKyAgICAgICAgCisgICAgICAgICAgICB0cnl7
fWNhdGNoKGUpe31wcmludChlKTtsZXQgZTsKKyAgICAgICAgCisgICAgICAgIFdlIGxpZnQgVERa
IGZvciAiZSIgaW4gImNhdGNoIChlKXt9IiwgYnV0IHNpbmNlIHRoYXQgc2NvcGUgZG9lc24ndCBw
dXNoIGFueXRoaW5nIG9udG8gdGhlCisgICAgICAgIFREWiBzdGFjaywgd2UgbGlmdCBURFogZnJv
bSAibGV0IGUiLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChK
U0M6OkNvZGVCbG9jazo6bnVtUGFyYW1ldGVycyk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9y
aWdpbi5oOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkxhYmVsOjpzZXRMb2NhdGlvbik6CisgICAgICAgIChKU0M6OlZhcmlhYmxl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BMZXhpY2FsU2NvcGUpOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wTGV4aWNhbFNjb3BlSW50ZXJuYWwpOgorICAg
ICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHJlcGFyZUxleGljYWxTY29wZUZvck5leHRG
b3JMb29wSXRlcmF0aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnZhcmlh
YmxlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6Om5lZWRzVERaQ2hlY2spOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6bGlmdFREWkNoZWNrSWZQb3NzaWJsZSk6
CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoVERaVmFyaWFibGVzKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmdldFZhcmlhYmxlc1VuZGVyVERaKToKKyAg
ICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVuZEdlbmVyYXRvcik6CisgICAgICAgIChX
VEY6OnByaW50SW50ZXJuYWwpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5oOgorICAgICAgICAoSlNDOjpWYXJpYWJsZTo6aXNDb25zdCk6CisgICAgICAgIChKU0M6
OlZhcmlhYmxlOjpzZXRJc1JlYWRPbmx5KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9DYWxsRnJh
bWUuaDoKKyAgICAgICAgKEpTQzo6RXhlY1N0YXRlOjp0b3BPZkZyYW1lKToKKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvbGlmdC10ZHotYnlwYXNzLWNhdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKGZv
byk6CisgICAgICAgIChjYXRjaCk6CisKIDIwMTYtMDYtMzAgIEpvc2VwaCBQZWNvcmFybyAgPHBl
Y29yYXJvQGFwcGxlLmNvbT4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBXcm9uZyBmdW5jdGlv
biBuYW1lIG5leHQgdG8gc2NvcGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDIwMjcwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDcgKzE0MSw3IEBA
IHB1YmxpYzoKICAgICBDU3RyaW5nIHNvdXJjZUNvZGVGb3JUb29scygpIGNvbnN0OyAvLyBOb3Qg
cXVpdGUgdGhlIGFjdHVhbCBzb3VyY2Ugd2UgcGFyc2VkOyB0aGlzIHdpbGwgZG8gdGhpbmdzIGxp
a2UgcHJlZml4IHRoZSBzb3VyY2UgZm9yIGEgZnVuY3Rpb24gd2l0aCBhIHJlaWZpZWQgc2lnbmF0
dXJlLgogICAgIENTdHJpbmcgc291cmNlQ29kZU9uT25lTGluZSgpIGNvbnN0OyAvLyBBcyBzb3Vy
Y2VDb2RlRm9yVG9vbHMoKSwgYnV0IHJlcGxhY2VzIGFsbCB3aGl0ZXNwYWNlIHJ1bnMgd2l0aCBh
IHNpbmdsZSBzcGFjZS4KICAgICB2b2lkIGR1bXBBc3N1bWluZ0pJVFR5cGUoUHJpbnRTdHJlYW0m
LCBKSVRDb2RlOjpKSVRUeXBlKSBjb25zdDsKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBj
b25zdDsKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25z
dDsKIAogICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0
ZXJzOyB9CiAgICAgdm9pZCBzZXROdW1QYXJhbWV0ZXJzKGludCBuZXdWYWx1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDIw
MjcwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAg
Ly8gR2V0IHRoZSBpbmxpbmUgc3RhY2suIFRoaXMgaXMgc2xvdywgYW5kIGlzIGludGVuZGVkIGZv
ciBkZWJ1Z2dpbmcgb25seS4KICAgICBWZWN0b3I8Q29kZU9yaWdpbj4gaW5saW5lU3RhY2soKSBj
b25zdDsKICAgICAKLSAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGR1
bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OwogCiBwcml2YXRl
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDIwMjcwMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC00NSw2ICs0NSw3IEBACiAjaW5jbHVkZSAiU3Ryb25nSW5saW5lcy5oIgogI2luY2x1
ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiVW5saW5rZWRJbnN0cnVjdGlvblN0
cmVhbS5oIgorI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3Rk
TGliRXh0cmFzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CiAKQEAgLTYxLDYg
KzYyLDE4IEBAIHZvaWQgTGFiZWw6OnNldExvY2F0aW9uKHVuc2lnbmVkIGxvY2F0aW8KICAgICAg
ICAgbV9nZW5lcmF0b3IuaW5zdHJ1Y3Rpb25zKClbbV91bnJlc29sdmVkSnVtcHNbaV0uc2Vjb25k
XS51Lm9wZXJhbmQgPSBtX2xvY2F0aW9uIC0gbV91bnJlc29sdmVkSnVtcHNbaV0uZmlyc3Q7CiB9
CiAKK3ZvaWQgVmFyaWFibGU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBv
dXQucHJpbnQoCisgICAgICAgICJ7aWRlbnQgPSAiLCBtX2lkZW50LAorICAgICAgICAiLCBvZmZz
ZXQgPSAiLCBtX29mZnNldCwKKyAgICAgICAgIiwgbG9jYWwgPSAiLCBSYXdQb2ludGVyKG1fbG9j
YWwpLAorICAgICAgICAiLCBhdHRyaWJ1dGVzID0gIiwgbV9hdHRyaWJ1dGVzLAorICAgICAgICAi
LCBraW5kID0gIiwgbV9raW5kLAorICAgICAgICAiLCBzeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgg
PSAiLCBtX3N5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwKKyAgICAgICAgIiwgaXNMZXhpY2FsbHlT
Y29wZWQgPSAiLCBtX2lzTGV4aWNhbGx5U2NvcGVkLCAifSIpOworfQorCiBQYXJzZXJFcnJvciBC
eXRlY29kZUdlbmVyYXRvcjo6Z2VuZXJhdGUoKQogewogICAgIG1fY29kZUJsb2NrLT5zZXRUaGlz
UmVnaXN0ZXIobV90aGlzUmVnaXN0ZXIudmlydHVhbFJlZ2lzdGVyKCkpOwpAQCAtNTgzLDcgKzU5
Niw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKIAogICAgIC8v
IEFsbCAiYWRkVmFyKCkicyBuZWVkcyB0byBoYXBwZW4gYmVmb3JlICJpbml0aWFsaXplRGVmYXVs
dFBhcmFtZXRlclZhbHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKCkiIGlzIGNhbGxlZAog
ICAgIC8vIGJlY2F1c2UgYSBmdW5jdGlvbidzIGRlZmF1bHQgcGFyYW1ldGVyIEV4cHJlc3Npb25O
b2RlcyB3aWxsIHVzZSB0ZW1wb3JhcnkgcmVnaXN0ZXJzLgotICAgIHB1c2hURFpWYXJpYWJsZXMo
KnBhcmVudFNjb3BlVERaVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6RG9Ob3RPcHRp
bWl6ZSk7CisgICAgcHVzaFREWlZhcmlhYmxlcygqcGFyZW50U2NvcGVURFpWYXJpYWJsZXMsIFRE
WkNoZWNrT3B0aW1pemF0aW9uOjpEb05vdE9wdGltaXplLCBURFpSZXF1aXJlbWVudDo6VW5kZXJU
RFopOwogICAgIGluaXRpYWxpemVEZWZhdWx0UGFyYW1ldGVyVmFsdWVzQW5kU2V0dXBGdW5jdGlv
blNjb3BlU3RhY2socGFyYW1ldGVycywgaXNTaW1wbGVQYXJhbWV0ZXJMaXN0LCBmdW5jdGlvbk5v
ZGUsIGZ1bmN0aW9uU3ltYm9sVGFibGUsIHN5bWJvbFRhYmxlQ29uc3RhbnRJbmRleCwgY2FwdHVy
ZXMsIHNob3VsZENyZWF0ZUFyZ3VtZW50c1ZhcmlhYmxlSW5QYXJhbWV0ZXJTY29wZSk7CiAgICAg
CiAgICAgLy8gSWYgd2UgZG9uJ3QgaGF2ZSAgZGVmYXVsdCBwYXJhbWV0ZXIgZXhwcmVzc2lvbiwg
dGhlbiBsb2FkaW5nIHx0aGlzfCBpbnNpZGUgYW4gYXJyb3cgZnVuY3Rpb24gbXVzdCBiZSBkb25l
CkBAIC02MTksNyArNjMyLDcgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9y
KFZNJgogCiAgICAgbV9jb2RlQmxvY2stPnNldE51bVBhcmFtZXRlcnMoMSk7CiAKLSAgICBwdXNo
VERaVmFyaWFibGVzKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgVERaQ2hlY2tPcHRpbWl6YXRp
b246OkRvTm90T3B0aW1pemUpOworICAgIHB1c2hURFpWYXJpYWJsZXMoKnBhcmVudFNjb3BlVERa
VmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6RG9Ob3RPcHRpbWl6ZSwgVERaUmVxdWly
ZW1lbnQ6OlVuZGVyVERaKTsKIAogICAgIGVtaXRFbnRlcigpOwogCkBAIC03MzYsNyArNzQ5LDcg
QEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAgIGVsc2UKICAg
ICAgICAgY29uc3RhbnRTeW1ib2xUYWJsZSA9IGFkZENvbnN0YW50VmFsdWUobW9kdWxlRW52aXJv
bm1lbnRTeW1ib2xUYWJsZS0+Y2xvbmVTY29wZVBhcnQoKm1fdm0pKTsKIAotICAgIHB1c2hURFpW
YXJpYWJsZXMobGV4aWNhbFZhcmlhYmxlcywgVERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXpl
KTsKKyAgICBwdXNoVERaVmFyaWFibGVzKGxleGljYWxWYXJpYWJsZXMsIFREWkNoZWNrT3B0aW1p
emF0aW9uOjpPcHRpbWl6ZSwgVERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaKTsKICAgICBib29sIGlz
V2l0aFNjb3BlID0gZmFsc2U7CiAgICAgbV9zeW1ib2xUYWJsZVN0YWNrLmFwcGVuZChTeW1ib2xU
YWJsZVN0YWNrRW50cnkgeyBtb2R1bGVFbnZpcm9ubWVudFN5bWJvbFRhYmxlLCBtX3RvcE1vc3RT
Y29wZSwgaXNXaXRoU2NvcGUsIGNvbnN0YW50U3ltYm9sVGFibGUtPmluZGV4KCkgfSk7CiAgICAg
ZW1pdFByZWZpbGxTdGFja1REWlZhcmlhYmxlcyhsZXhpY2FsVmFyaWFibGVzLCBtb2R1bGVFbnZp
cm9ubWVudFN5bWJvbFRhYmxlKTsKQEAgLTE5MTMsOCArMTkyNiw3IEBAIHZvaWQgQnl0ZWNvZGVH
ZW5lcmF0b3I6OnB1c2hMZXhpY2FsU2NvcGUKIAogICAgIGJvb2wgaXNXaXRoU2NvcGUgPSBmYWxz
ZTsKICAgICBtX3N5bWJvbFRhYmxlU3RhY2suYXBwZW5kKFN5bWJvbFRhYmxlU3RhY2tFbnRyeXsg
c3ltYm9sVGFibGUsIG5ld1Njb3BlLCBpc1dpdGhTY29wZSwgc3ltYm9sVGFibGVDb25zdGFudElu
ZGV4IH0pOwotICAgIGlmICh0ZHpSZXF1aXJlbWVudCA9PSBURFpSZXF1aXJlbWVudDo6VW5kZXJU
RFopCi0gICAgICAgIHB1c2hURFpWYXJpYWJsZXMoZW52aXJvbm1lbnQsIHRkekNoZWNrT3B0aW1p
emF0aW9uKTsKKyAgICBwdXNoVERaVmFyaWFibGVzKGVudmlyb25tZW50LCB0ZHpDaGVja09wdGlt
aXphdGlvbiwgdGR6UmVxdWlyZW1lbnQpOwogCiAgICAgaWYgKHRkelJlcXVpcmVtZW50ID09IFRE
WlJlcXVpcmVtZW50OjpVbmRlclREWikKICAgICAgICAgZW1pdFByZWZpbGxTdGFja1REWlZhcmlh
YmxlcyhlbnZpcm9ubWVudCwgc3ltYm9sVGFibGUpOwpAQCAtMjAwNCw3ICsyMDE2LDcgQEAgdm9p
ZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wTGV4aWNhbFNjb3BlKAogICAgIHBvcExleGljYWxTY29w
ZUludGVybmFsKGVudmlyb25tZW50LCBURFpSZXF1aXJlbWVudDo6VW5kZXJURFopOwogfQogCi12
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BMZXhpY2FsU2NvcGVJbnRlcm5hbChWYXJpYWJsZUVu
dmlyb25tZW50JiBlbnZpcm9ubWVudCwgVERaUmVxdWlyZW1lbnQgdGR6UmVxdWlyZW1lbnQpCit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BMZXhpY2FsU2NvcGVJbnRlcm5hbChWYXJpYWJsZUVu
dmlyb25tZW50JiBlbnZpcm9ubWVudCwgVERaUmVxdWlyZW1lbnQpCiB7CiAgICAgLy8gTk9URTog
VGhpcyBmdW5jdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGZvciBzY29wZXMgdGhhdCBhcmVuJ3QgU2Nv
cGVSZWdpc3RlclR5cGU6OlZhciAob25seSBmdW5jdGlvbiBuYW1lIHNjb3BlIHJpZ2h0IG5vdyBp
cyBTY29wZVJlZ2lzdGVyVHlwZTo6VmFyKS4KICAgICAvLyBUaGlzIGRvZXNuJ3QgbWFrZSBzZW5z
ZSBmb3IgU2NvcGVSZWdpc3RlclR5cGU6OlZhciBiZWNhdXNlIHdlIGRlcmVmIFJlZ2lzdGVySURz
IGhlcmUuCkBAIC0yMDM3LDggKzIwNDksNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwb3BM
ZXhpY2FsU2NvcGVJCiAgICAgICAgIHN0YWNrRW50cnkubV9zY29wZS0+ZGVyZWYoKTsKICAgICB9
CiAKLSAgICBpZiAodGR6UmVxdWlyZW1lbnQgPT0gVERaUmVxdWlyZW1lbnQ6OlVuZGVyVERaKQot
ICAgICAgICBtX1REWlN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBtX1REWlN0YWNrLnJlbW92ZUxh
c3QoKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJlcGFyZUxleGljYWxTY29wZUZv
ck5leHRGb3JMb29wSXRlcmF0aW9uKFZhcmlhYmxlRW52aXJvbm1lbnROb2RlKiBub2RlLCBSZWdp
c3RlcklEKiBsb29wU3ltYm9sVGFibGUpCkBAIC0yMTYyLDcgKzIxNzMsNyBAQCBWYXJpYWJsZSBC
eXRlY29kZUdlbmVyYXRvcjo6dmFyaWFibGUoY29uCiAgICAgICAgICAgICByZXN1bHQuc2V0SXNS
ZWFkT25seSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgIH0KLQorICAgIAogICAgIHJl
dHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CiB9CiAKQEAgLTI3MDIsNyArMjcxMyw5IEBAIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRURFpDaGVjayhSZWcKIGJvb2wgQnl0ZWNvZGVHZW5lcmF0
b3I6Om5lZWRzVERaQ2hlY2soY29uc3QgVmFyaWFibGUmIHZhcmlhYmxlKQogewogICAgIGZvciAo
dW5zaWduZWQgaSA9IG1fVERaU3RhY2suc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFZhcmlhYmxl
RW52aXJvbm1lbnQmIGlkZW50aWZpZXJzID0gbV9URFpTdGFja1tpXS5maXJzdDsKKyAgICAgICAg
aWYgKG1fVERaU3RhY2tbaV0ucmVxdWlyZW1lbnQgPT0gVERaUmVxdWlyZW1lbnQ6Ok5vdFVuZGVy
VERaKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnQm
IGlkZW50aWZpZXJzID0gbV9URFpTdGFja1tpXS5lbnZpcm9ubWVudDsKICAgICAgICAgaWYgKGlk
ZW50aWZpZXJzLmNvbnRhaW5zKHZhcmlhYmxlLmlkZW50KCkuaW1wbCgpKSkKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgIH0KQEAgLTI3MjcsOSArMjc0MCwxMSBAQCB2b2lkIEJ5dGVjb2Rl
R2VuZXJhdG9yOjpsaWZ0VERaQ2hlY2tJZlBvCiB7CiAgICAgUmVmUHRyPFVuaXF1ZWRTdHJpbmdJ
bXBsPiBpZGVudGlmaWVyKHZhcmlhYmxlLmlkZW50KCkuaW1wbCgpKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX1REWlN0YWNrLnNpemUoKTsgaS0tOykgewotICAgICAgICBWYXJpYWJsZUVudmly
b25tZW50JiBlbnZpcm9ubWVudCA9IG1fVERaU3RhY2tbaV0uZmlyc3Q7CisgICAgICAgIFZhcmlh
YmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50ID0gbV9URFpTdGFja1tpXS5lbnZpcm9ubWVudDsK
ICAgICAgICAgaWYgKGVudmlyb25tZW50LmNvbnRhaW5zKGlkZW50aWZpZXIpKSB7Ci0gICAgICAg
ICAgICBURFpDaGVja09wdGltaXphdGlvbiB0ZHpDaGVja09wdGltaXphdGlvbkNhcGFiaWxpdHkg
PSBtX1REWlN0YWNrW2ldLnNlY29uZDsKKyAgICAgICAgICAgIGlmIChtX1REWlN0YWNrW2ldLnJl
cXVpcmVtZW50ID09IFREWlJlcXVpcmVtZW50OjpOb3RVbmRlclREWikKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIFREWkNoZWNrT3B0aW1pemF0aW9uIHRkekNoZWNrT3B0aW1p
emF0aW9uQ2FwYWJpbGl0eSA9IG1fVERaU3RhY2tbaV0ub3B0aW1pemF0aW9uOwogICAgICAgICAg
ICAgaWYgKHRkekNoZWNrT3B0aW1pemF0aW9uQ2FwYWJpbGl0eSA9PSBURFpDaGVja09wdGltaXph
dGlvbjo6T3B0aW1pemUpIHsKICAgICAgICAgICAgICAgICBib29sIHdhc1JlbW92ZWQgPSBlbnZp
cm9ubWVudC5yZW1vdmUoaWRlbnRpZmllcik7CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlQod2FzUmVtb3ZlZCk7CkBAIC0yNzM5LDcgKzI3NTQsNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJh
dG9yOjpsaWZ0VERaQ2hlY2tJZlBvCiAgICAgfQogfQogCi12b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjpwdXNoVERaVmFyaWFibGVzKFZhcmlhYmxlRW52aXJvbm1lbnQgZW52aXJvbm1lbnQsIFREWkNo
ZWNrT3B0aW1pemF0aW9uIG9wdGltaXphdGlvbikKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1
c2hURFpWYXJpYWJsZXMoVmFyaWFibGVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwgVERaQ2hlY2tP
cHRpbWl6YXRpb24gb3B0aW1pemF0aW9uLCBURFpSZXF1aXJlbWVudCByZXF1aXJlbWVudCkKIHsK
ICAgICBpZiAoIWVudmlyb25tZW50LnNpemUoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtMjc1Mywx
MyArMjc2OCwxOSBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoVERaVmFyaWFibGVzCiAg
ICAgZm9yIChVbmlxdWVkU3RyaW5nSW1wbCogZnVuY3Rpb24gOiBmdW5jdGlvbnNUb1JlbW92ZSkK
ICAgICAgICAgZW52aXJvbm1lbnQucmVtb3ZlKGZ1bmN0aW9uKTsKIAotICAgIG1fVERaU3RhY2su
YXBwZW5kKHN0ZDo6bWFrZV9wYWlyKFdURk1vdmUoZW52aXJvbm1lbnQpLCBvcHRpbWl6YXRpb24p
KTsKKyAgICBURFpTdGFja0VudHJ5IGVudHJ5OworICAgIGVudHJ5LmVudmlyb25tZW50ID0gV1RG
TW92ZShlbnZpcm9ubWVudCk7CisgICAgZW50cnkub3B0aW1pemF0aW9uID0gb3B0aW1pemF0aW9u
OworICAgIGVudHJ5LnJlcXVpcmVtZW50ID0gcmVxdWlyZW1lbnQ7CisgICAgbV9URFpTdGFjay5h
cHBlbmQoV1RGTW92ZShlbnRyeSkpOwogfQogCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpnZXRW
YXJpYWJsZXNVbmRlclREWihWYXJpYWJsZUVudmlyb25tZW50JiByZXN1bHQpCiB7Ci0gICAgZm9y
IChhdXRvJiBwYWlyIDogbV9URFpTdGFjaykgewotICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50
JiBlbnZpcm9ubWVudCA9IHBhaXIuZmlyc3Q7CisgICAgZm9yIChhdXRvJiBlbnRyeSA6IG1fVERa
U3RhY2spIHsKKyAgICAgICAgaWYgKGVudHJ5LnJlcXVpcmVtZW50ID09IFREWlJlcXVpcmVtZW50
OjpOb3RVbmRlclREWikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBWYXJpYWJsZUVu
dmlyb25tZW50JiBlbnZpcm9ubWVudCA9IGVudHJ5LmVudmlyb25tZW50OwogICAgICAgICBmb3Ig
KGF1dG8gZW50cnkgOiBlbnZpcm9ubWVudCkKICAgICAgICAgICAgIHJlc3VsdC5hZGQoZW50cnku
a2V5LmdldCgpKTsKICAgICB9CkBAIC00NjExLDMgKzQ2MzIsMjEgQEAgdm9pZCBCeXRlY29kZUdl
bmVyYXRvcjo6ZW5kR2VuZXJhdG9yKExhYgogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKKworbmFt
ZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0M6
OlZhcmlhYmxlOjpWYXJpYWJsZUtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAg
ICBjYXNlIEpTQzo6VmFyaWFibGU6Ok5vcm1hbFZhcmlhYmxlOgorICAgICAgICBvdXQucHJpbnQo
Ik5vcm1hbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OlZhcmlhYmxlOjpTcGVj
aWFsVmFyaWFibGU6CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lvbiAyMDI3MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgJKHdv
cmtpbmcgY29weSkKQEAgLTIzOCw2ICsyMzgsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
Ym9vbCBpc0NvbnN0KCkgY29uc3QgeyByZXR1cm4gaXNSZWFkT25seSgpICYmIG1faXNMZXhpY2Fs
bHlTY29wZWQ7IH0KICAgICAgICAgdm9pZCBzZXRJc1JlYWRPbmx5KCkgeyBtX2F0dHJpYnV0ZXMg
fD0gUmVhZE9ubHk7IH0KIAorICAgICAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsK
KwogICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgVmFy
T2Zmc2V0IG1fb2Zmc2V0OwpAQCAtODgxLDkgKzg4MywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgICAgIGludCBtX3N5bWJvbFRhYmxlQ29uc3RhbnRJbmRleDsKICAgICAgICAgfTsKICAg
ICAgICAgVmVjdG9yPFN5bWJvbFRhYmxlU3RhY2tFbnRyeT4gbV9zeW1ib2xUYWJsZVN0YWNrOwot
ICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFZhcmlhYmxlRW52aXJvbm1lbnQsIFREWkNoZWNrT3B0
aW1pemF0aW9uPj4gbV9URFpTdGFjazsKKyAgICAgICAgc3RydWN0IFREWlN0YWNrRW50cnkgewor
ICAgICAgICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBlbnZpcm9ubWVudDsKKyAgICAgICAgICAg
IFREWkNoZWNrT3B0aW1pemF0aW9uIG9wdGltaXphdGlvbjsKKyAgICAgICAgICAgIFREWlJlcXVp
cmVtZW50IHJlcXVpcmVtZW50OworICAgICAgICB9OworICAgICAgICBWZWN0b3I8VERaU3RhY2tF
bnRyeT4gbV9URFpTdGFjazsKICAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBtX3ZhclNjb3BlU3lt
Ym9sVGFibGVJbmRleDsKLSAgICAgICAgdm9pZCBwdXNoVERaVmFyaWFibGVzKFZhcmlhYmxlRW52
aXJvbm1lbnQsIFREWkNoZWNrT3B0aW1pemF0aW9uKTsKKyAgICAgICAgdm9pZCBwdXNoVERaVmFy
aWFibGVzKFZhcmlhYmxlRW52aXJvbm1lbnQsIFREWkNoZWNrT3B0aW1pemF0aW9uLCBURFpSZXF1
aXJlbWVudCk7CiAKICAgICAgICAgU2NvcGVOb2RlKiBjb25zdCBtX3Njb3BlTm9kZTsKICAgICAg
ICAgU3Ryb25nPFVubGlua2VkQ29kZUJsb2NrPiBtX2NvZGVCbG9jazsKQEAgLTk2NSw0ICs5NzIs
MTAgQEAgbmFtZXNwYWNlIEpTQyB7CiAKIH0KIAorbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6VmFyaWFibGU6OlZhcmlhYmxlS2luZCk7CisK
K30gLy8gbmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gQnl0ZWNvZGVHZW5lcmF0b3JfaApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2
aXNpb24gMjAyNzAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDksNyArMTQ5LDcgQEAgbmFtZXNwYWNlIEpTQyAg
ewogICAgICAgICAKICAgICAgICAgLy8gVGhpcyB3aWxsIGdldCB5b3UgYSBDb2RlT3JpZ2luLiBJ
dCB3aWxsIGFsd2F5cyBzdWNjZWVkLiBNYXkgcmV0dXJuCiAgICAgICAgIC8vIENvZGVPcmlnaW4o
MCkgaWYgd2UncmUgaW4gbmF0aXZlIGNvZGUuCi0gICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdp
bigpOworICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBDb2RlT3JpZ2luIGNvZGVPcmlnaW4oKTsK
IAogICAgICAgICBSZWdpc3RlciogdG9wT2ZGcmFtZSgpCiAgICAgICAgIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGlmdC10ZHotYnlwYXNzLWNhdGNoLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbGlmdC10ZHot
YnlwYXNzLWNhdGNoLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9saWZ0LXRkei1ieXBhc3MtY2F0Y2guanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxMCBAQAorLy9AIHJ1bkRlZmF1bHQKKworZnVuY3Rpb24gZm9vICgpIHsKK3RyeXt9Y2F0
Y2goZSl7fXByaW50KGUpO2xldCBlOworfQorCit0cnkgeworICAgIGZvbygpOworfSBjYXRjaCAo
ZSkge30KKwo=
</data>
<flag name="review"
          id="306322"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282634</attachid>
            <date>2016-07-01 20:13:37 -0700</date>
            <delta_ts>2016-07-01 23:06:39 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>16080</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAyNzI0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDE2LTA2LTMwICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
U2NvcGVzIHRoYXQgYXJlIG5vdCB1bmRlciBURFogc2hvdWxkIHN0aWxsIHB1c2ggdGhlaXIgdmFy
aWFibGVzIG9udG8gdGhlIFREWiBzdGFjayBzbyB0aGF0IGxpZnRpbmcgVERaIGRvZXNuJ3QgYnlw
YXNzIHRoYXQgc2NvcGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE1OTMzMgorICAgICAgICByZGFyOi8vcHJvYmxlbS8yNzAxODk1OAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBmaXhl
cyBhbiBpbnN0YWNyYXNoIGluIHRoaXMgY29kZToKKyAgICAgICAgCisgICAgICAgICAgICB0cnl7
fWNhdGNoKGUpe31wcmludChlKTtsZXQgZTsKKyAgICAgICAgCisgICAgICAgIFdlIGxpZnQgVERa
IGZvciAiZSIgaW4gImNhdGNoIChlKXt9IiwgYnV0IHNpbmNlIHRoYXQgc2NvcGUgZG9lc24ndCBw
dXNoIGFueXRoaW5nIG9udG8gdGhlCisgICAgICAgIFREWiBzdGFjaywgd2UgbGlmdCBURFogZnJv
bSAibGV0IGUiLgorICAgICAgICAKKyAgICAgICAgVGhlIHByb2JsZW0gaXMgdGhhdCB3ZSB3ZXJl
bid0IHRyYWNraW5nIHRoZSBzZXQgb2YgdmFyaWFibGVzIHRoYXQgZG8gbm90IGhhdmUgVERaLiBX
ZSBuZWVkCisgICAgICAgIHRvIHRyYWNrIHRoZW0gdG8gImJsb2NrIiB0aGUgdHJhdmVyc2FsIHRo
YXQgbGlmdHMgVERaLiBUaGlzIGNoYW5nZSBmaXhlcyB0aGlzIGlzc3VlIGJ5CisgICAgICAgIHVz
aW5nIGEgbWFwIHRoYXQgdHJhY2tzIGFsbCBrbm93biB2YXJpYWJsZXMsIGFuZCB0ZWxscyB5b3Ug
aWYgdGhleSBhcmUgdW5kZXIgVERaIG9yIG5vdC4KKworICAgICAgICAqIGJ5dGVjb2RlL0NvZGVC
bG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6Om51bVBhcmFtZXRlcnMpOgorICAgICAg
ICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpMYWJlbDo6c2V0TG9jYXRpb24pOgorICAg
ICAgICAoSlNDOjpWYXJpYWJsZTo6ZHVtcCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJh
dG9yOjpnZW5lcmF0ZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29k
ZUdlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNh
bFNjb3BlSW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cG9wTGV4
aWNhbFNjb3BlKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnBvcExleGljYWxT
Y29wZUludGVybmFsKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OnByZXBhcmVM
ZXhpY2FsU2NvcGVGb3JOZXh0Rm9yTG9vcEl0ZXJhdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVj
b2RlR2VuZXJhdG9yOjp2YXJpYWJsZSk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjpuZWVkc1REWkNoZWNrKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmxpZnRU
RFpDaGVja0lmUG9zc2libGUpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6cHVz
aFREWlZhcmlhYmxlcyk6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjpnZXRWYXJp
YWJsZXNVbmRlclREWik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbmRHZW5l
cmF0b3IpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGU6OmlzQ29u
c3QpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZTo6c2V0SXNSZWFkT25seSk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkV4ZWNTdGF0ZTo6dG9wT2ZG
cmFtZSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2xpZnQtdGR6LWJ5cGFzcy1jYXRjaC5qczog
QWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAoY2F0Y2gpOgorCiAyMDE2LTA2LTMwICBK
b3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAgV2ViIEluc3Bl
Y3RvcjogV3JvbmcgZnVuY3Rpb24gbmFtZSBuZXh0IHRvIHNjb3BlCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAyMDI3MDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE0MSw3ICsxNDEsNyBAQCBwdWJsaWM6CiAgICAgQ1N0cmluZyBzb3VyY2VDb2RlRm9yVG9v
bHMoKSBjb25zdDsgLy8gTm90IHF1aXRlIHRoZSBhY3R1YWwgc291cmNlIHdlIHBhcnNlZDsgdGhp
cyB3aWxsIGRvIHRoaW5ncyBsaWtlIHByZWZpeCB0aGUgc291cmNlIGZvciBhIGZ1bmN0aW9uIHdp
dGggYSByZWlmaWVkIHNpZ25hdHVyZS4KICAgICBDU3RyaW5nIHNvdXJjZUNvZGVPbk9uZUxpbmUo
KSBjb25zdDsgLy8gQXMgc291cmNlQ29kZUZvclRvb2xzKCksIGJ1dCByZXBsYWNlcyBhbGwgd2hp
dGVzcGFjZSBydW5zIHdpdGggYSBzaW5nbGUgc3BhY2UuCiAgICAgdm9pZCBkdW1wQXNzdW1pbmdK
SVRUeXBlKFByaW50U3RyZWFtJiwgSklUQ29kZTo6SklUVHlwZSkgY29uc3Q7Ci0gICAgdm9pZCBk
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1w
KFByaW50U3RyZWFtJikgY29uc3Q7CiAKICAgICBpbnQgbnVtUGFyYW1ldGVycygpIGNvbnN0IHsg
cmV0dXJuIG1fbnVtUGFyYW1ldGVyczsgfQogICAgIHZvaWQgc2V0TnVtUGFyYW1ldGVycyhpbnQg
bmV3VmFsdWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmln
aW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5oCShyZXZpc2lvbiAyMDI3MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksNyArMTA5LDcgQEAgc3RydWN0
IENvZGVPcmlnaW4gewogICAgIC8vIEdldCB0aGUgaW5saW5lIHN0YWNrLiBUaGlzIGlzIHNsb3cs
IGFuZCBpcyBpbnRlbmRlZCBmb3IgZGVidWdnaW5nIG9ubHkuCiAgICAgVmVjdG9yPENvZGVPcmln
aW4+IGlubGluZVN0YWNrKCkgY29uc3Q7CiAgICAgCi0gICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Q7CiAgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQq
KSBjb25zdDsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyMDI3
MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDUsNiArNDUsNyBAQAogI2luY2x1ZGUgIlN0cm9u
Z0lubGluZXMuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgogI2luY2x1ZGUgIlVu
bGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uaCIKKyNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0
cmluZy5oPgogCkBAIC02MSw2ICs2MiwxOCBAQCB2b2lkIExhYmVsOjpzZXRMb2NhdGlvbih1bnNp
Z25lZCBsb2NhdGlvCiAgICAgICAgIG1fZ2VuZXJhdG9yLmluc3RydWN0aW9ucygpW21fdW5yZXNv
bHZlZEp1bXBzW2ldLnNlY29uZF0udS5vcGVyYW5kID0gbV9sb2NhdGlvbiAtIG1fdW5yZXNvbHZl
ZEp1bXBzW2ldLmZpcnN0OwogfQogCit2b2lkIFZhcmlhYmxlOjpkdW1wKFByaW50U3RyZWFtJiBv
dXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KAorICAgICAgICAie2lkZW50ID0gIiwgbV9pZGVu
dCwKKyAgICAgICAgIiwgb2Zmc2V0ID0gIiwgbV9vZmZzZXQsCisgICAgICAgICIsIGxvY2FsID0g
IiwgUmF3UG9pbnRlcihtX2xvY2FsKSwKKyAgICAgICAgIiwgYXR0cmlidXRlcyA9ICIsIG1fYXR0
cmlidXRlcywKKyAgICAgICAgIiwga2luZCA9ICIsIG1fa2luZCwKKyAgICAgICAgIiwgc3ltYm9s
VGFibGVDb25zdGFudEluZGV4ID0gIiwgbV9zeW1ib2xUYWJsZUNvbnN0YW50SW5kZXgsCisgICAg
ICAgICIsIGlzTGV4aWNhbGx5U2NvcGVkID0gIiwgbV9pc0xleGljYWxseVNjb3BlZCwgIn0iKTsK
K30KKwogUGFyc2VyRXJyb3IgQnl0ZWNvZGVHZW5lcmF0b3I6OmdlbmVyYXRlKCkKIHsKICAgICBt
X2NvZGVCbG9jay0+c2V0VGhpc1JlZ2lzdGVyKG1fdGhpc1JlZ2lzdGVyLnZpcnR1YWxSZWdpc3Rl
cigpKTsKQEAgLTU4Myw3ICs1OTYsNyBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5l
cmF0b3IoVk0mCiAKICAgICAvLyBBbGwgImFkZFZhcigpInMgbmVlZHMgdG8gaGFwcGVuIGJlZm9y
ZSAiaW5pdGlhbGl6ZURlZmF1bHRQYXJhbWV0ZXJWYWx1ZXNBbmRTZXR1cEZ1bmN0aW9uU2NvcGVT
dGFjaygpIiBpcyBjYWxsZWQKICAgICAvLyBiZWNhdXNlIGEgZnVuY3Rpb24ncyBkZWZhdWx0IHBh
cmFtZXRlciBFeHByZXNzaW9uTm9kZXMgd2lsbCB1c2UgdGVtcG9yYXJ5IHJlZ2lzdGVycy4KLSAg
ICBwdXNoVERaVmFyaWFibGVzKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgVERaQ2hlY2tPcHRp
bWl6YXRpb246OkRvTm90T3B0aW1pemUpOworICAgIHB1c2hURFpWYXJpYWJsZXMoKnBhcmVudFNj
b3BlVERaVmFyaWFibGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6RG9Ob3RPcHRpbWl6ZSwgVERa
UmVxdWlyZW1lbnQ6OlVuZGVyVERaKTsKICAgICBpbml0aWFsaXplRGVmYXVsdFBhcmFtZXRlclZh
bHVlc0FuZFNldHVwRnVuY3Rpb25TY29wZVN0YWNrKHBhcmFtZXRlcnMsIGlzU2ltcGxlUGFyYW1l
dGVyTGlzdCwgZnVuY3Rpb25Ob2RlLCBmdW5jdGlvblN5bWJvbFRhYmxlLCBzeW1ib2xUYWJsZUNv
bnN0YW50SW5kZXgsIGNhcHR1cmVzLCBzaG91bGRDcmVhdGVBcmd1bWVudHNWYXJpYWJsZUluUGFy
YW1ldGVyU2NvcGUpOwogICAgIAogICAgIC8vIElmIHdlIGRvbid0IGhhdmUgIGRlZmF1bHQgcGFy
YW1ldGVyIGV4cHJlc3Npb24sIHRoZW4gbG9hZGluZyB8dGhpc3wgaW5zaWRlIGFuIGFycm93IGZ1
bmN0aW9uIG11c3QgYmUgZG9uZQpAQCAtNjE5LDcgKzYzMiw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYKIAogICAgIG1fY29kZUJsb2NrLT5zZXROdW1QYXJhbWV0
ZXJzKDEpOwogCi0gICAgcHVzaFREWlZhcmlhYmxlcygqcGFyZW50U2NvcGVURFpWYXJpYWJsZXMs
IFREWkNoZWNrT3B0aW1pemF0aW9uOjpEb05vdE9wdGltaXplKTsKKyAgICBwdXNoVERaVmFyaWFi
bGVzKCpwYXJlbnRTY29wZVREWlZhcmlhYmxlcywgVERaQ2hlY2tPcHRpbWl6YXRpb246OkRvTm90
T3B0aW1pemUsIFREWlJlcXVpcmVtZW50OjpVbmRlclREWik7CiAKICAgICBlbWl0RW50ZXIoKTsK
IApAQCAtNzM2LDcgKzc0OSw3IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRv
cihWTSYKICAgICBlbHNlCiAgICAgICAgIGNvbnN0YW50U3ltYm9sVGFibGUgPSBhZGRDb25zdGFu
dFZhbHVlKG1vZHVsZUVudmlyb25tZW50U3ltYm9sVGFibGUtPmNsb25lU2NvcGVQYXJ0KCptX3Zt
KSk7CiAKLSAgICBwdXNoVERaVmFyaWFibGVzKGxleGljYWxWYXJpYWJsZXMsIFREWkNoZWNrT3B0
aW1pemF0aW9uOjpPcHRpbWl6ZSk7CisgICAgcHVzaFREWlZhcmlhYmxlcyhsZXhpY2FsVmFyaWFi
bGVzLCBURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUsIFREWlJlcXVpcmVtZW50OjpVbmRl
clREWik7CiAgICAgYm9vbCBpc1dpdGhTY29wZSA9IGZhbHNlOwogICAgIG1fc3ltYm9sVGFibGVT
dGFjay5hcHBlbmQoU3ltYm9sVGFibGVTdGFja0VudHJ5IHsgbW9kdWxlRW52aXJvbm1lbnRTeW1i
b2xUYWJsZSwgbV90b3BNb3N0U2NvcGUsIGlzV2l0aFNjb3BlLCBjb25zdGFudFN5bWJvbFRhYmxl
LT5pbmRleCgpIH0pOwogICAgIGVtaXRQcmVmaWxsU3RhY2tURFpWYXJpYWJsZXMobGV4aWNhbFZh
cmlhYmxlcywgbW9kdWxlRW52aXJvbm1lbnRTeW1ib2xUYWJsZSk7CkBAIC0xOTEzLDggKzE5MjYs
NyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoTGV4aWNhbFNjb3BlCiAKICAgICBib29s
IGlzV2l0aFNjb3BlID0gZmFsc2U7CiAgICAgbV9zeW1ib2xUYWJsZVN0YWNrLmFwcGVuZChTeW1i
b2xUYWJsZVN0YWNrRW50cnl7IHN5bWJvbFRhYmxlLCBuZXdTY29wZSwgaXNXaXRoU2NvcGUsIHN5
bWJvbFRhYmxlQ29uc3RhbnRJbmRleCB9KTsKLSAgICBpZiAodGR6UmVxdWlyZW1lbnQgPT0gVERa
UmVxdWlyZW1lbnQ6OlVuZGVyVERaKQotICAgICAgICBwdXNoVERaVmFyaWFibGVzKGVudmlyb25t
ZW50LCB0ZHpDaGVja09wdGltaXphdGlvbik7CisgICAgcHVzaFREWlZhcmlhYmxlcyhlbnZpcm9u
bWVudCwgdGR6Q2hlY2tPcHRpbWl6YXRpb24sIHRkelJlcXVpcmVtZW50KTsKIAogICAgIGlmICh0
ZHpSZXF1aXJlbWVudCA9PSBURFpSZXF1aXJlbWVudDo6VW5kZXJURFopCiAgICAgICAgIGVtaXRQ
cmVmaWxsU3RhY2tURFpWYXJpYWJsZXMoZW52aXJvbm1lbnQsIHN5bWJvbFRhYmxlKTsKQEAgLTIw
MDEsMTAgKzIwMTMsMTAgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6aG9pc3RTbG9wcHlNb2Rl
Rgogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cG9wTGV4aWNhbFNjb3BlKFZhcmlhYmxlRW52aXJv
bm1lbnROb2RlKiBub2RlKQogewogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50
ID0gbm9kZS0+bGV4aWNhbFZhcmlhYmxlcygpOwotICAgIHBvcExleGljYWxTY29wZUludGVybmFs
KGVudmlyb25tZW50LCBURFpSZXF1aXJlbWVudDo6VW5kZXJURFopOworICAgIHBvcExleGljYWxT
Y29wZUludGVybmFsKGVudmlyb25tZW50KTsKIH0KIAotdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cG9wTGV4aWNhbFNjb3BlSW50ZXJuYWwoVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQs
IFREWlJlcXVpcmVtZW50IHRkelJlcXVpcmVtZW50KQordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
cG9wTGV4aWNhbFNjb3BlSW50ZXJuYWwoVmFyaWFibGVFbnZpcm9ubWVudCYgZW52aXJvbm1lbnQp
CiB7CiAgICAgLy8gTk9URTogVGhpcyBmdW5jdGlvbiBvbmx5IG1ha2VzIHNlbnNlIGZvciBzY29w
ZXMgdGhhdCBhcmVuJ3QgU2NvcGVSZWdpc3RlclR5cGU6OlZhciAob25seSBmdW5jdGlvbiBuYW1l
IHNjb3BlIHJpZ2h0IG5vdyBpcyBTY29wZVJlZ2lzdGVyVHlwZTo6VmFyKS4KICAgICAvLyBUaGlz
IGRvZXNuJ3QgbWFrZSBzZW5zZSBmb3IgU2NvcGVSZWdpc3RlclR5cGU6OlZhciBiZWNhdXNlIHdl
IGRlcmVmIFJlZ2lzdGVySURzIGhlcmUuCkBAIC0yMDM3LDggKzIwNDksNyBAQCB2b2lkIEJ5dGVj
b2RlR2VuZXJhdG9yOjpwb3BMZXhpY2FsU2NvcGVJCiAgICAgICAgIHN0YWNrRW50cnkubV9zY29w
ZS0+ZGVyZWYoKTsKICAgICB9CiAKLSAgICBpZiAodGR6UmVxdWlyZW1lbnQgPT0gVERaUmVxdWly
ZW1lbnQ6OlVuZGVyVERaKQotICAgICAgICBtX1REWlN0YWNrLnJlbW92ZUxhc3QoKTsKKyAgICBt
X1REWlN0YWNrLnJlbW92ZUxhc3QoKTsKIH0KIAogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHJl
cGFyZUxleGljYWxTY29wZUZvck5leHRGb3JMb29wSXRlcmF0aW9uKFZhcmlhYmxlRW52aXJvbm1l
bnROb2RlKiBub2RlLCBSZWdpc3RlcklEKiBsb29wU3ltYm9sVGFibGUpCkBAIC0yMTYyLDcgKzIx
NzMsNyBAQCBWYXJpYWJsZSBCeXRlY29kZUdlbmVyYXRvcjo6dmFyaWFibGUoY29uCiAgICAgICAg
ICAgICByZXN1bHQuc2V0SXNSZWFkT25seSgpOwogICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KLQorICAgIAogICAgIHJldHVybiBWYXJpYWJsZShwcm9wZXJ0eSk7CiB9CiAKQEAgLTI3MDIs
OSArMjcxMywxMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VERaQ2hlY2soUmVnCiBi
b29sIEJ5dGVjb2RlR2VuZXJhdG9yOjpuZWVkc1REWkNoZWNrKGNvbnN0IFZhcmlhYmxlJiB2YXJp
YWJsZSkKIHsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX1REWlN0YWNrLnNpemUoKTsgaS0tOykg
ewotICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50JiBpZGVudGlmaWVycyA9IG1fVERaU3RhY2tb
aV0uZmlyc3Q7Ci0gICAgICAgIGlmIChpZGVudGlmaWVycy5jb250YWlucyh2YXJpYWJsZS5pZGVu
dCgpLmltcGwoKSkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgYXV0byBpdGVy
ID0gbV9URFpTdGFja1tpXS5maW5kKHZhcmlhYmxlLmlkZW50KCkuaW1wbCgpKTsKKyAgICAgICAg
aWYgKGl0ZXIgPT0gbV9URFpTdGFja1tpXS5lbmQoKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICByZXR1cm4gaXRlci0+dmFsdWUgIT0gVERaTmVjZXNzaXR5TGV2ZWw6Ok5vdE5lZWRl
ZDsKICAgICB9CiAKICAgICByZXR1cm4gZmFsc2U7CkBAIC0yNzI3LDQxICsyNzM5LDUyIEBAIHZv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmxpZnRURFpDaGVja0lmUG8KIHsKICAgICBSZWZQdHI8VW5p
cXVlZFN0cmluZ0ltcGw+IGlkZW50aWZpZXIodmFyaWFibGUuaWRlbnQoKS5pbXBsKCkpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IG1fVERaU3RhY2suc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgIFZh
cmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50ID0gbV9URFpTdGFja1tpXS5maXJzdDsKLSAg
ICAgICAgaWYgKGVudmlyb25tZW50LmNvbnRhaW5zKGlkZW50aWZpZXIpKSB7Ci0gICAgICAgICAg
ICBURFpDaGVja09wdGltaXphdGlvbiB0ZHpDaGVja09wdGltaXphdGlvbkNhcGFiaWxpdHkgPSBt
X1REWlN0YWNrW2ldLnNlY29uZDsKLSAgICAgICAgICAgIGlmICh0ZHpDaGVja09wdGltaXphdGlv
bkNhcGFiaWxpdHkgPT0gVERaQ2hlY2tPcHRpbWl6YXRpb246Ok9wdGltaXplKSB7Ci0gICAgICAg
ICAgICAgICAgYm9vbCB3YXNSZW1vdmVkID0gZW52aXJvbm1lbnQucmVtb3ZlKGlkZW50aWZpZXIp
OwotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHdhc1JlbW92ZWQpOwotICAgICAgICAg
ICAgfQorICAgICAgICBhdXRvIGl0ZXIgPSBtX1REWlN0YWNrW2ldLmZpbmQoaWRlbnRpZmllcik7
CisgICAgICAgIGlmIChpdGVyICE9IG1fVERaU3RhY2tbaV0uZW5kKCkpIHsKKyAgICAgICAgICAg
IGlmIChpdGVyLT52YWx1ZSA9PSBURFpOZWNlc3NpdHlMZXZlbDo6T3B0aW1pemUpCisgICAgICAg
ICAgICAgICAgaXRlci0+dmFsdWUgPSBURFpOZWNlc3NpdHlMZXZlbDo6Tm90TmVlZGVkOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiB9CiAKLXZvaWQgQnl0ZWNvZGVHZW5l
cmF0b3I6OnB1c2hURFpWYXJpYWJsZXMoVmFyaWFibGVFbnZpcm9ubWVudCBlbnZpcm9ubWVudCwg
VERaQ2hlY2tPcHRpbWl6YXRpb24gb3B0aW1pemF0aW9uKQordm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6cHVzaFREWlZhcmlhYmxlcyhjb25zdCBWYXJpYWJsZUVudmlyb25tZW50JiBlbnZpcm9ubWVu
dCwgVERaQ2hlY2tPcHRpbWl6YXRpb24gb3B0aW1pemF0aW9uLCBURFpSZXF1aXJlbWVudCByZXF1
aXJlbWVudCkKIHsKICAgICBpZiAoIWVudmlyb25tZW50LnNpemUoKSkKICAgICAgICAgcmV0dXJu
OworICAgIAorICAgIFREWk5lY2Vzc2l0eUxldmVsIGxldmVsOworICAgIGlmIChyZXF1aXJlbWVu
dCA9PSBURFpSZXF1aXJlbWVudDo6VW5kZXJURFopIHsKKyAgICAgICAgaWYgKG9wdGltaXphdGlv
biA9PSBURFpDaGVja09wdGltaXphdGlvbjo6T3B0aW1pemUpCisgICAgICAgICAgICBsZXZlbCA9
IFREWk5lY2Vzc2l0eUxldmVsOjpPcHRpbWl6ZTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
bGV2ZWwgPSBURFpOZWNlc3NpdHlMZXZlbDo6RG9Ob3RPcHRpbWl6ZTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgbGV2ZWwgPSBURFpOZWNlc3NpdHlMZXZlbDo6Tm90TmVlZGVkOworICAgIAorICAgIFRE
Wk1hcCBtYXA7CisgICAgZm9yIChjb25zdCBhdXRvJiBlbnRyeSA6IGVudmlyb25tZW50KQorICAg
ICAgICBtYXAuYWRkKGVudHJ5LmtleSwgZW50cnkudmFsdWUuaXNGdW5jdGlvbigpID8gVERaTmVj
ZXNzaXR5TGV2ZWw6Ok5vdE5lZWRlZDogbGV2ZWwpOwogCi0gICAgVmVjdG9yPFVuaXF1ZWRTdHJp
bmdJbXBsKiwgND4gZnVuY3Rpb25zVG9SZW1vdmU7Ci0gICAgZm9yIChjb25zdCBhdXRvJiBlbnRy
eSA6IGVudmlyb25tZW50KSB7Ci0gICAgICAgIGlmIChlbnRyeS52YWx1ZS5pc0Z1bmN0aW9uKCkp
Ci0gICAgICAgICAgICBmdW5jdGlvbnNUb1JlbW92ZS5hcHBlbmQoZW50cnkua2V5LmdldCgpKTsK
LSAgICB9Ci0KLSAgICBmb3IgKFVuaXF1ZWRTdHJpbmdJbXBsKiBmdW5jdGlvbiA6IGZ1bmN0aW9u
c1RvUmVtb3ZlKQotICAgICAgICBlbnZpcm9ubWVudC5yZW1vdmUoZnVuY3Rpb24pOwotCi0gICAg
bV9URFpTdGFjay5hcHBlbmQoc3RkOjptYWtlX3BhaXIoV1RGTW92ZShlbnZpcm9ubWVudCksIG9w
dGltaXphdGlvbikpOworICAgIG1fVERaU3RhY2suYXBwZW5kKFdURk1vdmUobWFwKSk7CiB9CiAK
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmdldFZhcmlhYmxlc1VuZGVyVERaKFZhcmlhYmxlRW52
aXJvbm1lbnQmIHJlc3VsdCkKIHsKLSAgICBmb3IgKGF1dG8mIHBhaXIgOiBtX1REWlN0YWNrKSB7
Ci0gICAgICAgIFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50ID0gcGFpci5maXJzdDsK
LSAgICAgICAgZm9yIChhdXRvIGVudHJ5IDogZW52aXJvbm1lbnQpCi0gICAgICAgICAgICByZXN1
bHQuYWRkKGVudHJ5LmtleS5nZXQoKSk7CisgICAgLy8gTk9URTogVGhpcyBpcyBjb25zZXJ2YXRp
dmUuIElmIGNhbGxlZCBhdCAiLi4uIiwgaXQgd2lsbCByZXBvcnQgIngiIGFzIGJlaW5nIHVuZGVy
IFREWjoKKyAgICAvLworICAgIC8vICAgICB7CisgICAgLy8gICAgICAgICB7CisgICAgLy8gICAg
ICAgICAgICAgbGV0IHg7CisgICAgLy8gICAgICAgICAgICAgLi4uCisgICAgLy8gICAgICAgICB9
CisgICAgLy8gICAgICAgICBsZXQgeDsKKyAgICAvLyAgICAgfQorICAgIGZvciAoYXV0byYgbWFw
IDogbV9URFpTdGFjaykgeworICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogbWFwKSAgeworICAg
ICAgICAgICAgaWYgKGVudHJ5LnZhbHVlICE9IFREWk5lY2Vzc2l0eUxldmVsOjpOb3ROZWVkZWQp
CisgICAgICAgICAgICAgICAgcmVzdWx0LmFkZChlbnRyeS5rZXkuZ2V0KCkpOworICAgICAgICB9
CiAgICAgfQogfQogCkBAIC0zODE2LDcgKzM4MzksNyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0UHVzaENhdGNoU2NvCiAKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQb3BDYXRj
aFNjb3BlKFZhcmlhYmxlRW52aXJvbm1lbnQmIGVudmlyb25tZW50KSAKIHsKLSAgICBwb3BMZXhp
Y2FsU2NvcGVJbnRlcm5hbChlbnZpcm9ubWVudCwgVERaUmVxdWlyZW1lbnQ6Ok5vdFVuZGVyVERa
KTsKKyAgICBwb3BMZXhpY2FsU2NvcGVJbnRlcm5hbChlbnZpcm9ubWVudCk7CiB9CiAKIHZvaWQg
Qnl0ZWNvZGVHZW5lcmF0b3I6OmJlZ2luU3dpdGNoKFJlZ2lzdGVySUQqIHNjcnV0aW5lZVJlZ2lz
dGVyLCBTd2l0Y2hJbmZvOjpTd2l0Y2hUeXBlIHR5cGUpCkBAIC00NjExLDMgKzQ2MzQsMjEgQEAg
dm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW5kR2VuZXJhdG9yKExhYgogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKKworbmFtZXNwYWNlIFdURiB7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBKU0M6OlZhcmlhYmxlOjpWYXJpYWJsZUtpbmQga2luZCkKK3sKKyAgICBzd2l0
Y2ggKGtpbmQpIHsKKyAgICBjYXNlIEpTQzo6VmFyaWFibGU6Ok5vcm1hbFZhcmlhYmxlOgorICAg
ICAgICBvdXQucHJpbnQoIk5vcm1hbCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6
OlZhcmlhYmxlOjpTcGVjaWFsVmFyaWFibGU6CisgICAgICAgIG91dC5wcmludCgiU3BlY2lhbCIp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCShyZXZpc2lv
biAyMDI3MDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzOCw2ICsyMzgsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgYm9vbCBpc0NvbnN0KCkgY29uc3QgeyByZXR1cm4gaXNSZWFkT25seSgp
ICYmIG1faXNMZXhpY2FsbHlTY29wZWQ7IH0KICAgICAgICAgdm9pZCBzZXRJc1JlYWRPbmx5KCkg
eyBtX2F0dHJpYnV0ZXMgfD0gUmVhZE9ubHk7IH0KIAorICAgICAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mKSBjb25zdDsKKwogICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVu
dDsKICAgICAgICAgVmFyT2Zmc2V0IG1fb2Zmc2V0OwpAQCAtNzI4LDcgKzczMCw3IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICBlbnVtIGNsYXNzIFNjb3BlUmVnaXN0ZXJUeXBlIHsgVmFyLCBC
bG9jayB9OwogICAgICAgICB2b2lkIHB1c2hMZXhpY2FsU2NvcGVJbnRlcm5hbChWYXJpYWJsZUVu
dmlyb25tZW50JiwgVERaQ2hlY2tPcHRpbWl6YXRpb24sIE5lc3RlZFNjb3BlVHlwZSwgUmVnaXN0
ZXJJRCoqIGNvbnN0YW50U3ltYm9sVGFibGVSZXN1bHQsIFREWlJlcXVpcmVtZW50LCBTY29wZVR5
cGUsIFNjb3BlUmVnaXN0ZXJUeXBlKTsKICAgICAgICAgdm9pZCBpbml0aWFsaXplQmxvY2tTY29w
ZWRGdW5jdGlvbnMoVmFyaWFibGVFbnZpcm9ubWVudCYsIEZ1bmN0aW9uU3RhY2smLCBSZWdpc3Rl
cklEKiBjb25zdGFudFN5bWJvbFRhYmxlKTsKLSAgICAgICAgdm9pZCBwb3BMZXhpY2FsU2NvcGVJ
bnRlcm5hbChWYXJpYWJsZUVudmlyb25tZW50JiwgVERaUmVxdWlyZW1lbnQpOworICAgICAgICB2
b2lkIHBvcExleGljYWxTY29wZUludGVybmFsKFZhcmlhYmxlRW52aXJvbm1lbnQmKTsKICAgICAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgTG9va1VwVmFyS2luZEZ1bmN0b3I+CiAgICAgICAgIGJvb2wg
aW5zdGFudGlhdGVMZXhpY2FsVmFyaWFibGVzKGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmLCBT
eW1ib2xUYWJsZSosIFNjb3BlUmVnaXN0ZXJUeXBlLCBMb29rVXBWYXJLaW5kRnVuY3Rvcik7CiAg
ICAgICAgIHZvaWQgZW1pdFByZWZpbGxTdGFja1REWlZhcmlhYmxlcyhjb25zdCBWYXJpYWJsZUVu
dmlyb25tZW50JiwgU3ltYm9sVGFibGUqKTsKQEAgLTg4MSw5ICs4ODMsMTUgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgICAgICBpbnQgbV9zeW1ib2xUYWJsZUNvbnN0YW50SW5kZXg7CiAgICAg
ICAgIH07CiAgICAgICAgIFZlY3RvcjxTeW1ib2xUYWJsZVN0YWNrRW50cnk+IG1fc3ltYm9sVGFi
bGVTdGFjazsKLSAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjxWYXJpYWJsZUVudmlyb25tZW50LCBU
RFpDaGVja09wdGltaXphdGlvbj4+IG1fVERaU3RhY2s7CisgICAgICAgIGVudW0gY2xhc3MgVERa
TmVjZXNzaXR5TGV2ZWwgeworICAgICAgICAgICAgTm90TmVlZGVkLAorICAgICAgICAgICAgT3B0
aW1pemUsCisgICAgICAgICAgICBEb05vdE9wdGltaXplCisgICAgICAgIH07CisgICAgICAgIHR5
cGVkZWYgSGFzaE1hcDxSZWZQdHI8VW5pcXVlZFN0cmluZ0ltcGw+LCBURFpOZWNlc3NpdHlMZXZl
bCwgSWRlbnRpZmllclJlcEhhc2g+IFREWk1hcDsKKyAgICAgICAgVmVjdG9yPFREWk1hcD4gbV9U
RFpTdGFjazsKICAgICAgICAgT3B0aW9uYWw8c2l6ZV90PiBtX3ZhclNjb3BlU3ltYm9sVGFibGVJ
bmRleDsKLSAgICAgICAgdm9pZCBwdXNoVERaVmFyaWFibGVzKFZhcmlhYmxlRW52aXJvbm1lbnQs
IFREWkNoZWNrT3B0aW1pemF0aW9uKTsKKyAgICAgICAgdm9pZCBwdXNoVERaVmFyaWFibGVzKGNv
bnN0IFZhcmlhYmxlRW52aXJvbm1lbnQmLCBURFpDaGVja09wdGltaXphdGlvbiwgVERaUmVxdWly
ZW1lbnQpOwogCiAgICAgICAgIFNjb3BlTm9kZSogY29uc3QgbV9zY29wZU5vZGU7CiAgICAgICAg
IFN0cm9uZzxVbmxpbmtlZENvZGVCbG9jaz4gbV9jb2RlQmxvY2s7CkBAIC05NjUsNCArOTczLDEw
IEBAIG5hbWVzcGFjZSBKU0MgewogCiB9CiAKK25hbWVzcGFjZSBXVEYgeworCit2b2lkIHByaW50
SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OlZhcmlhYmxlOjpWYXJpYWJsZUtpbmQpOworCit9
IC8vIG5hbWVzcGFjZSBXVEYKKwogI2VuZGlmIC8vIEJ5dGVjb2RlR2VuZXJhdG9yX2gKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHJldmlz
aW9uIDIwMjcwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJh
bWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ5LDcgKzE0OSw3IEBAIG5hbWVzcGFjZSBKU0MgIHsK
ICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgd2lsbCBnZXQgeW91IGEgQ29kZU9yaWdpbi4gSXQg
d2lsbCBhbHdheXMgc3VjY2VlZC4gTWF5IHJldHVybgogICAgICAgICAvLyBDb2RlT3JpZ2luKDAp
IGlmIHdlJ3JlIGluIG5hdGl2ZSBjb2RlLgotICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4o
KTsKKyAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKCk7CiAK
ICAgICAgICAgUmVnaXN0ZXIqIHRvcE9mRnJhbWUoKQogICAgICAgICB7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xpZnQtdGR6LWJ5cGFzcy1jYXRjaC5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2xpZnQtdGR6LWJ5
cGFzcy1jYXRjaC5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvbGlmdC10ZHotYnlwYXNzLWNhdGNoLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTAgQEAKKy8vQCBydW5EZWZhdWx0CisKK2Z1bmN0aW9uIGZvbyAoKSB7Cit0cnl7fWNhdGNo
KGUpe31wcmludChlKTtsZXQgZTsKK30KKwordHJ5IHsKKyAgICBmb28oKTsKK30gY2F0Y2ggKGUp
IHt9CisK
</data>
<flag name="review"
          id="306442"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>