<?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>163157</bug_id>
          
          <creation_ts>2016-10-07 16:23:09 -0700</creation_ts>
          <short_desc>Reduce code duplication between CG, Cairo, and Direct2D</short_desc>
          <delta_ts>2016-10-10 10:15:38 -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>Layout and Rendering</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=161817</see_also>
          <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="Brent Fulgham">bfulgham</reporter>
          <assigned_to name="Brent Fulgham">bfulgham</assigned_to>
          <cc>bfulgham</cc>
    
    <cc>dino</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>zalan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1237855</commentid>
    <comment_count>0</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-07 16:23:09 -0700</bug_when>
    <thetext>The various GraphicsContext implementations duplicate utility functions, constants, and other code. We should reduce this duplication to help ensure consistency and reduce maintenance burden.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237876</commentid>
    <comment_count>1</comment_count>
      <attachid>290988</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-07 17:33:28 -0700</bug_when>
    <thetext>Created attachment 290988
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237877</commentid>
    <comment_count>2</comment_count>
      <attachid>290988</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-07 17:40:46 -0700</bug_when>
    <thetext>Comment on attachment 290988
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:1132
&gt; +    return strokeStyle() == DottedStroke ? thickness : std::min(2.0f * thickness, std::max(thickness, strokeWidth / 3.0f));

We should make a constrainedBetween&lt;&gt; template.

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:1139
&gt; +    

Blank line.

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:624
&gt; +    float dashedLineCornerWidthForStrokeWidth(float);
&gt; +    float dashedLinePatternWidthForStrokeWidth(float);
&gt; +    float dashedLinePatternOffsetForPatternAndStrokeWidth(float patternWidth, float strokeWidth);
&gt; +    Vector&lt;FloatPoint&gt; centerLineAndCutOffCorners(bool isVerticalLine, FloatPoint point1, FloatPoint point2);

Can these all be static?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237879</commentid>
    <comment_count>3</comment_count>
      <attachid>290990</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-07 17:43:55 -0700</bug_when>
    <thetext>Created attachment 290990
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237880</commentid>
    <comment_count>4</comment_count>
      <attachid>290988</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-07 17:46:04 -0700</bug_when>
    <thetext>Comment on attachment 290988
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:1132
&gt;&gt; +    return strokeStyle() == DottedStroke ? thickness : std::min(2.0f * thickness, std::max(thickness, strokeWidth / 3.0f));
&gt; 
&gt; We should make a constrainedBetween&lt;&gt; template.

I wonder if we have one? I&apos;ll go look.

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:1139
&gt;&gt; +    
&gt; 
&gt; Blank line.

Whoops!

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext.h:624
&gt;&gt; +    Vector&lt;FloatPoint&gt; centerLineAndCutOffCorners(bool isVerticalLine, FloatPoint point1, FloatPoint point2);
&gt; 
&gt; Can these all be static?

They could; I&apos;d just need to pass the stroke style in, and maybe the stroke thickness.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237937</commentid>
    <comment_count>5</comment_count>
      <attachid>290990</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2016-10-07 22:51:52 -0700</bug_when>
    <thetext>Comment on attachment 290990
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:1139
&gt; +    

Blank line

&gt; Source/WebCore/platform/graphics/GraphicsContext.h:624
&gt; +    float dashedLineCornerWidthForStrokeWidth(float);
&gt; +    float dashedLinePatternWidthForStrokeWidth(float);
&gt; +    float dashedLinePatternOffsetForPatternAndStrokeWidth(float patternWidth, float strokeWidth);
&gt; +    Vector&lt;FloatPoint&gt; centerLineAndCutOffCorners(bool isVerticalLine, float cornerWidth, FloatPoint point1, FloatPoint point2);

These can all be const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238344</commentid>
    <comment_count>6</comment_count>
      <attachid>290990</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-10 09:48:31 -0700</bug_when>
    <thetext>Comment on attachment 290990
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:1139
&gt;&gt; +    
&gt; 
&gt; Blank line

OK!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238345</commentid>
    <comment_count>7</comment_count>
      <attachid>290990</attachid>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-10 09:48:52 -0700</bug_when>
    <thetext>Comment on attachment 290990
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/GraphicsContext.h:624
&gt;&gt; +    Vector&lt;FloatPoint&gt; centerLineAndCutOffCorners(bool isVerticalLine, float cornerWidth, FloatPoint point1, FloatPoint point2);
&gt; 
&gt; These can all be const

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238358</commentid>
    <comment_count>8</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-10 10:05:27 -0700</bug_when>
    <thetext>Committed r207002: &lt;http://trac.webkit.org/changeset/207002&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238360</commentid>
    <comment_count>9</comment_count>
      <attachid>290990</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2016-10-10 10:07:33 -0700</bug_when>
    <thetext>Comment on attachment 290990
Patch

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

&gt; Source/WebCore/platform/graphics/GraphicsContext.cpp:1167
&gt; +    // Center line and cut off corners for pattern patining.

Noticed a typo here: patining.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1238364</commentid>
    <comment_count>10</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2016-10-10 10:15:03 -0700</bug_when>
    <thetext>Fixed typo in Committed r207003: &lt;http://trac.webkit.org/changeset/207003&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290988</attachid>
            <date>2016-10-07 17:33:28 -0700</date>
            <delta_ts>2016-10-07 17:43:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163157-20161007173012.patch</filename>
            <type>text/plain</type>
            <size>15278</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjk0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE2LTEwLTA3ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSBjb2RlIGR1cGxp
