<?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>168685</bug_id>
          
          <creation_ts>2017-02-21 15:52:10 -0800</creation_ts>
          <short_desc>Implement a mega-disassembler that&apos;ll be used in the FTL</short_desc>
          <delta_ts>2017-03-01 11:16:07 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1279598</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-21 15:52:10 -0800</bug_when>
    <thetext>Here is Phil&apos;s rough sketch:
```
Say we have:

function foo(a, b) { return a + b; }

And say that it translates to this BC:

[   0] op_enter
[   1] op_add loc0, arg0, arg1
[   6] op_ret

And say that it&apos;s all predicted ints without overflows.

So here&apos;s the megadisasm:


                0x100000000  pushq %ebp
                 ... prologue
    0: JSConstant(...)
    1: JSConstant(...)
    ... more prologue
[   0] op_enter
    0: JSConstant(...)
    MovHint(...)
    ... more DFG prologue
[   1] op_add loc0, arg0, arg1
    2: GetStack(arg0)
        Int32 @42 = Load(@13, stuff)
            Move stuff(%rbp), %things
                movl stuff(%rbp), %things
    3: GetStack(arg1)
        Int32 @43 = Load(@13, otherstuff)
            Move otherstuff(%rbp), %otherthings
                movl otherstuff(%rbp), %otherthings
    4: ArithAdd(Int32: @2, Int32:@3)
        Int32 @44 = CheckAdd(@2, @3, ...)
            Patch &amp;BranchAdd32, ...
                addl ...
                jo ...
... and so on
```

This would be super cool.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282088</commentid>
    <comment_count>1</comment_count>
      <attachid>303016</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-28 17:37:40 -0800</bug_when>
    <thetext>Created attachment 303016
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282093</commentid>
    <comment_count>2</comment_count>
      <attachid>303018</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-28 17:41:25 -0800</bug_when>
    <thetext>Created attachment 303018
patch

Change a variable name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282095</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-02-28 17:44:19 -0800</bug_when>
    <thetext>Attachment 303018 did not pass style-queue:


ERROR: Source/JavaScriptCore/ChangeLog:20:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:23:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:27:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:37:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:41:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:45:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:49:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:53:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:63:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:69:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:78:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ChangeLog:84:  Line contains tab character.  [whitespace/tab] [5]
ERROR: Source/JavaScriptCore/ftl/FTLCompile.cpp:35:  Alphabetical sorting problem.  [build/include_order] [4]
ERROR: Source/JavaScriptCore/ftl/FTLCompile.cpp:190:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 14 in 5 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282139</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-02-28 20:41:45 -0800</bug_when>
    <thetext>Will fix style before landing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282304</commentid>
    <comment_count>5</comment_count>
      <attachid>303018</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2017-03-01 09:47:58 -0800</bug_when>
    <thetext>Comment on attachment 303018
patch

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

LGTM

&gt; Source/JavaScriptCore/b3/air/AirDisassembler.h:53
&gt; +    void dump(Code&amp;, PrintStream&amp;, LinkBuffer&amp;, const char*, const char*, std::function&lt;void(Inst&amp;)&gt; doToEachInst);

nit: I think it&apos;s worth const char* airPrefix, const char* asmPrefix in the args because it&apos;s not obvious from the type alone what the purpose of the args are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1282352</commentid>
    <comment_count>6</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2017-03-01 11:16:00 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/213233</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303016</attachid>
            <date>2017-02-28 17:37:40 -0800</date>
            <delta_ts>2017-02-28 17:41:25 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>16763</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzMjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBA
QAorMjAxNy0wMi0yOCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgYSBtZWdhLWRpc2Fzc2VtYmxlciB0aGF0J2xsIGJlIHVzZWQgaW4gdGhlIEZU
TAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4Njg1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBleHRlbmRzIHRoZSBwcmV2aW91cyBBaXIgZGlzYXNzZW1ibGVyIHRvIHByaW50IHRoZQor
ICAgICAgICBERkcgYW5kIEIzIG5vZGVzIGJlbG9uZ2luZyB0byBwYXJ0aWN1bGFyIEFpciBpbnN0
cnVjdGlvbnMuCisgICAgICAgIFRoZSBhbGdvcml0aG0gSSdtIHVzaW5nIHRvIGRvIHRoaXMgaXMg
bm90IHBlcmZlY3QuIEZvciBleGFtcGxlLAorICAgICAgICBpdCB3b24ndCB0cnkgdG8gcHJpbnQg
dGhlIGVudGlyZSBERkcvQjMgZ3JhcGguIEl0J2xsIGp1c3QgcHJpbnQKKyAgICAgICAgdGhlIHJl
bGF0ZWQgbm9kZXMgZm9yIHBhcnRpY3VsYXIgQWlyIGluc3RydWN0aW9ucy4gV2UgY2FuIG1ha2Ug
dGhlCisgICAgICAgIGFsZ29yaXRobSBtb3JlIHNvcGhpc3RpY2F0ZWQgYXMgd2UgZ2V0IG1vcmUg
ZXhwZXJpZW5jZSBsb29raW5nIGF0CisgICAgICAgIHRoZXNlIElSIGR1bXBzLgorCisgICAgICAg
IFRoaXMgaXMgYW4gZXhhbXBsZSBvZiB0aGUgb3V0cHV0OgorCisgICAgICAgIC4uLgorICAgICAg
ICAuLi4KKyAgICAgICAgMjAwOjwhMDotPglJbnZhbGlkYXRpb25Qb2ludChNdXN0R2VuLCBXOlNp
ZGVTdGF0ZSwgRXhpdHMsIGJjIzI4LCBleGl0OiBiYyMyNSAtLT4gX2dldEVudHJ5I0RsR3cycjo8
MHgxMDI3NmY5ODA+IGJjIzM3KQorICAgICAgICAgICBWb2lkIEA1NCA9IFBhdGNocG9pbnQoQDI5
OkNvbGRBbnksIEAyOTpDb2xkQW55LCBANTM6Q29sZEFueSwgREZHOkAyMDAsIGdlbmVyYXRvciA9
IDB4MTAxNWQ2YzE4LCBlYXJseUNsb2JiZXJlZCA9IFtdLCBsYXRlQ2xvYmJlcmVkID0gW10sIHVz
ZWRSZWdpc3RlcnMgPSBbJXIwLCAlcjE5LCAlcjIwLCAlcjIxLCAlcjIyLCAlZnBdLCByZXN1bHRD
b25zdHJhaW50ID0gV2FybUFueSwgRXhpdHNTaWRld2F5c3xXcml0ZXNQaW5uZWR8UmVhZHNQaW5u
ZWR8UmVhZHM6VG9wKQorICAgICAgICAgICAgICAgUGF0Y2ggJlBhdGNocG9pbnQyLCAlcjIwLCAl
cjIwLCAlcjAsIEA1NAorICAgICAgICAgNzY6PCA2Oi0+CUdldEJ5T2Zmc2V0KEtub3duQ2VsbDpA
NDQsIEtub3duQ2VsbDpANDQsIEpTfFVzZUFzT3RoZXIsIEFycmF5LCBpZDN7X2VsZW1lbnREYXRh
fSwgMiwgaW5mZXJyZWRUeXBlID0gT2JqZWN0LCBSOk5hbWVkUHJvcGVydGllcygzKSwgRXhpdHMs
IGJjIzM3KSAgcHJlZGljdGluZyBBcnJheQorICAgICAgICAgICBJbnQ2NCBANTcgPSBMb2FkKEAy
OSwgREZHOkA3Niwgb2Zmc2V0ID0gMzIsIENvbnRyb2xEZXBlbmRlbnR8UmVhZHM6MTAwLi4uMTAx
KQorICAgICAgICAgICAgICAgTW92ZSAzMiglcjIwKSwgJXI1LCBANTcKKyAgICAgICAgICAgICAg
ICAgICAgICAweDM4OWNjOWFjMDogICAgbGR1ciAgIHg1LCBbeDIwLCAjMzJdCisgICAgICAgIDEx
NTo8ITA6LT4JQ2hlY2tTdHJ1Y3R1cmUoQ2VsbDpANzYsIE11c3RHZW4sIFsweDEwMjdlYWUyMDpb
QXJyYXksIHt9LCBBcnJheVdpdGhDb250aWd1b3VzLCBQcm90bzoweDEwMjdlMDE0MF1dLCBSOkpT
Q2VsbF9zdHJ1Y3R1cmVJRCwgRXhpdHMsIGJjIzQ2KQorICAgICAgICAgICBJbnQzMiBANTggPSBM
b2FkKEA1NywgREZHOkAxMTUsIENvbnRyb2xEZXBlbmRlbnR8UmVhZHM6MTYuLi4xNykKKyAgICAg
ICAgICAgICAgIE1vdmUzMiAoJXI1KSwgJXIxLCBANTgKKyAgICAgICAgICAgICAgICAgICAgICAw
eDM4OWNjOWFjNDogICAgbGR1ciAgIHcxLCBbeDVdCisgICAgICAgICAgIEludDMyIEA1OSA9IENv
bnN0MzIoREZHOkAxMTUsIDkyKQorICAgICAgICAgICBJbnQzMiBANjAgPSBOb3RFcXVhbChANTgs
ICQ5MihANTkpLCBERkc6QDExNSkKKyAgICAgICAgICAgVm9pZCBANjEgPSBDaGVjayhANjA6V2Fy
bUFueSwgQDU3OkNvbGRBbnksIEAyOTpDb2xkQW55LCBAMjk6Q29sZEFueSwgQDUzOkNvbGRBbnks
IEA1NzpDb2xkQW55LCBERkc6QDExNSwgZ2VuZXJhdG9yID0gMHgxMDU3OTkxZTAsIGVhcmx5Q2xv
YmJlcmVkID0gW10sIGxhdGVDbG9iYmVyZWQgPSBbXSwgdXNlZFJlZ2lzdGVycyA9IFslcjAsICVy
NSwgJXIxOSwgJXIyMCwgJXIyMSwgJXIyMiwgJWZwXSwgRXhpdHNTaWRld2F5c3xSZWFkczpUb3Ap
CisgICAgICAgICAgICAgICBQYXRjaCAmQnJhbmNoMzIoMyxTYW1lQXNSZXApMSwgTm90RXF1YWws
ICVyMSwgJDkyLCAlcjUsICVyMjAsICVyMjAsICVyMCwgJXI1LCBANjEKKyAgICAgICAgICAgICAg
ICAgICAgICAweDM4OWNjOWFjODogICAgY21wICAgIHcxLCAjOTIKKyAgICAgICAgICAgICAgICAg
ICAgICAweDM4OWNjOWFjYzogICAgYi5uZSAgIDB4Mzg5Y2M5ZGFjCisgICAgICAgIDExNzo8IDI6
LT4JR2V0QnV0dGVyZmx5KENlbGw6QDc2LCBTdG9yYWdlfFB1cmVJbnQsIFI6SlNPYmplY3RfYnV0
dGVyZmx5LCBFeGl0cywgYmMjNDYpCisgICAgICAgICAgIEludDY0IEA2NCA9IExvYWQoQDU3LCBE
Rkc6QDExNywgb2Zmc2V0ID0gOCwgQ29udHJvbERlcGVuZGVudHxSZWFkczoyNC4uLjI1KQorICAg
ICAgICAgICAgICAgTW92ZSA4KCVyNSksICVyNCwgQDY0CisgICAgICAgICAgICAgICAgICAgICAg
MHgzODljYzlhZDA6ICAgIGxkdXIgICB4NCwgW3g1LCAjOF0KKyAgICAgICAgIDc5OjwgMjotPglH
ZXRBcnJheUxlbmd0aChLbm93bkNlbGw6QDc2LCBVbnR5cGVkOkAxMTcsIEpTfFB1cmVJbnR8VXNl
QXNJbnQsIE5vbmJvb2xpbnQzMiwgQ29udGlndW91cytPcmlnaW5hbEFycmF5K0luQm91bmRzK0Fz
SXMsIFI6QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCwgRXhpdHMsIGJjIzQ2KQorICAgICAgICAgICBJ
bnQzMiBANjcgPSBMb2FkKEA2NCwgREZHOkA3OSwgb2Zmc2V0ID0gLTgsIENvbnRyb2xEZXBlbmRl
bnR8UmVhZHM6My4uLjQpCisgICAgICAgICAgICAgICBNb3ZlMzIgLTgoJXI0KSwgJXIyLCBANjcK
KyAgICAgICAgICAgICAgICAgICAgICAweDM4OWNjOWFkNDogICAgbGR1ciAgIHcyLCBbeDQsICMt
OF0KKyAgICAgIDE5Mjo8IDE6LT4JSlNDb25zdGFudChKU3xQdXJlSW50LCBOb25ib29saW50MzIs
IEludDMyOiAtMSwgYmMjMCkKKyAgICAgICAgICAgSW50MzIgQDY4ID0gQ29uc3QzMihERkc6QDE5
MiwgLTEpCisgICAgICAgICAgICAgICBNb3ZlICQweGZmZmZmZmZmZmZmZmZmZmYsICVyMSwgJC0x
KEA2OCkKKyAgICAgICAgICAgICAgICAgICAgICAweDM4OWNjOWFkODogICAgbW92ICAgIHgxLCAj
LTEKKyAgICAgICAgIDgzOjwhMjotPglBcml0aEFkZChJbnQzMjpLaWxsOkA3OSwgSW50MzI6S2ls
bDpAMTkyLCBOdW1iZXJ8TXVzdEdlbnxQdXJlSW50fFVzZUFzSW50LCBJbnQzMiwgVW5jaGVja2Vk
LCBFeGl0cywgYmMjNTUpCisgICAgICAgICAgIEludDMyIEA2OSA9IEFkZChANjcsICQtMShANjgp
LCBERkc6QDgzKQorICAgICAgICAgICAgICAgQWRkMzIgJXIyLCAlcjEsICVyMSwgQDY5CisgICAg
ICAgICAgICAgICAgICAgICAgMHgzODljYzlhZGM6ICAgIGFkZCAgICB3MSwgdzIsIHcxCisgICAg
ICAgICA4Njo8IDM6LT4JQml0QW5kKENoZWNrOkludDMyOkA3MSwgSW50MzI6S2lsbDpAODMsIElu
dDMyfFVzZUFzT3RoZXJ8VXNlQXNJbnR8UmVhbGx5V2FudHNJbnQsIEludDMyLCBFeGl0cywgYmMj
NjApCisgICAgICAgICAgIEludDMyIEA3MCA9IEJlbG93KEA1MywgJC0yODE0NzQ5NzY3MTA2NTYo
QDE1KSwgREZHOkA4NikKKyAgICAgICAgICAgVm9pZCBANzEgPSBDaGVjayhANzA6V2FybUFueSwg
QDUzOkNvbGRBbnksIEAyOTpDb2xkQW55LCBAMjk6Q29sZEFueSwgQDUzOkNvbGRBbnksIEA2OTpD
b2xkQW55LCBERkc6QDg2LCBnZW5lcmF0b3IgPSAweDEwNTc5OTM3MCwgZWFybHlDbG9iYmVyZWQg
PSBbXSwgbGF0ZUNsb2JiZXJlZCA9IFtdLCB1c2VkUmVnaXN0ZXJzID0gWyVyMCwgJXIxLCAlcjIs
ICVyNCwgJXI1LCAlcjE5LCAlcjIwLCAlcjIxLCAlcjIyLCAlZnBdLCBFeGl0c1NpZGV3YXlzfFJl
YWRzOlRvcCkKKyAgICAgICAgICAgICAgIFBhdGNoICZCcmFuY2g2NCgzLFNhbWVBc1JlcCkwLCBC
ZWxvdywgJXIwLCAlcjIyLCAlcjAsICVyMjAsICVyMjAsICVyMCwgJXIxLCBANzEKKyAgICAgICAg
ICAgICAgICAgICAgICAweDM4OWNjOWFlMDogICAgY21wICAgIHgwLCB4MjIKKyAgICAgICAgICAg
ICAgICAgICAgICAweDM4OWNjOWFlNDogICAgYi5sbyAgIDB4Mzg5Y2M5ZGMwCisgICAgICAgICAg
IEludDMyIEA3MiA9IFRydW5jKEA1MywgREZHOkA4NikKKyAgICAgICAgICAgSW50MzIgQDczID0g
Qml0QW5kKEA2OSwgQDcyLCBERkc6QDg2KQorICAgICAgICAgICAgICAgQW5kMzIgJXIxLCAlcjAs
ICVyMSwgQDczCisgICAgICAgICAgICAgICAgICAgICAgMHgzODljYzlhZTg6ICAgIGFuZCAgICB3
MSwgdzEsIHcwCisgICAgICAgICAgIDE2OjwhMDotPglQdXRTdGFjayhLbm93bkludDMyOkA3MSwg
TXVzdEdlbiwgbG9jMjcsIG1hY2hpbmU6bG9jMywgRmx1c2hlZEludDMyLCBXOlN0YWNrKC0yOCks
IGJjIzE5KQorICAgICAgICAgICBJbnQzMiBANzIgPSBUcnVuYyhANTMsIERGRzpAODYpCisgICAg
ICAgICAgIEludDY0IEAxMSA9IFNsb3RCYXNlKHN0YWNrMCkKKyAgICAgICAgICAgVm9pZCBANzYg
PSBTdG9yZShANzIsIEAxMSwgREZHOkAxNiwgb2Zmc2V0ID0gMzIsIENvbnRyb2xEZXBlbmRlbnR8
V3JpdGVzOjk0Li4uOTUpCisgICAgICAgICAgICAgICBNb3ZlMzIgJXIwLCAtNjQoJWZwKSwgQDc2
CisgICAgICAgICAgICAgICAgICAgICAgMHgzODljYzlhZWM6ICAgIHN0dXIgICB3MCwgW2ZwLCAj
LTY0XQorICAgICAgICAgICAxMjo8ITA6LT4JUHV0U3RhY2soVW50eXBlZDpAODYsIE11c3RHZW4s
IGxvYzI4LCBtYWNoaW5lOmxvYzQsIEZsdXNoZWRKU1ZhbHVlLCBXOlN0YWNrKC0yOSksIGJjIzE5
KQorICAgICAgICAgICBJbnQ2NCBANzcgPSBaRXh0MzIoQDczLCBERkc6QDEyKQorICAgICAgICAg
ICBJbnQ2NCBANzggPSBBZGQoQDc3LCAkLTI4MTQ3NDk3NjcxMDY1NihAMTUpLCBERkc6QDEyKQor
ICAgICAgICAgICAgICAgQWRkNjQgJXIxLCAlcjIyLCAlcjMsIEA3OAorICAgICAgICAgICAgICAg
ICAgICAgIDB4Mzg5Y2M5YWYwOiAgICBhZGQgICAgeDMsIHgxLCB4MjIKKyAgICAgICAgICAgSW50
NjQgQDExID0gU2xvdEJhc2Uoc3RhY2swKQorICAgICAgICAgICBWb2lkIEA4MSA9IFN0b3JlKEA3
OCwgQDExLCBERkc6QDEyLCBvZmZzZXQgPSAyNCwgQ29udHJvbERlcGVuZGVudHxXcml0ZXM6OTUu
Li45NikKKyAgICAgICAgICAgICAgIE1vdmUgJXIzLCAtNzIoJWZwKSwgQDgxCisgICAgICAgICAg
ICAgICAgICAgICAgMHgzODljYzlhZjQ6ICAgIHN0dXIgICB4MywgW2ZwLCAjLTcyXQorICAgICAg
ICAgICAxMDo8ITA6LT4JUHV0U3RhY2soS25vd25JbnQzMjpANDYsIE11c3RHZW4sIGxvYzI5LCBt
YWNoaW5lOmxvYzUsIEZsdXNoZWRJbnQzMiwgVzpTdGFjaygtMzApLCBiYyMxOSkKKyAgICAgICAg
ICAgSW50MzIgQDgyID0gVHJ1bmMoQDI0LCBERkc6QDEwKQorICAgICAgICAgICBJbnQ2NCBAMTEg
PSBTbG90QmFzZShzdGFjazApCisgICAgICAgICAgIFZvaWQgQDg1ID0gU3RvcmUoQDgyLCBAMTEs
IERGRzpAMTAsIG9mZnNldCA9IDE2LCBDb250cm9sRGVwZW5kZW50fFdyaXRlczo5Ni4uLjk3KQor
ICAgICAgICAgICAgICAgTW92ZTMyICVyMjEsIC04MCglZnApLCBAODUKKyAgICAgICAgICAgICAg
ICAgICAgICAweDM4OWNjOWFmODogICAgc3R1ciAgIHcyMSwgW2ZwLCAjLTgwXQorICAgICAgICAg
IDEyOTo8ITEwOi0+CUdldEJ5VmFsKEtub3duQ2VsbDpLaWxsOkA3NiwgSW50MzI6S2lsbDpAODYs
IFVudHlwZWQ6S2lsbDpAMTE3LCBKU3xNdXN0R2VufFVzZUFzT3RoZXIsIEZpbmFsT3RoZXIsIENv
bnRpZ3VvdXMrT3JpZ2luYWxBcnJheStPdXRPZkJvdW5kcytBc0lzLCBSOldvcmxkLCBXOkhlYXAs
IEV4aXRzLCBDbG9iYmVyc0V4aXQsIGJjIzE5KSAgcHJlZGljdGluZyBGaW5hbE90aGVyCisgICAg
ICAgICAgIEludDMyIEA4OSA9IEFib3ZlRXF1YWwoQDczLCBANjcsIERGRzpAMTI5KQorICAgICAg
ICAgICBWb2lkIEA5MCA9IEJyYW5jaChAODksIERGRzpAMTI5LCBUZXJtaW5hbCkKKyAgICAgICAg
ICAgICAgIEJyYW5jaDMyIEFib3ZlT3JFcXVhbCwgJXIxLCAlcjIsIEA5MAorICAgICAgICAgICAg
ICAgICAgICAgIDB4Mzg5Y2M5YWZjOiAgICBjbXAgICAgdzEsIHcyCisgICAgICAgICAgICAgICAg
ICAgICAgMHgzODljYzliMDA6ICAgIGIuaHMgICAweDM4OWNjOWJlYworICAgICAgICAuLi4KKyAg
ICAgICAgLi4uCisKKyAgICAgICAgKiBiMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6RGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIv
QWlyRGlzYXNzZW1ibGVyLmg6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpsb3dKU1ZhbHVlKToKKwogMjAxNy0wMi0yOCAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHRoZSBTaWdpbGxDcmFzaEFuYWx5emVyIGJ5
IGRlZmF1bHQgZm9yIGlPUy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckRpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIxMzE1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKICNpbmNsdWRlICJBaXJD
b2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKICNpbmNs
dWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAKQEAgLTY4LDI1
ICs2OSwyNiBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6YWRkSW5zdChJbnN0KiBpbnN0LCBDCiAgICAg
UkVMRUFTRV9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi12b2lkIERpc2Fzc2Vt
Ymxlcjo6ZHVtcChDb2RlJiBjb2RlLCBQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKQordm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0m
IG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgY29uc3QgY2hhciogYWlyUHJlZml4LCBjb25z
dCBjaGFyKiBhc21QcmVmaXgsIHN0ZDo6ZnVuY3Rpb248dm9pZChJbnN0Jik+IGZvckVhY2hJbnN0
KQogewotICAgIGF1dG8gZHVtcFJhbmdlID0gWyZdIChDQ2FsbEhlbHBlcnM6OkxhYmVsIHN0YXJ0
TGFiZWwsIENDYWxsSGVscGVyczo6TGFiZWwgZW5kTGFiZWwpIHsKKyAgICBhdXRvIGR1bXBBc21S
YW5nZSA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdGFydExhYmVsLCBDQ2FsbEhlbHBlcnM6
OkxhYmVsIGVuZExhYmVsKSB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0YXJ0TGFiZWwuaXNT
ZXQoKSk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGVuZExhYmVsLmlzU2V0KCkpOwogICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBzdGFydCA9IGxpbmtCdWZmZXIubG9jYXRpb25PZihzdGFydExh
YmVsKTsKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZW5kID0gbGlua0J1ZmZlci5sb2NhdGlv
bk9mKGVuZExhYmVsKTsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRw
dHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpID49IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+
KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKLSAgICAgICAgY29uc3QgY2hhciogcHJlZml4
ID0gIiAgICAgICI7Ci0gICAgICAgIGRpc2Fzc2VtYmxlKHN0YXJ0LCBiaXR3aXNlX2Nhc3Q8dWlu
dHB0cl90PihlbmQuZXhlY3V0YWJsZUFkZHJlc3MoKSkgLSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihzdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKSwgcHJlZml4LCBvdXQpOworICAgICAgICBkaXNh
c3NlbWJsZShzdGFydCwgYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRy
ZXNzKCkpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3Mo
KSksIGFzbVByZWZpeCwgb3V0KTsKICAgICB9OwogCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9j
ayA6IG1fYmxvY2tzKSB7CiAgICAgICAgIGJsb2NrLT5kdW1wSGVhZGVyKG91dCk7CiAgICAgICAg
IGlmIChjb2RlLmlzRW50cnlwb2ludChibG9jaykpCi0gICAgICAgICAgICBkdW1wUmFuZ2UobV9l
bnRyeXBvaW50U3RhcnQsIG1fZW50cnlwb2ludEVuZCk7CisgICAgICAgICAgICBkdW1wQXNtUmFu
Z2UobV9lbnRyeXBvaW50U3RhcnQsIG1fZW50cnlwb2ludEVuZCk7CiAKICAgICAgICAgZm9yIChJ
bnN0JiBpbnN0IDogKmJsb2NrKSB7Ci0gICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiKTsKKyAg
ICAgICAgICAgIGZvckVhY2hJbnN0KGluc3QpOworCisgICAgICAgICAgICBvdXQucHJpbnQoYWly
UHJlZml4KTsKICAgICAgICAgICAgIGluc3QuZHVtcChvdXQpOwogICAgICAgICAgICAgb3V0LnBy
aW50KCJcbiIpOwogCkBAIC05Niw3ICs5OCw3IEBAIHZvaWQgRGlzYXNzZW1ibGVyOjpkdW1wKENv
ZGUmIGNvZGUsIFByaW4KICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGF1dG8gcGFpciA9IGl0ZXItPnZhbHVlOwotICAgICAgICAgICAgZHVtcFJh
bmdlKHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKTsKKyAgICAgICAgICAgIGR1bXBBc21SYW5nZShw
YWlyLmZpcnN0LCBwYWlyLnNlY29uZCk7CiAgICAgICAgIH0KICAgICAgICAgYmxvY2stPmR1bXBG
b290ZXIob3V0KTsKICAgICB9CkBAIC0xMDQsNyArMTA2LDcgQEAgdm9pZCBEaXNhc3NlbWJsZXI6
OmR1bXAoQ29kZSYgY29kZSwgUHJpbgogICAgIC8vIEZJWE1FOiBXZSBjb3VsZCBiZSBiZXR0ZXIg
YWJvdXQgdmFyaW91cyBsYXRlIHBhdGhzLiBXZSBjYW4gaW1wbGVtZW50CiAgICAgLy8gdGhpcyBs
YXRlciBpZiB3ZSBmaW5kIGEgc3Ryb25nIHVzZSBmb3IgaXQuCiAgICAgb3V0LnByaW50KCIjIExh
dGUgcGF0aHNcbiIpOwotICAgIGR1bXBSYW5nZShtX2xhdGVQYXRoU3RhcnQsIG1fbGF0ZVBhdGhF
bmQpOworICAgIGR1bXBBc21SYW5nZShtX2xhdGVQYXRoU3RhcnQsIG1fbGF0ZVBhdGhFbmQpOwog
fQogCiB9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckRpc2Fzc2VtYmxlci5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmgJKHJldmlzaW9uIDIxMzE1MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQgc3RhcnRCbG9jayhC
YXNpY0Jsb2NrKiwgQ0NhbGxIZWxwZXJzJik7CiAgICAgdm9pZCBhZGRJbnN0KEluc3QqLCBDQ2Fs
bEhlbHBlcnM6OkxhYmVsLCBDQ2FsbEhlbHBlcnM6OkxhYmVsKTsKIAotICAgIHZvaWQgZHVtcChD
b2RlJiwgUHJpbnRTdHJlYW0mLCBMaW5rQnVmZmVyJik7CisgICAgdm9pZCBkdW1wKENvZGUmLCBQ
cmludFN0cmVhbSYsIExpbmtCdWZmZXImLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHN0ZDo6
ZnVuY3Rpb248dm9pZChJbnN0Jik+IGZvckVhY2hJbnN0KTsKIAogcHJpdmF0ZToKICAgICBIYXNo
TWFwPEluc3QqLCBzdGQ6OnBhaXI8Q0NhbGxIZWxwZXJzOjpMYWJlbCwgQ0NhbGxIZWxwZXJzOjpM
YWJlbD4+IG1faW5zdFRvUmFuZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q29tcGlsZS5jcHAJKHJldmlzaW9uIDIxMzE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNs
dWRlICJBaXJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCiAjaW5jbHVk
ZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgogI2luY2x1ZGUg
IkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNpbmNs
dWRlICJDQ2FsbEhlbHBlcnMuaCIKQEAgLTE1Nyw5ICsxNTgsNzQgQEAgdm9pZCBjb21waWxlKFN0
YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxpemVC
M0J5cHJvZHVjdHMoc3RhdGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CiAKICAgICBpZiAo
QjM6OkFpcjo6RGlzYXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBzdGF0ZS5wcm9jLT5jb2RlKCku
ZGlzYXNzZW1ibGVyKCkpIHsKLSAgICAgICAgZGF0YUxvZ0xuKCJcbkdlbmVyYXRlZCBGVEwgSklU
IGNvZGUgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJsb2Nr
LCBKSVRDb2RlOjpGVExKSVQpLCAiLCBpbnN0cnVjdGlvbiBjb3VudCA9ICIsIHN0YXRlLmdyYXBo
Lm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6Iik7CisgICAgICAgIFByaW50U3Ry
ZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxlKCk7CisKKyAgICAgICAgb3V0LnByaW50KCJcbkdlbmVy
YXRlZCBGVEwgSklUIGNvZGUgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBo
Lm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiLCBpbnN0cnVjdGlvbiBjb3VudCA9ICIs
IHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6XG4iKTsKKwog
ICAgICAgICBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyID0gKnN0YXRlLmZpbmFsaXplci0+YjNDb2Rl
TGlua0J1ZmZlcjsKLSAgICAgICAgZGlzYXNzZW1ibGVyLT5kdW1wKHN0YXRlLnByb2MtPmNvZGUo
KSwgV1RGOjpkYXRhRmlsZSgpLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgQjM6OlZhbHVlKiBjdXJy
ZW50QjNWYWx1ZSA9IG51bGxwdHI7CisgICAgICAgIE5vZGUqIGN1cnJlbnRERkdOb2RlID0gbnVs
bHB0cjsKKworICAgICAgICBIYXNoU2V0PEIzOjpWYWx1ZSo+IHByaW50ZWRWYWx1ZXM7CisgICAg
ICAgIEhhc2hTZXQ8Tm9kZSo+IHByaW50ZWROb2RlczsKKyAgICAgICAgY29uc3QgY2hhciogZGZn
UHJlZml4ID0gIiAgICAiOworICAgICAgICBjb25zdCBjaGFyKiBiM1ByZWZpeCAgPSAiICAgICAg
ICAgICI7CisgICAgICAgIGNvbnN0IGNoYXIqIGFpclByZWZpeCA9ICIgICAgICAgICAgICAgICI7
CisgICAgICAgIGNvbnN0IGNoYXIqIGFzbVByZWZpeCA9ICIgICAgICAgICAgICAgICAgIjsKKwor
ICAgICAgICBhdXRvIHByaW50REZHTm9kZSA9IFsmXSAoTm9kZSogbm9kZSkgeworICAgICAgICAg
ICAgaWYgKGN1cnJlbnRERkdOb2RlID09IG5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgICAgICBjdXJyZW50REZHTm9kZSA9IG5vZGU7CisgICAgICAgICAgICBpZiAoIWN1
cnJlbnRERkdOb2RlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgSGFz
aFNldDxOb2RlKj4gbG9jYWxQcmludGVkTm9kZXM7CisgICAgICAgICAgICBzdGQ6OmZ1bmN0aW9u
PHZvaWQoTm9kZSopPiBwcmludE5vZGVSZWN1cnNpdmUgPSBbJl0gKE5vZGUqIG5vZGUpIHsKKyAg
ICAgICAgICAgICAgICBpZiAocHJpbnRlZE5vZGVzLmNvbnRhaW5zKG5vZGUpIHx8IGxvY2FsUHJp
bnRlZE5vZGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgICAgICBsb2NhbFByaW50ZWROb2Rlcy5hZGQobm9kZSk7CisgICAgICAgICAg
ICAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKG5vZGUsIFsmXSAoRWRnZSBjaGlsZCkgeyBwcmludE5v
ZGVSZWN1cnNpdmUoY2hpbGQubm9kZSgpKTsgfSk7CisgICAgICAgICAgICAgICAgZ3JhcGguZHVt
cChvdXQsIGRmZ1ByZWZpeCwgbm9kZSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAgcHJp
bnROb2RlUmVjdXJzaXZlKG5vZGUpOworICAgICAgICAgICAgcHJpbnRlZE5vZGVzLmFkZChub2Rl
KTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIHByaW50QjNWYWx1ZSA9IFsmXSAoQjM6OlZh
bHVlKiB2YWx1ZSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRCM1ZhbHVlID09IHZhbHVlKQor
ICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY3VycmVudEIzVmFsdWUgPSB2
YWx1ZTsKKyAgICAgICAgICAgIGlmICghY3VycmVudEIzVmFsdWUpCisgICAgICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgICAgICBwcmludERGR05vZGUoYml0d2lzZV9jYXN0PE5vZGUqPih2
YWx1ZS0+b3JpZ2luKCkuZGF0YSgpKSk7CisKKyAgICAgICAgICAgIEhhc2hTZXQ8QjM6OlZhbHVl
Kj4gbG9jYWxQcmludGVkVmFsdWVzOworICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lkKEIz
OjpWYWx1ZSopPiBwcmludFZhbHVlUmVjdXJzaXZlID0gWyZdIChCMzo6VmFsdWUqIHZhbHVlKSB7
CisgICAgICAgICAgICAgICAgaWYgKHByaW50ZWRWYWx1ZXMuY29udGFpbnModmFsdWUpIHx8IGxv
Y2FsUHJpbnRlZFZhbHVlcy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICAgICAgICAgIGxvY2FsUHJpbnRlZFZhbHVlcy5hZGQodmFsdWUpOwor
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZS0+bnVtQ2hpbGRy
ZW4oKTsgaSsrKQorICAgICAgICAgICAgICAgICAgICBwcmludFZhbHVlUmVjdXJzaXZlKHZhbHVl
LT5jaGlsZChpKSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGIzUHJlZml4KTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZS0+ZGVlcER1bXAoc3RhdGUucHJvYy5nZXQoKSwgb3V0KTsKKyAgICAg
ICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgICAgICB9OworCisgICAgICAgICAg
ICBwcmludFZhbHVlUmVjdXJzaXZlKGN1cnJlbnRCM1ZhbHVlKTsKKyAgICAgICAgICAgIHByaW50
ZWRWYWx1ZXMuYWRkKHZhbHVlKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGZvckVhY2hJ
bnN0ID0gWyZdIChCMzo6QWlyOjpJbnN0JiBpbnN0KSB7CisgICAgICAgICAgICBwcmludEIzVmFs
dWUoaW5zdC5vcmlnaW4pOworICAgICAgICB9OworCisgICAgICAgIGRpc2Fzc2VtYmxlci0+ZHVt
cChzdGF0ZS5wcm9jLT5jb2RlKCksIG91dCwgbGlua0J1ZmZlciwgYWlyUHJlZml4LCBhc21QcmVm
aXgsIGZvckVhY2hJbnN0KTsKICAgICAgICAgbGlua0J1ZmZlci5kaWRBbHJlYWR5RGlzYXNzZW1i
bGUoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2Vy
REZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMTMxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw2ICsyNTcs
NyBAQCBwdWJsaWM6CiAgICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2luKDAp
LCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29kZUJs
b2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9kZSA9
IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CisgICAgICAgICAgICBtX291dC5zZXRPcmlnaW4obm9k
ZSk7CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUganNWYWx1
ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKQEAgLTExODUyLDcgKzExODUz
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUpOwog
ICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMih2YWx1ZS5hc0ludDMyKCkpOworICAg
ICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50MzIodmFsdWUuYXNJbnQzMigp
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T3JpZ2luKEIzOjpPcmlnaW4oZWRnZS5ub2RlKCkp
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5vZGUo
KSk7CkBAIC0xMTk2Nyw3ICsxMTk3MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgdGVy
bWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50UHRy
WmVybzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmcm96ZW5Qb2ludGVyKHZh
bHVlKTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBmcm96ZW5Qb2ludGVyKHZhbHVlKTsK
KyAgICAgICAgICAgIHJlc3VsdC0+c2V0T3JpZ2luKEIzOjpPcmlnaW4oZWRnZS5ub2RlKCkpKTsK
KyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgp
KTsKQEAgLTEyMDYwLDcgKzEyMDY1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB0ZXJt
aW5hdGUoVW5jb3VudGFibGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5ib29sZWFu
RmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RCb29s
KHZhbHVlLmFzQm9vbGVhbigpKTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5j
b25zdEJvb2wodmFsdWUuYXNCb29sZWFuKCkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRPcmln
aW4oQjM6Ok9yaWdpbihlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
ICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1f
Ym9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwpAQCAtMTIxMDAsOCArMTIxMDcsMTEgQEAg
cHJpdmF0ZToKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFpc0RvdWJsZShl
ZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwgZWRn
ZS51c2VLaW5kKCkgIT0gSW50NTJSZXBVc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKGVkZ2Ut
Pmhhc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQ2NChKU1Zh
bHVlOjplbmNvZGUoZWRnZS0+YXNKU1ZhbHVlKCkpKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhhc0Nv
bnN0YW50KCkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jb25zdEludDY0
KEpTVmFsdWU6OmVuY29kZShlZGdlLT5hc0pTVmFsdWUoKSkpOworICAgICAgICAgICAgcmVzdWx0
LT5zZXRPcmlnaW4oQjM6Ok9yaWdpbihlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKKyAgICAgICAgfQogCiAgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBt
X2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgaWYgKGlzVmFsaWQodmFs
dWUpKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>303018</attachid>
            <date>2017-02-28 17:41:25 -0800</date>
            <delta_ts>2017-03-01 09:47:58 -0800</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>16766</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjEzMjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBA
