<?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>127365</bug_id>
          
          <creation_ts>2014-01-21 12:46:26 -0800</creation_ts>
          <short_desc>[New Multicolumn] Table cells and list items need to work as multicolumn blocks</short_desc>
          <delta_ts>2014-01-24 09:20:42 -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>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dave Hyatt">hyatt</reporter>
          <assigned_to name="Dave Hyatt">hyatt</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>970388</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-21 12:46:26 -0800</bug_when>
    <thetext>Right now, the presence of RenderMultiColumnBlock is a problem. By having a concrete class for multi-column blocks, I created a situation where table cells and list items (and the RenderView too) cannot be multi-column. The old code worked as mix-in to RenderBlock, and so it works.

This bug is tracking the elimination of RenderMultiColumnBlock. I&apos;ll be folding its code into RenderBlockFlow. The first step is to eliminate all of RenderMultiColumnBlock&apos;s member variables and move them elsewhere.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970391</commentid>
    <comment_count>1</comment_count>
      <attachid>221778</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-21 12:53:40 -0800</bug_when>
    <thetext>Created attachment 221778
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970408</commentid>
    <comment_count>2</comment_count>
      <attachid>221783</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-21 13:40:18 -0800</bug_when>
    <thetext>Created attachment 221783
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970409</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-01-21 13:42:38 -0800</bug_when>
    <thetext>Attachment 221783 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderMultiColumnFlowThread.h:64:  One space before end of line comments  [whitespace/comments] [5]
ERROR: Source/WebCore/rendering/RenderMultiColumnFlowThread.h:66:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 2 in 8 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>970572</commentid>
    <comment_count>4</comment_count>
      <attachid>221783</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2014-01-21 21:56:36 -0800</bug_when>
    <thetext>Comment on attachment 221783
Patch

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

&gt; Source/WebCore/rendering/RenderMultiColumnBlock.cpp:43
&gt; +    RenderMultiColumnFlowThread* flowThread = new RenderMultiColumnFlowThread(document(), RenderStyle::createAnonymousStyleWithDisplay(&amp;style(), BLOCK));
&gt; +    flowThread-&gt;initializeStyle();
&gt; +    RenderBlockFlow::addChild(flowThread);
&gt; +    setMultiColumnFlowThread(flowThread);

Trying to work out the lifetime / ownership of the flowThread.  We create it here, and set it as both a child and as a member of the RenderBlockFlow rareData.  Does that mean it gets deleted as a result of the RenderBlockFlow&apos;s normal child deleting and we assume that corresponds with the rare data being torn down so we don&apos;t worry about the dangling pointer?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971146</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-23 08:34:15 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 221783 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=221783&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderMultiColumnBlock.cpp:43
&gt; &gt; +    RenderMultiColumnFlowThread* flowThread = new RenderMultiColumnFlowThread(document(), RenderStyle::createAnonymousStyleWithDisplay(&amp;style(), BLOCK));
&gt; &gt; +    flowThread-&gt;initializeStyle();
&gt; &gt; +    RenderBlockFlow::addChild(flowThread);
&gt; &gt; +    setMultiColumnFlowThread(flowThread);
&gt; 
&gt; Trying to work out the lifetime / ownership of the flowThread.  We create it here, and set it as both a child and as a member of the RenderBlockFlow rareData.  Does that mean it gets deleted as a result of the RenderBlockFlow&apos;s normal child deleting and we assume that corresponds with the rare data being torn down so we don&apos;t worry about the dangling pointer?

Correct. It&apos;s torn down by anonymous child cleanup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971148</commentid>
    <comment_count>6</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-23 08:34:54 -0800</bug_when>
    <thetext>Note I didn&apos;t change the ownership. I just moved it from one class to another.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971351</commentid>
    <comment_count>7</comment_count>
      <attachid>221783</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2014-01-23 14:56:29 -0800</bug_when>
    <thetext>Comment on attachment 221783
Patch

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

&gt; Source/WebCore/rendering/RenderBlockFlow.cpp:2895
&gt; +    RenderBlockFlowRareData&amp; rareData = ensureRareBlockFlowData();

Can flowThread be null and thus not require the creation of rareData?

&gt; Source/WebCore/rendering/RenderBlockFlow.h:154
&gt; +        RenderMultiColumnFlowThread* m_multiColumnFlowThread;

Could be a reference? There are lots of unchecked dereferences.

&gt; Source/WebCore/rendering/RenderMultiColumnBlock.cpp:95
&gt; +    multiColumnFlowThread()-&gt;setInBalancingPass(true); // Prevent re-entering this method (and recursion into layout).

This should use TemporaryChange&lt;&gt; or some other early-return-proof class.

&gt; Source/WebCore/rendering/RenderMultiColumnFlowThread.h:48
&gt; +    bool computeColumnCountAndWidth();

Add a comment to say what the return values means.

&gt; Source/WebCore/rendering/RenderMultiColumnFlowThread.h:65
&gt; +    LayoutUnit m_columnWidth; // since a multi-column block that is split across variable width pages or regions will have different column counts and widths in each.

since a -&gt; A

&gt; Source/WebCore/rendering/RenderMultiColumnFlowThread.h:68
&gt; +    bool m_inBalancingPass; // Set when relayouting for column balancing.

Comment doesn&apos;t add anything.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>971616</commentid>
    <comment_count>8</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2014-01-24 09:10:02 -0800</bug_when>
    <thetext>First round landed in r162702.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221778</attachid>
            <date>2014-01-21 12:53:40 -0800</date>
            <delta_ts>2014-01-21 13:40:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>22859</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjQ2NSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE0LTAxLTIxICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbTmV3IE11bHRpY29sdW1uXSBUYWJs