Y2F0aW9uIGJldHdlZW4gQ0csIENhaXJvLCBhbmQgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgYSBudW1iZXIgb2Ygcm91dGluZXMg
dGhhdCBoYXZlIGJlZW4gY29waWVkLWFuZC1wYXN0ZWQgdG8gZGlmZmVyZW50CisgICAgICAgIHBs
YXRmb3JtIGZpbGVzIGludG8gdGhlIG1haW4gR3JhcGhpY3NDb250ZXh0LmNwcCBmaWxlLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlv
ci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0aEZv
clN0cm9rZVdpZHRoKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRhc2hlZExpbmVQYXR0ZXJuV2lkdGhGb3JTdHJva2VXaWR0aCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRl
cm5BbmRTdHJva2VXaWR0aCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyk6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBDYWxsIG5ldyBoZWxwZXIgZnVuY3Rpb24uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKTogRGl0dG8uCisKIDIwMTYt
MTAtMDcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
U3VwcG9ydCBvbmJlZm9yZWlucHV0IGV2ZW50IGhhbmRsaW5nIGZvciB0aGUgbmV3IElucHV0RXZl
bnQgc3BlYwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMDY5NDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTI2LDQgKzExMjYsNTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGUoY29u
c3QgRwogICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc3RhdGUuc2hvdWxkU21vb3Ro
Rm9udHMpOwogfQogCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0
aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKQoreworICAgIGZsb2F0IHRoaWNrbmVz
cyA9IHN0cm9rZVRoaWNrbmVzcygpOworICAgIHJldHVybiBzdHJva2VTdHlsZSgpID09IERvdHRl
ZFN0cm9rZSA/IHRoaWNrbmVzcyA6IHN0ZDo6bWluKDIuMGYgKiB0aGlja25lc3MsIHN0ZDo6bWF4
KHRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Cit9CisKK2Zsb2F0IEdyYXBoaWNzQ29u
dGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdp
ZHRoKQoreworICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOworICAgIHJl
dHVybiBzdHJva2VTdHlsZSgpID09IERvdHRlZFN0cm9rZSA/IHRoaWNrbmVzcyA6IHN0ZDo6bWlu
KDMuMGYgKiB0aGlja25lc3MsIHN0ZDo6bWF4KHRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBm
KSk7CisgICAgCit9CisKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5P
ZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBz
dHJva2VXaWR0aCkKK3sKKyAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIGZ1bGwgZmlsbCBhbmQg
ZW5kcyB3aXRoIHRoZSBlbXB0eSBmaWxsLgorICAgIC8vIDEuIExldCdzIHN0YXJ0IHdpdGggdGhl
IGVtcHR5IHBoYXNlIGFmdGVyIHRoZSBjb3JuZXIuCisgICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUg
Z290IG9kZCBvciBldmVuIG51bWJlciBvZiBwYXR0ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5
IGNvdmVyIHRoZSBsaW5lLgorICAgIC8vIDMuIEluIGNhc2Ugb2YgZXZlbiBudW1iZXIgb2YgcGF0
dGVybnMgYW5kL29yIHJlbWFpbmRlciwgbW92ZSB0aGUgcGF0dGVybiBzdGFydCBwb3NpdGlvbgor
ICAgIC8vIHNvIHRoYXQgdGhlIHBhdHRlcm4gaXMgYmFsYW5jZWQgYmV0d2VlbiB0aGUgY29ybmVy
cy4KKyAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gcGF0dGVybldpZHRoOworICAgIGludCBudW1i
ZXJPZlNlZ21lbnRzID0gc3RkOjpmbG9vcihzdHJva2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Cisg
ICAgYm9vbCBvZGROdW1iZXJPZlNlZ21lbnRzID0gbnVtYmVyT2ZTZWdtZW50cyAlIDI7CisgICAg
ZmxvYXQgcmVtYWluZGVyID0gc3Ryb2tlV2lkdGggLSAobnVtYmVyT2ZTZWdtZW50cyAqIHBhdHRl
cm5XaWR0aCk7CisgICAgaWYgKG9kZE51bWJlck9mU2VnbWVudHMgJiYgcmVtYWluZGVyKQorICAg
ICAgICBwYXR0ZXJuT2Zmc2V0IC09IHJlbWFpbmRlciAvIDIuMGY7CisgICAgZWxzZSBpZiAoIW9k
ZE51bWJlck9mU2VnbWVudHMpIHsKKyAgICAgICAgaWYgKHJlbWFpbmRlcikKKyAgICAgICAgICAg
IHBhdHRlcm5PZmZzZXQgKz0gcGF0dGVybk9mZnNldCAtIChwYXR0ZXJuV2lkdGggKyByZW1haW5k
ZXIpIC8gMi4wZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF0dGVybk9mZnNldCArPSBw
YXR0ZXJuV2lkdGggLyAyLjBmOworICAgIH0KKworICAgIHJldHVybiBwYXR0ZXJuT2Zmc2V0Owor
fQorCitWZWN0b3I8RmxvYXRQb2ludD4gR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0
T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBGbG9hdFBvaW50IHBvaW50MSwgRmxvYXRQ
b2ludCBwb2ludDIpCit7CisgICAgLy8gQ2VudGVyIGxpbmUgYW5kIGN1dCBvZmYgY29ybmVycyBm
b3IgcGF0dGVybiBwYXRpbmluZy4KKyAgICBpZiAoaXNWZXJ0aWNhbExpbmUpIHsKKyAgICAgICAg
ZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHBvaW50Mi54KCkgLSBwb2ludDEueCgpKSAvIDIuMGY7Cisg
ICAgICAgIHBvaW50MS5tb3ZlKGNlbnRlck9mZnNldCwgY29ybmVyV2lkdGgpOworICAgICAgICBw
b2ludDIubW92ZSgtY2VudGVyT2Zmc2V0LCAtY29ybmVyV2lkdGgpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIGZsb2F0IGNlbnRlck9mZnNldCA9IChwb2ludDIueSgpIC0gcG9pbnQxLnkoKSkgLyAy
LjBmOworICAgICAgICBwb2ludDEubW92ZShjb3JuZXJXaWR0aCwgY2VudGVyT2Zmc2V0KTsKKyAg
ICAgICAgcG9pbnQyLm1vdmUoLWNvcm5lcldpZHRoLCAtY2VudGVyT2Zmc2V0KTsKKyAgICB9CisK
KyAgICByZXR1cm4geyBwb2ludDEsIHBvaW50MiB9OworfQorCiB9CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuaAkocmV2aXNp
b24gMjA2OTQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmgJKHdvcmtpbmcgY29weSkKQEAgLTYxOCw2ICs2MTgsMTEgQEAgcHJpdmF0ZToKIAog
ICAgIEZsb2F0UmVjdCBjb21wdXRlTGluZUJvdW5kc0FuZEFudGlhbGlhc2luZ01vZGVGb3JUZXh0
KGNvbnN0IEZsb2F0UG9pbnQmLCBmbG9hdCB3aWR0aCwgYm9vbCBwcmludGluZywgQ29sb3ImKTsK
IAorICAgIGZsb2F0IGRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0KTsK
KyAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoZmxvYXQpOwor
ICAgIGZsb2F0IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFuZFN0cm9rZVdpZHRo
KGZsb2F0IHBhdHRlcm5XaWR0aCwgZmxvYXQgc3Ryb2tlV2lkdGgpOworICAgIFZlY3RvcjxGbG9h
dFBvaW50PiBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBG
bG9hdFBvaW50IHBvaW50MSwgRmxvYXRQb2ludCBwb2ludDIpOworCiAgICAgR3JhcGhpY3NDb250
ZXh0UGxhdGZvcm1Qcml2YXRlKiBtX2RhdGEgeyBudWxscHRyIH07CiAgICAgRGlzcGxheUxpc3Q6
OlJlY29yZGVyKiBtX2Rpc3BsYXlMaXN0UmVjb3JkZXIgeyBudWxscHRyIH07CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJv
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWly
by9HcmFwaGljc0NvbnRleHRDYWlyby5jcHAJKHJldmlzaW9uIDIwNjk0MCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzI0LDcgKzMyNCw3IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0Ojpk
cmF3TGluZShjb25zdCBGbG8KICAgICBpZiAoZHJhd3NEYXNoZWRMaW5lKSB7CiAgICAgICAgIGNh
aXJvX3NhdmUoY2Fpcm9Db250ZXh0KTsKICAgICAgICAgLy8gRmlndXJlIG91dCBlbmQgcG9pbnRz
IHRvIGVuc3VyZSB3ZSBhbHdheXMgcGFpbnQgY29ybmVycy4KLSAgICAgICAgY29ybmVyV2lkdGgg
PSBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgPyB0aGlja25lc3MgOiBzdGQ6Om1pbigyICog
dGhpY2tuZXNzLCBzdGQ6Om1heCh0aGlja25lc3MsIHN0cm9rZVdpZHRoIC8gMykpOworICAgICAg
ICBjb3JuZXJXaWR0aCA9IGRhc2hlZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKHN0cm9r
ZVdpZHRoKTsKICAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAgICAgICAgICAgICBmaWxs
UmVjdFdpdGhDb2xvcihjYWlyb0NvbnRleHQsIEZsb2F0UmVjdChwb2ludDEueCgpLCBwb2ludDEu
eSgpLCB0aGlja25lc3MsIGNvcm5lcldpZHRoKSwgc3Ryb2tlQ29sb3IpOwogICAgICAgICAgICAg
ZmlsbFJlY3RXaXRoQ29sb3IoY2Fpcm9Db250ZXh0LCBGbG9hdFJlY3QocG9pbnQxLngoKSwgcG9p
bnQyLnkoKSAtIGNvcm5lcldpZHRoLCB0aGlja25lc3MsIGNvcm5lcldpZHRoKSwgc3Ryb2tlQ29s
b3IpOwpAQCAtMzMzLDMwICszMzMsMTQgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5l
KGNvbnN0IEZsbwogICAgICAgICAgICAgZmlsbFJlY3RXaXRoQ29sb3IoY2Fpcm9Db250ZXh0LCBG
bG9hdFJlY3QocG9pbnQyLngoKSAtIGNvcm5lcldpZHRoLCBwb2ludDEueSgpLCBjb3JuZXJXaWR0
aCwgdGhpY2tuZXNzKSwgc3Ryb2tlQ29sb3IpOwogICAgICAgICB9CiAgICAgICAgIHN0cm9rZVdp
ZHRoIC09IDIgKiBjb3JuZXJXaWR0aDsKLSAgICAgICAgZmxvYXQgcGF0dGVybldpZHRoID0gc3Ry
b2tlU3R5bGUgPT0gRG90dGVkU3Ryb2tlID8gdGhpY2tuZXNzIDogc3RkOjptaW4oMyAqIHRoaWNr
bmVzcywgc3RkOjptYXgodGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMpKTsKKyAgICAgICAgZmxv
YXQgcGF0dGVybldpZHRoID0gZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKHN0
cm9rZVdpZHRoKTsKICAgICAgICAgLy8gQ2hlY2sgaWYgY29ybmVyIGRyYXdpbmcgc3VmZmljaWVu
dGx5IGNvdmVycyB0aGUgbGluZS4KICAgICAgICAgaWYgKHN0cm9rZVdpZHRoIDw9IHBhdHRlcm5X
aWR0aCArIDEpIHsKICAgICAgICAgICAgIGNhaXJvX3Jlc3RvcmUoY2Fpcm9Db250ZXh0KTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCi0gICAgICAgIC8vIFBhdHRlcm4gc3RhcnRz
IHdpdGggZnVsbCBmaWxsIGFuZCBlbmRzIHdpdGggdGhlIGVtcHR5IGZpbGwuCi0gICAgICAgIC8v
IDEuIExldCdzIHN0YXJ0IHdpdGggdGhlIGVtcHR5IHBoYXNlIGFmdGVyIHRoZSBjb3JuZXIuCi0g
ICAgICAgIC8vIDIuIENoZWNrIGlmIHdlJ3ZlIGdvdCBvZGQgb3IgZXZlbiBudW1iZXIgb2YgcGF0
dGVybnMgYW5kIHdoZXRoZXIgdGhleSBmdWxseSBjb3ZlciB0aGUgbGluZS4KLSAgICAgICAgLy8g
My4gSW4gY2FzZSBvZiBldmVuIG51bWJlciBvZiBwYXR0ZXJucyBhbmQvb3IgcmVtYWluZGVyLCBt
b3ZlIHRoZSBwYXR0ZXJuIHN0YXJ0IHBvc2l0aW9uCi0gICAgICAgIC8vIHNvIHRoYXQgdGhlIHBh
dHRlcm4gaXMgYmFsYW5jZWQgYmV0d2VlbiB0aGUgY29ybmVycy4KLSAgICAgICAgZmxvYXQgcGF0
dGVybk9mZnNldCA9IHBhdHRlcm5XaWR0aDsKLSAgICAgICAgaW50IG51bWJlck9mU2VnbWVudHMg
PSBzdGQ6OmZsb29yKHN0cm9rZVdpZHRoIC8gcGF0dGVybldpZHRoKTsKLSAgICAgICAgYm9vbCBv
ZGROdW1iZXJPZlNlZ21lbnRzID0gbnVtYmVyT2ZTZWdtZW50cyAlIDI7Ci0gICAgICAgIGZsb2F0
IHJlbWFpbmRlciA9IHN0cm9rZVdpZHRoIC0gKG51bWJlck9mU2VnbWVudHMgKiBwYXR0ZXJuV2lk
dGgpOwotICAgICAgICBpZiAob2RkTnVtYmVyT2ZTZWdtZW50cyAmJiByZW1haW5kZXIpCi0gICAg
ICAgICAgICBwYXR0ZXJuT2Zmc2V0IC09IHJlbWFpbmRlciAvIDIuZjsKLSAgICAgICAgZWxzZSBp
ZiAoIW9kZE51bWJlck9mU2VnbWVudHMpIHsKLSAgICAgICAgICAgIGlmIChyZW1haW5kZXIpCi0g
ICAgICAgICAgICAgICAgcGF0dGVybk9mZnNldCArPSBwYXR0ZXJuT2Zmc2V0IC0gKHBhdHRlcm5X
aWR0aCArIHJlbWFpbmRlcikgLyAyLmY7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAg
ICAgcGF0dGVybk9mZnNldCArPSBwYXR0ZXJuV2lkdGggLyAyLmY7Ci0gICAgICAgIH0KKyAgICAg
ICAgZmxvYXQgcGF0dGVybk9mZnNldCA9IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0dGVy
bkFuZFN0cm9rZVdpZHRoKHBhdHRlcm5XaWR0aCwgc3Ryb2tlV2lkdGgpOwogICAgICAgICBjb25z
dCBkb3VibGUgZGFzaGVkTGluZVsyXSA9IHsgc3RhdGljX2Nhc3Q8ZG91YmxlPihwYXR0ZXJuV2lk
dGgpLCBzdGF0aWNfY2FzdDxkb3VibGU+KHBhdHRlcm5XaWR0aCkgfTsKICAgICAgICAgY2Fpcm9f
c2V0X2Rhc2goY2Fpcm9Db250ZXh0LCBkYXNoZWRMaW5lLCAyLCBwYXR0ZXJuT2Zmc2V0KTsKICAg
ICB9IGVsc2UgewpAQCAtMzY2LDE4ICszNTAsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJh
d0xpbmUoY29uc3QgRmxvCiAgICAgfQogCiAKLSAgICBGbG9hdFBvaW50IHAxID0gcG9pbnQxOwot
ICAgIEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7Ci0gICAgLy8gQ2VudGVyIGxpbmUgYW5kIGN1dCBv
ZmYgY29ybmVycyBmb3IgcGF0dGVybiBwYXRpbmluZy4KLSAgICBpZiAoaXNWZXJ0aWNhbExpbmUp
IHsKLSAgICAgICAgZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHAyLngoKSAtIHAxLngoKSkgLyAyOwot
ICAgICAgICBwMS5tb3ZlKGNlbnRlck9mZnNldCwgY29ybmVyV2lkdGgpOwotICAgICAgICBwMi5t
b3ZlKC1jZW50ZXJPZmZzZXQsIC1jb3JuZXJXaWR0aCk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
ZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHAyLnkoKSAtIHAxLnkoKSkgLyAyOwotICAgICAgICBwMS5t
b3ZlKGNvcm5lcldpZHRoLCBjZW50ZXJPZmZzZXQpOwotICAgICAgICBwMi5tb3ZlKC1jb3JuZXJX
aWR0aCwgLWNlbnRlck9mZnNldCk7Ci0gICAgfQorICAgIGF1dG8gY2VudGVyZWRQb2ludHMgPSBj
ZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhpc1ZlcnRpY2FsTGluZSwgcG9pbnQxLCBwb2ludDIp
OworICAgIGF1dG8gcDEgPSBjZW50ZXJlZFBvaW50c1swXTsKKyAgICBhdXRvIHAyID0gY2VudGVy
ZWRQb2ludHNbMV07CiAKICAgICBpZiAoc2hvdWxkQW50aWFsaWFzKCkpCiAgICAgICAgIGNhaXJv
X3NldF9hbnRpYWxpYXMoY2Fpcm9Db250ZXh0LCBDQUlST19BTlRJQUxJQVNfTk9ORSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3Jh
cGhpY3NDb250ZXh0Q0cuY3BwCShyZXZpc2lvbiAyMDY5NDApCisrKyBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ3MCw3ICs0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3Qg
RmxvCiAgICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdzRGFz
aGVkTGluZSk7CiAgICAgaWYgKGRyYXdzRGFzaGVkTGluZSkgewogICAgICAgICAvLyBGaWd1cmUg
b3V0IGVuZCBwb2ludHMgdG8gZW5zdXJlIHdlIGFsd2F5cyBwYWludCBjb3JuZXJzLgotICAgICAg
ICBjb3JuZXJXaWR0aCA9IHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9rZSA/IHRoaWNrbmVzcyA6
IHN0ZDo6bWluKDIgKiB0aGlja25lc3MsIHN0ZDo6bWF4KHRoaWNrbmVzcywgc3Ryb2tlV2lkdGgg
LyAzKSk7CisgICAgICAgIGNvcm5lcldpZHRoID0gZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ry
b2tlV2lkdGgoc3Ryb2tlV2lkdGgpOwogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBz
dHJva2VDb2xvcigpKTsKICAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAgICAgICAgICAg
ICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocG9pbnQxLngoKSwgcG9pbnQx
LnkoKSwgdGhpY2tuZXNzLCBjb3JuZXJXaWR0aCkpOwpAQCAtNDgwLDQ0ICs0ODAsMTkgQEAgdm9p
ZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsbwogICAgICAgICAgICAgQ0dDb250
ZXh0RmlsbFJlY3QoY29udGV4dCwgRmxvYXRSZWN0KHBvaW50Mi54KCkgLSBjb3JuZXJXaWR0aCwg
cG9pbnQxLnkoKSwgY29ybmVyV2lkdGgsIHRoaWNrbmVzcykpOwogICAgICAgICB9CiAgICAgICAg
IHN0cm9rZVdpZHRoIC09IDIgKiBjb3JuZXJXaWR0aDsKLSAgICAgICAgZmxvYXQgcGF0dGVybldp
ZHRoID0gc3Ryb2tlU3R5bGUgPT0gRG90dGVkU3Ryb2tlID8gdGhpY2tuZXNzIDogc3RkOjptaW4o
MyAqIHRoaWNrbmVzcywgc3RkOjptYXgodGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMpKTsKKyAg
ICAgICAgZmxvYXQgcGF0dGVybldpZHRoID0gZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9r
ZVdpZHRoKHN0cm9rZVdpZHRoKTsKICAgICAgICAgLy8gQ2hlY2sgaWYgY29ybmVyIGRyYXdpbmcg
c3VmZmljaWVudGx5IGNvdmVycyB0aGUgbGluZS4KICAgICAgICAgaWYgKHN0cm9rZVdpZHRoIDw9
IHBhdHRlcm5XaWR0aCArIDEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gUGF0
dGVybiBzdGFydHMgd2l0aCBmdWxsIGZpbGwgYW5kIGVuZHMgd2l0aCB0aGUgZW1wdHkgZmlsbC4K
LSAgICAgICAgLy8gMS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZW1wdHkgcGhhc2UgYWZ0ZXIgdGhl
IGNvcm5lci4KLSAgICAgICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUgZ290IG9kZCBvciBldmVuIG51
bWJlciBvZiBwYXR0ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5IGNvdmVyIHRoZSBsaW5lLgot
ICAgICAgICAvLyAzLiBJbiBjYXNlIG9mIGV2ZW4gbnVtYmVyIG9mIHBhdHRlcm5zIGFuZC9vciBy
ZW1haW5kZXIsIG1vdmUgdGhlIHBhdHRlcm4gc3RhcnQgcG9zaXRpb24KLSAgICAgICAgLy8gc28g
dGhhdCB0aGUgcGF0dGVybiBpcyBiYWxhbmNlZCBiZXR3ZWVuIHRoZSBjb3JuZXJzLgotICAgICAg
ICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gcGF0dGVybldpZHRoOwotICAgICAgICBpbnQgbnVtYmVy
T2ZTZWdtZW50cyA9IGZsb29yZihzdHJva2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Ci0gICAgICAg
IGJvb2wgb2RkTnVtYmVyT2ZTZWdtZW50cyA9IG51bWJlck9mU2VnbWVudHMgJSAyOwotICAgICAg
ICBmbG9hdCByZW1haW5kZXIgPSBzdHJva2VXaWR0aCAtIChudW1iZXJPZlNlZ21lbnRzICogcGF0
dGVybldpZHRoKTsKLSAgICAgICAgaWYgKG9kZE51bWJlck9mU2VnbWVudHMgJiYgcmVtYWluZGVy
KQotICAgICAgICAgICAgcGF0dGVybk9mZnNldCAtPSByZW1haW5kZXIgLyAyOwotICAgICAgICBl
bHNlIGlmICghb2RkTnVtYmVyT2ZTZWdtZW50cykgewotICAgICAgICAgICAgaWYgKHJlbWFpbmRl
cikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHBhdHRlcm5PZmZzZXQgLSAocGF0
dGVybldpZHRoICsgcmVtYWluZGVyKSAgLyAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAg
ICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcGF0dGVybldpZHRoICAvIDI7Ci0gICAgICAgIH0KKyAg
ICAgICAgZmxvYXQgcGF0dGVybk9mZnNldCA9IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0
dGVybkFuZFN0cm9rZVdpZHRoKHBhdHRlcm5XaWR0aCwgc3Ryb2tlV2lkdGgpOwogICAgICAgICBj
b25zdCBDR0Zsb2F0IGRhc2hlZExpbmVbMl0gPSB7IHN0YXRpY19jYXN0PENHRmxvYXQ+KHBhdHRl
cm5XaWR0aCksIHN0YXRpY19jYXN0PENHRmxvYXQ+KHBhdHRlcm5XaWR0aCkgfTsKICAgICAgICAg
Q0dDb250ZXh0U2V0TGluZURhc2goY29udGV4dCwgcGF0dGVybk9mZnNldCwgZGFzaGVkTGluZSwg
Mik7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBwMSA9IHBvaW50MTsKLSAgICBGbG9hdFBvaW50
IHAyID0gcG9pbnQyOwotICAgIC8vIENlbnRlciBsaW5lIGFuZCBjdXQgb2ZmIGNvcm5lcnMgZm9y
IHBhdHRlcm4gcGF0aW5pbmcuCi0gICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgIGZs
b2F0IGNlbnRlck9mZnNldCA9IChwMi54KCkgLSBwMS54KCkpIC8gMjsKLSAgICAgICAgcDEubW92
ZShjZW50ZXJPZmZzZXQsIGNvcm5lcldpZHRoKTsKLSAgICAgICAgcDIubW92ZSgtY2VudGVyT2Zm
c2V0LCAtY29ybmVyV2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGNlbnRlck9m
ZnNldCA9IChwMi55KCkgLSBwMS55KCkpIC8gMjsKLSAgICAgICAgcDEubW92ZShjb3JuZXJXaWR0
aCwgY2VudGVyT2Zmc2V0KTsKLSAgICAgICAgcDIubW92ZSgtY29ybmVyV2lkdGgsIC1jZW50ZXJP
ZmZzZXQpOwotICAgIH0KKyAgICBhdXRvIGNlbnRlcmVkUG9pbnRzID0gY2VudGVyTGluZUFuZEN1
dE9mZkNvcm5lcnMoaXNWZXJ0aWNhbExpbmUsIHBvaW50MSwgcG9pbnQyKTsKKyAgICBhdXRvIHAx
ID0gY2VudGVyZWRQb2ludHNbMF07CisgICAgYXV0byBwMiA9IGNlbnRlcmVkUG9pbnRzWzFdOwog
CiAgICAgaWYgKHNob3VsZEFudGlhbGlhcygpKSB7CiAjaWYgUExBVEZPUk0oSU9TKQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVj
dDJELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQuY3BwCShyZXZpc2lvbiAyMDY5NDApCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vR3JhcGhpY3NDb250ZXh0RGlyZWN0MkQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MDIsNDkgKzUwMiwyMiBAQCB2b2lkIEdyYXBoaWNzQ29u
dGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvCiAgICAgRDJEQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVT
YXZlcigqbV9kYXRhLCBkcmF3c0Rhc2hlZExpbmUpOwogICAgIGlmIChkcmF3c0Rhc2hlZExpbmUp
IHsKICAgICAgICAgLy8gRmlndXJlIG91dCBlbmQgcG9pbnRzIHRvIGVuc3VyZSB3ZSBhbHdheXMg
cGFpbnQgY29ybmVycy4KLSAgICAgICAgY29ybmVyV2lkdGggPSBzdHJva2VTdHlsZSA9PSBEb3R0
ZWRTdHJva2UgPyB0aGlja25lc3MgOiBzdGQ6Om1pbigyICogdGhpY2tuZXNzLCBzdGQ6Om1heCh0
aGlja25lc3MsIHN0cm9rZVdpZHRoIC8gMykpOworICAgICAgICBjb3JuZXJXaWR0aCA9IGRhc2hl
ZExpbmVDb3JuZXJXaWR0aEZvclN0cm9rZVdpZHRoKHN0cm9rZVdpZHRoKTsKICAgICAgICAgc3Ry
b2tlV2lkdGggLT0gMiAqIGNvcm5lcldpZHRoOwotICAgICAgICBmbG9hdCBwYXR0ZXJuV2lkdGgg
PSBzdHJva2VTdHlsZSA9PSBEb3R0ZWRTdHJva2UgPyB0aGlja25lc3MgOiBzdGQ6Om1pbigzICog
dGhpY2tuZXNzLCBzdGQ6Om1heCh0aGlja25lc3MsIHN0cm9rZVdpZHRoIC8gMykpOworICAgICAg
ICBmbG9hdCBwYXR0ZXJuV2lkdGggPSBkYXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lk
dGgoc3Ryb2tlV2lkdGgpOwogICAgICAgICAvLyBDaGVjayBpZiBjb3JuZXIgZHJhd2luZyBzdWZm
aWNpZW50bHkgY292ZXJzIHRoZSBsaW5lLgogICAgICAgICBpZiAoc3Ryb2tlV2lkdGggPD0gcGF0
dGVybldpZHRoICsgMSkKICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICAvLyBQYXR0ZXJu
IHN0YXJ0cyB3aXRoIGZ1bGwgZmlsbCBhbmQgZW5kcyB3aXRoIHRoZSBlbXB0eSBmaWxsLgotICAg
ICAgICAvLyAxLiBMZXQncyBzdGFydCB3aXRoIHRoZSBlbXB0eSBwaGFzZSBhZnRlciB0aGUgY29y
bmVyLgotICAgICAgICAvLyAyLiBDaGVjayBpZiB3ZSd2ZSBnb3Qgb2RkIG9yIGV2ZW4gbnVtYmVy
IG9mIHBhdHRlcm5zIGFuZCB3aGV0aGVyIHRoZXkgZnVsbHkgY292ZXIgdGhlIGxpbmUuCi0gICAg
ICAgIC8vIDMuIEluIGNhc2Ugb2YgZXZlbiBudW1iZXIgb2YgcGF0dGVybnMgYW5kL29yIHJlbWFp
bmRlciwgbW92ZSB0aGUgcGF0dGVybiBzdGFydCBwb3NpdGlvbgotICAgICAgICAvLyBzbyB0aGF0
IHRoZSBwYXR0ZXJuIGlzIGJhbGFuY2VkIGJldHdlZW4gdGhlIGNvcm5lcnMuCi0gICAgICAgIGZs
b2F0IHBhdHRlcm5PZmZzZXQgPSBwYXR0ZXJuV2lkdGg7Ci0gICAgICAgIGludCBudW1iZXJPZlNl
Z21lbnRzID0gZmxvb3JmKHN0cm9rZVdpZHRoIC8gcGF0dGVybldpZHRoKTsKLSAgICAgICAgYm9v
bCBvZGROdW1iZXJPZlNlZ21lbnRzID0gbnVtYmVyT2ZTZWdtZW50cyAlIDI7Ci0gICAgICAgIGZs
b2F0IHJlbWFpbmRlciA9IHN0cm9rZVdpZHRoIC0gKG51bWJlck9mU2VnbWVudHMgKiBwYXR0ZXJu
V2lkdGgpOwotICAgICAgICBpZiAob2RkTnVtYmVyT2ZTZWdtZW50cyAmJiByZW1haW5kZXIpCi0g
ICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0IC09IHJlbWFpbmRlciAvIDI7Ci0gICAgICAgIGVsc2Ug
aWYgKCFvZGROdW1iZXJPZlNlZ21lbnRzKSB7Ci0gICAgICAgICAgICBpZiAocmVtYWluZGVyKQot
ICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcGF0dGVybk9mZnNldCAtIChwYXR0ZXJu
V2lkdGggKyByZW1haW5kZXIpIC8gMjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAg
ICBwYXR0ZXJuT2Zmc2V0ICs9IHBhdHRlcm5XaWR0aCAvIDI7Ci0gICAgICAgIH0KKyAgICAgICAg
ZmxvYXQgcGF0dGVybk9mZnNldCA9IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFu
ZFN0cm9rZVdpZHRoKHBhdHRlcm5XaWR0aCwgc3Ryb2tlV2lkdGgpOwogICAgICAgICBjb25zdCBm
bG9hdCBkYXNoZXNbMl0gPSB7IHBhdHRlcm5XaWR0aCwgcGF0dGVybldpZHRoIH07Ci0KICAgICAg
ICAgYXV0byBzdHJva2VTdHlsZVByb3BlcnRpZXMgPSBEMkQxOjpTdHJva2VTdHlsZVByb3BlcnRp
ZXMoKTsKLQogICAgICAgICBHcmFwaGljc0NvbnRleHQ6OnN5c3RlbUZhY3RvcnkoKS0+Q3JlYXRl
U3Ryb2tlU3R5bGUoJnN0cm9rZVN0eWxlUHJvcGVydGllcywgZGFzaGVzLCBBUlJBWVNJWkUoZGFz
aGVzKSwgJmQyZFN0cm9rZVN0eWxlKTsKICAgICB9CiAKLSAgICBGbG9hdFBvaW50IHAxID0gcG9p
bnQxOwotICAgIEZsb2F0UG9pbnQgcDIgPSBwb2ludDI7Ci0gICAgLy8gQ2VudGVyIGxpbmUgYW5k
IGN1dCBvZmYgY29ybmVycyBmb3IgcGF0dGVybiBwYXRpbmluZy4KLSAgICBpZiAoaXNWZXJ0aWNh
bExpbmUpIHsKLSAgICAgICAgZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHAyLngoKSAtIHAxLngoKSkg
LyAyOwotICAgICAgICBwMS5tb3ZlKGNlbnRlck9mZnNldCwgY29ybmVyV2lkdGgpOwotICAgICAg
ICBwMi5tb3ZlKC1jZW50ZXJPZmZzZXQsIC1jb3JuZXJXaWR0aCk7Ci0gICAgfSBlbHNlIHsKLSAg
ICAgICAgZmxvYXQgY2VudGVyT2Zmc2V0ID0gKHAyLnkoKSAtIHAxLnkoKSkgLyAyOwotICAgICAg
ICBwMS5tb3ZlKGNvcm5lcldpZHRoLCBjZW50ZXJPZmZzZXQpOwotICAgICAgICBwMi5tb3ZlKC1j
b3JuZXJXaWR0aCwgLWNlbnRlck9mZnNldCk7Ci0gICAgfQorICAgIGF1dG8gY2VudGVyZWRQb2lu
dHMgPSBjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyhpc1ZlcnRpY2FsTGluZSwgcG9pbnQxLCBw
b2ludDIpOworICAgIGF1dG8gcDEgPSBjZW50ZXJlZFBvaW50c1swXTsKKyAgICBhdXRvIHAyID0g
Y2VudGVyZWRQb2ludHNbMV07CiAKICAgICBjb250ZXh0LT5TZXRUYWdzKDEsIF9fTElORV9fKTsK
IAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>290990</attachid>
            <date>2016-10-07 17:43:55 -0700</date>
            <delta_ts>2016-10-07 22:51:52 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-163157-20161007174039.patch</filename>
            <type>text/plain</type>
            <size>15355</size>
            <attacher name="Brent Fulgham">bfulgham</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIwNjk0NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI4IEBACisyMDE2LTEwLTA3ICBCcmVudCBG
