<?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>101909</bug_id>
          
          <creation_ts>2012-11-12 00:37:08 -0800</creation_ts>
          <short_desc>Patching of jumps to stubs should use jump replacement rather than branch destination overwrite</short_desc>
          <delta_ts>2012-11-14 06:53:51 -0800</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>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>102044</dependson>
    
    <dependson>102227</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>764130</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-12 00:37:08 -0800</bug_when>
    <thetext>That will reduce the amount of code executed on the hot path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764132</commentid>
    <comment_count>1</comment_count>
      <attachid>173580</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-12 00:40:39 -0800</bug_when>
    <thetext>Created attachment 173580
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764952</commentid>
    <comment_count>2</comment_count>
      <attachid>173757</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-12 16:34:40 -0800</bug_when>
    <thetext>Created attachment 173757
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>764961</commentid>
    <comment_count>3</comment_count>
      <attachid>173757</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-11-12 16:38:51 -0800</bug_when>
    <thetext>Comment on attachment 173757
the patch

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

r=me

&gt; Source/JavaScriptCore/assembler/X86Assembler.h:1922
&gt; +#if CPU(X86_64)
&gt; +    static void revertJumpTo_movq_i64r(void* instructionStart, int64_t imm, RegisterID dst)
&gt; +    {
&gt; +        const int rexBytes = 1;
&gt; +        const int opcodeBytes = 1;
&gt; +        ASSERT(rexBytes + opcodeBytes &lt;= maxJumpReplacementSize());
&gt; +        uint8_t* ptr = reinterpret_cast&lt;uint8_t*&gt;(instructionStart);
&gt; +        ptr[0] = PRE_REX | (1 &lt;&lt; 3) | (dst &gt;&gt; 3);
&gt; +        ptr[1] = OP_MOV_EAXIv | (dst &amp; 7);
&gt; +        
&gt; +        union {
&gt; +            uint64_t asWord;
&gt; +            uint8_t asBytes[8];
&gt; +        } u;
&gt; +        u.asWord = imm;
&gt; +        for (unsigned i = rexBytes + opcodeBytes; i &lt; static_cast&lt;unsigned&gt;(maxJumpReplacementSize()); ++i)
&gt; +            ptr[i] = u.asBytes[i - rexBytes - opcodeBytes];
&gt; +    }
&gt; +#endif
&gt; +    
&gt; +    static void revertJumpTo_cmpl_im_force32(void* instructionStart, int32_t imm, int offset, RegisterID dst)
&gt; +    {
&gt; +        ASSERT_UNUSED(offset, !offset);
&gt; +        const int opcodeBytes = 1;
&gt; +        const int modRMBytes = 1;
&gt; +        ASSERT(opcodeBytes + modRMBytes &lt;= maxJumpReplacementSize());
&gt; +        uint8_t* ptr = reinterpret_cast&lt;uint8_t*&gt;(instructionStart);
&gt; +        ptr[0] = OP_GROUP1_EvIz;
&gt; +        ptr[1] = (X86InstructionFormatter::ModRmMemoryNoDisp &lt;&lt; 6) | (GROUP1_OP_CMP &lt;&lt; 3) | dst;
&gt; +        union {
&gt; +            uint32_t asWord;
&gt; +            uint8_t asBytes[4];
&gt; +        } u;
&gt; +        u.asWord = imm;
&gt; +        for (unsigned i = opcodeBytes + modRMBytes; i &lt; static_cast&lt;unsigned&gt;(maxJumpReplacementSize()); ++i)
&gt; +            ptr[i] = u.asBytes[i - opcodeBytes - modRMBytes];
&gt; +    }

This would be a good thing to run by Gavin when he&apos;s back.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765051</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-11-12 17:56:36 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/134332</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>765223</commentid>
    <comment_count>5</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-11-12 21:51:34 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; Landed in http://trac.webkit.org/changeset/134332

It broke the ARM traditional build - https://bugs.webkit.org/show_bug.cgi?id=102044</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>766852</commentid>
    <comment_count>6</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2012-11-14 06:53:51 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; Landed in http://trac.webkit.org/changeset/134332
&gt; 
&gt; It broke the ARM traditional build - https://bugs.webkit.org/show_bug.cgi?id=102044

and the MIPS build too - https://bugs.webkit.org/show_bug.cgi?id=102227</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173580</attachid>
            <date>2012-11-12 00:40:39 -0800</date>
            <delta_ts>2012-11-12 16:34:40 -0800</delta_ts>
            <desc>work in progress</desc>
            <filename>jumpreplace.patch</filename>
            <type>text/plain</type>
            <size>12457</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM0MTk0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBA
CisyMDEyLTExLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UGF0Y2hpbmcgb2YganVtcHMgdG8gc3R1YnMgc2hvdWxkIHVzZSBqdW1wIHJlcGxhY2VtZW50IHJh
dGhlciB0aGFuIGJyYW5jaCBkZXN0aW5hdGlvbiBvdmVyd3JpdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTkwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jlc3MuCisKKyAgICAg
ICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaDoKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJYODZfNjQ6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgor
ICAgICAgICAoTWFjcm9Bc3NlbWJsZXJYODZfNjQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
Ymxlclg4Nl82NDo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRo
UGF0Y2gpOgorICAgICAgICAqIGFzc2VtYmxlci9SZXBhdGNoQnVmZmVyLmg6CisgICAgICAgIChK
U0M6OlJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgor
ICAgICAgICAoUmVwYXRjaEJ1ZmZlcik6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OnJl
cGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChKU0M6OlJlcGF0Y2hCdWZmZXI6OnJldmVydEp1bXBS
ZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKiBhc3Nl
bWJsZXIvWDg2QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6cmV2ZXJ0
SnVtcFRvX21vdnFfaTY0cik6CisgICAgICAgIChYODZBc3NlbWJsZXIpOgorICAgICAgICAqIGJ5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmg6CisgICAgICAgICogZGZnL0RGR1JlcGF0Y2guY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnJlcGxhY2VXaXRoSnVtcCk6CisgICAgICAgIChERkcpOgor
ICAgICAgICAoSlNDOjpERkc6OnRyeUNhY2hlR2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6
dHJ5QnVpbGRHZXRCeUlETGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5QnVpbGRHZXRCeUlE
UHJvdG9MaXN0KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZVB1dEJ5SUQpOgorICAgICAg
ICAoSlNDOjpERkc6OmRmZ1Jlc2V0R2V0QnlJRCk6CisgICAgICAgIChKU0M6OkRGRzo6ZGZnUmVz
ZXRQdXRCeUlEKToKKwogMjAxMi0xMS0xMSAgTWljaGFlbCBQcnVldHQgIDxtaWNoYWVsQDY4ay5v
cmc+CiAKICAgICAgICAgRml4IGFzc2VydGlvbiBmYWlsdXJlIGluIEpTT2JqZWN0Ojp0cnlHZXRJ
bmRleFF1aWNrbHkoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTM0MTY4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC01ODUsNiArNTg1LDIxIEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBSZWdp
c3RlcklEIHNjcmF0Y2hSZWdpc3RlckZvckJsaW5kaW5nKCkgeyByZXR1cm4gc2NyYXRjaFJlZ2lz
dGVyOyB9CiAKKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisgICAgewor
ICAgICAgICBjb25zdCBpbnQgcmV4Qnl0ZXMgPSAxOworICAgICAgICBjb25zdCBpbnQgb3Bjb2Rl
Qnl0ZXMgPSAxOworICAgICAgICBjb25zdCBpbnQgaW1tZWRpYXRlQnl0ZXMgPSA4OworICAgICAg
ICBjb25zdCBpbnQgdG90YWxCeXRlcyA9IHJleEJ5dGVzICsgb3Bjb2RlQnl0ZXMgKyBpbW1lZGlh
dGVCeXRlczsKKyAgICAgICAgQVNTRVJUKHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2VtZW50
U2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0ZXMp
OworICAgIH0KKyAgICAKKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1Bh
dGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0
YXJ0LCB2b2lkKiBpbml0aWFsVmFsdWUpCisgICAgeworICAgICAgICBYODZBc3NlbWJsZXI6OnJl
dmVydEp1bXBUb19tb3ZxX2k2NHIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygp
LCByZWludGVycHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzY3JhdGNoUmVnaXN0
ZXIpOworICAgIH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKICAg
ICBmcmllbmQgY2xhc3MgUmVwYXRjaEJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCShyZXZpc2lvbiAxMzQxNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDYgKzE0MSwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXBsYWNlV2l0
aEFkZHJlc3NDb21wdXRhdGlvbihsYWJlbCk7CiAgICAgfQogCisgICAgc3RhdGljIENvZGVMb2Nh
dGlvbkxhYmVsIHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9u
RGF0YUxhYmVsUHRyIGxhYmVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVy
OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKGxhYmVsKTsKKyAgICB9CisgICAg
CisgICAgdm9pZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25T
dGFydCwgQ29kZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQsIGRlc3RpbmF0aW9u
KTsKKyAgICB9CisgICAgCisgICAgLy8gVGhpcyBpcyBhICpiaXQqIG9mIGEgc2lsbHkgQVBJLCBz
aW5jZSB3ZSBjdXJyZW50bHkgYWx3YXlzIGFsc28gcmVwYXRjaCB0aGUKKyAgICAvLyBpbW1lZGlh
dGUgYWZ0ZXIgY2FsbGluZyB0aGlzLiBCdXQgSSdtIGZpbmUgd2l0aCB0aGF0LCBzaW5jZSB0aGlz
IGp1c3QgZmVlbHMKKyAgICAvLyBsZXNzIHl1Y2t5LgorICAgIHZvaWQgcmV2ZXJ0SnVtcFJlcGxh
Y2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5z
dHJ1Y3Rpb25TdGFydCwgdm9pZCogdmFsdWUpCisgICAgeworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goaW5z
dHJ1Y3Rpb25TdGFydCwgdmFsdWUpOworICAgIH0KKwogcHJpdmF0ZToKICAgICB2b2lkKiBtX3N0
YXJ0OwogICAgIHNpemVfdCBtX3NpemU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHJldmlzaW9uIDEzNDE2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE4ODMsNiArMTg4MywyNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiA1OwogICAgIH0KICAg
ICAKKyAgICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wVG9fbW92cV9pNjRyKHZvaWQqIGluc3RydWN0
aW9uU3RhcnQsIGludDY0X3QgaW1tLCBSZWdpc3RlcklEIGRzdCkKKyAgICB7CisgICAgICAgIGNv
bnN0IGludCByZXhCeXRlcyA9IDE7CisgICAgICAgIGNvbnN0IGludCBvcGNvZGVCeXRlcyA9IDE7
CisgICAgICAgIEFTU0VSVChyZXhCeXRlcyArIG9wY29kZUJ5dGVzIDw9IG1heEp1bXBSZXBsYWNl
bWVudFNpemUoKSk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyZXhCeXRlcyk7CisgICAgICAgIFVO
VVNFRF9QQVJBTShvcGNvZGVCeXRlcyk7CisgICAgICAgIHVpbnQ4X3QqIHB0ciA9IHJlaW50ZXJw
cmV0X2Nhc3Q8dWludDhfdCo+KGluc3RydWN0aW9uU3RhcnQpOworICAgICAgICBwdHJbMF0gPSBQ
UkVfUkVYIHwgKDEgPDwgMykgfCAoZHN0ID4+IDMpOworICAgICAgICBwdHJbMV0gPSBPUF9NT1Zf
RUFYSXYgfCAoZHN0ICYgNyk7CisgICAgICAgIAorICAgICAgICB1bmlvbiB7CisgICAgICAgICAg
ICB1aW50NjRfdCBhc1dvcmQ7CisgICAgICAgICAgICB1aW50OF90IGFzQnl0ZXNbOF07CisgICAg
ICAgIH0gdTsKKyAgICAgICAgdS5hc1dvcmQgPSBpbW07CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDI7IGkgPCBtYXhKdW1wUmVwbGFjZW1lbnRTaXplKCk7ICsraSkKKyAgICAgICAgICAgIHB0
cltpXSA9IHUuYXNCeXRlc1tpIC0gMl07CisgICAgfQorICAgIAogICAgIHN0YXRpYyB2b2lkIHJl
cGxhY2VXaXRoTG9hZCh2b2lkKiBpbnN0cnVjdGlvblN0YXJ0KQogICAgIHsKICAgICAgICAgdWlu
dDhfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oaW5zdHJ1Y3Rpb25TdGFydCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8u
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3RydWN0dXJl
U3R1YkluZm8uaAkocmV2aXNpb24gMTM0MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkocmV2aXNpb24gMTM0MTY4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdSZXBhdGNoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTE0
LDYgKzExNCwyMiBAQCBzdGF0aWMgdm9pZCBhZGRTdHJ1Y3R1cmVUcmFuc2l0aW9uQ2hlY2soCiAg
ICAgICAgIGZhaWx1cmVDYXNlcywgc2NyYXRjaEdQUik7CiB9CiAKK3N0YXRpYyB2b2lkIHJlcGxh
Y2VXaXRoSnVtcChSZXBhdGNoQnVmZmVyJiByZXBhdGNoQnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5m
byYgc3R1YkluZm8sIGNvbnN0IE1hY3JvQXNzZW1ibGVyQ29kZVB0ciB0YXJnZXQpCit7CisgICAg
aWYgKDEpIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZXBsYWNlV2l0aEp1bXAoCisgICAgICAg
ICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKAor
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJB
dE9mZnNldCgKKyAgICAgICAgICAgICAgICAgICAgLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCkpLAorICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwo
dGFyZ2V0KSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisg
ICAgICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAg
ICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwK
KyAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHRhcmdldCkpOworICAgIH0KK30KKwogc3Rh
dGljIHZvaWQgZW1pdFJlc3RvcmVTY3JhdGNoKE1hY3JvQXNzZW1ibGVyJiBzdHViSml0LCBib29s
IG5lZWRUb1Jlc3RvcmVTY3JhdGNoLCBHUFJSZWcgc2NyYXRjaEdQUiwgTWFjcm9Bc3NlbWJsZXI6
Okp1bXAmIHN1Y2Nlc3MsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBmYWlsLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QgZmFpbHVyZUNhc2VzKQogewogICAgIGlmIChuZWVkVG9SZXN0b3JlU2NyYXRj
aCkgewpAQCAtMjg0LDcgKzMwMCw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVj
U3RhdGUqIGUKICAgICAgICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRv
RG9uZSkuZXhlY3V0YWJsZUFkZHJlc3MoKSkpOwogICAgICAgICAKICAgICAgICAgUmVwYXRjaEJ1
ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVs
aW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5m
by5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICByZXBsYWNlV2l0aEp1bXAo
cmVwYXRjaEJ1ZmZlciwgc3R1YkluZm8sIHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29k
ZSgpKTsKICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxv
Y2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtMzM0LDcgKzM1MCw3IEBAIHN0YXRpYyBib29sIHRyeUNhY2hlR2V0QnlJRChFeGVjU3Rh
dGUqIGUKICAgICBnZW5lcmF0ZVByb3RvQ2hhaW5BY2Nlc3NTdHViKGV4ZWMsIHN0dWJJbmZvLCBw
cm90b3R5cGVDaGFpbiwgY291bnQsIG9mZnNldCwgc3RydWN0dXJlLCBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9E
b25lKSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8u
cGF0Y2guZGZnLmRlbHRhQ2FsbFRvU2xvd0Nhc2UpLCBzdHViSW5mby5zdHViUm91dGluZSk7CiAg
ICAgCiAgICAgUmVwYXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayksIENvZGVMb2NhdGlv
bkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CisgICAgcmVwbGFj
ZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+
Y29kZSgpLmNvZGUoKSk7CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkUHJvdG9CdWlsZExpc3QpOwogICAgIAogICAg
IHN0dWJJbmZvLmluaXRHZXRCeUlkQ2hhaW4oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJF
eGVjdXRhYmxlKCksIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIGNvdW50LCB0cnVlKTsKQEAg
LTUxOCw5ICs1MzQsMTEgQEAgc3RhdGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlETGlzdChFeGVjU3Rh
dAogICAgICAgICAKICAgICAgICAgcG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJ
bmRleF0uc2V0KCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHVi
Um91dGluZSwgc3RydWN0dXJlLCBpc0RpcmVjdCk7CiAgICAgICAgIAotICAgICAgICBDb2RlTG9j
YXRpb25KdW1wIGp1bXBMb2NhdGlvbiA9IHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1w
QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spOwogICAg
ICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsKLSAgICAgICAgcmVw
YXRjaEJ1ZmZlci5yZWxpbmsoanVtcExvY2F0aW9uLCBDb2RlTG9jYXRpb25MYWJlbChzdHViUm91
dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKyAg
ICAgICAgICAgIHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoCisgICAg
ICAgICAgICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAor
ICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2RlKCkp
KTsKICAgICAgICAgCiAgICAgICAgIGlmIChsaXN0SW5kZXggPCAoUE9MWU1PUlBISUNfTElTVF9D
QUNIRV9TSVpFIC0gMSkpCiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTU4NCw5ICs2MDIs
OCBAQCBzdGF0aWMgYm9vbCB0cnlCdWlsZEdldEJ5SURQcm90b0xpc3QoRXhlCiAgICAgICAgIAog
ICAgICAgICBwb2x5bW9ycGhpY1N0cnVjdHVyZUxpc3QtPmxpc3RbbGlzdEluZGV4XS5zZXQoKmds
b2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCksIHN0dWJSb3V0aW5lLCBzdHJ1
Y3R1cmUsIHRydWUpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uSnVtcCBqdW1wTG9j
YXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVwYXRjaEJ1ZmZl
ciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5r
KGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNvZGUoKS5jb2Rl
KCkpKTsKKyAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hCdWZmZXIsIHN0dWJJbmZvLCBz
dHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAgICAgICAgIAogICAgICAgICBpZiAobGlzdElu
ZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0laRSAtIDEpKQogICAgICAgICAgICAgcmV0
dXJuIHRydWU7CkBAIC05NzYsNyArOTkzLDEwIEBAIHN0YXRpYyBib29sIHRyeUNhY2hlUHV0QnlJ
RChFeGVjU3RhdGUqIGUKICAgICAgICAgICAgICAgICBzdHViSW5mby5zdHViUm91dGluZSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2Rl
QmxvY2spOwotICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9T
dHJ1Y3RDaGVjayksIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2Rl
KCkuY29kZSgpKSk7CisgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluaygKKyAgICAgICAg
ICAgICAgICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAg
ICAgICAgICAgICAgICBzdHViSW5mby5wYXRjaC5kZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayks
CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJvdXRpbmUt
PmNvZGUoKS5jb2RlKCkpKTsKICAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJ
bmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgYXBwcm9wcmlhdGVMaXN0QnVpbGRpbmdQdXRCeUlkRnVu
Y3Rpb24oc2xvdCwgcHV0S2luZCkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBzdHViSW5m
by5pbml0UHV0QnlJZFRyYW5zaXRpb24oKmdsb2JhbERhdGEsIGNvZGVCbG9jay0+b3duZXJFeGVj
dXRhYmxlKCksIG9sZFN0cnVjdHVyZSwgc3RydWN0dXJlLCBwcm90b3R5cGVDaGFpbiwgcHV0S2lu
ZCA9PSBEaXJlY3QpOwpAQCAtMTExOCw3ICsxMTM4LDkgQEAgdm9pZCBkZmdMaW5rRm9yKEV4ZWNT
dGF0ZSogZXhlYywgQ2FsbExpbgogdm9pZCBkZmdSZXNldEdldEJ5SUQoUmVwYXRjaEJ1ZmZlciYg
cmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8mIHN0dWJJbmZvKQogewogICAgIHJlcGF0
Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwgb3BlcmF0aW9uR2V0
QnlJZE9wdGltaXplKTsKLSAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkp
OworICAgIENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBzdHJ1Y3R1cmVMYWJlbCA9IHN0dWJJbmZv
LmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJ
bmZvLnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
dmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKFJlcGF0Y2hC
dWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goc3RydWN0dXJlTGFiZWwp
LCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOworICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRj
aChzdHJ1Y3R1cmVMYWJlbCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKICNpZiBVU0Uo
SlNWQUxVRTY0KQogICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJu
TG9jYXRpb24uZGF0YUxhYmVsQ29tcGFjdEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0
YUNhbGxUb0xvYWRPclN0b3JlKSwgMCk7CiAjZWxzZQpAQCAtMTE0Myw3ICsxMTY1LDkgQEAgdm9p
ZCBkZmdSZXNldFB1dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYQogICAgICAgICBvcHRpbWl6ZWRG
dW5jdGlvbiA9IG9wZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9
CiAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBv
cHRpbWl6ZWRGdW5jdGlvbik7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNh
bGxSZXR1cm5Mb2NhdGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZv
LnBhdGNoLmRmZy5kZWx0YUNoZWNrSW1tVG9DYWxsKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
LTEpKTsKKyAgICBDb2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClz
dHViSW5mby5wYXRjaC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7CisgICAgcmVwYXRjaEJ1ZmZl
ci5yZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChSZXBh
dGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKHN0cnVjdHVyZUxh
YmVsKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKKyAgICByZXBhdGNoQnVmZmVyLnJl
cGF0Y2goc3RydWN0dXJlTGFiZWwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRh
Q2FsbFRvTG9hZE9yU3RvcmUpLCAwKTsKICNlbHNlCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>173757</attachid>
            <date>2012-11-12 16:34:40 -0800</date>
            <delta_ts>2012-11-12 16:38:51 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>jumprep.patch</filename>
            <type>text/plain</type>
            <size>18025</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTM0MzI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUwIEBA
CisyMDEyLTExLTEyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
UGF0Y2hpbmcgb2YganVtcHMgdG8gc3R1YnMgc2hvdWxkIHVzZSBqdW1wIHJlcGxhY2VtZW50IHJh
dGhlciB0aGFuIGJyYW5jaCBkZXN0aW5hdGlvbiBvdmVyd3JpdGUKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEwMTkwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgc2F2ZXMgYSBmZXcgaW5zdHJ1Y3Rp
b25zIGluIGlubGluZSBjYXNlcywgb24gdGhvc2UgYXJjaGl0ZWN0dXJlcyB3aGVyZSBpdCBpcwor
ICAgICAgICBlYXN5IHRvIGZpZ3VyZSBvdXQgd2hlcmUgdG8gcHV0IHRoZSBqdW1wIHJlcGxhY2Vt
ZW50LiBTdWItMSUgc3BlZWQtdXAgYWNyb3NzIHRoZQorICAgICAgICBib2FyZC4KKworICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTXY3Lmg6CisgICAgICAgIChNYWNyb0Fzc2Vt
YmxlckFSTXY3KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6Y2FuSnVtcFJl
cGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTXY3OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk12Nzo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2Vt
Ymxlclg4Ni5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6Y2FuSnVtcFJlcGxh
Y2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2gpOgorICAgICAgICAoTWFjcm9Bc3NlbWJsZXJY
ODYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlclg4Njo6c3RhcnRPZlBhdGNoYWJsZUJy
YW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyWDg2OjpyZXZl
cnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAg
ICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0Lmg6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjpjYW5KdW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRj
aCk6CisgICAgICAgIChNYWNyb0Fzc2VtYmxlclg4Nl82NCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyWDg2XzY0OjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJYODZfNjQ6OnJldmVydEp1bXBSZXBsYWNlbWVudFRv
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKiBhc3NlbWJsZXIvUmVwYXRj
aEJ1ZmZlci5oOgorICAgICAgICAoSlNDOjpSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxl
QnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAgKFJlcGF0Y2hCdWZmZXIpOgorICAgICAgICAo
SlNDOjpSZXBhdGNoQnVmZmVyOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoSlNDOjpSZXBh
dGNoQnVmZmVyOjpyZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldpdGhQ
YXRjaCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oOgorICAgICAgICAoWDg2
QXNzZW1ibGVyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fbW92
cV9pNjRyKToKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpyZXZlcnRKdW1wVG9fY21wbF9p
bV9mb3JjZTMyKToKKyAgICAgICAgKFg4Nkluc3RydWN0aW9uRm9ybWF0dGVyKToKKyAgICAgICAg
KiBieXRlY29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oOgorICAgICAgICAqIGRmZy9ERkdSZXBhdGNo
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZXBsYWNlV2l0aEp1bXApOgorICAgICAgICAoREZH
KToKKyAgICAgICAgKEpTQzo6REZHOjp0cnlDYWNoZUdldEJ5SUQpOgorICAgICAgICAoSlNDOjpE
Rkc6OnRyeUJ1aWxkR2V0QnlJRExpc3QpOgorICAgICAgICAoSlNDOjpERkc6OnRyeUJ1aWxkR2V0
QnlJRFByb3RvTGlzdCk6CisgICAgICAgIChKU0M6OkRGRzo6dHJ5Q2FjaGVQdXRCeUlEKToKKyAg
ICAgICAgKEpTQzo6REZHOjpkZmdSZXNldEdldEJ5SUQpOgorICAgICAgICAoSlNDOjpERkc6OmRm
Z1Jlc2V0UHV0QnlJRCk6CisKIDIwMTItMTEtMTEgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxl
LmNvbT4KIAogICAgICAgICBERkcgQXJpdGhNdWwgb3ZlcmZsb3cgY2hlY2sgZWxpbWluYXRpb24g
aXMgdG9vIGFnZ3Jlc3NpdmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk12Ny5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk12Ny5oCShyZXZpc2lvbiAxMzQxNjgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNdjcuaAkod29y
a2luZyBjb3B5KQpAQCAtMTc1OCw2ICsxNzU4LDE4IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBGdW5jdGlvblB0cihyZWludGVycHJldF9jYXN0PHZvaWQoKikoKT4oQVJNdjdBc3Nl
bWJsZXI6OnJlYWRDYWxsVGFyZ2V0KGNhbGwuZGF0YUxvY2F0aW9uKCkpKSk7CiAgICAgfQorICAg
IAorICAgIHN0YXRpYyBib29sIGNhbkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICAKKyAgICBzdGF0aWMgQ29kZUxvY2F0aW9uTGFi
ZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChDb2RlTG9jYXRpb25EYXRhTGFi
ZWxQdHIgbGFiZWwpCisgICAgeworICAgICAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsK
KyAgICB9CisgICAgCisgICAgc3RhdGljIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRj
aGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFy
dCwgQWRkcmVzcywgdm9pZCogaW5pdGlhbFZhbHVlKQorICAgIHsKKyAgICAgICAgVU5SRUFDSEFC
TEVfRk9SX1BMQVRGT1JNKCk7CisgICAgfQogCiBwcm90ZWN0ZWQ6CiAgICAgQUxXQVlTX0lOTElO
RSBKdW1wIGp1bXAoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlclg4Ni5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTWFjcm9Bc3NlbWJsZXJYODYuaAkocmV2aXNpb24gMTM0MTY4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Ni5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNTMsNiArMjUzLDI1IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIEZ1bmN0aW9uUHRy
KHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90PihjYWxs
LmRhdGFMb2NhdGlvbigpKSArIG9mZnNldCkpOwogICAgIH0KIAorICAgIHN0YXRpYyBib29sIGNh
bkp1bXBSZXBsYWNlUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKCkgeyByZXR1cm4gdHJ1ZTsg
fQorICAgIAorICAgIHN0YXRpYyBDb2RlTG9jYXRpb25MYWJlbCBzdGFydE9mUGF0Y2hhYmxlQnJh
bmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkRhdGFMYWJlbFB0ciBsYWJlbCkKKyAgICB7Cisg
ICAgICAgIGNvbnN0IGludCBvcGNvZGVCeXRlcyA9IDE7CisgICAgICAgIGNvbnN0IGludCBtb2RS
TUJ5dGVzID0gMTsKKyAgICAgICAgY29uc3QgaW50IG9mZnNldEJ5dGVzID0gMDsKKyAgICAgICAg
Y29uc3QgaW50IGltbWVkaWF0ZUJ5dGVzID0gNDsKKyAgICAgICAgY29uc3QgaW50IHRvdGFsQnl0
ZXMgPSBvcGNvZGVCeXRlcyArIG1vZFJNQnl0ZXMgKyBvZmZzZXRCeXRlcyArIGltbWVkaWF0ZUJ5
dGVzOworICAgICAgICBBU1NFUlQodG90YWxCeXRlcyA+PSBtYXhKdW1wUmVwbGFjZW1lbnRTaXpl
KCkpOworICAgICAgICByZXR1cm4gbGFiZWwubGFiZWxBdE9mZnNldCgtdG90YWxCeXRlcyk7Cisg
ICAgfQorICAgIAorICAgIHN0YXRpYyB2b2lkIHJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hh
YmxlQnJhbmNoUHRyV2l0aFBhdGNoKENvZGVMb2NhdGlvbkxhYmVsIGluc3RydWN0aW9uU3RhcnQs
IEFkZHJlc3MgYWRkcmVzcywgdm9pZCogaW5pdGlhbFZhbHVlKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKCFhZGRyZXNzLm9mZnNldCk7CisgICAgICAgIFg4NkFzc2VtYmxlcjo6cmV2ZXJ0SnVtcFRv
X2NtcGxfaW1fZm9yY2UzMihpbnN0cnVjdGlvblN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCksIHJl
aW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluaXRpYWxWYWx1ZSksIDAsIGFkZHJlc3MuYmFzZSk7
CisgICAgfQorCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBMaW5rQnVmZmVyOwogICAgIGZy
aWVuZCBjbGFzcyBSZXBhdGNoQnVmZmVyOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJYODZfNjQuaAkocmV2aXNpb24gMTM0
MTY4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4
Nl82NC5oCSh3b3JraW5nIGNvcHkpCkBAIC01ODUsNiArNTg1LDIzIEBAIHB1YmxpYzoKIAogICAg
IHN0YXRpYyBSZWdpc3RlcklEIHNjcmF0Y2hSZWdpc3RlckZvckJsaW5kaW5nKCkgeyByZXR1cm4g
c2NyYXRjaFJlZ2lzdGVyOyB9CiAKKyAgICBzdGF0aWMgYm9vbCBjYW5KdW1wUmVwbGFjZVBhdGNo
YWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAKKyAgICBzdGF0
aWMgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaChD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgbGFiZWwpCisgICAgeworICAgICAgICBjb25zdCBpbnQg
cmV4Qnl0ZXMgPSAxOworICAgICAgICBjb25zdCBpbnQgb3Bjb2RlQnl0ZXMgPSAxOworICAgICAg
ICBjb25zdCBpbnQgaW1tZWRpYXRlQnl0ZXMgPSA4OworICAgICAgICBjb25zdCBpbnQgdG90YWxC
eXRlcyA9IHJleEJ5dGVzICsgb3Bjb2RlQnl0ZXMgKyBpbW1lZGlhdGVCeXRlczsKKyAgICAgICAg
QVNTRVJUKHRvdGFsQnl0ZXMgPj0gbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKKyAgICAgICAg
cmV0dXJuIGxhYmVsLmxhYmVsQXRPZmZzZXQoLXRvdGFsQnl0ZXMpOworICAgIH0KKyAgICAKKyAg
ICBzdGF0aWMgdm9pZCByZXZlcnRKdW1wUmVwbGFjZW1lbnRUb1BhdGNoYWJsZUJyYW5jaFB0cldp
dGhQYXRjaChDb2RlTG9jYXRpb25MYWJlbCBpbnN0cnVjdGlvblN0YXJ0LCBBZGRyZXNzLCB2b2lk
KiBpbml0aWFsVmFsdWUpCisgICAgeworICAgICAgICBYODZBc3NlbWJsZXI6OnJldmVydEp1bXBU
b19tb3ZxX2k2NHIoaW5zdHJ1Y3Rpb25TdGFydC5leGVjdXRhYmxlQWRkcmVzcygpLCByZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihpbml0aWFsVmFsdWUpLCBzY3JhdGNoUmVnaXN0ZXIpOworICAg
IH0KKwogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKICAgICBmcmllbmQg
Y2xhc3MgUmVwYXRjaEJ1ZmZlcjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvUmVwYXRjaEJ1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvUmVwYXRjaEJ1ZmZlci5oCShyZXZpc2lvbiAxMzQxNjgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL1JlcGF0Y2hCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
MTQxLDYgKzE0MSwyNCBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXBsYWNlV2l0aEFkZHJlc3ND
b21wdXRhdGlvbihsYWJlbCk7CiAgICAgfQogCisgICAgc3RhdGljIENvZGVMb2NhdGlvbkxhYmVs
IHN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uRGF0YUxhYmVs
UHRyIGxhYmVsKQorICAgIHsKKyAgICAgICAgcmV0dXJuIE1hY3JvQXNzZW1ibGVyOjpzdGFydE9m
UGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBhdGNoKGxhYmVsKTsKKyAgICB9CisgICAgCisgICAgdm9p
ZCByZXBsYWNlV2l0aEp1bXAoQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25TdGFydCwgQ29k
ZUxvY2F0aW9uTGFiZWwgZGVzdGluYXRpb24pCisgICAgeworICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwbGFjZVdpdGhKdW1wKGluc3RydWN0aW9uU3RhcnQsIGRlc3RpbmF0aW9uKTsKKyAgICB9
CisgICAgCisgICAgLy8gVGhpcyBpcyBhICpiaXQqIG9mIGEgc2lsbHkgQVBJLCBzaW5jZSB3ZSBj
dXJyZW50bHkgYWx3YXlzIGFsc28gcmVwYXRjaCB0aGUKKyAgICAvLyBpbW1lZGlhdGUgYWZ0ZXIg
Y2FsbGluZyB0aGlzLiBCdXQgSSdtIGZpbmUgd2l0aCB0aGF0LCBzaW5jZSB0aGlzIGp1c3QgZmVl
bHMKKyAgICAvLyBsZXNzIHl1Y2t5LgorICAgIHZvaWQgcmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9Q
YXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goQ29kZUxvY2F0aW9uTGFiZWwgaW5zdHJ1Y3Rpb25T
dGFydCwgTWFjcm9Bc3NlbWJsZXI6OkFkZHJlc3MgYWRkcmVzcywgdm9pZCogdmFsdWUpCisgICAg
eworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFi
bGVCcmFuY2hQdHJXaXRoUGF0Y2goaW5zdHJ1Y3Rpb25TdGFydCwgYWRkcmVzcywgdmFsdWUpOwor
ICAgIH0KKwogcHJpdmF0ZToKICAgICB2b2lkKiBtX3N0YXJ0OwogICAgIHNpemVfdCBtX3NpemU7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgJKHJldmlzaW9uIDEzNDE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4ODMsNiArMTg4Myw0NCBAQCBwdWJs
aWM6CiAgICAgICAgIHJldHVybiA1OwogICAgIH0KICAgICAKKyNpZiBDUFUoWDg2XzY0KQorICAg
IHN0YXRpYyB2b2lkIHJldmVydEp1bXBUb19tb3ZxX2k2NHIodm9pZCogaW5zdHJ1Y3Rpb25TdGFy
dCwgaW50NjRfdCBpbW0sIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgY29uc3QgaW50
IHJleEJ5dGVzID0gMTsKKyAgICAgICAgY29uc3QgaW50IG9wY29kZUJ5dGVzID0gMTsKKyAgICAg
ICAgQVNTRVJUKHJleEJ5dGVzICsgb3Bjb2RlQnl0ZXMgPD0gbWF4SnVtcFJlcGxhY2VtZW50U2l6
ZSgpKTsKKyAgICAgICAgdWludDhfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4o
aW5zdHJ1Y3Rpb25TdGFydCk7CisgICAgICAgIHB0clswXSA9IFBSRV9SRVggfCAoMSA8PCAzKSB8
IChkc3QgPj4gMyk7CisgICAgICAgIHB0clsxXSA9IE9QX01PVl9FQVhJdiB8IChkc3QgJiA3KTsK
KyAgICAgICAgCisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGFzV29yZDsK
KyAgICAgICAgICAgIHVpbnQ4X3QgYXNCeXRlc1s4XTsKKyAgICAgICAgfSB1OworICAgICAgICB1
LmFzV29yZCA9IGltbTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gcmV4Qnl0ZXMgKyBvcGNv
ZGVCeXRlczsgaSA8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihtYXhKdW1wUmVwbGFjZW1lbnRTaXpl
KCkpOyArK2kpCisgICAgICAgICAgICBwdHJbaV0gPSB1LmFzQnl0ZXNbaSAtIHJleEJ5dGVzIC0g
b3Bjb2RlQnl0ZXNdOworICAgIH0KKyNlbmRpZgorICAgIAorICAgIHN0YXRpYyB2b2lkIHJldmVy
dEp1bXBUb19jbXBsX2ltX2ZvcmNlMzIodm9pZCogaW5zdHJ1Y3Rpb25TdGFydCwgaW50MzJfdCBp
bW0sIGludCBvZmZzZXQsIFJlZ2lzdGVySUQgZHN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUX1VO
VVNFRChvZmZzZXQsICFvZmZzZXQpOworICAgICAgICBjb25zdCBpbnQgb3Bjb2RlQnl0ZXMgPSAx
OworICAgICAgICBjb25zdCBpbnQgbW9kUk1CeXRlcyA9IDE7CisgICAgICAgIEFTU0VSVChvcGNv
ZGVCeXRlcyArIG1vZFJNQnl0ZXMgPD0gbWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKTsKKyAgICAg
ICAgdWludDhfdCogcHRyID0gcmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4oaW5zdHJ1Y3Rpb25T
dGFydCk7CisgICAgICAgIHB0clswXSA9IE9QX0dST1VQMV9Fdkl6OworICAgICAgICBwdHJbMV0g
PSAoWDg2SW5zdHJ1Y3Rpb25Gb3JtYXR0ZXI6Ok1vZFJtTWVtb3J5Tm9EaXNwIDw8IDYpIHwgKEdS
T1VQMV9PUF9DTVAgPDwgMykgfCBkc3Q7CisgICAgICAgIHVuaW9uIHsKKyAgICAgICAgICAgIHVp
bnQzMl90IGFzV29yZDsKKyAgICAgICAgICAgIHVpbnQ4X3QgYXNCeXRlc1s0XTsKKyAgICAgICAg
fSB1OworICAgICAgICB1LmFzV29yZCA9IGltbTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
b3Bjb2RlQnl0ZXMgKyBtb2RSTUJ5dGVzOyBpIDwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG1heEp1
bXBSZXBsYWNlbWVudFNpemUoKSk7ICsraSkKKyAgICAgICAgICAgIHB0cltpXSA9IHUuYXNCeXRl
c1tpIC0gb3Bjb2RlQnl0ZXMgLSBtb2RSTUJ5dGVzXTsKKyAgICB9CisgICAgCiAgICAgc3RhdGlj
IHZvaWQgcmVwbGFjZVdpdGhMb2FkKHZvaWQqIGluc3RydWN0aW9uU3RhcnQpCiAgICAgewogICAg
ICAgICB1aW50OF90KiBwdHIgPSByZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPihpbnN0cnVjdGlv
blN0YXJ0KTsKQEAgLTE5ODIsNiArMjAyMCwxMyBAQCBwcml2YXRlOgogCiAgICAgcHVibGljOgog
CisgICAgICAgIGVudW0gTW9kUm1Nb2RlIHsKKyAgICAgICAgICAgIE1vZFJtTWVtb3J5Tm9EaXNw
LAorICAgICAgICAgICAgTW9kUm1NZW1vcnlEaXNwOCwKKyAgICAgICAgICAgIE1vZFJtTWVtb3J5
RGlzcDMyLAorICAgICAgICAgICAgTW9kUm1SZWdpc3RlciwKKyAgICAgICAgfTsKKwogICAgICAg
ICAvLyBMZWdhY3kgcHJlZml4IGJ5dGVzOgogICAgICAgICAvLwogICAgICAgICAvLyBUaGVzZSBh
cmUgZW1taXR0ZWQgcHJpb3IgdG8gdGhlIGluc3RydWN0aW9uLgpAQCAtMjM1MiwxMyArMjM5Nyw2
IEBAIHByaXZhdGU6CiAgICAgICAgIGlubGluZSB2b2lkIGVtaXRSZXhJZk5lZWRlZChpbnQsIGlu
dCwgaW50KSB7fQogI2VuZGlmCiAKLSAgICAgICAgZW51bSBNb2RSbU1vZGUgewotICAgICAgICAg
ICAgTW9kUm1NZW1vcnlOb0Rpc3AsCi0gICAgICAgICAgICBNb2RSbU1lbW9yeURpc3A4LAotICAg
ICAgICAgICAgTW9kUm1NZW1vcnlEaXNwMzIsCi0gICAgICAgICAgICBNb2RSbVJlZ2lzdGVyLAot
ICAgICAgICB9OwotCiAgICAgICAgIHZvaWQgcHV0TW9kUm0oTW9kUm1Nb2RlIG1vZGUsIGludCBy
ZWcsIFJlZ2lzdGVySUQgcm0pCiAgICAgICAgIHsKICAgICAgICAgICAgIG1fYnVmZmVyLnB1dEJ5
dGVVbmNoZWNrZWQoKG1vZGUgPDwgNikgfCAoKHJlZyAmIDcpIDw8IDMpIHwgKHJtICYgNykpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1N0cnVjdHVyZVN0
dWJJbmZvLmgJKHJldmlzaW9uIDEzNDE2OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9TdHJ1Y3R1cmVTdHViSW5mby5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAog
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1JlcGF0Y2guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHJldmlzaW9uIDEzNDE2OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUmVwYXRjaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTExNCw2
ICsxMTQsMjMgQEAgc3RhdGljIHZvaWQgYWRkU3RydWN0dXJlVHJhbnNpdGlvbkNoZWNrKAogICAg
ICAgICBmYWlsdXJlQ2FzZXMsIHNjcmF0Y2hHUFIpOwogfQogCitzdGF0aWMgdm9pZCByZXBsYWNl
V2l0aEp1bXAoUmVwYXRjaEJ1ZmZlciYgcmVwYXRjaEJ1ZmZlciwgU3RydWN0dXJlU3R1YkluZm8m
IHN0dWJJbmZvLCBjb25zdCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgdGFyZ2V0KQoreworICAgIGlm
IChNYWNyb0Fzc2VtYmxlcjo6Y2FuSnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goKSkgeworICAgICAgICByZXBhdGNoQnVmZmVyLnJlcGxhY2VXaXRoSnVtcCgKKyAgICAgICAg
ICAgIFJlcGF0Y2hCdWZmZXI6OnN0YXJ0T2ZQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goCisg
ICAgICAgICAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0
T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICAtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNoZWNrSW1tVG9DYWxsKSksCisgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCh0
YXJnZXQpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICByZXBhdGNoQnVmZmVy
LnJlbGluaygKKyAgICAgICAgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNl
dCgKKyAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNr
KSwKKyAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwodGFyZ2V0KSk7Cit9CisKIHN0YXRpYyB2b2lk
IGVtaXRSZXN0b3JlU2NyYXRjaChNYWNyb0Fzc2VtYmxlciYgc3R1YkppdCwgYm9vbCBuZWVkVG9S
ZXN0b3JlU2NyYXRjaCwgR1BSUmVnIHNjcmF0Y2hHUFIsIE1hY3JvQXNzZW1ibGVyOjpKdW1wJiBz
dWNjZXNzLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcCYgZmFpbCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBM
aXN0IGZhaWx1cmVDYXNlcykKIHsKICAgICBpZiAobmVlZFRvUmVzdG9yZVNjcmF0Y2gpIHsKQEAg
LTI4NCw3ICszMDEsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBl
CiAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb0RvbmUpLmV4
ZWN1dGFibGVBZGRyZXNzKCkpKTsKICAgICAgICAgCiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVw
YXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHVi
SW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YkluZm8uc3R1YlJv
dXRpbmUtPmNvZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgcmVwbGFjZVdpdGhKdW1wKHJlcGF0Y2hC
dWZmZXIsIHN0dWJJbmZvLCBzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSk7CiAg
ICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbiwg
b3BlcmF0aW9uR2V0QnlJZCk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTMz
NCw3ICszNTEsNyBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZUdldEJ5SUQoRXhlY1N0YXRlKiBlCiAg
ICAgZ2VuZXJhdGVQcm90b0NoYWluQWNjZXNzU3R1YihleGVjLCBzdHViSW5mbywgcHJvdG90eXBl
Q2hhaW4sIGNvdW50LCBvZmZzZXQsIHN0cnVjdHVyZSwgc3R1YkluZm8uY2FsbFJldHVybkxvY2F0
aW9uLmxhYmVsQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvRG9uZSksIHN0
dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KHN0dWJJbmZvLnBhdGNoLmRm
Zy5kZWx0YUNhbGxUb1Nsb3dDYXNlKSwgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgIAogICAg
IFJlcGF0Y2hCdWZmZXIgcmVwYXRjaEJ1ZmZlcihjb2RlQmxvY2spOwotICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5qdW1wQXRPZmZzZXQoc3R1Yklu
Zm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLCBDb2RlTG9jYXRpb25MYWJlbChz
dHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUoKSkpOworICAgIHJlcGxhY2VXaXRoSnVt
cChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YkluZm8uc3R1YlJvdXRpbmUtPmNvZGUoKS5j
b2RlKCkpOwogICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbiwgb3BlcmF0aW9uR2V0QnlJZFByb3RvQnVpbGRMaXN0KTsKICAgICAKICAgICBzdHViSW5m
by5pbml0R2V0QnlJZENoYWluKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpLCBzdHJ1Y3R1cmUsIHByb3RvdHlwZUNoYWluLCBjb3VudCwgdHJ1ZSk7CkBAIC01MTgsOSAr
NTM1LDExIEBAIHN0YXRpYyBib29sIHRyeUJ1aWxkR2V0QnlJRExpc3QoRXhlY1N0YXQKICAgICAg
ICAgCiAgICAgICAgIHBvbHltb3JwaGljU3RydWN0dXJlTGlzdC0+bGlzdFtsaXN0SW5kZXhdLnNl
dCgqZ2xvYmFsRGF0YSwgY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSwgc3R1YlJvdXRpbmUs
IHN0cnVjdHVyZSwgaXNEaXJlY3QpOwogICAgICAgICAKLSAgICAgICAgQ29kZUxvY2F0aW9uSnVt
cCBqdW1wTG9jYXRpb24gPSBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0
KHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKTsKICAgICAgICAgUmVw
YXRjaEJ1ZmZlciByZXBhdGNoQnVmZmVyKGNvZGVCbG9jayk7Ci0gICAgICAgIHJlcGF0Y2hCdWZm
ZXIucmVsaW5rKGp1bXBMb2NhdGlvbiwgQ29kZUxvY2F0aW9uTGFiZWwoc3R1YlJvdXRpbmUtPmNv
ZGUoKS5jb2RlKCkpKTsKKyAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgICAg
ICBzdHViSW5mby5jYWxsUmV0dXJuTG9jYXRpb24uanVtcEF0T2Zmc2V0KAorICAgICAgICAgICAg
ICAgIHN0dWJJbmZvLnBhdGNoLmRmZy5kZWx0YUNhbGxUb1N0cnVjdENoZWNrKSwKKyAgICAgICAg
ICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7CiAgICAg
ICAgIAogICAgICAgICBpZiAobGlzdEluZGV4IDwgKFBPTFlNT1JQSElDX0xJU1RfQ0FDSEVfU0la
RSAtIDEpKQogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC01ODQsOSArNjAzLDggQEAgc3Rh
dGljIGJvb2wgdHJ5QnVpbGRHZXRCeUlEUHJvdG9MaXN0KEV4ZQogICAgICAgICAKICAgICAgICAg
cG9seW1vcnBoaWNTdHJ1Y3R1cmVMaXN0LT5saXN0W2xpc3RJbmRleF0uc2V0KCpnbG9iYWxEYXRh
LCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpLCBzdHViUm91dGluZSwgc3RydWN0dXJlLCB0
cnVlKTsKICAgICAgICAgCi0gICAgICAgIENvZGVMb2NhdGlvbkp1bXAganVtcExvY2F0aW9uID0g
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldChzdHViSW5mby5wYXRjaC5k
ZmcuZGVsdGFDYWxsVG9TdHJ1Y3RDaGVjayk7CiAgICAgICAgIFJlcGF0Y2hCdWZmZXIgcmVwYXRj
aEJ1ZmZlcihjb2RlQmxvY2spOwotICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhqdW1wTG9j
YXRpb24sIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJSb3V0aW5lLT5jb2RlKCkuY29kZSgpKSk7Cisg
ICAgICAgIHJlcGxhY2VXaXRoSnVtcChyZXBhdGNoQnVmZmVyLCBzdHViSW5mbywgc3R1YlJvdXRp
bmUtPmNvZGUoKS5jb2RlKCkpOwogICAgICAgICAKICAgICAgICAgaWYgKGxpc3RJbmRleCA8IChQ
T0xZTU9SUEhJQ19MSVNUX0NBQ0hFX1NJWkUgLSAxKSkKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwpAQCAtOTc2LDcgKzk5NCwxMCBAQCBzdGF0aWMgYm9vbCB0cnlDYWNoZVB1dEJ5SUQoRXhlY1N0
YXRlKiBlCiAgICAgICAgICAgICAgICAgc3R1YkluZm8uc3R1YlJvdXRpbmUpOwogICAgICAgICAg
ICAgCiAgICAgICAgICAgICBSZXBhdGNoQnVmZmVyIHJlcGF0Y2hCdWZmZXIoY29kZUJsb2NrKTsK
LSAgICAgICAgICAgIHJlcGF0Y2hCdWZmZXIucmVsaW5rKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5qdW1wQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hl
Y2spLCBDb2RlTG9jYXRpb25MYWJlbChzdHViSW5mby5zdHViUm91dGluZS0+Y29kZSgpLmNvZGUo
KSkpOworICAgICAgICAgICAgcmVwYXRjaEJ1ZmZlci5yZWxpbmsoCisgICAgICAgICAgICAgICAg
c3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmp1bXBBdE9mZnNldCgKKyAgICAgICAgICAgICAg
ICAgICAgc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvU3RydWN0Q2hlY2spLAorICAgICAg
ICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKHN0dWJJbmZvLnN0dWJSb3V0aW5lLT5jb2RlKCku
Y29kZSgpKSk7CiAgICAgICAgICAgICByZXBhdGNoQnVmZmVyLnJlbGluayhzdHViSW5mby5jYWxs
UmV0dXJuTG9jYXRpb24sIGFwcHJvcHJpYXRlTGlzdEJ1aWxkaW5nUHV0QnlJZEZ1bmN0aW9uKHNs
b3QsIHB1dEtpbmQpKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3R1YkluZm8uaW5pdFB1
dEJ5SWRUcmFuc2l0aW9uKCpnbG9iYWxEYXRhLCBjb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
LCBvbGRTdHJ1Y3R1cmUsIHN0cnVjdHVyZSwgcHJvdG90eXBlQ2hhaW4sIHB1dEtpbmQgPT0gRGly
ZWN0KTsKQEAgLTExMTgsNyArMTEzOSwxNiBAQCB2b2lkIGRmZ0xpbmtGb3IoRXhlY1N0YXRlKiBl
eGVjLCBDYWxsTGluCiB2b2lkIGRmZ1Jlc2V0R2V0QnlJRChSZXBhdGNoQnVmZmVyJiByZXBhdGNo
QnVmZmVyLCBTdHJ1Y3R1cmVTdHViSW5mbyYgc3R1YkluZm8pCiB7CiAgICAgcmVwYXRjaEJ1ZmZl
ci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcGVyYXRpb25HZXRCeUlkT3B0
aW1pemUpOwotICAgIHJlcGF0Y2hCdWZmZXIucmVwYXRjaChzdHViSW5mby5jYWxsUmV0dXJuTG9j
YXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRjaC5kZmcu
ZGVsdGFDaGVja0ltbVRvQ2FsbCksIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CisgICAg
Q29kZUxvY2F0aW9uRGF0YUxhYmVsUHRyIHN0cnVjdHVyZUxhYmVsID0gc3R1YkluZm8uY2FsbFJl
dHVybkxvY2F0aW9uLmRhdGFMYWJlbFB0ckF0T2Zmc2V0KC0oaW50cHRyX3Qpc3R1YkluZm8ucGF0
Y2guZGZnLmRlbHRhQ2hlY2tJbW1Ub0NhbGwpOworICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6Y2Fu
SnVtcFJlcGxhY2VQYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0Y2goKSkgeworICAgICAgICByZXBh
dGNoQnVmZmVyLnJldmVydEp1bXBSZXBsYWNlbWVudFRvUGF0Y2hhYmxlQnJhbmNoUHRyV2l0aFBh
dGNoKAorICAgICAgICAgICAgUmVwYXRjaEJ1ZmZlcjo6c3RhcnRPZlBhdGNoYWJsZUJyYW5jaFB0
cldpdGhQYXRjaChzdHJ1Y3R1cmVMYWJlbCksCisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6
QWRkcmVzcygKKyAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxNYWNyb0Fzc2VtYmxlcjo6UmVn
aXN0ZXJJRD4oc3R1YkluZm8ucGF0Y2guZGZnLmJhc2VHUFIpLAorICAgICAgICAgICAgICAgIEpT
Q2VsbDo6c3RydWN0dXJlT2Zmc2V0KCkpLAorICAgICAgICAgICAgcmVpbnRlcnByZXRfY2FzdDx2
b2lkKj4oLTEpKTsKKyAgICB9CisgICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0cnVjdHVyZUxh
YmVsLCByZWludGVycHJldF9jYXN0PHZvaWQqPigtMSkpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5kYXRh
TGFiZWxDb21wYWN0QXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9y
U3RvcmUpLCAwKTsKICNlbHNlCkBAIC0xMTQzLDcgKzExNzMsMTYgQEAgdm9pZCBkZmdSZXNldFB1
dEJ5SUQoUmVwYXRjaEJ1ZmZlciYgcmVwYQogICAgICAgICBvcHRpbWl6ZWRGdW5jdGlvbiA9IG9w
ZXJhdGlvblB1dEJ5SWREaXJlY3ROb25TdHJpY3RPcHRpbWl6ZTsKICAgICB9CiAgICAgcmVwYXRj
aEJ1ZmZlci5yZWxpbmsoc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLCBvcHRpbWl6ZWRGdW5j
dGlvbik7Ci0gICAgcmVwYXRjaEJ1ZmZlci5yZXBhdGNoKHN0dWJJbmZvLmNhbGxSZXR1cm5Mb2Nh
dGlvbi5kYXRhTGFiZWxQdHJBdE9mZnNldCgtKGludHB0cl90KXN0dWJJbmZvLnBhdGNoLmRmZy5k
ZWx0YUNoZWNrSW1tVG9DYWxsKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oLTEpKTsKKyAgICBD
b2RlTG9jYXRpb25EYXRhTGFiZWxQdHIgc3RydWN0dXJlTGFiZWwgPSBzdHViSW5mby5jYWxsUmV0
dXJuTG9jYXRpb24uZGF0YUxhYmVsUHRyQXRPZmZzZXQoLShpbnRwdHJfdClzdHViSW5mby5wYXRj
aC5kZmcuZGVsdGFDaGVja0ltbVRvQ2FsbCk7CisgICAgaWYgKE1hY3JvQXNzZW1ibGVyOjpjYW5K
dW1wUmVwbGFjZVBhdGNoYWJsZUJyYW5jaFB0cldpdGhQYXRjaCgpKSB7CisgICAgICAgIHJlcGF0
Y2hCdWZmZXIucmV2ZXJ0SnVtcFJlcGxhY2VtZW50VG9QYXRjaGFibGVCcmFuY2hQdHJXaXRoUGF0
Y2goCisgICAgICAgICAgICBSZXBhdGNoQnVmZmVyOjpzdGFydE9mUGF0Y2hhYmxlQnJhbmNoUHRy
V2l0aFBhdGNoKHN0cnVjdHVyZUxhYmVsKSwKKyAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpB
ZGRyZXNzKAorICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PE1hY3JvQXNzZW1ibGVyOjpSZWdp
c3RlcklEPihzdHViSW5mby5wYXRjaC5kZmcuYmFzZUdQUiksCisgICAgICAgICAgICAgICAgSlND
ZWxsOjpzdHJ1Y3R1cmVPZmZzZXQoKSksCisgICAgICAgICAgICByZWludGVycHJldF9jYXN0PHZv
aWQqPigtMSkpOworICAgIH0KKyAgICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3RydWN0dXJlTGFi
ZWwsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KC0xKSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKICAg
ICByZXBhdGNoQnVmZmVyLnJlcGF0Y2goc3R1YkluZm8uY2FsbFJldHVybkxvY2F0aW9uLmRhdGFM
YWJlbDMyQXRPZmZzZXQoc3R1YkluZm8ucGF0Y2guZGZnLmRlbHRhQ2FsbFRvTG9hZE9yU3RvcmUp
LCAwKTsKICNlbHNlCg==
</data>
<flag name="review"
          id="188559"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>