<?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>160346</bug_id>
          
          <creation_ts>2016-07-29 10:48:52 -0700</creation_ts>
          <short_desc>[JSC] Use the same data structures for DFG and Air Liveness Analysis</short_desc>
          <delta_ts>2016-07-29 13:59:54 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1215593</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-29 10:48:52 -0700</bug_when>
    <thetext>[JSC] Use the same data structures for DFG and Air Liveness Analysis</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215599</commentid>
    <comment_count>1</comment_count>
      <attachid>284873</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-29 10:53:33 -0700</bug_when>
    <thetext>Created attachment 284873
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215602</commentid>
    <comment_count>2</comment_count>
      <attachid>284873</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2016-07-29 10:58:31 -0700</bug_when>
    <thetext>Comment on attachment 284873
Patch

r=me

Do we have benchmark results for this?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215604</commentid>
    <comment_count>3</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-29 11:01:11 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 284873 [details]
&gt; Patch
&gt; 
&gt; r=me
&gt; 
&gt; Do we have benchmark results for this?

Thanks for the review.

Here are the early result. Next I need to do something about CFA.

                                                  Conf#1                    Conf#2                                      
SunSpider:
   3d-cube                                    4.5709+-0.1010            4.5246+-0.0949          might be 1.0102x faster
   3d-morph                                   4.9709+-0.0442     ?      4.9763+-0.0455        ?
   3d-raytrace                                4.8954+-0.0640            4.8828+-0.0354        
   access-binary-trees                        1.9768+-0.0339            1.9554+-0.0198          might be 1.0110x faster
   access-fannkuch                            5.8099+-0.0619            5.7292+-0.0736          might be 1.0141x faster
   access-nbody                               2.3602+-0.0318            2.3507+-0.0324        
   access-nsieve                              2.9633+-0.0571            2.9355+-0.0242        
   bitops-3bit-bits-in-byte                   1.1042+-0.0441            1.0652+-0.0138          might be 1.0366x faster
   bitops-bits-in-byte                        2.6202+-0.0578            2.5688+-0.0250          might be 1.0200x faster
   bitops-bitwise-and                         1.9791+-0.0247     ?      1.9861+-0.0251        ?
   bitops-nsieve-bits                         3.1294+-0.0525     ?      3.2140+-0.1669        ? might be 1.0270x slower
   controlflow-recursive                      2.2983+-0.0241     ?      2.2986+-0.0290        ?
   crypto-aes                                 4.3926+-0.0464            4.3645+-0.0277        
   crypto-md5                                 2.6512+-0.0238            2.6446+-0.0476        
   crypto-sha1                                2.7672+-0.0559            2.7201+-0.0170          might be 1.0173x faster
   date-format-tofte                          6.4525+-0.0452     ?      6.4914+-0.1537        ?
   date-format-xparb                          4.7507+-0.0641     ?      4.7671+-0.0763        ?
   math-cordic                                2.7117+-0.0209     ?      2.7347+-0.0336        ?
   math-partial-sums                          4.0073+-0.1059            3.9786+-0.0658        
   math-spectral-norm                         2.0708+-0.0569            2.0469+-0.0383          might be 1.0117x faster
   regexp-dna                                 6.4805+-0.3018            6.2571+-0.0770          might be 1.0357x faster
   string-base64                              3.9325+-0.0215     ?      3.9911+-0.1128        ? might be 1.0149x slower
   string-fasta                               5.3708+-0.0120     ?      5.4720+-0.1385        ? might be 1.0188x slower
   string-tagcloud                            8.3679+-0.1476            8.3539+-0.1753        
   string-unpack-code                        18.0326+-0.3545           17.6974+-0.1306          might be 1.0189x faster
   string-validate-input                      4.0669+-0.0194            4.0493+-0.0409        

   &lt;arithmetic&gt;                               4.4128+-0.0158            4.3868+-0.0129          might be 1.0059x faster

                                                  Conf#1                    Conf#2                                      
Octane:
   encrypt                                   0.16192+-0.00158          0.16042+-0.00103       
   decrypt                                   2.70025+-0.01958    ?     2.72996+-0.03202       ? might be 1.0110x slower
   deltablue                        x2       0.13108+-0.00122    ?     0.13496+-0.00758       ? might be 1.0296x slower
   earley                                    0.28488+-0.00115    ?     0.28534+-0.00125       ?
   boyer                                     5.01169+-0.01921          4.96573+-0.07191       
   navier-stokes                    x2       4.93577+-0.00827          4.92569+-0.00858       
   raytrace                         x2       0.79704+-0.00663          0.79586+-0.00223       
   richards                         x2       0.08318+-0.00067          0.08292+-0.00099       
   splay                            x2       0.33854+-0.00095    ?     0.33914+-0.00204       ?
   regexp                           x2      15.84690+-0.17565    ?    15.92367+-0.22181       ?
   pdfjs                            x2      39.08439+-0.15289         38.86791+-0.19234       
   mandreel                         x2      42.72122+-0.16330    ?    42.84572+-0.19546       ?
   gbemu                            x2      29.64741+-0.13145         29.59276+-0.07079       
   closure                                   0.48228+-0.00189          0.48068+-0.00200       
   jquery                                    6.41661+-0.02983    ?     6.43618+-0.03195       ?
   box2d                            x2       9.25132+-0.04067          9.21141+-0.03270       
   zlib                             x2     371.11875+-6.40502        367.60278+-8.00245       
   typescript                       x2     604.87042+-3.76956        600.18077+-3.77438       

   &lt;geometric&gt;                               5.02463+-0.01060          5.02344+-0.01584         might be 1.0002x faster

                                                  Conf#1                    Conf#2                                      
Kraken:
   ai-astar                                   87.638+-1.246             87.086+-0.771         
   audio-beat-detection                       38.844+-0.197             38.762+-0.114         
   audio-dft                                  99.105+-2.158             97.684+-1.589           might be 1.0145x faster
   audio-fft                                  30.229+-0.050             30.168+-0.029         
   audio-oscillator                           47.659+-0.109      ?      47.814+-0.219         ?
   imaging-darkroom                           61.527+-0.720      ?      61.560+-0.824         ?
   imaging-desaturate                         44.139+-0.500             43.682+-0.117           might be 1.0104x faster
   imaging-gaussian-blur                      61.829+-2.742      ?      63.319+-2.334         ? might be 1.0241x slower
   json-parse-financial                       33.583+-0.869      ?      33.779+-0.152         ?
   json-stringify-tinderbox                   22.726+-0.513             22.201+-0.541           might be 1.0236x faster
   stanford-crypto-aes                        36.984+-0.786             36.652+-0.149         
   stanford-crypto-ccm                        33.881+-0.956      ?      34.121+-0.897         ?
   stanford-crypto-pbkdf2                     92.377+-0.224      ?      92.415+-0.189         ?
   stanford-crypto-sha256-iterative           30.209+-0.130      ?      30.303+-0.181         ?

   &lt;arithmetic&gt;                               51.481+-0.396             51.396+-0.177           might be 1.0016x faster

                                                  Conf#1                    Conf#2                                      
AsmBench:
   bigfib.cpp                               427.9843+-2.9245     ?    428.2946+-1.4885        ?
   cray.c                                   388.8401+-1.7058          387.5606+-1.4859        
   dry.c                                    445.6685+-38.6640         423.4977+-4.3387          might be 1.0524x faster
   FloatMM.c                                738.9616+-22.8370    ?    767.9878+-25.9539       ? might be 1.0393x slower
   gcc-loops.cpp                           3594.7563+-11.6217    ?   3599.8395+-15.4293       ?
   n-body.c                                 801.5333+-3.0331          799.2980+-2.4383        
   Quicksort.c                              394.9852+-3.2691     ?    396.3970+-2.5728        ?
   stepanov_container.cpp                  3309.3185+-26.7553        3305.2373+-12.1616       
   Towers.c                                 264.5931+-0.4013     ?    264.8891+-0.9552        ?

   &lt;geometric&gt;                              723.3475+-6.5352          722.7770+-2.3164          might be 1.0008x faster

                                                  Conf#1                    Conf#2                                      
Geomean of preferred means:
   &lt;scaled-result&gt;                           30.1433+-0.1118           30.0793+-0.0609          might be 1.0021x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215627</commentid>
    <comment_count>4</comment_count>
      <attachid>284878</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2016-07-29 11:44:55 -0700</bug_when>
    <thetext>Created attachment 284878
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215696</commentid>
    <comment_count>5</comment_count>
      <attachid>284878</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-29 13:59:51 -0700</bug_when>
    <thetext>Comment on attachment 284878
Patch

Clearing flags on attachment: 284878

Committed r203921: &lt;http://trac.webkit.org/changeset/203921&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1215697</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-07-29 13:59:54 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284873</attachid>
            <date>2016-07-29 10:53:33 -0700</date>
            <delta_ts>2016-07-29 11:44:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160346-20160729105220.patch</filename>
            <type>text/plain</type>
            <size>15917</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAzODA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
