<?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>23774</bug_id>
          
          <creation_ts>2009-02-05 15:44:41 -0800</creation_ts>
          <short_desc>Selection::validate() should be broken into smaller pieces to be less confusing</short_desc>
          <delta_ts>2009-02-06 16:09:03 -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>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>hyatt</cc>
    
    <cc>justin.garcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>108541</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 15:44:41 -0800</bug_when>
    <thetext>Selection::validate() should be broken into smaller pieces to be less confusing

I&apos;ve done so.  I think it&apos;s a lot easier to read. :)

I also changed EState to SelectionState to match the coding style guidelines.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108542</commentid>
    <comment_count>1</comment_count>
      <attachid>27367</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 15:45:25 -0800</bug_when>
    <thetext>Created attachment 27367
Minor refactoring and cleanup to Selection code

 WebCore/ChangeLog                     |   36 +++++++++++
 WebCore/editing/Editor.cpp            |   16 +++---
 WebCore/editing/Selection.cpp         |  104 +++++++++++++++++---------------
 WebCore/editing/Selection.h           |   36 ++++++-----
 WebCore/editing/SelectionController.h |    2 +-
 WebCore/editing/TypingCommand.cpp     |   16 +++---
 WebCore/page/Frame.cpp                |   16 ++---
 7 files changed, 134 insertions(+), 92 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108545</commentid>
    <comment_count>2</comment_count>
      <attachid>27368</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 16:04:55 -0800</bug_when>
    <thetext>Created attachment 27368
Slightly clearer diff, and added documentation of ASSERTS ojan and I kept hitting in this code.

 WebCore/ChangeLog                     |   36 ++++++++++++++++++++++
 WebCore/editing/Editor.cpp            |   16 +++++-----
 WebCore/editing/Selection.cpp         |   54 +++++++++++++++++++-------------
 WebCore/editing/Selection.h           |   36 ++++++++++++----------
 WebCore/editing/SelectionController.h |    2 +-
 WebCore/editing/TypingCommand.cpp     |   16 +++++-----
 WebCore/page/Frame.cpp                |   16 ++++------
 7 files changed, 111 insertions(+), 65 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108546</commentid>
    <comment_count>3</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-05 16:18:57 -0800</bug_when>
    <thetext>Adding folks who might like to review this (tiny) piece of wonderment!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108555</commentid>
    <comment_count>4</comment_count>
      <attachid>27368</attachid>
    <who name="Ojan Vafai">ojan</who>
    <bug_when>2009-02-05 17:34:15 -0800</bug_when>
    <thetext>Comment on attachment 27368
Slightly clearer diff, and added documentation of ASSERTS ojan and I kept hitting in this code.

A nit. (not that I&apos;m a reviewer)

&gt; +++ b/WebCore/editing/Selection.cpp
&gt; +void Selection::setBaseAndExtentToDeepEquivilants()

Typo: Equivalents. Here and elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108718</commentid>
    <comment_count>5</comment_count>
      <attachid>27368</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 14:37:18 -0800</bug_when>
    <thetext>Comment on attachment 27368
Slightly clearer diff, and added documentation of ASSERTS ojan and I kept hitting in this code.

Will post update with spelling correction and fix of ASSERT</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108719</commentid>
    <comment_count>6</comment_count>
      <attachid>27419</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 14:37:34 -0800</bug_when>
    <thetext>Created attachment 27419