dWxnaGFtICA8YmZ1bGdoYW1AYXBwbGUuY29tPgorCisgICAgICAgIFJlZHVjZSBjb2RlIGR1cGxp
Y2F0aW9uIGJldHdlZW4gQ0csIENhaXJvLCBhbmQgRGlyZWN0MkQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzE1NworCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgYSBudW1iZXIgb2Ygcm91dGluZXMg
dGhhdCBoYXZlIGJlZW4gY29waWVkLWFuZC1wYXN0ZWQgdG8gZGlmZmVyZW50CisgICAgICAgIHBs
YXRmb3JtIGZpbGVzIGludG8gdGhlIG1haW4gR3JhcGhpY3NDb250ZXh0LmNwcCBmaWxlLgorCisg
ICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIHRoZXJlIGlzIG5vIGNoYW5nZSBpbiBiZWhhdmlv
ci4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0aEZv
clN0cm9rZVdpZHRoKTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6
OmRhc2hlZExpbmVQYXR0ZXJuV2lkdGhGb3JTdHJva2VXaWR0aCk6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBhdHRl
cm5BbmRTdHJva2VXaWR0aCk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250
ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0T2ZmQ29ybmVycyk6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENhaXJvLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okdy
YXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUpOiBDYWxsIG5ldyBoZWxwZXIgZnVuY3Rpb24uCisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3NDb250ZXh0Q0cuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZSk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRleHREaXJlY3QyRC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKTogRGl0dG8uCisKIDIwMTYt
MTAtMDcgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAg
U3VwcG9ydCBvbmJlZm9yZWlucHV0IGV2ZW50IGhhbmRsaW5nIGZvciB0aGUgbmV3IElucHV0RXZl
bnQgc3BlYwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3ND
b250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAyMDY5NDApCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTI2LDQgKzExMjYsNTYgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmFwcGx5U3RhdGUoY29u
c3QgRwogICAgIHNldFBsYXRmb3JtU2hvdWxkU21vb3RoRm9udHMoc3RhdGUuc2hvdWxkU21vb3Ro
Rm9udHMpOwogfQogCitmbG9hdCBHcmFwaGljc0NvbnRleHQ6OmRhc2hlZExpbmVDb3JuZXJXaWR0
aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdpZHRoKQoreworICAgIGZsb2F0IHRoaWNrbmVz
cyA9IHN0cm9rZVRoaWNrbmVzcygpOworICAgIHJldHVybiBzdHJva2VTdHlsZSgpID09IERvdHRl
ZFN0cm9rZSA/IHRoaWNrbmVzcyA6IHN0ZDo6bWluKDIuMGYgKiB0aGlja25lc3MsIHN0ZDo6bWF4
KHRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBmKSk7Cit9CisKK2Zsb2F0IEdyYXBoaWNzQ29u
dGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRoKGZsb2F0IHN0cm9rZVdp
ZHRoKQoreworICAgIGZsb2F0IHRoaWNrbmVzcyA9IHN0cm9rZVRoaWNrbmVzcygpOworICAgIHJl
dHVybiBzdHJva2VTdHlsZSgpID09IERvdHRlZFN0cm9rZSA/IHRoaWNrbmVzcyA6IHN0ZDo6bWlu
KDMuMGYgKiB0aGlja25lc3MsIHN0ZDo6bWF4KHRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzLjBm
KSk7CisgICAgCit9CisKK2Zsb2F0IEdyYXBoaWNzQ29udGV4dDo6ZGFzaGVkTGluZVBhdHRlcm5P
ZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgoZmxvYXQgcGF0dGVybldpZHRoLCBmbG9hdCBz
dHJva2VXaWR0aCkKK3sKKyAgICAvLyBQYXR0ZXJuIHN0YXJ0cyB3aXRoIGZ1bGwgZmlsbCBhbmQg
ZW5kcyB3aXRoIHRoZSBlbXB0eSBmaWxsLgorICAgIC8vIDEuIExldCdzIHN0YXJ0IHdpdGggdGhl
IGVtcHR5IHBoYXNlIGFmdGVyIHRoZSBjb3JuZXIuCisgICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUg
Z290IG9kZCBvciBldmVuIG51bWJlciBvZiBwYXR0ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5
IGNvdmVyIHRoZSBsaW5lLgorICAgIC8vIDMuIEluIGNhc2Ugb2YgZXZlbiBudW1iZXIgb2YgcGF0
dGVybnMgYW5kL29yIHJlbWFpbmRlciwgbW92ZSB0aGUgcGF0dGVybiBzdGFydCBwb3NpdGlvbgor
ICAgIC8vIHNvIHRoYXQgdGhlIHBhdHRlcm4gaXMgYmFsYW5jZWQgYmV0d2VlbiB0aGUgY29ybmVy
cy4KKyAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gcGF0dGVybldpZHRoOworICAgIGludCBudW1i
ZXJPZlNlZ21lbnRzID0gc3RkOjpmbG9vcihzdHJva2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Cisg
ICAgYm9vbCBvZGROdW1iZXJPZlNlZ21lbnRzID0gbnVtYmVyT2ZTZWdtZW50cyAlIDI7CisgICAg
ZmxvYXQgcmVtYWluZGVyID0gc3Ryb2tlV2lkdGggLSAobnVtYmVyT2ZTZWdtZW50cyAqIHBhdHRl
cm5XaWR0aCk7CisgICAgaWYgKG9kZE51bWJlck9mU2VnbWVudHMgJiYgcmVtYWluZGVyKQorICAg
ICAgICBwYXR0ZXJuT2Zmc2V0IC09IHJlbWFpbmRlciAvIDIuMGY7CisgICAgZWxzZSBpZiAoIW9k
ZE51bWJlck9mU2VnbWVudHMpIHsKKyAgICAgICAgaWYgKHJlbWFpbmRlcikKKyAgICAgICAgICAg
IHBhdHRlcm5PZmZzZXQgKz0gcGF0dGVybk9mZnNldCAtIChwYXR0ZXJuV2lkdGggKyByZW1haW5k
ZXIpIC8gMi4wZjsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcGF0dGVybk9mZnNldCArPSBw
YXR0ZXJuV2lkdGggLyAyLjBmOworICAgIH0KKworICAgIHJldHVybiBwYXR0ZXJuT2Zmc2V0Owor
fQorCitWZWN0b3I8RmxvYXRQb2ludD4gR3JhcGhpY3NDb250ZXh0OjpjZW50ZXJMaW5lQW5kQ3V0
T2ZmQ29ybmVycyhib29sIGlzVmVydGljYWxMaW5lLCBmbG9hdCBjb3JuZXJXaWR0aCwgRmxvYXRQ
b2ludCBwb2ludDEsIEZsb2F0UG9pbnQgcG9pbnQyKQoreworICAgIC8vIENlbnRlciBsaW5lIGFu
ZCBjdXQgb2ZmIGNvcm5lcnMgZm9yIHBhdHRlcm4gcGF0aW5pbmcuCisgICAgaWYgKGlzVmVydGlj
YWxMaW5lKSB7CisgICAgICAgIGZsb2F0IGNlbnRlck9mZnNldCA9IChwb2ludDIueCgpIC0gcG9p
bnQxLngoKSkgLyAyLjBmOworICAgICAgICBwb2ludDEubW92ZShjZW50ZXJPZmZzZXQsIGNvcm5l
cldpZHRoKTsKKyAgICAgICAgcG9pbnQyLm1vdmUoLWNlbnRlck9mZnNldCwgLWNvcm5lcldpZHRo
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBmbG9hdCBjZW50ZXJPZmZzZXQgPSAocG9pbnQyLnko
KSAtIHBvaW50MS55KCkpIC8gMi4wZjsKKyAgICAgICAgcG9pbnQxLm1vdmUoY29ybmVyV2lkdGgs
IGNlbnRlck9mZnNldCk7CisgICAgICAgIHBvaW50Mi5tb3ZlKC1jb3JuZXJXaWR0aCwgLWNlbnRl
ck9mZnNldCk7CisgICAgfQorCisgICAgcmV0dXJuIHsgcG9pbnQxLCBwb2ludDIgfTsKK30KKwog
fQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NDb250ZXh0LmgJKHJldmlzaW9uIDIwNjk0MCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC02MTgsNiArNjE4
LDExIEBAIHByaXZhdGU6CiAKICAgICBGbG9hdFJlY3QgY29tcHV0ZUxpbmVCb3VuZHNBbmRBbnRp
YWxpYXNpbmdNb2RlRm9yVGV4dChjb25zdCBGbG9hdFBvaW50JiwgZmxvYXQgd2lkdGgsIGJvb2wg
cHJpbnRpbmcsIENvbG9yJik7CiAKKyAgICBmbG9hdCBkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JT
dHJva2VXaWR0aChmbG9hdCk7CisgICAgZmxvYXQgZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0
cm9rZVdpZHRoKGZsb2F0KTsKKyAgICBmbG9hdCBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBh
dHRlcm5BbmRTdHJva2VXaWR0aChmbG9hdCBwYXR0ZXJuV2lkdGgsIGZsb2F0IHN0cm9rZVdpZHRo
KTsKKyAgICBWZWN0b3I8RmxvYXRQb2ludD4gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoYm9v
bCBpc1ZlcnRpY2FsTGluZSwgZmxvYXQgY29ybmVyV2lkdGgsIEZsb2F0UG9pbnQgcG9pbnQxLCBG
bG9hdFBvaW50IHBvaW50Mik7CisKICAgICBHcmFwaGljc0NvbnRleHRQbGF0Zm9ybVByaXZhdGUq
IG1fZGF0YSB7IG51bGxwdHIgfTsKICAgICBEaXNwbGF5TGlzdDo6UmVjb3JkZXIqIG1fZGlzcGxh
eUxpc3RSZWNvcmRlciB7IG51bGxwdHIgfTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dyYXBoaWNzQ29udGV4dENh
aXJvLmNwcAkocmV2aXNpb24gMjA2OTQwKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Fpcm8vR3JhcGhpY3NDb250ZXh0Q2Fpcm8uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
MjQsNyArMzI0LDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsbwog
ICAgIGlmIChkcmF3c0Rhc2hlZExpbmUpIHsKICAgICAgICAgY2Fpcm9fc2F2ZShjYWlyb0NvbnRl
eHQpOwogICAgICAgICAvLyBGaWd1cmUgb3V0IGVuZCBwb2ludHMgdG8gZW5zdXJlIHdlIGFsd2F5
cyBwYWludCBjb3JuZXJzLgotICAgICAgICBjb3JuZXJXaWR0aCA9IHN0cm9rZVN0eWxlID09IERv
dHRlZFN0cm9rZSA/IHRoaWNrbmVzcyA6IHN0ZDo6bWluKDIgKiB0aGlja25lc3MsIHN0ZDo6bWF4
KHRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzKSk7CisgICAgICAgIGNvcm5lcldpZHRoID0gZGFz
aGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgpOwogICAgICAgICBp
ZiAoaXNWZXJ0aWNhbExpbmUpIHsKICAgICAgICAgICAgIGZpbGxSZWN0V2l0aENvbG9yKGNhaXJv
Q29udGV4dCwgRmxvYXRSZWN0KHBvaW50MS54KCksIHBvaW50MS55KCksIHRoaWNrbmVzcywgY29y
bmVyV2lkdGgpLCBzdHJva2VDb2xvcik7CiAgICAgICAgICAgICBmaWxsUmVjdFdpdGhDb2xvcihj
YWlyb0NvbnRleHQsIEZsb2F0UmVjdChwb2ludDEueCgpLCBwb2ludDIueSgpIC0gY29ybmVyV2lk
dGgsIHRoaWNrbmVzcywgY29ybmVyV2lkdGgpLCBzdHJva2VDb2xvcik7CkBAIC0zMzMsMzAgKzMz
MywxNCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvCiAgICAgICAg
ICAgICBmaWxsUmVjdFdpdGhDb2xvcihjYWlyb0NvbnRleHQsIEZsb2F0UmVjdChwb2ludDIueCgp
IC0gY29ybmVyV2lkdGgsIHBvaW50MS55KCksIGNvcm5lcldpZHRoLCB0aGlja25lc3MpLCBzdHJv
a2VDb2xvcik7CiAgICAgICAgIH0KICAgICAgICAgc3Ryb2tlV2lkdGggLT0gMiAqIGNvcm5lcldp
ZHRoOwotICAgICAgICBmbG9hdCBwYXR0ZXJuV2lkdGggPSBzdHJva2VTdHlsZSA9PSBEb3R0ZWRT
dHJva2UgPyB0aGlja25lc3MgOiBzdGQ6Om1pbigzICogdGhpY2tuZXNzLCBzdGQ6Om1heCh0aGlj
a25lc3MsIHN0cm9rZVdpZHRoIC8gMykpOworICAgICAgICBmbG9hdCBwYXR0ZXJuV2lkdGggPSBk
YXNoZWRMaW5lUGF0dGVybldpZHRoRm9yU3Ryb2tlV2lkdGgoc3Ryb2tlV2lkdGgpOwogICAgICAg
ICAvLyBDaGVjayBpZiBjb3JuZXIgZHJhd2luZyBzdWZmaWNpZW50bHkgY292ZXJzIHRoZSBsaW5l
LgogICAgICAgICBpZiAoc3Ryb2tlV2lkdGggPD0gcGF0dGVybldpZHRoICsgMSkgewogICAgICAg
ICAgICAgY2Fpcm9fcmVzdG9yZShjYWlyb0NvbnRleHQpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKLSAgICAgICAgLy8gUGF0dGVybiBzdGFydHMgd2l0aCBmdWxsIGZpbGwgYW5k
IGVuZHMgd2l0aCB0aGUgZW1wdHkgZmlsbC4KLSAgICAgICAgLy8gMS4gTGV0J3Mgc3RhcnQgd2l0
aCB0aGUgZW1wdHkgcGhhc2UgYWZ0ZXIgdGhlIGNvcm5lci4KLSAgICAgICAgLy8gMi4gQ2hlY2sg
aWYgd2UndmUgZ290IG9kZCBvciBldmVuIG51bWJlciBvZiBwYXR0ZXJucyBhbmQgd2hldGhlciB0
aGV5IGZ1bGx5IGNvdmVyIHRoZSBsaW5lLgotICAgICAgICAvLyAzLiBJbiBjYXNlIG9mIGV2ZW4g
bnVtYmVyIG9mIHBhdHRlcm5zIGFuZC9vciByZW1haW5kZXIsIG1vdmUgdGhlIHBhdHRlcm4gc3Rh
cnQgcG9zaXRpb24KLSAgICAgICAgLy8gc28gdGhhdCB0aGUgcGF0dGVybiBpcyBiYWxhbmNlZCBi
ZXR3ZWVuIHRoZSBjb3JuZXJzLgotICAgICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gcGF0dGVy
bldpZHRoOwotICAgICAgICBpbnQgbnVtYmVyT2ZTZWdtZW50cyA9IHN0ZDo6Zmxvb3Ioc3Ryb2tl
V2lkdGggLyBwYXR0ZXJuV2lkdGgpOwotICAgICAgICBib29sIG9kZE51bWJlck9mU2VnbWVudHMg
PSBudW1iZXJPZlNlZ21lbnRzICUgMjsKLSAgICAgICAgZmxvYXQgcmVtYWluZGVyID0gc3Ryb2tl
V2lkdGggLSAobnVtYmVyT2ZTZWdtZW50cyAqIHBhdHRlcm5XaWR0aCk7Ci0gICAgICAgIGlmIChv
ZGROdW1iZXJPZlNlZ21lbnRzICYmIHJlbWFpbmRlcikKLSAgICAgICAgICAgIHBhdHRlcm5PZmZz
ZXQgLT0gcmVtYWluZGVyIC8gMi5mOwotICAgICAgICBlbHNlIGlmICghb2RkTnVtYmVyT2ZTZWdt
ZW50cykgewotICAgICAgICAgICAgaWYgKHJlbWFpbmRlcikKLSAgICAgICAgICAgICAgICBwYXR0
ZXJuT2Zmc2V0ICs9IHBhdHRlcm5PZmZzZXQgLSAocGF0dGVybldpZHRoICsgcmVtYWluZGVyKSAv
IDIuZjsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9
IHBhdHRlcm5XaWR0aCAvIDIuZjsKLSAgICAgICAgfQorICAgICAgICBmbG9hdCBwYXR0ZXJuT2Zm
c2V0ID0gZGFzaGVkTGluZVBhdHRlcm5PZmZzZXRGb3JQYXR0ZXJuQW5kU3Ryb2tlV2lkdGgocGF0
dGVybldpZHRoLCBzdHJva2VXaWR0aCk7CiAgICAgICAgIGNvbnN0IGRvdWJsZSBkYXNoZWRMaW5l
WzJdID0geyBzdGF0aWNfY2FzdDxkb3VibGU+KHBhdHRlcm5XaWR0aCksIHN0YXRpY19jYXN0PGRv
dWJsZT4ocGF0dGVybldpZHRoKSB9OwogICAgICAgICBjYWlyb19zZXRfZGFzaChjYWlyb0NvbnRl
eHQsIGRhc2hlZExpbmUsIDIsIHBhdHRlcm5PZmZzZXQpOwogICAgIH0gZWxzZSB7CkBAIC0zNjYs
MTggKzM1MCw5IEBAIHZvaWQgR3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZShjb25zdCBGbG8KICAg
ICB9CiAKIAotICAgIEZsb2F0UG9pbnQgcDEgPSBwb2ludDE7Ci0gICAgRmxvYXRQb2ludCBwMiA9
IHBvaW50MjsKLSAgICAvLyBDZW50ZXIgbGluZSBhbmQgY3V0IG9mZiBjb3JuZXJzIGZvciBwYXR0
ZXJuIHBhdGluaW5nLgotICAgIGlmIChpc1ZlcnRpY2FsTGluZSkgewotICAgICAgICBmbG9hdCBj
ZW50ZXJPZmZzZXQgPSAocDIueCgpIC0gcDEueCgpKSAvIDI7Ci0gICAgICAgIHAxLm1vdmUoY2Vu
dGVyT2Zmc2V0LCBjb3JuZXJXaWR0aCk7Ci0gICAgICAgIHAyLm1vdmUoLWNlbnRlck9mZnNldCwg
LWNvcm5lcldpZHRoKTsKLSAgICB9IGVsc2UgewotICAgICAgICBmbG9hdCBjZW50ZXJPZmZzZXQg
PSAocDIueSgpIC0gcDEueSgpKSAvIDI7Ci0gICAgICAgIHAxLm1vdmUoY29ybmVyV2lkdGgsIGNl
bnRlck9mZnNldCk7Ci0gICAgICAgIHAyLm1vdmUoLWNvcm5lcldpZHRoLCAtY2VudGVyT2Zmc2V0
KTsKLSAgICB9CisgICAgYXV0byBjZW50ZXJlZFBvaW50cyA9IGNlbnRlckxpbmVBbmRDdXRPZmZD
b3JuZXJzKGlzVmVydGljYWxMaW5lLCBjb3JuZXJXaWR0aCwgcG9pbnQxLCBwb2ludDIpOworICAg
IGF1dG8gcDEgPSBjZW50ZXJlZFBvaW50c1swXTsKKyAgICBhdXRvIHAyID0gY2VudGVyZWRQb2lu
dHNbMV07CiAKICAgICBpZiAoc2hvdWxkQW50aWFsaWFzKCkpCiAgICAgICAgIGNhaXJvX3NldF9h
bnRpYWxpYXMoY2Fpcm9Db250ZXh0LCBDQUlST19BTlRJQUxJQVNfTk9ORSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvR3JhcGhpY3ND
b250ZXh0Q0cuY3BwCShyZXZpc2lvbiAyMDY5NDApCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jZy9HcmFwaGljc0NvbnRleHRDRy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ3
MCw3ICs0NzAsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmUoY29uc3QgRmxvCiAg
ICAgQ0dDb250ZXh0U3RhdGVTYXZlciBzdGF0ZVNhdmVyKGNvbnRleHQsIGRyYXdzRGFzaGVkTGlu
ZSk7CiAgICAgaWYgKGRyYXdzRGFzaGVkTGluZSkgewogICAgICAgICAvLyBGaWd1cmUgb3V0IGVu
ZCBwb2ludHMgdG8gZW5zdXJlIHdlIGFsd2F5cyBwYWludCBjb3JuZXJzLgotICAgICAgICBjb3Ju
ZXJXaWR0aCA9IHN0cm9rZVN0eWxlID09IERvdHRlZFN0cm9rZSA/IHRoaWNrbmVzcyA6IHN0ZDo6
bWluKDIgKiB0aGlja25lc3MsIHN0ZDo6bWF4KHRoaWNrbmVzcywgc3Ryb2tlV2lkdGggLyAzKSk7
CisgICAgICAgIGNvcm5lcldpZHRoID0gZGFzaGVkTGluZUNvcm5lcldpZHRoRm9yU3Ryb2tlV2lk
dGgoc3Ryb2tlV2lkdGgpOwogICAgICAgICBzZXRDR0ZpbGxDb2xvcihjb250ZXh0LCBzdHJva2VD
b2xvcigpKTsKICAgICAgICAgaWYgKGlzVmVydGljYWxMaW5lKSB7CiAgICAgICAgICAgICBDR0Nv
bnRleHRGaWxsUmVjdChjb250ZXh0LCBGbG9hdFJlY3QocG9pbnQxLngoKSwgcG9pbnQxLnkoKSwg
dGhpY2tuZXNzLCBjb3JuZXJXaWR0aCkpOwpAQCAtNDgwLDQ0ICs0ODAsMTkgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsbwogICAgICAgICAgICAgQ0dDb250ZXh0Rmls
bFJlY3QoY29udGV4dCwgRmxvYXRSZWN0KHBvaW50Mi54KCkgLSBjb3JuZXJXaWR0aCwgcG9pbnQx
LnkoKSwgY29ybmVyV2lkdGgsIHRoaWNrbmVzcykpOwogICAgICAgICB9CiAgICAgICAgIHN0cm9r
ZVdpZHRoIC09IDIgKiBjb3JuZXJXaWR0aDsKLSAgICAgICAgZmxvYXQgcGF0dGVybldpZHRoID0g
c3Ryb2tlU3R5bGUgPT0gRG90dGVkU3Ryb2tlID8gdGhpY2tuZXNzIDogc3RkOjptaW4oMyAqIHRo
aWNrbmVzcywgc3RkOjptYXgodGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMpKTsKKyAgICAgICAg
ZmxvYXQgcGF0dGVybldpZHRoID0gZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0cm9rZVdpZHRo
KHN0cm9rZVdpZHRoKTsKICAgICAgICAgLy8gQ2hlY2sgaWYgY29ybmVyIGRyYXdpbmcgc3VmZmlj
aWVudGx5IGNvdmVycyB0aGUgbGluZS4KICAgICAgICAgaWYgKHN0cm9rZVdpZHRoIDw9IHBhdHRl
cm5XaWR0aCArIDEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8gUGF0dGVybiBz
dGFydHMgd2l0aCBmdWxsIGZpbGwgYW5kIGVuZHMgd2l0aCB0aGUgZW1wdHkgZmlsbC4KLSAgICAg
ICAgLy8gMS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZW1wdHkgcGhhc2UgYWZ0ZXIgdGhlIGNvcm5l
ci4KLSAgICAgICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUgZ290IG9kZCBvciBldmVuIG51bWJlciBv
ZiBwYXR0ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5IGNvdmVyIHRoZSBsaW5lLgotICAgICAg
ICAvLyAzLiBJbiBjYXNlIG9mIGV2ZW4gbnVtYmVyIG9mIHBhdHRlcm5zIGFuZC9vciByZW1haW5k
ZXIsIG1vdmUgdGhlIHBhdHRlcm4gc3RhcnQgcG9zaXRpb24KLSAgICAgICAgLy8gc28gdGhhdCB0
aGUgcGF0dGVybiBpcyBiYWxhbmNlZCBiZXR3ZWVuIHRoZSBjb3JuZXJzLgotICAgICAgICBmbG9h
dCBwYXR0ZXJuT2Zmc2V0ID0gcGF0dGVybldpZHRoOwotICAgICAgICBpbnQgbnVtYmVyT2ZTZWdt
ZW50cyA9IGZsb29yZihzdHJva2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Ci0gICAgICAgIGJvb2wg
b2RkTnVtYmVyT2ZTZWdtZW50cyA9IG51bWJlck9mU2VnbWVudHMgJSAyOwotICAgICAgICBmbG9h
dCByZW1haW5kZXIgPSBzdHJva2VXaWR0aCAtIChudW1iZXJPZlNlZ21lbnRzICogcGF0dGVybldp
ZHRoKTsKLSAgICAgICAgaWYgKG9kZE51bWJlck9mU2VnbWVudHMgJiYgcmVtYWluZGVyKQotICAg
ICAgICAgICAgcGF0dGVybk9mZnNldCAtPSByZW1haW5kZXIgLyAyOwotICAgICAgICBlbHNlIGlm
ICghb2RkTnVtYmVyT2ZTZWdtZW50cykgewotICAgICAgICAgICAgaWYgKHJlbWFpbmRlcikKLSAg
ICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHBhdHRlcm5PZmZzZXQgLSAocGF0dGVybldp
ZHRoICsgcmVtYWluZGVyKSAgLyAyOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAg
IHBhdHRlcm5PZmZzZXQgKz0gcGF0dGVybldpZHRoICAvIDI7Ci0gICAgICAgIH0KKyAgICAgICAg
ZmxvYXQgcGF0dGVybk9mZnNldCA9IGRhc2hlZExpbmVQYXR0ZXJuT2Zmc2V0Rm9yUGF0dGVybkFu
ZFN0cm9rZVdpZHRoKHBhdHRlcm5XaWR0aCwgc3Ryb2tlV2lkdGgpOwogICAgICAgICBjb25zdCBD
R0Zsb2F0IGRhc2hlZExpbmVbMl0gPSB7IHN0YXRpY19jYXN0PENHRmxvYXQ+KHBhdHRlcm5XaWR0
aCksIHN0YXRpY19jYXN0PENHRmxvYXQ+KHBhdHRlcm5XaWR0aCkgfTsKICAgICAgICAgQ0dDb250
ZXh0U2V0TGluZURhc2goY29udGV4dCwgcGF0dGVybk9mZnNldCwgZGFzaGVkTGluZSwgMik7CiAg
ICAgfQogCi0gICAgRmxvYXRQb2ludCBwMSA9IHBvaW50MTsKLSAgICBGbG9hdFBvaW50IHAyID0g
cG9pbnQyOwotICAgIC8vIENlbnRlciBsaW5lIGFuZCBjdXQgb2ZmIGNvcm5lcnMgZm9yIHBhdHRl
cm4gcGF0aW5pbmcuCi0gICAgaWYgKGlzVmVydGljYWxMaW5lKSB7Ci0gICAgICAgIGZsb2F0IGNl
bnRlck9mZnNldCA9IChwMi54KCkgLSBwMS54KCkpIC8gMjsKLSAgICAgICAgcDEubW92ZShjZW50
ZXJPZmZzZXQsIGNvcm5lcldpZHRoKTsKLSAgICAgICAgcDIubW92ZSgtY2VudGVyT2Zmc2V0LCAt
Y29ybmVyV2lkdGgpOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGZsb2F0IGNlbnRlck9mZnNldCA9
IChwMi55KCkgLSBwMS55KCkpIC8gMjsKLSAgICAgICAgcDEubW92ZShjb3JuZXJXaWR0aCwgY2Vu
dGVyT2Zmc2V0KTsKLSAgICAgICAgcDIubW92ZSgtY29ybmVyV2lkdGgsIC1jZW50ZXJPZmZzZXQp
OwotICAgIH0KKyAgICBhdXRvIGNlbnRlcmVkUG9pbnRzID0gY2VudGVyTGluZUFuZEN1dE9mZkNv
cm5lcnMoaXNWZXJ0aWNhbExpbmUsIGNvcm5lcldpZHRoLCBwb2ludDEsIHBvaW50Mik7CisgICAg
YXV0byBwMSA9IGNlbnRlcmVkUG9pbnRzWzBdOworICAgIGF1dG8gcDIgPSBjZW50ZXJlZFBvaW50
c1sxXTsKIAogICAgIGlmIChzaG91bGRBbnRpYWxpYXMoKSkgewogI2lmIFBMQVRGT1JNKElPUykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9HcmFwaGljc0NvbnRl
eHREaXJlY3QyRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERpcmVjdDJELmNwcAkocmV2aXNpb24gMjA2OTQwKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL0dyYXBoaWNzQ29udGV4dERp
cmVjdDJELmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAyLDQ5ICs1MDIsMjIgQEAgdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdMaW5lKGNvbnN0IEZsbwogICAgIEQyRENvbnRleHRTdGF0ZVNhdmVy
IHN0YXRlU2F2ZXIoKm1fZGF0YSwgZHJhd3NEYXNoZWRMaW5lKTsKICAgICBpZiAoZHJhd3NEYXNo
ZWRMaW5lKSB7CiAgICAgICAgIC8vIEZpZ3VyZSBvdXQgZW5kIHBvaW50cyB0byBlbnN1cmUgd2Ug
YWx3YXlzIHBhaW50IGNvcm5lcnMuCi0gICAgICAgIGNvcm5lcldpZHRoID0gc3Ryb2tlU3R5bGUg
PT0gRG90dGVkU3Ryb2tlID8gdGhpY2tuZXNzIDogc3RkOjptaW4oMiAqIHRoaWNrbmVzcywgc3Rk
OjptYXgodGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMpKTsKKyAgICAgICAgY29ybmVyV2lkdGgg
PSBkYXNoZWRMaW5lQ29ybmVyV2lkdGhGb3JTdHJva2VXaWR0aChzdHJva2VXaWR0aCk7CiAgICAg
ICAgIHN0cm9rZVdpZHRoIC09IDIgKiBjb3JuZXJXaWR0aDsKLSAgICAgICAgZmxvYXQgcGF0dGVy
bldpZHRoID0gc3Ryb2tlU3R5bGUgPT0gRG90dGVkU3Ryb2tlID8gdGhpY2tuZXNzIDogc3RkOjpt
aW4oMyAqIHRoaWNrbmVzcywgc3RkOjptYXgodGhpY2tuZXNzLCBzdHJva2VXaWR0aCAvIDMpKTsK
KyAgICAgICAgZmxvYXQgcGF0dGVybldpZHRoID0gZGFzaGVkTGluZVBhdHRlcm5XaWR0aEZvclN0
cm9rZVdpZHRoKHN0cm9rZVdpZHRoKTsKICAgICAgICAgLy8gQ2hlY2sgaWYgY29ybmVyIGRyYXdp
bmcgc3VmZmljaWVudGx5IGNvdmVycyB0aGUgbGluZS4KICAgICAgICAgaWYgKHN0cm9rZVdpZHRo
IDw9IHBhdHRlcm5XaWR0aCArIDEpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgLy8g
UGF0dGVybiBzdGFydHMgd2l0aCBmdWxsIGZpbGwgYW5kIGVuZHMgd2l0aCB0aGUgZW1wdHkgZmls
bC4KLSAgICAgICAgLy8gMS4gTGV0J3Mgc3RhcnQgd2l0aCB0aGUgZW1wdHkgcGhhc2UgYWZ0ZXIg
dGhlIGNvcm5lci4KLSAgICAgICAgLy8gMi4gQ2hlY2sgaWYgd2UndmUgZ290IG9kZCBvciBldmVu
IG51bWJlciBvZiBwYXR0ZXJucyBhbmQgd2hldGhlciB0aGV5IGZ1bGx5IGNvdmVyIHRoZSBsaW5l
LgotICAgICAgICAvLyAzLiBJbiBjYXNlIG9mIGV2ZW4gbnVtYmVyIG9mIHBhdHRlcm5zIGFuZC9v
ciByZW1haW5kZXIsIG1vdmUgdGhlIHBhdHRlcm4gc3RhcnQgcG9zaXRpb24KLSAgICAgICAgLy8g
c28gdGhhdCB0aGUgcGF0dGVybiBpcyBiYWxhbmNlZCBiZXR3ZWVuIHRoZSBjb3JuZXJzLgotICAg
ICAgICBmbG9hdCBwYXR0ZXJuT2Zmc2V0ID0gcGF0dGVybldpZHRoOwotICAgICAgICBpbnQgbnVt
YmVyT2ZTZWdtZW50cyA9IGZsb29yZihzdHJva2VXaWR0aCAvIHBhdHRlcm5XaWR0aCk7Ci0gICAg
ICAgIGJvb2wgb2RkTnVtYmVyT2ZTZWdtZW50cyA9IG51bWJlck9mU2VnbWVudHMgJSAyOwotICAg
ICAgICBmbG9hdCByZW1haW5kZXIgPSBzdHJva2VXaWR0aCAtIChudW1iZXJPZlNlZ21lbnRzICog
cGF0dGVybldpZHRoKTsKLSAgICAgICAgaWYgKG9kZE51bWJlck9mU2VnbWVudHMgJiYgcmVtYWlu
ZGVyKQotICAgICAgICAgICAgcGF0dGVybk9mZnNldCAtPSByZW1haW5kZXIgLyAyOwotICAgICAg
ICBlbHNlIGlmICghb2RkTnVtYmVyT2ZTZWdtZW50cykgewotICAgICAgICAgICAgaWYgKHJlbWFp
bmRlcikKLSAgICAgICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ICs9IHBhdHRlcm5PZmZzZXQgLSAo
cGF0dGVybldpZHRoICsgcmVtYWluZGVyKSAvIDI7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgcGF0dGVybk9mZnNldCArPSBwYXR0ZXJuV2lkdGggLyAyOwotICAgICAgICB9Cisg
ICAgICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSBkYXNoZWRMaW5lUGF0dGVybk9mZnNldEZvclBh
dHRlcm5BbmRTdHJva2VXaWR0aChwYXR0ZXJuV2lkdGgsIHN0cm9rZVdpZHRoKTsKICAgICAgICAg
Y29uc3QgZmxvYXQgZGFzaGVzWzJdID0geyBwYXR0ZXJuV2lkdGgsIHBhdHRlcm5XaWR0aCB9Owot
CiAgICAgICAgIGF1dG8gc3Ryb2tlU3R5bGVQcm9wZXJ0aWVzID0gRDJEMTo6U3Ryb2tlU3R5bGVQ
cm9wZXJ0aWVzKCk7Ci0KICAgICAgICAgR3JhcGhpY3NDb250ZXh0OjpzeXN0ZW1GYWN0b3J5KCkt
PkNyZWF0ZVN0cm9rZVN0eWxlKCZzdHJva2VTdHlsZVByb3BlcnRpZXMsIGRhc2hlcywgQVJSQVlT
SVpFKGRhc2hlcyksICZkMmRTdHJva2VTdHlsZSk7CiAgICAgfQogCi0gICAgRmxvYXRQb2ludCBw
MSA9IHBvaW50MTsKLSAgICBGbG9hdFBvaW50IHAyID0gcG9pbnQyOwotICAgIC8vIENlbnRlciBs
aW5lIGFuZCBjdXQgb2ZmIGNvcm5lcnMgZm9yIHBhdHRlcm4gcGF0aW5pbmcuCi0gICAgaWYgKGlz
VmVydGljYWxMaW5lKSB7Ci0gICAgICAgIGZsb2F0IGNlbnRlck9mZnNldCA9IChwMi54KCkgLSBw
MS54KCkpIC8gMjsKLSAgICAgICAgcDEubW92ZShjZW50ZXJPZmZzZXQsIGNvcm5lcldpZHRoKTsK
LSAgICAgICAgcDIubW92ZSgtY2VudGVyT2Zmc2V0LCAtY29ybmVyV2lkdGgpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGZsb2F0IGNlbnRlck9mZnNldCA9IChwMi55KCkgLSBwMS55KCkpIC8gMjsK
LSAgICAgICAgcDEubW92ZShjb3JuZXJXaWR0aCwgY2VudGVyT2Zmc2V0KTsKLSAgICAgICAgcDIu
bW92ZSgtY29ybmVyV2lkdGgsIC1jZW50ZXJPZmZzZXQpOwotICAgIH0KKyAgICBhdXRvIGNlbnRl
cmVkUG9pbnRzID0gY2VudGVyTGluZUFuZEN1dE9mZkNvcm5lcnMoaXNWZXJ0aWNhbExpbmUsIGNv
cm5lcldpZHRoLCBwb2ludDEsIHBvaW50Mik7CisgICAgYXV0byBwMSA9IGNlbnRlcmVkUG9pbnRz
WzBdOworICAgIGF1dG8gcDIgPSBjZW50ZXJlZFBvaW50c1sxXTsKIAogICAgIGNvbnRleHQtPlNl
dFRhZ3MoMSwgX19MSU5FX18pOwogCg==
</data>
<flag name="review"
          id="314142"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="314156"
          type_id="3"
          status="-"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>