YjYyMTU2YzZmZmViZjEwMmIxODAyNGRmYWU1NzRmZmRhNjhiNDVkLi5lYTJhYTgxNDkxYjkzMGZl
NDQxNDI3YjUzMWE4NzgxMGJhNjY0OTljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwzOSBAQAorMjAxNi0wNy0yOSAgQmVuamFtaW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgW0pTQ10gVXNlIHRoZSBzYW1lIGRhdGEgc3RydWN0dXJlcyBmb3Ig
REZHIGFuZCBBaXIgTGl2ZW5lc3MgQW5hbHlzaXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MDM0NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEluIEFpciwgd2UgbWluaW1pemVkIG1lbW9yeSBhY2Nlc3Nl
cyBkdXJpbmcgbGl2ZW5lc3MgYW5hbHlzaXMKKyAgICAgICAgd2l0aCBhIGNvdXBsZSBvZiB0cmlj
a3M6CisgICAgICAgIC1Vc2UgYSBzaW5nbGUgU3BhcnNlIFNldCBBRFQgZm9yIHRoZSBsaXZlIHZh
bHVlIG9mIGVhY2ggYmxvY2suCisgICAgICAgIC1NYW5pcHVsYXRlIGNvbXBhY3QgcG9zaXRpdmUg
aW5kaWNlcyBpbnN0ZWFkIG9mIGhhc2hpbmcgdmFsdWVzLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YnJpbmdzIHRoZSBzYW1lIGlkZWFzIHRvIERGRy4KKworICAgICAgICBUaGlzIHBhdGNoIHN0aWxs
IHVzZXMgdGhlIHNhbWUgZml4cG9pbnQgYWxnb3JpdGhtcy4KKyAgICAgICAgVGhlIHJlYXNvbiBp
cyBFZGdlJ3MgS2lsbFN0YXR1cyB1c2VkIGJ5IG90aGVyIHBoYXNlcy4gV2UgY2Fubm90CisgICAg
ICAgIHVzZSBhIGJsb2NrLWJvdW5kYXJ5IGxpdmVuZXNzIGFsZ29yaXRobSBhbmQgdXBkYXRlIEtp
bGxTdGF0dXMKKyAgICAgICAgc2ltdWx0YW5lb3VzbHkuIEl0J3Mgc29tZXRoaW5nIEknbGwgcHJv
YmFibHkgcmV2aXNpdCBhdCBzb21lIHBvaW50LgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmZvckFsbFZhbHVlcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmR1bXApOgorICAgICAg
ICAqIGRmZy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmg6CisgICAg
ICAgIChKU0M6OkRGRzo6R3JhcGg6Om1heE5vZGVDb3VudCk6CisgICAgICAgIChKU0M6OkRGRzo6
R3JhcGg6Om5vZGVBdCk6CisgICAgICAgICogZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpzZXRMaXZlVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZH
OjpJblBsYWNlQWJzdHJhY3RTdGF0ZTo6ZW5kQmFzaWNCbG9jayk6CisgICAgICAgICogZGZnL0RG
R0xpdmVuZXNzQW5hbHlzaXNQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NB
bmFseXNpc1BoYXNlOjpMaXZlbmVzc0FuYWx5c2lzUGhhc2UpOgorICAgICAgICAoSlNDOjpERkc6
OkxpdmVuZXNzQW5hbHlzaXNQaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVz
c0FuYWx5c2lzUGhhc2U6OnByb2Nlc3NCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5l
c3NBbmFseXNpc1BoYXNlOjphZGRDaGlsZFVzZSk6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5l
c3NBbmFseXNpc1BoYXNlOjpwcm9jZXNzKTogRGVsZXRlZC4KKwogMjAxNi0wNy0yNyAgQmVuamFt
aW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBbSlNDXSBERkc6Ok5v
ZGUgc2hvdWxkIG5vdCBoYXZlIGl0cyBvd24gYWxsb2NhdG9yCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5k
ZXggNWE0MjVmMGIzZjY3ODkzNzYwODRkOTBkMzk2MThkZDI3NDJhOGFkMC4uMzMwZWNiMGRmMTlh
ZGNjNTAwZWY3MGIyYTM4MWEzZDk5ZTNlZjY4OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMjk3
MSwxMCArMjk3MSw4IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlw
ZT46OmZvckFsbFZhbHVlcygKICAgICBmb3IgKHNpemVfdCBpID0gY2xvYmJlckxpbWl0OyBpLS07
KQogICAgICAgICBmdW5jdG9yKGZvck5vZGUobV9zdGF0ZS5ibG9jaygpLT5hdChpKSkpOwogICAg
IGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0
ZXJhdG9yIGl0ZXIgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZC5iZWdpbigpOwot
ICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9zdGF0ZS5ibG9jaygpLT5z
c2EtPmxpdmVBdEhlYWQuZW5kKCk7Ci0gICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVy
KQotICAgICAgICAgICAgZnVuY3Rvcihmb3JOb2RlKCppdGVyKSk7CisgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkKQorICAgICAgICAgICAg
ZnVuY3Rvcihmb3JOb2RlKG5vZGUpKTsKICAgICB9CiAgICAgZm9yIChzaXplX3QgaSA9IG1fc3Rh
dGUudmFyaWFibGVzKCkubnVtYmVyT2ZBcmd1bWVudHMoKTsgaS0tOykKICAgICAgICAgZnVuY3Rv
cihtX3N0YXRlLnZhcmlhYmxlcygpLmFyZ3VtZW50KGkpKTsKQEAgLTMwMzIsMTAgKzMwMzAsNyBA
QCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpkdW1wKFByaW50
U3RyZWFtJiBvdXQpCiAgICAgQ29tbWFQcmludGVyIGNvbW1hKCIgIik7CiAgICAgSGFzaFNldDxO
b2RlKj4gc2VlbjsKICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0gU1NBKSB7Ci0gICAgICAgIEhh
c2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVB
dEhlYWQuYmVnaW4oKTsKLSAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IG1f
c3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOwotICAgICAgICBmb3IgKDsgaXRl
ciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICAgICAgTm9kZSogbm9kZSA9ICppdGVyOworICAg
ICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZCkg
ewogICAgICAgICAgICAgc2Vlbi5hZGQobm9kZSk7CiAgICAgICAgICAgICBBYnN0cmFjdFZhbHVl
JiB2YWx1ZSA9IGZvck5vZGUobm9kZSk7CiAgICAgICAgICAgICBpZiAodmFsdWUuaXNDbGVhcigp
KQpAQCAtMzA1MiwxMCArMzA0Nyw3IEBAIHZvaWQgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCBub2RlLCAiOiIsIHZhbHVlKTsKICAgICB9CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09
IFNTQSkgewotICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fc3RhdGUu
YmxvY2soKS0+c3NhLT5saXZlQXRUYWlsLmJlZ2luKCk7Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+
OjppdGVyYXRvciBlbmQgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0VGFpbC5lbmQoKTsK
LSAgICAgICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIE5vZGUq
IG5vZGUgPSAqaXRlcjsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zdGF0ZS5ibG9jaygp
LT5zc2EtPmxpdmVBdFRhaWwpIHsKICAgICAgICAgICAgIGlmIChzZWVuLmNvbnRhaW5zKG5vZGUp
KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgQWJzdHJhY3RWYWx1ZSYg
dmFsdWUgPSBmb3JOb2RlKG5vZGUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAppbmRleCA5MzFkYWVmNGNkMzg4ODgzYjQxOTk4M2E1Njg5YTNlYzEwM2M4NGNjLi5m
NDJkN2JiOTJiOTc4ZGU0NDBhMzJhYzdhYzA0Njg4MDY5YmY0NjY2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaApAQCAtMjQ5LDEwICsyNDksOSBAQCBzdHJ1Y3Qg
QmFzaWNCbG9jayA6IFJlZkNvdW50ZWQ8QmFzaWNCbG9jaz4gewogCiAgICAgICAgIEF2YWlsYWJp
bGl0eU1hcCBhdmFpbGFiaWxpdHlBdEhlYWQ7CiAgICAgICAgIEF2YWlsYWJpbGl0eU1hcCBhdmFp
bGFiaWxpdHlBdFRhaWw7Ci0gICAgICAgIAotICAgICAgICBib29sIGxpdmVBdFRhaWxJc0RpcnR5
IHsgZmFsc2UgfTsKLSAgICAgICAgSGFzaFNldDxOb2RlKj4gbGl2ZUF0VGFpbDsKLSAgICAgICAg
SGFzaFNldDxOb2RlKj4gbGl2ZUF0SGVhZDsKKworICAgICAgICBWZWN0b3I8Tm9kZSo+IGxpdmVB
dEhlYWQ7CisgICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0VGFpbDsKICAgICAgICAgc3RydWN0
IE5vZGVBYnN0cmFjdFZhbHVlUGFpciB7CiAgICAgICAgICAgICBOb2RlKiBub2RlOwogICAgICAg
ICAgICAgQWJzdHJhY3RWYWx1ZSB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHR3JhcGguaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aAppbmRleCA5NmI0N2QxOTcwOWM1YmJhNjc4MjM5YzczMDQzOTY5NzRmZTE0MDJhLi4wNzUzNTky
YTZmMjgzNzdjODVhYjU0OWIxMjljZGZlMjFmNWIzNjljIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdHcmFwaC5oCkBAIC0xOTUsNiArMTk1LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
bm9kZTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVOb2RlKE5vZGUqKTsKKyAgICB1bnNpZ25lZCBt
YXhOb2RlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQorICAgIE5vZGUq
IG5vZGVBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpbmRleF07IH0K
IAogICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKaW5kZXggZTdjZWJiOGQ0M2Ix
MmJjM2RjN2ExNzM2YjlhNDIyODE4MGJlMjZjNy4uNTQyZjg5NjhhZTllOGYwZjI4YjhhNmRiNGRh
OWM3OTFkZWE1ZGE5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJ
blBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKQEAgLTc0LDE3ICs3NCwxNCBAQCB2b2lkIEluUGxh
Y2VBYnN0cmFjdFN0YXRlOjpiZWdpbkJhc2ljQmxvY2soQmFzaWNCbG9jayogYmFzaWNCbG9jaykK
ICAgICBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IGJhc2ljQmxvY2stPmNmYVN0cnVjdHVyZUNs
b2JiZXJTdGF0ZUF0SGVhZDsKIH0KIAotc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFw
PE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBIYXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3N0
YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoSGFzaE1hcDxOb2RlKiwgQWJzdHJhY3RWYWx1ZT4mIHZh
bHVlcywgY29uc3QgVmVjdG9yPE5vZGUqPiYgbGl2ZU5vZGVzKQogewogICAgIHZhbHVlcy5jbGVh
cigpOwotICAgIAotICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbGl2ZS5iZWdp
bigpOwotICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBlbmQgPSBsaXZlLmVuZCgpOwotICAg
IGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAgICAgICB2YWx1ZXMuYWRkKCppdGVyLCBB
YnN0cmFjdFZhbHVlKCkpOworICAgIGZvciAoTm9kZSogbm9kZSA6IGxpdmVOb2RlcykKKyAgICAg
ICAgdmFsdWVzLmFkZChub2RlLCBBYnN0cmFjdFZhbHVlKCkpOwogfQogCi1zdGF0aWMgdm9pZCBz
ZXRMaXZlVmFsdWVzKFZlY3RvcjxCYXNpY0Jsb2NrOjpTU0FEYXRhOjpOb2RlQWJzdHJhY3RWYWx1
ZVBhaXI+JiB2YWx1ZXMsIEhhc2hTZXQ8Tm9kZSo+JiBsaXZlKQorc3RhdGljIHZvaWQgc2V0TGl2
ZVZhbHVlcyhWZWN0b3I8QmFzaWNCbG9jazo6U1NBRGF0YTo6Tm9kZUFic3RyYWN0VmFsdWVQYWly
PiYgdmFsdWVzLCBjb25zdCBWZWN0b3I8Tm9kZSo+JiBsaXZlKQogewogICAgIHZhbHVlcy5yZXNp
emUoMCk7CiAgICAgdmFsdWVzLnJlc2VydmVDYXBhY2l0eShsaXZlLnNpemUoKSk7CkBAIC0yMDMs
MTAgKzIwMCw3IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6OmVuZEJhc2ljQmxvY2soKQog
ICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGJsb2NrLT52YWx1ZXNBdFRhaWwuc2l6ZSgp
OyArK2kpCiAgICAgICAgICAgICBjaGFuZ2VkIHw9IGJsb2NrLT52YWx1ZXNBdFRhaWxbaV0ubWVy
Z2UobV92YXJpYWJsZXNbaV0pOwogCi0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBp
dGVyID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5iZWdpbigpOwotICAgICAgICBIYXNoU2V0PE5v
ZGUqPjo6aXRlcmF0b3IgZW5kID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5lbmQoKTsKLSAgICAg
ICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUg
PSAqaXRlcjsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogYmxvY2stPnNzYS0+bGl2ZUF0VGFp
bCkgewogICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9jay0+c3NhLT52YWx1ZXNBdFRhaWwuZmlu
ZChub2RlKS0+dmFsdWUubWVyZ2UoZm9yTm9kZShub2RlKSk7CiAgICAgICAgIH0KICAgICAgICAg
YnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVuZXNz
QW5hbHlzaXNQaGFzZS5jcHAKaW5kZXggZmE3NTdmZjBlOThjYzhjY2RjNzMyYjM0YWU0ZWFmMjAw
YTRjOTJkNi4uOTU0NTNjMWQ4OGI2NGU5YzA2YWRmZTNmYmRhZmU3MzNmYjY2ODMxOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1Bo
YXNlLmNwcApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCkBAIC0yOSwxMCArMjksMTMgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkK
IAogI2luY2x1ZGUgIkRGR0Jhc2ljQmxvY2tJbmxpbmVzLmgiCisjaW5jbHVkZSAiREZHQmxvY2tN
YXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdJbnNlcnRp
b25TZXQuaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CisjaW5jbHVkZSA8d3RmL0luZGV4U3BhcnNlU2V0
Lmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApAQCAtNDAsNjAgKzQzLDc3
IEBAIGNsYXNzIExpdmVuZXNzQW5hbHlzaXNQaGFzZSA6IHB1YmxpYyBQaGFzZSB7CiBwdWJsaWM6
CiAgICAgTGl2ZW5lc3NBbmFseXNpc1BoYXNlKEdyYXBoJiBncmFwaCkKICAgICAgICAgOiBQaGFz
ZShncmFwaCwgImxpdmVuZXNzIGFuYWx5c2lzIikKKyAgICAgICAgLCBtX2RpcnR5QmxvY2tzKG1f
Z3JhcGgubnVtQmxvY2tzKCkpCisgICAgICAgICwgbV9saXZlQXRIZWFkKG1fZ3JhcGgpCisgICAg
ICAgICwgbV9saXZlQXRUYWlsKG1fZ3JhcGgpCisgICAgICAgICwgbV93b3Jrc2V0KGdyYXBoLm1h
eE5vZGVDb3VudCgpIC0gMSkKICAgICB7CiAgICAgfQotICAgIAorCiAgICAgYm9vbCBydW4oKQog
ICAgIHsKLSAgICAgICAgQVNTRVJUKG1fZ3JhcGgubV9mb3JtID09IFNTQSk7Ci0gICAgICAgIAot
ICAgICAgICAvLyBMaXZlbmVzcyBpcyBhIGJhY2t3YXJkcyBhbmFseXNpczsgdGhlIHJvb3RzIGFy
ZSB0aGUgYmxvY2tzIHRoYXQKLSAgICAgICAgLy8gZW5kIGluIGEgdGVybWluYWwgKFJldHVybi9U
aHJvdy9UaHJvd1JlZmVyZW5jZUVycm9yKS4gRm9yIG5vdywgd2UKLSAgICAgICAgLy8gdXNlIGEg
Zml4cG9pbnQgZm9ybXVsYXRpb24gc2luY2UgbGl2ZW5lc3MgaXMgYSByYXBpZCBhbmFseXNpcyB3
aXRoCi0gICAgICAgIC8vIGNvbnZlcmdlbmNlIGd1YXJhbnRlZWQgYWZ0ZXIgTyhjb25uZWN0aXZp
dHkpLgotICAgICAgICAKLSAgICAgICAgLy8gU3RhcnQgYnkgYXNzdW1pbmcgdGhhdCBldmVyeXRo
aW5nIGlzIGRlYWQuCi0gICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbV9ncmFw
aC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykgeworICAgICAgICAvLyBTdGFydCB3aXRoIGFs
bCB2YWxpZCBibG9jayBkaXJ0eS4KKyAgICAgICAgQmxvY2tJbmRleCBudW1CbG9jayA9IG1fZ3Jh
cGgubnVtQmxvY2tzKCk7CisgICAgICAgIG1fZGlydHlCbG9ja3MuZW5zdXJlU2l6ZShudW1CbG9j
ayk7CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8
IG51bUJsb2NrOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmJsb2Nr
KGJsb2NrSW5kZXgpKQorICAgICAgICAgICAgICAgIG1fZGlydHlCbG9ja3MucXVpY2tTZXQoYmxv
Y2tJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBGaXhwb2ludCB1bnRpbCB3ZSBkbyBu
b3QgYWRkIGFueSBuZXcgbGl2ZSB2YWx1ZXMgYXQgdGFpbC4KKyAgICAgICAgYm9vbCBjaGFuZ2Vk
OworICAgICAgICBkbyB7CisgICAgICAgICAgICBjaGFuZ2VkID0gZmFsc2U7CisKKyAgICAgICAg
ICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gbnVtQmxvY2s7IGJsb2NrSW5kZXgtLTsp
IHsKKyAgICAgICAgICAgICAgICBpZiAoIW1fZGlydHlCbG9ja3MucXVpY2tDbGVhcihibG9ja0lu
ZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IHByb2Nlc3NCbG9jayhibG9ja0luZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfSB3aGlsZSAoY2hhbmdlZCk7CisKKyAgICAgICAgLy8gVXBkYXRlIHRoZSBwZXItYmxvY2sg
bm9kZSBsaXN0IGZvciBsaXZlIGFuZCB0YWlsLgorICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxv
Y2tJbmRleCA9IG51bUJsb2NrOyBibG9ja0luZGV4LS07KSB7CiAgICAgICAgICAgICBCYXNpY0Js
b2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7CiAgICAgICAgICAgICBpZiAo
IWJsb2NrKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgYmxvY2stPnNz
YS0+bGl2ZUF0VGFpbElzRGlydHkgPSB0cnVlOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+bGl2
ZUF0SGVhZC5jbGVhcigpOwotICAgICAgICAgICAgYmxvY2stPnNzYS0+bGl2ZUF0VGFpbC5jbGVh
cigpOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBtX2No
YW5nZWQgPSBmYWxzZTsKLSAgICAgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0g
bV9ncmFwaC5udW1CbG9ja3MoKTsgYmxvY2tJbmRleC0tOykKLSAgICAgICAgICAgICAgICBwcm9j
ZXNzKGJsb2NrSW5kZXgpOwotICAgICAgICB9IHdoaWxlIChtX2NoYW5nZWQpOwotICAgICAgICAK
LSAgICAgICAgaWYgKCFtX2dyYXBoLmJsb2NrKDApLT5zc2EtPmxpdmVBdEhlYWQuaXNFbXB0eSgp
KSB7Ci0gICAgICAgICAgICBERkdfQ1JBU0goCi0gICAgICAgICAgICAgICAgbV9ncmFwaCwgbnVs
bHB0ciwKLSAgICAgICAgICAgICAgICB0b0NTdHJpbmcoCi0gICAgICAgICAgICAgICAgICAgICJC
YWQgbGl2ZW5lc3MgYW5hbHlzaXMgcmVzdWx0OiBsaXZlIGF0IHJvb3QgaXMgbm90IGVtcHR5OiAi
LAotICAgICAgICAgICAgICAgICAgICBub2RlTGlzdER1bXAobV9ncmFwaC5ibG9jaygwKS0+c3Nh
LT5saXZlQXRIZWFkKSkuZGF0YSgpKTsKKworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8mIGxpdmVBdEhlYWRJbmRpY2VzID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhd
OworICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4mIGxpdmVBdEhlYWQgPSBibG9jay0+c3Nh
LT5saXZlQXRIZWFkOworICAgICAgICAgICAgICAgIGxpdmVBdEhlYWQucmVzaXplKDApOworICAg
ICAgICAgICAgICAgIGxpdmVBdEhlYWQucmVzZXJ2ZUNhcGFjaXR5KGxpdmVBdEhlYWRJbmRpY2Vz
LnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IGxpdmVBdEhl
YWRJbmRpY2VzKQorICAgICAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnVuY2hlY2tlZEFwcGVu
ZChtX2dyYXBoLm5vZGVBdChpbmRleCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgIGNvbnN0IGF1dG8mIGxpdmVBdFRhaWxJbmRpY2VzID0gbV9saXZlQXRU
YWlsW2Jsb2NrSW5kZXhdOworICAgICAgICAgICAgICAgIFZlY3RvcjxOb2RlKj4mIGxpdmVBdFRh
aWwgPSBibG9jay0+c3NhLT5saXZlQXRUYWlsOworICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwu
cmVzaXplKDApOworICAgICAgICAgICAgICAgIGxpdmVBdFRhaWwucmVzZXJ2ZUNhcGFjaXR5KGxp
dmVBdFRhaWxJbmRpY2VzLnNpemUoKSk7CisgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
bmRleCA6IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XSkKKyAgICAgICAgICAgICAgICAgICAgbGl2
ZUF0VGFpbC51bmNoZWNrZWRBcHBlbmQobV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAg
ICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKIHByaXZhdGU6Ci0gICAgdm9pZCBwcm9jZXNzKEJsb2NrSW5kZXggYmxvY2tJbmRleCkKKyAg
ICBib29sIHByb2Nlc3NCbG9jayhCbG9ja0luZGV4IGJsb2NrSW5kZXgpCiAgICAgewogICAgICAg
ICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGguYmxvY2soYmxvY2tJbmRleCk7Ci0gICAgICAg
IGlmICghYmxvY2spCi0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVF9XSVRIX01F
U1NBR0UoYmxvY2ssICJPbmx5IGRpcnR5IGJsb2NrcyBuZWVkcyB1cGRhdGVzLiBBIG51bGwgYmxv
Y2sgc2hvdWxkIG5ldmVyIGJlIGRpcnR5LiIpOworICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdF
KG1fd29ya3NldC5pc0VtcHR5KCksICJQcmV2aW91cyB1c2Ugb2YgdGhlIHdvcmtzZXQgc2hvdWxk
IGhhdmUgYmVlbiBjbGVhcmVkIHdoaWxlIHVwZGF0aW5nIHRoZSB2YWx1ZXMgbGl2ZSBhdCBoZWFk
LiIpOwogCi0gICAgICAgIGlmICghYmxvY2stPnNzYS0+bGl2ZUF0VGFpbElzRGlydHkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWxJc0RpcnR5ID0g
ZmFsc2U7CisgICAgICAgIG1fd29ya3NldC5jbGVhcigpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4IDogbV9saXZlQXRUYWlsW2Jsb2NrSW5kZXhdKQorICAgICAgICAgICAgbV93b3Jrc2V0
LmFkZChpbmRleCk7CiAKLSAgICAgICAgbV9saXZlID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsK
ICAgICAgICAgZm9yICh1bnNpZ25lZCBub2RlSW5kZXggPSBibG9jay0+c2l6ZSgpOyBub2RlSW5k
ZXgtLTspIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBibG9jay0+YXQobm9kZUluZGV4KTsK
LSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBHaXZlbiBhbiBVcHNpbG9uOgogICAgICAg
ICAgICAgLy8KICAgICAgICAgICAgIC8vICAgIG46IFVwc2lsb24oQHgsIF5wKQpAQCAtMTE0LDQ5
ICsxMzQsNjQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChu
b2RlLT5vcCgpKSB7CiAgICAgICAgICAgICBjYXNlIFVwc2lsb246IHsKKyAgICAgICAgICAgICAg
ICBBU1NFUlRfV0lUSF9NRVNTQUdFKCFtX3dvcmtzZXQuY29udGFpbnMobm9kZS0+aW5kZXgoKSks
ICJVcHNpbG9uIHNob3VsZCBub3QgYmUgdXNlZCBhcyBkZWZzIGJ5IG90aGVyIG5vZGVzLiIpOwor
CiAgICAgICAgICAgICAgICAgTm9kZSogcGhpID0gbm9kZS0+cGhpKCk7Ci0gICAgICAgICAgICAg
ICAgbV9saXZlLnJlbW92ZShwaGkpOwotICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUobm9k
ZSk7Ci0gICAgICAgICAgICAgICAgbV9saXZlLmFkZChub2RlLT5jaGlsZDEoKS5ub2RlKCkpOwor
ICAgICAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUocGhpLT5pbmRleCgpKTsKKyAgICAgICAg
ICAgICAgICBtX3dvcmtzZXQuYWRkKG5vZGUtPmNoaWxkMSgpLT5pbmRleCgpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKICAgICAgICAg
ICAgIGNhc2UgUGhpOiB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIG1f
bGl2ZS5yZW1vdmUobm9kZSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LnJlbW92ZShub2Rl
LT5pbmRleCgpKTsKICAgICAgICAgICAgICAgICBERkdfTk9ERV9ET19UT19DSElMRFJFTihtX2dy
YXBoLCBub2RlLCBhZGRDaGlsZFVzZSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
ICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGZvciAoTm9kZSogbm9kZSA6IG1f
bGl2ZSkgewotICAgICAgICAgICAgaWYgKCFibG9jay0+c3NhLT5saXZlQXRIZWFkLmNvbnRhaW5z
KG5vZGUpKSB7Ci0gICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBibG9jay0+cHJlZGVjZXNzb3JzLnNpemUoKTsgaS0tOykg
ewotICAgICAgICAgICAgICAgICAgICBCYXNpY0Jsb2NrKiBwcmVkZWNlc3NvciA9IGJsb2NrLT5w
cmVkZWNlc3NvcnNbaV07Ci0gICAgICAgICAgICAgICAgICAgIGlmIChwcmVkZWNlc3Nvci0+c3Nh
LT5saXZlQXRUYWlsLmFkZChub2RlKS5pc05ld0VudHJ5KQotICAgICAgICAgICAgICAgICAgICAg
ICAgcHJlZGVjZXNzb3ItPnNzYS0+bGl2ZUF0VGFpbElzRGlydHkgPSB0cnVlOworCisgICAgICAg
IC8vIFVwZGF0ZSBsaXZlIGF0IGhlYWQuCisgICAgICAgIGF1dG8mIGxpdmVBdEhlYWQgPSBtX2xp
dmVBdEhlYWRbYmxvY2tJbmRleF07CisgICAgICAgIGlmIChtX3dvcmtzZXQuc2l6ZSgpID09IGxp
dmVBdEhlYWQuc2l6ZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGZv
ciAodW5zaWduZWQgbGl2ZUluZGV4QXRIZWFkIDogbGl2ZUF0SGVhZCkKKyAgICAgICAgICAgIG1f
d29ya3NldC5yZW1vdmUobGl2ZUluZGV4QXRIZWFkKTsKKyAgICAgICAgQVNTRVJUKCFtX3dvcmtz
ZXQuaXNFbXB0eSgpKTsKKworICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZl
QXRIZWFkLnNpemUoKSArIG1fd29ya3NldC5zaXplKCkpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IG5ld1ZhbHVlIDogbV93b3Jrc2V0KQorICAgICAgICAgICAgbGl2ZUF0SGVhZC51bmNoZWNrZWRB
cHBlbmQobmV3VmFsdWUpOworCisgICAgICAgIGJvb2wgY2hhbmdlZFByZWRlY2Vzc29yID0gZmFs
c2U7CisgICAgICAgIGZvciAoQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgOiBibG9jay0+cHJlZGVj
ZXNzb3JzKSB7CisgICAgICAgICAgICBhdXRvJiBsaXZlQXRUYWlsID0gbV9saXZlQXRUYWlsW3By
ZWRlY2Vzc29yXTsKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgbmV3VmFsdWUgOiBtX3dvcmtz
ZXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobGl2ZUF0VGFpbC5hZGQobmV3VmFsdWUpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICghbV9kaXJ0eUJsb2Nrcy5xdWlja1NldChwcmVkZWNlc3Nv
ci0+aW5kZXgpKQorICAgICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZFByZWRlY2Vzc29yID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAg
ICAgYmxvY2stPnNzYS0+bGl2ZUF0SGVhZCA9IFdURk1vdmUobV9saXZlKTsKKyAgICAgICAgcmV0
dXJuIGNoYW5nZWRQcmVkZWNlc3NvcjsKICAgICB9Ci0gICAgCi0gICAgdm9pZCBhZGRDaGlsZFVz
ZShOb2RlKiwgRWRnZSYgZWRnZSkKLSAgICB7Ci0gICAgICAgIGFkZENoaWxkVXNlKGVkZ2UpOwot
ICAgIH0KLSAgICAKLSAgICB2b2lkIGFkZENoaWxkVXNlKEVkZ2UmIGVkZ2UpCisKKyAgICBBTFdB
WVNfSU5MSU5FIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2UpCiAgICAgewotICAg
ICAgICBlZGdlLnNldEtpbGxTdGF0dXMobV9saXZlLmFkZChlZGdlLm5vZGUoKSkuaXNOZXdFbnRy
eSA/IERvZXNLaWxsIDogRG9lc05vdEtpbGwpOworICAgICAgICBib29sIG5ld0VudHJ5ID0gbV93
b3Jrc2V0LmFkZChlZGdlLT5pbmRleCgpKTsKKyAgICAgICAgZWRnZS5zZXRLaWxsU3RhdHVzKG5l
d0VudHJ5ID8gRG9lc0tpbGwgOiBEb2VzTm90S2lsbCk7CiAgICAgfQotICAgIAotICAgIGJvb2wg
bV9jaGFuZ2VkOwotICAgIEhhc2hTZXQ8Tm9kZSo+IG1fbGl2ZTsKKworICAgIC8vIEJsb2NrcyB3
aXRoIG5ldyBsaXZlIHZhbHVlcyBhdCB0YWlsLgorICAgIEJpdFZlY3RvciBtX2RpcnR5QmxvY2tz
OworCisgICAgLy8gTGl2ZSB2YWx1ZXMgcGVyIGJsb2NrIGVkZ2UuCisgICAgQmxvY2tNYXA8VmVj
dG9yPHVuc2lnbmVkLCAwLCBVbnNhZmVWZWN0b3JPdmVyZmxvdywgMT4+IG1fbGl2ZUF0SGVhZDsK
KyAgICBCbG9ja01hcDxIYXNoU2V0PHVuc2lnbmVkLCBEZWZhdWx0SGFzaDx1bnNpZ25lZD46Okhh
c2gsIFdURjo6VW5zaWduZWRXaXRoWmVyb0tleUhhc2hUcmFpdHM8dW5zaWduZWQ+Pj4gbV9saXZl
QXRUYWlsOworCisgICAgLy8gU2luZ2xlIHNwYXJzZSBzZXQgYWxsb2NhdGVkIG9uY2UgYW5kIHVz
ZWQgYnkgZXZlcnkgYmFzaWMgYmxvY2suCisgICAgSW5kZXhTcGFyc2VTZXQ8VW5zYWZlVmVjdG9y
T3ZlcmZsb3c+IG1fd29ya3NldDsKIH07CiAKIGJvb2wgcGVyZm9ybUxpdmVuZXNzQW5hbHlzaXMo
R3JhcGgmIGdyYXBoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>284878</attachid>
            <date>2016-07-29 11:44:55 -0700</date>
            <delta_ts>2016-07-29 13:59:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-160346-20160729114342.patch</filename>
            <type>text/plain</type>
            <size>15327</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAzOTA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM5IEBA