ZSBjZWxscyBhbmQgbGlzdCBpdGVtcyBuZWVkIHRvIHdvcmsgYXMgbXVsdGljb2x1bW4gYmxvY2tz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MzY1
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGlzIGEgZmlyc3Qgc3RlcCB0b3dhcmRzIGVs
aW1pbmF0aW5nIFJlbmRlck11bHRpQ29sdW1uQmxvY2sgYW5kIG1vdmluZworICAgICAgICBhbGwg
aXRzIGZ1bmN0aW9uYWxpdHkgaW50byBSZW5kZXJCbG9ja0Zsb3cuIERvaW5nIHNvIHdpbGwgYWxs
b3cgdGFibGUgY2VsbHMsIGxpc3QKKyAgICAgICAgaXRlbXMgYW5kIHRoZSBSZW5kZXJWaWV3IHRv
IHVzZSB0aGUgbmV3IG11bHRpLWNvbHVtbiBsYXlvdXQuCisgICAgICAgIAorICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpzZXRNdWx0aUNv
bHVtbkZsb3dUaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6UmVuZGVyQmxvY2tGbG93UmFyZURh
dGE6OlJlbmRlckJsb2NrRmxvd1JhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6bXVsdGlDb2x1bW5GbG93VGhyZWFkKToKKyAgICAgICAgQWRkIHRoZSBmbG93IHRo
cmVhZCBwb2ludGVyIHRvIHRoZSBtdWx0aS1jb2x1bW4gZmxvdyB0aHJlYWQgdG8gUmVuZGVyQmxv
Y2tGbG93J3MKKyAgICAgICAgcmFyZSBkYXRhLiBUaGlzIGxldHMgdXMgdXNlIG9ubHkgb25lIHBv
aW50ZXIgaW4gdGhlIHJhcmUgZGF0YSB0byBwb2ludCB0byBhbiBvYmplY3QKKyAgICAgICAgdGhh
dCBjYW4gaG9sZCBhbGwgb2YgdGhlIHJlc3Qgb2YgdGhlIG11bHRpLWNvbHVtbiBpbmZvLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6UmVuZGVyTXVsdGlDb2x1bW5CbG9jayk6
CisgICAgICAgIE1vdmUgdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgZmxvdyB0aHJlYWQgdG8gdGhl
IGNvbnN0cnVjdG9yLiBUaGlzIGVuc3VyZXMgd2UKKyAgICAgICAgbmV2ZXIgaGF2ZSBhIG51bGwg
ZmxvdyB0aHJlYWQgYW5kIGxldHMgdXMgYXZvaWQgaGF2aW5nIHRvIG51bGwgY2hlY2sgaXQgZm9y
CisgICAgICAgIGVtcHR5IG11bHRpLWNvbHVtbiBibG9ja3MuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmNvbHVtbkhlaWdodEF2YWlsYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjb2x1bW5XaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjb2x1bW5Db3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjp1cGRhdGVMb2dpY2FsV2lkdGhBbmRD
b2x1bW5XaWR0aCk6CisgICAgICAgIFRoZSBhYm92ZSBmdW5jdGlvbnMgbm93IGNhbGwgdGhyb3Vn
aCB0byB0aGUgbXVsdGktY29sdW1uIGZsb3cgdGhyZWFkIGZvciByZXN1bHRzLgorCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjaGVja0ZvclBhZ2luYXRpb25Mb2dp
Y2FsSGVpZ2h0Q2hhbmdlKToKKyAgICAgICAgIFNldCB0aGUgY29sdW1uIGhlaWdodCBhdmFpbGFi
bGUgb24gdGhlIGZsb3cgdGhyZWFkLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtbkJsb2NrOjpyZWxheW91dEZvclBhZ2luYXRpb24pOgorICAgICAgICBUaGUgYmFsYW5jaW5n
IHBhc3MgYW5kIGd1YXJkIGlzIGluIHRoZSBtdWx0aS1jb2x1bW4gZmxvdyB0aHJlYWQgbm93Lgor
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjphZGRDaGlsZCk6Cisg
ICAgICAgIERvbid0IGhhdmUgdG8gY3JlYXRlIHRoZSBmbG93IHRocmVhZCBoZXJlIGFueSBsb25n
ZXIsIHNpbmNlIHdlIGRvIGl0IHVwIGZyb250CisgICAgICAgIGluIHRoZSBjb25zdHJ1Y3RvciBv
ZiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0
aUNvbHVtbkJsb2NrOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZCk6CisgICAgICAgIERvbid0
IG5lZWQgdGhlIG51bGwgY2hlY2sgb2YgdGhlIGZsb3cgdGhyZWFkIGFueSBtb3JlLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suaDoKKyAgICAgICAgQ2hhbmdl
IHRoZSBpbmxpbmVkIGZ1bmN0aW9ucyB0byBub3QgYmUgaW5saW5lZCwgc2luY2UgdGhleSBuZWVk
IHRvIGNhbGwKKyAgICAgICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkIGZ1bmN0aW9ucyBu
b3cuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6UmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkKToKKyAgICAgICAgSW5pdCB0aGUgbmV3IG1lbWJlciB2YXJp
YWJsZXMgd2UgbW92ZWQgaGVyZSBmcm9tIFJlbmRlck11bHRpQ29sdW1uQmxvY2suCisKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Y29tcHV0ZUNvbHVtbkNv
dW50QW5kV2lkdGgpOgorICAgICAgICBNb3ZlZCBmcm9tIFJlbmRlck11bHRpQ29sdW1uQmxvY2su
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmg6Cisg
ICAgICAgIEFkZCBwdWJsaWMgZ2V0dGVycy9zZXR0ZXJzIHRvIHRoZSBtZW1iZXIgdmFyaWFibGVz
IHNvIHRoYXQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jayBjYW4KKyAgICAgICAgc3RpbGwgc2VlIHRo
ZW0uIE1vdmUgdGhlIG1lbWJlciB2YXJpYWJsZXMgaGVyZSBmcm9tIFJlbmRlck11bHRpQ29sdW1u
QmxvY2suCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmNhbGN1bGF0ZUJhbGFuY2Vk
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpwcmVwYXJl
Rm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0Ojpjb2x1
bW5Db3VudCk6CisgICAgICAgIENhbGwgdGhyb3VnaCB0byB0aGUgZmxvdyB0aHJlYWQgaW5zdGVh
ZC4KKwogMjAxNC0wMS0yMSAgUm9iZXJ0IFNpcGthICA8c2lwa2FAaW5mLnUtc3plZ2VkLmh1Pgog
CiAgICAgICAgIFN1cHBvcnQgU1NMIGVycm9yIGhhbmRsaW5nIGluIGNhc2Ugb2Ygc3luY2hyb25v
dXMgam9iLgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxv
dy5jcHAJKHJldmlzaW9uIDE2MjM2NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJCbG9ja0Zsb3cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODc4LDYgKzI4NzgsMTIgQEAgdm9p
ZCBSZW5kZXJCbG9ja0Zsb3c6OnNldFJlbmRlck5hbWVkRmxvdwogICAgIHJhcmVEYXRhLm1fcmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQgPSBmbG93RnJhZ21lbnQ7CiB9CiAKK3ZvaWQgUmVuZGVyQmxv
Y2tGbG93OjpzZXRNdWx0aUNvbHVtbkZsb3dUaHJlYWQoUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkKiBmbG93VGhyZWFkKQoreworICAgIFJlbmRlckJsb2NrRmxvd1JhcmVEYXRhJiByYXJlRGF0
YSA9IGVuc3VyZVJhcmVCbG9ja0Zsb3dEYXRhKCk7CisgICAgcmFyZURhdGEubV9tdWx0aUNvbHVt
bkZsb3dUaHJlYWQgPSBmbG93VGhyZWFkOworfQorCiBzdGF0aWMgYm9vbCBzaG91bGRDaGVja0xp
bmVzKGNvbnN0IFJlbmRlckJsb2NrRmxvdyYgYmxvY2tGbG93KQogewogICAgIHJldHVybiAhYmxv
Y2tGbG93LmlzRmxvYXRpbmdPck91dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAhYmxvY2tGbG93Lmlz
UnVuSW4oKSAmJiBibG9ja0Zsb3cuc3R5bGUoKS5oZWlnaHQoKS5pc0F1dG8oKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHJldmlzaW9uIDE2MjM2
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzUsNiArMzUsNyBAQCBjbGFzcyBMYXlvdXRTdGF0ZU1haW50YWluZXI7CiBj
bGFzcyBMaW5lQnJlYWtlcjsKIGNsYXNzIExpbmVJbmZvOwogY2xhc3MgTGluZVdpZHRoOworY2xh
c3MgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOwogY2xhc3MgUmVuZGVyTmFtZWRGbG93RnJh
Z21lbnQ7CiBjbGFzcyBSZW5kZXJSdWJ5UnVuOwogCkBAIC0xMTcsNiArMTE4LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgOiBtX21hcmdpbnMocG9zaXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGJs
b2NrKSwgbmVnYXRpdmVNYXJnaW5CZWZvcmVEZWZhdWx0KGJsb2NrKSwgcG9zaXRpdmVNYXJnaW5B
ZnRlckRlZmF1bHQoYmxvY2spLCBuZWdhdGl2ZU1hcmdpbkFmdGVyRGVmYXVsdChibG9jaykpCiAg
ICAgICAgICAgICAsIG1fbGluZUJyZWFrVG9Bdm9pZFdpZG93KC0xKQogICAgICAgICAgICAgLCBt
X3JlbmRlck5hbWVkRmxvd0ZyYWdtZW50KG51bGxwdHIpCisgICAgICAgICAgICAsIG1fbXVsdGlD
b2x1bW5GbG93VGhyZWFkKG51bGxwdHIpCiAgICAgICAgICAgICAsIG1fZGlzY2FyZE1hcmdpbkJl
Zm9yZShmYWxzZSkKICAgICAgICAgICAgICwgbV9kaXNjYXJkTWFyZ2luQWZ0ZXIoZmFsc2UpCiAg
ICAgICAgICAgICAsIG1fZGlkQnJlYWtBdExpbmVUb0F2b2lkV2lkb3coZmFsc2UpCkBAIC0xNDks
NiArMTUxLDggQEAgcHVibGljOgogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Um9vdElubGluZUJv
eD4gbV9saW5lR3JpZEJveDsKICAgICAgICAgUmVuZGVyTmFtZWRGbG93RnJhZ21lbnQqIG1fcmVu
ZGVyTmFtZWRGbG93RnJhZ21lbnQ7CiAKKyAgICAgICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhy
ZWFkKiBtX211bHRpQ29sdW1uRmxvd1RocmVhZDsKKyAgICAgICAgCiAgICAgICAgIGJvb2wgbV9k
aXNjYXJkTWFyZ2luQmVmb3JlIDogMTsKICAgICAgICAgYm9vbCBtX2Rpc2NhcmRNYXJnaW5BZnRl
ciA6IDE7CiAgICAgICAgIGJvb2wgbV9kaWRCcmVha0F0TGluZVRvQXZvaWRXaWRvdyA6IDE7CkBA
IC0yNjksNiArMjczLDkgQEAgcHVibGljOgogICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBy
ZW5kZXJOYW1lZEZsb3dGcmFnbWVudCgpIGNvbnN0IHsgcmV0dXJuIGhhc1JhcmVCbG9ja0Zsb3dE
YXRhKCkgPyByYXJlQmxvY2tGbG93RGF0YSgpLT5tX3JlbmRlck5hbWVkRmxvd0ZyYWdtZW50IDog
bnVsbHB0cjsgfQogICAgIHZvaWQgc2V0UmVuZGVyTmFtZWRGbG93RnJhZ21lbnQoUmVuZGVyTmFt
ZWRGbG93RnJhZ21lbnQqKTsKIAorICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogbXVs
dGlDb2x1bW5GbG93VGhyZWFkKCkgY29uc3QgeyByZXR1cm4gaGFzUmFyZUJsb2NrRmxvd0RhdGEo
KSA/IHJhcmVCbG9ja0Zsb3dEYXRhKCktPm1fbXVsdGlDb2x1bW5GbG93VGhyZWFkIDogbnVsbHB0
cjsgfQorICAgIHZvaWQgc2V0TXVsdGlDb2x1bW5GbG93VGhyZWFkKFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZCopOworICAgIAogICAgIGJvb2wgY29udGFpbnNGbG9hdHMoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiBtX2Zsb2F0aW5nT2JqZWN0cyAmJiAhbV9mbG9hdGluZ09iamVjdHMtPnNl
dCgpLmlzRW1wdHkoKTsgfQogICAgIGJvb2wgY29udGFpbnNGbG9hdChSZW5kZXJCb3gmKSBjb25z
dDsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxv
Y2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtbkJsb2NrLmNwcAkocmV2aXNpb24gMTYyMzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMywx
NiArMzMsMzEgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1SZW5kZXJNdWx0aUNvbHVtbkJs
b2NrOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKEVsZW1lbnQmIGVsZW1lbnQsIFBhc3NSZWY8UmVu
ZGVyU3R5bGU+IHN0eWxlKQotICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1lbnQsIHN0ZDo6bW92
ZShzdHlsZSkpCi0gICAgLCBtX2Zsb3dUaHJlYWQoMCkKLSAgICAsIG1fY29sdW1uQ291bnQoMSkK
LSAgICAsIG1fY29sdW1uV2lkdGgoMCkKLSAgICAsIG1fY29sdW1uSGVpZ2h0QXZhaWxhYmxlKDAp
Ci0gICAgLCBtX2luQmFsYW5jaW5nUGFzcyhmYWxzZSkKK1JlbmRlck11bHRpQ29sdW1uQmxvY2s6
OlJlbmRlck11bHRpQ29sdW1uQmxvY2soRWxlbWVudCYgZWxlbWVudCwgUGFzc1JlZjxSZW5kZXJT
dHlsZT4gc3R5bGVQdHIpCisgICAgOiBSZW5kZXJCbG9ja0Zsb3coZWxlbWVudCwgc3RkOjptb3Zl
KHN0eWxlUHRyKSkKIHsKKyAgICBzZXRDaGlsZHJlbklubGluZShmYWxzZSk7CisgICAgUmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkKiBmbG93VGhyZWFkID0gbmV3IFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZChkb2N1bWVudCgpLCBSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVX
aXRoRGlzcGxheSgmc3R5bGUoKSwgQkxPQ0spKTsKKyAgICBmbG93VGhyZWFkLT5pbml0aWFsaXpl
U3R5bGUoKTsKKyAgICBSZW5kZXJCbG9ja0Zsb3c6OmFkZENoaWxkKGZsb3dUaHJlYWQpOworICAg
IHNldE11bHRpQ29sdW1uRmxvd1RocmVhZChmbG93VGhyZWFkKTsKIH0KIAorTGF5b3V0VW5pdCBS
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjb2x1bW5IZWlnaHRBdmFpbGFibGUoKSBjb25zdAorewor
ICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+Y29sdW1uSGVpZ2h0QXZhaWxhYmxl
KCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6Y29sdW1uV2lkdGgo
KSBjb25zdAoreworICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+Y29sdW1uV2lk
dGgoKTsKK30KKwordW5zaWduZWQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6Y29sdW1uQ291bnQo
KSBjb25zdAoreworICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+Y29sdW1uQ291
bnQoKTsKK30KKyAgICAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6c3R5bGVEaWRDaGFu
Z2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKIHsK
ICAgICBSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKQEAg
LTUwLDM4ICs2NSwxMCBAQCB2b2lkIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OnN0eWxlRGlkQ2hh
CiAgICAgICAgIGNoaWxkLT5zZXRTdHlsZShSZW5kZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5
bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgQkxPQ0spKTsKIH0KIAotdm9pZCBSZW5kZXJNdWx0aUNv
bHVtbkJsb2NrOjpjb21wdXRlQ29sdW1uQ291bnRBbmRXaWR0aCgpCi17Ci0gICAgLy8gQ2FsY3Vs
YXRlIG91ciBjb2x1bW4gd2lkdGggYW5kIGNvbHVtbiBjb3VudC4KLSAgICAvLyBGSVhNRTogQ2Fu
IG92ZXJmbG93IG9uIGZhc3QvYmxvY2svZmxvYXQvZmxvYXQtbm90LXJlbW92ZWQtZnJvbS1uZXh0
LXNpYmxpbmc0Lmh0bWwsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9Njg3NDQKLSAgICBtX2NvbHVtbkNvdW50ID0gMTsKLSAgICBtX2NvbHVtbldpZHRoID0gY29u
dGVudExvZ2ljYWxXaWR0aCgpOwotICAgIAotICAgIEFTU0VSVCghc3R5bGUoKS5oYXNBdXRvQ29s
dW1uQ291bnQoKSB8fCAhc3R5bGUoKS5oYXNBdXRvQ29sdW1uV2lkdGgoKSk7Ci0KLSAgICBMYXlv
dXRVbml0IGF2YWlsV2lkdGggPSBtX2NvbHVtbldpZHRoOwotICAgIExheW91dFVuaXQgY29sR2Fw
ID0gY29sdW1uR2FwKCk7Ci0gICAgTGF5b3V0VW5pdCBjb2xXaWR0aCA9IHN0ZDo6bWF4PExheW91
dFVuaXQ+KDEsIExheW91dFVuaXQoc3R5bGUoKS5jb2x1bW5XaWR0aCgpKSk7Ci0gICAgaW50IGNv
bENvdW50ID0gc3RkOjptYXg8aW50PigxLCBzdHlsZSgpLmNvbHVtbkNvdW50KCkpOwotCi0gICAg
aWYgKHN0eWxlKCkuaGFzQXV0b0NvbHVtbldpZHRoKCkgJiYgIXN0eWxlKCkuaGFzQXV0b0NvbHVt
bkNvdW50KCkpIHsKLSAgICAgICAgbV9jb2x1bW5Db3VudCA9IGNvbENvdW50OwotICAgICAgICBt
X2NvbHVtbldpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMCwgKGF2YWlsV2lkdGggLSAoKG1f
Y29sdW1uQ291bnQgLSAxKSAqIGNvbEdhcCkpIC8gbV9jb2x1bW5Db3VudCk7Ci0gICAgfSBlbHNl
IGlmICghc3R5bGUoKS5oYXNBdXRvQ29sdW1uV2lkdGgoKSAmJiBzdHlsZSgpLmhhc0F1dG9Db2x1
bW5Db3VudCgpKSB7Ci0gICAgICAgIG1fY29sdW1uQ291bnQgPSBzdGQ6Om1heDxMYXlvdXRVbml0
PigxLCAoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyAoY29sV2lkdGggKyBjb2xHYXApKTsKLSAgICAg
ICAgbV9jb2x1bW5XaWR0aCA9ICgoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyBtX2NvbHVtbkNvdW50
KSAtIGNvbEdhcDsKLSAgICB9IGVsc2UgewotICAgICAgICBtX2NvbHVtbkNvdW50ID0gc3RkOjpt
YXg8TGF5b3V0VW5pdD4oc3RkOjptaW48TGF5b3V0VW5pdD4oY29sQ291bnQsIChhdmFpbFdpZHRo
ICsgY29sR2FwKSAvIChjb2xXaWR0aCArIGNvbEdhcCkpLCAxKTsKLSAgICAgICAgbV9jb2x1bW5X
aWR0aCA9ICgoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyBtX2NvbHVtbkNvdW50KSAtIGNvbEdhcDsK
LSAgICB9Ci19Ci0KIGJvb2wgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6dXBkYXRlTG9naWNhbFdp
ZHRoQW5kQ29sdW1uV2lkdGgoKQogewogICAgIGJvb2wgcmVsYXlvdXRDaGlsZHJlbiA9IFJlbmRl
ckJsb2NrRmxvdzo6dXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgoKTsKLSAgICBMYXlv
dXRVbml0IG9sZENvbHVtbldpZHRoID0gbV9jb2x1bW5XaWR0aDsKLSAgICBjb21wdXRlQ29sdW1u
Q291bnRBbmRXaWR0aCgpOwotICAgIGlmIChtX2NvbHVtbldpZHRoICE9IG9sZENvbHVtbldpZHRo
KQorICAgIGlmIChtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+Y29tcHV0ZUNvbHVtbkNvdW50QW5k
V2lkdGgoKSkKICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9IHRydWU7CiAgICAgcmV0dXJuIHJl
bGF5b3V0Q2hpbGRyZW47CiB9CkBAIC05MCwxNiArNzcsMTcgQEAgdm9pZCBSZW5kZXJNdWx0aUNv
bHVtbkJsb2NrOjpjaGVja0ZvclBhZwogewogICAgIC8vIFdlIGRvbid0IGFjdHVhbGx5IHVwZGF0
ZSBhbnkgb2YgdGhlIHZhcmlhYmxlcy4gV2UganVzdCBzdWJjbGFzc2VkIHRvIGFkanVzdCBvdXIg
Y29sdW1uIGhlaWdodC4KICAgICB1cGRhdGVMb2dpY2FsSGVpZ2h0KCk7Ci0gICAgbV9jb2x1bW5I
ZWlnaHRBdmFpbGFibGUgPSBzdGQ6Om1heDxMYXlvdXRVbml0Pihjb250ZW50TG9naWNhbEhlaWdo
dCgpLCAwKTsKKyAgICBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+c2V0Q29sdW1uSGVpZ2h0QXZh
aWxhYmxlKHN0ZDo6bWF4PExheW91dFVuaXQ+KGNvbnRlbnRMb2dpY2FsSGVpZ2h0KCksIDApKTsK
ICAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwogfQogCiBib29sIFJlbmRlck11bHRpQ29sdW1uQmxv
Y2s6OnJlbGF5b3V0Rm9yUGFnaW5hdGlvbihib29sLCBMYXlvdXRVbml0LCBMYXlvdXRTdGF0ZU1h
aW50YWluZXImIHN0YXRlUHVzaGVyKQogewotICAgIGlmIChtX2luQmFsYW5jaW5nUGFzcyB8fCAh
cmVxdWlyZXNCYWxhbmNpbmcoKSkKKyAgICBpZiAoIW11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5z
aG91bGRSZWxheW91dEZvclBhZ2luYXRpb24oKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IG1faW5CYWxhbmNpbmdQYXNzID0gdHJ1ZTsgLy8gUHJldmVudCByZS1lbnRlcmluZyB0aGlzIG1l
dGhvZCAoYW5kIHJlY3Vyc2lvbiBpbnRvIGxheW91dCkuCi0KKyAgICAKKyAgICBtdWx0aUNvbHVt
bkZsb3dUaHJlYWQoKS0+c2V0SW5CYWxhbmNpbmdQYXNzKHRydWUpOyAvLyBQcmV2ZW50IHJlLWVu
dGVyaW5nIHRoaXMgbWV0aG9kIChhbmQgcmVjdXJzaW9uIGludG8gbGF5b3V0KS4KKyAgICAKICAg
ICBib29sIG5lZWRzUmVsYXlvdXQ7CiAgICAgYm9vbCBuZWVkZWRSZWxheW91dCA9IGZhbHNlOwog
ICAgIGJvb2wgZmlyc3RQYXNzID0gdHJ1ZTsKQEAgLTExMSw3ICs5OSw3IEBAIGJvb2wgUmVuZGVy
TXVsdGlDb2x1bW5CbG9jazo6cmVsYXlvdXRGb3IKICAgICAgICAgLy8gY29sdW1ucywgdW5sZXNz
IHdlIGhhdmUgYSBidWcuCiAgICAgICAgIG5lZWRzUmVsYXlvdXQgPSBmYWxzZTsKICAgICAgICAg
Zm9yIChSZW5kZXJCb3gqIGNoaWxkQm94ID0gZmlyc3RDaGlsZEJveCgpOyBjaGlsZEJveDsgY2hp
bGRCb3ggPSBjaGlsZEJveC0+bmV4dFNpYmxpbmdCb3goKSkKLSAgICAgICAgICAgIGlmIChjaGls
ZEJveCAhPSBtX2Zsb3dUaHJlYWQgJiYgY2hpbGRCb3gtPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQo
KSkgeworICAgICAgICAgICAgaWYgKGNoaWxkQm94ICE9IG11bHRpQ29sdW1uRmxvd1RocmVhZCgp
ICYmIGNoaWxkQm94LT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpIHsKICAgICAgICAgICAgICAg
ICBSZW5kZXJNdWx0aUNvbHVtblNldCogbXVsdGljb2xTZXQgPSB0b1JlbmRlck11bHRpQ29sdW1u
U2V0KGNoaWxkQm94KTsKICAgICAgICAgICAgICAgICBpZiAobXVsdGljb2xTZXQtPmNhbGN1bGF0
ZUJhbGFuY2VkSGVpZ2h0KGZpcnN0UGFzcykpIHsKICAgICAgICAgICAgICAgICAgICAgbXVsdGlj
b2xTZXQtPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKQEAgLTEyMiw3ICsxMTAs
NyBAQCBib29sIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OnJlbGF5b3V0Rm9yCiAgICAgICAgIGlm
IChuZWVkc1JlbGF5b3V0KSB7CiAgICAgICAgICAgICAvLyBMYXlvdXQgYWdhaW4uIENvbHVtbiBi
YWxhbmNpbmcgcmVzdWx0ZWQgaW4gYSBuZXcgaGVpZ2h0LgogICAgICAgICAgICAgbmVlZGVkUmVs
YXlvdXQgPSB0cnVlOwotICAgICAgICAgICAgbV9mbG93VGhyZWFkLT5zZXRDaGlsZE5lZWRzTGF5
b3V0KE1hcmtPbmx5VGhpcyk7CisgICAgICAgICAgICBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+
c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICAgICAgc2V0Q2hpbGRO
ZWVkc0xheW91dChNYXJrT25seVRoaXMpOwogICAgICAgICAgICAgaWYgKGZpcnN0UGFzcykKICAg
ICAgICAgICAgICAgICBzdGF0ZVB1c2hlci5wb3AoKTsKQEAgLTEzMCw1MSArMTE4LDQ1IEBAIGJv
b2wgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6cmVsYXlvdXRGb3IKICAgICAgICAgfQogICAgICAg
ICBmaXJzdFBhc3MgPSBmYWxzZTsKICAgICB9IHdoaWxlIChuZWVkc1JlbGF5b3V0KTsKLSAgICBt
X2luQmFsYW5jaW5nUGFzcyA9IGZhbHNlOworICAgIAorICAgIG11bHRpQ29sdW1uRmxvd1RocmVh
ZCgpLT5zZXRJbkJhbGFuY2luZ1Bhc3MoZmFsc2UpOworICAgIAogICAgIHJldHVybiBuZWVkZWRS
ZWxheW91dDsKIH0KIAogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjphZGRDaGlsZChSZW5k
ZXJPYmplY3QqIG5ld0NoaWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKQogewotICAgIGlm
ICghbV9mbG93VGhyZWFkKSB7Ci0gICAgICAgIG1fZmxvd1RocmVhZCA9IG5ldyBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQoZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91
c1N0eWxlV2l0aERpc3BsYXkoJnN0eWxlKCksIEJMT0NLKSk7Ci0gICAgICAgIG1fZmxvd1RocmVh
ZC0+aW5pdGlhbGl6ZVN0eWxlKCk7Ci0gICAgICAgIFJlbmRlckJsb2NrRmxvdzo6YWRkQ2hpbGQo
bV9mbG93VGhyZWFkKTsKLSAgICB9Ci0gICAgbV9mbG93VGhyZWFkLT5hZGRDaGlsZChuZXdDaGls
ZCwgYmVmb3JlQ2hpbGQpOworICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5hZGRDaGlsZChu
ZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogfQogICAgIAogUmVuZGVyT2JqZWN0KiBSZW5kZXJNdWx0
aUNvbHVtbkJsb2NrOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZChib29sIHJlbGF5b3V0Q2hp
bGRyZW4pCiB7Ci0gICAgaWYgKCFtX2Zsb3dUaHJlYWQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IAogICAgIC8vIFVwZGF0ZSB0aGUgZGltZW5zaW9ucyBvZiBvdXIgcmVnaW9ucyBiZWZvcmUgd2Ug
bGF5IG91dCB0aGUgZmxvdyB0aHJlYWQuCiAgICAgLy8gRklYTUU6IEV2ZW50dWFsbHkgdGhpcyBp
cyBnb2luZyB0byBnZXQgd2F5IG1vcmUgY29tcGxpY2F0ZWQsIGFuZCB3ZSB3aWxsIGJlIGRlc3Ry
b3lpbmcgcmVnaW9ucwogICAgIC8vIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGtlZXAgdGhlbSBhcm91
bmQuCiAgICAgYm9vbCBzaG91bGRJbnZhbGlkYXRlUmVnaW9ucyA9IGZhbHNlOwogICAgIGZvciAo
UmVuZGVyQm94KiBjaGlsZEJveCA9IGZpcnN0Q2hpbGRCb3goKTsgY2hpbGRCb3g7IGNoaWxkQm94
ID0gY2hpbGRCb3gtPm5leHRTaWJsaW5nQm94KCkpIHsKLSAgICAgICAgaWYgKGNoaWxkQm94ID09
IG1fZmxvd1RocmVhZCkKKyAgICAgICAgaWYgKGNoaWxkQm94ID09IG11bHRpQ29sdW1uRmxvd1Ro
cmVhZCgpKQogICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgaWYgKHJlbGF5b3V0Q2hp
bGRyZW4gfHwgY2hpbGRCb3gtPm5lZWRzTGF5b3V0KCkpIHsKLSAgICAgICAgICAgIGlmICghbV9p
bkJhbGFuY2luZ1Bhc3MgJiYgY2hpbGRCb3gtPmlzUmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkKKyAg
ICAgICAgICAgIGlmICghbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPmluQmFsYW5jaW5nUGFzcygp
ICYmIGNoaWxkQm94LT5pc1JlbmRlck11bHRpQ29sdW1uU2V0KCkpCiAgICAgICAgICAgICAgICAg
dG9SZW5kZXJNdWx0aUNvbHVtblNldChjaGlsZEJveCktPnByZXBhcmVGb3JMYXlvdXQoKTsKICAg
ICAgICAgICAgIHNob3VsZEludmFsaWRhdGVSZWdpb25zID0gdHJ1ZTsKICAgICAgICAgfQogICAg
IH0KICAgICAKICAgICBpZiAoc2hvdWxkSW52YWxpZGF0ZVJlZ2lvbnMpCi0gICAgICAgIG1fZmxv
d1RocmVhZC0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsKKyAgICAgICAgbXVsdGlDb2x1bW5GbG93VGhy
ZWFkKCktPmludmFsaWRhdGVSZWdpb25zKCk7CiAKICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbikK
LSAgICAgICAgbV9mbG93VGhyZWFkLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CisgICAgICAgIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1h
cmtPbmx5VGhpcyk7CiAgICAgCi0gICAgc2V0TG9naWNhbFRvcEZvckNoaWxkKCptX2Zsb3dUaHJl
YWQsIGJvcmRlckFuZFBhZGRpbmdCZWZvcmUoKSk7Ci0gICAgbV9mbG93VGhyZWFkLT5sYXlvdXRJ
Zk5lZWRlZCgpOwotICAgIGRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZCgqbV9m
bG93VGhyZWFkKTsKKyAgICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoKm11bHRpQ29sdW1uRmxvd1Ro
cmVhZCgpLCBib3JkZXJBbmRQYWRkaW5nQmVmb3JlKCkpOworICAgIG11bHRpQ29sdW1uRmxvd1Ro
cmVhZCgpLT5sYXlvdXRJZk5lZWRlZCgpOworICAgIGRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRp
b25Gb3JDaGlsZCgqbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpOwogICAgIAotICAgIHJldHVybiBt
X2Zsb3dUaHJlYWQ7CisgICAgcmV0dXJuIG11bHRpQ29sdW1uRmxvd1RocmVhZCgpOwogfQogCiBj
b25zdCBjaGFyKiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxv
Y2suaAkocmV2aXNpb24gMTYyMzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzgsMTQgKzM4LDEwIEBAIHB1
YmxpYzoKICAgICBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKEVsZW1lbnQmLCBQYXNzUmVmPFJlbmRl
clN0eWxlPik7CiAgICAgRWxlbWVudCYgZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIHRvRWxlbWVu
dChub2RlRm9yTm9uQW5vbnltb3VzKCkpOyB9CiAKLSAgICBMYXlvdXRVbml0IGNvbHVtbkhlaWdo
dEF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uSGVpZ2h0QXZhaWxhYmxlOyB9Cisg
ICAgTGF5b3V0VW5pdCBjb2x1bW5IZWlnaHRBdmFpbGFibGUoKSBjb25zdDsKIAotICAgIExheW91
dFVuaXQgY29sdW1uV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbldpZHRoOyB9Ci0gICAg
dW5zaWduZWQgY29sdW1uQ291bnQoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbkNvdW50OyB9Ci0K
LSAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqIGZsb3dUaHJlYWQoKSBjb25zdCB7IHJl
dHVybiBtX2Zsb3dUaHJlYWQ7IH0KLQotICAgIGJvb2wgcmVxdWlyZXNCYWxhbmNpbmcoKSBjb25z
dCB7IHJldHVybiAhbV9jb2x1bW5IZWlnaHRBdmFpbGFibGUgfHwgc3R5bGUoKS5jb2x1bW5GaWxs
KCkgPT0gQ29sdW1uRmlsbEJhbGFuY2U7IH0KKyAgICBMYXlvdXRVbml0IGNvbHVtbldpZHRoKCkg
Y29uc3Q7CisgICAgdW5zaWduZWQgY29sdW1uQ291bnQoKSBjb25zdDsKIAogcHJpdmF0ZToKICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKCkgY29uc3QgeyByZXR1cm4g
dHJ1ZTsgfQpAQCAtNjQsMTMgKzYwLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXB1dGVDb2x1
bW5Db3VudEFuZFdpZHRoKCk7CiAKICAgICB2b2lkIGVuc3VyZUNvbHVtblNldHMoKTsKLQotICAg
IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogbV9mbG93VGhyZWFkOwotICAgIHVuc2lnbmVk
IG1fY29sdW1uQ291bnQ7ICAgLy8gVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50L3dpZHRoIHRoYXQg
YXJlIGJhc2VkIG9mZiBvdXIgY29udGFpbmluZyBibG9jayB3aWR0aC4gVGhlc2UgdmFsdWVzIHJl
cHJlc2VudCBvbmx5IHRoZSBkZWZhdWx0LAotICAgIExheW91dFVuaXQgbV9jb2x1bW5XaWR0aDsg
Ly8gc2luY2UgYSBtdWx0aS1jb2x1bW4gYmxvY2sgdGhhdCBpcyBzcGxpdCBhY3Jvc3MgdmFyaWFi
bGUgd2lkdGggcGFnZXMgb3IgcmVnaW9ucyB3aWxsIGhhdmUgZGlmZmVyZW50IGNvbHVtbiBjb3Vu
dHMgYW5kIHdpZHRocyBpbiBlYWNoLgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g
VGhlc2UgdmFsdWVzIHdpbGwgYmUgY2FjaGVkIChldmVudHVhbGx5KSBmb3IgbXVsdGktY29sdW1u
IGJsb2Nrcy4KLSAgICBMYXlvdXRVbml0IG1fY29sdW1uSGVpZ2h0QXZhaWxhYmxlOyAvLyBUb3Rh
bCBoZWlnaHQgYXZhaWxhYmxlIHRvIGNvbHVtbnMsIG9yIDAgaWYgYXV0by4KLSAgICBib29sIG1f
aW5CYWxhbmNpbmdQYXNzOyAvLyBTZXQgd2hlbiByZWxheW91dGluZyBmb3IgY29sdW1uIGJhbGFu
Y2luZy4KIH07CiAKIFJFTkRFUl9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJNdWx0aUNvbHVtbkJs
b2NrLCBpc1JlbmRlck11bHRpQ29sdW1uQmxvY2soKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCShy
ZXZpc2lvbiAxNjIzNjQpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTAgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OlJlbmRlck11
bHRpQ29sdW1uRmxvd1RocmVhZChEb2N1bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5
bGU+IHN0eWxlKQogICAgIDogUmVuZGVyRmxvd1RocmVhZChkb2N1bWVudCwgc3RkOjptb3ZlKHN0
eWxlKSkKKyAgICAsIG1fY29sdW1uQ291bnQoMSkKKyAgICAsIG1fY29sdW1uV2lkdGgoMCkKKyAg
ICAsIG1fY29sdW1uSGVpZ2h0QXZhaWxhYmxlKDApCisgICAgLCBtX2luQmFsYW5jaW5nUGFzcyhm
YWxzZSkKIHsKICAgICBzZXRGbG93VGhyZWFkU3RhdGUoSW5zaWRlSW5GbG93VGhyZWFkKTsKIH0K
QEAgLTU5LDYgKzYzLDQwIEBAIExheW91dFVuaXQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
OjoKICAgICByZXR1cm4gcGFyZW50QmxvY2stPmNvbHVtbldpZHRoKCk7CiB9CiAKK2Jvb2wgUmVu
ZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpjb21wdXRlQ29sdW1uQ291bnRBbmRXaWR0aCgpCit7
CisgICAgUmVuZGVyQmxvY2sqIGNvbHVtbkJsb2NrID0gdG9SZW5kZXJCbG9jayhwYXJlbnQoKSk7
CisgICAgCisgICAgTGF5b3V0VW5pdCBvbGRDb2x1bW5XaWR0aCA9IG1fY29sdW1uV2lkdGg7Cisg
ICAgCisgICAgLy8gQ2FsY3VsYXRlIG91ciBjb2x1bW4gd2lkdGggYW5kIGNvbHVtbiBjb3VudC4K
KyAgICAvLyBGSVhNRTogQ2FuIG92ZXJmbG93IG9uIGZhc3QvYmxvY2svZmxvYXQvZmxvYXQtbm90
LXJlbW92ZWQtZnJvbS1uZXh0LXNpYmxpbmc0Lmh0bWwsIHNlZSBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NDQKKyAgICBtX2NvbHVtbkNvdW50ID0gMTsKKyAgICBt
X2NvbHVtbldpZHRoID0gY29sdW1uQmxvY2stPmNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKKyAgICAK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29sdW1uU3R5bGUgPSBjb2x1bW5CbG9jay0+c3R5bGUo
KTsKKyAgICAKKyAgICBBU1NFUlQoIWNvbHVtblN0eWxlLmhhc0F1dG9Db2x1bW5Db3VudCgpIHx8
ICFjb2x1bW5TdHlsZS5oYXNBdXRvQ29sdW1uV2lkdGgoKSk7CisKKyAgICBMYXlvdXRVbml0IGF2
YWlsV2lkdGggPSBtX2NvbHVtbldpZHRoOworICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1u
QmxvY2stPmNvbHVtbkdhcCgpOworICAgIExheW91dFVuaXQgY29sV2lkdGggPSBzdGQ6Om1heDxM
YXlvdXRVbml0PigxLCBMYXlvdXRVbml0KGNvbHVtblN0eWxlLmNvbHVtbldpZHRoKCkpKTsKKyAg
ICBpbnQgY29sQ291bnQgPSBzdGQ6Om1heDxpbnQ+KDEsIGNvbHVtblN0eWxlLmNvbHVtbkNvdW50
KCkpOworCisgICAgaWYgKGNvbHVtblN0eWxlLmhhc0F1dG9Db2x1bW5XaWR0aCgpICYmICFjb2x1
bW5TdHlsZS5oYXNBdXRvQ29sdW1uQ291bnQoKSkgeworICAgICAgICBtX2NvbHVtbkNvdW50ID0g
Y29sQ291bnQ7CisgICAgICAgIG1fY29sdW1uV2lkdGggPSBzdGQ6Om1heDxMYXlvdXRVbml0Pigw
LCAoYXZhaWxXaWR0aCAtICgobV9jb2x1bW5Db3VudCAtIDEpICogY29sR2FwKSkgLyBtX2NvbHVt
bkNvdW50KTsKKyAgICB9IGVsc2UgaWYgKCFjb2x1bW5TdHlsZS5oYXNBdXRvQ29sdW1uV2lkdGgo
KSAmJiBjb2x1bW5TdHlsZS5oYXNBdXRvQ29sdW1uQ291bnQoKSkgeworICAgICAgICBtX2NvbHVt
bkNvdW50ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMSwgKGF2YWlsV2lkdGggKyBjb2xHYXApIC8g
KGNvbFdpZHRoICsgY29sR2FwKSk7CisgICAgICAgIG1fY29sdW1uV2lkdGggPSAoKGF2YWlsV2lk
dGggKyBjb2xHYXApIC8gbV9jb2x1bW5Db3VudCkgLSBjb2xHYXA7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgbV9jb2x1bW5Db3VudCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KHN0ZDo6bWluPExheW91
dFVuaXQ+KGNvbENvdW50LCAoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyAoY29sV2lkdGggKyBjb2xH
YXApKSwgMSk7CisgICAgICAgIG1fY29sdW1uV2lkdGggPSAoKGF2YWlsV2lkdGggKyBjb2xHYXAp
IC8gbV9jb2x1bW5Db3VudCkgLSBjb2xHYXA7CisgICAgfQorICAgIAorICAgIHJldHVybiBtX2Nv
bHVtbldpZHRoICE9IG9sZENvbHVtbldpZHRoOworfQorCiB2b2lkIFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZDo6YXV0b0dlbmVyYXRlUmVnaW9uc1RvQmxvY2tPZmZzZXQoTGF5b3V0VW5pdCAv
Km9mZnNldCovKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB3ZSBoYXZlIHRoZSBj
b3JyZWN0IGNvbHVtbiBzZXQgaW5mb3JtYXRpb24gYXQgYWxsIHRpbWVzLgpJbmRleDogU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJl
YWQuaAkocmV2aXNpb24gMTYyMzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiwxOSBA
QCBwdWJsaWM6CiAgICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkKERvY3VtZW50JiwgUGFz
c1JlZjxSZW5kZXJTdHlsZT4pOwogICAgIH5SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoKTsK
IAorICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCkgY29uc3QgeyByZXR1cm4gbV9jb2x1bW5Db3Vu
dDsgfQorICAgIExheW91dFVuaXQgY29sdW1uV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX2NvbHVt
bldpZHRoOyB9CisgICAgTGF5b3V0VW5pdCBjb2x1bW5IZWlnaHRBdmFpbGFibGUoKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtbkhlaWdodEF2YWlsYWJsZTsgfQorICAgIHZvaWQgc2V0Q29sdW1uSGVp
Z2h0QXZhaWxhYmxlKExheW91dFVuaXQgYXZhaWxhYmxlKSB7IG1fY29sdW1uSGVpZ2h0QXZhaWxh
YmxlID0gYXZhaWxhYmxlOyB9CisgICAgYm9vbCBpbkJhbGFuY2luZ1Bhc3MoKSBjb25zdCB7IHJl
dHVybiBtX2luQmFsYW5jaW5nUGFzczsgfQorICAgIHZvaWQgc2V0SW5CYWxhbmNpbmdQYXNzKGJv
b2wgYmFsYW5jaW5nKSB7IG1faW5CYWxhbmNpbmdQYXNzID0gYmFsYW5jaW5nOyB9CisgICAgCisg
ICAgYm9vbCBjb21wdXRlQ29sdW1uQ291bnRBbmRXaWR0aCgpOworICAgIAorICAgIGJvb2wgc2hv
dWxkUmVsYXlvdXRGb3JQYWdpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gIW1faW5CYWxhbmNpbmdQ
YXNzICYmIHJlcXVpcmVzQmFsYW5jaW5nKCk7IH0KKyAgICAKKyAgICBib29sIHJlcXVpcmVzQmFs
YW5jaW5nKCkgY29uc3QgeyByZXR1cm4gIWNvbHVtbkhlaWdodEF2YWlsYWJsZSgpIHx8IHBhcmVu
dCgpLT5zdHlsZSgpLmNvbHVtbkZpbGwoKSA9PSBDb2x1bW5GaWxsQmFsYW5jZTsgfQorCiBwcml2
YXRlOgogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IG92ZXJyaWRl
OwogICAgIHZpcnR1YWwgdm9pZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2lj
YWxIZWlnaHQsIExheW91dFVuaXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFs
dWVzJikgY29uc3Qgb3ZlcnJpZGU7CkBAIC00Myw2ICs1NiwxMyBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgTGF5b3V0VW5pdCBpbml0aWFsTG9naWNhbFdpZHRoKCkgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCB2b2lkIHNldFBhZ2VCcmVhayhjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVu
aXQgb2Zmc2V0LCBMYXlvdXRVbml0IHNwYWNlU2hvcnRhZ2UpIG92ZXJyaWRlOwogICAgIHZpcnR1
YWwgdm9pZCB1cGRhdGVNaW5pbXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJCbG9jayosIExheW91
dFVuaXQgb2Zmc2V0LCBMYXlvdXRVbml0IG1pbkhlaWdodCkgb3ZlcnJpZGU7CisgICAgCitwcml2
YXRlOgorICAgIHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7ICAgLy8gVGhlIGRlZmF1bHQgY29sdW1u
IGNvdW50L3dpZHRoIHRoYXQgYXJlIGJhc2VkIG9mZiBvdXIgY29udGFpbmluZyBibG9jayB3aWR0
aC4gVGhlc2UgdmFsdWVzIHJlcHJlc2VudCBvbmx5IHRoZSBkZWZhdWx0LAorICAgIExheW91dFVu
aXQgbV9jb2x1bW5XaWR0aDsgLy8gc2luY2UgYSBtdWx0aS1jb2x1bW4gYmxvY2sgdGhhdCBpcyBz
cGxpdCBhY3Jvc3MgdmFyaWFibGUgd2lkdGggcGFnZXMgb3IgcmVnaW9ucyB3aWxsIGhhdmUgZGlm
ZmVyZW50IGNvbHVtbiBjb3VudHMgYW5kIHdpZHRocyBpbiBlYWNoLgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gVGhlc2UgdmFsdWVzIHdpbGwgYmUgY2FjaGVkIChldmVudHVhbGx5
KSBmb3IgbXVsdGktY29sdW1uIGJsb2Nrcy4KKyAgICBMYXlvdXRVbml0IG1fY29sdW1uSGVpZ2h0
QXZhaWxhYmxlOyAvLyBUb3RhbCBoZWlnaHQgYXZhaWxhYmxlIHRvIGNvbHVtbnMsIG9yIDAgaWYg
YXV0by4KKyAgICBib29sIG1faW5CYWxhbmNpbmdQYXNzOyAvLyBTZXQgd2hlbiByZWxheW91dGlu
ZyBmb3IgY29sdW1uIGJhbGFuY2luZy4KIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uU2V0
LmNwcAkocmV2aXNpb24gMTYyMzY0KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ck11bHRpQ29sdW1uU2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMsNyArNzMsNyBAQCB2b2lk
IFJlbmRlck11bHRpQ29sdW1uU2V0OjpzZXRBbmRDb25zdHJhCiAKIGJvb2wgUmVuZGVyTXVsdGlD
b2x1bW5TZXQ6OmNhbGN1bGF0ZUJhbGFuY2VkSGVpZ2h0KGJvb2wgaW5pdGlhbCkKIHsKLSAgICBB
U1NFUlQodG9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrKHBhcmVudCgpKS0+cmVxdWlyZXNCYWxhbmNp
bmcoKSk7CisgICAgQVNTRVJUKHRvUmVuZGVyTXVsdGlDb2x1bW5CbG9jayhwYXJlbnQoKSktPm11
bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5yZXF1aXJlc0JhbGFuY2luZygpKTsKICAgICBMYXlvdXRV
bml0IG9sZENvbHVtbkhlaWdodCA9IG1fY29tcHV0ZWRDb2x1bW5IZWlnaHQ7CiAgICAgTGF5b3V0
VW5pdCBjdXJyZW50TWluU3BhY2VTaG9ydGFnZSA9IG1fbWluU3BhY2VTaG9ydGFnZTsKICAgICBt
X21pblNwYWNlU2hvcnRhZ2UgPSBMYXlvdXRVbml0OjptYXgoKTsKQEAgLTE1OCw3ICsxNTgsNyBA
QCB2b2lkIFJlbmRlck11bHRpQ29sdW1uU2V0OjpwcmVwYXJlRm9yTGF5CiAgICAgLy8gU2V0IGJv
eCB3aWR0aC4KICAgICB1cGRhdGVMb2dpY2FsV2lkdGgoKTsKIAotICAgIGlmIChtdWx0aWNvbEJs
b2NrLT5yZXF1aXJlc0JhbGFuY2luZygpKSB7CisgICAgaWYgKG11bHRpY29sQmxvY2stPm11bHRp
Q29sdW1uRmxvd1RocmVhZCgpLT5yZXF1aXJlc0JhbGFuY2luZygpKSB7CiAgICAgICAgIC8vIFNl
dCBtYXhpbXVtIGNvbHVtbiBoZWlnaHQuIFdlIHdpbGwgbm90IHN0cmV0Y2ggYmV5b25kIHRoaXMu
CiAgICAgICAgIG1fbWF4Q29sdW1uSGVpZ2h0ID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgICAg
IGlmICghbXVsdGljb2xTdHlsZS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkpCkBAIC0yMDIsNiAr
MjAyLDkgQEAgdW5zaWduZWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmNvbHVtbkNvdQogCiAgICAg
Ly8gT3VyIHBvcnRpb24gcmVjdCBkZXRlcm1pbmVzIG91ciBjb2x1bW4gY291bnQuIFdlIGhhdmUg
YXMgbWFueSBjb2x1bW5zIGFzIG5lZWRlZCB0byBmaXQgYWxsIHRoZSBjb250ZW50LgogICAgIExh
eW91dFVuaXQgbG9naWNhbEhlaWdodEluQ29sdW1ucyA9IGZsb3dUaHJlYWQoKS0+aXNIb3Jpem9u
dGFsV3JpdGluZ01vZGUoKSA/IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLmhlaWdodCgpIDogZmxv
d1RocmVhZFBvcnRpb25SZWN0KCkud2lkdGgoKTsKKyAgICBpZiAoIWxvZ2ljYWxIZWlnaHRJbkNv
bHVtbnMpCisgICAgICAgIHJldHVybiAxOworICAgIAogICAgIHVuc2lnbmVkIGNvdW50ID0gY2Vp
bChzdGF0aWNfY2FzdDxmbG9hdD4obG9naWNhbEhlaWdodEluQ29sdW1ucykgLyBjb21wdXRlZENv
bHVtbkhlaWdodCgpKTsKICAgICBBU1NFUlQoY291bnQgPj0gMSk7CiAgICAgcmV0dXJuIGNvdW50
Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>221783</attachid>
            <date>2014-01-21 13:40:18 -0800</date>
            <delta_ts>2014-01-24 09:20:42 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>23933</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY5IEBACisyMDE0LTAxLTIxICBEYXZpZCBI
