<?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>165042</bug_id>
          
          <creation_ts>2016-11-23 01:51:42 -0800</creation_ts>
          <short_desc>[css-grid] Convert grid representation into a class</short_desc>
          <delta_ts>2016-11-24 07:08:32 -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>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>
          
          <blocked>165007</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sergio Villar Senin">svillar</reporter>
          <assigned_to name="Sergio Villar Senin">svillar</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>jfernandez</cc>
    
    <cc>joepeck</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>rego</cc>
    
    <cc>svillar</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1253469</commentid>
    <comment_count>0</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-23 01:51:42 -0800</bug_when>
    <thetext>[css-grid] Convert grid representation into a class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253470</commentid>
    <comment_count>1</comment_count>
      <attachid>295362</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-23 01:57:42 -0800</bug_when>
    <thetext>Created attachment 295362
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253479</commentid>
    <comment_count>2</comment_count>
      <attachid>295362</attachid>
    <who name="Javier Fernandez">jfernandez</who>
    <bug_when>2016-11-23 04:53:03 -0800</bug_when>
    <thetext>Comment on attachment 295362
Patch

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

I like the change, I think it&apos;s a great code refactoring that improves code readability.

&gt; Source/WebCore/rendering/RenderGrid.cpp:54
&gt; +        for (size_t row = oldRowSize; row &lt; numRows(); ++row)

Isn&apos; t numRows() the same value than maximumRowSize ?

&gt; Source/WebCore/rendering/RenderGrid.cpp:55
&gt; +            m_grid[row].grow(numColumns());

Perhaps we should cache numColums() value.