updated after ojan and mark&apos;s comments

 WebCore/ChangeLog                     |   36 ++++++++++++++++++++++
 WebCore/editing/Editor.cpp            |   16 +++++-----
 WebCore/editing/Selection.cpp         |   52 +++++++++++++++++++-------------
 WebCore/editing/Selection.h           |   36 ++++++++++++----------
 WebCore/editing/SelectionController.h |    2 +-
 WebCore/editing/TypingCommand.cpp     |   16 +++++-----
 WebCore/page/Frame.cpp                |   16 ++++------
 7 files changed, 110 insertions(+), 64 deletions(-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108720</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 14:38:15 -0800</bug_when>
    <thetext>I&apos;ve of course run the layout tests and they pass. :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108731</commentid>
    <comment_count>8</comment_count>
    <who name="Justin Garcia">justin.garcia</who>
    <bug_when>2009-02-06 15:22:01 -0800</bug_when>
    <thetext>-    enum EDirection { FORWARD, BACKWARD, RIGHT, LEFT };

Where did it go?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108739</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 15:33:22 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; -    enum EDirection { FORWARD, BACKWARD, RIGHT, LEFT };
&gt; 
&gt; Where did it go?

It&apos;s not needed in this file.  It&apos;s already declared in SelectionController as well iirc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108759</commentid>
    <comment_count>10</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-02-06 16:09:03 -0800</bug_when>
    <thetext>Thanks!

VisibleSelection here we come!

Committing to http://svn.webkit.org/repository/webkit/trunk ...
	M	WebCore/ChangeLog
	M	WebCore/editing/Editor.cpp
	M	WebCore/editing/Selection.cpp
	M	WebCore/editing/Selection.h
	M	WebCore/editing/SelectionController.h
	M	WebCore/editing/TypingCommand.cpp
	M	WebCore/page/Frame.cpp
Committed r40738
</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27367</attachid>
            <date>2009-02-05 15:45:25 -0800</date>
            <delta_ts>2009-02-05 16:05:06 -0800</delta_ts>
            <desc>Minor refactoring and cleanup to Selection code</desc>
            <filename>Minor-refactoring-and-cleanup-to-Selection-code.patch</filename>
            <type>text/plain</type>
            <size>15669</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">OGFlNzNkMTk1ZGE4YTQ1OWMwYTQxYTlmZmRhNDBkNGNhZjBhODFmNQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYzA1ZjI2Li43Y2IzZTE0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM5IEBACisyMDA5LTAyLTA1ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNaW5v
ciByZWZhY3RvcmluZyBhbmQgY2xlYW51cCB0byBTZWxlY3Rpb24gY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzQKKworICAgICAgICBObyBm
dW5jdGlvbmFsIGNoYW5nZXMsIHRodXMgbm8gdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OlNlbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvTWF0Y2hH
cmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246Om5vcm1hbGl6ZUJhc2VB
bmRFeHRlbnRBbmRTZXRTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246
OnVwZGF0ZVNlbGVjdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjp2YWxp
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnNldFdpdGhvdXRWYWxpZGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENy
b3NzaW5nRWRpdGJsZUJvdW5kYXJpZXMpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246Oik6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb246OnNlbGVjdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjpleHRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjppc05vbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uOjppc0NhcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6
aXNSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OmlzQ2FyZXRPclJhbmdlKToK
KyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdGlvblR5cGUpOgorICAgICAgICAqIGVkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZXZlYWxTZWxlY3Rpb24pOgorCiAyMDA5LTAyLTA1ICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2V2
aW4gRGVja2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAyYWFiNDU0Li5lMTk1MjhjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcApAQCAtNzEwLDE0ICs3MTAsMTQgQEAgYm9vbCBFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIENsaXBib2FyZEFjY2Vzc1BvbGkKIAogdm9p
ZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
dGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOT05FOgorICAgIHN3aXRjaCAobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIFNlbGVj
dGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOgorICAgICAgICBjYXNlIFNl
bGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246CiAgICAgICAgICAgICBtX2ZyYW1lLT5jb21wdXRlQW5k
U2V0VHlwaW5nU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246
OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYg
c3R5bGUpCiAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpj
cmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNzMxLDEyICs3MzEsMTIgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEFw
cGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFJhbmdlKiByYW5nZSkKICAgICAK
IHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgc3dpdGNoIChtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tk9ORToKKyAg
ICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICAgICAgLy8gZG8gbm90aGlu
ZwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKLSAg
ICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q2Fy
ZXRTZWxlY3Rpb246CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIHN0eWxlKQogICAgICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3Vt
ZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFuZDo6Rm9yY2VCbG9j
a1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAppbmRl
eCA0ZmIzYTU0Li5mYTg2ZWE5IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
LmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNwcApAQCAtNDMsNyArNDMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTZWxlY3Rpb246OlNlbGVjdGlvbigpCiAgICAgOiBtX2Fm
ZmluaXR5KERPV05TVFJFQU0pCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFy
aXR5KQotICAgICwgbV9zdGF0ZShOT05FKQorICAgICwgbV9zZWxlY3Rpb25UeXBlKE5vU2VsZWN0
aW9uKQogICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewogfQpAQCAtMjM4LDQwICsyMzgsOCBA
QCB2b2lkIFNlbGVjdGlvbjo6YXBwZW5kVHJhaWxpbmdXaGl0ZXNwYWNlKCkKICAgICB9CiB9CiAK
LXZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCit2b2lkIFNlbGVjdGlvbjo6ZXhwYW5kU2VsZWN0
aW9uVG9NYXRjaEdyYW51bGFyaXR5KCkKIHsKLSAgICAvLyBNb3ZlIHRoZSBzZWxlY3Rpb24gdG8g
cmVuZGVyZWQgcG9zaXRpb25zLCBpZiBwb3NzaWJsZS4KLSAgICBib29sIGJhc2VBbmRFeHRlbnRF
cXVhbCA9IG1fYmFzZSA9PSBtX2V4dGVudDsKLSAgICBpZiAobV9iYXNlLmlzTm90TnVsbCgpKSB7
Ci0gICAgICAgIG1fYmFzZSA9IFZpc2libGVQb3NpdGlvbihtX2Jhc2UsIG1fYWZmaW5pdHkpLmRl
ZXBFcXVpdmFsZW50KCk7Ci0gICAgICAgIGlmIChiYXNlQW5kRXh0ZW50RXF1YWwpCi0gICAgICAg
ICAgICBtX2V4dGVudCA9IG1fYmFzZTsKLSAgICB9Ci0gICAgaWYgKG1fZXh0ZW50LmlzTm90TnVs
bCgpICYmICFiYXNlQW5kRXh0ZW50RXF1YWwpCi0gICAgICAgIG1fZXh0ZW50ID0gVmlzaWJsZVBv
c2l0aW9uKG1fZXh0ZW50LCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOwotCi0gICAgLy8g
TWFrZSBzdXJlIHdlIGRvIG5vdCBoYXZlIGEgZGFuZ2xpbmcgYmFzZSBvciBleHRlbnQuCi0gICAg
aWYgKG1fYmFzZS5pc051bGwoKSAmJiBtX2V4dGVudC5pc051bGwoKSkKLSAgICAgICAgbV9iYXNl
SXNGaXJzdCA9IHRydWU7Ci0gICAgZWxzZSBpZiAobV9iYXNlLmlzTnVsbCgpKSB7Ci0gICAgICAg
IG1fYmFzZSA9IG1fZXh0ZW50OwotICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKLSAgICB9
IGVsc2UgaWYgKG1fZXh0ZW50LmlzTnVsbCgpKSB7Ci0gICAgICAgIG1fZXh0ZW50ID0gbV9iYXNl
OwotICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICBt
X2Jhc2VJc0ZpcnN0ID0gY29tcGFyZVBvc2l0aW9ucyhtX2Jhc2UsIG1fZXh0ZW50KSA8PSAwOwot
ICAgIH0KLQotICAgIGlmIChtX2Jhc2VJc0ZpcnN0KSB7Ci0gICAgICAgIG1fc3RhcnQgPSBtX2Jh
c2U7Ci0gICAgICAgIG1fZW5kID0gbV9leHRlbnQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9z
dGFydCA9IG1fZXh0ZW50OwotICAgICAgICBtX2VuZCA9IG1fYmFzZTsKLSAgICB9Ci0KLSAgICAv
LyBFeHBhbmQgdGhlIHNlbGVjdGlvbiBpZiByZXF1ZXN0ZWQuCiAgICAgc3dpdGNoIChtX2dyYW51
bGFyaXR5KSB7CiAgICAgICAgIGNhc2UgQ2hhcmFjdGVyR3JhbnVsYXJpdHk6CiAgICAgICAgICAg
ICAvLyBEb24ndCBkbyBhbnkgZXhwYW5zaW9uLgpAQCAtMzg1LDI2ICszNTMsNjQgQEAgdm9pZCBT
ZWxlY3Rpb246OnZhbGlkYXRlKCkKICAgICAgICAgbV9zdGFydCA9IG1fZW5kOwogICAgIGlmICht
X2VuZC5pc051bGwoKSkKICAgICAgICAgbV9lbmQgPSBtX3N0YXJ0OwotICAgIAotICAgIGFkanVz
dEZvckVkaXRhYmxlQ29udGVudCgpOworfQogCi0gICAgLy8gYWRqdXN0IHRoZSBzdGF0ZQordm9p
ZCBTZWxlY3Rpb246Om5vcm1hbGl6ZUJhc2VBbmRFeHRlbnRBbmRTZXRTdGFydEFuZEVuZCgpCit7
CisgICAgLy8gTW92ZSB0aGUgc2VsZWN0aW9uIHRvIHJlbmRlcmVkIHBvc2l0aW9ucywgaWYgcG9z
c2libGUuCisgICAgYm9vbCBiYXNlQW5kRXh0ZW50RXF1YWwgPSBtX2Jhc2UgPT0gbV9leHRlbnQ7
CisgICAgaWYgKG1fYmFzZS5pc05vdE51bGwoKSkgeworICAgICAgICBtX2Jhc2UgPSBWaXNpYmxl
UG9zaXRpb24obV9iYXNlLCBtX2FmZmluaXR5KS5kZWVwRXF1aXZhbGVudCgpOworICAgICAgICBp
ZiAoYmFzZUFuZEV4dGVudEVxdWFsKQorICAgICAgICAgICAgbV9leHRlbnQgPSBtX2Jhc2U7Cisg
ICAgfQorICAgIGlmIChtX2V4dGVudC5pc05vdE51bGwoKSAmJiAhYmFzZUFuZEV4dGVudEVxdWFs
KQorICAgICAgICBtX2V4dGVudCA9IFZpc2libGVQb3NpdGlvbihtX2V4dGVudCwgbV9hZmZpbml0
eSkuZGVlcEVxdWl2YWxlbnQoKTsKKworICAgIC8vIE1ha2Ugc3VyZSB3ZSBkbyBub3QgaGF2ZSBh
IGRhbmdsaW5nIGJhc2Ugb3IgZXh0ZW50LgorICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkgJiYgbV9l
eHRlbnQuaXNOdWxsKCkpCisgICAgICAgIG1fYmFzZUlzRmlyc3QgPSB0cnVlOworICAgIGVsc2Ug
aWYgKG1fYmFzZS5pc051bGwoKSkgeworICAgICAgICBtX2Jhc2UgPSBtX2V4dGVudDsKKyAgICAg
ICAgbV9iYXNlSXNGaXJzdCA9IHRydWU7CisgICAgfSBlbHNlIGlmIChtX2V4dGVudC5pc051bGwo
KSkgeworICAgICAgICBtX2V4dGVudCA9IG1fYmFzZTsKKyAgICAgICAgbV9iYXNlSXNGaXJzdCA9
IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIG1fYmFzZUlzRmlyc3QgPSBjb21wYXJlUG9zaXRp
b25zKG1fYmFzZSwgbV9leHRlbnQpIDw9IDA7CisKKyAgICBpZiAobV9iYXNlSXNGaXJzdCkgewor
ICAgICAgICBtX3N0YXJ0ID0gbV9iYXNlOworICAgICAgICBtX2VuZCA9IG1fZXh0ZW50OworICAg
IH0gZWxzZSB7CisgICAgICAgIG1fc3RhcnQgPSBtX2V4dGVudDsKKyAgICAgICAgbV9lbmQgPSBt
X2Jhc2U7CisgICAgfQorfQorCit2b2lkIFNlbGVjdGlvbjo6dXBkYXRlU2VsZWN0aW9uVHlwZSgp
Cit7CiAgICAgaWYgKG1fc3RhcnQuaXNOdWxsKCkpIHsKICAgICAgICAgQVNTRVJUKG1fZW5kLmlz
TnVsbCgpKTsKLSAgICAgICAgbV9zdGF0ZSA9IE5PTkU7Ci0KLSAgICAgICAgLy8gZW5mb3JjZSBk
b3duc3RyZWFtIGFmZmluaXR5IGlmIG5vdCBjYXJldCwgYXMgYWZmaW5pdHkgb25seQotICAgICAg
ICAvLyBtYWtlcyBzZW5zZSBmb3IgY2FyZXQKLSAgICAgICAgbV9hZmZpbml0eSA9IERPV05TVFJF
QU07CisgICAgICAgIG1fc2VsZWN0aW9uVHlwZSA9IE5vU2VsZWN0aW9uOwogICAgIH0gZWxzZSBp
ZiAobV9zdGFydCA9PSBtX2VuZCB8fCBtX3N0YXJ0LnVwc3RyZWFtKCkgPT0gbV9lbmQudXBzdHJl
YW0oKSkgewotICAgICAgICBtX3N0YXRlID0gQ0FSRVQ7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
bV9zdGF0ZSA9IFJBTkdFOworICAgICAgICBtX3NlbGVjdGlvblR5cGUgPSBDYXJldFNlbGVjdGlv
bjsKKyAgICB9IGVsc2UKKyAgICAgICAgbV9zZWxlY3Rpb25UeXBlID0gUmFuZ2VTZWxlY3Rpb247
CiAKLSAgICAgICAgLy8gZW5mb3JjZSBkb3duc3RyZWFtIGFmZmluaXR5IGlmIG5vdCBjYXJldCwg
YXMgYWZmaW5pdHkgb25seQotICAgICAgICAvLyBtYWtlcyBzZW5zZSBmb3IgY2FyZXQKKyAgICAv
LyBBZmZpbml0eSBvbmx5IG1ha2VzIHNlbnNlIGZvciBhIGNhcmV0CisgICAgaWYgKCFpc0NhcmV0
KCkpCiAgICAgICAgIG1fYWZmaW5pdHkgPSBET1dOU1RSRUFNOworfQorCit2b2lkIFNlbGVjdGlv
bjo6dmFsaWRhdGUoKQoreworICAgIG5vcm1hbGl6ZUJhc2VBbmRFeHRlbnRBbmRTZXRTdGFydEFu
ZEVuZCgpOworICAgIGV4cGFuZFNlbGVjdGlvblRvTWF0Y2hHcmFudWxhcml0eSgpOworICAgIGFk
anVzdFNlbGVjdGlvblRvQXZvaWRDcm9zc2luZ0VkaXRibGVCb3VuZGFyaWVzKCk7CisgICAgdXBk
YXRlU2VsZWN0aW9uVHlwZSgpOwogCisgICAgaWYgKHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNl
bGVjdGlvbikgewogICAgICAgICAvLyAiQ29uc3RyYWluIiB0aGUgc2VsZWN0aW9uIHRvIGJlIHRo
ZSBzbWFsbGVzdCBlcXVpdmFsZW50IHJhbmdlIG9mIG5vZGVzLgogICAgICAgICAvLyBUaGlzIGlz
IGEgc29tZXdoYXQgYXJiaXRyYXJ5IGNob2ljZSwgYnV0IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBp
dCBpcwogICAgICAgICAvLyB1c2VmdWwgdG8gbWFrZSB0byBtYWtlIHRoZSBzZWxlY3Rpb24gImNh
bm9uaWNhbCIgKGlmIG9ubHkgZm9yCkBAIC00NDEsMTAgKzQ0NywxMCBAQCB2b2lkIFNlbGVjdGlv
bjo6c2V0V2l0aG91dFZhbGlkYXRpb24oY29uc3QgUG9zaXRpb24mIGJhc2UsIGNvbnN0IFBvc2l0
aW9uJiBleHRlbgogICAgICAgICBtX3N0YXJ0ID0gZXh0ZW50OwogICAgICAgICBtX2VuZCA9IGJh
c2U7CiAgICAgfQotICAgIG1fc3RhdGUgPSBSQU5HRTsKKyAgICBtX3NlbGVjdGlvblR5cGUgPSBS
YW5nZVNlbGVjdGlvbjsKIH0KIAotdm9pZCBTZWxlY3Rpb246OmFkanVzdEZvckVkaXRhYmxlQ29u
dGVudCgpCit2b2lkIFNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENyb3NzaW5nRWRp
dGJsZUJvdW5kYXJpZXMoKQogewogICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkgfHwgbV9zdGFydC5p
c051bGwoKSB8fCBtX2VuZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5oIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5o
CmluZGV4IDVlMjE3MDEuLmQ3M2Y5ZGIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxl
Y3Rpb24uaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmgKQEAgLTM3LDggKzM3LDcg
QEAgY29uc3QgRUFmZmluaXR5IFNFTF9ERUZBVUxUX0FGRklOSVRZID0gRE9XTlNUUkVBTTsKIAog
Y2xhc3MgU2VsZWN0aW9uIHsKIHB1YmxpYzoKLSAgICBlbnVtIEVTdGF0ZSB7IE5PTkUsIENBUkVU
LCBSQU5HRSB9OwotICAgIGVudW0gRURpcmVjdGlvbiB7IEZPUldBUkQsIEJBQ0tXQVJELCBSSUdI
VCwgTEVGVCB9OworICAgIGVudW0gU2VsZWN0aW9uVHlwZSB7IE5vU2VsZWN0aW9uLCBDYXJldFNl
bGVjdGlvbiwgUmFuZ2VTZWxlY3Rpb24gfTsKIAogICAgIFNlbGVjdGlvbigpOwogCkBAIC01Miw3
ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTZWxlY3Rpb24gc2VsZWN0aW9uRnJvbUNv
bnRlbnRzT2ZOb2RlKE5vZGUqKTsKIAotICAgIEVTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RhdGU7IH0KKyAgICBTZWxlY3Rpb25UeXBlIHNlbGVjdGlvblR5cGUoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdGlvblR5cGU7IH0KIAogICAgIHZvaWQgc2V0QWZmaW5pdHkoRUFmZmluaXR5
IGFmZmluaXR5KSB7IG1fYWZmaW5pdHkgPSBhZmZpbml0eTsgfQogICAgIEVBZmZpbml0eSBhZmZp
bml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWZmaW5pdHk7IH0KQEAgLTYzLDE3ICs2MiwxNyBAQCBw
dWJsaWM6CiAgICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9uJik7CiAgICAg
CiAgICAgUG9zaXRpb24gYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQotICAgIFBvc2l0
aW9uIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50OyB9ICAgIAorICAgIFBvc2l0aW9u
IGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50OyB9CiAgICAgUG9zaXRpb24gc3RhcnQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CiAgICAgUG9zaXRpb24gZW5kKCkgY29uc3QgeyBy
ZXR1cm4gbV9lbmQ7IH0KICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZVN0YXJ0KCkg
Y29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIGlzUmFuZ2UoKSA/IERPV05T
VFJFQU0gOiBhZmZpbml0eSgpKTsgfQogICAgIFZpc2libGVQb3NpdGlvbiB2aXNpYmxlRW5kKCkg
Y29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBpc1JhbmdlKCkgPyBVUFNUUkVB
TSA6IGFmZmluaXR5KCkpOyB9CiAKLSAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRlKCkgPT0gTk9ORTsgfQotICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIHN0YXRl
KCkgPT0gQ0FSRVQ7IH0KLSAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgp
ID09IFJBTkdFOyB9Ci0gICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHN0
YXRlKCkgIT0gTk9ORTsgfQorICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1cm4gc2VsZWN0
aW9uVHlwZSgpID09IE5vU2VsZWN0aW9uOyB9CisgICAgYm9vbCBpc0NhcmV0KCkgY29uc3QgeyBy
ZXR1cm4gc2VsZWN0aW9uVHlwZSgpID09IENhcmV0U2VsZWN0aW9uOyB9CisgICAgYm9vbCBpc1Jh
bmdlKCkgY29uc3QgeyByZXR1cm4gc2VsZWN0aW9uVHlwZSgpID09IFJhbmdlU2VsZWN0aW9uOyB9
CisgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUo
KSAhPSBOb1NlbGVjdGlvbjsgfQogCiAgICAgYm9vbCBpc0Jhc2VGaXJzdCgpIGNvbnN0IHsgcmV0
dXJuIG1fYmFzZUlzRmlyc3Q7IH0KIApAQCAtMTAwLDE4ICs5OSwyMyBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgdm9pZCB2YWxpZGF0ZSgpOwotICAgIHZvaWQgYWRqdXN0Rm9yRWRpdGFibGVD
b250ZW50KCk7CiAKLSAgICBQb3NpdGlvbiBtX2Jhc2U7ICAgICAgICAgICAgICAgICAgLy8gYmFz
ZSBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgotICAgIFBvc2l0aW9uIG1fZXh0ZW50OyAgICAg
ICAgICAgICAgICAvLyBleHRlbnQgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rpb24KLSAgICBQb3Np
dGlvbiBtX3N0YXJ0OyAgICAgICAgICAgICAgICAgLy8gc3RhcnQgcG9zaXRpb24gZm9yIHRoZSBz
ZWxlY3Rpb24KLSAgICBQb3NpdGlvbiBtX2VuZDsgICAgICAgICAgICAgICAgICAgLy8gZW5kIHBv
c2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCisgICAgLy8gU3VwcG9ydCBtZXRob2RzIGZvciB2YWxp
ZGF0ZSgpCisgICAgdm9pZCBub3JtYWxpemVCYXNlQW5kRXh0ZW50QW5kU2V0U3RhcnRBbmRFbmQo
KTsKKyAgICB2b2lkIGV4cGFuZFNlbGVjdGlvblRvTWF0Y2hHcmFudWxhcml0eSgpOworICAgIHZv
aWQgYWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENyb3NzaW5nRWRpdGJsZUJvdW5kYXJpZXMoKTsKKyAg
ICB2b2lkIHVwZGF0ZVNlbGVjdGlvblR5cGUoKTsKIAotICAgIEVBZmZpbml0eSBtX2FmZmluaXR5
OyAgICAgICAgICAgICAvLyB0aGUgdXBzdHJlYW0vZG93bnN0cmVhbSBhZmZpbml0eSBvZiB0aGUg
Y2FyZXQKLSAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsgICAvLyBncmFudWxhcml0
eSBvZiBzdGFydC9lbmQgc2VsZWN0aW9uCisgICAgUG9zaXRpb24gbV9iYXNlOyAgIC8vIFdoZXJl
IHRoZSBmaXJzdCBjbGljayBoYXBwZW5lZAorICAgIFBvc2l0aW9uIG1fZXh0ZW50OyAvLyBXaGVy
ZSB0aGUgZW5kIGNsaWNrIGhhcHBlbmVkCisgICAgUG9zaXRpb24gbV9zdGFydDsgIC8vIExlZnRt
b3N0IHBvc2l0aW9uIHdoZW4gZXhwYW5kZWQgdG8gcmVzcGVjdCBncmFudWxhcml0eQorICAgIFBv
c2l0aW9uIG1fZW5kOyAgICAvLyBSaWdodG1vc3QgcG9zaXRpb24gd2hlbiBleHBhbmRlZCB0byBy
ZXNwZWN0IGdyYW51bGFyaXR5CisKKyAgICBFQWZmaW5pdHkgbV9hZmZpbml0eTsgICAgICAgICAg
IC8vIHRoZSB1cHN0cmVhbS9kb3duc3RyZWFtIGFmZmluaXR5IG9mIHRoZSBjYXJldAorICAgIFRl
eHRHcmFudWxhcml0eSBtX2dyYW51bGFyaXR5OyAgLy8gZ3JhbnVsYXJpdHkgb2Ygc3RhcnQvZW5k
IHNlbGVjdGlvbgogCiAgICAgLy8gdGhlc2UgYXJlIGNhY2hlZCwgY2FuIGJlIHJlY2FsY3VsYXRl
ZCBieSB2YWxpZGF0ZSgpCi0gICAgRVN0YXRlIG1fc3RhdGU7ICAgICAgICAgICAgICAgICAgIC8v
IHRoZSBzdGF0ZSBvZiB0aGUgc2VsZWN0aW9uCisgICAgU2VsZWN0aW9uVHlwZSBtX3NlbGVjdGlv
blR5cGU7ICAgIC8vIE5vbmUsIENhcmV0LCBSYW5nZQogICAgIGJvb2wgbV9iYXNlSXNGaXJzdDsg
ICAgICAgICAgICAgICAvLyB0cnVlIGlmIGJhc2UgaXMgYmVmb3JlIHRoZSBleHRlbnQKIH07CiAK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmggYi9XZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCmluZGV4IGZlNWU5MGQuLmE5M2RjZTQg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaApAQCAtNjcsNyArNjcsNyBAQCBw
dWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zKGNvbnN0IEludFBvaW50Jik7CiAKLSAgICBTZWxl
Y3Rpb246OkVTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLnN0YXRlKCk7IH0KKyAg
ICBTZWxlY3Rpb246OlNlbGVjdGlvblR5cGUgc2VsZWN0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJu
IG1fc2VsLnNlbGVjdGlvblR5cGUoKTsgfQogCiAgICAgRUFmZmluaXR5IGFmZmluaXR5KCkgY29u
c3QgeyByZXR1cm4gbV9zZWwuYWZmaW5pdHkoKTsgfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Vk
aXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHAKaW5kZXggNDE0NjgwZi4uNzJlZmQ4NyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1R5
cGluZ0NvbW1hbmQuY3BwCisrKyBiL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcApA
QCAtMzczLDEyICszNzMsMTIgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2Vk
KFRleHRHcmFudWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKICAgICBTZWxlY3Rp
b24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgU2VsZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsK
ICAgICAKLSAgICBzd2l0Y2ggKGVuZGluZ1NlbGVjdGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAg
Y2FzZSBTZWxlY3Rpb246OlJBTkdFOgorICAgIHN3aXRjaCAoZW5kaW5nU2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoK
ICAgICAgICAgICAgIHNlbGVjdGlvblRvRGVsZXRlID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAgICAg
ICAgICAgICBzZWxlY3Rpb25BZnRlclVuZG8gPSBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q0FSRVQ6IHsKKyAgICAgICAgY2Fz
ZSBTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOiB7CiAgICAgICAgICAgICBpZiAoYnJlYWtPdXRP
ZkVtcHR5TWFpbEJsb2NrcXVvdGVkUGFyYWdyYXBoKCkpIHsKICAgICAgICAgICAgICAgICB0eXBp
bmdBZGRlZFRvT3BlbkNvbW1hbmQoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CkBAIC00Mzcs
NyArNDM3LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpkZWxldGVLZXlQcmVzc2VkKFRleHRHcmFu
dWxhcml0eSBncmFudWxhcml0eSwgYm9vbCBraWxsUmluZykKICAgICAgICAgICAgICAgICBzZWxl
Y3Rpb25BZnRlclVuZG8uc2V0V2l0aG91dFZhbGlkYXRpb24oc3RhcnRpbmdTZWxlY3Rpb24oKS5l
bmQoKSwgc2VsZWN0aW9uVG9EZWxldGUuZXh0ZW50KCkpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KLSAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5PTkU6CisgICAgICAgIGNhc2UgU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtNDYxLDEyICs0NjEsMTIgQEAgdm9pZCBUeXBp
bmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVs
YXJpdHksIGJvb2wga2kKICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uVG9EZWxldGU7CiAgICAgU2Vs
ZWN0aW9uIHNlbGVjdGlvbkFmdGVyVW5kbzsKIAotICAgIHN3aXRjaCAoZW5kaW5nU2VsZWN0aW9u
KCkuc3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6CisgICAgc3dpdGNo
IChlbmRpbmdTZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBTZWxl
Y3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBl
bmRpbmdTZWxlY3Rpb24oKTsKICAgICAgICAgICAgIHNlbGVjdGlvbkFmdGVyVW5kbyA9IHNlbGVj
dGlvblRvRGVsZXRlOwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9u
OjpDQVJFVDogeworICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246IHsKICAg
ICAgICAgICAgIG1fc21hcnREZWxldGUgPSBmYWxzZTsKIAogICAgICAgICAgICAgLy8gSGFuZGxl
IGRlbGV0ZSBhdCBiZWdpbm5pbmctb2YtYmxvY2sgY2FzZS4KQEAgLTUxNSw3ICs1MTUsNyBAQCB2
b2lkIFR5cGluZ0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0
eSBncmFudWxhcml0eSwgYm9vbCBraQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5PTkU6CisgICAgICAgIGNhc2Ug
U2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wYWdlL0Zy
YW1lLmNwcCBiL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggZjhlNDQzZi4uY2ZiNWIwYSAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwCkBAIC0xMjUwLDMyICsxMjUwLDI4IEBAIEhUTUxGb3JtRWxlbWVudCAqRnJhbWU6OmN1
cnJlbnRGb3JtKCkgY29uc3QKICAgICByZXR1cm4gc3RhcnQgPyBzY2FuRm9yRm9ybShzdGFydCkg
OiAwOwogfQogCi0vLyBGSVhNRTogc2hvdWxkIHRoaXMgZ28gaW4gU2VsZWN0aW9uQ29udHJvbGxl
cj8KIHZvaWQgRnJhbWU6OnJldmVhbFNlbGVjdGlvbihjb25zdCBSZW5kZXJMYXllcjo6U2Nyb2xs
QWxpZ25tZW50JiBhbGlnbm1lbnQpIGNvbnN0CiB7CiAgICAgSW50UmVjdCByZWN0OwotICAgIAot
ICAgIHN3aXRjaCAoc2VsZWN0aW9uKCktPnN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTZWxlY3Rp
b246Ok5PTkU6CisKKyAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkpIHsK
KyAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKKyAgICAgICAg
Y2FzZSBTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgogICAgICAgICAgICAgcmVjdCA9IHNlbGVj
dGlvbigpLT5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CiAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UkFOR0U6CisgICAgICAgIGNhc2UgU2Vs
ZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAgICAgICAgICAgIHJlY3QgPSBlbmNsb3NpbmdJbnRS
ZWN0KHNlbGVjdGlvbkJvdW5kcyhmYWxzZSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQog
CiAgICAgUG9zaXRpb24gc3RhcnQgPSBzZWxlY3Rpb24oKS0+c3RhcnQoKTsKLQogICAgIEFTU0VS
VChzdGFydC5ub2RlKCkpOwogICAgIGlmIChzdGFydC5ub2RlKCkgJiYgc3RhcnQubm9kZSgpLT5y
ZW5kZXJlcigpKSB7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUgb25seSBoYW5kbGVzIHNj
cm9sbGluZyB0aGUgc3RhcnRDb250YWluZXIncyBsYXllciwgYnV0CiAgICAgICAgIC8vIHRoZSBz
ZWxlY3Rpb24gcmVjdCBjb3VsZCBpbnRlcnNlY3QgbW9yZSB0aGFuIGp1c3QgdGhhdC4gCiAgICAg
ICAgIC8vIFNlZSA8cmRhcjovL3Byb2JsZW0vNDc5OTg5OT4uCi0gICAgICAgIGlmIChSZW5kZXJM
YXllciAqbGF5ZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVyKCktPmVuY2xvc2luZ0xheWVyKCkp
CisgICAgICAgIGlmIChSZW5kZXJMYXllciogbGF5ZXIgPSBzdGFydC5ub2RlKCktPnJlbmRlcmVy
KCktPmVuY2xvc2luZ0xheWVyKCkpCiAgICAgICAgICAgICBsYXllci0+c2Nyb2xsUmVjdFRvVmlz
aWJsZShyZWN0LCBmYWxzZSwgYWxpZ25tZW50LCBhbGlnbm1lbnQpOwogICAgIH0KIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27368</attachid>
            <date>2009-02-05 16:04:55 -0800</date>
            <delta_ts>2009-02-06 14:37:18 -0800</delta_ts>
            <desc>Slightly clearer diff, and added documentation of ASSERTS ojan and I kept hitting in this code.</desc>
            <filename>Slightly-clearer-diff-and-added-documentation-of-ASSERTS-ojan-and-I-kept-hitting-in-this-code..patch</filename>
            <type>text/plain</type>
            <size>15326</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">YTFhMjllMzhmYjFmNGJjMWQ1ODJlZWQ1ZTQzYmYyNzAzZGYyMDU1NApkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAyYzA1ZjI2Li43Y2IzZTE0
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM5IEBACisyMDA5LTAyLTA1ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNaW5v
ciByZWZhY3RvcmluZyBhbmQgY2xlYW51cCB0byBTZWxlY3Rpb24gY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzQKKworICAgICAgICBObyBm
dW5jdGlvbmFsIGNoYW5nZXMsIHRodXMgbm8gdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OlNlbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OmV4cGFuZFNlbGVjdGlvblRvTWF0Y2hH
cmFudWxhcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246Om5vcm1hbGl6ZUJhc2VB
bmRFeHRlbnRBbmRTZXRTdGFydEFuZEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246
OnVwZGF0ZVNlbGVjdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjp2YWxp
ZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnNldFdpdGhvdXRWYWxpZGF0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENy
b3NzaW5nRWRpdGJsZUJvdW5kYXJpZXMpOgorICAgICAgICAqIGVkaXRpbmcvU2VsZWN0aW9uLmg6
CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246Oik6CisgICAgICAgIChXZWJDb3JlOjpTZWxl
Y3Rpb246OnNlbGVjdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjpleHRl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjppc05vbmUpOgorICAgICAgICAoV2Vi
Q29yZTo6U2VsZWN0aW9uOjppc0NhcmV0KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6
aXNSYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OmlzQ2FyZXRPclJhbmdlKToK
KyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaDoKKyAgICAgICAgKFdlYkNv
cmU6OlNlbGVjdGlvbkNvbnRyb2xsZXI6OnNlbGVjdGlvblR5cGUpOgorICAgICAgICAqIGVkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpk
ZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlR5cGluZ0NvbW1hbmQ6OmZvcndh
cmREZWxldGVLZXlQcmVzc2VkKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZXZlYWxTZWxlY3Rpb24pOgorCiAyMDA5LTAyLTA1ICBBbmRlcnMg
Q2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgS2V2
aW4gRGVja2VyLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAyYWFiNDU0Li5lMTk1MjhjIDEwMDY0NAotLS0g
YS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmNwcApAQCAtNzEwLDE0ICs3MTAsMTQgQEAgYm9vbCBFZGl0b3I6OmRpc3BhdGNoQ1BQRXZlbnQo
Y29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIENsaXBib2FyZEFjY2Vzc1BvbGkKIAogdm9p
ZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRBY3Rp
b24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5z
dGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOT05FOgorICAgIHN3aXRjaCAobV9m
cmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIFNlbGVj
dGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nCiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOgorICAgICAgICBjYXNlIFNl
bGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246CiAgICAgICAgICAgICBtX2ZyYW1lLT5jb21wdXRlQW5k
U2V0VHlwaW5nU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24pOwogICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246
OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICAgICAgaWYgKG1fZnJhbWUtPmRvY3VtZW50KCkgJiYg
c3R5bGUpCiAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpj
cmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVkaXRpbmdBY3Rpb24pKTsKICAgICAg
ICAgICAgIGJyZWFrOwpAQCAtNzMxLDEyICs3MzEsMTIgQEAgYm9vbCBFZGl0b3I6OnNob3VsZEFw
cGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIFJhbmdlKiByYW5nZSkKICAgICAK
IHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0gICAgc3dpdGNoIChtX2ZyYW1lLT5z
ZWxlY3Rpb24oKS0+c3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tk9ORToKKyAg
ICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb25UeXBlKCkpIHsKKyAgICAg
ICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICAgICAgLy8gZG8gbm90aGlu
ZwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDoKLSAg
ICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q2Fy
ZXRTZWxlY3Rpb246CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAg
ICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYmIHN0eWxlKQogICAgICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKG1fZnJhbWUtPmRvY3Vt
ZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0eWxlQ29tbWFuZDo6Rm9yY2VCbG9j
a1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9l
ZGl0aW5nL1NlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAppbmRl
eCA0ZmIzYTU0Li45YmQ2YjRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
LmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNwcApAQCAtNDMsNyArNDMsNyBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTZWxlY3Rpb246OlNlbGVjdGlvbigpCiAgICAgOiBtX2Fm
ZmluaXR5KERPV05TVFJFQU0pCiAgICAgLCBtX2dyYW51bGFyaXR5KENoYXJhY3RlckdyYW51bGFy
aXR5KQotICAgICwgbV9zdGF0ZShOT05FKQorICAgICwgbV9zZWxlY3Rpb25UeXBlKE5vU2VsZWN0
aW9uKQogICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewogfQpAQCAtMjM4LDcgKzIzOCw3IEBA
IHZvaWQgU2VsZWN0aW9uOjphcHBlbmRUcmFpbGluZ1doaXRlc3BhY2UoKQogICAgIH0KIH0KIAot
dm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKCkKK3ZvaWQgU2VsZWN0aW9uOjpzZXRCYXNlQW5kRXh0
ZW50VG9EZWVwRXF1aXZpbGFudHMoKQogewogICAgIC8vIE1vdmUgdGhlIHNlbGVjdGlvbiB0byBy
ZW5kZXJlZCBwb3NpdGlvbnMsIGlmIHBvc3NpYmxlLgogICAgIGJvb2wgYmFzZUFuZEV4dGVudEVx
dWFsID0gbV9iYXNlID09IG1fZXh0ZW50OwpAQCAtMjU5LDEwICsyNTksMTIgQEAgdm9pZCBTZWxl
Y3Rpb246OnZhbGlkYXRlKCkKICAgICB9IGVsc2UgaWYgKG1fZXh0ZW50LmlzTnVsbCgpKSB7CiAg
ICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlOwogICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsK
LSAgICB9IGVsc2UgeworICAgIH0gZWxzZQogICAgICAgICBtX2Jhc2VJc0ZpcnN0ID0gY29tcGFy
ZVBvc2l0aW9ucyhtX2Jhc2UsIG1fZXh0ZW50KSA8PSAwOwotICAgIH0KK30KIAordm9pZCBTZWxl
Y3Rpb246OnNldFN0YXJ0QW5kRW5kRnJvbUJhc2VBbmRFeHRlbnRSZXNwZWN0aW5nR3JhbnVsYXJp
dHkoKQorewogICAgIGlmIChtX2Jhc2VJc0ZpcnN0KSB7CiAgICAgICAgIG1fc3RhcnQgPSBtX2Jh
c2U7CiAgICAgICAgIG1fZW5kID0gbV9leHRlbnQ7CkBAIC0yNzEsNyArMjczLDYgQEAgdm9pZCBT
ZWxlY3Rpb246OnZhbGlkYXRlKCkKICAgICAgICAgbV9lbmQgPSBtX2Jhc2U7CiAgICAgfQogCi0g
ICAgLy8gRXhwYW5kIHRoZSBzZWxlY3Rpb24gaWYgcmVxdWVzdGVkLgogICAgIHN3aXRjaCAobV9n
cmFudWxhcml0eSkgewogICAgICAgICBjYXNlIENoYXJhY3RlckdyYW51bGFyaXR5OgogICAgICAg
ICAgICAgLy8gRG9uJ3QgZG8gYW55IGV4cGFuc2lvbi4KQEAgLTM4NSwyNiArMzg2LDMxIEBAIHZv
aWQgU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCiAgICAgICAgIG1fc3RhcnQgPSBtX2VuZDsKICAgICBp
ZiAobV9lbmQuaXNOdWxsKCkpCiAgICAgICAgIG1fZW5kID0gbV9zdGFydDsKLSAgICAKLSAgICBh
ZGp1c3RGb3JFZGl0YWJsZUNvbnRlbnQoKTsKK30KIAotICAgIC8vIGFkanVzdCB0aGUgc3RhdGUK
K3ZvaWQgU2VsZWN0aW9uOjp1cGRhdGVTZWxlY3Rpb25UeXBlKCkKK3sKICAgICBpZiAobV9zdGFy
dC5pc051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9lbmQuaXNOdWxsKCkpOwotICAgICAgICBt
X3N0YXRlID0gTk9ORTsKLQotICAgICAgICAvLyBlbmZvcmNlIGRvd25zdHJlYW0gYWZmaW5pdHkg
aWYgbm90IGNhcmV0LCBhcyBhZmZpbml0eSBvbmx5Ci0gICAgICAgIC8vIG1ha2VzIHNlbnNlIGZv
ciBjYXJldAotICAgICAgICBtX2FmZmluaXR5ID0gRE9XTlNUUkVBTTsKKyAgICAgICAgbV9zZWxl
Y3Rpb25UeXBlID0gTm9TZWxlY3Rpb247CiAgICAgfSBlbHNlIGlmIChtX3N0YXJ0ID09IG1fZW5k
IHx8IG1fc3RhcnQudXBzdHJlYW0oKSA9PSBtX2VuZC51cHN0cmVhbSgpKSB7Ci0gICAgICAgIG1f
c3RhdGUgPSBDQVJFVDsKLSAgICB9IGVsc2UgewotICAgICAgICBtX3N0YXRlID0gUkFOR0U7Cisg
ICAgICAgIG1fc2VsZWN0aW9uVHlwZSA9IENhcmV0U2VsZWN0aW9uOworICAgIH0gZWxzZQorICAg
ICAgICBtX3NlbGVjdGlvblR5cGUgPSBSYW5nZVNlbGVjdGlvbjsKIAotICAgICAgICAvLyBlbmZv
cmNlIGRvd25zdHJlYW0gYWZmaW5pdHkgaWYgbm90IGNhcmV0LCBhcyBhZmZpbml0eSBvbmx5Ci0g
ICAgICAgIC8vIG1ha2VzIHNlbnNlIGZvciBjYXJldAorICAgIC8vIEFmZmluaXR5IG9ubHkgbWFr
ZXMgc2Vuc2UgZm9yIGEgY2FyZXQKKyAgICBpZiAoIWlzQ2FyZXQoKSkKICAgICAgICAgbV9hZmZp
bml0eSA9IERPV05TVFJFQU07Cit9CiAKK3ZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCit7Cisg
ICAgc2V0QmFzZUFuZEV4dGVudFRvRGVlcEVxdWl2aWxhbnRzKCk7CisgICAgc2V0U3RhcnRBbmRF
bmRGcm9tQmFzZUFuZEV4dGVudFJlc3BlY3RpbmdHcmFudWxhcml0eSgpOworICAgIGFkanVzdFNl
bGVjdGlvblRvQXZvaWRDcm9zc2luZ0VkaXRpbmdCb3VuZGFyaWVzKCk7CisgICAgdXBkYXRlU2Vs
ZWN0aW9uVHlwZSgpOworCisgICAgaWYgKHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlv
bikgewogICAgICAgICAvLyAiQ29uc3RyYWluIiB0aGUgc2VsZWN0aW9uIHRvIGJlIHRoZSBzbWFs
bGVzdCBlcXVpdmFsZW50IHJhbmdlIG9mIG5vZGVzLgogICAgICAgICAvLyBUaGlzIGlzIGEgc29t
ZXdoYXQgYXJiaXRyYXJ5IGNob2ljZSwgYnV0IGV4cGVyaWVuY2Ugc2hvd3MgdGhhdCBpdCBpcwog
ICAgICAgICAvLyB1c2VmdWwgdG8gbWFrZSB0byBtYWtlIHRoZSBzZWxlY3Rpb24gImNhbm9uaWNh
bCIgKGlmIG9ubHkgZm9yCkBAIC00NDEsMTAgKzQ0NywxMCBAQCB2b2lkIFNlbGVjdGlvbjo6c2V0
V2l0aG91dFZhbGlkYXRpb24oY29uc3QgUG9zaXRpb24mIGJhc2UsIGNvbnN0IFBvc2l0aW9uJiBl
eHRlbgogICAgICAgICBtX3N0YXJ0ID0gZXh0ZW50OwogICAgICAgICBtX2VuZCA9IGJhc2U7CiAg
ICAgfQotICAgIG1fc3RhdGUgPSBSQU5HRTsKKyAgICBtX3NlbGVjdGlvblR5cGUgPSBSYW5nZVNl
bGVjdGlvbjsKIH0KIAotdm9pZCBTZWxlY3Rpb246OmFkanVzdEZvckVkaXRhYmxlQ29udGVudCgp
Cit2b2lkIFNlbGVjdGlvbjo6YWRqdXN0U2VsZWN0aW9uVG9Bdm9pZENyb3NzaW5nRWRpdGluZ0Jv
dW5kYXJpZXMoKQogewogICAgIGlmIChtX2Jhc2UuaXNOdWxsKCkgfHwgbV9zdGFydC5pc051bGwo
KSB8fCBtX2VuZC5pc051bGwoKSkKICAgICAgICAgcmV0dXJuOwpAQCAtNTA1LDggKzUxMSwxMCBA
QCB2b2lkIFNlbGVjdGlvbjo6YWRqdXN0Rm9yRWRpdGFibGVDb250ZW50KCkKICAgICAgICAgICAg
ICAgICAgICAgcCA9IFBvc2l0aW9uKHNoYWRvd0FuY2VzdG9yLCBtYXhEZWVwT2Zmc2V0KHNoYWRv
d0FuY2VzdG9yKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24g
cHJldmlvdXMocCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHByZXZpb3VzLmlz
TnVsbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gVGhlIHNlbGVjdGlvbiBjcm9zc2VzIGFuIEVk
aXRpbmcgYm91bmRhcnkuICBUaGlzIGlzIGEKKyAgICAgICAgICAgICAgICAvLyBwcm9ncmFtbWVy
IGVycm9yIGluIHRoZSBlZGl0aW5nIGNvZGUuICBIYXBweSBkZWJ1Z2dpbmchCiAgICAgICAgICAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgICAgICAgICAgbV9iYXNlID0gUG9z
aXRpb24oKTsKICAgICAgICAgICAgICAgICBtX2V4dGVudCA9IFBvc2l0aW9uKCk7CkBAIC01MzQs
NyArNTQyLDkgQEAgdm9pZCBTZWxlY3Rpb246OmFkanVzdEZvckVkaXRhYmxlQ29udGVudCgpCiAg
ICAgICAgICAgICBWaXNpYmxlUG9zaXRpb24gbmV4dChwKTsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgaWYgKG5leHQuaXNOdWxsKCkpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgICAgICAgICAvLyBUaGUgc2VsZWN0aW9uIGNyb3NzZXMgYW4gRWRp
dGluZyBib3VuZGFyeS4gIFRoaXMgaXMgYQorICAgICAgICAgICAgICAgIC8vIHByb2dyYW1tZXIg
ZXJyb3IgaW4gdGhlIGVkaXRpbmcgY29kZS4gIEhhcHB5IGRlYnVnZ2luZyEKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKGZhbHNlLCAiU2VsZWN0aW9uIGNyb3NzZXMgYW4gZWRp
dGluZyBib3VuZGFyeSEgIFByb2dyYW1tZXIgZXJyb3IuIik7CiAgICAgICAgICAgICAgICAgbV9i
YXNlID0gUG9zaXRpb24oKTsKICAgICAgICAgICAgICAgICBtX2V4dGVudCA9IFBvc2l0aW9uKCk7
CiAgICAgICAgICAgICAgICAgdmFsaWRhdGUoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRpdGlu
Zy9TZWxlY3Rpb24uaCBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb24uaAppbmRleCA1ZTIxNzAx
Li4wODliNjFjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmgKKysrIGIv
V2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5oCkBAIC0zNyw4ICszNyw3IEBAIGNvbnN0IEVBZmZp
bml0eSBTRUxfREVGQVVMVF9BRkZJTklUWSA9IERPV05TVFJFQU07CiAKIGNsYXNzIFNlbGVjdGlv
biB7CiBwdWJsaWM6Ci0gICAgZW51bSBFU3RhdGUgeyBOT05FLCBDQVJFVCwgUkFOR0UgfTsKLSAg
ICBlbnVtIEVEaXJlY3Rpb24geyBGT1JXQVJELCBCQUNLV0FSRCwgUklHSFQsIExFRlQgfTsKKyAg
ICBlbnVtIFNlbGVjdGlvblR5cGUgeyBOb1NlbGVjdGlvbiwgQ2FyZXRTZWxlY3Rpb24sIFJhbmdl
U2VsZWN0aW9uIH07CiAKICAgICBTZWxlY3Rpb24oKTsKIApAQCAtNTIsNyArNTEsNyBAQCBwdWJs
aWM6CiAKICAgICBzdGF0aWMgU2VsZWN0aW9uIHNlbGVjdGlvbkZyb21Db250ZW50c09mTm9kZShO
b2RlKik7CiAKLSAgICBFU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9Cisg
ICAgU2VsZWN0aW9uVHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b25UeXBlOyB9CiAKICAgICB2b2lkIHNldEFmZmluaXR5KEVBZmZpbml0eSBhZmZpbml0eSkgeyBt
X2FmZmluaXR5ID0gYWZmaW5pdHk7IH0KICAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25zdCB7
IHJldHVybiBtX2FmZmluaXR5OyB9CkBAIC02MywxNyArNjIsMTcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0RXh0ZW50KGNvbnN0IFZpc2libGVQb3NpdGlvbiYpOwogICAgIAogICAgIFBvc2l0aW9u
IGJhc2UoKSBjb25zdCB7IHJldHVybiBtX2Jhc2U7IH0KLSAgICBQb3NpdGlvbiBleHRlbnQoKSBj
b25zdCB7IHJldHVybiBtX2V4dGVudDsgfSAgICAKKyAgICBQb3NpdGlvbiBleHRlbnQoKSBjb25z
dCB7IHJldHVybiBtX2V4dGVudDsgfQogICAgIFBvc2l0aW9uIHN0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9zdGFydDsgfQogICAgIFBvc2l0aW9uIGVuZCgpIGNvbnN0IHsgcmV0dXJuIG1fZW5kOyB9
CiAgICAgCiAgICAgVmlzaWJsZVBvc2l0aW9uIHZpc2libGVTdGFydCgpIGNvbnN0IHsgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihtX3N0YXJ0LCBpc1JhbmdlKCkgPyBET1dOU1RSRUFNIDogYWZmaW5p
dHkoKSk7IH0KICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJsZUVuZCgpIGNvbnN0IHsgcmV0dXJu
IFZpc2libGVQb3NpdGlvbihtX2VuZCwgaXNSYW5nZSgpID8gVVBTVFJFQU0gOiBhZmZpbml0eSgp
KTsgfQogCi0gICAgYm9vbCBpc05vbmUoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IE5PTkU7
IH0KLSAgICBib29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpID09IENBUkVUOyB9
Ci0gICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gc3RhdGUoKSA9PSBSQU5HRTsgfQot
ICAgIGJvb2wgaXNDYXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzdGF0ZSgpICE9IE5PTkU7
IH0KKyAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBO
b1NlbGVjdGlvbjsgfQorICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0dXJuIHNlbGVjdGlv
blR5cGUoKSA9PSBDYXJldFNlbGVjdGlvbjsgfQorICAgIGJvb2wgaXNSYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIHNlbGVjdGlvblR5cGUoKSA9PSBSYW5nZVNlbGVjdGlvbjsgfQorICAgIGJvb2wgaXND
YXJldE9yUmFuZ2UoKSBjb25zdCB7IHJldHVybiBzZWxlY3Rpb25UeXBlKCkgIT0gTm9TZWxlY3Rp
b247IH0KIAogICAgIGJvb2wgaXNCYXNlRmlyc3QoKSBjb25zdCB7IHJldHVybiBtX2Jhc2VJc0Zp
cnN0OyB9CiAKQEAgLTEwMCwxOCArOTksMjMgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIHZv
aWQgdmFsaWRhdGUoKTsKLSAgICB2b2lkIGFkanVzdEZvckVkaXRhYmxlQ29udGVudCgpOwogCi0g
ICAgUG9zaXRpb24gbV9iYXNlOyAgICAgICAgICAgICAgICAgIC8vIGJhc2UgcG9zaXRpb24gZm9y
IHRoZSBzZWxlY3Rpb24KLSAgICBQb3NpdGlvbiBtX2V4dGVudDsgICAgICAgICAgICAgICAgLy8g
ZXh0ZW50IHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCi0gICAgUG9zaXRpb24gbV9zdGFydDsg
ICAgICAgICAgICAgICAgIC8vIHN0YXJ0IHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCi0gICAg
UG9zaXRpb24gbV9lbmQ7ICAgICAgICAgICAgICAgICAgIC8vIGVuZCBwb3NpdGlvbiBmb3IgdGhl
IHNlbGVjdGlvbgorICAgIC8vIFN1cHBvcnQgbWV0aG9kcyBmb3IgdmFsaWRhdGUoKQorICAgIHZv
aWQgc2V0QmFzZUFuZEV4dGVudFRvRGVlcEVxdWl2aWxhbnRzKCk7CisgICAgdm9pZCBzZXRTdGFy
dEFuZEVuZEZyb21CYXNlQW5kRXh0ZW50UmVzcGVjdGluZ0dyYW51bGFyaXR5KCk7CisgICAgdm9p
ZCBhZGp1c3RTZWxlY3Rpb25Ub0F2b2lkQ3Jvc3NpbmdFZGl0aW5nQm91bmRhcmllcygpOworICAg
IHZvaWQgdXBkYXRlU2VsZWN0aW9uVHlwZSgpOwogCi0gICAgRUFmZmluaXR5IG1fYWZmaW5pdHk7
ICAgICAgICAgICAgIC8vIHRoZSB1cHN0cmVhbS9kb3duc3RyZWFtIGFmZmluaXR5IG9mIHRoZSBj
YXJldAotICAgIFRleHRHcmFudWxhcml0eSBtX2dyYW51bGFyaXR5OyAgIC8vIGdyYW51bGFyaXR5
IG9mIHN0YXJ0L2VuZCBzZWxlY3Rpb24KKyAgICBQb3NpdGlvbiBtX2Jhc2U7ICAgLy8gV2hlcmUg
dGhlIGZpcnN0IGNsaWNrIGhhcHBlbmVkCisgICAgUG9zaXRpb24gbV9leHRlbnQ7IC8vIFdoZXJl
IHRoZSBlbmQgY2xpY2sgaGFwcGVuZWQKKyAgICBQb3NpdGlvbiBtX3N0YXJ0OyAgLy8gTGVmdG1v
c3QgcG9zaXRpb24gd2hlbiBleHBhbmRlZCB0byByZXNwZWN0IGdyYW51bGFyaXR5CisgICAgUG9z
aXRpb24gbV9lbmQ7ICAgIC8vIFJpZ2h0bW9zdCBwb3NpdGlvbiB3aGVuIGV4cGFuZGVkIHRvIHJl
c3BlY3QgZ3JhbnVsYXJpdHkKKworICAgIEVBZmZpbml0eSBtX2FmZmluaXR5OyAgICAgICAgICAg
Ly8gdGhlIHVwc3RyZWFtL2Rvd25zdHJlYW0gYWZmaW5pdHkgb2YgdGhlIGNhcmV0CisgICAgVGV4
dEdyYW51bGFyaXR5IG1fZ3JhbnVsYXJpdHk7ICAvLyBncmFudWxhcml0eSBvZiBzdGFydC9lbmQg
c2VsZWN0aW9uCiAKICAgICAvLyB0aGVzZSBhcmUgY2FjaGVkLCBjYW4gYmUgcmVjYWxjdWxhdGVk
IGJ5IHZhbGlkYXRlKCkKLSAgICBFU3RhdGUgbV9zdGF0ZTsgICAgICAgICAgICAgICAgICAgLy8g
dGhlIHN0YXRlIG9mIHRoZSBzZWxlY3Rpb24KKyAgICBTZWxlY3Rpb25UeXBlIG1fc2VsZWN0aW9u
VHlwZTsgICAgLy8gTm9uZSwgQ2FyZXQsIFJhbmdlCiAgICAgYm9vbCBtX2Jhc2VJc0ZpcnN0OyAg
ICAgICAgICAgICAgIC8vIHRydWUgaWYgYmFzZSBpcyBiZWZvcmUgdGhlIGV4dGVudAogfTsKIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaCBiL1dlYkNv
cmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmgKaW5kZXggZmU1ZTkwZC4uYTkzZGNlNCAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5oCkBAIC02Nyw3ICs2Nyw3IEBAIHB1
YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnMoY29uc3QgSW50UG9pbnQmKTsKIAotICAgIFNlbGVj
dGlvbjo6RVN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZWwuc3RhdGUoKTsgfQorICAg
IFNlbGVjdGlvbjo6U2VsZWN0aW9uVHlwZSBzZWxlY3Rpb25UeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9zZWwuc2VsZWN0aW9uVHlwZSgpOyB9CiAKICAgICBFQWZmaW5pdHkgYWZmaW5pdHkoKSBjb25z
dCB7IHJldHVybiBtX3NlbC5hZmZpbml0eSgpOyB9CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvZWRp
dGluZy9UeXBpbmdDb21tYW5kLmNwcCBiL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNw
cAppbmRleCA0MTQ2ODBmLi43MmVmZDg3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvVHlw
aW5nQ29tbWFuZC5jcHAKKysrIGIvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCkBA
IC0zNzMsMTIgKzM3MywxMiBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQo
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogICAgIFNlbGVjdGlv
biBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBTZWxlY3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwog
ICAgIAotICAgIHN3aXRjaCAoZW5kaW5nU2VsZWN0aW9uKCkuc3RhdGUoKSkgewotICAgICAgICBj
YXNlIFNlbGVjdGlvbjo6UkFOR0U6CisgICAgc3dpdGNoIChlbmRpbmdTZWxlY3Rpb24oKS5zZWxl
Y3Rpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgog
ICAgICAgICAgICAgc2VsZWN0aW9uVG9EZWxldGUgPSBlbmRpbmdTZWxlY3Rpb24oKTsKICAgICAg
ICAgICAgIHNlbGVjdGlvbkFmdGVyVW5kbyA9IHNlbGVjdGlvblRvRGVsZXRlOwogICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDQVJFVDogeworICAgICAgICBjYXNl
IFNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246IHsKICAgICAgICAgICAgIGlmIChicmVha091dE9m
RW1wdHlNYWlsQmxvY2txdW90ZWRQYXJhZ3JhcGgoKSkgewogICAgICAgICAgICAgICAgIHR5cGlu
Z0FkZGVkVG9PcGVuQ29tbWFuZCgpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTQzNyw3
ICs0MzcsNyBAQCB2b2lkIFR5cGluZ0NvbW1hbmQ6OmRlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51
bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpbGxSaW5nKQogICAgICAgICAgICAgICAgIHNlbGVj
dGlvbkFmdGVyVW5kby5zZXRXaXRob3V0VmFsaWRhdGlvbihzdGFydGluZ1NlbGVjdGlvbigpLmVu
ZCgpLCBzZWxlY3Rpb25Ub0RlbGV0ZS5leHRlbnQoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tk9ORToKKyAgICAgICAgY2FzZSBTZWxl
Y3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC00NjEsMTIgKzQ2MSwxMiBAQCB2b2lkIFR5cGlu
Z0NvbW1hbmQ6OmZvcndhcmREZWxldGVLZXlQcmVzc2VkKFRleHRHcmFudWxhcml0eSBncmFudWxh
cml0eSwgYm9vbCBraQogICAgIFNlbGVjdGlvbiBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICBTZWxl
Y3Rpb24gc2VsZWN0aW9uQWZ0ZXJVbmRvOwogCi0gICAgc3dpdGNoIChlbmRpbmdTZWxlY3Rpb24o
KS5zdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAgICBzd2l0Y2gg
KGVuZGluZ1NlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIFNlbGVj
dGlvbjo6UmFuZ2VTZWxlY3Rpb246CiAgICAgICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IGVu
ZGluZ1NlbGVjdGlvbigpOwogICAgICAgICAgICAgc2VsZWN0aW9uQWZ0ZXJVbmRvID0gc2VsZWN0
aW9uVG9EZWxldGU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246
OkNBUkVUOiB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjogewogICAg
ICAgICAgICAgbV9zbWFydERlbGV0ZSA9IGZhbHNlOwogCiAgICAgICAgICAgICAvLyBIYW5kbGUg
ZGVsZXRlIGF0IGJlZ2lubmluZy1vZi1ibG9jayBjYXNlLgpAQCAtNTE1LDcgKzUxNSw3IEBAIHZv
aWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQoVGV4dEdyYW51bGFyaXR5
IGdyYW51bGFyaXR5LCBib29sIGtpCiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tk9ORToKKyAgICAgICAgY2FzZSBT
ZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL3BhZ2UvRnJh
bWUuY3BwIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCBmOGU0NDNmLi5jZmI1YjBhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1dlYkNvcmUvcGFnZS9GcmFt
ZS5jcHAKQEAgLTEyNTAsMzIgKzEyNTAsMjggQEAgSFRNTEZvcm1FbGVtZW50ICpGcmFtZTo6Y3Vy
cmVudEZvcm0oKSBjb25zdAogICAgIHJldHVybiBzdGFydCA/IHNjYW5Gb3JGb3JtKHN0YXJ0KSA6
IDA7CiB9CiAKLS8vIEZJWE1FOiBzaG91bGQgdGhpcyBnbyBpbiBTZWxlY3Rpb25Db250cm9sbGVy
Pwogdm9pZCBGcmFtZTo6cmV2ZWFsU2VsZWN0aW9uKGNvbnN0IFJlbmRlckxheWVyOjpTY3JvbGxB
bGlnbm1lbnQmIGFsaWdubWVudCkgY29uc3QKIHsKICAgICBJbnRSZWN0IHJlY3Q7Ci0gICAgCi0g
ICAgc3dpdGNoIChzZWxlY3Rpb24oKS0+c3RhdGUoKSkgewotICAgICAgICBjYXNlIFNlbGVjdGlv
bjo6Tk9ORToKKworICAgIHN3aXRjaCAoc2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkgewor
ICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgICAgICByZXR1cm47
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNBUkVUOgorICAgICAgICBj
YXNlIFNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246CiAgICAgICAgICAgICByZWN0ID0gc2VsZWN0
aW9uKCktPmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAgICAgICAgY2FzZSBTZWxl
Y3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICAgICAgcmVjdCA9IGVuY2xvc2luZ0ludFJl
Y3Qoc2VsZWN0aW9uQm91bmRzKGZhbHNlKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAK
ICAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbigpLT5zdGFydCgpOwotCiAgICAgQVNTRVJU
KHN0YXJ0Lm5vZGUoKSk7CiAgICAgaWYgKHN0YXJ0Lm5vZGUoKSAmJiBzdGFydC5ub2RlKCktPnJl
bmRlcmVyKCkpIHsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgY29kZSBvbmx5IGhhbmRsZXMgc2Ny
b2xsaW5nIHRoZSBzdGFydENvbnRhaW5lcidzIGxheWVyLCBidXQKICAgICAgICAgLy8gdGhlIHNl
bGVjdGlvbiByZWN0IGNvdWxkIGludGVyc2VjdCBtb3JlIHRoYW4ganVzdCB0aGF0LiAKICAgICAg
ICAgLy8gU2VlIDxyZGFyOi8vcHJvYmxlbS80Nzk5ODk5Pi4KLSAgICAgICAgaWYgKFJlbmRlckxh
eWVyICpsYXllciA9IHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKS0+ZW5jbG9zaW5nTGF5ZXIoKSkK
KyAgICAgICAgaWYgKFJlbmRlckxheWVyKiBsYXllciA9IHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIo
KS0+ZW5jbG9zaW5nTGF5ZXIoKSkKICAgICAgICAgICAgIGxheWVyLT5zY3JvbGxSZWN0VG9WaXNp
YmxlKHJlY3QsIGZhbHNlLCBhbGlnbm1lbnQsIGFsaWdubWVudCk7CiAgICAgfQogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27419</attachid>
            <date>2009-02-06 14:37:34 -0800</date>
            <delta_ts>2009-02-06 15:56:04 -0800</delta_ts>
            <desc>updated after ojan and mark&apos;s comments</desc>
            <filename>updated-after-ojan-and-mark-s-comments.patch</filename>
            <type>text/plain</type>
            <size>15235</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">M2U1YWM5MWNiZTYwMDZhMWQ0ODRjMGQzNzhiYzEzNTUxODBkNmNhYgpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9DaGFuZ2VMb2cgYi9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA1NGUwNTVkLi5lODk2N2Qx
IDEwMDY0NAotLS0gYS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9XZWJDb3JlL0NoYW5nZUxvZwpA
QCAtMSwzICsxLDM5IEBACisyMDA5LTAyLTA2ICBFcmljIFNlaWRlbCAgPGVyaWNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBNaW5v
ciByZWZhY3RvcmluZyBhbmQgY2xlYW51cCB0byBTZWxlY3Rpb24gY29kZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM3NzQKKworICAgICAgICBObyBm
dW5jdGlvbmFsIGNoYW5nZXMsIHRodXMgbm8gdGVzdHMuCisKKyAgICAgICAgKiBlZGl0aW5nL0Vk
aXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKiBlZGl0
aW5nL1NlbGVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OlNlbGVjdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnNldEJhc2VBbmRFeHRlbnRUb0RlZXBF
cXVpdmFsZW50cyk6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OnNldFN0YXJ0QW5kRW5k
RnJvbUJhc2VBbmRFeHRlbnRSZXNwZWN0aW5nR3JhbnVsYXJpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6U2VsZWN0aW9uOjp1cGRhdGVTZWxlY3Rpb25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbjo6dmFsaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjpzZXRXaXRo
b3V0VmFsaWRhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb246OmFkanVzdFNlbGVj
dGlvblRvQXZvaWRDcm9zc2luZ0VkaXRpbmdCb3VuZGFyaWVzKToKKyAgICAgICAgKiBlZGl0aW5n
L1NlbGVjdGlvbi5oOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjopOgorICAgICAgICAo
V2ViQ29yZTo6U2VsZWN0aW9uOjpzZWxlY3Rpb25UeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlNl
bGVjdGlvbjo6ZXh0ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6aXNOb25lKToK
KyAgICAgICAgKFdlYkNvcmU6OlNlbGVjdGlvbjo6aXNDYXJldCk6CisgICAgICAgIChXZWJDb3Jl
OjpTZWxlY3Rpb246OmlzUmFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uOjppc0Nh
cmV0T3JSYW5nZSk6CisgICAgICAgICogZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTZWxlY3Rpb25Db250cm9sbGVyOjpzZWxlY3Rpb25UeXBlKToKKyAg
ICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VHlw
aW5nQ29tbWFuZDo6ZGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdD
b21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5UHJlc3NlZCk6CisgICAgICAgICogcGFnZS9GcmFtZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmV2ZWFsU2VsZWN0aW9uKToKKwogMjAwOS0w
Mi0wNiAgQW5hbnRhbmFyYXlhbmFuIEl5ZW5nYXIgIDxhbmFudGFAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAgYi9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAyYWFiNDU0
Li5lMTk1MjhjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcApAQCAtNzEwLDE0ICs3MTAsMTQgQEAgYm9vbCBFZGl0
b3I6OmRpc3BhdGNoQ1BQRXZlbnQoY29uc3QgQXRvbWljU3RyaW5nICZldmVudFR5cGUsIENsaXBi
b2FyZEFjY2Vzc1BvbGkKIAogdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJh
dGlvbiogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsKLSAgICBzd2l0Y2ggKG1f
ZnJhbWUtPnNlbGVjdGlvbigpLT5zdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpO
T05FOgorICAgIHN3aXRjaCAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvblR5cGUoKSkg
eworICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgICAgICAvLyBk
byBub3RoaW5nCiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OkNB
UkVUOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246CiAgICAgICAgICAg
ICBtX2ZyYW1lLT5jb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUoc3R5bGUsIGVkaXRpbmdBY3Rpb24p
OwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAg
ICAgICAgY2FzZSBTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICAgICAgaWYgKG1f
ZnJhbWUtPmRvY3VtZW50KCkgJiYgc3R5bGUpCiAgICAgICAgICAgICAgICAgYXBwbHlDb21tYW5k
KEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgc3R5bGUsIGVk
aXRpbmdBY3Rpb24pKTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtNzMxLDEyICs3MzEsMTIgQEAg
Ym9vbCBFZGl0b3I6OnNob3VsZEFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUs
IFJhbmdlKiByYW5nZSkKICAgICAKIHZvaWQgRWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7Ci0g
ICAgc3dpdGNoIChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c3RhdGUoKSkgewotICAgICAgICBjYXNl
IFNlbGVjdGlvbjo6Tk9ORToKKyAgICBzd2l0Y2ggKG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb25UeXBlKCkpIHsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAg
ICAgICAgICAgLy8gZG8gbm90aGluZwogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
U2VsZWN0aW9uOjpDQVJFVDoKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJBTkdFOgorICAgICAg
ICBjYXNlIFNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246CisgICAgICAgIGNhc2UgU2VsZWN0aW9u
OjpSYW5nZVNlbGVjdGlvbjoKICAgICAgICAgICAgIGlmIChtX2ZyYW1lLT5kb2N1bWVudCgpICYm
IHN0eWxlKQogICAgICAgICAgICAgICAgIGFwcGx5Q29tbWFuZChBcHBseVN0eWxlQ29tbWFuZDo6
Y3JlYXRlKG1fZnJhbWUtPmRvY3VtZW50KCksIHN0eWxlLCBlZGl0aW5nQWN0aW9uLCBBcHBseVN0
eWxlQ29tbWFuZDo6Rm9yY2VCbG9ja1Byb3BlcnRpZXMpKTsKICAgICAgICAgICAgIGJyZWFrOwpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5jcHAgYi9XZWJDb3JlL2VkaXRp
bmcvU2VsZWN0aW9uLmNwcAppbmRleCA0ZmIzYTU0Li4zYzZkNmMyIDEwMDY0NAotLS0gYS9XZWJD
b3JlL2VkaXRpbmcvU2VsZWN0aW9uLmNwcAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9u
LmNwcApAQCAtNDMsNyArNDMsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTZWxlY3Rpb246OlNl
bGVjdGlvbigpCiAgICAgOiBtX2FmZmluaXR5KERPV05TVFJFQU0pCiAgICAgLCBtX2dyYW51bGFy
aXR5KENoYXJhY3RlckdyYW51bGFyaXR5KQotICAgICwgbV9zdGF0ZShOT05FKQorICAgICwgbV9z
ZWxlY3Rpb25UeXBlKE5vU2VsZWN0aW9uKQogICAgICwgbV9iYXNlSXNGaXJzdCh0cnVlKQogewog
fQpAQCAtMjM4LDcgKzIzOCw3IEBAIHZvaWQgU2VsZWN0aW9uOjphcHBlbmRUcmFpbGluZ1doaXRl
c3BhY2UoKQogICAgIH0KIH0KIAotdm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKCkKK3ZvaWQgU2Vs
ZWN0aW9uOjpzZXRCYXNlQW5kRXh0ZW50VG9EZWVwRXF1aXZhbGVudHMoKQogewogICAgIC8vIE1v
dmUgdGhlIHNlbGVjdGlvbiB0byByZW5kZXJlZCBwb3NpdGlvbnMsIGlmIHBvc3NpYmxlLgogICAg
IGJvb2wgYmFzZUFuZEV4dGVudEVxdWFsID0gbV9iYXNlID09IG1fZXh0ZW50OwpAQCAtMjU5LDEw
ICsyNTksMTIgQEAgdm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKCkKICAgICB9IGVsc2UgaWYgKG1f
ZXh0ZW50LmlzTnVsbCgpKSB7CiAgICAgICAgIG1fZXh0ZW50ID0gbV9iYXNlOwogICAgICAgICBt
X2Jhc2VJc0ZpcnN0ID0gdHJ1ZTsKLSAgICB9IGVsc2UgeworICAgIH0gZWxzZQogICAgICAgICBt
X2Jhc2VJc0ZpcnN0ID0gY29tcGFyZVBvc2l0aW9ucyhtX2Jhc2UsIG1fZXh0ZW50KSA8PSAwOwot
ICAgIH0KK30KIAordm9pZCBTZWxlY3Rpb246OnNldFN0YXJ0QW5kRW5kRnJvbUJhc2VBbmRFeHRl
bnRSZXNwZWN0aW5nR3JhbnVsYXJpdHkoKQorewogICAgIGlmIChtX2Jhc2VJc0ZpcnN0KSB7CiAg
ICAgICAgIG1fc3RhcnQgPSBtX2Jhc2U7CiAgICAgICAgIG1fZW5kID0gbV9leHRlbnQ7CkBAIC0y
NzEsNyArMjczLDYgQEAgdm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKCkKICAgICAgICAgbV9lbmQg
PSBtX2Jhc2U7CiAgICAgfQogCi0gICAgLy8gRXhwYW5kIHRoZSBzZWxlY3Rpb24gaWYgcmVxdWVz
dGVkLgogICAgIHN3aXRjaCAobV9ncmFudWxhcml0eSkgewogICAgICAgICBjYXNlIENoYXJhY3Rl
ckdyYW51bGFyaXR5OgogICAgICAgICAgICAgLy8gRG9uJ3QgZG8gYW55IGV4cGFuc2lvbi4KQEAg
LTM4NSwyNiArMzg2LDMxIEBAIHZvaWQgU2VsZWN0aW9uOjp2YWxpZGF0ZSgpCiAgICAgICAgIG1f
c3RhcnQgPSBtX2VuZDsKICAgICBpZiAobV9lbmQuaXNOdWxsKCkpCiAgICAgICAgIG1fZW5kID0g
bV9zdGFydDsKLSAgICAKLSAgICBhZGp1c3RGb3JFZGl0YWJsZUNvbnRlbnQoKTsKK30KIAotICAg
IC8vIGFkanVzdCB0aGUgc3RhdGUKK3ZvaWQgU2VsZWN0aW9uOjp1cGRhdGVTZWxlY3Rpb25UeXBl
KCkKK3sKICAgICBpZiAobV9zdGFydC5pc051bGwoKSkgewogICAgICAgICBBU1NFUlQobV9lbmQu
aXNOdWxsKCkpOwotICAgICAgICBtX3N0YXRlID0gTk9ORTsKLQotICAgICAgICAvLyBlbmZvcmNl
IGRvd25zdHJlYW0gYWZmaW5pdHkgaWYgbm90IGNhcmV0LCBhcyBhZmZpbml0eSBvbmx5Ci0gICAg
ICAgIC8vIG1ha2VzIHNlbnNlIGZvciBjYXJldAotICAgICAgICBtX2FmZmluaXR5ID0gRE9XTlNU
UkVBTTsKKyAgICAgICAgbV9zZWxlY3Rpb25UeXBlID0gTm9TZWxlY3Rpb247CiAgICAgfSBlbHNl
IGlmIChtX3N0YXJ0ID09IG1fZW5kIHx8IG1fc3RhcnQudXBzdHJlYW0oKSA9PSBtX2VuZC51cHN0
cmVhbSgpKSB7Ci0gICAgICAgIG1fc3RhdGUgPSBDQVJFVDsKLSAgICB9IGVsc2UgewotICAgICAg
ICBtX3N0YXRlID0gUkFOR0U7CisgICAgICAgIG1fc2VsZWN0aW9uVHlwZSA9IENhcmV0U2VsZWN0
aW9uOworICAgIH0gZWxzZQorICAgICAgICBtX3NlbGVjdGlvblR5cGUgPSBSYW5nZVNlbGVjdGlv
bjsKIAotICAgICAgICAvLyBlbmZvcmNlIGRvd25zdHJlYW0gYWZmaW5pdHkgaWYgbm90IGNhcmV0
LCBhcyBhZmZpbml0eSBvbmx5Ci0gICAgICAgIC8vIG1ha2VzIHNlbnNlIGZvciBjYXJldAorICAg
IC8vIEFmZmluaXR5IG9ubHkgbWFrZXMgc2Vuc2UgZm9yIGEgY2FyZXQKKyAgICBpZiAobV9zZWxl
Y3Rpb25UeXBlICE9IENhcmV0U2VsZWN0aW9uKQogICAgICAgICBtX2FmZmluaXR5ID0gRE9XTlNU
UkVBTTsKK30KKwordm9pZCBTZWxlY3Rpb246OnZhbGlkYXRlKCkKK3sKKyAgICBzZXRCYXNlQW5k
RXh0ZW50VG9EZWVwRXF1aXZhbGVudHMoKTsKKyAgICBzZXRTdGFydEFuZEVuZEZyb21CYXNlQW5k
RXh0ZW50UmVzcGVjdGluZ0dyYW51bGFyaXR5KCk7CisgICAgYWRqdXN0U2VsZWN0aW9uVG9Bdm9p
ZENyb3NzaW5nRWRpdGluZ0JvdW5kYXJpZXMoKTsKKyAgICB1cGRhdGVTZWxlY3Rpb25UeXBlKCk7
CiAKKyAgICBpZiAoc2VsZWN0aW9uVHlwZSgpID09IFJhbmdlU2VsZWN0aW9uKSB7CiAgICAgICAg
IC8vICJDb25zdHJhaW4iIHRoZSBzZWxlY3Rpb24gdG8gYmUgdGhlIHNtYWxsZXN0IGVxdWl2YWxl
bnQgcmFuZ2Ugb2Ygbm9kZXMuCiAgICAgICAgIC8vIFRoaXMgaXMgYSBzb21ld2hhdCBhcmJpdHJh
cnkgY2hvaWNlLCBidXQgZXhwZXJpZW5jZSBzaG93cyB0aGF0IGl0IGlzCiAgICAgICAgIC8vIHVz
ZWZ1bCB0byBtYWtlIHRvIG1ha2UgdGhlIHNlbGVjdGlvbiAiY2Fub25pY2FsIiAoaWYgb25seSBm
b3IKQEAgLTQ0MSwxMCArNDQ3LDEwIEBAIHZvaWQgU2VsZWN0aW9uOjpzZXRXaXRob3V0VmFsaWRh
dGlvbihjb25zdCBQb3NpdGlvbiYgYmFzZSwgY29uc3QgUG9zaXRpb24mIGV4dGVuCiAgICAgICAg
IG1fc3RhcnQgPSBleHRlbnQ7CiAgICAgICAgIG1fZW5kID0gYmFzZTsKICAgICB9Ci0gICAgbV9z
dGF0ZSA9IFJBTkdFOworICAgIG1fc2VsZWN0aW9uVHlwZSA9IFJhbmdlU2VsZWN0aW9uOwogfQog
Ci12b2lkIFNlbGVjdGlvbjo6YWRqdXN0Rm9yRWRpdGFibGVDb250ZW50KCkKK3ZvaWQgU2VsZWN0
aW9uOjphZGp1c3RTZWxlY3Rpb25Ub0F2b2lkQ3Jvc3NpbmdFZGl0aW5nQm91bmRhcmllcygpCiB7
CiAgICAgaWYgKG1fYmFzZS5pc051bGwoKSB8fCBtX3N0YXJ0LmlzTnVsbCgpIHx8IG1fZW5kLmlz
TnVsbCgpKQogICAgICAgICByZXR1cm47CkBAIC01MDUsOCArNTExLDEwIEBAIHZvaWQgU2VsZWN0
aW9uOjphZGp1c3RGb3JFZGl0YWJsZUNvbnRlbnQoKQogICAgICAgICAgICAgICAgICAgICBwID0g
UG9zaXRpb24oc2hhZG93QW5jZXN0b3IsIG1heERlZXBPZmZzZXQoc2hhZG93QW5jZXN0b3IpKTsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIFZpc2libGVQb3NpdGlvbiBwcmV2aW91cyhwKTsK
LSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAocHJldmlvdXMuaXNOdWxsKCkpIHsKKyAg
ICAgICAgICAgICAgICAvLyBUaGUgc2VsZWN0aW9uIGNyb3NzZXMgYW4gRWRpdGluZyBib3VuZGFy
eS4gIFRoaXMgaXMgYQorICAgICAgICAgICAgICAgIC8vIHByb2dyYW1tZXIgZXJyb3IgaW4gdGhl
IGVkaXRpbmcgY29kZS4gIEhhcHB5IGRlYnVnZ2luZyEKICAgICAgICAgICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgICAgICBtX2Jhc2UgPSBQb3NpdGlvbigpOwogICAg
ICAgICAgICAgICAgIG1fZXh0ZW50ID0gUG9zaXRpb24oKTsKQEAgLTUzNCw2ICs1NDIsOCBAQCB2
b2lkIFNlbGVjdGlvbjo6YWRqdXN0Rm9yRWRpdGFibGVDb250ZW50KCkKICAgICAgICAgICAgIFZp
c2libGVQb3NpdGlvbiBuZXh0KHApOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBpZiAobmV4
dC5pc051bGwoKSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBzZWxlY3Rpb24gY3Jvc3NlcyBh
biBFZGl0aW5nIGJvdW5kYXJ5LiAgVGhpcyBpcyBhCisgICAgICAgICAgICAgICAgLy8gcHJvZ3Jh
bW1lciBlcnJvciBpbiB0aGUgZWRpdGluZyBjb2RlLiAgSGFwcHkgZGVidWdnaW5nIQogICAgICAg
ICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICAgICAgICAgIG1fYmFzZSA9
IFBvc2l0aW9uKCk7CiAgICAgICAgICAgICAgICAgbV9leHRlbnQgPSBQb3NpdGlvbigpOwpkaWZm
IC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbi5oIGIvV2ViQ29yZS9lZGl0aW5nL1Nl
bGVjdGlvbi5oCmluZGV4IDVlMjE3MDEuLjc1OTY5YWIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvZWRp
dGluZy9TZWxlY3Rpb24uaAorKysgYi9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uLmgKQEAgLTM3
LDggKzM3LDcgQEAgY29uc3QgRUFmZmluaXR5IFNFTF9ERUZBVUxUX0FGRklOSVRZID0gRE9XTlNU
UkVBTTsKIAogY2xhc3MgU2VsZWN0aW9uIHsKIHB1YmxpYzoKLSAgICBlbnVtIEVTdGF0ZSB7IE5P
TkUsIENBUkVULCBSQU5HRSB9OwotICAgIGVudW0gRURpcmVjdGlvbiB7IEZPUldBUkQsIEJBQ0tX
QVJELCBSSUdIVCwgTEVGVCB9OworICAgIGVudW0gU2VsZWN0aW9uVHlwZSB7IE5vU2VsZWN0aW9u
LCBDYXJldFNlbGVjdGlvbiwgUmFuZ2VTZWxlY3Rpb24gfTsKIAogICAgIFNlbGVjdGlvbigpOwog
CkBAIC01Miw3ICs1MSw3IEBAIHB1YmxpYzoKIAogICAgIHN0YXRpYyBTZWxlY3Rpb24gc2VsZWN0
aW9uRnJvbUNvbnRlbnRzT2ZOb2RlKE5vZGUqKTsKIAotICAgIEVTdGF0ZSBzdGF0ZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhdGU7IH0KKyAgICBTZWxlY3Rpb25UeXBlIHNlbGVjdGlvblR5cGUoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvblR5cGU7IH0KIAogICAgIHZvaWQgc2V0QWZmaW5pdHko
RUFmZmluaXR5IGFmZmluaXR5KSB7IG1fYWZmaW5pdHkgPSBhZmZpbml0eTsgfQogICAgIEVBZmZp
bml0eSBhZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fYWZmaW5pdHk7IH0KQEAgLTYzLDE3ICs2
MiwxNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgVmlzaWJsZVBvc2l0aW9u
Jik7CiAgICAgCiAgICAgUG9zaXRpb24gYmFzZSgpIGNvbnN0IHsgcmV0dXJuIG1fYmFzZTsgfQot
ICAgIFBvc2l0aW9uIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50OyB9ICAgIAorICAg
IFBvc2l0aW9uIGV4dGVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXh0ZW50OyB9CiAgICAgUG9zaXRp
b24gc3RhcnQoKSBjb25zdCB7IHJldHVybiBtX3N0YXJ0OyB9CiAgICAgUG9zaXRpb24gZW5kKCkg
Y29uc3QgeyByZXR1cm4gbV9lbmQ7IH0KICAgICAKICAgICBWaXNpYmxlUG9zaXRpb24gdmlzaWJs
ZVN0YXJ0KCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1fc3RhcnQsIGlzUmFuZ2Uo
KSA/IERPV05TVFJFQU0gOiBhZmZpbml0eSgpKTsgfQogICAgIFZpc2libGVQb3NpdGlvbiB2aXNp
YmxlRW5kKCkgY29uc3QgeyByZXR1cm4gVmlzaWJsZVBvc2l0aW9uKG1fZW5kLCBpc1JhbmdlKCkg
PyBVUFNUUkVBTSA6IGFmZmluaXR5KCkpOyB9CiAKLSAgICBib29sIGlzTm9uZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRlKCkgPT0gTk9ORTsgfQotICAgIGJvb2wgaXNDYXJldCgpIGNvbnN0IHsgcmV0
dXJuIHN0YXRlKCkgPT0gQ0FSRVQ7IH0KLSAgICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVy
biBzdGF0ZSgpID09IFJBTkdFOyB9Ci0gICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsg
cmV0dXJuIHN0YXRlKCkgIT0gTk9ORTsgfQorICAgIGJvb2wgaXNOb25lKCkgY29uc3QgeyByZXR1
cm4gc2VsZWN0aW9uVHlwZSgpID09IE5vU2VsZWN0aW9uOyB9CisgICAgYm9vbCBpc0NhcmV0KCkg
Y29uc3QgeyByZXR1cm4gc2VsZWN0aW9uVHlwZSgpID09IENhcmV0U2VsZWN0aW9uOyB9CisgICAg
Ym9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gc2VsZWN0aW9uVHlwZSgpID09IFJhbmdlU2Vs
ZWN0aW9uOyB9CisgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIHNlbGVj
dGlvblR5cGUoKSAhPSBOb1NlbGVjdGlvbjsgfQogCiAgICAgYm9vbCBpc0Jhc2VGaXJzdCgpIGNv
bnN0IHsgcmV0dXJuIG1fYmFzZUlzRmlyc3Q7IH0KIApAQCAtMTAwLDE4ICs5OSwyMyBAQCBwdWJs
aWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCB2YWxpZGF0ZSgpOwotICAgIHZvaWQgYWRqdXN0Rm9y
RWRpdGFibGVDb250ZW50KCk7CiAKLSAgICBQb3NpdGlvbiBtX2Jhc2U7ICAgICAgICAgICAgICAg
ICAgLy8gYmFzZSBwb3NpdGlvbiBmb3IgdGhlIHNlbGVjdGlvbgotICAgIFBvc2l0aW9uIG1fZXh0
ZW50OyAgICAgICAgICAgICAgICAvLyBleHRlbnQgcG9zaXRpb24gZm9yIHRoZSBzZWxlY3Rpb24K
LSAgICBQb3NpdGlvbiBtX3N0YXJ0OyAgICAgICAgICAgICAgICAgLy8gc3RhcnQgcG9zaXRpb24g
Zm9yIHRoZSBzZWxlY3Rpb24KLSAgICBQb3NpdGlvbiBtX2VuZDsgICAgICAgICAgICAgICAgICAg
Ly8gZW5kIHBvc2l0aW9uIGZvciB0aGUgc2VsZWN0aW9uCisgICAgLy8gU3VwcG9ydCBtZXRob2Rz
IGZvciB2YWxpZGF0ZSgpCisgICAgdm9pZCBzZXRCYXNlQW5kRXh0ZW50VG9EZWVwRXF1aXZhbGVu
dHMoKTsKKyAgICB2b2lkIHNldFN0YXJ0QW5kRW5kRnJvbUJhc2VBbmRFeHRlbnRSZXNwZWN0aW5n
R3JhbnVsYXJpdHkoKTsKKyAgICB2b2lkIGFkanVzdFNlbGVjdGlvblRvQXZvaWRDcm9zc2luZ0Vk
aXRpbmdCb3VuZGFyaWVzKCk7CisgICAgdm9pZCB1cGRhdGVTZWxlY3Rpb25UeXBlKCk7CiAKLSAg
ICBFQWZmaW5pdHkgbV9hZmZpbml0eTsgICAgICAgICAgICAgLy8gdGhlIHVwc3RyZWFtL2Rvd25z
dHJlYW0gYWZmaW5pdHkgb2YgdGhlIGNhcmV0Ci0gICAgVGV4dEdyYW51bGFyaXR5IG1fZ3JhbnVs
YXJpdHk7ICAgLy8gZ3JhbnVsYXJpdHkgb2Ygc3RhcnQvZW5kIHNlbGVjdGlvbgorICAgIFBvc2l0
aW9uIG1fYmFzZTsgICAvLyBXaGVyZSB0aGUgZmlyc3QgY2xpY2sgaGFwcGVuZWQKKyAgICBQb3Np
dGlvbiBtX2V4dGVudDsgLy8gV2hlcmUgdGhlIGVuZCBjbGljayBoYXBwZW5lZAorICAgIFBvc2l0
aW9uIG1fc3RhcnQ7ICAvLyBMZWZ0bW9zdCBwb3NpdGlvbiB3aGVuIGV4cGFuZGVkIHRvIHJlc3Bl
Y3QgZ3JhbnVsYXJpdHkKKyAgICBQb3NpdGlvbiBtX2VuZDsgICAgLy8gUmlnaHRtb3N0IHBvc2l0
aW9uIHdoZW4gZXhwYW5kZWQgdG8gcmVzcGVjdCBncmFudWxhcml0eQorCisgICAgRUFmZmluaXR5
IG1fYWZmaW5pdHk7ICAgICAgICAgICAvLyB0aGUgdXBzdHJlYW0vZG93bnN0cmVhbSBhZmZpbml0
eSBvZiB0aGUgY2FyZXQKKyAgICBUZXh0R3JhbnVsYXJpdHkgbV9ncmFudWxhcml0eTsgIC8vIGdy
YW51bGFyaXR5IG9mIHN0YXJ0L2VuZCBzZWxlY3Rpb24KIAogICAgIC8vIHRoZXNlIGFyZSBjYWNo
ZWQsIGNhbiBiZSByZWNhbGN1bGF0ZWQgYnkgdmFsaWRhdGUoKQotICAgIEVTdGF0ZSBtX3N0YXRl
OyAgICAgICAgICAgICAgICAgICAvLyB0aGUgc3RhdGUgb2YgdGhlIHNlbGVjdGlvbgorICAgIFNl
bGVjdGlvblR5cGUgbV9zZWxlY3Rpb25UeXBlOyAgICAvLyBOb25lLCBDYXJldCwgUmFuZ2UKICAg
ICBib29sIG1fYmFzZUlzRmlyc3Q7ICAgICAgICAgICAgICAgLy8gdHJ1ZSBpZiBiYXNlIGlzIGJl
Zm9yZSB0aGUgZXh0ZW50CiB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5oIGIvV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaApp
bmRleCBmZTVlOTBkLi5hOTNkY2U0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVy
LmgKQEAgLTY3LDcgKzY3LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBjb250YWlucyhjb25zdCBJ
bnRQb2ludCYpOwogCi0gICAgU2VsZWN0aW9uOjpFU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX3NlbC5zdGF0ZSgpOyB9CisgICAgU2VsZWN0aW9uOjpTZWxlY3Rpb25UeXBlIHNlbGVjdGlv
blR5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbC5zZWxlY3Rpb25UeXBlKCk7IH0KIAogICAgIEVB
ZmZpbml0eSBhZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsLmFmZmluaXR5KCk7IH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwIGIvV2ViQ29yZS9l
ZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCmluZGV4IGMxMzcyOWQuLjgyMTlkY2YgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAorKysgYi9XZWJDb3JlL2VkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHAKQEAgLTM3MywxMiArMzczLDEyIEBAIHZvaWQgVHlwaW5nQ29t
bWFuZDo6ZGVsZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wg
a2lsbFJpbmcpCiAgICAgU2VsZWN0aW9uIHNlbGVjdGlvblRvRGVsZXRlOwogICAgIFNlbGVjdGlv
biBzZWxlY3Rpb25BZnRlclVuZG87CiAgICAgCi0gICAgc3dpdGNoIChlbmRpbmdTZWxlY3Rpb24o
KS5zdGF0ZSgpKSB7Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSQU5HRToKKyAgICBzd2l0Y2gg
KGVuZGluZ1NlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSkgeworICAgICAgICBjYXNlIFNlbGVj
dGlvbjo6UmFuZ2VTZWxlY3Rpb246CiAgICAgICAgICAgICBzZWxlY3Rpb25Ub0RlbGV0ZSA9IGVu
ZGluZ1NlbGVjdGlvbigpOwogICAgICAgICAgICAgc2VsZWN0aW9uQWZ0ZXJVbmRvID0gc2VsZWN0
aW9uVG9EZWxldGU7CiAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246
OkNBUkVUOiB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjogewogICAg
ICAgICAgICAgaWYgKGJyZWFrT3V0T2ZFbXB0eU1haWxCbG9ja3F1b3RlZFBhcmFncmFwaCgpKSB7
CiAgICAgICAgICAgICAgICAgdHlwaW5nQWRkZWRUb09wZW5Db21tYW5kKCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtNDMxLDcgKzQzMSw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6ZGVs
ZXRlS2V5UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2lsbFJpbmcp
CiAgICAgICAgICAgICAgICAgc2VsZWN0aW9uQWZ0ZXJVbmRvLnNldFdpdGhvdXRWYWxpZGF0aW9u
KHN0YXJ0aW5nU2VsZWN0aW9uKCkuZW5kKCksIHNlbGVjdGlvblRvRGVsZXRlLmV4dGVudCgpKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpO
T05FOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTQ1NSwx
MiArNDU1LDEyIEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6Zm9yd2FyZERlbGV0ZUtleVByZXNzZWQo
VGV4dEdyYW51bGFyaXR5IGdyYW51bGFyaXR5LCBib29sIGtpCiAgICAgU2VsZWN0aW9uIHNlbGVj
dGlvblRvRGVsZXRlOwogICAgIFNlbGVjdGlvbiBzZWxlY3Rpb25BZnRlclVuZG87CiAKLSAgICBz
d2l0Y2ggKGVuZGluZ1NlbGVjdGlvbigpLnN0YXRlKCkpIHsKLSAgICAgICAgY2FzZSBTZWxlY3Rp
b246OlJBTkdFOgorICAgIHN3aXRjaCAoZW5kaW5nU2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgp
KSB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKICAgICAgICAgICAg
IHNlbGVjdGlvblRvRGVsZXRlID0gZW5kaW5nU2VsZWN0aW9uKCk7CiAgICAgICAgICAgICBzZWxl
Y3Rpb25BZnRlclVuZG8gPSBzZWxlY3Rpb25Ub0RlbGV0ZTsKICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Q0FSRVQ6IHsKKyAgICAgICAgY2FzZSBTZWxlY3Rpb246
OkNhcmV0U2VsZWN0aW9uOiB7CiAgICAgICAgICAgICBtX3NtYXJ0RGVsZXRlID0gZmFsc2U7CiAK
ICAgICAgICAgICAgIC8vIEhhbmRsZSBkZWxldGUgYXQgYmVnaW5uaW5nLW9mLWJsb2NrIGNhc2Uu
CkBAIC01MDksNyArNTA5LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjpmb3J3YXJkRGVsZXRlS2V5
UHJlc3NlZChUZXh0R3JhbnVsYXJpdHkgZ3JhbnVsYXJpdHksIGJvb2wga2kKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9u
OjpOT05FOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAt
LWdpdCBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmlu
ZGV4IGY4ZTQ0M2YuLmNmYjViMGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAK
KysrIGIvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMTI1MCwzMiArMTI1MCwyOCBAQCBIVE1M
Rm9ybUVsZW1lbnQgKkZyYW1lOjpjdXJyZW50Rm9ybSgpIGNvbnN0CiAgICAgcmV0dXJuIHN0YXJ0
ID8gc2NhbkZvckZvcm0oc3RhcnQpIDogMDsKIH0KIAotLy8gRklYTUU6IHNob3VsZCB0aGlzIGdv
IGluIFNlbGVjdGlvbkNvbnRyb2xsZXI/CiB2b2lkIEZyYW1lOjpyZXZlYWxTZWxlY3Rpb24oY29u
c3QgUmVuZGVyTGF5ZXI6OlNjcm9sbEFsaWdubWVudCYgYWxpZ25tZW50KSBjb25zdAogewogICAg
IEludFJlY3QgcmVjdDsKLSAgICAKLSAgICBzd2l0Y2ggKHNlbGVjdGlvbigpLT5zdGF0ZSgpKSB7
Ci0gICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOT05FOgorCisgICAgc3dpdGNoIChzZWxlY3Rpb24o
KS0+c2VsZWN0aW9uVHlwZSgpKSB7CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpOb1NlbGVjdGlv
bjoKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIFNlbGVj
dGlvbjo6Q0FSRVQ6CisgICAgICAgIGNhc2UgU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKICAg
ICAgICAgICAgIHJlY3QgPSBzZWxlY3Rpb24oKS0+YWJzb2x1dGVDYXJldEJvdW5kcygpOwogICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBTZWxlY3Rpb246OlJB
TkdFOgorICAgICAgICBjYXNlIFNlbGVjdGlvbjo6UmFuZ2VTZWxlY3Rpb246CiAgICAgICAgICAg
ICByZWN0ID0gZW5jbG9zaW5nSW50UmVjdChzZWxlY3Rpb25Cb3VuZHMoZmFsc2UpKTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgIH0KIAogICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uKCkt
PnN0YXJ0KCk7Ci0KICAgICBBU1NFUlQoc3RhcnQubm9kZSgpKTsKICAgICBpZiAoc3RhcnQubm9k
ZSgpICYmIHN0YXJ0Lm5vZGUoKS0+cmVuZGVyZXIoKSkgewogICAgICAgICAvLyBGSVhNRTogVGhp
cyBjb2RlIG9ubHkgaGFuZGxlcyBzY3JvbGxpbmcgdGhlIHN0YXJ0Q29udGFpbmVyJ3MgbGF5ZXIs
IGJ1dAogICAgICAgICAvLyB0aGUgc2VsZWN0aW9uIHJlY3QgY291bGQgaW50ZXJzZWN0IG1vcmUg
dGhhbiBqdXN0IHRoYXQuIAogICAgICAgICAvLyBTZWUgPHJkYXI6Ly9wcm9ibGVtLzQ3OTk4OTk+
LgotICAgICAgICBpZiAoUmVuZGVyTGF5ZXIgKmxheWVyID0gc3RhcnQubm9kZSgpLT5yZW5kZXJl
cigpLT5lbmNsb3NpbmdMYXllcigpKQorICAgICAgICBpZiAoUmVuZGVyTGF5ZXIqIGxheWVyID0g
c3RhcnQubm9kZSgpLT5yZW5kZXJlcigpLT5lbmNsb3NpbmdMYXllcigpKQogICAgICAgICAgICAg
bGF5ZXItPnNjcm9sbFJlY3RUb1Zpc2libGUocmVjdCwgZmFsc2UsIGFsaWdubWVudCwgYWxpZ25t
ZW50KTsKICAgICB9CiB9Cg==
</data>
<flag name="review"
          id="13256"
          type_id="1"
          status="+"
          setter="justin.garcia"
    />
          </attachment>
      

    </bug>

</bugzilla>