<?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>111363</bug_id>
          
          <creation_ts>2013-03-04 14:05:30 -0800</creation_ts>
          <short_desc>[New Multicolumn] Autogenerate regions for columns</short_desc>
          <delta_ts>2013-03-05 10:07:43 -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>eric</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>WebkitBugTracker</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>846836</commentid>
    <comment_count>0</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-04 14:05:30 -0800</bug_when>
    <thetext>In CSS Regions, we lay out the regions first, and then we put the flow thread into the regions. This model doesn&apos;t really work for multicolumn layout, which needs to be able to generate new regions lazily in response to the flow thread asking for regions at particular offsets.

This bug is about changing over to this layout model for sets only, i.e., the regions get generated lazily by the flow thread, and they get an initial sizing (but not placement). They then get placed by laying out *after* the flow thread rather than before.

With the multi-column model, where the regions can&apos;t just occur anywhere, its ok not to lay them out before the flow thread, as long as we have at least given them the correct size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>846847</commentid>
    <comment_count>1</comment_count>
      <attachid>191308</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-04 14:20:55 -0800</bug_when>
    <thetext>Created attachment 191308
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847590</commentid>
    <comment_count>2</comment_count>
      <attachid>191308</attachid>
    <who name="Mihnea Ovidenie">mihnea</who>
    <bug_when>2013-03-05 05:45:02 -0800</bug_when>
    <thetext>Comment on attachment 191308
Patch

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

&gt; Source/WebCore/ChangeLog:137
&gt; +        Don&apos;t ever invalidate regions in response to our size changing during layout. Since

I guess this refers to regions that are RenderRegionSet only.

&gt; Source/WebCore/rendering/RenderMultiColumnBlock.cpp:116
&gt;      }

Is the comment above about &quot;always putting the flow thread at the end&quot; still valid with the new implementation?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847737</commentid>
    <comment_count>3</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-05 09:13:15 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 191308 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=191308&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:137
&gt; &gt; +        Don&apos;t ever invalidate regions in response to our size changing during layout. Since
&gt; 
&gt; I guess this refers to regions that are RenderRegionSet only.
&gt; 

Yeah, I&apos;ll change that to &quot;region sets&quot;.

&gt; &gt; Source/WebCore/rendering/RenderMultiColumnBlock.cpp:116
&gt; &gt;      }
&gt; 
&gt; Is the comment above about &quot;always putting the flow thread at the end&quot; still valid with the new implementation?

It&apos;s not. Will remove.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>847777</commentid>
    <comment_count>4</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2013-03-05 10:07:43 -0800</bug_when>
    <thetext>Fixed in r144773.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>191308</attachid>
            <date>2013-03-04 14:20:55 -0800</date>
            <delta_ts>2013-03-05 09:56:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>patch.txt</filename>
            <type>text/plain</type>
            <size>36093</size>
            <attacher name="Dave Hyatt">hyatt</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE0NDY3MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NyBAQAorMjAxMy0wMy0wNCAgRGF2aWQg
SHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CisKKyAgICAgICAgW05ldyBNdWx0aWNvbHVtbl0gQXV0
b2dlbmVyYXRlIHJlZ2lvbnMgZm9yIGNvbHVtbnMuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTEzNjMKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBJbiBDU1MgUmVnaW9ucywgd2UgbGF5IG91dCB0aGUgcmVn
aW9ucyBmaXJzdCwgYW5kIHRoZW4KKyAgICAgICAgd2UgcHV0IHRoZSBmbG93IHRocmVhZCBpbnRv
IHRoZSByZWdpb25zLiBUaGlzIG1vZGVsIGRvZXNuJ3QKKyAgICAgICAgcmVhbGx5IHdvcmsgZm9y
IG11bHRpY29sdW1uIGxheW91dCwgd2hpY2ggbmVlZHMgdG8gYmUgYWJsZQorICAgICAgICB0byBh
dXRvLWdlbmVyYXRlIG5ldyByZWdpb25zIGxhemlseSBpbiByZXNwb25zZSB0byB0aGUgZmxvdwor
ICAgICAgICB0aHJlYWQgYXNraW5nIGZvciByZWdpb25zIGF0IHBhcnRpY3VsYXIgb2Zmc2V0cy4K
KworICAgICAgICBXaXRoIHRoZSBtdWx0aS1jb2x1bW4gbW9kZWwsIHdoZXJlIHRoZSByZWdpb25z
IGNhbid0IGp1c3Qgb2NjdXIKKyAgICAgICAgYW55d2hlcmUsIGl0cyBvayBub3QgdG8gbGF5IHRo
ZW0gb3V0IGJlZm9yZSB0aGUgZmxvdyB0aHJlYWQsIGFzCisgICAgICAgIGxvbmcgYXMgd2UgaGF2
ZSBhdCBsZWFzdCBnaXZlbiB0aGVtIHRoZSBjb3JyZWN0IHNpemUuCisgICAgICAgIAorICAgICAg
ICBUaGlzIHBhdGNoIGNoYW5nZXMgdGhlIGxheW91dCBhbGdvcml0aG0gZm9yIGNvbHVtbnMgdG86
CisgICAgICAgICgxKSBTaXplIGFueSBleGlzdGluZyByZWdpb25zICh3aXRob3V0IHdvcnJ5aW5n
IGFib3V0IHBsYWNlbWVudCkuCisgICAgICAgICgyKSBMYXkgb3V0IHRoZSBmbG93IHRocmVhZCAo
Z2VuZXJhdGluZyBhbmQgc2l6aW5nIHJlZ2lvbnMgbGF6aWx5CisgICAgICAgIHRoYXQgbmVlZCB0
byBiZSBjcmVhdGVkKS4KKyAgICAgICAgKDMpIExheSBvdXQgdGhlIHJlZ2lvbnMgKHRvIGdpdmUg
dGhlbSBjb3JyZWN0IHBsYWNlbWVudCBhbmQgdG8KKyAgICAgICAgY29tcHV0ZSBvdmVyZmxvdyBj
b3JyZWN0bHkgZm9yIHRoZSBtdWx0aS1jb2x1bW4gYmxvY2sgdGhhdCBjb250YWlucworICAgICAg
ICB0aGUgcmVnaW9ucykuCisKKyAgICAgICAgVGhlcmUgYXJlIG5vIG5ldyB0ZXN0cywgc2luY2Ug
dGhlcmUgYXJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlcy4gVGhpcworICAgICAgICBpcyBqdXN0IGdy
b3VuZHdvcmsgZm9yIGJlaW5nIGFibGUgdG8gYWRkIG5ldyBzZXRzIGluIHJlc3BvbnNlIHRvCisg
ICAgICAgIHNwYW5zLCBiYWxhbmNpbmcsIGFuZCBuZXN0ZWQgcGFnaW5hdGlvbiBjb250ZXh0cy4K
KworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJCbG9jazo6ZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxkKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKFJlbmRlckJsb2NrKToKKyAgICAg
ICAgU2luY2Ugd2Ugd2FudCB0byBiZSBhYmxlIHRvIGNhbGwgZGV0ZXJtaW5lTG9naWNhbExlZnRQ
b3NpdGlvbkZvckNoaWxkCisgICAgICAgIHRvIHBsYWNlIHRoZSBmbG93IHRocmVhZCBwcm9wZXJs
eSwgYW5kIHdlIGRvbid0IHdhbnQgdG8gYXBwbHkgYSBsYXlvdXQKKyAgICAgICAgZGVsdGEgKGZs
b3cgdGhyZWFkcyByZXBhaW50IHRoZW1zZWx2ZXMpLCB3ZSBwYXJhbWV0ZXJpemUgdGhlIG1ldGhv
ZAorICAgICAgICBoZXJlIHNvIHRoYXQgaXQgY2FuIGJlIGNhbGxlZCB3aXRob3V0IGFwcGx5aW5n
IGEgbGF5b3V0IGRlbHRhLgorICAgICAgICAKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRmxv
d1RocmVhZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdp
b25Ub1RocmVhZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJGbG93VGhyZWFkOjpyZW1vdmVS
ZWdpb25Gcm9tVGhyZWFkKToKKyAgICAgICAgVGhlc2UgbWV0aG9kcyBhcmUgb25seSB1c2VkIGJ5
IFJlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZCwgc2luY2UKKyAgICAgICAgUmVuZGVyTmFtZWRG
bG93VGhyZWFkIG92ZXJyaWRlcyB0aGVtLiBSZW1vdmUgdGhlIGNvZGUgdGhhdCBpbnZhbGlkYXRl
cworICAgICAgICB0aGUgZmxvdyB0aHJlYWRzIHJlZ2lvbiBzZXQgYXMgcmVnaW9ucyBjb21lIGFu
ZCBnbywgc2luY2UgdGhhdCBpcyBub3cKKyAgICAgICAgZ29pbmcgdG8gYmUgZXhwZWN0ZWQgd2l0
aCBhdXRvLWdlbmVyYXRpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6
OnZhbGlkYXRlUmVnaW9ucyk6CisgICAgICAgIFJlZmFjdG9yIHRoZSBjb2RlIGluIFJlbmRlckZs
b3dUaHJlYWQ6OmxheW91dCB0aGF0IHZhbGlkYXRlcyB0aGUgcmVnaW9ucworICAgICAgICBpbnRv
IGl0cyBvd24gbWV0aG9kLCBzbyB0aGF0IHdlIGNhbiByZS12YWxpZGF0ZSByZWdpb25zIGF0IGFu
eSB0aW1lCisgICAgICAgIGFmdGVyIGdlbmVyYXRpbmcgbmV3IG9uZXMuCisgICAgICAgIAorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6bGF5b3V0KToKKyAgICAgICAgQ2hhbmdl
ZCB0byBtb3ZlIHRoZSByZWdpb24gdmFsaWRhdGlvbiBjb2RlIGludG8gaXRzIG93biBmdW5jdGlv
biB0aGF0IGlzCisgICAgICAgIG5vdyBjYWxsZWQgZnJvbSBoZXJlLgorCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJGbG93VGhyZWFkOjp1cGRhdGVMb2dpY2FsV2lkdGgpOgorICAgICAgICBEb24n
dCBhc3NlcnQgaWYgYSByZWdpb24gc2V0IG5lZWRzIGxheW91dC4KKworICAgICAgICAoV2ViQ29y
ZTo6UmVuZGVyRmxvd1RocmVhZDo6Y29tcHV0ZUxvZ2ljYWxIZWlnaHQpOgorICAgICAgICBEaXR0
by4gRG9uJ3QgYXNzZXJ0IGlmIGEgcmVnaW9uIHNldCBuZWVkcyBsYXlvdXQuIFRoYXQncyBleHBl
Y3RlZCBub3cuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkF0
QmxvY2tPZmZzZXQpOgorICAgICAgICBBZGQgY29kZSB0byByZWdpb25BdEJsb2NrT2Zmc2V0IHRv
IGF1dG8tZ2VuZXJhdGUgcmVnaW9ucyB1cCB0bworICAgICAgICB0aGUgb2Zmc2V0LiBUaGlzIGVu
c3VyZXMgdGhlIHJlZ2lvbiB0aGF0IGlzIGJlaW5nIGFza2VkIGZvcgorICAgICAgICBleGlzdHMu
CisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VMb2dpY2FsVG9wRm9y
T2Zmc2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OnBhZ2VMb2dpY2Fs
V2lkdGhGb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1RocmVhZDo6cGFn
ZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRmxvd1Ro
cmVhZDo6cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQpOgorICAgICAgICBUaGVz
ZSBmdW5jdGlvbnMgYXJlIG5vIGxvbmdlciBjb25zdCwgc2luY2UgdGhlIGFjdCBvZiBhc2tpbmcg
Zm9yCisgICAgICAgIHBhZ2luYXRpb24gb2Zmc2V0cyBjYW4gY2F1c2UgdXMgdG8gZ2VuZXJhdGUg
bmV3IHJlZ2lvbnMuCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6Om1hcEZy
b21GbG93VG9SZWdpb24pOgorICAgICAgICBNb2RpZmllZCB0byB0dXJuIGF1dG8tZ2VuZXJhdGlv
biBvZmYsIHNpbmNlIHRoaXMgaXMgbm90IHJlYWxseQorICAgICAgICBhICJsYXlvdXQtdGltZSIg
ZnVuY3Rpb24uCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckZsb3dUaHJlYWQ6OmxvZ2ljYWxX
aWR0aENoYW5nZWRJblJlZ2lvbnMpOgorICAgICAgICBNb2RpZmllZCB0byBub3QgYXNzZXJ0IGlm
IGEgcmVnaW9uIHNldCBuZWVkcyBsYXlvdXQsIHNpbmNlIHRoYXQgaXMKKyAgICAgICAgZXhwZWN0
ZWQgbm93LgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuaDoKKyAgICAg
ICAgQ2hhbmdlcyB0byByZW1vdmUgY29uc3QgZnJvbSB0aGUgbWV0aG9kcyB0aGF0IGNhbiB0cmln
Z2VyIHJlZ2lvbgorICAgICAgICBhdXRvLWdlbmVyYXRpb24uCisKKyAgICAgICAgKiByZW5kZXJp
bmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJN
dWx0aUNvbHVtbkJsb2NrOjpzdHlsZURpZENoYW5nZSk6CisgICAgICAgIE1ha2Ugc3VyZSB0byBw
cm9wYWdhdGUgc3R5bGUgY2hhbmdlcyBkb3duIGludG8gdGhlIHJlZ2lvbnMuIEkgZG9uJ3Qga25v
dworICAgICAgICBvZiBhbnkgY29ycmVjdG5lc3MgYnVncyBhcm91bmQgdGhpcywgYnV0IEkgZmln
dXJlZCBJJ2QgYmUgdGhvcm91Z2guCisKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29s
dW1uQmxvY2s6OmNoZWNrRm9yUGFnaW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UpOgorICAgICAg
ICBXZSBubyBsb25nZXIgYnVpbGQgYSBjb2x1bW4gc2V0IGFnZ3Jlc3NpdmVseS4gV2Ugd2FpdCBm
b3IgdGhlIGZsb3cgdGhyZWFkCisgICAgICAgIHRvIGFzayB1cyBmb3IgYSByZWdpb24gYXQgYSBw
YXJ0aWN1bGFyIG9mZnNldCwgYW5kIG9ubHkgdGhlbiBkbyB3ZQorICAgICAgICBidWlsZCB0aGUg
c2V0LgorICAgICAgICAKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlck11bHRpQ29sdW1uQmxvY2s6
OmFkZENoaWxkKToKKyAgICAgICAgTm93IHRoYXQgd2UgbGF5IG91dCB0aGUgZmxvdyB0aHJlYWQg
YXMgYSBzcGVjaWFsIGV4Y2x1ZGVkIGNoaWxkLCB3ZSBkb24ndAorICAgICAgICBjYXJlIGFib3V0
IHRoZSBvcmRlcmluZyBvZiBpdCByZWxhdGl2ZSB0byB0aGUgcmVnaW9uIGNoaWxkcmVuLgorCisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpsYXlvdXRTcGVjaWFsRXhj
bHVkZWRDaGlsZCk6CisgICAgICAgIFdlIG5vdyBsYXkgb3V0IHRoZSBmbG93IHRocmVhZCBhcyBh
IHNwZWNpYWwgZXhjbHVkZWQgY2hpbGQgKGxpa2UgdGhlIGxlZ2VuZAorICAgICAgICBvZiBhIGZp
ZWxkc2V0KS4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmg6
CisgICAgICAgIChSZW5kZXJNdWx0aUNvbHVtbkJsb2NrKToKKyAgICAgICAgQWRkIG5ldyBvdmVy
cmlkZXMgbGlrZSBsYXlvdXRTcGVjaWFsRXhjbHVkZWRDaGlsZC4KKyAgICAgICAgCisgICAgICAg
ICogcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQ6OmluaXRpYWxMb2dpY2FsV2lkdGgp
OgorICAgICAgICBTZXQgdGhlIGZsb3cgdGhyZWFkIHRvIHRoZSBpbml0aWFsIGNvbHVtbiB3aWR0
aCBldmVuIHdoZW4gbm8gcmVnaW9ucyBleGlzdAorICAgICAgICB5ZXQuIFRoaXMgd2F5IHdlIGVu
c3VyZSB0aGUgd2lkdGggaXMgcmlnaHQgZXZlbiB3aGVuIHdlIGRvbid0IGhhdmUgYW55CisgICAg
ICAgIHJlZ2lvbnMgeWV0LgorCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtbkZs
b3dUaHJlYWQ6OmF1dG9HZW5lcmF0ZVJlZ2lvbnNUb0Jsb2NrT2Zmc2V0KToKKyAgICAgICAgVGhp
cyBtZXRob2QgaGFuZGxlcyBhdXRvZ2VuZXJhdGluZyB0aGUgbmV3IHJlZ2lvbiBmb3IgYSBnaXZl
biBvZmZzZXQuCisgICAgICAgIFJpZ2h0IG5vdyBpdCdzIHNpbXBsaXN0aWMsIHNpbmNlIHdlIG9u
bHkgaGF2ZSBvbmUgY29sdW1uIHNldC4gVGhpcyBtZXRob2QKKyAgICAgICAgd2lsbCBiZSBlbmhh
bmNlZCBpbiBmdXR1cmUgcGF0Y2hlcyB3aGVuIHdlIHN0YXJ0IHN1cHBvcnRpbmcgbXVsdGlwbGUg
Y29sdW1uCisgICAgICAgIHNldHMuCisKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlD
b2x1bW5GbG93VGhyZWFkLmg6CisgICAgICAgIChSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQp
OgorICAgICAgICBBZGRpbmcgbmV3IG1ldGhvZCBkZWNsYXJhdGlvbnMgbGlrZSBhdXRvR2VuZXJh
dGVSZWdpb25zVG9CbG9ja09mZnNldC4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJNdWx0
aUNvbHVtblNldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJNdWx0aUNvbHVtblNldDo6
dXBkYXRlTG9naWNhbFdpZHRoKToKKyAgICAgICAgU2luY2UgcmVnaW9ucyBsYXkgb3V0IGFmdGVy
IGZsb3cgdGhyZWFkcywgd2UgZG9uJ3QgbmVlZCB0byBtYWtlIAorICAgICAgICBzZXRGbG93VGhy
ZWFkUG9ydGlvblJlY3QgdmlydHVhbCBhbnkgbG9uZ2VyLiBXZSBjYW4ganVzdCBnZXQgb3VyIGNv
bHVtbiBzZXQncworICAgICAgICB3aWR0aCBjb3JyZWN0IGltbWVkaWF0ZWx5LiBUaGlzIGlzIHRo
ZSBzYW1lIGxvZ2ljLCBqdXN0IG1vdmVkIGludG8gdXBkYXRlTG9naWNhbFdpZHRoKCkuCisKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaDoKKyAgICAgICAgUmVtb3Zl
IHNldEZsb3dUaHJlYWRQb3J0aW9uUmVjdCBvdmVycmlkZSwgc2luY2UgdGhlIGZ1bmN0aW9uIGNh
biBqdXN0IGJlIHNpbXBsZQorICAgICAgICBhbmQgbm9uLXZpcnR1YWwgaW4gUmVuZGVyUmVnaW9u
IG5vdy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJSZWdpb24uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpsYXlvdXRCbG9jayk6CisgICAgICAgIERvbid0IGV2ZXIg
aW52YWxpZGF0ZSByZWdpb25zIGluIHJlc3BvbnNlIHRvIG91ciBzaXplIGNoYW5naW5nIGR1cmlu
ZyBsYXlvdXQuIFNpbmNlCisgICAgICAgIG91ciBzaXplIGlzIGFsd2F5cyBkZXRlcm1pbmVkIG91
dHNpZGUgb2YgbGF5b3V0IG5vdywgd2UgZG9uJ3QgbmVlZCB0byBkbyBhbnkgb2YKKyAgICAgICAg
dGhlc2UgY2hlY2tzLgorCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5oOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyUmVnaW9uOjpzZXRGbG93VGhyZWFkUG9ydGlvblJlY3QpOgor
ICAgICAgICBDaGFuZ2VkIHRvIGJlIG5vbi12aXJ0dWFsIG5vdyB0aGF0IFJlbmRlck11bHRpQ29s
dW1uU2V0IGRvZXNuJ3QgbmVlZCB0byBvdmVycmlkZS4KKwogMjAxMy0wMy0wNCAgVnNldm9sb2Qg
Vmxhc292ICA8dnNldmlrQGNocm9taXVtLm9yZz4KIAogICAgICAgICBXZWIgSW5zcGVjdG9yOiBJ
bnRyb2R1Y2UgV2ViSW5zcGVjdG9yLkV2ZW50VGFyZ2V0IGludGVyZmFjZSBmb3IgaW50ZXJmYWNl
cyB0aGF0IGRpc3BhdGNoIGV2ZW50cy4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTQ0NTI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMxNiw3ICsyMzE2LDcgQEAg
TGF5b3V0VW5pdCBSZW5kZXJCbG9jazo6Y29tcHV0ZVN0YXJ0UG9zaQogICAgIHJldHVybiBuZXdQ
b3NpdGlvbiAtIG9sZFBvc2l0aW9uOwogfQogCi12b2lkIFJlbmRlckJsb2NrOjpkZXRlcm1pbmVM
b2dpY2FsTGVmdFBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCkKK3ZvaWQgUmVuZGVy
QmxvY2s6OmRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZChSZW5kZXJCb3gqIGNo
aWxkLCBBcHBseUxheW91dERlbHRhTW9kZSBhcHBseURlbHRhKQogewogICAgIExheW91dFVuaXQg
c3RhcnRQb3NpdGlvbiA9IGJvcmRlclN0YXJ0KCkgKyBwYWRkaW5nU3RhcnQoKTsKICAgICBpZiAo
c3R5bGUoKS0+c2hvdWxkUGxhY2VCbG9ja0RpcmVjdGlvblNjcm9sbGJhck9uTG9naWNhbExlZnQo
KSkKQEAgLTIzMzIsNyArMjMzMiw3IEBAIHZvaWQgUmVuZGVyQmxvY2s6OmRldGVybWluZUxvZ2lj
YWxMZWZ0UG8KICAgICBpZiAoY2hpbGQtPmF2b2lkc0Zsb2F0cygpICYmIGNvbnRhaW5zRmxvYXRz
KCkgJiYgIWZsb3dUaHJlYWRDb250YWluaW5nQmxvY2soKSkKICAgICAgICAgbmV3UG9zaXRpb24g
Kz0gY29tcHV0ZVN0YXJ0UG9zaXRpb25EZWx0YUZvckNoaWxkQXZvaWRpbmdGbG9hdHMoY2hpbGQs
IG1hcmdpblN0YXJ0Rm9yQ2hpbGQoY2hpbGQpKTsKIAotICAgIHNldExvZ2ljYWxMZWZ0Rm9yQ2hp
bGQoY2hpbGQsIHN0eWxlKCktPmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSA/IG5ld1Bvc2l0aW9u
IDogdG90YWxBdmFpbGFibGVMb2dpY2FsV2lkdGggLSBuZXdQb3NpdGlvbiAtIGxvZ2ljYWxXaWR0
aEZvckNoaWxkKGNoaWxkKSwgQXBwbHlMYXlvdXREZWx0YSk7CisgICAgc2V0TG9naWNhbExlZnRG
b3JDaGlsZChjaGlsZCwgc3R5bGUoKS0+aXNMZWZ0VG9SaWdodERpcmVjdGlvbigpID8gbmV3UG9z
aXRpb24gOiB0b3RhbEF2YWlsYWJsZUxvZ2ljYWxXaWR0aCAtIG5ld1Bvc2l0aW9uIC0gbG9naWNh
bFdpZHRoRm9yQ2hpbGQoY2hpbGQpLCBhcHBseURlbHRhKTsKIH0KIAogdm9pZCBSZW5kZXJCbG9j
azo6c2V0Q29sbGFwc2VkQm90dG9tTWFyZ2luKGNvbnN0IE1hcmdpbkluZm8mIG1hcmdpbkluZm8p
CkBAIC0yNTg5LDcgKzI1ODksNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9ja0NoaWxk
KFJlbmRlCiAgICAgICAgIG1hcmdpbkluZm8uc2V0QXRCZWZvcmVTaWRlT2ZCbG9jayhmYWxzZSk7
CiAKICAgICAvLyBOb3cgcGxhY2UgdGhlIGNoaWxkIGluIHRoZSBjb3JyZWN0IGxlZnQgcG9zaXRp
b24KLSAgICBkZXRlcm1pbmVMb2dpY2FsTGVmdFBvc2l0aW9uRm9yQ2hpbGQoY2hpbGQpOworICAg
IGRldGVybWluZUxvZ2ljYWxMZWZ0UG9zaXRpb25Gb3JDaGlsZChjaGlsZCwgQXBwbHlMYXlvdXRE
ZWx0YSk7CiAKICAgICAvLyBVcGRhdGUgb3VyIGhlaWdodCBub3cgdGhhdCB0aGUgY2hpbGQgaGFz
IGJlZW4gcGxhY2VkIGluIHRoZSBjb3JyZWN0IHBvc2l0aW9uLgogICAgIHNldExvZ2ljYWxIZWln
aHQobG9naWNhbEhlaWdodCgpICsgbG9naWNhbEhlaWdodEZvckNoaWxkKGNoaWxkKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAkocmV2aXNpb24gMTQ0NTI4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEwNTYsNyArMTA1Niw2IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBjbGVhckZsb2F0
c0lmTmVlZGVkKFJlbmRlckJveCogY2hpbGQsIE1hcmdpbkluZm8mLCBMYXlvdXRVbml0IG9sZFRv
cFBvc01hcmdpbiwgTGF5b3V0VW5pdCBvbGRUb3BOZWdNYXJnaW4sIExheW91dFVuaXQgeVBvcyk7
CiAgICAgTGF5b3V0VW5pdCBlc3RpbWF0ZUxvZ2ljYWxUb3BQb3NpdGlvbihSZW5kZXJCb3gqIGNo
aWxkLCBjb25zdCBNYXJnaW5JbmZvJiwgTGF5b3V0VW5pdCYgZXN0aW1hdGVXaXRob3V0UGFnaW5h
dGlvbik7CiAgICAgdm9pZCBtYXJnaW5CZWZvcmVFc3RpbWF0ZUZvckNoaWxkKFJlbmRlckJveCos
IExheW91dFVuaXQmLCBMYXlvdXRVbml0JiwgYm9vbCYpIGNvbnN0OwotICAgIHZvaWQgZGV0ZXJt
aW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKFJlbmRlckJveCogY2hpbGQpOwogICAgIHZv
aWQgaGFuZGxlQWZ0ZXJTaWRlT2ZCbG9jayhMYXlvdXRVbml0IHRvcCwgTGF5b3V0VW5pdCBib3R0
b20sIE1hcmdpbkluZm8mKTsKICAgICB2b2lkIHNldENvbGxhcHNlZEJvdHRvbU1hcmdpbihjb25z
dCBNYXJnaW5JbmZvJik7CiAgICAgLy8gRW5kIGhlbHBlciBmdW5jdGlvbnMgYW5kIHN0cnVjdHMg
dXNlZCBieSBsYXlvdXRCbG9ja0NoaWxkcmVuLgpAQCAtMTA3MCw2ICsxMDY5LDggQEAgcHJpdmF0
ZToKICAgICBzdGF0aWMgdm9pZCByZXBhaW50RGlydHlGbG9hdHMoVmVjdG9yPEZsb2F0V2l0aFJl
Y3Q+JiBmbG9hdHMpOwogCiBwcm90ZWN0ZWQ6CisgICAgdm9pZCBkZXRlcm1pbmVMb2dpY2FsTGVm
dFBvc2l0aW9uRm9yQ2hpbGQoUmVuZGVyQm94KiBjaGlsZCwgQXBwbHlMYXlvdXREZWx0YU1vZGUg
PSBEb05vdEFwcGx5TGF5b3V0RGVsdGEpOworCiAgICAgLy8gUGFnaW5hdGlvbiByb3V0aW5lcy4K
ICAgICB2aXJ0dWFsIGJvb2wgcmVsYXlvdXRGb3JQYWdpbmF0aW9uKGJvb2wgaGFzU3BlY2lmaWVk
UGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWlnaHQsIExheW91dFN0
YXRlTWFpbnRhaW5lciYpOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckZsb3dUaHJlYWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJGbG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTQ0NTI4KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05OCwx
NiArOTgsMTIgQEAgdm9pZCBSZW5kZXJGbG93VGhyZWFkOjphZGRSZWdpb25Ub1RocmVhZAogICAg
IEFTU0VSVChyZW5kZXJSZWdpb24pOwogICAgIG1fcmVnaW9uTGlzdC5hZGQocmVuZGVyUmVnaW9u
KTsKICAgICByZW5kZXJSZWdpb24tPnNldElzVmFsaWQodHJ1ZSk7Ci0gICAgaW52YWxpZGF0ZVJl
Z2lvbnMoKTsKLSAgICBjaGVja1JlZ2lvbnNXaXRoU3R5bGluZygpOwogfQogCiB2b2lkIFJlbmRl
ckZsb3dUaHJlYWQ6OnJlbW92ZVJlZ2lvbkZyb21UaHJlYWQoUmVuZGVyUmVnaW9uKiByZW5kZXJS
ZWdpb24pCiB7CiAgICAgQVNTRVJUKHJlbmRlclJlZ2lvbik7CiAgICAgbV9yZWdpb25MaXN0LnJl
bW92ZShyZW5kZXJSZWdpb24pOwotICAgIGludmFsaWRhdGVSZWdpb25zKCk7Ci0gICAgY2hlY2tS
ZWdpb25zV2l0aFN0eWxpbmcoKTsKIH0KIAogdm9pZCBSZW5kZXJGbG93VGhyZWFkOjppbnZhbGlk
YXRlUmVnaW9ucygpCkBAIC0xNDYsMjMgKzE0MiwyMSBAQCBwcml2YXRlOgogICAgIFJlbmRlckZs
b3dUaHJlYWQqIG1fcmVuZGVyRmxvd1RocmVhZDsKIH07CiAKLXZvaWQgUmVuZGVyRmxvd1RocmVh
ZDo6bGF5b3V0KCkKK3ZvaWQgUmVuZGVyRmxvd1RocmVhZDo6dmFsaWRhdGVSZWdpb25zKCkKIHsK
LSAgICBTdGFja1N0YXRzOjpMYXlvdXRDaGVja1BvaW50IGxheW91dENoZWNrUG9pbnQ7Ci0KLSAg
ICBtX3BhZ2VMb2dpY2FsU2l6ZUNoYW5nZWQgPSBtX3JlZ2lvbnNJbnZhbGlkYXRlZCAmJiBldmVy
SGFkTGF5b3V0KCk7CiAgICAgaWYgKG1fcmVnaW9uc0ludmFsaWRhdGVkKSB7CiAgICAgICAgIG1f
cmVnaW9uc0ludmFsaWRhdGVkID0gZmFsc2U7CiAgICAgICAgIG1fcmVnaW9uc0hhdmVVbmlmb3Jt
TG9naWNhbFdpZHRoID0gdHJ1ZTsKICAgICAgICAgbV9yZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2Fs
SGVpZ2h0ID0gdHJ1ZTsKIAotICAgICAgICBMYXlvdXRVbml0IHByZXZpb3VzUmVnaW9uTG9naWNh
bFdpZHRoID0gMDsKLSAgICAgICAgTGF5b3V0VW5pdCBwcmV2aW91c1JlZ2lvbkxvZ2ljYWxIZWln
aHQgPSAwOwotICAgICAgICBib29sIGZpcnN0UmVnaW9uVmlzaXRlZCA9IGZhbHNlOwogICAgICAg
ICBpZiAoaGFzUmVnaW9ucygpKSB7CisgICAgICAgICAgICBMYXlvdXRVbml0IHByZXZpb3VzUmVn
aW9uTG9naWNhbFdpZHRoID0gMDsKKyAgICAgICAgICAgIExheW91dFVuaXQgcHJldmlvdXNSZWdp
b25Mb2dpY2FsSGVpZ2h0ID0gMDsKKyAgICAgICAgICAgIGJvb2wgZmlyc3RSZWdpb25WaXNpdGVk
ID0gZmFsc2U7CisgICAgICAgICAgICAKICAgICAgICAgICAgIGZvciAoUmVuZGVyUmVnaW9uTGlz
dDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9u
TGlzdC5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdp
b24gPSAqaXRlcjsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIXJlZ2lvbi0+bmVlZHNMYXlvdXQo
KSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkgfHwgcmVn
aW9uLT5pc1JlbmRlclJlZ2lvblNldCgpKTsKIAogICAgICAgICAgICAgICAgIHJlZ2lvbi0+ZGVs
ZXRlQWxsUmVuZGVyQm94UmVnaW9uSW5mbygpOwogCkBAIC0xODksMTIgKzE4MywyMCBAQCB2b2lk
IFJlbmRlckZsb3dUaHJlYWQ6OmxheW91dCgpCiAKICAgICAgICAgICAgICAgICBwcmV2aW91c1Jl
Z2lvbkxvZ2ljYWxXaWR0aCA9IHJlZ2lvbkxvZ2ljYWxXaWR0aDsKICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgdXBkYXRlTG9naWNhbFdpZHRoKCk7IC8vIENhbGxlZCB0
byBnZXQgdGhlIG1heGltdW0gbG9naWNhbCB3aWR0aCBmb3IgdGhlIHJlZ2lvbi4KLSAgICAgICAg
ICAgIHVwZGF0ZVJlZ2lvbnNGbG93VGhyZWFkUG9ydGlvblJlY3QoKTsKICAgICAgICAgfQogICAg
IH0KIAorICAgIHVwZGF0ZUxvZ2ljYWxXaWR0aCgpOyAvLyBDYWxsZWQgdG8gZ2V0IHRoZSBtYXhp
bXVtIGxvZ2ljYWwgd2lkdGggZm9yIHRoZSByZWdpb24uCisgICAgdXBkYXRlUmVnaW9uc0Zsb3dU
aHJlYWRQb3J0aW9uUmVjdCgpOworfQorCit2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OmxheW91dCgp
Cit7CisgICAgU3RhY2tTdGF0czo6TGF5b3V0Q2hlY2tQb2ludCBsYXlvdXRDaGVja1BvaW50Owor
CisgICAgbV9wYWdlTG9naWNhbFNpemVDaGFuZ2VkID0gbV9yZWdpb25zSW52YWxpZGF0ZWQgJiYg
ZXZlckhhZExheW91dCgpOworICAgIHZhbGlkYXRlUmVnaW9ucygpOworCiAgICAgQ3VycmVudFJl
bmRlckZsb3dUaHJlYWRNYWludGFpbmVyIGN1cnJlbnRGbG93VGhyZWFkU2V0dGVyKHRoaXMpOwog
ICAgIFJlbmRlckJsb2NrOjpsYXlvdXQoKTsKIApAQCAtMjA5LDEwICsyMTEsMTAgQEAgdm9pZCBS
ZW5kZXJGbG93VGhyZWFkOjpsYXlvdXQoKQogCiB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnVwZGF0
ZUxvZ2ljYWxXaWR0aCgpCiB7Ci0gICAgTGF5b3V0VW5pdCBsb2dpY2FsV2lkdGggPSAwOworICAg
IExheW91dFVuaXQgbG9naWNhbFdpZHRoID0gaW5pdGlhbExvZ2ljYWxXaWR0aCgpOwogICAgIGZv
ciAoUmVuZGVyUmVnaW9uTGlzdDo6aXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlzdC5iZWdpbigp
OyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAgIFJlbmRlclJl
Z2lvbiogcmVnaW9uID0gKml0ZXI7Ci0gICAgICAgIEFTU0VSVCghcmVnaW9uLT5uZWVkc0xheW91
dCgpKTsKKyAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkgfHwgcmVnaW9uLT5p
c1JlbmRlclJlZ2lvblNldCgpKTsKICAgICAgICAgbG9naWNhbFdpZHRoID0gbWF4KHJlZ2lvbi0+
cGFnZUxvZ2ljYWxXaWR0aCgpLCBsb2dpY2FsV2lkdGgpOwogICAgIH0KICAgICBzZXRMb2dpY2Fs
V2lkdGgobG9naWNhbFdpZHRoKTsKQEAgLTIzNSw3ICsyMzcsNyBAQCB2b2lkIFJlbmRlckZsb3dU
aHJlYWQ6OmNvbXB1dGVMb2dpY2FsSGVpCiAKICAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6OmNv
bnN0X2l0ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuYmVnaW4oKTsgaXRlciAhPSBtX3JlZ2lv
bkxpc3QuZW5kKCk7ICsraXRlcikgewogICAgICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9ICpp
dGVyOwotICAgICAgICBBU1NFUlQoIXJlZ2lvbi0+bmVlZHNMYXlvdXQoKSk7CisgICAgICAgIEFT
U0VSVCghcmVnaW9uLT5uZWVkc0xheW91dCgpIHx8IHJlZ2lvbi0+aXNSZW5kZXJSZWdpb25TZXQo
KSk7CiAKICAgICAgICAgY29tcHV0ZWRWYWx1ZXMubV9leHRlbnQgKz0gcmVnaW9uLT5sb2dpY2Fs
SGVpZ2h0T2ZBbGxGbG93VGhyZWFkQ29udGVudCgpOwogICAgIH0KQEAgLTM0OSw3ICszNTEsNyBA
QCB2b2lkIFJlbmRlckZsb3dUaHJlYWQ6OnJlcGFpbnRSZWN0YW5nbGVJCiAgICAgfQogfQogCi1S
ZW5kZXJSZWdpb24qIFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkF0QmxvY2tPZmZzZXQoTGF5b3V0
VW5pdCBvZmZzZXQsIGJvb2wgZXh0ZW5kTGFzdFJlZ2lvbikgY29uc3QKK1JlbmRlclJlZ2lvbiog
UmVuZGVyRmxvd1RocmVhZDo6cmVnaW9uQXRCbG9ja09mZnNldChMYXlvdXRVbml0IG9mZnNldCwg
Ym9vbCBleHRlbmRMYXN0UmVnaW9uLCBSZWdpb25BdXRvR2VuZXJhdGlvblBvbGljeSBhdXRvR2Vu
ZXJhdGlvblBvbGljeSkKIHsKICAgICBBU1NFUlQoIW1fcmVnaW9uc0ludmFsaWRhdGVkKTsKIApA
QCAtMzU4LDcgKzM2MCwxMiBAQCBSZW5kZXJSZWdpb24qIFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lv
bkF0CiAgICAgUmVuZGVyUmVnaW9uKiBsYXN0VmFsaWRSZWdpb24gPSAwOwogCiAgICAgTGF5b3V0
VW5pdCBhY2N1bXVsYXRlZExvZ2ljYWxIZWlnaHQgPSAwOwotICAgIAorCisgICAgLy8gSWYgb3Vy
IGZsb3cgdGhyZWFkIGF1dG9nZW5lcmF0ZXMgaXRzIHJlZ2lvbnMsIHRoZW4gbWFrZSBzdXJlIHdl
IGVuc3VyZSB0aG9zZSByZWdpb25zIGV4aXN0CisgICAgLy8gbm93LgorICAgIGlmIChhdXRvR2Vu
ZXJhdGlvblBvbGljeSA9PSBBbGxvd1JlZ2lvbkF1dG9HZW5lcmF0aW9uKQorICAgICAgICBhdXRv
R2VuZXJhdGVSZWdpb25zVG9CbG9ja09mZnNldChvZmZzZXQpOworCiAgICAgLy8gRklYTUU6IFRo
ZSByZWdpb25zIGFyZSBhbHdheXMgaW4gb3JkZXIsIG9wdGltaXplIHRoaXMgc2VhcmNoLgogICAg
IGZvciAoUmVuZGVyUmVnaW9uTGlzdDo6Y29uc3RfaXRlcmF0b3IgaXRlciA9IG1fcmVnaW9uTGlz
dC5iZWdpbigpOyBpdGVyICE9IG1fcmVnaW9uTGlzdC5lbmQoKTsgKytpdGVyKSB7CiAgICAgICAg
IFJlbmRlclJlZ2lvbiogcmVnaW9uID0gKml0ZXI7CkBAIC0zODUsMTkgKzM5MiwxOSBAQCBSZW5k
ZXJSZWdpb24qIFJlbmRlckZsb3dUaHJlYWQ6OnJlZ2lvbkF0CiAgICAgcmV0dXJuIGxhc3RWYWxp
ZFJlZ2lvbjsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpwYWdlTG9naWNhbFRv
cEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCkgY29uc3QKK0xheW91dFVuaXQgUmVuZGVyRmxv
d1RocmVhZDo6cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpCiB7CiAg
ICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSByZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7CiAg
ICAgcmV0dXJuIHJlZ2lvbiA/IHJlZ2lvbi0+cGFnZUxvZ2ljYWxUb3BGb3JPZmZzZXQob2Zmc2V0
KSA6IExheW91dFVuaXQoKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpwYWdl
TG9naWNhbFdpZHRoRm9yT2Zmc2V0KExheW91dFVuaXQgb2Zmc2V0KSBjb25zdAorTGF5b3V0VW5p
dCBSZW5kZXJGbG93VGhyZWFkOjpwYWdlTG9naWNhbFdpZHRoRm9yT2Zmc2V0KExheW91dFVuaXQg
b2Zmc2V0KQogewogICAgIFJlbmRlclJlZ2lvbiogcmVnaW9uID0gcmVnaW9uQXRCbG9ja09mZnNl
dChvZmZzZXQsIHRydWUpOwogICAgIHJldHVybiByZWdpb24gPyByZWdpb24tPnBhZ2VMb2dpY2Fs
V2lkdGgoKSA6IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKIH0KIAotTGF5b3V0VW5pdCBSZW5kZXJG
bG93VGhyZWFkOjpwYWdlTG9naWNhbEhlaWdodEZvck9mZnNldChMYXlvdXRVbml0IG9mZnNldCkg
Y29uc3QKK0xheW91dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6cGFnZUxvZ2ljYWxIZWlnaHRGb3JP
ZmZzZXQoTGF5b3V0VW5pdCBvZmZzZXQpCiB7CiAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24gPSBy
ZWdpb25BdEJsb2NrT2Zmc2V0KG9mZnNldCk7CiAgICAgaWYgKCFyZWdpb24pCkBAIC00MDYsNyAr
NDEzLDcgQEAgTGF5b3V0VW5pdCBSZW5kZXJGbG93VGhyZWFkOjpwYWdlTG9naWNhbAogICAgIHJl
dHVybiByZWdpb24tPnBhZ2VMb2dpY2FsSGVpZ2h0KCk7CiB9CiAKLUxheW91dFVuaXQgUmVuZGVy
Rmxvd1RocmVhZDo6cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZzZXQoTGF5b3V0VW5p
dCBvZmZzZXQsIFBhZ2VCb3VuZGFyeVJ1bGUgcGFnZUJvdW5kYXJ5UnVsZSkgY29uc3QKK0xheW91
dFVuaXQgUmVuZGVyRmxvd1RocmVhZDo6cGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRGb3JPZmZz
ZXQoTGF5b3V0VW5pdCBvZmZzZXQsIFBhZ2VCb3VuZGFyeVJ1bGUgcGFnZUJvdW5kYXJ5UnVsZSkK
IHsKICAgICBSZW5kZXJSZWdpb24qIHJlZ2lvbiA9IHJlZ2lvbkF0QmxvY2tPZmZzZXQob2Zmc2V0
KTsKICAgICBpZiAoIXJlZ2lvbikKQEAgLTQzNyw3ICs0NDQsNyBAQCBSZW5kZXJSZWdpb24qIFJl
bmRlckZsb3dUaHJlYWQ6Om1hcEZyb21GCiAgICAgLy8gTm90ZTogVXNpbmcgdGhlIGNlbnRlciBp
biBvcmRlciB0byBhdm9pZCByb3VuZGluZyBlcnJvcnMuCiAKICAgICBMYXlvdXRQb2ludCBjZW50
ZXIgPSBib3hSZWN0LmNlbnRlcigpOwotICAgIFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uID0g
cmVnaW9uQXRCbG9ja09mZnNldChpc0hvcml6b250YWxXcml0aW5nTW9kZSgpID8gY2VudGVyLnko
KSA6IGNlbnRlci54KCksIHRydWUpOworICAgIFJlbmRlclJlZ2lvbiogcmVuZGVyUmVnaW9uID0g
Y29uc3RfY2FzdDxSZW5kZXJGbG93VGhyZWFkKj4odGhpcyktPnJlZ2lvbkF0QmxvY2tPZmZzZXQo
aXNIb3Jpem9udGFsV3JpdGluZ01vZGUoKSA/IGNlbnRlci55KCkgOiBjZW50ZXIueCgpLCB0cnVl
LCBEaXNhbGxvd1JlZ2lvbkF1dG9HZW5lcmF0aW9uKTsKICAgICBpZiAoIXJlbmRlclJlZ2lvbikK
ICAgICAgICAgcmV0dXJuIDA7CiAKQEAgLTUwMSw3ICs1MDgsNyBAQCBib29sIFJlbmRlckZsb3dU
aHJlYWQ6OmxvZ2ljYWxXaWR0aENoYW5nCiAKICAgICBmb3IgKFJlbmRlclJlZ2lvbkxpc3Q6Oml0
ZXJhdG9yIGl0ZXIgPSBtX3JlZ2lvbkxpc3QuZmluZChzdGFydFJlZ2lvbik7IGl0ZXIgIT0gbV9y
ZWdpb25MaXN0LmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgUmVuZGVyUmVnaW9uKiByZWdpb24g
PSAqaXRlcjsKLSAgICAgICAgQVNTRVJUKCFyZWdpb24tPm5lZWRzTGF5b3V0KCkpOworICAgICAg
ICBBU1NFUlQoIXJlZ2lvbi0+bmVlZHNMYXlvdXQoKSB8fCByZWdpb24tPmlzUmVuZGVyUmVnaW9u
U2V0KCkpOwogCiAgICAgICAgIE93blB0cjxSZW5kZXJCb3hSZWdpb25JbmZvPiBvbGRJbmZvID0g
cmVnaW9uLT50YWtlUmVuZGVyQm94UmVnaW9uSW5mbyhibG9jayk7CiAgICAgICAgIGlmICghb2xk
SW5mbykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJGbG93VGhyZWFkLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZsb3dUaHJlYWQu
aAkocmV2aXNpb24gMTQ0NTI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckZs
b3dUaHJlYWQuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBoYXNSZWdpb25zV2l0aFN0eWxpbmcoKSBjb25zdCB7IHJldHVybiBtX2hhc1JlZ2lvbnNX
aXRoU3R5bGluZzsgfQogICAgIHZvaWQgY2hlY2tSZWdpb25zV2l0aFN0eWxpbmcoKTsKIAorICAg
IHZvaWQgdmFsaWRhdGVSZWdpb25zKCk7CiAgICAgdm9pZCBpbnZhbGlkYXRlUmVnaW9ucygpOwog
ICAgIGJvb2wgaGFzVmFsaWRSZWdpb25JbmZvKCkgY29uc3QgeyByZXR1cm4gIW1fcmVnaW9uc0lu
dmFsaWRhdGVkICYmICFtX3JlZ2lvbkxpc3QuaXNFbXB0eSgpOyB9CiAKQEAgLTk1LDExICs5Niwx
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHJlcGFpbnRSZWN0YW5nbGVJblJlZ2lvbnMoY29uc3Qg
TGF5b3V0UmVjdCYsIGJvb2wgaW1tZWRpYXRlKSBjb25zdDsKIAotICAgIExheW91dFVuaXQgcGFn
ZUxvZ2ljYWxUb3BGb3JPZmZzZXQoTGF5b3V0VW5pdCkgY29uc3Q7Ci0gICAgTGF5b3V0VW5pdCBw
YWdlTG9naWNhbFdpZHRoRm9yT2Zmc2V0KExheW91dFVuaXQpIGNvbnN0OwotICAgIExheW91dFVu
aXQgcGFnZUxvZ2ljYWxIZWlnaHRGb3JPZmZzZXQoTGF5b3V0VW5pdCkgY29uc3Q7Ci0gICAgTGF5
b3V0VW5pdCBwYWdlUmVtYWluaW5nTG9naWNhbEhlaWdodEZvck9mZnNldChMYXlvdXRVbml0LCBQ
YWdlQm91bmRhcnlSdWxlID0gSW5jbHVkZVBhZ2VCb3VuZGFyeSkgY29uc3Q7Ci0gICAgUmVuZGVy
UmVnaW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0KExheW91dFVuaXQsIGJvb2wgZXh0ZW5kTGFzdFJl
Z2lvbiA9IGZhbHNlKSBjb25zdDsKKyAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsVG9wRm9yT2Zm
c2V0KExheW91dFVuaXQpOworICAgIExheW91dFVuaXQgcGFnZUxvZ2ljYWxXaWR0aEZvck9mZnNl
dChMYXlvdXRVbml0KTsKKyAgICBMYXlvdXRVbml0IHBhZ2VMb2dpY2FsSGVpZ2h0Rm9yT2Zmc2V0
KExheW91dFVuaXQpOworICAgIExheW91dFVuaXQgcGFnZVJlbWFpbmluZ0xvZ2ljYWxIZWlnaHRG
b3JPZmZzZXQoTGF5b3V0VW5pdCwgUGFnZUJvdW5kYXJ5UnVsZSA9IEluY2x1ZGVQYWdlQm91bmRh
cnkpOworICAgIAorICAgIGVudW0gUmVnaW9uQXV0b0dlbmVyYXRpb25Qb2xpY3kgeworICAgICAg
ICBBbGxvd1JlZ2lvbkF1dG9HZW5lcmF0aW9uLAorICAgICAgICBEaXNhbGxvd1JlZ2lvbkF1dG9H
ZW5lcmF0aW9uLAorICAgIH07CisgICAgUmVuZGVyUmVnaW9uKiByZWdpb25BdEJsb2NrT2Zmc2V0
KExheW91dFVuaXQsIGJvb2wgZXh0ZW5kTGFzdFJlZ2lvbiA9IGZhbHNlLCBSZWdpb25BdXRvR2Vu
ZXJhdGlvblBvbGljeSA9IEFsbG93UmVnaW9uQXV0b0dlbmVyYXRpb24pOwogCiAgICAgYm9vbCBy
ZWdpb25zSGF2ZVVuaWZvcm1Mb2dpY2FsV2lkdGgoKSBjb25zdCB7IHJldHVybiBtX3JlZ2lvbnNI
YXZlVW5pZm9ybUxvZ2ljYWxXaWR0aDsgfQogICAgIGJvb2wgcmVnaW9uc0hhdmVVbmlmb3JtTG9n
aWNhbEhlaWdodCgpIGNvbnN0IHsgcmV0dXJuIG1fcmVnaW9uc0hhdmVVbmlmb3JtTG9naWNhbEhl
aWdodDsgfQpAQCAtMTUxLDYgKzE1NywxMCBAQCBwdWJsaWM6CiBwcm90ZWN0ZWQ6CiAgICAgdmly
dHVhbCBjb25zdCBjaGFyKiByZW5kZXJOYW1lKCkgY29uc3QgPSAwOwogCisgICAgLy8gT3ZlcnJp
ZGRlbiBieSBjb2x1bW5zL3BhZ2VzIHRvIHNldCB1cCBhbiBpbml0aWFsIGxvZ2ljYWwgd2lkdGgg
b2YgdGhlIHBhZ2Ugd2lkdGggZXZlbiB3aGVuCisgICAgLy8gbm8gcmVnaW9ucyBoYXZlIGJlZW4g
Z2VuZXJhdGVkIHlldC4KKyAgICB2aXJ0dWFsIExheW91dFVuaXQgaW5pdGlhbExvZ2ljYWxXaWR0
aCgpIGNvbnN0IHsgcmV0dXJuIDA7IH07CisKICAgICB2b2lkIHVwZGF0ZVJlZ2lvbnNGbG93VGhy
ZWFkUG9ydGlvblJlY3QoKTsKICAgICBib29sIHNob3VsZFJlcGFpbnQoY29uc3QgTGF5b3V0UmVj
dCYpIGNvbnN0OwogICAgIGJvb2wgcmVnaW9uSW5SYW5nZShjb25zdCBSZW5kZXJSZWdpb24qIHRh
cmdldFJlZ2lvbiwgY29uc3QgUmVuZGVyUmVnaW9uKiBzdGFydFJlZ2lvbiwgY29uc3QgUmVuZGVy
UmVnaW9uKiBlbmRSZWdpb24pIGNvbnN0OwpAQCAtMTY1LDYgKzE3NSw4IEBAIHByb3RlY3RlZDoK
IAogICAgIHZvaWQgaW5pdGlhbGl6ZVJlZ2lvbnNPdmVycmlkZUxvZ2ljYWxDb250ZW50SGVpZ2h0
KFJlbmRlclJlZ2lvbiogPSAwKTsKIAorICAgIHZpcnR1YWwgdm9pZCBhdXRvR2VuZXJhdGVSZWdp
b25zVG9CbG9ja09mZnNldChMYXlvdXRVbml0KSB7IH07CisKICAgICBSZW5kZXJSZWdpb25MaXN0
IG1fcmVnaW9uTGlzdDsKIAogICAgIGNsYXNzIFJlbmRlclJlZ2lvblJhbmdlIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5CbG9jay5j
cHAJKHJldmlzaW9uIDE0NDYzNykKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJN
dWx0aUNvbHVtbkJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDMsNiArNDMsMTMgQEAgUmVu
ZGVyTXVsdGlDb2x1bW5CbG9jazo6UmVuZGVyTXVsdGlDb2x1bQogewogfQogCit2b2lkIFJlbmRl
ck11bHRpQ29sdW1uQmxvY2s6OnN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSBkaWZmLCBj
b25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCit7CisgICAgUmVuZGVyQmxvY2s6OnN0eWxlRGlk
Q2hhbmdlKGRpZmYsIG9sZFN0eWxlKTsKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGQgPSBmaXJz
dENoaWxkQm94KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT5uZXh0U2libGluZ0JveCgpKQorICAg
ICAgICBjaGlsZC0+c2V0U3R5bGUoUmVuZGVyU3R5bGU6OmNyZWF0ZUFub255bW91c1N0eWxlV2l0
aERpc3BsYXkoc3R5bGUoKSwgQkxPQ0spKTsKK30KKwogdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJs
b2NrOjpjb21wdXRlQ29sdW1uQ291bnRBbmRXaWR0aCgpCiB7CiAgICAgLy8gQ2FsY3VsYXRlIG91
ciBjb2x1bW4gd2lkdGggYW5kIGNvbHVtbiBjb3VudC4KQEAgLTkyLDkgKzk5LDYgQEAgdm9pZCBS
ZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjpjaGVja0ZvclBhZwogICAgICAgICAgICAgc2V0Q29sdW1u
SGVpZ2h0KG5ld0NvbnRlbnRMb2dpY2FsSGVpZ2h0KTsKICAgICB9CiAgICAgc2V0TG9naWNhbEhl
aWdodCgwKTsKLQotICAgIC8vIFNldCB1cCBvdXIgY29sdW1uIHNldHMuCi0gICAgZW5zdXJlQ29s
dW1uU2V0cygpOwogfQogCiBib29sIFJlbmRlck11bHRpQ29sdW1uQmxvY2s6OnJlbGF5b3V0Rm9y
UGFnaW5hdGlvbihib29sLCBMYXlvdXRVbml0LCBMYXlvdXRTdGF0ZU1haW50YWluZXImKQpAQCAt
MTEwLDU0ICsxMTQsNDAgQEAgdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjphZGRDaGlsZChS
ZQogICAgICAgICBtX2Zsb3dUaHJlYWQtPnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVBbm9u
eW1vdXNTdHlsZVdpdGhEaXNwbGF5KHN0eWxlKCksIEJMT0NLKSk7CiAgICAgICAgIFJlbmRlckJs
b2NrOjphZGRDaGlsZChtX2Zsb3dUaHJlYWQpOyAvLyBBbHdheXMgcHV0IHRoZSBmbG93IHRocmVh
ZCBhdCB0aGUgZW5kLgogICAgIH0KLQotICAgIC8vIENvbHVtbiBzZXRzIGFyZSBzaWJsaW5ncyBv
ZiB0aGUgZmxvdyB0aHJlYWQuIEFsbCBjaGlsZHJlbiBkZXNpZ25lZCB0byBiZSBpbiB0aGUgY29s
dW1ucywgaG93ZXZlciwgYXJlIHBhcnQKLSAgICAvLyBvZiB0aGUgZmxvdyB0aHJlYWQgaXRzZWxm
LgotICAgIGlmIChuZXdDaGlsZC0+aXNSZW5kZXJNdWx0aUNvbHVtblNldCgpKQotICAgICAgICBS
ZW5kZXJCbG9jazo6YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKLSAgICBlbHNlCi0g
ICAgICAgIG1fZmxvd1RocmVhZC0+YWRkQ2hpbGQobmV3Q2hpbGQsIGJlZm9yZUNoaWxkKTsKLX0K
LQotdm9pZCBSZW5kZXJNdWx0aUNvbHVtbkJsb2NrOjplbnN1cmVDb2x1bW5TZXRzKCkKLXsKLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIGVuc3VyZXMgd2UgaGF2ZSB0aGUgY29ycmVjdCBjb2x1bW4gc2V0
IGluZm9ybWF0aW9uIGJlZm9yZSB3ZSBnZXQgaW50byBsYXlvdXQuCi0gICAgLy8gRm9yIGEgc2lt
cGxlIG11bHRpLWNvbHVtbiBsYXlvdXQgaW4gY29udGludW91cyBtZWRpYSwgb25seSBvbmUgY29s
dW1uIHNldCBjaGlsZCBpcyByZXF1aXJlZC4KLSAgICAvLyBPbmNlIGEgY29sdW1uIGlzIG5lc3Rl
ZCBpbnNpZGUgYW4gZW5jbG9zaW5nIHBhZ2luYXRpb24gY29udGV4dCwgdGhlIG51bWJlciBvZiBj
b2x1bW4gc2V0cwotICAgIC8vIHJlcXVpcmVkIGJlY29tZXMgMm4tMSwgd2hlcmUgbiBpcyB0aGUg
dG90YWwgbnVtYmVyIG9mIG5lc3RlZCBwYWdpbmF0aW9uIGNvbnRleHRzLiBGb3IgZXhhbXBsZToK
LSAgICAvLwotICAgIC8vIENvbHVtbiBsYXlvdXQgd2l0aCBubyBlbmNsb3NpbmcgcGFnaW5hdGlv
biBtb2RlbCA9IDIgKiAxIC0gMSA9IDEgY29sdW1uIHNldC4KLSAgICAvLyBDb2x1bW5zIGluc2lk
ZSBwYWdlcyA9IDIgKiAyIC0gMSA9IDMgY29sdW1uIHNldHMgKGJvdHRvbSBvZiBmaXJzdCBwYWdl
LCBhbGwgdGhlIHN1YnNlcXVlbnQgcGFnZXMsIHRoZW4gdGhlIGxhc3QgcGFnZSkuCi0gICAgLy8g
Q29sdW1ucyBpbnNpZGUgY29sdW1ucyBpbnNpZGUgcGFnZXMgPSAyICogMyAtIDEgPSA1IGNvbHVt
biBzZXRzLgotICAgIC8vCi0gICAgLy8gSW4gYWRkaXRpb24sIGNvbHVtbiBzcGFucyB3aWxsIGZv
cmNlIGEgY29sdW1uIHNldCB0byAic3BsaXQiIGludG8gYmVmb3JlL2FmdGVyIHNldHMgYXJvdW5k
IHRoZSBzcGFubmluZyByZWdpb24uCi0gICAgLy8KLSAgICAvLyBGaW5hbGx5LCB3ZSB3aWxsIG5l
ZWQgdG8gZGVhbCB3aXRoIGNvbHVtbnMgaW5zaWRlIHJlZ2lvbnMuIElmIHJlZ2lvbnMgaGF2ZSB2
YXJpYWJsZSB3aWR0aHMsIHRoZW4gdGhlcmUgd2lsbCBuZWVkCi0gICAgLy8gdG8gYmUgdW5pcXVl
IGNvbHVtbiBzZXRzIGNyZWF0ZWQgaW5zaWRlIGFueSByZWdpb24gd2hvc2Ugd2lkdGggaXMgZGlm
ZmVyZW50IGZyb20gaXRzIHN1cnJvdW5kaW5nIHJlZ2lvbnMuIFRoaXMgaXMKLSAgICAvLyBhY3R1
YWxseSBwcmV0dHkgc2ltaWxhciB0byB0aGUgc3Bhbm5pbmcgY2FzZSwgaW4gdGhhdCB3ZSBicmVh
ayB1cCB0aGUgY29sdW1uIHNldHMgd2hlbmV2ZXIgdGhlIHdpZHRoIHZhcmllcy4KLSAgICAvLwot
ICAgIC8vIEZJWE1FOiBGb3Igbm93IGp1c3QgbWFrZSBvbmUgY29sdW1uIHNldC4gVGhpcyBtYXRj
aGVzIHRoZSBvbGQgbXVsdGktY29sdW1uIGNvZGUuCi0gICAgLy8gUmlnaHQgbm93IG91ciBnb2Fs
IGlzIGp1c3QgZmVhdHVyZSBwYXJpdHkgd2l0aCB0aGUgb2xkIG11bHRpLWNvbHVtbiBjb2RlIHNv
IHRoYXQgd2UgY2FuIHN3aXRjaCBvdmVyIHRvIHRoZQotICAgIC8vIG5ldyBjb2RlIGFzIHNvb24g
YXMgcG9zc2libGUuCi0gICAgaWYgKCFmbG93VGhyZWFkKCkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIFJlbmRlck11bHRpQ29sdW1uU2V0KiBjb2x1bW5TZXQgPSBmaXJzdENoaWxkKCktPmlzUmVu
ZGVyTXVsdGlDb2x1bW5TZXQoKSA/IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQoZmlyc3RDaGlsZCgp
KSA6IDA7Ci0gICAgaWYgKCFjb2x1bW5TZXQpIHsKLSAgICAgICAgY29sdW1uU2V0ID0gUmVuZGVy
TXVsdGlDb2x1bW5TZXQ6OmNyZWF0ZUFub255bW91cyhmbG93VGhyZWFkKCkpOwotICAgICAgICBj
b2x1bW5TZXQtPnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhE
aXNwbGF5KHN0eWxlKCksIEJMT0NLKSk7Ci0gICAgICAgIFJlbmRlckJsb2NrOjphZGRDaGlsZChj
b2x1bW5TZXQsIGZpcnN0Q2hpbGQoKSk7Ci0gICAgfQotICAgIGNvbHVtblNldC0+c2V0UmVxdWly
ZXNCYWxhbmNpbmcocmVxdWlyZXNCYWxhbmNpbmcoKSk7CisgICAgbV9mbG93VGhyZWFkLT5hZGRD
aGlsZChuZXdDaGlsZCwgYmVmb3JlQ2hpbGQpOwogfQotCi12b2lkIFJlbmRlck11bHRpQ29sdW1u
QmxvY2s6OmxheW91dEJsb2NrKGJvb2wgcmVsYXlvdXRDaGlsZHJlbiwgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbEhlaWdodCkKKyAgICAKK1JlbmRlck9iamVjdCogUmVuZGVyTXVsdGlDb2x1bW5CbG9j
azo6bGF5b3V0U3BlY2lhbEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxkcmVuKQogewot
ICAgIFJlbmRlckJsb2NrOjpsYXlvdXRCbG9jayhyZWxheW91dENoaWxkcmVuLCBwYWdlTG9naWNh
bEhlaWdodCk7CisgICAgaWYgKCFtX2Zsb3dUaHJlYWQpCisgICAgICAgIHJldHVybiAwOworICAg
IAorICAgIC8vIFVwZGF0ZSB0aGUgc2l6ZXMgb2Ygb3VyIHJlZ2lvbnMgKGJ1dCBub3QgdGhlIHBs
YWNlbWVudCkgYmVmb3JlIHdlIGxheSBvdXQgdGhlIGZsb3cgdGhyZWFkLgorICAgIC8vIEZJWE1F
OiBFdmVudHVhbGx5IHRoaXMgaXMgZ29pbmcgdG8gZ2V0IHdheSBtb3JlIGNvbXBsaWNhdGVkLCBh
bmQgd2Ugd2lsbCBiZSBkZXN0cm95aW5nIHJlZ2lvbnMKKyAgICAvLyBpbnN0ZWFkIG9mIHRyeWlu
ZyB0byBrZWVwIHRoZW0gYXJvdW5kLgorICAgIGJvb2wgc2hvdWxkSW52YWxpZGF0ZVJlZ2lvbnMg
PSBmYWxzZTsKKyAgICBmb3IgKFJlbmRlckJveCogY2hpbGRCb3ggPSBmaXJzdENoaWxkQm94KCk7
IGNoaWxkQm94OyBjaGlsZEJveCA9IGNoaWxkQm94LT5uZXh0U2libGluZ0JveCgpKSB7CisgICAg
ICAgIGlmIChjaGlsZEJveCA9PSBtX2Zsb3dUaHJlYWQpCisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgCisgICAgICAgIGlmIChyZWxheW91dENoaWxkcmVuIHx8IGNoaWxkQm94LT5uZWVk
c0xheW91dCgpKSB7CisgICAgICAgICAgICBjaGlsZEJveC0+dXBkYXRlTG9naWNhbFdpZHRoKCk7
CisgICAgICAgICAgICBjaGlsZEJveC0+dXBkYXRlTG9naWNhbEhlaWdodCgpOworICAgICAgICAg
ICAgc2hvdWxkSW52YWxpZGF0ZVJlZ2lvbnMgPSB0cnVlOworICAgICAgICB9CisgICAgfQorICAg
IAorICAgIGlmIChzaG91bGRJbnZhbGlkYXRlUmVnaW9ucykKKyAgICAgICAgbV9mbG93VGhyZWFk
LT5pbnZhbGlkYXRlUmVnaW9ucygpOworCisgICAgaWYgKHJlbGF5b3V0Q2hpbGRyZW4pCisgICAg
ICAgIG1fZmxvd1RocmVhZC0+c2V0Q2hpbGROZWVkc0xheW91dCh0cnVlLCBNYXJrT25seVRoaXMp
OworICAgIAorICAgIHNldExvZ2ljYWxUb3BGb3JDaGlsZChtX2Zsb3dUaHJlYWQsIGJvcmRlckJl
Zm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpKTsKKyAgICBtX2Zsb3dUaHJlYWQtPmxheW91dElmTmVl
ZGVkKCk7CisgICAgZGV0ZXJtaW5lTG9naWNhbExlZnRQb3NpdGlvbkZvckNoaWxkKG1fZmxvd1Ro
cmVhZCk7CiAgICAgCi0gICAgLy8gU2hpZnQgdGhlIGZsb3cgdGhyZWFkIGJhY2sgdXAgdG8gdGhl
IHRvcCBvZiB0aGUgYmxvY2suCi0gICAgaWYgKGZsb3dUaHJlYWQoKSkKLSAgICAgICAgZmxvd1Ro
cmVhZCgpLT5zZXRMb2dpY2FsVG9wKGJvcmRlckJlZm9yZSgpICsgcGFkZGluZ0JlZm9yZSgpKTsK
KyAgICByZXR1cm4gbV9mbG93VGhyZWFkOwogfQogCiBjb25zdCBjaGFyKiBSZW5kZXJNdWx0aUNv
bHVtbkJsb2NrOjpyZW5kZXJOYW1lKCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suaAkocmV2aXNpb24gMTQ0NTI4KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29sdW1uQmxvY2suaAkod29y
a2luZyBjb3B5KQpAQCAtNTIsOCArNTIsMTAgQEAgcHJpdmF0ZToKICAgICAKICAgICB2aXJ0dWFs
IGNvbnN0IGNoYXIqIHJlbmRlck5hbWUoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBsYXlv
dXRCbG9jayhib29sIHJlbGF5b3V0Q2hpbGRyZW4sIExheW91dFVuaXQgcGFnZUxvZ2ljYWxIZWln
aHQgPSAwKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIFJlbmRlck9iamVjdCogbGF5b3V0U3BlY2lh
bEV4Y2x1ZGVkQ2hpbGQoYm9vbCByZWxheW91dENoaWxkcmVuKSBPVkVSUklERTsKIAorICAgIHZp
cnR1YWwgdm9pZCBzdHlsZURpZENoYW5nZShTdHlsZURpZmZlcmVuY2UsIGNvbnN0IFJlbmRlclN0
eWxlKikgT1ZFUlJJREU7CisgICAgCiAgICAgdmlydHVhbCBib29sIHVwZGF0ZUxvZ2ljYWxXaWR0
aEFuZENvbHVtbldpZHRoKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGNoZWNrRm9yUGFn
aW5hdGlvbkxvZ2ljYWxIZWlnaHRDaGFuZ2UoTGF5b3V0VW5pdCYgcGFnZUxvZ2ljYWxIZWlnaHQs
IGJvb2wmIHBhZ2VMb2dpY2FsSGVpZ2h0Q2hhbmdlZCwgYm9vbCYgaGFzU3BlY2lmaWVkUGFnZUxv
Z2ljYWxIZWlnaHQpIE9WRVJSSURFOwogICAgIHZpcnR1YWwgYm9vbCByZWxheW91dEZvclBhZ2lu
YXRpb24oYm9vbCBoYXNTcGVjaWZpZWRQYWdlTG9naWNhbEhlaWdodCwgTGF5b3V0VW5pdCBwYWdl
TG9naWNhbEhlaWdodCwgTGF5b3V0U3RhdGVNYWludGFpbmVyJikgT1ZFUlJJREU7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5G
bG93VGhyZWFkLmNwcAkocmV2aXNpb24gMTQ0NTI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlck11bHRpQ29sdW1uRmxvd1RocmVhZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3
LDYgKzI3LDcgQEAKICNpbmNsdWRlICJSZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaCIKIAog
I2luY2x1ZGUgIlJlbmRlck11bHRpQ29sdW1uQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJNdWx0
aUNvbHVtblNldC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUyLDQgKzUzLDUwIEBA
IHZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjpjb21wdXQKICAgICBjb21wdXRlZFZh
bHVlcy5tX3Bvc2l0aW9uID0gbG9naWNhbFRvcDsKIH0KIAorTGF5b3V0VW5pdCBSZW5kZXJNdWx0
aUNvbHVtbkZsb3dUaHJlYWQ6OmluaXRpYWxMb2dpY2FsV2lkdGgoKSBjb25zdAoreworICAgIFJl
bmRlck11bHRpQ29sdW1uQmxvY2sqIHBhcmVudEJsb2NrID0gdG9SZW5kZXJNdWx0aUNvbHVtbkJs
b2NrKHBhcmVudCgpKTsKKyAgICByZXR1cm4gcGFyZW50QmxvY2stPmNvbHVtbldpZHRoKCk7Cit9
CisKK3ZvaWQgUmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkOjphdXRvR2VuZXJhdGVSZWdpb25z
VG9CbG9ja09mZnNldChMYXlvdXRVbml0IC8qb2Zmc2V0Ki8pCit7CisgICAgLy8gVGhpcyBmdW5j
dGlvbiBlbnN1cmVzIHdlIGhhdmUgdGhlIGNvcnJlY3QgY29sdW1uIHNldCBpbmZvcm1hdGlvbiBh
dCBhbGwgdGltZXMuCisgICAgLy8gRm9yIGEgc2ltcGxlIG11bHRpLWNvbHVtbiBsYXlvdXQgaW4g
Y29udGludW91cyBtZWRpYSwgb25seSBvbmUgY29sdW1uIHNldCBjaGlsZCBpcyByZXF1aXJlZC4K
KyAgICAvLyBPbmNlIGEgY29sdW1uIGlzIG5lc3RlZCBpbnNpZGUgYW4gZW5jbG9zaW5nIHBhZ2lu
YXRpb24gY29udGV4dCwgdGhlIG51bWJlciBvZiBjb2x1bW4gc2V0cworICAgIC8vIHJlcXVpcmVk
IGJlY29tZXMgMm4tMSwgd2hlcmUgbiBpcyB0aGUgdG90YWwgbnVtYmVyIG9mIG5lc3RlZCBwYWdp
bmF0aW9uIGNvbnRleHRzLiBGb3IgZXhhbXBsZToKKyAgICAvLworICAgIC8vIENvbHVtbiBsYXlv
dXQgd2l0aCBubyBlbmNsb3NpbmcgcGFnaW5hdGlvbiBtb2RlbCA9IDIgKiAxIC0gMSA9IDEgY29s
dW1uIHNldC4KKyAgICAvLyBDb2x1bW5zIGluc2lkZSBwYWdlcyA9IDIgKiAyIC0gMSA9IDMgY29s
dW1uIHNldHMgKGJvdHRvbSBvZiBmaXJzdCBwYWdlLCBhbGwgdGhlIHN1YnNlcXVlbnQgcGFnZXMs
IHRoZW4gdGhlIGxhc3QgcGFnZSkuCisgICAgLy8gQ29sdW1ucyBpbnNpZGUgY29sdW1ucyBpbnNp
ZGUgcGFnZXMgPSAyICogMyAtIDEgPSA1IGNvbHVtbiBzZXRzLgorICAgIC8vCisgICAgLy8gSW4g
YWRkaXRpb24sIGNvbHVtbiBzcGFucyB3aWxsIGZvcmNlIGEgY29sdW1uIHNldCB0byAic3BsaXQi
IGludG8gYmVmb3JlL2FmdGVyIHNldHMgYXJvdW5kIHRoZSBzcGFubmluZyBlbGVtZW50LgorICAg
IC8vCisgICAgLy8gRmluYWxseSwgd2Ugd2lsbCBuZWVkIHRvIGRlYWwgd2l0aCBjb2x1bW5zIGlu
c2lkZSByZWdpb25zLiBJZiByZWdpb25zIGhhdmUgdmFyaWFibGUgd2lkdGhzLCB0aGVuIHRoZXJl
IHdpbGwgbmVlZAorICAgIC8vIHRvIGJlIHVuaXF1ZSBjb2x1bW4gc2V0cyBjcmVhdGVkIGluc2lk
ZSBhbnkgcmVnaW9uIHdob3NlIHdpZHRoIGlzIGRpZmZlcmVudCBmcm9tIGl0cyBzdXJyb3VuZGlu
ZyByZWdpb25zLiBUaGlzIGlzCisgICAgLy8gYWN0dWFsbHkgcHJldHR5IHNpbWlsYXIgdG8gdGhl
IHNwYW5uaW5nIGNhc2UsIGluIHRoYXQgd2UgYnJlYWsgdXAgdGhlIGNvbHVtbiBzZXRzIHdoZW5l
dmVyIHRoZSB3aWR0aCB2YXJpZXMuCisgICAgLy8KKyAgICAvLyBGSVhNRTogRm9yIG5vdyBqdXN0
IG1ha2Ugb25lIGNvbHVtbiBzZXQuIFRoaXMgbWF0Y2hlcyB0aGUgb2xkIG11bHRpLWNvbHVtbiBj
b2RlLgorICAgIC8vIFJpZ2h0IG5vdyBvdXIgZ29hbCBpcyBqdXN0IGZlYXR1cmUgcGFyaXR5IHdp
dGggdGhlIG9sZCBtdWx0aS1jb2x1bW4gY29kZSBzbyB0aGF0IHdlIGNhbiBzd2l0Y2ggb3ZlciB0
byB0aGUKKyAgICAvLyBuZXcgY29kZSBhcyBzb29uIGFzIHBvc3NpYmxlLgorICAgIFJlbmRlck11
bHRpQ29sdW1uU2V0KiBmaXJzdFNldCA9IHRvUmVuZGVyTXVsdGlDb2x1bW5TZXQoZmlyc3RSZWdp
b24oKSk7CisgICAgaWYgKGZpcnN0U2V0KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaW52
YWxpZGF0ZVJlZ2lvbnMoKTsKKworICAgIFJlbmRlck11bHRpQ29sdW1uQmxvY2sqIHBhcmVudEJs
b2NrID0gdG9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrKHBhcmVudCgpKTsKKyAgICBmaXJzdFNldCA9
IFJlbmRlck11bHRpQ29sdW1uU2V0OjpjcmVhdGVBbm9ueW1vdXModGhpcyk7CisgICAgZmlyc3RT
ZXQtPnNldFN0eWxlKFJlbmRlclN0eWxlOjpjcmVhdGVBbm9ueW1vdXNTdHlsZVdpdGhEaXNwbGF5
KHBhcmVudEJsb2NrLT5zdHlsZSgpLCBCTE9DSykpOworICAgIHBhcmVudEJsb2NrLT5SZW5kZXJC
bG9jazo6YWRkQ2hpbGQoZmlyc3RTZXQpOworICAgIAorICAgIC8vIEV2ZW4gdGhvdWdoIHdlIGFy
ZW4ndCBwbGFjZWQgeWV0LCB3ZSBjYW4gZ28gYWhlYWQgYW5kIHNldCB1cCBvdXIgc2l6ZS4KKyAg
ICBmaXJzdFNldC0+dXBkYXRlTG9naWNhbFdpZHRoKCk7CisgICAgZmlyc3RTZXQtPnVwZGF0ZUxv
Z2ljYWxIZWlnaHQoKTsKKworICAgIGZpcnN0U2V0LT5zZXRSZXF1aXJlc0JhbGFuY2luZyhwYXJl
bnRCbG9jay0+cmVxdWlyZXNCYWxhbmNpbmcoKSk7CisgICAgCisgICAgdmFsaWRhdGVSZWdpb25z
KCk7Cit9CisKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNv
bHVtbkZsb3dUaHJlYWQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTXVsdGlDb2x1bW5GbG93VGhyZWFkLmgJKHJldmlzaW9uIDE0NDUyOCkKKysrIFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtbkZsb3dUaHJlYWQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzksNiArMzksOCBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHZpcnR1YWwg
Y29uc3QgY2hhciogcmVuZGVyTmFtZSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgdm9p
ZCBjb21wdXRlTG9naWNhbEhlaWdodChMYXlvdXRVbml0IGxvZ2ljYWxIZWlnaHQsIExheW91dFVu
aXQgbG9naWNhbFRvcCwgTG9naWNhbEV4dGVudENvbXB1dGVkVmFsdWVzJikgY29uc3QgT1ZFUlJJ
REU7CisgICAgdmlydHVhbCB2b2lkIGF1dG9HZW5lcmF0ZVJlZ2lvbnNUb0Jsb2NrT2Zmc2V0KExh
eW91dFVuaXQpIE9WRVJSSURFOworICAgIHZpcnR1YWwgTGF5b3V0VW5pdCBpbml0aWFsTG9naWNh
bFdpZHRoKCkgY29uc3QgT1ZFUlJJREU7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJNdWx0aUNvbHVtblNl
dC5jcHAJKHJldmlzaW9uIDE0NDUyOCkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJNdWx0aUNvbHVtblNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1LDE1ICs2NSwyNyBAQCBM
YXlvdXRVbml0IFJlbmRlck11bHRpQ29sdW1uU2V0OjpwYWdlTG9nCiAKIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OnVwZGF0ZUxvZ2ljYWxXaWR0aCgpCiB7Ci0gICAgLy8gT3VyIGxvZ2ljYWwg
d2lkdGggc3RhcnRzIG9mZiBtYXRjaGluZyB0aGUgY29sdW1uIGJsb2NrIGl0c2VsZi4KLSAgICAv
LyBUaGlzIHdpZHRoIHdpbGwgYmUgZml4ZWQgdXAgYWZ0ZXIgdGhlIGZsb3cgdGhyZWFkIGxheXMg
b3V0IG9uY2UgaXQgaXMgZGV0ZXJtaW5lZCBleGFjdGx5IGhvdyBtYW55Ci0gICAgLy8gY29sdW1u
cyB3ZSBlbmRlZCB1cCBob2xkaW5nLgorICAgIFJlbmRlck11bHRpQ29sdW1uQmxvY2sqIHBhcmVu
dEJsb2NrID0gdG9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrKHBhcmVudCgpKTsKKyAgICBzZXRDb21w
dXRlZENvbHVtbldpZHRoQW5kQ291bnQocGFyZW50QmxvY2stPmNvbHVtbldpZHRoKCksIHBhcmVu
dEJsb2NrLT5jb2x1bW5Db3VudCgpKTsgLy8gRklYTUU6IFRoaXMgd2lsbCBldmVudHVhbGx5IHZh
cnkgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNpZGUgcmVnaW9ucy4KKyAgICAKICAgICAvLyBGSVhN
RTogV2hlbiB3ZSBhZGQgcmVnaW9ucyBzdXBwb3J0LCB3ZSdsbCBzdGFydCBpdCBvZmYgYXQgdGhl
IHdpZHRoIG9mIHRoZSBtdWx0aS1jb2x1bW4KICAgICAvLyBibG9jayBpbiB0aGF0IHBhcnRpY3Vs
YXIgcmVnaW9uLgogICAgIHNldExvZ2ljYWxXaWR0aChwYXJlbnRCb3goKS0+Y29udGVudExvZ2lj
YWxXaWR0aCgpKTsKKworICAgIC8vIElmIHdlIG92ZXJmbG93LCBpbmNyZWFzZSBvdXIgbG9naWNh
bCB3aWR0aC4KKyAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KCk7CisgICAgaWYg
KCFjb2xDb3VudCkKKyAgICAgICAgcmV0dXJuOwogICAgIAotICAgIFJlbmRlck11bHRpQ29sdW1u
QmxvY2sqIHBhcmVudEJsb2NrID0gdG9SZW5kZXJNdWx0aUNvbHVtbkJsb2NrKHBhcmVudCgpKTsK
LSAgICBzZXRDb21wdXRlZENvbHVtbldpZHRoQW5kQ291bnQocGFyZW50QmxvY2stPmNvbHVtbldp
ZHRoKCksIHBhcmVudEJsb2NrLT5jb2x1bW5Db3VudCgpKTsgLy8gRklYTUU6IFRoaXMgd2lsbCBl
dmVudHVhbGx5IHZhcnkgaWYgd2UgYXJlIGNvbnRhaW5lZCBpbnNpZGUgcmVnaW9ucy4KKyAgICBM
YXlvdXRVbml0IGNvbEdhcCA9IGNvbHVtbkdhcCgpOworICAgIExheW91dFVuaXQgbWluaW11bUNv
bnRlbnRMb2dpY2FsV2lkdGggPSBjb2xDb3VudCAqIGNvbXB1dGVkQ29sdW1uV2lkdGgoKSArIChj
b2xDb3VudCAtIDEpICogY29sR2FwOworICAgIExheW91dFVuaXQgY3VycmVudENvbnRlbnRMb2dp
Y2FsV2lkdGggPSBjb250ZW50TG9naWNhbFdpZHRoKCk7CisgICAgTGF5b3V0VW5pdCBkZWx0YSA9
IG1heChMYXlvdXRVbml0KCksIG1pbmltdW1Db250ZW50TG9naWNhbFdpZHRoIC0gY3VycmVudENv
bnRlbnRMb2dpY2FsV2lkdGgpOworICAgIGlmICghZGVsdGEpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEluY3JlYXNlIG91ciBsb2dpY2FsIHdpZHRoIGJ5IHRoZSBkZWx0YS4KKyAgICBzZXRM
b2dpY2FsV2lkdGgobG9naWNhbFdpZHRoKCkgKyBkZWx0YSk7CiB9CiAKIHZvaWQgUmVuZGVyTXVs
dGlDb2x1bW5TZXQ6OnVwZGF0ZUxvZ2ljYWxIZWlnaHQoKQpAQCAtMjA5LDMxICsyMjEsNiBAQCBM
YXlvdXRSZWN0IFJlbmRlck11bHRpQ29sdW1uU2V0OjpmbG93VGhyCiAgICAgcmV0dXJuIG92ZXJm
bG93UmVjdEZvckZsb3dUaHJlYWRQb3J0aW9uKG92ZXJmbG93UmVjdCwgaXNGaXJzdFJlZ2lvbigp
ICYmIGlzRmlyc3RDb2x1bW4sIGlzTGFzdFJlZ2lvbigpICYmIGlzTGFzdENvbHVtbik7CiB9CiAK
LXZvaWQgUmVuZGVyTXVsdGlDb2x1bW5TZXQ6OnNldEZsb3dUaHJlYWRQb3J0aW9uUmVjdChjb25z
dCBMYXlvdXRSZWN0JiByZWN0KQotewotICAgIFJlbmRlclJlZ2lvbjo6c2V0Rmxvd1RocmVhZFBv
cnRpb25SZWN0KHJlY3QpOwotICAgIAotICAgIC8vIE11dGF0ZSB0aGUgZGltZW5zaW9ucyBvZiB0
aGUgY29sdW1uIHNldCBvbmNlIG91ciBmbG93IHBvcnRpb24gaXMgc2V0IGlmIHRoZSBmbG93IHBv
cnRpb24gaGFzIG1vcmUgY29sdW1ucwotICAgIC8vIHRoYW4gY2FuIGZpdCBpbnNpZGUgb3VyIGN1
cnJlbnQgZGltZW5zaW9ucy4KLSAgICB1bnNpZ25lZCBjb2xDb3VudCA9IGNvbHVtbkNvdW50KCk7
Ci0gICAgaWYgKCFjb2xDb3VudCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIExheW91dFVu
aXQgY29sR2FwID0gY29sdW1uR2FwKCk7Ci0gICAgTGF5b3V0VW5pdCBtaW5pbXVtQ29udGVudExv
Z2ljYWxXaWR0aCA9IGNvbENvdW50ICogY29tcHV0ZWRDb2x1bW5XaWR0aCgpICsgKGNvbENvdW50
IC0gMSkgKiBjb2xHYXA7Ci0gICAgTGF5b3V0VW5pdCBjdXJyZW50Q29udGVudExvZ2ljYWxXaWR0
aCA9IGNvbnRlbnRMb2dpY2FsV2lkdGgoKTsKLSAgICBMYXlvdXRVbml0IGRlbHRhID0gbWF4KExh
eW91dFVuaXQoKSwgbWluaW11bUNvbnRlbnRMb2dpY2FsV2lkdGggLSBjdXJyZW50Q29udGVudExv
Z2ljYWxXaWR0aCk7Ci0gICAgaWYgKCFkZWx0YSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8g
SW5jcmVhc2Ugb3VyIGxvZ2ljYWwgd2lkdGggYnkgdGhlIGRlbHRhLgotICAgIHNldExvZ2ljYWxX
aWR0aChsb2dpY2FsV2lkdGgoKSArIGRlbHRhKTsKLSAgICAKLSAgICAvLyBTaGlmdCBvdXIgcG9z
aXRpb24gbGVmdCBieSB0aGUgZGVsdGEgaWYgd2UgYXJlIFJUTC4KLSAgICBpZiAoIXN0eWxlKCkt
PmlzTGVmdFRvUmlnaHREaXJlY3Rpb24oKSkKLSAgICAgICAgc2V0TG9naWNhbExlZnQobG9naWNh
bExlZnQoKSAtIGRlbHRhKTsKLX0KLQogdm9pZCBSZW5kZXJNdWx0aUNvbHVtblNldDo6cGFpbnRP
YmplY3QoUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNl
dCkKIHsKICAgICBpZiAoc3R5bGUoKS0+dmlzaWJpbGl0eSgpICE9IFZJU0lCTEUpCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTXVsdGlDb2x1bW5TZXQuaAkocmV2
aXNpb24gMTQ0NTI4KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck11bHRpQ29s
dW1uU2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg3LDExICs4NywxMiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCByZXF1aXJlc0JhbGFuY2luZygpIGNvbnN0IHsgcmV0dXJuIG1fcmVxdWlyZXNCYWxhbmNp
bmc7IH0KICAgICB2b2lkIHNldFJlcXVpcmVzQmFsYW5jaW5nKGJvb2wgYmFsYW5jaW5nKSB7IG1f
cmVxdWlyZXNCYWxhbmNpbmcgPSBiYWxhbmNpbmc7IH0KIAorICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVMb2dpY2FsV2lkdGgoKSBPVkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9naWNh
bEhlaWdodCgpIE9WRVJSSURFOworICAgIAogcHJpdmF0ZToKICAgICBSZW5kZXJNdWx0aUNvbHVt
blNldChSZW5kZXJGbG93VGhyZWFkKik7CiAKLSAgICB2aXJ0dWFsIHZvaWQgdXBkYXRlTG9naWNh
bFdpZHRoKCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHVwZGF0ZUxvZ2ljYWxIZWlnaHQo
KSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQgY29tcHV0ZUxvZ2ljYWxIZWlnaHQoTGF5b3V0
VW5pdCBsb2dpY2FsSGVpZ2h0LCBMYXlvdXRVbml0IGxvZ2ljYWxUb3AsIExvZ2ljYWxFeHRlbnRD
b21wdXRlZFZhbHVlcyYpIGNvbnN0IE9WRVJSSURFOwogCiAgICAgdmlydHVhbCB2b2lkIHBhaW50
T2JqZWN0KFBhaW50SW5mbyYsIGNvbnN0IExheW91dFBvaW50JiBwYWludE9mZnNldCkgT1ZFUlJJ
REU7CkBAIC0xMjIsNyArMTIzLDYgQEAgcHJpdmF0ZToKIAogICAgIExheW91dFJlY3QgZmxvd1Ro
cmVhZFBvcnRpb25SZWN0QXQodW5zaWduZWQgaW5kZXgpIGNvbnN0OwogICAgIExheW91dFJlY3Qg
Zmxvd1RocmVhZFBvcnRpb25PdmVyZmxvd1JlY3QoY29uc3QgTGF5b3V0UmVjdCYgZmxvd1RocmVh
ZFBvcnRpb24sIHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBjb2xDb3VudCwgTGF5b3V0VW5pdCBj
b2xHYXApIGNvbnN0OwotICAgIHZpcnR1YWwgdm9pZCBzZXRGbG93VGhyZWFkUG9ydGlvblJlY3Qo
Y29uc3QgTGF5b3V0UmVjdCYpIE9WRVJSSURFOwogICAgIAogICAgIHVuc2lnbmVkIGNvbHVtbklu
ZGV4QXRPZmZzZXQoTGF5b3V0VW5pdCkgY29uc3Q7CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9uLmNwcAkocmV2aXNpb24gMTQ0NTI4KQorKysgU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2
OCw3ICsyNjgsNyBAQCB2b2lkIFJlbmRlclJlZ2lvbjo6bGF5b3V0QmxvY2soYm9vbCByZWxhCiAg
ICAgICAgIGlmICh2aWV3KCktPmNoZWNrVHdvUGFzc0xheW91dEZvckF1dG9IZWlnaHRSZWdpb25z
KCkgJiYgaGFzQXV0b0xvZ2ljYWxIZWlnaHQoKSkKICAgICAgICAgICAgIHZpZXcoKS0+Zmxvd1Ro
cmVhZENvbnRyb2xsZXIoKS0+c2V0TmVlZHNUd29QYXNzTGF5b3V0Rm9yQXV0b0hlaWdodFJlZ2lv
bnModHJ1ZSk7CiAKLSAgICAgICAgaWYgKG9sZFJlZ2lvblJlY3Qud2lkdGgoKSAhPSBwYWdlTG9n
aWNhbFdpZHRoKCkgfHwgb2xkUmVnaW9uUmVjdC5oZWlnaHQoKSAhPSBwYWdlTG9naWNhbEhlaWdo
dCgpKSB7CisgICAgICAgIGlmICghaXNSZW5kZXJSZWdpb25TZXQoKSAmJiAob2xkUmVnaW9uUmVj
dC53aWR0aCgpICE9IHBhZ2VMb2dpY2FsV2lkdGgoKSB8fCBvbGRSZWdpb25SZWN0LmhlaWdodCgp
ICE9IHBhZ2VMb2dpY2FsSGVpZ2h0KCkpKSB7CiAgICAgICAgICAgICBtX2Zsb3dUaHJlYWQtPmlu
dmFsaWRhdGVSZWdpb25zKCk7CiAgICAgICAgICAgICBpZiAodmlldygpLT5jaGVja1R3b1Bhc3NM
YXlvdXRGb3JBdXRvSGVpZ2h0UmVnaW9ucygpKQogICAgICAgICAgICAgICAgIHZpZXcoKS0+Zmxv
d1RocmVhZENvbnRyb2xsZXIoKS0+c2V0TmVlZHNUd29QYXNzTGF5b3V0Rm9yQXV0b0hlaWdodFJl
Z2lvbnModHJ1ZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVnaW9u
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclJlZ2lvbi5o
CShyZXZpc2lvbiAxNDQ1MjgpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyUmVn
aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTUyLDcgKzUyLDcgQEAgcHVibGljOgogCiAgICAgdmly
dHVhbCB2b2lkIHN0eWxlRGlkQ2hhbmdlKFN0eWxlRGlmZmVyZW5jZSwgY29uc3QgUmVuZGVyU3R5
bGUqIG9sZFN0eWxlKTsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRGbG93VGhyZWFkUG9ydGlvblJl
Y3QoY29uc3QgTGF5b3V0UmVjdCYgcmVjdCkgeyBtX2Zsb3dUaHJlYWRQb3J0aW9uUmVjdCA9IHJl
Y3Q7IH0KKyAgICB2b2lkIHNldEZsb3dUaHJlYWRQb3J0aW9uUmVjdChjb25zdCBMYXlvdXRSZWN0
JiByZWN0KSB7IG1fZmxvd1RocmVhZFBvcnRpb25SZWN0ID0gcmVjdDsgfQogICAgIExheW91dFJl
Y3QgZmxvd1RocmVhZFBvcnRpb25SZWN0KCkgY29uc3QgeyByZXR1cm4gbV9mbG93VGhyZWFkUG9y
dGlvblJlY3Q7IH0KICAgICBMYXlvdXRSZWN0IGZsb3dUaHJlYWRQb3J0aW9uT3ZlcmZsb3dSZWN0
KCkgY29uc3Q7CiAK
</data>
<flag name="review"
          id="212238"
          type_id="1"
          status="+"
          setter="dino"
    />
          </attachment>
      

    </bug>

</bugzilla>