CisyMDE2LTA3LTI5ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KKwor
ICAgICAgICBbSlNDXSBVc2UgdGhlIHNhbWUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBERkcgYW5kIEFp
ciBMaXZlbmVzcyBBbmFseXNpcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTYwMzQ2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgR2VvZmZyZXkgR2FyZW4u
CisKKyAgICAgICAgSW4gQWlyLCB3ZSBtaW5pbWl6ZWQgbWVtb3J5IGFjY2Vzc2VzIGR1cmluZyBs
aXZlbmVzcyBhbmFseXNpcworICAgICAgICB3aXRoIGEgY291cGxlIG9mIHRyaWNrczoKKyAgICAg
ICAgLVVzZSBhIHNpbmdsZSBTcGFyc2UgU2V0IEFEVCBmb3IgdGhlIGxpdmUgdmFsdWUgb2YgZWFj
aCBibG9jay4KKyAgICAgICAgLU1hbmlwdWxhdGUgY29tcGFjdCBwb3NpdGl2ZSBpbmRpY2VzIGlu
c3RlYWQgb2YgaGFzaGluZyB2YWx1ZXMuCisKKyAgICAgICAgVGhpcyBwYXRjaCBicmluZ3MgdGhl
IHNhbWUgaWRlYXMgdG8gREZHLgorCisgICAgICAgIFRoaXMgcGF0Y2ggc3RpbGwgdXNlcyB0aGUg
c2FtZSBmaXhwb2ludCBhbGdvcml0aG1zLgorICAgICAgICBUaGUgcmVhc29uIGlzIEVkZ2UncyBL
aWxsU3RhdHVzIHVzZWQgYnkgb3RoZXIgcGhhc2VzLiBXZSBjYW5ub3QKKyAgICAgICAgdXNlIGEg
YmxvY2stYm91bmRhcnkgbGl2ZW5lc3MgYWxnb3JpdGhtIGFuZCB1cGRhdGUgS2lsbFN0YXR1cwor
ICAgICAgICBzaW11bHRhbmVvdXNseS4gSXQncyBzb21ldGhpbmcgSSdsbCBwcm9iYWJseSByZXZp
c2l0IGF0IHNvbWUgcG9pbnQuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3Ry
YWN0U3RhdGVUeXBlPjo6Zm9yQWxsVmFsdWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFj
dEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZHVtcCk6CisgICAgICAgICogZGZnL0RG
R0Jhc2ljQmxvY2suaDoKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6
REZHOjpHcmFwaDo6bWF4Tm9kZUNvdW50KToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6bm9k
ZUF0KToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwOgorICAgICAg
ICAoSlNDOjpERkc6OnNldExpdmVWYWx1ZXMpOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VB
YnN0cmFjdFN0YXRlOjplbmRCYXNpY0Jsb2NrKToKKyAgICAgICAgKiBkZmcvREZHTGl2ZW5lc3NB
bmFseXNpc1BoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lzUGhh
c2U6OkxpdmVuZXNzQW5hbHlzaXNQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6TGl2ZW5lc3NB
bmFseXNpc1BoYXNlOjpydW4pOgorICAgICAgICAoSlNDOjpERkc6OkxpdmVuZXNzQW5hbHlzaXNQ
aGFzZTo6cHJvY2Vzc0Jsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lz
UGhhc2U6OmFkZENoaWxkVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpMaXZlbmVzc0FuYWx5c2lz
UGhhc2U6OnByb2Nlc3MpOiBEZWxldGVkLgorCiAyMDE2LTA3LTI5ICBZdXN1a2UgU3V6dWtpICA8
dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIEJ5VmFsSW5mbyBp
cyBvbmx5IHVzZWQgaW4gSklUIGVuYWJsZWQgZW52aXJvbm1lbnRzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCShyZXZpc2lvbiAyMDM5MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5NjMsMTAg
KzI5NjMsOCBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAg
Zm9yIChzaXplX3QgaSA9IGNsb2JiZXJMaW1pdDsgaS0tOykKICAgICAgICAgZnVuY3Rvcihmb3JO
b2RlKG1fc3RhdGUuYmxvY2soKS0+YXQoaSkpKTsKICAgICBpZiAobV9ncmFwaC5tX2Zvcm0gPT0g
U1NBKSB7Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBpdGVyID0gbV9zdGF0ZS5i
bG9jaygpLT5zc2EtPmxpdmVBdEhlYWQuYmVnaW4oKTsKLSAgICAgICAgSGFzaFNldDxOb2RlKj46
Oml0ZXJhdG9yIGVuZCA9IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRIZWFkLmVuZCgpOwot
ICAgICAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikKLSAgICAgICAgICAgIGZ1bmN0b3Io
Zm9yTm9kZSgqaXRlcikpOworICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX3N0YXRlLmJsb2Nr
KCktPnNzYS0+bGl2ZUF0SGVhZCkKKyAgICAgICAgICAgIGZ1bmN0b3IoZm9yTm9kZShub2RlKSk7
CiAgICAgfQogICAgIGZvciAoc2l6ZV90IGkgPSBtX3N0YXRlLnZhcmlhYmxlcygpLm51bWJlck9m
QXJndW1lbnRzKCk7IGktLTspCiAgICAgICAgIGZ1bmN0b3IobV9zdGF0ZS52YXJpYWJsZXMoKS5h
cmd1bWVudChpKSk7CkBAIC0zMDI0LDEwICszMDIyLDcgQEAgdm9pZCBBYnN0cmFjdEludGVycHJl
dGVyPEFic3RyYWN0U3RhdGVUeQogICAgIENvbW1hUHJpbnRlciBjb21tYSgiICIpOwogICAgIEhh
c2hTZXQ8Tm9kZSo+IHNlZW47CiAgICAgaWYgKG1fZ3JhcGgubV9mb3JtID09IFNTQSkgewotICAg
ICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IG1fc3RhdGUuYmxvY2soKS0+c3Nh
LT5saXZlQXRIZWFkLmJlZ2luKCk7Ci0gICAgICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRvciBl
bmQgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0SGVhZC5lbmQoKTsKLSAgICAgICAgZm9y
ICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgICAgIE5vZGUqIG5vZGUgPSAqaXRl
cjsKKyAgICAgICAgZm9yIChOb2RlKiBub2RlIDogbV9zdGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVB
dEhlYWQpIHsKICAgICAgICAgICAgIHNlZW4uYWRkKG5vZGUpOwogICAgICAgICAgICAgQWJzdHJh
Y3RWYWx1ZSYgdmFsdWUgPSBmb3JOb2RlKG5vZGUpOwogICAgICAgICAgICAgaWYgKHZhbHVlLmlz
Q2xlYXIoKSkKQEAgLTMwNDQsMTAgKzMwMzksNyBAQCB2b2lkIEFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIG91dC5wcmludChjb21tYSwgbm9kZSwgIjoiLCB2YWx1
ZSk7CiAgICAgfQogICAgIGlmIChtX2dyYXBoLm1fZm9ybSA9PSBTU0EpIHsKLSAgICAgICAgSGFz
aFNldDxOb2RlKj46Oml0ZXJhdG9yIGl0ZXIgPSBtX3N0YXRlLmJsb2NrKCktPnNzYS0+bGl2ZUF0
VGFpbC5iZWdpbigpOwotICAgICAgICBIYXNoU2V0PE5vZGUqPjo6aXRlcmF0b3IgZW5kID0gbV9z
dGF0ZS5ibG9jaygpLT5zc2EtPmxpdmVBdFRhaWwuZW5kKCk7Ci0gICAgICAgIGZvciAoOyBpdGVy
ICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6IG1fc3RhdGUuYmxvY2soKS0+c3NhLT5saXZlQXRUYWlsKSB7
CiAgICAgICAgICAgICBpZiAoc2Vlbi5jb250YWlucyhub2RlKSkKICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgIEFic3RyYWN0VmFsdWUmIHZhbHVlID0gZm9yTm9kZShub2Rl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCShyZXZp
c2lvbiAyMDM5MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtMjQ5LDEwICsyNDksOSBAQCBzdHJ1Y3QgQmFzaWNCbG9jayA6
IFJlZkNvdW50ZWQ8QmFzaWNCbG9jCiAKICAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJp
bGl0eUF0SGVhZDsKICAgICAgICAgQXZhaWxhYmlsaXR5TWFwIGF2YWlsYWJpbGl0eUF0VGFpbDsK
LSAgICAgICAgCi0gICAgICAgIGJvb2wgbGl2ZUF0VGFpbElzRGlydHkgeyBmYWxzZSB9OwotICAg
ICAgICBIYXNoU2V0PE5vZGUqPiBsaXZlQXRUYWlsOwotICAgICAgICBIYXNoU2V0PE5vZGUqPiBs
aXZlQXRIZWFkOworCisgICAgICAgIFZlY3RvcjxOb2RlKj4gbGl2ZUF0SGVhZDsKKyAgICAgICAg
VmVjdG9yPE5vZGUqPiBsaXZlQXRUYWlsOwogICAgICAgICBzdHJ1Y3QgTm9kZUFic3RyYWN0VmFs
dWVQYWlyIHsKICAgICAgICAgICAgIE5vZGUqIG5vZGU7CiAgICAgICAgICAgICBBYnN0cmFjdFZh
bHVlIHZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNp
b24gMjAzOTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xOTUsNiArMTk1LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbm9k
ZTsKICAgICB9CiAgICAgdm9pZCBkZWxldGVOb2RlKE5vZGUqKTsKKyAgICB1bnNpZ25lZCBtYXhO
b2RlQ291bnQoKSBjb25zdCB7IHJldHVybiBtX25vZGVzLnNpemUoKTsgfQorICAgIE5vZGUqIG5v
ZGVBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9ub2Rlc1tpbmRleF07IH0KIAog
ICAgIHZvaWQgZGV0aHJlYWQoKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3BwCShyZXZpc2lvbiAyMDM5
MDgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsMTcgKzc0LDE0IEBAIHZvaWQgSW5QbGFjZUFic3Ry
YWN0U3RhdGU6OmJlZ2luQmFzaWNCbG8KICAgICBtX3N0cnVjdHVyZUNsb2JiZXJTdGF0ZSA9IGJh
c2ljQmxvY2stPmNmYVN0cnVjdHVyZUNsb2JiZXJTdGF0ZUF0SGVhZDsKIH0KIAotc3RhdGljIHZv
aWQgc2V0TGl2ZVZhbHVlcyhIYXNoTWFwPE5vZGUqLCBBYnN0cmFjdFZhbHVlPiYgdmFsdWVzLCBI
YXNoU2V0PE5vZGUqPiYgbGl2ZSkKK3N0YXRpYyB2b2lkIHNldExpdmVWYWx1ZXMoSGFzaE1hcDxO
b2RlKiwgQWJzdHJhY3RWYWx1ZT4mIHZhbHVlcywgY29uc3QgVmVjdG9yPE5vZGUqPiYgbGl2ZU5v
ZGVzKQogewogICAgIHZhbHVlcy5jbGVhcigpOwotICAgIAotICAgIEhhc2hTZXQ8Tm9kZSo+Ojpp
dGVyYXRvciBpdGVyID0gbGl2ZS5iZWdpbigpOwotICAgIEhhc2hTZXQ8Tm9kZSo+OjppdGVyYXRv
ciBlbmQgPSBsaXZlLmVuZCgpOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKQotICAg
ICAgICB2YWx1ZXMuYWRkKCppdGVyLCBBYnN0cmFjdFZhbHVlKCkpOworICAgIGZvciAoTm9kZSog
bm9kZSA6IGxpdmVOb2RlcykKKyAgICAgICAgdmFsdWVzLmFkZChub2RlLCBBYnN0cmFjdFZhbHVl
KCkpOwogfQogCi1zdGF0aWMgdm9pZCBzZXRMaXZlVmFsdWVzKFZlY3RvcjxCYXNpY0Jsb2NrOjpT
U0FEYXRhOjpOb2RlQWJzdHJhY3RWYWx1ZVBhaXI+JiB2YWx1ZXMsIEhhc2hTZXQ8Tm9kZSo+JiBs
aXZlKQorc3RhdGljIHZvaWQgc2V0TGl2ZVZhbHVlcyhWZWN0b3I8QmFzaWNCbG9jazo6U1NBRGF0
YTo6Tm9kZUFic3RyYWN0VmFsdWVQYWlyPiYgdmFsdWVzLCBjb25zdCBWZWN0b3I8Tm9kZSo+JiBs
aXZlKQogewogICAgIHZhbHVlcy5yZXNpemUoMCk7CiAgICAgdmFsdWVzLnJlc2VydmVDYXBhY2l0
eShsaXZlLnNpemUoKSk7CkBAIC0yMDMsMTAgKzIwMCw3IEBAIGJvb2wgSW5QbGFjZUFic3RyYWN0
U3RhdGU6OmVuZEJhc2ljQmxvY2sKICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBibG9j
ay0+dmFsdWVzQXRUYWlsLnNpemUoKTsgKytpKQogICAgICAgICAgICAgY2hhbmdlZCB8PSBibG9j
ay0+dmFsdWVzQXRUYWlsW2ldLm1lcmdlKG1fdmFyaWFibGVzW2ldKTsKIAotICAgICAgICBIYXNo
U2V0PE5vZGUqPjo6aXRlcmF0b3IgaXRlciA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwuYmVnaW4o
KTsKLSAgICAgICAgSGFzaFNldDxOb2RlKj46Oml0ZXJhdG9yIGVuZCA9IGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwuZW5kKCk7Ci0gICAgICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0g
ICAgICAgICAgICBOb2RlKiBub2RlID0gKml0ZXI7CisgICAgICAgIGZvciAoTm9kZSogbm9kZSA6
IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWwpIHsKICAgICAgICAgICAgIGNoYW5nZWQgfD0gYmxvY2st
PnNzYS0+dmFsdWVzQXRUYWlsLmZpbmQobm9kZSktPnZhbHVlLm1lcmdlKGZvck5vZGUobm9kZSkp
OwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lzUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZW5lc3NBbmFseXNpc1BoYXNlLmNwcAkocmV2aXNpb24g
MjAzOTA4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlbmVzc0FuYWx5c2lz
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMywgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDEwICsyOSwxMyBAQAogI2lm
IEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiREZHQmFzaWNCbG9ja0lubGluZXMuaCIKKyNp
bmNsdWRlICJERkdCbG9ja01hcElubGluZXMuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2lu
Y2x1ZGUgIkRGR0luc2VydGlvblNldC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KKyNpbmNsdWRlIDx3
dGYvSW5kZXhTcGFyc2VTZXQuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewog
CkBAIC00MCw2MCArNDMsNzYgQEAgY2xhc3MgTGl2ZW5lc3NBbmFseXNpc1BoYXNlIDogcHVibGlj
IFBoYQogcHVibGljOgogICAgIExpdmVuZXNzQW5hbHlzaXNQaGFzZShHcmFwaCYgZ3JhcGgpCiAg
ICAgICAgIDogUGhhc2UoZ3JhcGgsICJsaXZlbmVzcyBhbmFseXNpcyIpCisgICAgICAgICwgbV9k
aXJ0eUJsb2NrcyhtX2dyYXBoLm51bUJsb2NrcygpKQorICAgICAgICAsIG1fbGl2ZUF0SGVhZCht
X2dyYXBoKQorICAgICAgICAsIG1fbGl2ZUF0VGFpbChtX2dyYXBoKQorICAgICAgICAsIG1fd29y
a3NldChncmFwaC5tYXhOb2RlQ291bnQoKSAtIDEpCiAgICAgewogICAgIH0KLSAgICAKKwogICAg
IGJvb2wgcnVuKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChtX2dyYXBoLm1fZm9ybSA9PSBTU0Ep
OwotICAgICAgICAKLSAgICAgICAgLy8gTGl2ZW5lc3MgaXMgYSBiYWNrd2FyZHMgYW5hbHlzaXM7
IHRoZSByb290cyBhcmUgdGhlIGJsb2NrcyB0aGF0Ci0gICAgICAgIC8vIGVuZCBpbiBhIHRlcm1p
bmFsIChSZXR1cm4vVGhyb3cvVGhyb3dSZWZlcmVuY2VFcnJvcikuIEZvciBub3csIHdlCi0gICAg
ICAgIC8vIHVzZSBhIGZpeHBvaW50IGZvcm11bGF0aW9uIHNpbmNlIGxpdmVuZXNzIGlzIGEgcmFw
aWQgYW5hbHlzaXMgd2l0aAotICAgICAgICAvLyBjb252ZXJnZW5jZSBndWFyYW50ZWVkIGFmdGVy
IE8oY29ubmVjdGl2aXR5KS4KLSAgICAgICAgCi0gICAgICAgIC8vIFN0YXJ0IGJ5IGFzc3VtaW5n
IHRoYXQgZXZlcnl0aGluZyBpcyBkZWFkLgotICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJ
bmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspIHsKKyAgICAgICAgLy8g
U3RhcnQgd2l0aCBhbGwgdmFsaWQgYmxvY2sgZGlydHkuCisgICAgICAgIEJsb2NrSW5kZXggbnVt
QmxvY2sgPSBtX2dyYXBoLm51bUJsb2NrcygpOworICAgICAgICBtX2RpcnR5QmxvY2tzLmVuc3Vy
ZVNpemUobnVtQmxvY2spOworICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IDA7
IGJsb2NrSW5kZXggPCBudW1CbG9jazsgKytibG9ja0luZGV4KSB7CisgICAgICAgICAgICBpZiAo
bV9ncmFwaC5ibG9jayhibG9ja0luZGV4KSkKKyAgICAgICAgICAgICAgICBtX2RpcnR5QmxvY2tz
LnF1aWNrU2V0KGJsb2NrSW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgLy8gRml4cG9pbnQg
dW50aWwgd2UgZG8gbm90IGFkZCBhbnkgbmV3IGxpdmUgdmFsdWVzIGF0IHRhaWwuCisgICAgICAg
IGJvb2wgY2hhbmdlZDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgY2hhbmdlZCA9IGZhbHNl
OworCisgICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXggYmxvY2tJbmRleCA9IG51bUJsb2NrOyBi
bG9ja0luZGV4LS07KSB7CisgICAgICAgICAgICAgICAgaWYgKCFtX2RpcnR5QmxvY2tzLnF1aWNr
Q2xlYXIoYmxvY2tJbmRleCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgICAgICAgICAgY2hhbmdlZCB8PSBwcm9jZXNzQmxvY2soYmxvY2tJbmRleCk7CisgICAgICAg
ICAgICB9CisgICAgICAgIH0gd2hpbGUgKGNoYW5nZWQpOworCisgICAgICAgIC8vIFVwZGF0ZSB0
aGUgcGVyLWJsb2NrIG5vZGUgbGlzdCBmb3IgbGl2ZSBhbmQgdGFpbC4KKyAgICAgICAgZm9yIChC
bG9ja0luZGV4IGJsb2NrSW5kZXggPSBudW1CbG9jazsgYmxvY2tJbmRleC0tOykgewogICAgICAg
ICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5kZXgpOwogICAg
ICAgICAgICAgaWYgKCFibG9jaykKICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAg
ICAgIGJsb2NrLT5zc2EtPmxpdmVBdFRhaWxJc0RpcnR5ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJs
b2NrLT5zc2EtPmxpdmVBdEhlYWQuY2xlYXIoKTsKLSAgICAgICAgICAgIGJsb2NrLT5zc2EtPmxp
dmVBdFRhaWwuY2xlYXIoKTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgZG8gewotICAg
ICAgICAgICAgbV9jaGFuZ2VkID0gZmFsc2U7Ci0gICAgICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IG1fZ3JhcGgubnVtQmxvY2tzKCk7IGJsb2NrSW5kZXgtLTspCi0gICAgICAg
ICAgICAgICAgcHJvY2VzcyhibG9ja0luZGV4KTsKLSAgICAgICAgfSB3aGlsZSAobV9jaGFuZ2Vk
KTsKLSAgICAgICAgCi0gICAgICAgIGlmICghbV9ncmFwaC5ibG9jaygwKS0+c3NhLT5saXZlQXRI
ZWFkLmlzRW1wdHkoKSkgewotICAgICAgICAgICAgREZHX0NSQVNIKAotICAgICAgICAgICAgICAg
IG1fZ3JhcGgsIG51bGxwdHIsCi0gICAgICAgICAgICAgICAgdG9DU3RyaW5nKAotICAgICAgICAg
ICAgICAgICAgICAiQmFkIGxpdmVuZXNzIGFuYWx5c2lzIHJlc3VsdDogbGl2ZSBhdCByb290IGlz
IG5vdCBlbXB0eTogIiwKLSAgICAgICAgICAgICAgICAgICAgbm9kZUxpc3REdW1wKG1fZ3JhcGgu
YmxvY2soMCktPnNzYS0+bGl2ZUF0SGVhZCkpLmRhdGEoKSk7CisKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRIZWFkSW5kaWNlcyA9IG1fbGl2ZUF0SGVh
ZFtibG9ja0luZGV4XTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8Tm9kZSo+JiBsaXZlQXRIZWFk
ID0gYmxvY2stPnNzYS0+bGl2ZUF0SGVhZDsKKyAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJl
c2l6ZSgwKTsKKyAgICAgICAgICAgICAgICBsaXZlQXRIZWFkLnJlc2VydmVDYXBhY2l0eShsaXZl
QXRIZWFkSW5kaWNlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaW5k
ZXggOiBsaXZlQXRIZWFkSW5kaWNlcykKKyAgICAgICAgICAgICAgICAgICAgbGl2ZUF0SGVhZC51
bmNoZWNrZWRBcHBlbmQobV9ncmFwaC5ub2RlQXQoaW5kZXgpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvJiBsaXZlQXRUYWlsSW5kaWNl
cyA9IG1fbGl2ZUF0VGFpbFtibG9ja0luZGV4XTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8Tm9k
ZSo+JiBsaXZlQXRUYWlsID0gYmxvY2stPnNzYS0+bGl2ZUF0VGFpbDsKKyAgICAgICAgICAgICAg
ICBsaXZlQXRUYWlsLnJlc2l6ZSgwKTsKKyAgICAgICAgICAgICAgICBsaXZlQXRUYWlsLnJlc2Vy
dmVDYXBhY2l0eShsaXZlQXRUYWlsSW5kaWNlcy5zaXplKCkpOworICAgICAgICAgICAgICAgIGZv
ciAodW5zaWduZWQgaW5kZXggOiBtX2xpdmVBdFRhaWxbYmxvY2tJbmRleF0pCisgICAgICAgICAg
ICAgICAgICAgIGxpdmVBdFRhaWwudW5jaGVja2VkQXBwZW5kKG1fZ3JhcGgubm9kZUF0KGluZGV4
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgcHJvY2VzcyhCbG9ja0luZGV4IGJs
b2NrSW5kZXgpCisgICAgYm9vbCBwcm9jZXNzQmxvY2soQmxvY2tJbmRleCBibG9ja0luZGV4KQog
ICAgIHsKICAgICAgICAgQmFzaWNCbG9jayogYmxvY2sgPSBtX2dyYXBoLmJsb2NrKGJsb2NrSW5k
ZXgpOwotICAgICAgICBpZiAoIWJsb2NrKQotICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBB
U1NFUlRfV0lUSF9NRVNTQUdFKGJsb2NrLCAiT25seSBkaXJ0eSBibG9ja3MgbmVlZHMgdXBkYXRl
cy4gQSBudWxsIGJsb2NrIHNob3VsZCBuZXZlciBiZSBkaXJ0eS4iKTsKIAotICAgICAgICBpZiAo
IWJsb2NrLT5zc2EtPmxpdmVBdFRhaWxJc0RpcnR5KQotICAgICAgICAgICAgcmV0dXJuOwotICAg
ICAgICBibG9jay0+c3NhLT5saXZlQXRUYWlsSXNEaXJ0eSA9IGZhbHNlOworICAgICAgICBtX3dv
cmtzZXQuY2xlYXIoKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA6IG1fbGl2ZUF0VGFp
bFtibG9ja0luZGV4XSkKKyAgICAgICAgICAgIG1fd29ya3NldC5hZGQoaW5kZXgpOwogCi0gICAg
ICAgIG1fbGl2ZSA9IGJsb2NrLT5zc2EtPmxpdmVBdFRhaWw7CiAgICAgICAgIGZvciAodW5zaWdu
ZWQgbm9kZUluZGV4ID0gYmxvY2stPnNpemUoKTsgbm9kZUluZGV4LS07KSB7CiAgICAgICAgICAg
ICBOb2RlKiBub2RlID0gYmxvY2stPmF0KG5vZGVJbmRleCk7Ci0gICAgICAgICAgICAKKwogICAg
ICAgICAgICAgLy8gR2l2ZW4gYW4gVXBzaWxvbjoKICAgICAgICAgICAgIC8vCiAgICAgICAgICAg
ICAvLyAgICBuOiBVcHNpbG9uKEB4LCBecCkKQEAgLTExNCw0OSArMTMzLDY0IEBAIHByaXZhdGU6
CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgICAg
ICAgICAgY2FzZSBVcHNpbG9uOiB7CisgICAgICAgICAgICAgICAgQVNTRVJUX1dJVEhfTUVTU0FH
RSghbV93b3Jrc2V0LmNvbnRhaW5zKG5vZGUtPmluZGV4KCkpLCAiVXBzaWxvbiBzaG91bGQgbm90
IGJlIHVzZWQgYXMgZGVmcyBieSBvdGhlciBub2Rlcy4iKTsKKwogICAgICAgICAgICAgICAgIE5v
ZGUqIHBoaSA9IG5vZGUtPnBoaSgpOwotICAgICAgICAgICAgICAgIG1fbGl2ZS5yZW1vdmUocGhp
KTsKLSAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOwotICAgICAgICAgICAgICAg
IG1fbGl2ZS5hZGQobm9kZS0+Y2hpbGQxKCkubm9kZSgpKTsKKyAgICAgICAgICAgICAgICBtX3dv
cmtzZXQucmVtb3ZlKHBoaS0+aW5kZXgoKSk7CisgICAgICAgICAgICAgICAgbV93b3Jrc2V0LmFk
ZChub2RlLT5jaGlsZDEoKS0+aW5kZXgoKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIFBoaTogewogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBtX2xpdmUucmVtb3ZlKG5vZGUpOwor
ICAgICAgICAgICAgICAgIG1fd29ya3NldC5yZW1vdmUobm9kZS0+aW5kZXgoKSk7CiAgICAgICAg
ICAgICAgICAgREZHX05PREVfRE9fVE9fQ0hJTERSRU4obV9ncmFwaCwgbm9kZSwgYWRkQ2hpbGRV
c2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICB9Ci0g
ICAgICAgIAotICAgICAgICBmb3IgKE5vZGUqIG5vZGUgOiBtX2xpdmUpIHsKLSAgICAgICAgICAg
IGlmICghYmxvY2stPnNzYS0+bGl2ZUF0SGVhZC5jb250YWlucyhub2RlKSkgewotICAgICAgICAg
ICAgICAgIG1fY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gYmxvY2stPnByZWRlY2Vzc29ycy5zaXplKCk7IGktLTspIHsKLSAgICAgICAgICAgICAgICAg
ICAgQmFzaWNCbG9jayogcHJlZGVjZXNzb3IgPSBibG9jay0+cHJlZGVjZXNzb3JzW2ldOwotICAg
ICAgICAgICAgICAgICAgICBpZiAocHJlZGVjZXNzb3ItPnNzYS0+bGl2ZUF0VGFpbC5hZGQobm9k
ZSkuaXNOZXdFbnRyeSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHByZWRlY2Vzc29yLT5zc2Et
PmxpdmVBdFRhaWxJc0RpcnR5ID0gdHJ1ZTsKKworICAgICAgICAvLyBVcGRhdGUgbGl2ZSBhdCBo
ZWFkLgorICAgICAgICBhdXRvJiBsaXZlQXRIZWFkID0gbV9saXZlQXRIZWFkW2Jsb2NrSW5kZXhd
OworICAgICAgICBpZiAobV93b3Jrc2V0LnNpemUoKSA9PSBsaXZlQXRIZWFkLnNpemUoKSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGxpdmVJbmRl
eEF0SGVhZCA6IGxpdmVBdEhlYWQpCisgICAgICAgICAgICBtX3dvcmtzZXQucmVtb3ZlKGxpdmVJ
bmRleEF0SGVhZCk7CisgICAgICAgIEFTU0VSVCghbV93b3Jrc2V0LmlzRW1wdHkoKSk7CisKKyAg
ICAgICAgbGl2ZUF0SGVhZC5yZXNlcnZlQ2FwYWNpdHkobGl2ZUF0SGVhZC5zaXplKCkgKyBtX3dv
cmtzZXQuc2l6ZSgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBuZXdWYWx1ZSA6IG1fd29ya3Nl
dCkKKyAgICAgICAgICAgIGxpdmVBdEhlYWQudW5jaGVja2VkQXBwZW5kKG5ld1ZhbHVlKTsKKwor
ICAgICAgICBib29sIGNoYW5nZWRQcmVkZWNlc3NvciA9IGZhbHNlOworICAgICAgICBmb3IgKEJh
c2ljQmxvY2sqIHByZWRlY2Vzc29yIDogYmxvY2stPnByZWRlY2Vzc29ycykgeworICAgICAgICAg
ICAgYXV0byYgbGl2ZUF0VGFpbCA9IG1fbGl2ZUF0VGFpbFtwcmVkZWNlc3Nvcl07CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIG5ld1ZhbHVlIDogbV93b3Jrc2V0KSB7CisgICAgICAgICAgICAg
ICAgaWYgKGxpdmVBdFRhaWwuYWRkKG5ld1ZhbHVlKSkgeworICAgICAgICAgICAgICAgICAgICBp
ZiAoIW1fZGlydHlCbG9ja3MucXVpY2tTZXQocHJlZGVjZXNzb3ItPmluZGV4KSkKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNoYW5nZWRQcmVkZWNlc3NvciA9IHRydWU7CiAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9Ci0gICAgICAgIGJsb2NrLT5zc2EtPmxpdmVB
dEhlYWQgPSBXVEZNb3ZlKG1fbGl2ZSk7CisgICAgICAgIHJldHVybiBjaGFuZ2VkUHJlZGVjZXNz
b3I7CiAgICAgfQotICAgIAotICAgIHZvaWQgYWRkQ2hpbGRVc2UoTm9kZSosIEVkZ2UmIGVkZ2Up
Ci0gICAgewotICAgICAgICBhZGRDaGlsZFVzZShlZGdlKTsKLSAgICB9Ci0gICAgCi0gICAgdm9p
ZCBhZGRDaGlsZFVzZShFZGdlJiBlZGdlKQorCisgICAgQUxXQVlTX0lOTElORSB2b2lkIGFkZENo
aWxkVXNlKE5vZGUqLCBFZGdlJiBlZGdlKQogICAgIHsKLSAgICAgICAgZWRnZS5zZXRLaWxsU3Rh
dHVzKG1fbGl2ZS5hZGQoZWRnZS5ub2RlKCkpLmlzTmV3RW50cnkgPyBEb2VzS2lsbCA6IERvZXNO
b3RLaWxsKTsKKyAgICAgICAgYm9vbCBuZXdFbnRyeSA9IG1fd29ya3NldC5hZGQoZWRnZS0+aW5k
ZXgoKSk7CisgICAgICAgIGVkZ2Uuc2V0S2lsbFN0YXR1cyhuZXdFbnRyeSA/IERvZXNLaWxsIDog
RG9lc05vdEtpbGwpOwogICAgIH0KLSAgICAKLSAgICBib29sIG1fY2hhbmdlZDsKLSAgICBIYXNo
U2V0PE5vZGUqPiBtX2xpdmU7CisKKyAgICAvLyBCbG9ja3Mgd2l0aCBuZXcgbGl2ZSB2YWx1ZXMg
YXQgdGFpbC4KKyAgICBCaXRWZWN0b3IgbV9kaXJ0eUJsb2NrczsKKworICAgIC8vIExpdmUgdmFs
dWVzIHBlciBibG9jayBlZGdlLgorICAgIEJsb2NrTWFwPFZlY3Rvcjx1bnNpZ25lZCwgMCwgVW5z
YWZlVmVjdG9yT3ZlcmZsb3csIDE+PiBtX2xpdmVBdEhlYWQ7CisgICAgQmxvY2tNYXA8SGFzaFNl
dDx1bnNpZ25lZCwgRGVmYXVsdEhhc2g8dW5zaWduZWQ+OjpIYXNoLCBXVEY6OlVuc2lnbmVkV2l0
aFplcm9LZXlIYXNoVHJhaXRzPHVuc2lnbmVkPj4+IG1fbGl2ZUF0VGFpbDsKKworICAgIC8vIFNp
bmdsZSBzcGFyc2Ugc2V0IGFsbG9jYXRlZCBvbmNlIGFuZCB1c2VkIGJ5IGV2ZXJ5IGJhc2ljIGJs
b2NrLgorICAgIEluZGV4U3BhcnNlU2V0PFVuc2FmZVZlY3Rvck92ZXJmbG93PiBtX3dvcmtzZXQ7
CiB9OwogCiBib29sIHBlcmZvcm1MaXZlbmVzc0FuYWx5c2lzKEdyYXBoJiBncmFwaCkK
</data>

          </attachment>
      

    </bug>

</bugzilla>