QAorMjAxNy0wMi0yOCAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAg
ICBJbXBsZW1lbnQgYSBtZWdhLWRpc2Fzc2VtYmxlciB0aGF0J2xsIGJlIHVzZWQgaW4gdGhlIEZU
TAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY4Njg1
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBleHRlbmRzIHRoZSBwcmV2aW91cyBBaXIgZGlzYXNzZW1ibGVyIHRvIHByaW50IHRoZQor
ICAgICAgICBERkcgYW5kIEIzIG5vZGVzIGJlbG9uZ2luZyB0byBwYXJ0aWN1bGFyIEFpciBpbnN0
cnVjdGlvbnMuCisgICAgICAgIFRoZSBhbGdvcml0aG0gSSdtIHVzaW5nIHRvIGRvIHRoaXMgaXMg
bm90IHBlcmZlY3QuIEZvciBleGFtcGxlLAorICAgICAgICBpdCB3b24ndCB0cnkgdG8gcHJpbnQg
dGhlIGVudGlyZSBERkcvQjMgZ3JhcGguIEl0J2xsIGp1c3QgcHJpbnQKKyAgICAgICAgdGhlIHJl
bGF0ZWQgbm9kZXMgZm9yIHBhcnRpY3VsYXIgQWlyIGluc3RydWN0aW9ucy4gV2UgY2FuIG1ha2Ug
dGhlCisgICAgICAgIGFsZ29yaXRobSBtb3JlIHNvcGhpc3RpY2F0ZWQgYXMgd2UgZ2V0IG1vcmUg
ZXhwZXJpZW5jZSBsb29raW5nIGF0CisgICAgICAgIHRoZXNlIElSIGR1bXBzLgorCisgICAgICAg
IFRoaXMgaXMgYW4gZXhhbXBsZSBvZiB0aGUgb3V0cHV0OgorCisgICAgICAgIC4uLgorICAgICAg
ICAuLi4KKyAgICAgICAgMjAwOjwhMDotPglJbnZhbGlkYXRpb25Qb2ludChNdXN0R2VuLCBXOlNp
ZGVTdGF0ZSwgRXhpdHMsIGJjIzI4LCBleGl0OiBiYyMyNSAtLT4gX2dldEVudHJ5I0RsR3cycjo8
MHgxMDI3NmY5ODA+IGJjIzM3KQorICAgICAgICAgICBWb2lkIEA1NCA9IFBhdGNocG9pbnQoQDI5
OkNvbGRBbnksIEAyOTpDb2xkQW55LCBANTM6Q29sZEFueSwgREZHOkAyMDAsIGdlbmVyYXRvciA9
IDB4MTAxNWQ2YzE4LCBlYXJseUNsb2JiZXJlZCA9IFtdLCBsYXRlQ2xvYmJlcmVkID0gW10sIHVz
ZWRSZWdpc3RlcnMgPSBbJXIwLCAlcjE5LCAlcjIwLCAlcjIxLCAlcjIyLCAlZnBdLCByZXN1bHRD
b25zdHJhaW50ID0gV2FybUFueSwgRXhpdHNTaWRld2F5c3xXcml0ZXNQaW5uZWR8UmVhZHNQaW5u
ZWR8UmVhZHM6VG9wKQorICAgICAgICAgICAgICAgUGF0Y2ggJlBhdGNocG9pbnQyLCAlcjIwLCAl
cjIwLCAlcjAsIEA1NAorICAgICAgICAgNzY6PCA2Oi0+CUdldEJ5T2Zmc2V0KEtub3duQ2VsbDpA
NDQsIEtub3duQ2VsbDpANDQsIEpTfFVzZUFzT3RoZXIsIEFycmF5LCBpZDN7X2VsZW1lbnREYXRh
fSwgMiwgaW5mZXJyZWRUeXBlID0gT2JqZWN0LCBSOk5hbWVkUHJvcGVydGllcygzKSwgRXhpdHMs
IGJjIzM3KSAgcHJlZGljdGluZyBBcnJheQorICAgICAgICAgICBJbnQ2NCBANTcgPSBMb2FkKEAy
OSwgREZHOkA3Niwgb2Zmc2V0ID0gMzIsIENvbnRyb2xEZXBlbmRlbnR8UmVhZHM6MTAwLi4uMTAx
KQorICAgICAgICAgICAgICAgTW92ZSAzMiglcjIwKSwgJXI1LCBANTcKKyAgICAgICAgICAgICAg
ICAgICAgICAweDM4OWNjOWFjMDogICAgbGR1ciAgIHg1LCBbeDIwLCAjMzJdCisgICAgICAgIDEx
NTo8ITA6LT4JQ2hlY2tTdHJ1Y3R1cmUoQ2VsbDpANzYsIE11c3RHZW4sIFsweDEwMjdlYWUyMDpb
QXJyYXksIHt9LCBBcnJheVdpdGhDb250aWd1b3VzLCBQcm90bzoweDEwMjdlMDE0MF1dLCBSOkpT
Q2VsbF9zdHJ1Y3R1cmVJRCwgRXhpdHMsIGJjIzQ2KQorICAgICAgICAgICBJbnQzMiBANTggPSBM
b2FkKEA1NywgREZHOkAxMTUsIENvbnRyb2xEZXBlbmRlbnR8UmVhZHM6MTYuLi4xNykKKyAgICAg
ICAgICAgICAgIE1vdmUzMiAoJXI1KSwgJXIxLCBANTgKKyAgICAgICAgICAgICAgICAgICAgICAw
eDM4OWNjOWFjNDogICAgbGR1ciAgIHcxLCBbeDVdCisgICAgICAgICAgIEludDMyIEA1OSA9IENv
bnN0MzIoREZHOkAxMTUsIDkyKQorICAgICAgICAgICBJbnQzMiBANjAgPSBOb3RFcXVhbChANTgs
ICQ5MihANTkpLCBERkc6QDExNSkKKyAgICAgICAgICAgVm9pZCBANjEgPSBDaGVjayhANjA6V2Fy
bUFueSwgQDU3OkNvbGRBbnksIEAyOTpDb2xkQW55LCBAMjk6Q29sZEFueSwgQDUzOkNvbGRBbnks
IEA1NzpDb2xkQW55LCBERkc6QDExNSwgZ2VuZXJhdG9yID0gMHgxMDU3OTkxZTAsIGVhcmx5Q2xv
YmJlcmVkID0gW10sIGxhdGVDbG9iYmVyZWQgPSBbXSwgdXNlZFJlZ2lzdGVycyA9IFslcjAsICVy
NSwgJXIxOSwgJXIyMCwgJXIyMSwgJXIyMiwgJWZwXSwgRXhpdHNTaWRld2F5c3xSZWFkczpUb3Ap
CisgICAgICAgICAgICAgICBQYXRjaCAmQnJhbmNoMzIoMyxTYW1lQXNSZXApMSwgTm90RXF1YWws
ICVyMSwgJDkyLCAlcjUsICVyMjAsICVyMjAsICVyMCwgJXI1LCBANjEKKyAgICAgICAgICAgICAg
ICAgICAgICAweDM4OWNjOWFjODogICAgY21wICAgIHcxLCAjOTIKKyAgICAgICAgICAgICAgICAg
ICAgICAweDM4OWNjOWFjYzogICAgYi5uZSAgIDB4Mzg5Y2M5ZGFjCisgICAgICAgIDExNzo8IDI6
LT4JR2V0QnV0dGVyZmx5KENlbGw6QDc2LCBTdG9yYWdlfFB1cmVJbnQsIFI6SlNPYmplY3RfYnV0
dGVyZmx5LCBFeGl0cywgYmMjNDYpCisgICAgICAgICAgIEludDY0IEA2NCA9IExvYWQoQDU3LCBE
Rkc6QDExNywgb2Zmc2V0ID0gOCwgQ29udHJvbERlcGVuZGVudHxSZWFkczoyNC4uLjI1KQorICAg
ICAgICAgICAgICAgTW92ZSA4KCVyNSksICVyNCwgQDY0CisgICAgICAgICAgICAgICAgICAgICAg
MHgzODljYzlhZDA6ICAgIGxkdXIgICB4NCwgW3g1LCAjOF0KKyAgICAgICAgIDc5OjwgMjotPglH
ZXRBcnJheUxlbmd0aChLbm93bkNlbGw6QDc2LCBVbnR5cGVkOkAxMTcsIEpTfFB1cmVJbnR8VXNl
QXNJbnQsIE5vbmJvb2xpbnQzMiwgQ29udGlndW91cytPcmlnaW5hbEFycmF5K0luQm91bmRzK0Fz
SXMsIFI6QnV0dGVyZmx5X3B1YmxpY0xlbmd0aCwgRXhpdHMsIGJjIzQ2KQorICAgICAgICAgICBJ
bnQzMiBANjcgPSBMb2FkKEA2NCwgREZHOkA3OSwgb2Zmc2V0ID0gLTgsIENvbnRyb2xEZXBlbmRl
bnR8UmVhZHM6My4uLjQpCisgICAgICAgICAgICAgICBNb3ZlMzIgLTgoJXI0KSwgJXIyLCBANjcK
KyAgICAgICAgICAgICAgICAgICAgICAweDM4OWNjOWFkNDogICAgbGR1ciAgIHcyLCBbeDQsICMt
OF0KKyAgICAgIDE5Mjo8IDE6LT4JSlNDb25zdGFudChKU3xQdXJlSW50LCBOb25ib29saW50MzIs
IEludDMyOiAtMSwgYmMjMCkKKyAgICAgICAgICAgSW50MzIgQDY4ID0gQ29uc3QzMihERkc6QDE5
MiwgLTEpCisgICAgICAgICAgICAgICBNb3ZlICQweGZmZmZmZmZmZmZmZmZmZmYsICVyMSwgJC0x
KEA2OCkKKyAgICAgICAgICAgICAgICAgICAgICAweDM4OWNjOWFkODogICAgbW92ICAgIHgxLCAj
LTEKKyAgICAgICAgIDgzOjwhMjotPglBcml0aEFkZChJbnQzMjpLaWxsOkA3OSwgSW50MzI6S2ls
bDpAMTkyLCBOdW1iZXJ8TXVzdEdlbnxQdXJlSW50fFVzZUFzSW50LCBJbnQzMiwgVW5jaGVja2Vk
LCBFeGl0cywgYmMjNTUpCisgICAgICAgICAgIEludDMyIEA2OSA9IEFkZChANjcsICQtMShANjgp
LCBERkc6QDgzKQorICAgICAgICAgICAgICAgQWRkMzIgJXIyLCAlcjEsICVyMSwgQDY5CisgICAg
ICAgICAgICAgICAgICAgICAgMHgzODljYzlhZGM6ICAgIGFkZCAgICB3MSwgdzIsIHcxCisgICAg
ICAgICA4Njo8IDM6LT4JQml0QW5kKENoZWNrOkludDMyOkA3MSwgSW50MzI6S2lsbDpAODMsIElu
dDMyfFVzZUFzT3RoZXJ8VXNlQXNJbnR8UmVhbGx5V2FudHNJbnQsIEludDMyLCBFeGl0cywgYmMj
NjApCisgICAgICAgICAgIEludDMyIEA3MCA9IEJlbG93KEA1MywgJC0yODE0NzQ5NzY3MTA2NTYo
QDE1KSwgREZHOkA4NikKKyAgICAgICAgICAgVm9pZCBANzEgPSBDaGVjayhANzA6V2FybUFueSwg
QDUzOkNvbGRBbnksIEAyOTpDb2xkQW55LCBAMjk6Q29sZEFueSwgQDUzOkNvbGRBbnksIEA2OTpD
b2xkQW55LCBERkc6QDg2LCBnZW5lcmF0b3IgPSAweDEwNTc5OTM3MCwgZWFybHlDbG9iYmVyZWQg
PSBbXSwgbGF0ZUNsb2JiZXJlZCA9IFtdLCB1c2VkUmVnaXN0ZXJzID0gWyVyMCwgJXIxLCAlcjIs
ICVyNCwgJXI1LCAlcjE5LCAlcjIwLCAlcjIxLCAlcjIyLCAlZnBdLCBFeGl0c1NpZGV3YXlzfFJl
YWRzOlRvcCkKKyAgICAgICAgICAgICAgIFBhdGNoICZCcmFuY2g2NCgzLFNhbWVBc1JlcCkwLCBC
ZWxvdywgJXIwLCAlcjIyLCAlcjAsICVyMjAsICVyMjAsICVyMCwgJXIxLCBANzEKKyAgICAgICAg
ICAgICAgICAgICAgICAweDM4OWNjOWFlMDogICAgY21wICAgIHgwLCB4MjIKKyAgICAgICAgICAg
ICAgICAgICAgICAweDM4OWNjOWFlNDogICAgYi5sbyAgIDB4Mzg5Y2M5ZGMwCisgICAgICAgICAg
IEludDMyIEA3MiA9IFRydW5jKEA1MywgREZHOkA4NikKKyAgICAgICAgICAgSW50MzIgQDczID0g
Qml0QW5kKEA2OSwgQDcyLCBERkc6QDg2KQorICAgICAgICAgICAgICAgQW5kMzIgJXIxLCAlcjAs
ICVyMSwgQDczCisgICAgICAgICAgICAgICAgICAgICAgMHgzODljYzlhZTg6ICAgIGFuZCAgICB3
MSwgdzEsIHcwCisgICAgICAgICAgIDE2OjwhMDotPglQdXRTdGFjayhLbm93bkludDMyOkA3MSwg
TXVzdEdlbiwgbG9jMjcsIG1hY2hpbmU6bG9jMywgRmx1c2hlZEludDMyLCBXOlN0YWNrKC0yOCks
IGJjIzE5KQorICAgICAgICAgICBJbnQzMiBANzIgPSBUcnVuYyhANTMsIERGRzpAODYpCisgICAg
ICAgICAgIEludDY0IEAxMSA9IFNsb3RCYXNlKHN0YWNrMCkKKyAgICAgICAgICAgVm9pZCBANzYg
PSBTdG9yZShANzIsIEAxMSwgREZHOkAxNiwgb2Zmc2V0ID0gMzIsIENvbnRyb2xEZXBlbmRlbnR8
V3JpdGVzOjk0Li4uOTUpCisgICAgICAgICAgICAgICBNb3ZlMzIgJXIwLCAtNjQoJWZwKSwgQDc2
CisgICAgICAgICAgICAgICAgICAgICAgMHgzODljYzlhZWM6ICAgIHN0dXIgICB3MCwgW2ZwLCAj
LTY0XQorICAgICAgICAgICAxMjo8ITA6LT4JUHV0U3RhY2soVW50eXBlZDpAODYsIE11c3RHZW4s
IGxvYzI4LCBtYWNoaW5lOmxvYzQsIEZsdXNoZWRKU1ZhbHVlLCBXOlN0YWNrKC0yOSksIGJjIzE5
KQorICAgICAgICAgICBJbnQ2NCBANzcgPSBaRXh0MzIoQDczLCBERkc6QDEyKQorICAgICAgICAg
ICBJbnQ2NCBANzggPSBBZGQoQDc3LCAkLTI4MTQ3NDk3NjcxMDY1NihAMTUpLCBERkc6QDEyKQor
ICAgICAgICAgICAgICAgQWRkNjQgJXIxLCAlcjIyLCAlcjMsIEA3OAorICAgICAgICAgICAgICAg
ICAgICAgIDB4Mzg5Y2M5YWYwOiAgICBhZGQgICAgeDMsIHgxLCB4MjIKKyAgICAgICAgICAgSW50
NjQgQDExID0gU2xvdEJhc2Uoc3RhY2swKQorICAgICAgICAgICBWb2lkIEA4MSA9IFN0b3JlKEA3
OCwgQDExLCBERkc6QDEyLCBvZmZzZXQgPSAyNCwgQ29udHJvbERlcGVuZGVudHxXcml0ZXM6OTUu
Li45NikKKyAgICAgICAgICAgICAgIE1vdmUgJXIzLCAtNzIoJWZwKSwgQDgxCisgICAgICAgICAg
ICAgICAgICAgICAgMHgzODljYzlhZjQ6ICAgIHN0dXIgICB4MywgW2ZwLCAjLTcyXQorICAgICAg
ICAgICAxMDo8ITA6LT4JUHV0U3RhY2soS25vd25JbnQzMjpANDYsIE11c3RHZW4sIGxvYzI5LCBt
YWNoaW5lOmxvYzUsIEZsdXNoZWRJbnQzMiwgVzpTdGFjaygtMzApLCBiYyMxOSkKKyAgICAgICAg
ICAgSW50MzIgQDgyID0gVHJ1bmMoQDI0LCBERkc6QDEwKQorICAgICAgICAgICBJbnQ2NCBAMTEg
PSBTbG90QmFzZShzdGFjazApCisgICAgICAgICAgIFZvaWQgQDg1ID0gU3RvcmUoQDgyLCBAMTEs
IERGRzpAMTAsIG9mZnNldCA9IDE2LCBDb250cm9sRGVwZW5kZW50fFdyaXRlczo5Ni4uLjk3KQor
ICAgICAgICAgICAgICAgTW92ZTMyICVyMjEsIC04MCglZnApLCBAODUKKyAgICAgICAgICAgICAg
ICAgICAgICAweDM4OWNjOWFmODogICAgc3R1ciAgIHcyMSwgW2ZwLCAjLTgwXQorICAgICAgICAg
IDEyOTo8ITEwOi0+CUdldEJ5VmFsKEtub3duQ2VsbDpLaWxsOkA3NiwgSW50MzI6S2lsbDpAODYs
IFVudHlwZWQ6S2lsbDpAMTE3LCBKU3xNdXN0R2VufFVzZUFzT3RoZXIsIEZpbmFsT3RoZXIsIENv
bnRpZ3VvdXMrT3JpZ2luYWxBcnJheStPdXRPZkJvdW5kcytBc0lzLCBSOldvcmxkLCBXOkhlYXAs
IEV4aXRzLCBDbG9iYmVyc0V4aXQsIGJjIzE5KSAgcHJlZGljdGluZyBGaW5hbE90aGVyCisgICAg
ICAgICAgIEludDMyIEA4OSA9IEFib3ZlRXF1YWwoQDczLCBANjcsIERGRzpAMTI5KQorICAgICAg
ICAgICBWb2lkIEA5MCA9IEJyYW5jaChAODksIERGRzpAMTI5LCBUZXJtaW5hbCkKKyAgICAgICAg
ICAgICAgIEJyYW5jaDMyIEFib3ZlT3JFcXVhbCwgJXIxLCAlcjIsIEA5MAorICAgICAgICAgICAg
ICAgICAgICAgIDB4Mzg5Y2M5YWZjOiAgICBjbXAgICAgdzEsIHcyCisgICAgICAgICAgICAgICAg
ICAgICAgMHgzODljYzliMDA6ICAgIGIuaHMgICAweDM4OWNjOWJlYworICAgICAgICAuLi4KKyAg
ICAgICAgLi4uCisKKyAgICAgICAgKiBiMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcDoKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6RGlzYXNzZW1ibGVyOjpkdW1wKToKKyAgICAgICAgKiBiMy9haXIv
QWlyRGlzYXNzZW1ibGVyLmg6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAg
ICAoSlNDOjpGVEw6OmNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvQjMuY3Bw
OgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0IzOjpsb3dlcik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvQjM6Omxvd0ludDMyKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9CMzo6bG93Q2VsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvQjM6Omxvd0Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93
ZXJERkdUb0IzOjpsb3dKU1ZhbHVlKToKKwogMjAxNy0wMi0yOCAgTWFyayBMYW0gIDxtYXJrLmxh
bUBhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHRoZSBTaWdpbGxDcmFzaEFuYWx5emVyIGJ5
IGRlZmF1bHQgZm9yIGlPUy4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
RGlzYXNzZW1ibGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckRpc2Fzc2VtYmxlci5jcHAJKHJldmlzaW9uIDIxMzE1MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKICNpbmNsdWRlICJBaXJD
b2RlLmgiCiAjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIzVmFsdWUuaCIKICNpbmNs
dWRlICJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCiAKQEAgLTY4LDI1
ICs2OSwyNiBAQCB2b2lkIERpc2Fzc2VtYmxlcjo6YWRkSW5zdChJbnN0KiBpbnN0LCBDCiAgICAg
UkVMRUFTRV9BU1NFUlQoYWRkUmVzdWx0LmlzTmV3RW50cnkpOwogfQogCi12b2lkIERpc2Fzc2Vt
Ymxlcjo6ZHVtcChDb2RlJiBjb2RlLCBQcmludFN0cmVhbSYgb3V0LCBMaW5rQnVmZmVyJiBsaW5r
QnVmZmVyKQordm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAoQ29kZSYgY29kZSwgUHJpbnRTdHJlYW0m
IG91dCwgTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgY29uc3QgY2hhciogYWlyUHJlZml4LCBjb25z
dCBjaGFyKiBhc21QcmVmaXgsIHN0ZDo6ZnVuY3Rpb248dm9pZChJbnN0Jik+IGRvVG9FYWNoSW5z
dCkKIHsKLSAgICBhdXRvIGR1bXBSYW5nZSA9IFsmXSAoQ0NhbGxIZWxwZXJzOjpMYWJlbCBzdGFy
dExhYmVsLCBDQ2FsbEhlbHBlcnM6OkxhYmVsIGVuZExhYmVsKSB7CisgICAgYXV0byBkdW1wQXNt
UmFuZ2UgPSBbJl0gKENDYWxsSGVscGVyczo6TGFiZWwgc3RhcnRMYWJlbCwgQ0NhbGxIZWxwZXJz
OjpMYWJlbCBlbmRMYWJlbCkgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChzdGFydExhYmVsLmlz
U2V0KCkpOwogICAgICAgICBSRUxFQVNFX0FTU0VSVChlbmRMYWJlbC5pc1NldCgpKTsKICAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgc3RhcnQgPSBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RhcnRM
YWJlbCk7CiAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGVuZCA9IGxpbmtCdWZmZXIubG9jYXRp
b25PZihlbmRMYWJlbCk7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50
cHRyX3Q+KGVuZC5leGVjdXRhYmxlQWRkcmVzcygpKSA+PSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PihzdGFydC5leGVjdXRhYmxlQWRkcmVzcygpKSk7Ci0gICAgICAgIGNvbnN0IGNoYXIqIHByZWZp
eCA9ICIgICAgICAiOwotICAgICAgICBkaXNhc3NlbWJsZShzdGFydCwgYml0d2lzZV9jYXN0PHVp
bnRwdHJfdD4oZW5kLmV4ZWN1dGFibGVBZGRyZXNzKCkpIC0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4oc3RhcnQuZXhlY3V0YWJsZUFkZHJlc3MoKSksIHByZWZpeCwgb3V0KTsKKyAgICAgICAgZGlz
YXNzZW1ibGUoc3RhcnQsIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KGVuZC5leGVjdXRhYmxlQWRk
cmVzcygpKSAtIGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHN0YXJ0LmV4ZWN1dGFibGVBZGRyZXNz
KCkpLCBhc21QcmVmaXgsIG91dCk7CiAgICAgfTsKIAogICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBtX2Jsb2NrcykgewogICAgICAgICBibG9jay0+ZHVtcEhlYWRlcihvdXQpOwogICAgICAg
ICBpZiAoY29kZS5pc0VudHJ5cG9pbnQoYmxvY2spKQotICAgICAgICAgICAgZHVtcFJhbmdlKG1f
ZW50cnlwb2ludFN0YXJ0LCBtX2VudHJ5cG9pbnRFbmQpOworICAgICAgICAgICAgZHVtcEFzbVJh
bmdlKG1fZW50cnlwb2ludFN0YXJ0LCBtX2VudHJ5cG9pbnRFbmQpOwogCiAgICAgICAgIGZvciAo
SW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIik7Cisg
ICAgICAgICAgICBkb1RvRWFjaEluc3QoaW5zdCk7CisKKyAgICAgICAgICAgIG91dC5wcmludChh
aXJQcmVmaXgpOwogICAgICAgICAgICAgaW5zdC5kdW1wKG91dCk7CiAgICAgICAgICAgICBvdXQu
cHJpbnQoIlxuIik7CiAKQEAgLTk2LDcgKzk4LDcgQEAgdm9pZCBEaXNhc3NlbWJsZXI6OmR1bXAo
Q29kZSYgY29kZSwgUHJpbgogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgYXV0byBwYWlyID0gaXRlci0+dmFsdWU7Ci0gICAgICAgICAgICBkdW1w
UmFuZ2UocGFpci5maXJzdCwgcGFpci5zZWNvbmQpOworICAgICAgICAgICAgZHVtcEFzbVJhbmdl
KHBhaXIuZmlyc3QsIHBhaXIuc2Vjb25kKTsKICAgICAgICAgfQogICAgICAgICBibG9jay0+ZHVt
cEZvb3RlcihvdXQpOwogICAgIH0KQEAgLTEwNCw3ICsxMDYsNyBAQCB2b2lkIERpc2Fzc2VtYmxl
cjo6ZHVtcChDb2RlJiBjb2RlLCBQcmluCiAgICAgLy8gRklYTUU6IFdlIGNvdWxkIGJlIGJldHRl
ciBhYm91dCB2YXJpb3VzIGxhdGUgcGF0aHMuIFdlIGNhbiBpbXBsZW1lbnQKICAgICAvLyB0aGlz
IGxhdGVyIGlmIHdlIGZpbmQgYSBzdHJvbmcgdXNlIGZvciBpdC4KICAgICBvdXQucHJpbnQoIiMg
TGF0ZSBwYXRoc1xuIik7Ci0gICAgZHVtcFJhbmdlKG1fbGF0ZVBhdGhTdGFydCwgbV9sYXRlUGF0
aEVuZCk7CisgICAgZHVtcEFzbVJhbmdlKG1fbGF0ZVBhdGhTdGFydCwgbV9sYXRlUGF0aEVuZCk7
CiB9CiAKIH0gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyRGlzYXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuaAkocmV2aXNpb24gMjEzMTUw
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJEaXNhc3NlbWJsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzdGFydEJsb2Nr
KEJhc2ljQmxvY2sqLCBDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGFkZEluc3QoSW5zdCosIEND
YWxsSGVscGVyczo6TGFiZWwsIENDYWxsSGVscGVyczo6TGFiZWwpOwogCi0gICAgdm9pZCBkdW1w
KENvZGUmLCBQcmludFN0cmVhbSYsIExpbmtCdWZmZXImKTsKKyAgICB2b2lkIGR1bXAoQ29kZSYs
IFByaW50U3RyZWFtJiwgTGlua0J1ZmZlciYsIGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgc3Rk
OjpmdW5jdGlvbjx2b2lkKEluc3QmKT4gZG9Ub0VhY2hJbnN0KTsKIAogcHJpdmF0ZToKICAgICBI
YXNoTWFwPEluc3QqLCBzdGQ6OnBhaXI8Q0NhbGxIZWxwZXJzOjpMYWJlbCwgQ0NhbGxIZWxwZXJz
OjpMYWJlbD4+IG1faW5zdFRvUmFuZ2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMQ29tcGlsZS5jcHAJKHJldmlzaW9uIDIxMzE1MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNp
bmNsdWRlICJBaXJEaXNhc3NlbWJsZXIuaCIKICNpbmNsdWRlICJCM0dlbmVyYXRlLmgiCiAjaW5j
bHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgogI2luY2x1
ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQ29kZUJsb2NrV2l0aEpJVFR5cGUuaCIKICNp
bmNsdWRlICJDQ2FsbEhlbHBlcnMuaCIKQEAgLTE1Nyw5ICsxNTgsNzQgQEAgdm9pZCBjb21waWxl
KFN0YXRlJiBzdGF0ZSwgU2FmZXBvaW50OjpSZQogICAgIHN0YXRlLmppdENvZGUtPmluaXRpYWxp
emVCM0J5cHJvZHVjdHMoc3RhdGUucHJvYy0+cmVsZWFzZUJ5cHJvZHVjdHMoKSk7CiAKICAgICBp
ZiAoQjM6OkFpcjo6RGlzYXNzZW1ibGVyKiBkaXNhc3NlbWJsZXIgPSBzdGF0ZS5wcm9jLT5jb2Rl
KCkuZGlzYXNzZW1ibGVyKCkpIHsKLSAgICAgICAgZGF0YUxvZ0xuKCJcbkdlbmVyYXRlZCBGVEwg
SklUIGNvZGUgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdyYXBoLm1fY29kZUJs
b2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiLCBpbnN0cnVjdGlvbiBjb3VudCA9ICIsIHN0YXRlLmdy
YXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6Iik7CisgICAgICAgIFByaW50
U3RyZWFtJiBvdXQgPSBXVEY6OmRhdGFGaWxlKCk7CisKKyAgICAgICAgb3V0LnByaW50KCJcbkdl
bmVyYXRlZCBGVEwgSklUIGNvZGUgZm9yICIsIENvZGVCbG9ja1dpdGhKSVRUeXBlKHN0YXRlLmdy
YXBoLm1fY29kZUJsb2NrLCBKSVRDb2RlOjpGVExKSVQpLCAiLCBpbnN0cnVjdGlvbiBjb3VudCA9
ICIsIHN0YXRlLmdyYXBoLm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbkNvdW50KCksICI6XG4iKTsK
KwogICAgICAgICBMaW5rQnVmZmVyJiBsaW5rQnVmZmVyID0gKnN0YXRlLmZpbmFsaXplci0+YjND
b2RlTGlua0J1ZmZlcjsKLSAgICAgICAgZGlzYXNzZW1ibGVyLT5kdW1wKHN0YXRlLnByb2MtPmNv
ZGUoKSwgV1RGOjpkYXRhRmlsZSgpLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgQjM6OlZhbHVlKiBj
dXJyZW50QjNWYWx1ZSA9IG51bGxwdHI7CisgICAgICAgIE5vZGUqIGN1cnJlbnRERkdOb2RlID0g
bnVsbHB0cjsKKworICAgICAgICBIYXNoU2V0PEIzOjpWYWx1ZSo+IHByaW50ZWRWYWx1ZXM7Cisg
ICAgICAgIEhhc2hTZXQ8Tm9kZSo+IHByaW50ZWROb2RlczsKKyAgICAgICAgY29uc3QgY2hhciog
ZGZnUHJlZml4ID0gIiAgICAiOworICAgICAgICBjb25zdCBjaGFyKiBiM1ByZWZpeCAgPSAiICAg
ICAgICAgICI7CisgICAgICAgIGNvbnN0IGNoYXIqIGFpclByZWZpeCA9ICIgICAgICAgICAgICAg
ICI7CisgICAgICAgIGNvbnN0IGNoYXIqIGFzbVByZWZpeCA9ICIgICAgICAgICAgICAgICAgIjsK
KworICAgICAgICBhdXRvIHByaW50REZHTm9kZSA9IFsmXSAoTm9kZSogbm9kZSkgeworICAgICAg
ICAgICAgaWYgKGN1cnJlbnRERkdOb2RlID09IG5vZGUpCisgICAgICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgICAgICBjdXJyZW50REZHTm9kZSA9IG5vZGU7CisgICAgICAgICAgICBpZiAo
IWN1cnJlbnRERkdOb2RlKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
SGFzaFNldDxOb2RlKj4gbG9jYWxQcmludGVkTm9kZXM7CisgICAgICAgICAgICBzdGQ6OmZ1bmN0
aW9uPHZvaWQoTm9kZSopPiBwcmludE5vZGVSZWN1cnNpdmUgPSBbJl0gKE5vZGUqIG5vZGUpIHsK
KyAgICAgICAgICAgICAgICBpZiAocHJpbnRlZE5vZGVzLmNvbnRhaW5zKG5vZGUpIHx8IGxvY2Fs
UHJpbnRlZE5vZGVzLmNvbnRhaW5zKG5vZGUpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgICAgICAgICBsb2NhbFByaW50ZWROb2Rlcy5hZGQobm9kZSk7CisgICAgICAg
ICAgICAgICAgZ3JhcGguZG9Ub0NoaWxkcmVuKG5vZGUsIFsmXSAoRWRnZSBjaGlsZCkgeyBwcmlu
dE5vZGVSZWN1cnNpdmUoY2hpbGQubm9kZSgpKTsgfSk7CisgICAgICAgICAgICAgICAgZ3JhcGgu
ZHVtcChvdXQsIGRmZ1ByZWZpeCwgbm9kZSk7CisgICAgICAgICAgICB9OworICAgICAgICAgICAg
cHJpbnROb2RlUmVjdXJzaXZlKG5vZGUpOworICAgICAgICAgICAgcHJpbnRlZE5vZGVzLmFkZChu
b2RlKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIHByaW50QjNWYWx1ZSA9IFsmXSAoQjM6
OlZhbHVlKiB2YWx1ZSkgeworICAgICAgICAgICAgaWYgKGN1cnJlbnRCM1ZhbHVlID09IHZhbHVl
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgY3VycmVudEIzVmFsdWUg
PSB2YWx1ZTsKKyAgICAgICAgICAgIGlmICghY3VycmVudEIzVmFsdWUpCisgICAgICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgICAgICBwcmludERGR05vZGUoYml0d2lzZV9jYXN0PE5vZGUq
Pih2YWx1ZS0+b3JpZ2luKCkuZGF0YSgpKSk7CisKKyAgICAgICAgICAgIEhhc2hTZXQ8QjM6OlZh
bHVlKj4gbG9jYWxQcmludGVkVmFsdWVzOworICAgICAgICAgICAgc3RkOjpmdW5jdGlvbjx2b2lk
KEIzOjpWYWx1ZSopPiBwcmludFZhbHVlUmVjdXJzaXZlID0gWyZdIChCMzo6VmFsdWUqIHZhbHVl
KSB7CisgICAgICAgICAgICAgICAgaWYgKHByaW50ZWRWYWx1ZXMuY29udGFpbnModmFsdWUpIHx8
IGxvY2FsUHJpbnRlZFZhbHVlcy5jb250YWlucyh2YWx1ZSkpCisgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICAgICAgICAgIGxvY2FsUHJpbnRlZFZhbHVlcy5hZGQodmFsdWUp
OworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB2YWx1ZS0+bnVtQ2hp
bGRyZW4oKTsgaSsrKQorICAgICAgICAgICAgICAgICAgICBwcmludFZhbHVlUmVjdXJzaXZlKHZh
bHVlLT5jaGlsZChpKSk7CisgICAgICAgICAgICAgICAgb3V0LnByaW50KGIzUHJlZml4KTsKKyAg
ICAgICAgICAgICAgICB2YWx1ZS0+ZGVlcER1bXAoc3RhdGUucHJvYy5nZXQoKSwgb3V0KTsKKyAg
ICAgICAgICAgICAgICBvdXQucHJpbnQoIlxuIik7CisgICAgICAgICAgICB9OworCisgICAgICAg
ICAgICBwcmludFZhbHVlUmVjdXJzaXZlKGN1cnJlbnRCM1ZhbHVlKTsKKyAgICAgICAgICAgIHBy
aW50ZWRWYWx1ZXMuYWRkKHZhbHVlKTsKKyAgICAgICAgfTsKKworICAgICAgICBhdXRvIGZvckVh
Y2hJbnN0ID0gWyZdIChCMzo6QWlyOjpJbnN0JiBpbnN0KSB7CisgICAgICAgICAgICBwcmludEIz
VmFsdWUoaW5zdC5vcmlnaW4pOworICAgICAgICB9OworCisgICAgICAgIGRpc2Fzc2VtYmxlci0+
ZHVtcChzdGF0ZS5wcm9jLT5jb2RlKCksIG91dCwgbGlua0J1ZmZlciwgYWlyUHJlZml4LCBhc21Q
cmVmaXgsIGZvckVhY2hJbnN0KTsKICAgICAgICAgbGlua0J1ZmZlci5kaWRBbHJlYWR5RGlzYXNz
ZW1ibGUoKTsKICAgICB9CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9CMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvQjMuY3BwCShyZXZpc2lvbiAyMTMxNTApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9CMy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Nyw2ICsy
NTcsNyBAQCBwdWJsaWM6CiAgICAgICAgIG1fb3JpZ2luID0gTm9kZU9yaWdpbihDb2RlT3JpZ2lu
KDApLCBDb2RlT3JpZ2luKDApLCB0cnVlKTsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gY29k
ZUJsb2NrKCktPm51bVBhcmFtZXRlcnMoKTsgaS0tOykgewogICAgICAgICAgICAgTm9kZSogbm9k
ZSA9IG1fZ3JhcGgubV9hcmd1bWVudHNbaV07CisgICAgICAgICAgICBtX291dC5zZXRPcmlnaW4o
bm9kZSk7CiAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCA9IHZpcnR1YWxSZWdp
c3RlckZvckFyZ3VtZW50KGkpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBMVmFsdWUganNW
YWx1ZSA9IG1fb3V0LmxvYWQ2NChhZGRyZXNzRm9yKG9wZXJhbmQpKTsKQEAgLTExODUyLDcgKzEx
ODUzLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB0ZXJtaW5hdGUoVW5jb3VudGFibGUp
OwogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5pbnQzMlplcm87CiAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQzMih2YWx1ZS5hc0ludDMyKCkpOwor
ICAgICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IG1fb3V0LmNvbnN0SW50MzIodmFsdWUuYXNJbnQz
MigpKTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T3JpZ2luKEIzOjpPcmlnaW4oZWRnZS5ub2Rl
KCkpKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2ludDMyVmFsdWVzLmdldChlZGdlLm5v
ZGUoKSk7CkBAIC0xMTk2Nyw3ICsxMTk3MCw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAg
dGVybWluYXRlKFVuY291bnRhYmxlKTsKICAgICAgICAgICAgICAgICByZXR1cm4gbV9vdXQuaW50
UHRyWmVybzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiBmcm96ZW5Qb2ludGVy
KHZhbHVlKTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBmcm96ZW5Qb2ludGVyKHZhbHVl
KTsKKyAgICAgICAgICAgIHJlc3VsdC0+c2V0T3JpZ2luKEIzOjpPcmlnaW4oZWRnZS5ub2RlKCkp
KTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUgPSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9k
ZSgpKTsKQEAgLTEyMDYwLDcgKzEyMDY1LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB0
ZXJtaW5hdGUoVW5jb3VudGFibGUpOwogICAgICAgICAgICAgICAgIHJldHVybiBtX291dC5ib29s
ZWFuRmFsc2U7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RC
b29sKHZhbHVlLmFzQm9vbGVhbigpKTsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291
dC5jb25zdEJvb2wodmFsdWUuYXNCb29sZWFuKCkpOworICAgICAgICAgICAgcmVzdWx0LT5zZXRP
cmlnaW4oQjM6Ok9yaWdpbihlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9
IG1fYm9vbGVhblZhbHVlcy5nZXQoZWRnZS5ub2RlKCkpOwpAQCAtMTIxMDAsOCArMTIxMDcsMTEg
QEAgcHJpdmF0ZToKICAgICAgICAgREZHX0FTU0VSVChtX2dyYXBoLCBtX25vZGUsICFpc0RvdWJs
ZShlZGdlLnVzZUtpbmQoKSkpOwogICAgICAgICBERkdfQVNTRVJUKG1fZ3JhcGgsIG1fbm9kZSwg
ZWRnZS51c2VLaW5kKCkgIT0gSW50NTJSZXBVc2UpOwogICAgICAgICAKLSAgICAgICAgaWYgKGVk
Z2UtPmhhc0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4gbV9vdXQuY29uc3RJbnQ2NChK
U1ZhbHVlOjplbmNvZGUoZWRnZS0+YXNKU1ZhbHVlKCkpKTsKKyAgICAgICAgaWYgKGVkZ2UtPmhh
c0NvbnN0YW50KCkpIHsKKyAgICAgICAgICAgIExWYWx1ZSByZXN1bHQgPSBtX291dC5jb25zdElu
dDY0KEpTVmFsdWU6OmVuY29kZShlZGdlLT5hc0pTVmFsdWUoKSkpOworICAgICAgICAgICAgcmVz
dWx0LT5zZXRPcmlnaW4oQjM6Ok9yaWdpbihlZGdlLm5vZGUoKSkpOworICAgICAgICAgICAgcmV0
dXJuIHJlc3VsdDsKKyAgICAgICAgfQogCiAgICAgICAgIExvd2VyZWROb2RlVmFsdWUgdmFsdWUg
PSBtX2pzVmFsdWVWYWx1ZXMuZ2V0KGVkZ2Uubm9kZSgpKTsKICAgICAgICAgaWYgKGlzVmFsaWQo
dmFsdWUpKQo=
</data>
<flag name="review"
          id="324710"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>