&gt; Source/WebCore/rendering/RenderGrid.cpp:58
&gt; +    if (maximumColumnSize &gt; numColumns()) {

If we have numColumns() cached, we can use it here as well.

&gt; Source/WebCore/rendering/RenderGrid.cpp:59
&gt; +        for (size_t row = 0; row &lt; numRows(); ++row)

Ditto.

&gt; Source/WebCore/rendering/RenderGrid.cpp:1687
&gt; +        m_grid.insert(*child, GridArea(area.rows, area.columns));

Why not using static initializer ? 

    m_grid.insert(*child, { area.rows, area.columns });

&gt; Source/WebCore/rendering/RenderGrid.cpp:2726
&gt; +    return m_grid.numRows() ? m_grid.numColumns() : GridPositionsResolver::explicitGridColumnCount(style(), m_autoRepeatColumns);

I wonder whether it&apos;d be better/clearer to define a more explicit method to figure out the grid size (eg, isEmtty(), has{Rows, Columns} )</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253494</commentid>
    <comment_count>3</comment_count>
      <attachid>295362</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-23 08:41:19 -0800</bug_when>
    <thetext>Comment on attachment 295362
Patch

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

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:54
&gt;&gt; +        for (size_t row = oldRowSize; row &lt; numRows(); ++row)
&gt; 
&gt; Isn&apos; t numRows() the same value than maximumRowSize ?

Rigth. But that was already there, I just moved the code around

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:1687
&gt;&gt; +        m_grid.insert(*child, GridArea(area.rows, area.columns));
&gt; 
&gt; Why not using static initializer ? 
&gt; 
&gt;     m_grid.insert(*child, { area.rows, area.columns });

ACK

&gt;&gt; Source/WebCore/rendering/RenderGrid.cpp:2726
&gt;&gt; +    return m_grid.numRows() ? m_grid.numColumns() : GridPositionsResolver::explicitGridColumnCount(style(), m_autoRepeatColumns);
&gt; 
&gt; I wonder whether it&apos;d be better/clearer to define a more explicit method to figure out the grid size (eg, isEmtty(), has{Rows, Columns} )

It&apos;s used just here, I don&apos;t think it&apos;s really needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253495</commentid>
    <comment_count>4</comment_count>
      <attachid>295369</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-23 09:04:14 -0800</bug_when>
    <thetext>Created attachment 295369
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253582</commentid>
    <comment_count>5</comment_count>
      <attachid>295369</attachid>
    <who name="Manuel Rego Casasnovas">rego</who>
    <bug_when>2016-11-24 07:01:00 -0800</bug_when>
    <thetext>Comment on attachment 295369
Patch

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1253583</commentid>
    <comment_count>6</comment_count>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2016-11-24 07:08:32 -0800</bug_when>
    <thetext>Committed r208973: &lt;http://trac.webkit.org/changeset/208973&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295362</attachid>
            <date>2016-11-23 01:57:42 -0800</date>
            <delta_ts>2016-11-23 09:04:06 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165042-20161123105727.patch</filename>
            <type>text/plain</type>
            <size>11079</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjFkN2FhYjFjM2NlN2E4
ZWUwY2JjNDQwOGQ3ZjFhMWQ5MTU1M2ZkOS4uZmEyNjI1YmU5Mjk4MGJjYjYwOWRhYjdmM2U4YmVk
M2RkNDJiZDNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE2LTExLTIzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gQ29udmVydCBncmlkIHJlcHJlc2VudGF0aW9uIGludG8gYSBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MDQyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gZmFyIGdyaWRzIGFyZSByZXBy
ZXNlbnRlZCBhcyBWZWN0b3JzIG9mIFZlY3RvcnMuIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBpc3N1
ZXMgYXNzb2NpYXRlZAorICAgICAgICB0byB0aGF0IGRlY2lzaW9uLiBGaXJzdCBvciBhbGwsIHRo
ZSBzb3VyY2UgY29kZSBpbiBSZW5kZXJHcmlkIGFzc3VtZXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGF0
CisgICAgICAgIGRhdGEgc3RydWN0dXJlLCBtZWFuaW5nIHRoYXQgd2UgY2Fubm90IGV2ZW50dWFs
bHkgY2hhbmdlIGl0IHdpdGhvdXQgY2hhbmdpbmcgYSBsb3Qgb2YKKyAgICAgICAgY29kZS4gQXBh
cnQgZnJvbSB0aGUgY291cGxpbmcgdGhlcmUgaXMgYW5vdGhlciBpc3N1ZSwgUmVuZGVyR3JpZCBp
cyBmdWxsIG9mIG1ldGhvZHMgdG8KKyAgICAgICAgYWNjZXNzIGFuZCBtYW5pcHVsYXRlIHRoYXQg
ZGF0YSBzdHJ1Y3R1cmUuCisKKyAgICAgICAgSW5zdGVhZCwgaXQnZCBiZSBtdWNoIGJldHRlciB0
byBoYXZlIGEgR3JpZCBjbGFzcyBlbmNhcHN1bGF0aW5nIGJvdGggdGhlIGRhdGEgc3RydWN0dXJl
cyBhbmQKKyAgICAgICAgdGhlIG1ldGhvZHMgcmVxdWlyZWQgdG8gYWNjZXNzL21hbmlwdWxhdGUg
aXQuIE5vdGUgdGhhdCBmb2xsb3ctdXAgcGF0Y2hlcyB3aWxsIG1vdmUgZXZlbgorICAgICAgICBt
b3JlIGRhdGEgYW5kIHByb2NlZHVyZXMgaW50byB0aGlzIG5ldyBjbGFzcyBmcm9tIHRoZSBSZW5k
ZXJHcmlkIGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkIGFzIHRoaXMgaXMg
YSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWQ6OmVuc3VyZUdyaWRTaXplKTogTW92ZWQg
ZnJvbSBSZW5kZXJHcmlkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6R3JpZDo6aW5z
ZXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkOjpjbGVhcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6R3JpZEl0ZXJhdG9yOjpHcmlk
SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3JpZENvbHVtbkNvdW50
KTogVXNlIEdyaWQncyBtZXRob2RzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3Jp
ZFJvd0NvdW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0
ZW1zT25HcmlkKTogVXNlIEdyaWQncyBtZXRob2RzIHRvIGluc2VydCBjaGlsZHJlbi4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVy
YXRvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VTcGVjaWZp
ZWRNYWpvckF4aXNJdGVtc09uR3JpZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
R3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR3JpZDo6bnVtVHJhY2tzKTogVXNlIEdyaWQncyBtZXRob2RzLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6ZW5zdXJlR3JpZFNpemUpOiBEZWxldGVkLiBNb3ZlZCB0
byBHcmlkIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6aW5zZXJ0SXRlbUlu
dG9HcmlkKTogRGVsZXRlZC4gTW92ZWQgdG8gR3JpZCBjbGFzcy4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyR3JpZC5oOgorCiAyMDE2LTExLTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBNYWtlIG5vcm1hbCBjYXNlIGZhc3QgaW4gdGhlIGlucHV0IGVsZW1l
bnQgbGltaXRTdHJpbmcgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmNwcAppbmRleCBkMDU0YjRiMzA4NDE5NDU5NmRjYThlOWQ3NmZmM2QxZDIzMGQ0YWNhLi43NWM5
MmQ2YWRlZTAyYjZiM2NmOGYxNWNmYzE0MDI2ZjkyZGE4NjU2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBAIC00Niw2ICs0NiwzNyBAQCBlbnVtIFRyYWNrU2l6ZVJl
c3RyaWN0aW9uIHsKICAgICBGb3JiaWRJbmZpbml0eSwKIH07CiAKK3ZvaWQgUmVuZGVyR3JpZDo6
R3JpZDo6ZW5zdXJlR3JpZFNpemUodW5zaWduZWQgbWF4aW11bVJvd1NpemUsIHVuc2lnbmVkIG1h
eGltdW1Db2x1bW5TaXplKQoreworICAgIGNvbnN0IHNpemVfdCBvbGRSb3dTaXplID0gbnVtUm93
cygpOworICAgIGlmIChtYXhpbXVtUm93U2l6ZSA+IG9sZFJvd1NpemUpIHsKKyAgICAgICAgbV9n
cmlkLmdyb3cobWF4aW11bVJvd1NpemUpOworICAgICAgICBmb3IgKHNpemVfdCByb3cgPSBvbGRS
b3dTaXplOyByb3cgPCBudW1Sb3dzKCk7ICsrcm93KQorICAgICAgICAgICAgbV9ncmlkW3Jvd10u
Z3JvdyhudW1Db2x1bW5zKCkpOworICAgIH0KKworICAgIGlmIChtYXhpbXVtQ29sdW1uU2l6ZSA+
IG51bUNvbHVtbnMoKSkgeworICAgICAgICBmb3IgKHNpemVfdCByb3cgPSAwOyByb3cgPCBudW1S
b3dzKCk7ICsrcm93KQorICAgICAgICAgICAgbV9ncmlkW3Jvd10uZ3JvdyhtYXhpbXVtQ29sdW1u
U2l6ZSk7CisgICAgfQorfQorCit2b2lkIFJlbmRlckdyaWQ6OkdyaWQ6Omluc2VydChSZW5kZXJC
b3gmIGNoaWxkLCBjb25zdCBHcmlkQXJlYSYgYXJlYSkKK3sKKyAgICBBU1NFUlQoYXJlYS5yb3dz
LmlzVHJhbnNsYXRlZERlZmluaXRlKCkgJiYgYXJlYS5jb2x1bW5zLmlzVHJhbnNsYXRlZERlZmlu
aXRlKCkpOworICAgIGVuc3VyZUdyaWRTaXplKGFyZWEucm93cy5lbmRMaW5lKCksIGFyZWEuY29s
dW1ucy5lbmRMaW5lKCkpOworCisgICAgZm9yIChjb25zdCBhdXRvJiByb3cgOiBhcmVhLnJvd3Mp
IHsKKyAgICAgICAgZm9yIChjb25zdCBhdXRvJiBjb2x1bW4gOiBhcmVhLmNvbHVtbnMpCisgICAg
ICAgICAgICBtX2dyaWRbcm93XVtjb2x1bW5dLmFwcGVuZCgmY2hpbGQpOworICAgIH0KK30KKwor
dm9pZCBSZW5kZXJHcmlkOjpHcmlkOjpjbGVhcigpCit7CisgICAgbV9ncmlkLnJlc2l6ZSgwKTsK
K30KKwogY2xhc3MgR3JpZFRyYWNrIHsKIHB1YmxpYzoKICAgICBHcmlkVHJhY2soKSB7fQpAQCAt
MTQ5LDggKzE4MCw4IEBAIGNsYXNzIFJlbmRlckdyaWQ6OkdyaWRJdGVyYXRvciB7CiBwdWJsaWM6
CiAgICAgLy8gfGRpcmVjdGlvbnwgaXMgdGhlIGRpcmVjdGlvbiB0aGF0IGlzIGZpeGVkIHRvIHxm
aXhlZFRyYWNrSW5kZXh8IHNvIGUuZwogICAgIC8vIEdyaWRJdGVyYXRvcihtX2dyaWQsIEZvckNv
bHVtbnMsIDEpIHdpbGwgd2FsayBvdmVyIHRoZSByb3dzIG9mIHRoZSAybmQgY29sdW1uLgotICAg
IEdyaWRJdGVyYXRvcihjb25zdCBWZWN0b3I8VmVjdG9yPFZlY3RvcjxSZW5kZXJCb3gqLCAxPj4+
JiBncmlkLCBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uLCB1bnNpZ25lZCBmaXhl
ZFRyYWNrSW5kZXgsIHVuc2lnbmVkIHZhcnlpbmdUcmFja0luZGV4ID0gMCkKLSAgICAgICAgOiBt
X2dyaWQoZ3JpZCkKKyAgICBHcmlkSXRlcmF0b3IoY29uc3QgR3JpZCYgZ3JpZCwgR3JpZFRyYWNr
U2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgZml4ZWRUcmFja0luZGV4LCB1bnNp
Z25lZCB2YXJ5aW5nVHJhY2tJbmRleCA9IDApCisgICAgICAgIDogbV9ncmlkKGdyaWQubV9ncmlk
KQogICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKICAgICAgICAgLCBtX3Jvd0luZGV4
KChkaXJlY3Rpb24gPT0gRm9yQ29sdW1ucykgPyB2YXJ5aW5nVHJhY2tJbmRleCA6IGZpeGVkVHJh
Y2tJbmRleCkKICAgICAgICAgLCBtX2NvbHVtbkluZGV4KChkaXJlY3Rpb24gPT0gRm9yQ29sdW1u
cykgPyBmaXhlZFRyYWNrSW5kZXggOiB2YXJ5aW5nVHJhY2tJbmRleCkKQEAgLTIyNyw3ICsyNTgs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIGNvbnN0IFZlY3RvcjxWZWN0b3I8
VmVjdG9yPFJlbmRlckJveCosIDE+Pj4mIG1fZ3JpZDsKKyAgICBjb25zdCBHcmlkQXNNYXRyaXgm
IG1fZ3JpZDsKICAgICBHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gbV9kaXJlY3Rpb247CiAgICAg
dW5zaWduZWQgbV9yb3dJbmRleDsKICAgICB1bnNpZ25lZCBtX2NvbHVtbkluZGV4OwpAQCAtMzg3
LDEzICs0MTgsMTMgQEAgdm9pZCBSZW5kZXJHcmlkOjpzdHlsZURpZENoYW5nZShTdHlsZURpZmZl
cmVuY2UgZGlmZiwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWwKIHVuc2lnbmVkIFJlbmRlckdy
aWQ6OmdyaWRDb2x1bW5Db3VudCgpIGNvbnN0CiB7CiAgICAgQVNTRVJUKCFtX2dyaWRJc0RpcnR5
KTsKLSAgICByZXR1cm4gbV9ncmlkLnNpemUoKSA/IG1fZ3JpZFswXS5zaXplKCkgOiAwOworICAg
IHJldHVybiBtX2dyaWQubnVtQ29sdW1ucygpOwogfQogCiB1bnNpZ25lZCBSZW5kZXJHcmlkOjpn
cmlkUm93Q291bnQoKSBjb25zdAogewogICAgIEFTU0VSVCghbV9ncmlkSXNEaXJ0eSk7Ci0gICAg
cmV0dXJuIG1fZ3JpZC5zaXplKCk7CisgICAgcmV0dXJuIG1fZ3JpZC5udW1Sb3dzKCk7CiB9CiAK
IExheW91dFVuaXQgUmVuZGVyR3JpZDo6Y29tcHV0ZVRyYWNrQmFzZWRMb2dpY2FsSGVpZ2h0KGNv
bnN0IEdyaWRTaXppbmdEYXRhJiBzaXppbmdEYXRhKSBjb25zdApAQCAtMTUxMCwzMiArMTU0MSw2
IEBAIGJvb2wgUmVuZGVyR3JpZDo6dHJhY2tzQXJlV2lkZXJUaGFuTWluVHJhY2tCcmVhZHRoKEdy
aWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlCiB9CiAjZW5kaWYKIAotdm9pZCBSZW5kZXJHcmlk
OjplbnN1cmVHcmlkU2l6ZSh1bnNpZ25lZCBtYXhpbXVtUm93U2l6ZSwgdW5zaWduZWQgbWF4aW11
bUNvbHVtblNpemUpCi17Ci0gICAgY29uc3QgdW5zaWduZWQgb2xkUm93Q291bnQgPSBncmlkUm93
Q291bnQoKTsKLSAgICBpZiAobWF4aW11bVJvd1NpemUgPiBvbGRSb3dDb3VudCkgewotICAgICAg
ICBtX2dyaWQuZ3JvdyhtYXhpbXVtUm93U2l6ZSk7Ci0gICAgICAgIGZvciAodW5zaWduZWQgcm93
ID0gb2xkUm93Q291bnQ7IHJvdyA8IGdyaWRSb3dDb3VudCgpOyArK3JvdykKLSAgICAgICAgICAg
IG1fZ3JpZFtyb3ddLmdyb3coZ3JpZENvbHVtbkNvdW50KCkpOwotICAgIH0KLQotICAgIGlmICht
YXhpbXVtQ29sdW1uU2l6ZSA+IGdyaWRDb2x1bW5Db3VudCgpKSB7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgcm93ID0gMDsgcm93IDwgZ3JpZFJvd0NvdW50KCk7ICsrcm93KQotICAgICAgICAgICAg
bV9ncmlkW3Jvd10uZ3JvdyhtYXhpbXVtQ29sdW1uU2l6ZSk7Ci0gICAgfQotfQotCi12b2lkIFJl
bmRlckdyaWQ6Omluc2VydEl0ZW1JbnRvR3JpZChSZW5kZXJCb3gmIGNoaWxkLCBjb25zdCBHcmlk
QXJlYSYgYXJlYSkKLXsKLSAgICBBU1NFUlQoYXJlYS5yb3dzLmlzVHJhbnNsYXRlZERlZmluaXRl
KCkgJiYgYXJlYS5jb2x1bW5zLmlzVHJhbnNsYXRlZERlZmluaXRlKCkpOwotICAgIGVuc3VyZUdy
aWRTaXplKGFyZWEucm93cy5lbmRMaW5lKCksIGFyZWEuY29sdW1ucy5lbmRMaW5lKCkpOwotCi0g
ICAgZm9yIChhdXRvIHJvdyA6IGFyZWEucm93cykgewotICAgICAgICBmb3IgKGF1dG8gY29sdW1u
IDogYXJlYS5jb2x1bW5zKQotICAgICAgICAgICAgbV9ncmlkW3Jvd11bY29sdW1uXS5hcHBlbmQo
JmNoaWxkKTsKLSAgICB9Ci19Ci0KIHVuc2lnbmVkIFJlbmRlckdyaWQ6OmNvbXB1dGVBdXRvUmVw
ZWF0VHJhY2tzQ291bnQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgU2l6aW5n
T3BlcmF0aW9uIHNpemluZ09wZXJhdGlvbikgY29uc3QKIHsKICAgICBib29sIGlzUm93QXhpcyA9
IGRpcmVjdGlvbiA9PSBGb3JDb2x1bW5zOwpAQCAtMTY3OSw3ICsxNjg0LDcgQEAgdm9pZCBSZW5k
ZXJHcmlkOjpwbGFjZUl0ZW1zT25HcmlkKFNpemluZ09wZXJhdGlvbiBzaXppbmdPcGVyYXRpb24p
CiAgICAgICAgICAgICAgICAgc3BlY2lmaWVkTWFqb3JBeGlzQXV0b0dyaWRJdGVtcy5hcHBlbmQo
Y2hpbGQpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaW5zZXJ0
SXRlbUludG9HcmlkKCpjaGlsZCwgR3JpZEFyZWEoYXJlYS5yb3dzLCBhcmVhLmNvbHVtbnMpKTsK
KyAgICAgICAgbV9ncmlkLmluc2VydCgqY2hpbGQsIEdyaWRBcmVhKGFyZWEucm93cywgYXJlYS5j
b2x1bW5zKSk7CiAgICAgfQogCiAjaWYgRU5BQkxFKEFTU0VSVCkKQEAgLTE3NDMsOSArMTc0OCw3
IEBAIHZvaWQgUmVuZGVyR3JpZDo6cG9wdWxhdGVFeHBsaWNpdEdyaWRBbmRPcmRlckl0ZXJhdG9y
KCkKICAgICAgICAgbV9ncmlkSXRlbUFyZWEuc2V0KGNoaWxkLCBHcmlkQXJlYShyb3dQb3NpdGlv
bnMsIGNvbHVtblBvc2l0aW9ucykpOwogICAgIH0KIAotICAgIG1fZ3JpZC5ncm93KG1heGltdW1S
b3dJbmRleCArIHN0ZDo6YWJzKG1fc21hbGxlc3RSb3dTdGFydCkpOwotICAgIGZvciAoYXV0byYg
Y29sdW1uIDogbV9ncmlkKQotICAgICAgICBjb2x1bW4uZ3JvdyhtYXhpbXVtQ29sdW1uSW5kZXgg
KyBzdGQ6OmFicyhtX3NtYWxsZXN0Q29sdW1uU3RhcnQpKTsKKyAgICBtX2dyaWQuZW5zdXJlR3Jp
ZFNpemUobWF4aW11bVJvd0luZGV4ICsgc3RkOjphYnMobV9zbWFsbGVzdFJvd1N0YXJ0KSwgbWF4
aW11bUNvbHVtbkluZGV4ICsgc3RkOjphYnMobV9zbWFsbGVzdENvbHVtblN0YXJ0KSk7CiB9CiAK
IHN0ZDo6dW5pcXVlX3B0cjxHcmlkQXJlYT4gUmVuZGVyR3JpZDo6Y3JlYXRlRW1wdHlHcmlkQXJl
YUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoY29uc3QgUmVuZGVyQm94JiBncmlkSXRl
bSwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIHNwZWNpZmllZERpcmVjdGlvbiwgY29uc3QgR3Jp
ZFNwYW4mIHNwZWNpZmllZFBvc2l0aW9ucykgY29uc3QKQEAgLTE3ODAsNyArMTc4Myw3IEBAIHZv
aWQgUmVuZGVyR3JpZDo6cGxhY2VTcGVjaWZpZWRNYWpvckF4aXNJdGVtc09uR3JpZChjb25zdCBW
ZWN0b3I8UmVuZGVyQm94Kj4mIGF1CiAgICAgICAgICAgICBlbXB0eUdyaWRBcmVhID0gY3JlYXRl
RW1wdHlHcmlkQXJlYUF0U3BlY2lmaWVkUG9zaXRpb25zT3V0c2lkZUdyaWQoKmF1dG9HcmlkSXRl
bSwgYXV0b1BsYWNlbWVudE1ham9yQXhpc0RpcmVjdGlvbigpLCBtYWpvckF4aXNQb3NpdGlvbnMp
OwogCiAgICAgICAgIG1fZ3JpZEl0ZW1BcmVhLnNldChhdXRvR3JpZEl0ZW0sICplbXB0eUdyaWRB
cmVhKTsKLSAgICAgICAgaW5zZXJ0SXRlbUludG9HcmlkKCphdXRvR3JpZEl0ZW0sICplbXB0eUdy
aWRBcmVhKTsKKyAgICAgICAgbV9ncmlkLmluc2VydCgqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlk
QXJlYSk7CiAKICAgICAgICAgaWYgKCFpc0dyaWRBdXRvRmxvd0RlbnNlKQogICAgICAgICAgICAg
bWlub3JBeGlzQ3Vyc29ycy5zZXQobWFqb3JBeGlzSW5pdGlhbFBvc2l0aW9uLCBpc0ZvckNvbHVt
bnMgPyBlbXB0eUdyaWRBcmVhLT5yb3dzLnN0YXJ0TGluZSgpIDogZW1wdHlHcmlkQXJlYS0+Y29s
dW1ucy5zdGFydExpbmUoKSk7CkBAIC0xODUzLDcgKzE4NTYsNyBAQCB2b2lkIFJlbmRlckdyaWQ6
OnBsYWNlQXV0b01ham9yQXhpc0l0ZW1PbkdyaWQoUmVuZGVyQm94JiBncmlkSXRlbSwgQXV0b1Bs
YWNlbWVudAogICAgIH0KIAogICAgIG1fZ3JpZEl0ZW1BcmVhLnNldCgmZ3JpZEl0ZW0sICplbXB0
eUdyaWRBcmVhKTsKLSAgICBpbnNlcnRJdGVtSW50b0dyaWQoZ3JpZEl0ZW0sICplbXB0eUdyaWRB
cmVhKTsKKyAgICBtX2dyaWQuaW5zZXJ0KGdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7CiAgICAg
YXV0b1BsYWNlbWVudEN1cnNvci5maXJzdCA9IGVtcHR5R3JpZEFyZWEtPnJvd3Muc3RhcnRMaW5l
KCk7CiAgICAgYXV0b1BsYWNlbWVudEN1cnNvci5zZWNvbmQgPSBlbXB0eUdyaWRBcmVhLT5jb2x1
bW5zLnN0YXJ0TGluZSgpOwogfQpAQCAtMjcxOCw5ICsyNzIxLDkgQEAgdW5zaWduZWQgUmVuZGVy
R3JpZDo6bnVtVHJhY2tzKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24pIGNvbnN0
CiAgICAgLy8gYmVjYXVzZSBub3QgaGF2aW5nIHJvd3MgaW1wbGllcyB0aGF0IHRoZXJlIGFyZSBu
byAibm9ybWFsIiBjaGlsZHJlbiAob3V0LW9mLWZsb3cgY2hpbGRyZW4gYXJlCiAgICAgLy8gbm90
IHN0b3JlZCBpbiBtX2dyaWQpLgogICAgIGlmIChkaXJlY3Rpb24gPT0gRm9yUm93cykKLSAgICAg
ICAgcmV0dXJuIG1fZ3JpZC5zaXplKCk7CisgICAgICAgIHJldHVybiBtX2dyaWQubnVtUm93cygp
OwogCi0gICAgcmV0dXJuIG1fZ3JpZC5zaXplKCkgPyBtX2dyaWRbMF0uc2l6ZSgpIDogR3JpZFBv
c2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChzdHlsZSgpLCBtX2F1dG9S
ZXBlYXRDb2x1bW5zKTsKKyAgICByZXR1cm4gbV9ncmlkLm51bVJvd3MoKSA/IG1fZ3JpZC5udW1D
b2x1bW5zKCkgOiBHcmlkUG9zaXRpb25zUmVzb2x2ZXI6OmV4cGxpY2l0R3JpZENvbHVtbkNvdW50
KHN0eWxlKCksIG1fYXV0b1JlcGVhdENvbHVtbnMpOwogfQogCiB2b2lkIFJlbmRlckdyaWQ6OnBh
aW50Q2hpbGRyZW4oUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWlu
dE9mZnNldCwgUGFpbnRJbmZvJiBmb3JDaGlsZCwgYm9vbCB1c2VQcmludFJlY3QpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAppbmRleCBhOGZjODRiMTVmNGUzOWE4NjllOGVlMzI1
MDY5ZDZkNTFmNDZlYzE2Li5hNzY2NWFjMGMzMTI2ZmZkYjhiOWM5YjQyYmFiZDJmMjJkZGM4YzI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlkLmgKQEAgLTg4LDkgKzg4LDYgQEAg
cHJpdmF0ZToKICAgICBMYXlvdXRVbml0IGNvbXB1dGVVc2VkQnJlYWR0aE9mTWF4TGVuZ3RoKGNv
bnN0IEdyaWRUcmFja1NpemUmLCBMYXlvdXRVbml0IHVzZWRCcmVhZHRoLCBMYXlvdXRVbml0IG1h
eFNpemUpIGNvbnN0OwogICAgIHZvaWQgcmVzb2x2ZUNvbnRlbnRCYXNlZFRyYWNrU2l6aW5nRnVu
Y3Rpb25zKEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiwgR3JpZFNpemluZ0RhdGEmKSBjb25zdDsK
IAotICAgIHZvaWQgZW5zdXJlR3JpZFNpemUodW5zaWduZWQgbWF4aW11bVJvd1NpemUsIHVuc2ln
bmVkIG1heGltdW1Db2x1bW5TaXplKTsKLSAgICB2b2lkIGluc2VydEl0ZW1JbnRvR3JpZChSZW5k
ZXJCb3gmLCBjb25zdCBHcmlkQXJlYSYpOwotCiAgICAgdW5zaWduZWQgY29tcHV0ZUF1dG9SZXBl
YXRUcmFja3NDb3VudChHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIFNpemluZ09wZXJhdGlvbikg
Y29uc3Q7CiAKICAgICB0eXBlZGVmIExpc3RIYXNoU2V0PHNpemVfdD4gT3JkZXJlZFRyYWNrSW5k
ZXhTZXQ7CkBAIC0yMDAsNyArMTk3LDMwIEBAIHByaXZhdGU6CiAgICAgYm9vbCBpc09ydGhvZ29u
YWxDaGlsZChjb25zdCBSZW5kZXJCb3gmKSBjb25zdDsKICAgICBHcmlkVHJhY2tTaXppbmdEaXJl
Y3Rpb24gZmxvd0F3YXJlRGlyZWN0aW9uRm9yQ2hpbGQoY29uc3QgUmVuZGVyQm94JiwgR3JpZFRy
YWNrU2l6aW5nRGlyZWN0aW9uKSBjb25zdDsKIAotICAgIFZlY3RvcjxWZWN0b3I8VmVjdG9yPFJl
bmRlckJveCosIDE+Pj4gbV9ncmlkOworICAgIHR5cGVkZWYgVmVjdG9yPFJlbmRlckJveCosIDE+
IEdyaWRDZWxsOworICAgIHR5cGVkZWYgVmVjdG9yPFZlY3RvcjxHcmlkQ2VsbD4+IEdyaWRBc01h
dHJpeDsKKyAgICBjbGFzcyBHcmlkIGZpbmFsIHsKKyAgICBwdWJsaWM6CisgICAgICAgIEdyaWQo
KSB7IH0KKworICAgICAgICB1bnNpZ25lZCBudW1Db2x1bW5zKCkgY29uc3QgeyByZXR1cm4gbV9n
cmlkLnNpemUoKSA/IG1fZ3JpZFswXS5zaXplKCkgOiAwOyB9CisgICAgICAgIHVuc2lnbmVkIG51
bVJvd3MoKSBjb25zdCB7IHJldHVybiBtX2dyaWQuc2l6ZSgpOyB9CisKKyAgICAgICAgdm9pZCBl
bnN1cmVHcmlkU2l6ZSh1bnNpZ25lZCBtYXhpbXVtUm93U2l6ZSwgdW5zaWduZWQgbWF4aW11bUNv
bHVtblNpemUpOworICAgICAgICB2b2lkIGluc2VydChSZW5kZXJCb3gmLCBjb25zdCBHcmlkQXJl
YSYpOworCisgICAgICAgIGNvbnN0IEdyaWRDZWxsJiBjZWxsKHVuc2lnbmVkIHJvdywgdW5zaWdu
ZWQgY29sdW1uKSBjb25zdCB7IHJldHVybiBtX2dyaWRbcm93XVtjb2x1bW5dOyB9CisKKyAgICAg
ICAgdm9pZCBzaHJpbmtUb0ZpdCgpIHsgbV9ncmlkLnNocmlua1RvRml0KCk7IH0KKworICAgICAg
ICB2b2lkIGNsZWFyKCk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgR3Jp
ZEl0ZXJhdG9yOworICAgICAgICBHcmlkQXNNYXRyaXggbV9ncmlkOworICAgIH07CisgICAgR3Jp
ZCBtX2dyaWQ7CisKICAgICBWZWN0b3I8TGF5b3V0VW5pdD4gbV9jb2x1bW5Qb3NpdGlvbnM7CiAg
ICAgVmVjdG9yPExheW91dFVuaXQ+IG1fcm93UG9zaXRpb25zOwogICAgIExheW91dFVuaXQgbV9v
ZmZzZXRCZXR3ZWVuQ29sdW1uczsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>295369</attachid>
            <date>2016-11-23 09:04:14 -0800</date>
            <delta_ts>2016-11-24 07:01:00 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-165042-20161123180357.patch</filename>
            <type>text/plain</type>
            <size>11128</size>
            <attacher name="Sergio Villar Senin">svillar</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA4OTYzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjFkN2FhYjFjM2NlN2E4
ZWUwY2JjNDQwOGQ3ZjFhMWQ5MTU1M2ZkOS4uZmEyNjI1YmU5Mjk4MGJjYjYwOWRhYjdmM2U4YmVk
M2RkNDJiZDNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM4IEBACisyMDE2LTExLTIzICBTZXJn
aW8gVmlsbGFyIFNlbmluICA8c3ZpbGxhckBpZ2FsaWEuY29tPgorCisgICAgICAgIFtjc3MtZ3Jp
ZF0gQ29udmVydCBncmlkIHJlcHJlc2VudGF0aW9uIGludG8gYSBjbGFzcworICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1MDQyCisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU28gZmFyIGdyaWRzIGFyZSByZXBy
ZXNlbnRlZCBhcyBWZWN0b3JzIG9mIFZlY3RvcnMuIFRoZXJlIGFyZSBhIGNvdXBsZSBvZiBpc3N1
ZXMgYXNzb2NpYXRlZAorICAgICAgICB0byB0aGF0IGRlY2lzaW9uLiBGaXJzdCBvciBhbGwsIHRo
ZSBzb3VyY2UgY29kZSBpbiBSZW5kZXJHcmlkIGFzc3VtZXMgdGhlIGV4aXN0ZW5jZSBvZiB0aGF0
CisgICAgICAgIGRhdGEgc3RydWN0dXJlLCBtZWFuaW5nIHRoYXQgd2UgY2Fubm90IGV2ZW50dWFs
bHkgY2hhbmdlIGl0IHdpdGhvdXQgY2hhbmdpbmcgYSBsb3Qgb2YKKyAgICAgICAgY29kZS4gQXBh
cnQgZnJvbSB0aGUgY291cGxpbmcgdGhlcmUgaXMgYW5vdGhlciBpc3N1ZSwgUmVuZGVyR3JpZCBp
cyBmdWxsIG9mIG1ldGhvZHMgdG8KKyAgICAgICAgYWNjZXNzIGFuZCBtYW5pcHVsYXRlIHRoYXQg
ZGF0YSBzdHJ1Y3R1cmUuCisKKyAgICAgICAgSW5zdGVhZCwgaXQnZCBiZSBtdWNoIGJldHRlciB0
byBoYXZlIGEgR3JpZCBjbGFzcyBlbmNhcHN1bGF0aW5nIGJvdGggdGhlIGRhdGEgc3RydWN0dXJl
cyBhbmQKKyAgICAgICAgdGhlIG1ldGhvZHMgcmVxdWlyZWQgdG8gYWNjZXNzL21hbmlwdWxhdGUg
aXQuIE5vdGUgdGhhdCBmb2xsb3ctdXAgcGF0Y2hlcyB3aWxsIG1vdmUgZXZlbgorICAgICAgICBt
b3JlIGRhdGEgYW5kIHByb2NlZHVyZXMgaW50byB0aGlzIG5ldyBjbGFzcyBmcm9tIHRoZSBSZW5k
ZXJHcmlkIGNvZGUuCisKKyAgICAgICAgTm8gbmV3IHRlc3RzIHJlcXVpcmVkIGFzIHRoaXMgaXMg
YSByZWZhY3RvcmluZy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJHcmlkLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OkdyaWQ6OmVuc3VyZUdyaWRTaXplKTogTW92ZWQg
ZnJvbSBSZW5kZXJHcmlkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6R3JpZDo6aW5z
ZXJ0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpHcmlkOjpjbGVhcik6
IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6R3JpZEl0ZXJhdG9yOjpHcmlk
SXRlcmF0b3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3JpZENvbHVtbkNvdW50
KTogVXNlIEdyaWQncyBtZXRob2RzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6Z3Jp
ZFJvd0NvdW50KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJHcmlkOjpwbGFjZUl0
ZW1zT25HcmlkKTogVXNlIEdyaWQncyBtZXRob2RzIHRvIGluc2VydCBjaGlsZHJlbi4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVy
YXRvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6cGxhY2VTcGVjaWZp
ZWRNYWpvckF4aXNJdGVtc09uR3JpZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
R3JpZDo6cGxhY2VBdXRvTWFqb3JBeGlzSXRlbU9uR3JpZCk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyR3JpZDo6bnVtVHJhY2tzKTogVXNlIEdyaWQncyBtZXRob2RzLgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6ZW5zdXJlR3JpZFNpemUpOiBEZWxldGVkLiBNb3ZlZCB0
byBHcmlkIGNsYXNzLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyR3JpZDo6aW5zZXJ0SXRlbUlu
dG9HcmlkKTogRGVsZXRlZC4gTW92ZWQgdG8gR3JpZCBjbGFzcy4KKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyR3JpZC5oOgorCiAyMDE2LTExLTIyICBEYXJpbiBBZGxlciAgPGRhcmluQGFwcGxl
LmNvbT4KIAogICAgICAgICBNYWtlIG5vcm1hbCBjYXNlIGZhc3QgaW4gdGhlIGlucHV0IGVsZW1l
bnQgbGltaXRTdHJpbmcgZnVuY3Rpb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJHcmlk
LmNwcAppbmRleCBkMDU0YjRiMzA4NDE5NDU5NmRjYThlOWQ3NmZmM2QxZDIzMGQ0YWNhLi40NzVm
NTkxNGRjMjM4Yzg0MDYzNmZjOGYxOGZhZjY5OWM1YWExYmZmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckdyaWQuY3BwCkBAIC00Niw2ICs0NiwzOCBAQCBlbnVtIFRyYWNrU2l6ZVJl
c3RyaWN0aW9uIHsKICAgICBGb3JiaWRJbmZpbml0eSwKIH07CiAKK3ZvaWQgUmVuZGVyR3JpZDo6
R3JpZDo6ZW5zdXJlR3JpZFNpemUodW5zaWduZWQgbWF4aW11bVJvd1NpemUsIHVuc2lnbmVkIG1h
eGltdW1Db2x1bW5TaXplKQoreworICAgIGNvbnN0IHNpemVfdCBvbGRDb2x1bW5TaXplID0gbnVt
Q29sdW1ucygpOworICAgIGNvbnN0IHNpemVfdCBvbGRSb3dTaXplID0gbnVtUm93cygpOworICAg
IGlmIChtYXhpbXVtUm93U2l6ZSA+IG9sZFJvd1NpemUpIHsKKyAgICAgICAgbV9ncmlkLmdyb3co
bWF4aW11bVJvd1NpemUpOworICAgICAgICBmb3IgKHNpemVfdCByb3cgPSBvbGRSb3dTaXplOyBy
b3cgPCBtYXhpbXVtUm93U2l6ZTsgKytyb3cpCisgICAgICAgICAgICBtX2dyaWRbcm93XS5ncm93
KG9sZENvbHVtblNpemUpOworICAgIH0KKworICAgIGlmIChtYXhpbXVtQ29sdW1uU2l6ZSA+IG9s
ZENvbHVtblNpemUpIHsKKyAgICAgICAgZm9yIChzaXplX3Qgcm93ID0gMDsgcm93IDwgbnVtUm93
cygpOyArK3JvdykKKyAgICAgICAgICAgIG1fZ3JpZFtyb3ddLmdyb3cobWF4aW11bUNvbHVtblNp
emUpOworICAgIH0KK30KKwordm9pZCBSZW5kZXJHcmlkOjpHcmlkOjppbnNlcnQoUmVuZGVyQm94
JiBjaGlsZCwgY29uc3QgR3JpZEFyZWEmIGFyZWEpCit7CisgICAgQVNTRVJUKGFyZWEucm93cy5p
c1RyYW5zbGF0ZWREZWZpbml0ZSgpICYmIGFyZWEuY29sdW1ucy5pc1RyYW5zbGF0ZWREZWZpbml0
ZSgpKTsKKyAgICBlbnN1cmVHcmlkU2l6ZShhcmVhLnJvd3MuZW5kTGluZSgpLCBhcmVhLmNvbHVt
bnMuZW5kTGluZSgpKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgcm93IDogYXJlYS5yb3dzKSB7
CisgICAgICAgIGZvciAoY29uc3QgYXV0byYgY29sdW1uIDogYXJlYS5jb2x1bW5zKQorICAgICAg
ICAgICAgbV9ncmlkW3Jvd11bY29sdW1uXS5hcHBlbmQoJmNoaWxkKTsKKyAgICB9Cit9CisKK3Zv
aWQgUmVuZGVyR3JpZDo6R3JpZDo6Y2xlYXIoKQoreworICAgIG1fZ3JpZC5yZXNpemUoMCk7Cit9
CisKIGNsYXNzIEdyaWRUcmFjayB7CiBwdWJsaWM6CiAgICAgR3JpZFRyYWNrKCkge30KQEAgLTE0
OSw4ICsxODEsOCBAQCBjbGFzcyBSZW5kZXJHcmlkOjpHcmlkSXRlcmF0b3IgewogcHVibGljOgog
ICAgIC8vIHxkaXJlY3Rpb258IGlzIHRoZSBkaXJlY3Rpb24gdGhhdCBpcyBmaXhlZCB0byB8Zml4
ZWRUcmFja0luZGV4fCBzbyBlLmcKICAgICAvLyBHcmlkSXRlcmF0b3IobV9ncmlkLCBGb3JDb2x1
bW5zLCAxKSB3aWxsIHdhbGsgb3ZlciB0aGUgcm93cyBvZiB0aGUgMm5kIGNvbHVtbi4KLSAgICBH
cmlkSXRlcmF0b3IoY29uc3QgVmVjdG9yPFZlY3RvcjxWZWN0b3I8UmVuZGVyQm94KiwgMT4+PiYg
Z3JpZCwgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGRpcmVjdGlvbiwgdW5zaWduZWQgZml4ZWRU
cmFja0luZGV4LCB1bnNpZ25lZCB2YXJ5aW5nVHJhY2tJbmRleCA9IDApCi0gICAgICAgIDogbV9n
cmlkKGdyaWQpCisgICAgR3JpZEl0ZXJhdG9yKGNvbnN0IEdyaWQmIGdyaWQsIEdyaWRUcmFja1Np
emluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIHVuc2lnbmVkIGZpeGVkVHJhY2tJbmRleCwgdW5zaWdu
ZWQgdmFyeWluZ1RyYWNrSW5kZXggPSAwKQorICAgICAgICA6IG1fZ3JpZChncmlkLm1fZ3JpZCkK
ICAgICAgICAgLCBtX2RpcmVjdGlvbihkaXJlY3Rpb24pCiAgICAgICAgICwgbV9yb3dJbmRleCgo
ZGlyZWN0aW9uID09IEZvckNvbHVtbnMpID8gdmFyeWluZ1RyYWNrSW5kZXggOiBmaXhlZFRyYWNr
SW5kZXgpCiAgICAgICAgICwgbV9jb2x1bW5JbmRleCgoZGlyZWN0aW9uID09IEZvckNvbHVtbnMp
ID8gZml4ZWRUcmFja0luZGV4IDogdmFyeWluZ1RyYWNrSW5kZXgpCkBAIC0yMjcsNyArMjU5LDcg
QEAgcHVibGljOgogICAgIH0KIAogcHJpdmF0ZToKLSAgICBjb25zdCBWZWN0b3I8VmVjdG9yPFZl
Y3RvcjxSZW5kZXJCb3gqLCAxPj4+JiBtX2dyaWQ7CisgICAgY29uc3QgR3JpZEFzTWF0cml4JiBt
X2dyaWQ7CiAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIG1fZGlyZWN0aW9uOwogICAgIHVu
c2lnbmVkIG1fcm93SW5kZXg7CiAgICAgdW5zaWduZWQgbV9jb2x1bW5JbmRleDsKQEAgLTM4Nywx
MyArNDE5LDEzIEBAIHZvaWQgUmVuZGVyR3JpZDo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJl
bmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsCiB1bnNpZ25lZCBSZW5kZXJHcmlk
OjpncmlkQ29sdW1uQ291bnQoKSBjb25zdAogewogICAgIEFTU0VSVCghbV9ncmlkSXNEaXJ0eSk7
Ci0gICAgcmV0dXJuIG1fZ3JpZC5zaXplKCkgPyBtX2dyaWRbMF0uc2l6ZSgpIDogMDsKKyAgICBy
ZXR1cm4gbV9ncmlkLm51bUNvbHVtbnMoKTsKIH0KIAogdW5zaWduZWQgUmVuZGVyR3JpZDo6Z3Jp
ZFJvd0NvdW50KCkgY29uc3QKIHsKICAgICBBU1NFUlQoIW1fZ3JpZElzRGlydHkpOwotICAgIHJl
dHVybiBtX2dyaWQuc2l6ZSgpOworICAgIHJldHVybiBtX2dyaWQubnVtUm93cygpOwogfQogCiBM
YXlvdXRVbml0IFJlbmRlckdyaWQ6OmNvbXB1dGVUcmFja0Jhc2VkTG9naWNhbEhlaWdodChjb25z
dCBHcmlkU2l6aW5nRGF0YSYgc2l6aW5nRGF0YSkgY29uc3QKQEAgLTE1MTAsMzIgKzE1NDIsNiBA
QCBib29sIFJlbmRlckdyaWQ6OnRyYWNrc0FyZVdpZGVyVGhhbk1pblRyYWNrQnJlYWR0aChHcmlk
VHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZQogfQogI2VuZGlmCiAKLXZvaWQgUmVuZGVyR3JpZDo6
ZW5zdXJlR3JpZFNpemUodW5zaWduZWQgbWF4aW11bVJvd1NpemUsIHVuc2lnbmVkIG1heGltdW1D
b2x1bW5TaXplKQotewotICAgIGNvbnN0IHVuc2lnbmVkIG9sZFJvd0NvdW50ID0gZ3JpZFJvd0Nv
dW50KCk7Ci0gICAgaWYgKG1heGltdW1Sb3dTaXplID4gb2xkUm93Q291bnQpIHsKLSAgICAgICAg
bV9ncmlkLmdyb3cobWF4aW11bVJvd1NpemUpOwotICAgICAgICBmb3IgKHVuc2lnbmVkIHJvdyA9
IG9sZFJvd0NvdW50OyByb3cgPCBncmlkUm93Q291bnQoKTsgKytyb3cpCi0gICAgICAgICAgICBt
X2dyaWRbcm93XS5ncm93KGdyaWRDb2x1bW5Db3VudCgpKTsKLSAgICB9Ci0KLSAgICBpZiAobWF4
aW11bUNvbHVtblNpemUgPiBncmlkQ29sdW1uQ291bnQoKSkgewotICAgICAgICBmb3IgKHVuc2ln
bmVkIHJvdyA9IDA7IHJvdyA8IGdyaWRSb3dDb3VudCgpOyArK3JvdykKLSAgICAgICAgICAgIG1f
Z3JpZFtyb3ddLmdyb3cobWF4aW11bUNvbHVtblNpemUpOwotICAgIH0KLX0KLQotdm9pZCBSZW5k
ZXJHcmlkOjppbnNlcnRJdGVtSW50b0dyaWQoUmVuZGVyQm94JiBjaGlsZCwgY29uc3QgR3JpZEFy
ZWEmIGFyZWEpCi17Ci0gICAgQVNTRVJUKGFyZWEucm93cy5pc1RyYW5zbGF0ZWREZWZpbml0ZSgp
ICYmIGFyZWEuY29sdW1ucy5pc1RyYW5zbGF0ZWREZWZpbml0ZSgpKTsKLSAgICBlbnN1cmVHcmlk
U2l6ZShhcmVhLnJvd3MuZW5kTGluZSgpLCBhcmVhLmNvbHVtbnMuZW5kTGluZSgpKTsKLQotICAg
IGZvciAoYXV0byByb3cgOiBhcmVhLnJvd3MpIHsKLSAgICAgICAgZm9yIChhdXRvIGNvbHVtbiA6
IGFyZWEuY29sdW1ucykKLSAgICAgICAgICAgIG1fZ3JpZFtyb3ddW2NvbHVtbl0uYXBwZW5kKCZj
aGlsZCk7Ci0gICAgfQotfQotCiB1bnNpZ25lZCBSZW5kZXJHcmlkOjpjb21wdXRlQXV0b1JlcGVh
dFRyYWNrc0NvdW50KEdyaWRUcmFja1NpemluZ0RpcmVjdGlvbiBkaXJlY3Rpb24sIFNpemluZ09w
ZXJhdGlvbiBzaXppbmdPcGVyYXRpb24pIGNvbnN0CiB7CiAgICAgYm9vbCBpc1Jvd0F4aXMgPSBk
aXJlY3Rpb24gPT0gRm9yQ29sdW1uczsKQEAgLTE2NzksNyArMTY4NSw3IEBAIHZvaWQgUmVuZGVy
R3JpZDo6cGxhY2VJdGVtc09uR3JpZChTaXppbmdPcGVyYXRpb24gc2l6aW5nT3BlcmF0aW9uKQog
ICAgICAgICAgICAgICAgIHNwZWNpZmllZE1ham9yQXhpc0F1dG9HcmlkSXRlbXMuYXBwZW5kKGNo
aWxkKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9Ci0gICAgICAgIGluc2VydEl0
ZW1JbnRvR3JpZCgqY2hpbGQsIEdyaWRBcmVhKGFyZWEucm93cywgYXJlYS5jb2x1bW5zKSk7Cisg
ICAgICAgIG1fZ3JpZC5pbnNlcnQoKmNoaWxkLCB7IGFyZWEucm93cywgYXJlYS5jb2x1bW5zIH0p
OwogICAgIH0KIAogI2lmIEVOQUJMRShBU1NFUlQpCkBAIC0xNzQzLDkgKzE3NDksNyBAQCB2b2lk
IFJlbmRlckdyaWQ6OnBvcHVsYXRlRXhwbGljaXRHcmlkQW5kT3JkZXJJdGVyYXRvcigpCiAgICAg
ICAgIG1fZ3JpZEl0ZW1BcmVhLnNldChjaGlsZCwgR3JpZEFyZWEocm93UG9zaXRpb25zLCBjb2x1
bW5Qb3NpdGlvbnMpKTsKICAgICB9CiAKLSAgICBtX2dyaWQuZ3JvdyhtYXhpbXVtUm93SW5kZXgg
KyBzdGQ6OmFicyhtX3NtYWxsZXN0Um93U3RhcnQpKTsKLSAgICBmb3IgKGF1dG8mIGNvbHVtbiA6
IG1fZ3JpZCkKLSAgICAgICAgY29sdW1uLmdyb3cobWF4aW11bUNvbHVtbkluZGV4ICsgc3RkOjph
YnMobV9zbWFsbGVzdENvbHVtblN0YXJ0KSk7CisgICAgbV9ncmlkLmVuc3VyZUdyaWRTaXplKG1h
eGltdW1Sb3dJbmRleCArIHN0ZDo6YWJzKG1fc21hbGxlc3RSb3dTdGFydCksIG1heGltdW1Db2x1
bW5JbmRleCArIHN0ZDo6YWJzKG1fc21hbGxlc3RDb2x1bW5TdGFydCkpOwogfQogCiBzdGQ6OnVu
aXF1ZV9wdHI8R3JpZEFyZWE+IFJlbmRlckdyaWQ6OmNyZWF0ZUVtcHR5R3JpZEFyZWFBdFNwZWNp
ZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKGNvbnN0IFJlbmRlckJveCYgZ3JpZEl0ZW0sIEdyaWRU
cmFja1NpemluZ0RpcmVjdGlvbiBzcGVjaWZpZWREaXJlY3Rpb24sIGNvbnN0IEdyaWRTcGFuJiBz
cGVjaWZpZWRQb3NpdGlvbnMpIGNvbnN0CkBAIC0xNzgwLDcgKzE3ODQsNyBAQCB2b2lkIFJlbmRl
ckdyaWQ6OnBsYWNlU3BlY2lmaWVkTWFqb3JBeGlzSXRlbXNPbkdyaWQoY29uc3QgVmVjdG9yPFJl
bmRlckJveCo+JiBhdQogICAgICAgICAgICAgZW1wdHlHcmlkQXJlYSA9IGNyZWF0ZUVtcHR5R3Jp
ZEFyZWFBdFNwZWNpZmllZFBvc2l0aW9uc091dHNpZGVHcmlkKCphdXRvR3JpZEl0ZW0sIGF1dG9Q
bGFjZW1lbnRNYWpvckF4aXNEaXJlY3Rpb24oKSwgbWFqb3JBeGlzUG9zaXRpb25zKTsKIAogICAg
ICAgICBtX2dyaWRJdGVtQXJlYS5zZXQoYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7Ci0g
ICAgICAgIGluc2VydEl0ZW1JbnRvR3JpZCgqYXV0b0dyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7
CisgICAgICAgIG1fZ3JpZC5pbnNlcnQoKmF1dG9HcmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOwog
CiAgICAgICAgIGlmICghaXNHcmlkQXV0b0Zsb3dEZW5zZSkKICAgICAgICAgICAgIG1pbm9yQXhp
c0N1cnNvcnMuc2V0KG1ham9yQXhpc0luaXRpYWxQb3NpdGlvbiwgaXNGb3JDb2x1bW5zID8gZW1w
dHlHcmlkQXJlYS0+cm93cy5zdGFydExpbmUoKSA6IGVtcHR5R3JpZEFyZWEtPmNvbHVtbnMuc3Rh
cnRMaW5lKCkpOwpAQCAtMTg1Myw3ICsxODU3LDcgQEAgdm9pZCBSZW5kZXJHcmlkOjpwbGFjZUF1
dG9NYWpvckF4aXNJdGVtT25HcmlkKFJlbmRlckJveCYgZ3JpZEl0ZW0sIEF1dG9QbGFjZW1lbnQK
ICAgICB9CiAKICAgICBtX2dyaWRJdGVtQXJlYS5zZXQoJmdyaWRJdGVtLCAqZW1wdHlHcmlkQXJl
YSk7Ci0gICAgaW5zZXJ0SXRlbUludG9HcmlkKGdyaWRJdGVtLCAqZW1wdHlHcmlkQXJlYSk7Cisg
ICAgbV9ncmlkLmluc2VydChncmlkSXRlbSwgKmVtcHR5R3JpZEFyZWEpOwogICAgIGF1dG9QbGFj
ZW1lbnRDdXJzb3IuZmlyc3QgPSBlbXB0eUdyaWRBcmVhLT5yb3dzLnN0YXJ0TGluZSgpOwogICAg
IGF1dG9QbGFjZW1lbnRDdXJzb3Iuc2Vjb25kID0gZW1wdHlHcmlkQXJlYS0+Y29sdW1ucy5zdGFy
dExpbmUoKTsKIH0KQEAgLTI3MTgsOSArMjcyMiw5IEBAIHVuc2lnbmVkIFJlbmRlckdyaWQ6Om51
bVRyYWNrcyhHcmlkVHJhY2tTaXppbmdEaXJlY3Rpb24gZGlyZWN0aW9uKSBjb25zdAogICAgIC8v
IGJlY2F1c2Ugbm90IGhhdmluZyByb3dzIGltcGxpZXMgdGhhdCB0aGVyZSBhcmUgbm8gIm5vcm1h
bCIgY2hpbGRyZW4gKG91dC1vZi1mbG93IGNoaWxkcmVuIGFyZQogICAgIC8vIG5vdCBzdG9yZWQg
aW4gbV9ncmlkKS4KICAgICBpZiAoZGlyZWN0aW9uID09IEZvclJvd3MpCi0gICAgICAgIHJldHVy
biBtX2dyaWQuc2l6ZSgpOworICAgICAgICByZXR1cm4gbV9ncmlkLm51bVJvd3MoKTsKIAotICAg
IHJldHVybiBtX2dyaWQuc2l6ZSgpID8gbV9ncmlkWzBdLnNpemUoKSA6IEdyaWRQb3NpdGlvbnNS
ZXNvbHZlcjo6ZXhwbGljaXRHcmlkQ29sdW1uQ291bnQoc3R5bGUoKSwgbV9hdXRvUmVwZWF0Q29s
dW1ucyk7CisgICAgcmV0dXJuIG1fZ3JpZC5udW1Sb3dzKCkgPyBtX2dyaWQubnVtQ29sdW1ucygp
IDogR3JpZFBvc2l0aW9uc1Jlc29sdmVyOjpleHBsaWNpdEdyaWRDb2x1bW5Db3VudChzdHlsZSgp
LCBtX2F1dG9SZXBlYXRDb2x1bW5zKTsKIH0KIAogdm9pZCBSZW5kZXJHcmlkOjpwYWludENoaWxk
cmVuKFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBMYXlvdXRQb2ludCYgcGFpbnRPZmZzZXQs
IFBhaW50SW5mbyYgZm9yQ2hpbGQsIGJvb2wgdXNlUHJpbnRSZWN0KQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJHcmlkLmgKaW5kZXggYThmYzg0YjE1ZjRlMzlhODY5ZThlZTMyNTA2OWQ2ZDUx
ZjQ2ZWMxNi4uYTc2NjVhYzBjMzEyNmZmZGI4YjljOWI0MmJhYmQyZjIyZGRjOGMyNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckdyaWQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyR3JpZC5oCkBAIC04OCw5ICs4OCw2IEBAIHByaXZhdGU6
CiAgICAgTGF5b3V0VW5pdCBjb21wdXRlVXNlZEJyZWFkdGhPZk1heExlbmd0aChjb25zdCBHcmlk
VHJhY2tTaXplJiwgTGF5b3V0VW5pdCB1c2VkQnJlYWR0aCwgTGF5b3V0VW5pdCBtYXhTaXplKSBj
b25zdDsKICAgICB2b2lkIHJlc29sdmVDb250ZW50QmFzZWRUcmFja1NpemluZ0Z1bmN0aW9ucyhH
cmlkVHJhY2tTaXppbmdEaXJlY3Rpb24sIEdyaWRTaXppbmdEYXRhJikgY29uc3Q7CiAKLSAgICB2
b2lkIGVuc3VyZUdyaWRTaXplKHVuc2lnbmVkIG1heGltdW1Sb3dTaXplLCB1bnNpZ25lZCBtYXhp
bXVtQ29sdW1uU2l6ZSk7Ci0gICAgdm9pZCBpbnNlcnRJdGVtSW50b0dyaWQoUmVuZGVyQm94Jiwg
Y29uc3QgR3JpZEFyZWEmKTsKLQogICAgIHVuc2lnbmVkIGNvbXB1dGVBdXRvUmVwZWF0VHJhY2tz
Q291bnQoR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uLCBTaXppbmdPcGVyYXRpb24pIGNvbnN0Owog
CiAgICAgdHlwZWRlZiBMaXN0SGFzaFNldDxzaXplX3Q+IE9yZGVyZWRUcmFja0luZGV4U2V0OwpA
QCAtMjAwLDcgKzE5NywzMCBAQCBwcml2YXRlOgogICAgIGJvb2wgaXNPcnRob2dvbmFsQ2hpbGQo
Y29uc3QgUmVuZGVyQm94JikgY29uc3Q7CiAgICAgR3JpZFRyYWNrU2l6aW5nRGlyZWN0aW9uIGZs
b3dBd2FyZURpcmVjdGlvbkZvckNoaWxkKGNvbnN0IFJlbmRlckJveCYsIEdyaWRUcmFja1Npemlu
Z0RpcmVjdGlvbikgY29uc3Q7CiAKLSAgICBWZWN0b3I8VmVjdG9yPFZlY3RvcjxSZW5kZXJCb3gq
LCAxPj4+IG1fZ3JpZDsKKyAgICB0eXBlZGVmIFZlY3RvcjxSZW5kZXJCb3gqLCAxPiBHcmlkQ2Vs
bDsKKyAgICB0eXBlZGVmIFZlY3RvcjxWZWN0b3I8R3JpZENlbGw+PiBHcmlkQXNNYXRyaXg7Cisg
ICAgY2xhc3MgR3JpZCBmaW5hbCB7CisgICAgcHVibGljOgorICAgICAgICBHcmlkKCkgeyB9CisK
KyAgICAgICAgdW5zaWduZWQgbnVtQ29sdW1ucygpIGNvbnN0IHsgcmV0dXJuIG1fZ3JpZC5zaXpl
KCkgPyBtX2dyaWRbMF0uc2l6ZSgpIDogMDsgfQorICAgICAgICB1bnNpZ25lZCBudW1Sb3dzKCkg
Y29uc3QgeyByZXR1cm4gbV9ncmlkLnNpemUoKTsgfQorCisgICAgICAgIHZvaWQgZW5zdXJlR3Jp
ZFNpemUodW5zaWduZWQgbWF4aW11bVJvd1NpemUsIHVuc2lnbmVkIG1heGltdW1Db2x1bW5TaXpl
KTsKKyAgICAgICAgdm9pZCBpbnNlcnQoUmVuZGVyQm94JiwgY29uc3QgR3JpZEFyZWEmKTsKKwor
ICAgICAgICBjb25zdCBHcmlkQ2VsbCYgY2VsbCh1bnNpZ25lZCByb3csIHVuc2lnbmVkIGNvbHVt
bikgY29uc3QgeyByZXR1cm4gbV9ncmlkW3Jvd11bY29sdW1uXTsgfQorCisgICAgICAgIHZvaWQg
c2hyaW5rVG9GaXQoKSB7IG1fZ3JpZC5zaHJpbmtUb0ZpdCgpOyB9CisKKyAgICAgICAgdm9pZCBj
bGVhcigpOworCisgICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIEdyaWRJdGVyYXRv
cjsKKyAgICAgICAgR3JpZEFzTWF0cml4IG1fZ3JpZDsKKyAgICB9OworICAgIEdyaWQgbV9ncmlk
OworCiAgICAgVmVjdG9yPExheW91dFVuaXQ+IG1fY29sdW1uUG9zaXRpb25zOwogICAgIFZlY3Rv
cjxMYXlvdXRVbml0PiBtX3Jvd1Bvc2l0aW9uczsKICAgICBMYXlvdXRVbml0IG1fb2Zmc2V0QmV0
d2VlbkNvbHVtbnM7Cg==
</data>
<flag name="review"
          id="317970"
          type_id="1"
          status="+"
          setter="rego"
    />
          </attachment>
      

    </bug>

</bugzilla>