eWF0dCAgPGh5YXR0QGFwcGxlLmNvbT4KKworICAgICAgICBbTmV3IE11bHRpY29sdW1uXSBUYWJs
ZSBjZWxscyBhbmQgbGlzdCBpdGVtcyBuZWVkIHRvIHdvcmsgYXMgbXVsdGljb2x1bW4gYmxvY2tz
LgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3MzY1
CisgICAgICAgIAorICAgICAgICBUaGlzIHBhdGNoIGlzIGEgZmlyc3Qgc3RlcCB0b3dhcmRzIGVs
aW1pbmF0aW5nIFJlbmRlck11bHRpQ29sdW1uQmxvY2sgYW5kIG1vdmluZworICAgICAgICBhbGwg
aXRzIGZ1bmN0aW9uYWxpdHkgaW50byBSZW5kZXJCbG9ja0Zsb3cuIERvaW5nIHNvIHdpbGwgYWxs
b3cgdGFibGUgY2VsbHMsIGxpc3QKKyAgICAgICAgaXRlbXMgYW5kIHRoZSBSZW5kZXJWaWV3IHRv
IHVzZSB0aGUgbmV3IG11bHRpLWNvbHVtbiBsYXlvdXQuCisgICAgICAgIAorICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9j
a0Zsb3cuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93OjpzZXRNdWx0aUNv
bHVtbkZsb3dUaHJlYWQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuaDoK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6UmVuZGVyQmxvY2tGbG93UmFyZURh
dGE6OlJlbmRlckJsb2NrRmxvd1JhcmVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJs
b2NrRmxvdzo6bXVsdGlDb2x1bW5GbG93VGhyZWFkKToKKyAgICAgICAgQWRkIHRoZSBmbG93IHRo
cmVhZCBwb2ludGVyIHRvIHRoZSBtdWx0aS1jb2x1bW4gZmxvdyB0aHJlYWQgdG8gUmVuZGVyQmxv
Y2tGbG93J3MKKyAgICAgICAgcmFyZSBkYXRhLiBUaGlzIGxldHMgdXMgdXNlIG9ubHkgb25lIHBv
aW50ZXIgaW4gdGhlIHJhcmUgZGF0YSB0byBwb2ludCB0byBhbiBvYmplY3QKKyAgICAgICAgdGhh
dCBjYW4gaG9sZCBhbGwgb2YgdGhlIHJlc3Qgb2YgdGhlIG11bHRpLWNvbHVtbiBpbmZvLgorCisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6UmVuZGVyTXVsdGlDb2x1bW5CbG9jayk6
CisgICAgICAgIE1vdmUgdGhlIGNvbnN0cnVjdGlvbiBvZiB0aGUgZmxvdyB0aHJlYWQgdG8gdGhl
IGNvbnN0cnVjdG9yLiBUaGlzIGVuc3VyZXMgd2UKKyAgICAgICAgbmV2ZXIgaGF2ZSBhIG51bGwg
ZmxvdyB0aHJlYWQgYW5kIGxldHMgdXMgYXZvaWQgaGF2aW5nIHRvIG51bGwgY2hlY2sgaXQgZm9y
CisgICAgICAgIGVtcHR5IG11bHRpLWNvbHVtbiBibG9ja3MuCisKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmNvbHVtbkhlaWdodEF2YWlsYWJsZSk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjb2x1bW5XaWR0aCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjb2x1bW5Db3VudCk6CisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjp1cGRhdGVMb2dpY2FsV2lkdGhBbmRD
b2x1bW5XaWR0aCk6CisgICAgICAgIFRoZSBhYm92ZSBmdW5jdGlvbnMgbm93IGNhbGwgdGhyb3Vn
aCB0byB0aGUgbXVsdGktY29sdW1uIGZsb3cgdGhyZWFkIGZvciByZXN1bHRzLgorCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjaGVja0ZvclBhZ2luYXRpb25Mb2dp
Y2FsSGVpZ2h0Q2hhbmdlKToKKyAgICAgICAgIFNldCB0aGUgY29sdW1uIGhlaWdodCBhdmFpbGFi
bGUgb24gdGhlIGZsb3cgdGhyZWFkLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNv
bHVtbkJsb2NrOjpyZWxheW91dEZvclBhZ2luYXRpb24pOgorICAgICAgICBUaGUgYmFsYW5jaW5n
IHBhc3MgYW5kIGd1YXJkIGlzIGluIHRoZSBtdWx0aS1jb2x1bW4gZmxvdyB0aHJlYWQgbm93Lgor
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjphZGRDaGlsZCk6Cisg
ICAgICAgIERvbid0IGhhdmUgdG8gY3JlYXRlIHRoZSBmbG93IHRocmVhZCBoZXJlIGFueSBsb25n
ZXIsIHNpbmNlIHdlIGRvIGl0IHVwIGZyb250CisgICAgICAgIGluIHRoZSBjb25zdHJ1Y3RvciBv
ZiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0
aUNvbHVtbkJsb2NrOjpsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZCk6CisgICAgICAgIERvbid0
IG5lZWQgdGhlIG51bGwgY2hlY2sgb2YgdGhlIGZsb3cgdGhyZWFkIGFueSBtb3JlLgorCisgICAg
ICAgICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suaDoKKyAgICAgICAgQ2hhbmdl
IHRoZSBpbmxpbmVkIGZ1bmN0aW9ucyB0byBub3QgYmUgaW5saW5lZCwgc2luY2UgdGhleSBuZWVk
IHRvIGNhbGwKKyAgICAgICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkIGZ1bmN0aW9ucyBu
b3cuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6UmVuZGVy
TXVsdGlDb2x1bW5GbG93VGhyZWFkKToKKyAgICAgICAgSW5pdCB0aGUgbmV3IG1lbWJlciB2YXJp
YWJsZXMgd2UgbW92ZWQgaGVyZSBmcm9tIFJlbmRlck11bHRpQ29sdW1uQmxvY2suCisKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6Y29tcHV0ZUNvbHVtbkNv
dW50QW5kV2lkdGgpOgorICAgICAgICBNb3ZlZCBmcm9tIFJlbmRlck11bHRpQ29sdW1uQmxvY2su
CisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmg6Cisg
ICAgICAgIEFkZCBwdWJsaWMgZ2V0dGVycy9zZXR0ZXJzIHRvIHRoZSBtZW1iZXIgdmFyaWFibGVz
IHNvIHRoYXQgUmVuZGVyTXVsdGlDb2x1bW5CbG9jayBjYW4KKyAgICAgICAgc3RpbGwgc2VlIHRo
ZW0uIE1vdmUgdGhlIG1lbWJlciB2YXJpYWJsZXMgaGVyZSBmcm9tIFJlbmRlck11bHRpQ29sdW1u
QmxvY2suCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmNhbGN1bGF0ZUJhbGFuY2Vk
SGVpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0OjpwcmVwYXJl
Rm9yTGF5b3V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uU2V0Ojpjb2x1
bW5Db3VudCk6CisgICAgICAgIENhbGwgdGhyb3VnaCB0byB0aGUgZmxvdyB0aHJlYWQgaW5zdGVh
ZC4KKwogMjAxNC0wMS0yMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE2MjQ1Mi4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9ja0Zsb3cuY3BwCShyZXZpc2lvbiAxNjI0
NjcpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjg5MCw2ICsyODkwLDEyIEBAIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpz
ZXRSZW5kZXJOYW1lZEZsb3cKICAgICByYXJlRGF0YS5tX3JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
ID0gZmxvd0ZyYWdtZW50OwogfQogCit2b2lkIFJlbmRlckJsb2NrRmxvdzo6c2V0TXVsdGlDb2x1
bW5GbG93VGhyZWFkKFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVhZCkKK3sK
KyAgICBSZW5kZXJCbG9ja0Zsb3dSYXJlRGF0YSYgcmFyZURhdGEgPSBlbnN1cmVSYXJlQmxvY2tG
bG93RGF0YSgpOworICAgIHJhcmVEYXRhLm1fbXVsdGlDb2x1bW5GbG93VGhyZWFkID0gZmxvd1Ro
cmVhZDsKK30KKwogc3RhdGljIGJvb2wgc2hvdWxkQ2hlY2tMaW5lcyhjb25zdCBSZW5kZXJCbG9j
a0Zsb3cmIGJsb2NrRmxvdykKIHsKICAgICByZXR1cm4gIWJsb2NrRmxvdy5pc0Zsb2F0aW5nT3JP
dXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgIWJsb2NrRmxvdy5pc1J1bkluKCkgJiYgYmxvY2tGbG93
LnN0eWxlKCkuaGVpZ2h0KCkuaXNBdXRvKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyQmxvY2tGbG93LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5oCShyZXZpc2lvbiAxNjI0NjcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDYgKzM1
LDcgQEAgY2xhc3MgTGF5b3V0U3RhdGVNYWludGFpbmVyOwogY2xhc3MgTGluZUJyZWFrZXI7CiBj
bGFzcyBMaW5lSW5mbzsKIGNsYXNzIExpbmVXaWR0aDsKK2NsYXNzIFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZDsKIGNsYXNzIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50OwogY2xhc3MgUmVuZGVy
UnVieVJ1bjsKIApAQCAtMTE3LDYgKzExOCw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIDogbV9t
YXJnaW5zKHBvc2l0aXZlTWFyZ2luQmVmb3JlRGVmYXVsdChibG9jayksIG5lZ2F0aXZlTWFyZ2lu
QmVmb3JlRGVmYXVsdChibG9jayksIHBvc2l0aXZlTWFyZ2luQWZ0ZXJEZWZhdWx0KGJsb2NrKSwg
bmVnYXRpdmVNYXJnaW5BZnRlckRlZmF1bHQoYmxvY2spKQogICAgICAgICAgICAgLCBtX2xpbmVC
cmVha1RvQXZvaWRXaWRvdygtMSkKICAgICAgICAgICAgICwgbV9yZW5kZXJOYW1lZEZsb3dGcmFn
bWVudChudWxscHRyKQorICAgICAgICAgICAgLCBtX211bHRpQ29sdW1uRmxvd1RocmVhZChudWxs
cHRyKQogICAgICAgICAgICAgLCBtX2Rpc2NhcmRNYXJnaW5CZWZvcmUoZmFsc2UpCiAgICAgICAg
ICAgICAsIG1fZGlzY2FyZE1hcmdpbkFmdGVyKGZhbHNlKQogICAgICAgICAgICAgLCBtX2RpZEJy
ZWFrQXRMaW5lVG9Bdm9pZFdpZG93KGZhbHNlKQpAQCAtMTQ5LDYgKzE1MSw4IEBAIHB1YmxpYzoK
ICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJvb3RJbmxpbmVCb3g+IG1fbGluZUdyaWRCb3g7CiAg
ICAgICAgIFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KiBtX3JlbmRlck5hbWVkRmxvd0ZyYWdtZW50
OwogCisgICAgICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogbV9tdWx0aUNvbHVtbkZs
b3dUaHJlYWQ7CisgICAgICAgIAogICAgICAgICBib29sIG1fZGlzY2FyZE1hcmdpbkJlZm9yZSA6
IDE7CiAgICAgICAgIGJvb2wgbV9kaXNjYXJkTWFyZ2luQWZ0ZXIgOiAxOwogICAgICAgICBib29s
IG1fZGlkQnJlYWtBdExpbmVUb0F2b2lkV2lkb3cgOiAxOwpAQCAtMjY5LDYgKzI3Myw5IEBAIHB1
YmxpYzoKICAgICBSZW5kZXJOYW1lZEZsb3dGcmFnbWVudCogcmVuZGVyTmFtZWRGbG93RnJhZ21l
bnQoKSBjb25zdCB7IHJldHVybiBoYXNSYXJlQmxvY2tGbG93RGF0YSgpID8gcmFyZUJsb2NrRmxv
d0RhdGEoKS0+bV9yZW5kZXJOYW1lZEZsb3dGcmFnbWVudCA6IG51bGxwdHI7IH0KICAgICB2b2lk
IHNldFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50KFJlbmRlck5hbWVkRmxvd0ZyYWdtZW50Kik7CiAK
KyAgICBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqIG11bHRpQ29sdW1uRmxvd1RocmVhZCgp
IGNvbnN0IHsgcmV0dXJuIGhhc1JhcmVCbG9ja0Zsb3dEYXRhKCkgPyByYXJlQmxvY2tGbG93RGF0
YSgpLT5tX211bHRpQ29sdW1uRmxvd1RocmVhZCA6IG51bGxwdHI7IH0KKyAgICB2b2lkIHNldE11
bHRpQ29sdW1uRmxvd1RocmVhZChSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQqKTsKKyAgICAK
ICAgICBib29sIGNvbnRhaW5zRmxvYXRzKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9mbG9h
dGluZ09iamVjdHMgJiYgIW1fZmxvYXRpbmdPYmplY3RzLT5zZXQoKS5pc0VtcHR5KCk7IH0KICAg
ICBib29sIGNvbnRhaW5zRmxvYXQoUmVuZGVyQm94JikgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHAJKHJl
dmlzaW9uIDE2MjQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtbkJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsMTcgKzMzLDM2IEBACiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIAotUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6UmVuZGVyTXVsdGlDb2x1
bW5CbG9jayhFbGVtZW50JiBlbGVtZW50LCBQYXNzUmVmPFJlbmRlclN0eWxlPiBzdHlsZSkKLSAg
ICA6IFJlbmRlckJsb2NrRmxvdyhlbGVtZW50LCBzdGQ6Om1vdmUoc3R5bGUpKQotICAgICwgbV9m
bG93VGhyZWFkKDApCi0gICAgLCBtX2NvbHVtbkNvdW50KDEpCi0gICAgLCBtX2NvbHVtbldpZHRo
KDApCi0gICAgLCBtX2NvbHVtbkhlaWdodEF2YWlsYWJsZSgwKQotICAgICwgbV9pbkJhbGFuY2lu
Z1Bhc3MoZmFsc2UpCi0gICAgLCBtX25lZWRzUmViYWxhbmNpbmcoZmFsc2UpCitSZW5kZXJNdWx0
aUNvbHVtbkJsb2NrOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKEVsZW1lbnQmIGVsZW1lbnQsIFBh
c3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlUHRyKQorICAgIDogUmVuZGVyQmxvY2tGbG93KGVsZW1l
bnQsIHN0ZDo6bW92ZShzdHlsZVB0cikpCiB7CisgICAgc2V0Q2hpbGRyZW5JbmxpbmUoZmFsc2Up
OworICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogZmxvd1RocmVhZCA9IG5ldyBSZW5k
ZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQoZG9jdW1lbnQoKSwgUmVuZGVyU3R5bGU6OmNyZWF0ZUFu
b255bW91c1N0eWxlV2l0aERpc3BsYXkoJnN0eWxlKCksIEJMT0NLKSk7CisgICAgZmxvd1RocmVh
ZC0+aW5pdGlhbGl6ZVN0eWxlKCk7CisgICAgUmVuZGVyQmxvY2tGbG93OjphZGRDaGlsZChmbG93
VGhyZWFkKTsKKyAgICBzZXRNdWx0aUNvbHVtbkZsb3dUaHJlYWQoZmxvd1RocmVhZCk7CiB9CiAK
K2Jvb2wgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6cmVxdWlyZXNCYWxhbmNpbmcoKSBjb25zdAor
eworICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+cmVxdWlyZXNCYWxhbmNpbmco
KTsKK30KKworTGF5b3V0VW5pdCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjb2x1bW5IZWlnaHRB
dmFpbGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+
Y29sdW1uSGVpZ2h0QXZhaWxhYmxlKCk7Cit9CisKK0xheW91dFVuaXQgUmVuZGVyTXVsdGlDb2x1
bW5CbG9jazo6Y29sdW1uV2lkdGgoKSBjb25zdAoreworICAgIHJldHVybiBtdWx0aUNvbHVtbkZs
b3dUaHJlYWQoKS0+Y29sdW1uV2lkdGgoKTsKK30KKwordW5zaWduZWQgUmVuZGVyTXVsdGlDb2x1
bW5CbG9jazo6Y29sdW1uQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBtdWx0aUNvbHVtbkZs
b3dUaHJlYWQoKS0+Y29sdW1uQ291bnQoKTsKK30KKyAgICAKIHZvaWQgUmVuZGVyTXVsdGlDb2x1
bW5CbG9jazo6c3R5bGVEaWRDaGFuZ2UoU3R5bGVEaWZmZXJlbmNlIGRpZmYsIGNvbnN0IFJlbmRl
clN0eWxlKiBvbGRTdHlsZSkKIHsKICAgICBSZW5kZXJCbG9ja0Zsb3c6OnN0eWxlRGlkQ2hhbmdl
KGRpZmYsIG9sZFN0eWxlKTsKQEAgLTUxLDM4ICs3MCwxMCBAQCB2b2lkIFJlbmRlck11bHRpQ29s
dW1uQmxvY2s6OnN0eWxlRGlkQ2hhCiAgICAgICAgIGNoaWxkLT5zZXRTdHlsZShSZW5kZXJTdHls
ZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgQkxPQ0spKTsKIH0K
IAotdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjb21wdXRlQ29sdW1uQ291bnRBbmRXaWR0
aCgpCi17Ci0gICAgLy8gQ2FsY3VsYXRlIG91ciBjb2x1bW4gd2lkdGggYW5kIGNvbHVtbiBjb3Vu
dC4KLSAgICAvLyBGSVhNRTogQ2FuIG92ZXJmbG93IG9uIGZhc3QvYmxvY2svZmxvYXQvZmxvYXQt
bm90LXJlbW92ZWQtZnJvbS1uZXh0LXNpYmxpbmc0Lmh0bWwsIHNlZSBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NDQKLSAgICBtX2NvbHVtbkNvdW50ID0gMTsKLSAg
ICBtX2NvbHVtbldpZHRoID0gY29udGVudExvZ2ljYWxXaWR0aCgpOwotICAgIAotICAgIEFTU0VS
VCghc3R5bGUoKS5oYXNBdXRvQ29sdW1uQ291bnQoKSB8fCAhc3R5bGUoKS5oYXNBdXRvQ29sdW1u
V2lkdGgoKSk7Ci0KLSAgICBMYXlvdXRVbml0IGF2YWlsV2lkdGggPSBtX2NvbHVtbldpZHRoOwot
ICAgIExheW91dFVuaXQgY29sR2FwID0gY29sdW1uR2FwKCk7Ci0gICAgTGF5b3V0VW5pdCBjb2xX
aWR0aCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+KDEsIExheW91dFVuaXQoc3R5bGUoKS5jb2x1bW5X
aWR0aCgpKSk7Ci0gICAgaW50IGNvbENvdW50ID0gc3RkOjptYXg8aW50PigxLCBzdHlsZSgpLmNv
bHVtbkNvdW50KCkpOwotCi0gICAgaWYgKHN0eWxlKCkuaGFzQXV0b0NvbHVtbldpZHRoKCkgJiYg
IXN0eWxlKCkuaGFzQXV0b0NvbHVtbkNvdW50KCkpIHsKLSAgICAgICAgbV9jb2x1bW5Db3VudCA9
IGNvbENvdW50OwotICAgICAgICBtX2NvbHVtbldpZHRoID0gc3RkOjptYXg8TGF5b3V0VW5pdD4o
MCwgKGF2YWlsV2lkdGggLSAoKG1fY29sdW1uQ291bnQgLSAxKSAqIGNvbEdhcCkpIC8gbV9jb2x1
bW5Db3VudCk7Ci0gICAgfSBlbHNlIGlmICghc3R5bGUoKS5oYXNBdXRvQ29sdW1uV2lkdGgoKSAm
JiBzdHlsZSgpLmhhc0F1dG9Db2x1bW5Db3VudCgpKSB7Ci0gICAgICAgIG1fY29sdW1uQ291bnQg
PSBzdGQ6Om1heDxMYXlvdXRVbml0PigxLCAoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyAoY29sV2lk
dGggKyBjb2xHYXApKTsKLSAgICAgICAgbV9jb2x1bW5XaWR0aCA9ICgoYXZhaWxXaWR0aCArIGNv
bEdhcCkgLyBtX2NvbHVtbkNvdW50KSAtIGNvbEdhcDsKLSAgICB9IGVsc2UgewotICAgICAgICBt
X2NvbHVtbkNvdW50ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oc3RkOjptaW48TGF5b3V0VW5pdD4o
Y29sQ291bnQsIChhdmFpbFdpZHRoICsgY29sR2FwKSAvIChjb2xXaWR0aCArIGNvbEdhcCkpLCAx
KTsKLSAgICAgICAgbV9jb2x1bW5XaWR0aCA9ICgoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyBtX2Nv
bHVtbkNvdW50KSAtIGNvbEdhcDsKLSAgICB9Ci19Ci0KIGJvb2wgUmVuZGVyTXVsdGlDb2x1bW5C
bG9jazo6dXBkYXRlTG9naWNhbFdpZHRoQW5kQ29sdW1uV2lkdGgoKQogewogICAgIGJvb2wgcmVs
YXlvdXRDaGlsZHJlbiA9IFJlbmRlckJsb2NrRmxvdzo6dXBkYXRlTG9naWNhbFdpZHRoQW5kQ29s
dW1uV2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IG9sZENvbHVtbldpZHRoID0gbV9jb2x1bW5XaWR0
aDsKLSAgICBjb21wdXRlQ29sdW1uQ291bnRBbmRXaWR0aCgpOwotICAgIGlmIChtX2NvbHVtbldp
ZHRoICE9IG9sZENvbHVtbldpZHRoKQorICAgIGlmIChtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+
Y29tcHV0ZUNvbHVtbkNvdW50QW5kV2lkdGgoKSkKICAgICAgICAgcmVsYXlvdXRDaGlsZHJlbiA9
IHRydWU7CiAgICAgcmV0dXJuIHJlbGF5b3V0Q2hpbGRyZW47CiB9CkBAIC05MSwxNiArODIsMTcg
QEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjaGVja0ZvclBhZwogewogICAgIC8vIFdl
IGRvbid0IGFjdHVhbGx5IHVwZGF0ZSBhbnkgb2YgdGhlIHZhcmlhYmxlcy4gV2UganVzdCBzdWJj
bGFzc2VkIHRvIGFkanVzdCBvdXIgY29sdW1uIGhlaWdodC4KICAgICB1cGRhdGVMb2dpY2FsSGVp
Z2h0KCk7Ci0gICAgbV9jb2x1bW5IZWlnaHRBdmFpbGFibGUgPSBzdGQ6Om1heDxMYXlvdXRVbml0
Pihjb250ZW50TG9naWNhbEhlaWdodCgpLCAwKTsKKyAgICBtdWx0aUNvbHVtbkZsb3dUaHJlYWQo
KS0+c2V0Q29sdW1uSGVpZ2h0QXZhaWxhYmxlKHN0ZDo6bWF4PExheW91dFVuaXQ+KGNvbnRlbnRM
b2dpY2FsSGVpZ2h0KCksIDApKTsKICAgICBzZXRMb2dpY2FsSGVpZ2h0KDApOwogfQogCiBib29s
IFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OnJlbGF5b3V0Rm9yUGFnaW5hdGlvbihib29sLCBMYXlv
dXRVbml0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImIHN0YXRlUHVzaGVyKQogewotICAgIGlmICht
X2luQmFsYW5jaW5nUGFzcyB8fCAhbV9uZWVkc1JlYmFsYW5jaW5nKQorICAgIGlmICghbXVsdGlD
b2x1bW5GbG93VGhyZWFkKCktPnNob3VsZFJlbGF5b3V0Rm9yUGFnaW5hdGlvbigpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgbV9uZWVkc1JlYmFsYW5jaW5nID0gZmFsc2U7Ci0gICAgbV9p
bkJhbGFuY2luZ1Bhc3MgPSB0cnVlOyAvLyBQcmV2ZW50IHJlLWVudGVyaW5nIHRoaXMgbWV0aG9k
IChhbmQgcmVjdXJzaW9uIGludG8gbGF5b3V0KS4KKyAgICAKKyAgICBtdWx0aUNvbHVtbkZsb3dU
aHJlYWQoKS0+c2V0TmVlZHNSZWJhbGFuY2luZyhmYWxzZSk7CisgICAgbXVsdGlDb2x1bW5GbG93
VGhyZWFkKCktPnNldEluQmFsYW5jaW5nUGFzcyh0cnVlKTsgLy8gUHJldmVudCByZS1lbnRlcmlu
ZyB0aGlzIG1ldGhvZCAoYW5kIHJlY3Vyc2lvbiBpbnRvIGxheW91dCkuCiAKICAgICBib29sIG5l
ZWRzUmVsYXlvdXQ7CiAgICAgYm9vbCBuZWVkZWRSZWxheW91dCA9IGZhbHNlOwpAQCAtMTEzLDcg
KzEwNSw3IEBAIGJvb2wgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6cmVsYXlvdXRGb3IKICAgICAg
ICAgLy8gY29sdW1ucywgdW5sZXNzIHdlIGhhdmUgYSBidWcuCiAgICAgICAgIG5lZWRzUmVsYXlv
dXQgPSBmYWxzZTsKICAgICAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkQm94ID0gZmlyc3RDaGls
ZEJveCgpOyBjaGlsZEJveDsgY2hpbGRCb3ggPSBjaGlsZEJveC0+bmV4dFNpYmxpbmdCb3goKSkK
LSAgICAgICAgICAgIGlmIChjaGlsZEJveCAhPSBtX2Zsb3dUaHJlYWQgJiYgY2hpbGRCb3gtPmlz
UmVuZGVyTXVsdGlDb2x1bW5TZXQoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkQm94ICE9IG11
bHRpQ29sdW1uRmxvd1RocmVhZCgpICYmIGNoaWxkQm94LT5pc1JlbmRlck11bHRpQ29sdW1uU2V0
KCkpIHsKICAgICAgICAgICAgICAgICBSZW5kZXJNdWx0aUNvbHVtblNldCogbXVsdGljb2xTZXQg
PSB0b1JlbmRlck11bHRpQ29sdW1uU2V0KGNoaWxkQm94KTsKICAgICAgICAgICAgICAgICBpZiAo
bXVsdGljb2xTZXQtPnJlY2FsY3VsYXRlQmFsYW5jZWRIZWlnaHQoZmlyc3RQYXNzKSkgewogICAg
ICAgICAgICAgICAgICAgICBtdWx0aWNvbFNldC0+c2V0Q2hpbGROZWVkc0xheW91dChNYXJrT25s
eVRoaXMpOwpAQCAtMTI0LDcgKzExNiw3IEBAIGJvb2wgUmVuZGVyTXVsdGlDb2x1bW5CbG9jazo6
cmVsYXlvdXRGb3IKICAgICAgICAgaWYgKG5lZWRzUmVsYXlvdXQpIHsKICAgICAgICAgICAgIC8v
IExheW91dCBhZ2Fpbi4gQ29sdW1uIGJhbGFuY2luZyByZXN1bHRlZCBpbiBhIG5ldyBoZWlnaHQu
CiAgICAgICAgICAgICBuZWVkZWRSZWxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICBtX2Zsb3dU
aHJlYWQtPnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgICAgIG11
bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5zZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7
CiAgICAgICAgICAgICBzZXRDaGlsZE5lZWRzTGF5b3V0KE1hcmtPbmx5VGhpcyk7CiAgICAgICAg
ICAgICBpZiAoZmlyc3RQYXNzKQogICAgICAgICAgICAgICAgIHN0YXRlUHVzaGVyLnBvcCgpOwpA
QCAtMTMyLDQ3ICsxMjQsNDEgQEAgYm9vbCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpyZWxheW91
dEZvcgogICAgICAgICB9CiAgICAgICAgIGZpcnN0UGFzcyA9IGZhbHNlOwogICAgIH0gd2hpbGUg
KG5lZWRzUmVsYXlvdXQpOwotICAgIG1faW5CYWxhbmNpbmdQYXNzID0gZmFsc2U7CisgICAgCisg
ICAgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPnNldEluQmFsYW5jaW5nUGFzcyhmYWxzZSk7Cisg
ICAgCiAgICAgcmV0dXJuIG5lZWRlZFJlbGF5b3V0OwogfQogCiB2b2lkIFJlbmRlck11bHRpQ29s
dW1uQmxvY2s6OmFkZENoaWxkKFJlbmRlck9iamVjdCogbmV3Q2hpbGQsIFJlbmRlck9iamVjdCog
YmVmb3JlQ2hpbGQpCiB7Ci0gICAgaWYgKCFtX2Zsb3dUaHJlYWQpIHsKLSAgICAgICAgbV9mbG93
VGhyZWFkID0gbmV3IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZChkb2N1bWVudCgpLCBSZW5k
ZXJTdHlsZTo6Y3JlYXRlQW5vbnltb3VzU3R5bGVXaXRoRGlzcGxheSgmc3R5bGUoKSwgQkxPQ0sp
KTsKLSAgICAgICAgbV9mbG93VGhyZWFkLT5pbml0aWFsaXplU3R5bGUoKTsKLSAgICAgICAgUmVu
ZGVyQmxvY2tGbG93OjphZGRDaGlsZChtX2Zsb3dUaHJlYWQpOwotICAgIH0KLSAgICBtX2Zsb3dU
aHJlYWQtPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CisgICAgbXVsdGlDb2x1bW5G
bG93VGhyZWFkKCktPmFkZENoaWxkKG5ld0NoaWxkLCBiZWZvcmVDaGlsZCk7CiB9CiAgICAgCiBS
ZW5kZXJPYmplY3QqIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OmxheW91dFNwZWNpYWxFeGNsdWRl
ZENoaWxkKGJvb2wgcmVsYXlvdXRDaGlsZHJlbikKIHsKLSAgICBpZiAoIW1fZmxvd1RocmVhZCkK
LSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCiAgICAgLy8gVXBkYXRlIHRoZSBkaW1lbnNpb25zIG9m
IG91ciByZWdpb25zIGJlZm9yZSB3ZSBsYXkgb3V0IHRoZSBmbG93IHRocmVhZC4KICAgICAvLyBG
SVhNRTogRXZlbnR1YWxseSB0aGlzIGlzIGdvaW5nIHRvIGdldCB3YXkgbW9yZSBjb21wbGljYXRl
ZCwgYW5kIHdlIHdpbGwgYmUgZGVzdHJveWluZyByZWdpb25zCiAgICAgLy8gaW5zdGVhZCBvZiB0
cnlpbmcgdG8ga2VlcCB0aGVtIGFyb3VuZC4KICAgICBib29sIHNob3VsZEludmFsaWRhdGVSZWdp
b25zID0gZmFsc2U7CiAgICAgZm9yIChSZW5kZXJCb3gqIGNoaWxkQm94ID0gZmlyc3RDaGlsZEJv
eCgpOyBjaGlsZEJveDsgY2hpbGRCb3ggPSBjaGlsZEJveC0+bmV4dFNpYmxpbmdCb3goKSkgewot
ICAgICAgICBpZiAoY2hpbGRCb3ggPT0gbV9mbG93VGhyZWFkKQorICAgICAgICBpZiAoY2hpbGRC
b3ggPT0gbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAog
ICAgICAgICBpZiAocmVsYXlvdXRDaGlsZHJlbiB8fCBjaGlsZEJveC0+bmVlZHNMYXlvdXQoKSkg
ewotICAgICAgICAgICAgaWYgKCFtX2luQmFsYW5jaW5nUGFzcyAmJiBjaGlsZEJveC0+aXNSZW5k
ZXJNdWx0aUNvbHVtblNldCgpKQorICAgICAgICAgICAgaWYgKCFtdWx0aUNvbHVtbkZsb3dUaHJl
YWQoKS0+aW5CYWxhbmNpbmdQYXNzKCkgJiYgY2hpbGRCb3gtPmlzUmVuZGVyTXVsdGlDb2x1bW5T
ZXQoKSkKICAgICAgICAgICAgICAgICB0b1JlbmRlck11bHRpQ29sdW1uU2V0KGNoaWxkQm94KS0+
cHJlcGFyZUZvckxheW91dCgpOwogICAgICAgICAgICAgc2hvdWxkSW52YWxpZGF0ZVJlZ2lvbnMg
PSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGlmIChzaG91bGRJbnZhbGlkYXRl
UmVnaW9ucykKLSAgICAgICAgbV9mbG93VGhyZWFkLT5pbnZhbGlkYXRlUmVnaW9ucygpOworICAg
ICAgICBtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+aW52YWxpZGF0ZVJlZ2lvbnMoKTsKIAogICAg
IGlmIChyZWxheW91dENoaWxkcmVuKQotICAgICAgICBtX2Zsb3dUaHJlYWQtPnNldENoaWxkTmVl
ZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKKyAgICAgICAgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCkt
PnNldENoaWxkTmVlZHNMYXlvdXQoTWFya09ubHlUaGlzKTsKICAgICAKLSAgICBpZiAocmVxdWly
ZXNCYWxhbmNpbmcoKSkgeworICAgIGlmIChtdWx0aUNvbHVtbkZsb3dUaHJlYWQoKS0+cmVxdWly
ZXNCYWxhbmNpbmcoKSkgewogICAgICAgICAvLyBBdCB0aGUgZW5kIG9mIG11bHRpY29sIGxheW91
dCwgcmVsYXlvdXRGb3JQYWdpbmF0aW9uKCkgaXMgY2FsbGVkIHVuY29uZGl0aW9uYWxseSwgYnV0
IGlmCiAgICAgICAgIC8vIG5vIGNoaWxkcmVuIGFyZSB0byBiZSBsYWlkIG91dCAoZS5nLiBmaXhl
ZCB3aWR0aCB3aXRoIGxheW91dCBhbHJlYWR5IGJlaW5nIHVwLXRvLWRhdGUpLAogICAgICAgICAv
LyB3ZSB3YW50IHRvIHByZXZlbnQgaXQgZnJvbSBkb2luZyBhbnkgd29yaywgc28gdGhhdCB0aGUg
Y29sdW1uIGJhbGFuY2luZyBtYWNoaW5lcnkgZG9lc24ndApAQCAtMTgxLDE0ICsxNjcsMTQgQEAg
UmVuZGVyT2JqZWN0KiBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpsYQogICAgICAgICAvLyBhcmUg
YWN0dWFsbHkgcmVxdWlyZWQgdG8gZ3VhcmFudGVlIHRoaXMuIFRoZSBjYWxjdWxhdGlvbiBvZiBp
bXBsaWNpdCBicmVha3MgbmVlZHMgdG8gYmUKICAgICAgICAgLy8gcHJlY2VkZWQgYnkgYSBwcm9w
ZXIgbGF5b3V0IHBhc3MsIHNpbmNlIGl0J3MgbGF5b3V0IHRoYXQgc2V0cyB1cCBjb250ZW50IHJ1
bnMsIGFuZCB0aGUKICAgICAgICAgLy8gcnVucyBnZXQgZGVsZXRlZCByaWdodCBhZnRlciBldmVy
eSBwYXNzLgotICAgICAgICBtX25lZWRzUmViYWxhbmNpbmcgPSBzaG91bGRJbnZhbGlkYXRlUmVn
aW9ucyB8fCBtX2Zsb3dUaHJlYWQtPm5lZWRzTGF5b3V0KCk7CisgICAgICAgIG11bHRpQ29sdW1u
Rmxvd1RocmVhZCgpLT5zZXROZWVkc1JlYmFsYW5jaW5nKHNob3VsZEludmFsaWRhdGVSZWdpb25z
IHx8IG11bHRpQ29sdW1uRmxvd1RocmVhZCgpLT5uZWVkc0xheW91dCgpKTsKICAgICB9CiAKLSAg
ICBzZXRMb2dpY2FsVG9wRm9yQ2hpbGQoKm1fZmxvd1RocmVhZCwgYm9yZGVyQW5kUGFkZGluZ0Jl
Zm9yZSgpKTsKLSAgICBtX2Zsb3dUaHJlYWQtPmxheW91dElmTmVlZGVkKCk7Ci0gICAgZGV0ZXJt
aW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKCptX2Zsb3dUaHJlYWQpOworICAgIHNldExv
Z2ljYWxUb3BGb3JDaGlsZCgqbXVsdGlDb2x1bW5GbG93VGhyZWFkKCksIGJvcmRlckFuZFBhZGRp
bmdCZWZvcmUoKSk7CisgICAgbXVsdGlDb2x1bW5GbG93VGhyZWFkKCktPmxheW91dElmTmVlZGVk
KCk7CisgICAgZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKCptdWx0aUNvbHVt
bkZsb3dUaHJlYWQoKSk7CiAgICAgCi0gICAgcmV0dXJuIG1fZmxvd1RocmVhZDsKKyAgICByZXR1
cm4gbXVsdGlDb2x1bW5GbG93VGhyZWFkKCk7CiB9CiAKIGNvbnN0IGNoYXIqIFJlbmRlck11bHRp
Q29sdW1uQmxvY2s6OnJlbmRlck5hbWUoKSBjb25zdApJbmRleDogU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oCShyZXZpc2lvbiAxNjI0Njcp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zOCwxNSArMzgsMTMgQEAgcHVibGljOgogICAgIFJlbmRlck11bHRp
Q29sdW1uQmxvY2soRWxlbWVudCYsIFBhc3NSZWY8UmVuZGVyU3R5bGU+KTsKICAgICBFbGVtZW50
JiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gdG9FbGVtZW50KG5vZGVGb3JOb25Bbm9ueW1vdXMo
KSk7IH0KIAotICAgIExheW91dFVuaXQgY29sdW1uSGVpZ2h0QXZhaWxhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9jb2x1bW5IZWlnaHRBdmFpbGFibGU7IH0KKyAgICBMYXlvdXRVbml0IGNvbHVtbkhl
aWdodEF2YWlsYWJsZSgpIGNvbnN0OwogCi0gICAgTGF5b3V0VW5pdCBjb2x1bW5XaWR0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fY29sdW1uV2lkdGg7IH0KLSAgICB1bnNpZ25lZCBjb2x1bW5Db3VudCgp
IGNvbnN0IHsgcmV0dXJuIG1fY29sdW1uQ291bnQ7IH0KLQotICAgIFJlbmRlck11bHRpQ29sdW1u
Rmxvd1RocmVhZCogZmxvd1RocmVhZCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxvd1RocmVhZDsgfQot
Ci0gICAgYm9vbCByZXF1aXJlc0JhbGFuY2luZygpIGNvbnN0IHsgcmV0dXJuICFtX2NvbHVtbkhl
aWdodEF2YWlsYWJsZSB8fCBzdHlsZSgpLmNvbHVtbkZpbGwoKSA9PSBDb2x1bW5GaWxsQmFsYW5j
ZTsgfQorICAgIExheW91dFVuaXQgY29sdW1uV2lkdGgoKSBjb25zdDsKKyAgICB1bnNpZ25lZCBj
b2x1bW5Db3VudCgpIGNvbnN0OwogCisgICAgYm9vbCByZXF1aXJlc0JhbGFuY2luZygpIGNvbnN0
OworICAgIAogcHJpdmF0ZToKICAgICB2aXJ0dWFsIGJvb2wgaXNSZW5kZXJNdWx0aUNvbHVtbkJs
b2NrKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHZpcnR1YWwgY29uc3QgY2hhciogcmVu
ZGVyTmFtZSgpIGNvbnN0OwpAQCAtNjQsMTQgKzYyLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNv
bXB1dGVDb2x1bW5Db3VudEFuZFdpZHRoKCk7CiAKICAgICB2b2lkIGVuc3VyZUNvbHVtblNldHMo
KTsKLQotICAgIFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCogbV9mbG93VGhyZWFkOwotICAg
IHVuc2lnbmVkIG1fY29sdW1uQ291bnQ7ICAgLy8gVGhlIGRlZmF1bHQgY29sdW1uIGNvdW50L3dp
ZHRoIHRoYXQgYXJlIGJhc2VkIG9mZiBvdXIgY29udGFpbmluZyBibG9jayB3aWR0aC4gVGhlc2Ug
dmFsdWVzIHJlcHJlc2VudCBvbmx5IHRoZSBkZWZhdWx0LAotICAgIExheW91dFVuaXQgbV9jb2x1
bW5XaWR0aDsgLy8gc2luY2UgYSBtdWx0aS1jb2x1bW4gYmxvY2sgdGhhdCBpcyBzcGxpdCBhY3Jv
c3MgdmFyaWFibGUgd2lkdGggcGFnZXMgb3IgcmVnaW9ucyB3aWxsIGhhdmUgZGlmZmVyZW50IGNv
bHVtbiBjb3VudHMgYW5kIHdpZHRocyBpbiBlYWNoLgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhlc2UgdmFsdWVzIHdpbGwgYmUgY2FjaGVkIChldmVudHVhbGx5KSBmb3IgbXVs
dGktY29sdW1uIGJsb2Nrcy4KLSAgICBMYXlvdXRVbml0IG1fY29sdW1uSGVpZ2h0QXZhaWxhYmxl
OyAvLyBUb3RhbCBoZWlnaHQgYXZhaWxhYmxlIHRvIGNvbHVtbnMsIG9yIDAgaWYgYXV0by4KLSAg
ICBib29sIG1faW5CYWxhbmNpbmdQYXNzOyAvLyBTZXQgd2hlbiByZWxheW91dGluZyBmb3IgY29s
dW1uIGJhbGFuY2luZy4KLSAgICBib29sIG1fbmVlZHNSZWJhbGFuY2luZzsKIH07CiAKIFJFTkRF
Ul9PQkpFQ1RfVFlQRV9DQVNUUyhSZW5kZXJNdWx0aUNvbHVtbkJsb2NrLCBpc1JlbmRlck11bHRp
Q29sdW1uQmxvY2soKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuY3BwCShyZXZpc2lvbiAxNjI0NjcpCisr
KyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsMTEgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OlJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVh
ZChEb2N1bWVudCYgZG9jdW1lbnQsIFBhc3NSZWY8UmVuZGVyU3R5bGU+IHN0eWxlKQogICAgIDog
UmVuZGVyRmxvd1RocmVhZChkb2N1bWVudCwgc3RkOjptb3ZlKHN0eWxlKSkKKyAgICAsIG1fY29s
dW1uQ291bnQoMSkKKyAgICAsIG1fY29sdW1uV2lkdGgoMCkKKyAgICAsIG1fY29sdW1uSGVpZ2h0
QXZhaWxhYmxlKDApCisgICAgLCBtX2luQmFsYW5jaW5nUGFzcyhmYWxzZSkKKyAgICAsIG1fbmVl
ZHNSZWJhbGFuY2luZyhmYWxzZSkKIHsKICAgICBzZXRGbG93VGhyZWFkU3RhdGUoSW5zaWRlSW5G
bG93VGhyZWFkKTsKIH0KQEAgLTU5LDYgKzY0LDQwIEBAIExheW91dFVuaXQgUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkOjoKICAgICByZXR1cm4gcGFyZW50QmxvY2stPmNvbHVtbldpZHRoKCk7
CiB9CiAKK2Jvb2wgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpjb21wdXRlQ29sdW1uQ291
bnRBbmRXaWR0aCgpCit7CisgICAgUmVuZGVyQmxvY2sqIGNvbHVtbkJsb2NrID0gdG9SZW5kZXJC
bG9jayhwYXJlbnQoKSk7CisgICAgCisgICAgTGF5b3V0VW5pdCBvbGRDb2x1bW5XaWR0aCA9IG1f
Y29sdW1uV2lkdGg7CisgICAgCisgICAgLy8gQ2FsY3VsYXRlIG91ciBjb2x1bW4gd2lkdGggYW5k
IGNvbHVtbiBjb3VudC4KKyAgICAvLyBGSVhNRTogQ2FuIG92ZXJmbG93IG9uIGZhc3QvYmxvY2sv
ZmxvYXQvZmxvYXQtbm90LXJlbW92ZWQtZnJvbS1uZXh0LXNpYmxpbmc0Lmh0bWwsIHNlZSBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Njg3NDQKKyAgICBtX2NvbHVtbkNv
dW50ID0gMTsKKyAgICBtX2NvbHVtbldpZHRoID0gY29sdW1uQmxvY2stPmNvbnRlbnRMb2dpY2Fs
V2lkdGgoKTsKKyAgICAKKyAgICBjb25zdCBSZW5kZXJTdHlsZSYgY29sdW1uU3R5bGUgPSBjb2x1
bW5CbG9jay0+c3R5bGUoKTsKKyAgICAKKyAgICBBU1NFUlQoIWNvbHVtblN0eWxlLmhhc0F1dG9D
b2x1bW5Db3VudCgpIHx8ICFjb2x1bW5TdHlsZS5oYXNBdXRvQ29sdW1uV2lkdGgoKSk7CisKKyAg
ICBMYXlvdXRVbml0IGF2YWlsV2lkdGggPSBtX2NvbHVtbldpZHRoOworICAgIExheW91dFVuaXQg
Y29sR2FwID0gY29sdW1uQmxvY2stPmNvbHVtbkdhcCgpOworICAgIExheW91dFVuaXQgY29sV2lk
dGggPSBzdGQ6Om1heDxMYXlvdXRVbml0PigxLCBMYXlvdXRVbml0KGNvbHVtblN0eWxlLmNvbHVt
bldpZHRoKCkpKTsKKyAgICBpbnQgY29sQ291bnQgPSBzdGQ6Om1heDxpbnQ+KDEsIGNvbHVtblN0
eWxlLmNvbHVtbkNvdW50KCkpOworCisgICAgaWYgKGNvbHVtblN0eWxlLmhhc0F1dG9Db2x1bW5X
aWR0aCgpICYmICFjb2x1bW5TdHlsZS5oYXNBdXRvQ29sdW1uQ291bnQoKSkgeworICAgICAgICBt
X2NvbHVtbkNvdW50ID0gY29sQ291bnQ7CisgICAgICAgIG1fY29sdW1uV2lkdGggPSBzdGQ6Om1h
eDxMYXlvdXRVbml0PigwLCAoYXZhaWxXaWR0aCAtICgobV9jb2x1bW5Db3VudCAtIDEpICogY29s
R2FwKSkgLyBtX2NvbHVtbkNvdW50KTsKKyAgICB9IGVsc2UgaWYgKCFjb2x1bW5TdHlsZS5oYXNB
dXRvQ29sdW1uV2lkdGgoKSAmJiBjb2x1bW5TdHlsZS5oYXNBdXRvQ29sdW1uQ291bnQoKSkgewor
ICAgICAgICBtX2NvbHVtbkNvdW50ID0gc3RkOjptYXg8TGF5b3V0VW5pdD4oMSwgKGF2YWlsV2lk
dGggKyBjb2xHYXApIC8gKGNvbFdpZHRoICsgY29sR2FwKSk7CisgICAgICAgIG1fY29sdW1uV2lk
dGggPSAoKGF2YWlsV2lkdGggKyBjb2xHYXApIC8gbV9jb2x1bW5Db3VudCkgLSBjb2xHYXA7Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9jb2x1bW5Db3VudCA9IHN0ZDo6bWF4PExheW91dFVuaXQ+
KHN0ZDo6bWluPExheW91dFVuaXQ+KGNvbENvdW50LCAoYXZhaWxXaWR0aCArIGNvbEdhcCkgLyAo
Y29sV2lkdGggKyBjb2xHYXApKSwgMSk7CisgICAgICAgIG1fY29sdW1uV2lkdGggPSAoKGF2YWls
V2lkdGggKyBjb2xHYXApIC8gbV9jb2x1bW5Db3VudCkgLSBjb2xHYXA7CisgICAgfQorICAgIAor
ICAgIHJldHVybiBtX2NvbHVtbldpZHRoICE9IG9sZENvbHVtbldpZHRoOworfQorCiB2b2lkIFJl
bmRlck11bHRpQ29sdW1uRmxvd1RocmVhZDo6YXV0b0dlbmVyYXRlUmVnaW9uc1RvQmxvY2tPZmZz
ZXQoTGF5b3V0VW5pdCAvKm9mZnNldCovKQogewogICAgIC8vIFRoaXMgZnVuY3Rpb24gZW5zdXJl
cyB3ZSBoYXZlIHRoZSBjb3JyZWN0IGNvbHVtbiBzZXQgaW5mb3JtYXRpb24gYXQgYWxsIHRpbWVz
LgpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1Ro
cmVhZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQuaAkocmV2aXNpb24gMTYyNDY3KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiwyMSBAQCBwdWJsaWM6CiAgICAgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFk
KERvY3VtZW50JiwgUGFzc1JlZjxSZW5kZXJTdHlsZT4pOwogICAgIH5SZW5kZXJNdWx0aUNvbHVt
bkZsb3dUaHJlYWQoKTsKIAorICAgIHVuc2lnbmVkIGNvbHVtbkNvdW50KCkgY29uc3QgeyByZXR1
cm4gbV9jb2x1bW5Db3VudDsgfQorICAgIExheW91dFVuaXQgY29sdW1uV2lkdGgoKSBjb25zdCB7
IHJldHVybiBtX2NvbHVtbldpZHRoOyB9CisgICAgTGF5b3V0VW5pdCBjb2x1bW5IZWlnaHRBdmFp
bGFibGUoKSBjb25zdCB7IHJldHVybiBtX2NvbHVtbkhlaWdodEF2YWlsYWJsZTsgfQorICAgIHZv
aWQgc2V0Q29sdW1uSGVpZ2h0QXZhaWxhYmxlKExheW91dFVuaXQgYXZhaWxhYmxlKSB7IG1fY29s
dW1uSGVpZ2h0QXZhaWxhYmxlID0gYXZhaWxhYmxlOyB9CisgICAgYm9vbCBpbkJhbGFuY2luZ1Bh
c3MoKSBjb25zdCB7IHJldHVybiBtX2luQmFsYW5jaW5nUGFzczsgfQorICAgIHZvaWQgc2V0SW5C
YWxhbmNpbmdQYXNzKGJvb2wgYmFsYW5jaW5nKSB7IG1faW5CYWxhbmNpbmdQYXNzID0gYmFsYW5j
aW5nOyB9CisgICAgYm9vbCBuZWVkc1JlYmFsYW5jaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZWVk
c1JlYmFsYW5jaW5nOyB9CisgICAgdm9pZCBzZXROZWVkc1JlYmFsYW5jaW5nKGJvb2wgYmFsYW5j
aW5nKSB7IG1fbmVlZHNSZWJhbGFuY2luZyA9IGJhbGFuY2luZzsgfQorCisgICAgYm9vbCBjb21w
dXRlQ29sdW1uQ291bnRBbmRXaWR0aCgpOworICAgIAorICAgIGJvb2wgc2hvdWxkUmVsYXlvdXRG
b3JQYWdpbmF0aW9uKCkgY29uc3QgeyByZXR1cm4gIW1faW5CYWxhbmNpbmdQYXNzICYmIG1fbmVl
ZHNSZWJhbGFuY2luZzsgfQorICAgIAorICAgIGJvb2wgcmVxdWlyZXNCYWxhbmNpbmcoKSBjb25z
dCB7IHJldHVybiAhY29sdW1uSGVpZ2h0QXZhaWxhYmxlKCkgfHwgcGFyZW50KCktPnN0eWxlKCku
Y29sdW1uRmlsbCgpID09IENvbHVtbkZpbGxCYWxhbmNlOyB9CisKIHByaXZhdGU6CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdmlydHVh
bCB2b2lkIGNvbXB1dGVMb2dpY2FsSGVpZ2h0KExheW91dFVuaXQgbG9naWNhbEhlaWdodCwgTGF5
b3V0VW5pdCBsb2dpY2FsVG9wLCBMb2dpY2FsRXh0ZW50Q29tcHV0ZWRWYWx1ZXMmKSBjb25zdCBv
dmVycmlkZTsKQEAgLTQ0LDYgKzU5LDE0IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIHNl
dFBhZ2VCcmVhayhjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVuaXQgb2Zmc2V0LCBMYXlvdXRV
bml0IHNwYWNlU2hvcnRhZ2UpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVNaW5p
bXVtUGFnZUhlaWdodChjb25zdCBSZW5kZXJCbG9jayosIExheW91dFVuaXQgb2Zmc2V0LCBMYXlv
dXRVbml0IG1pbkhlaWdodCkgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCBib29sIGFkZEZvcmNlZFJl
Z2lvbkJyZWFrKGNvbnN0IFJlbmRlckJsb2NrKiwgTGF5b3V0VW5pdCwgUmVuZGVyQm94KiBicmVh
a0NoaWxkLCBib29sIGlzQmVmb3JlLCBMYXlvdXRVbml0KiBvZmZzZXRCcmVha0FkanVzdG1lbnQg
PSAwKSBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAgICB1bnNpZ25lZCBtX2NvbHVtbkNvdW50OyAg
IC8vIFRoZSBkZWZhdWx0IGNvbHVtbiBjb3VudC93aWR0aCB0aGF0IGFyZSBiYXNlZCBvZmYgb3Vy
IGNvbnRhaW5pbmcgYmxvY2sgd2lkdGguIFRoZXNlIHZhbHVlcyByZXByZXNlbnQgb25seSB0aGUg
ZGVmYXVsdCwKKyAgICBMYXlvdXRVbml0IG1fY29sdW1uV2lkdGg7IC8vIHNpbmNlIGEgbXVsdGkt
Y29sdW1uIGJsb2NrIHRoYXQgaXMgc3BsaXQgYWNyb3NzIHZhcmlhYmxlIHdpZHRoIHBhZ2VzIG9y
IHJlZ2lvbnMgd2lsbCBoYXZlIGRpZmZlcmVudCBjb2x1bW4gY291bnRzIGFuZCB3aWR0aHMgaW4g
ZWFjaC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIHZhbHVlcyB3aWxs
IGJlIGNhY2hlZCAoZXZlbnR1YWxseSkgZm9yIG11bHRpLWNvbHVtbiBibG9ja3MuCisgICAgTGF5
b3V0VW5pdCBtX2NvbHVtbkhlaWdodEF2YWlsYWJsZTsgLy8gVG90YWwgaGVpZ2h0IGF2YWlsYWJs
ZSB0byBjb2x1bW5zLCBvciAwIGlmIGF1dG8uCisgICAgYm9vbCBtX2luQmFsYW5jaW5nUGFzczsg
Ly8gU2V0IHdoZW4gcmVsYXlvdXRpbmcgZm9yIGNvbHVtbiBiYWxhbmNpbmcuCisgICAgYm9vbCBt
X25lZWRzUmViYWxhbmNpbmc7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNldC5jcHAJ
KHJldmlzaW9uIDE2MjQ2NykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMiw3ICsyMzIsNyBAQCB2b2lkIFJl
bmRlck11bHRpQ29sdW1uU2V0OjpwcmVwYXJlRm9yTGF5CiAgICAgLy8gU2V0IGJveCB3aWR0aC4K
ICAgICB1cGRhdGVMb2dpY2FsV2lkdGgoKTsKIAotICAgIGlmIChtdWx0aWNvbEJsb2NrLT5yZXF1
aXJlc0JhbGFuY2luZygpKSB7CisgICAgaWYgKG11bHRpY29sQmxvY2stPm11bHRpQ29sdW1uRmxv
d1RocmVhZCgpLT5yZXF1aXJlc0JhbGFuY2luZygpKSB7CiAgICAgICAgIC8vIFNldCBtYXhpbXVt
IGNvbHVtbiBoZWlnaHQuIFdlIHdpbGwgbm90IHN0cmV0Y2ggYmV5b25kIHRoaXMuCiAgICAgICAg
IG1fbWF4Q29sdW1uSGVpZ2h0ID0gTGF5b3V0VW5pdDo6bWF4KCk7CiAgICAgICAgIGlmICghbXVs
dGljb2xTdHlsZS5sb2dpY2FsSGVpZ2h0KCkuaXNBdXRvKCkpCkBAIC0yNzgsNiArMjc4LDkgQEAg
dW5zaWduZWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OmNvbHVtbkNvdQogCiAgICAgLy8gT3VyIHBv
cnRpb24gcmVjdCBkZXRlcm1pbmVzIG91ciBjb2x1bW4gY291bnQuIFdlIGhhdmUgYXMgbWFueSBj
b2x1bW5zIGFzIG5lZWRlZCB0byBmaXQgYWxsIHRoZSBjb250ZW50LgogICAgIExheW91dFVuaXQg
bG9naWNhbEhlaWdodEluQ29sdW1ucyA9IGZsb3dUaHJlYWQoKS0+aXNIb3Jpem9udGFsV3JpdGlu
Z01vZGUoKSA/IGZsb3dUaHJlYWRQb3J0aW9uUmVjdCgpLmhlaWdodCgpIDogZmxvd1RocmVhZFBv
cnRpb25SZWN0KCkud2lkdGgoKTsKKyAgICBpZiAoIWxvZ2ljYWxIZWlnaHRJbkNvbHVtbnMpCisg
ICAgICAgIHJldHVybiAxOworICAgIAogICAgIHVuc2lnbmVkIGNvdW50ID0gY2VpbChzdGF0aWNf
Y2FzdDxmbG9hdD4obG9naWNhbEhlaWdodEluQ29sdW1ucykgLyBjb21wdXRlZENvbHVtbkhlaWdo
dCgpKTsKICAgICBBU1NFUlQoY291bnQgPj0gMSk7CiAgICAgcmV0dXJuIGNvdW50Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>