<?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>157437</bug_id>
          
          <creation_ts>2016-05-06 17:12:25 -0700</creation_ts>
          <short_desc>offsetLeft and offsetParent should adjust across shadow boundaries</short_desc>
          <delta_ts>2018-12-17 19:52:55 -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>DOM</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>148695</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>berto</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dbates</cc>
    
    <cc>dino</cc>
    
    <cc>eoconnor</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>koivisto</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mcatanzaro</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1190835</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-05-06 17:12:25 -0700</bug_when>
    <thetext>When a node is assigned to a slot, its offsetParent can leak a node inside a shadow tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190872</commentid>
    <comment_count>1</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2016-05-06 19:32:30 -0700</bug_when>
    <thetext>Filed https://github.com/w3c/webcomponents/issues/497 for the spec work.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1190873</commentid>
    <comment_count>2</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-05-06 19:33:23 -0700</bug_when>
    <thetext>&lt;rdar://problem/26154021&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487833</commentid>
    <comment_count>3</comment_count>
      <attachid>357294</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-13 20:20:30 -0800</bug_when>
    <thetext>Created attachment 357294
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487834</commentid>
    <comment_count>4</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-13 20:21:44 -0800</bug_when>
    <thetext>Almost there but I still have a bug that my loop can skip over the offset parent. Basically, we need to find the first offset parent which is a shadow inclusive ancestor so I might just need to check that directly instead of relying on the retargeting algorithm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1487952</commentid>
    <comment_count>5</comment_count>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-12-14 10:18:26 -0800</bug_when>
    <thetext>FYI, our offsetParent algorithm doesn&apos;t match the spec https://github.com/w3c/csswg-drafts/issues/409, bug 161788.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488557</commentid>
    <comment_count>6</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-17 13:14:41 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #5)
&gt; FYI, our offsetParent algorithm doesn&apos;t match the spec
&gt; https://github.com/w3c/csswg-drafts/issues/409, bug 161788.

Oh, interesting. This patch mostly preserves the behavior of offsetParent though. Any quirks it has will be preserved. I&apos;m basically walking offset parents until I find the shadow-including ancestor node.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488597</commentid>
    <comment_count>7</comment_count>
      <attachid>357478</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-17 14:39:06 -0800</bug_when>
    <thetext>Created attachment 357478
Fixes the implementation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488677</commentid>
    <comment_count>8</comment_count>
      <attachid>357503</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-17 17:01:30 -0800</bug_when>
    <thetext>Created attachment 357503
Fixed GTK+ build failures</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488678</commentid>
    <comment_count>9</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2018-12-17 17:02:27 -0800</bug_when>
    <thetext>Thanks for the patch. If this patch contains new public API please make sure it follows the guidelines for new WebKit2 GTK+ API. See http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488704</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-17 18:19:24 -0800</bug_when>
    <thetext>(In reply to Build Bot from comment #9)
&gt; Thanks for the patch. If this patch contains new public API please make sure
&gt; it follows the guidelines for new WebKit2 GTK+ API. See
&gt; http://trac.webkit.org/wiki/WebKitGTK/AddingNewWebKit2API

Note that this patch does not add or remove a new GTK+ API. It simply updates its implementation to match the JavaScript behavior.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488710</commentid>
    <comment_count>11</comment_count>
      <attachid>357503</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2018-12-17 18:32:18 -0800</bug_when>
    <thetext>Comment on attachment 357503
Fixed GTK+ build failures

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

&gt; Source/WebCore/ChangeLog:9
&gt; +        Updates our implementation of offsetLeft, offsetTop, and offsetParent to match the latest discussion in CSS WG.

Make it clear this is about offset* in shadow roots; you&apos;re not fixing the offsetParent algorithm in general.

&gt; Source/WebCore/dom/Element.cpp:914
&gt; +    auto parent = makeRefPtr(offsetParent());
&gt; +    if (!parent || !parent-&gt;isInShadowTree())
&gt; +        return offsetLeft();
&gt; +
&gt; +    ASSERT(&amp;parent-&gt;document() == &amp;document());
&gt; +    if (&amp;parent-&gt;treeScope() == &amp;treeScope())
&gt; +        return offsetLeft();
&gt; +
&gt; +    double offset = offsetLeft();

It would be nice to avoid the 3 separate call sites for offsetLeft(). You could move &apos;double offset = offsetLeft();&apos; to after the updateLayoutIgnorePendingStylesheets().

&gt; Source/WebCore/dom/Element.cpp:926
&gt; +    document().updateLayoutIgnorePendingStylesheets();

Sucks that both offsetLeft and offsetLeftForBindings() call updateLayoutIgnorePendingStylesheets().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488713</commentid>
    <comment_count>12</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-17 18:35:58 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #11)
&gt; Comment on attachment 357503 [details]
&gt; Fixed GTK+ build failures
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=357503&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:9
&gt; &gt; +        Updates our implementation of offsetLeft, offsetTop, and offsetParent to match the latest discussion in CSS WG.
&gt; 
&gt; Make it clear this is about offset* in shadow roots; you&apos;re not fixing the
&gt; offsetParent algorithm in general.

Phrased as follows:

Update the WebKit&apos;s treatment of shadow boundaries in offsetLeft, offsetTop, and offsetParent to match the latest discussion in CSS WG.

&gt; &gt; Source/WebCore/dom/Element.cpp:914
&gt; &gt; +    auto parent = makeRefPtr(offsetParent());
&gt; &gt; +    if (!parent || !parent-&gt;isInShadowTree())
&gt; &gt; +        return offsetLeft();
&gt; &gt; +
&gt; &gt; +    ASSERT(&amp;parent-&gt;document() == &amp;document());
&gt; &gt; +    if (&amp;parent-&gt;treeScope() == &amp;treeScope())
&gt; &gt; +        return offsetLeft();
&gt; &gt; +
&gt; &gt; +    double offset = offsetLeft();
&gt; 
&gt; It would be nice to avoid the 3 separate call sites for offsetLeft(). You
&gt; could move &apos;double offset = offsetLeft();&apos; to after the
&gt; updateLayoutIgnorePendingStylesheets().

Done that.

&gt; &gt; Source/WebCore/dom/Element.cpp:926
&gt; &gt; +    document().updateLayoutIgnorePendingStylesheets();
&gt; 
&gt; Sucks that both offsetLeft and offsetLeftForBindings() call
&gt; updateLayoutIgnorePendingStylesheets().

We don&apos;t need this now that we always call offsetTop/offsetLeft upfront.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488714</commentid>
    <comment_count>13</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-17 18:37:27 -0800</bug_when>
    <thetext>Thanks for the review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1488737</commentid>
    <comment_count>14</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2018-12-17 19:52:55 -0800</bug_when>
    <thetext>Committed r239313: &lt;https://trac.webkit.org/changeset/239313&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357294</attachid>
            <date>2018-12-13 20:20:30 -0800</date>
            <delta_ts>2018-12-17 14:39:02 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>wip157437.patch</filename>
            <type>text/plain</type>
            <size>21377</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc2hhZG93LWRvbS9vZmZzZXRQYXJlbnQtYWNyb3NzLXNo
YWRvdy1ib3VuZGFyaWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L3NoYWRvdy1kb20vb2Zmc2V0UGFyZW50LWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy1leHBl
Y3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9zaGFkb3ctZG9tL29m
ZnNldFBhcmVudC1hY3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTggQEAKKworUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCByZXR1cm4g
dGhlIG9mZnNldCBwYXJlbnQgaW4gdGhlIHNhbWUgc2hhZG93IHRyZWUgb2Ygb3BlbiBtb2RlIAor
UEFTUyBvZmZzZXRQYXJlbnQgbXVzdCByZXR1cm4gdGhlIG9mZnNldCBwYXJlbnQgaW4gdGhlIHNh
bWUgc2hhZG93IHRyZWUgb2YgY2xvc2VkIG1vZGUgCitQQVNTIG9mZnNldFBhcmVudCBtdXN0IHJl
dHVybiB0aGUgb2Zmc2V0IHBhcmVudCBpbiB0aGUgc2FtZSBzaGFkb3cgdHJlZSBvZiBvcGVuIG1v
ZGUgZXZlbiB3aGVuIG5lc3RlZCAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIHRoZSBv
ZmZzZXQgcGFyZW50IGluIHRoZSBzYW1lIHNoYWRvdyB0cmVlIG9mIGNsb3NlZCBtb2RlIGV2ZW4g
d2hlbiBuZXN0ZWQgCitQQVNTIG9mZnNldFBhcmVudCBtdXN0IHNraXAgb2Zmc2V0IHBhcmVudHMg
b2YgYW4gZWxlbWVudCB3aGVuIHRoZSBjb250ZXh0IG9iamVjdCBpcyBhc3NpZ25lZCB0byBhIHNs
b3QgaW4gYSBzaGFkb3cgdHJlZSBvZiBvcGVuIG1vZGUgCitQQVNTIG9mZnNldFBhcmVudCBtdXN0
IHNraXAgb2Zmc2V0IHBhcmVudHMgb2YgYW4gZWxlbWVudCB3aGVuIHRoZSBjb250ZXh0IG9iamVj
dCBpcyBhc3NpZ25lZCB0byBhIHNsb3QgaW4gYSBzaGFkb3cgdHJlZSBvZiBjbG9zZWQgbW9kZSAK
K1BBU1Mgb2Zmc2V0UGFyZW50IG11c3Qgc2tpcCBvZmZzZXQgcGFyZW50cyBvZiBhbiBlbGVtZW50
IHdoZW4gdGhlIGNvbnRleHQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgc2xvdCBpbiBhIHNoYWRv
dyB0cmVlIG9mIG9wZW4gbW9kZSAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3Qgc2tpcCBvZmZzZXQg
cGFyZW50cyBvZiBhbiBlbGVtZW50IHdoZW4gdGhlIGNvbnRleHQgb2JqZWN0IGlzIGFzc2lnbmVk
IHRvIGEgc2xvdCBpbiBhIHNoYWRvdyB0cmVlIG9mIGNsb3NlZCBtb2RlIAorUEFTUyBvZmZzZXRQ
YXJlbnQgbXVzdCBza2lwIG9mZnNldCBwYXJlbnRzIG9mIGFuIGVsZW1lbnQgd2hlbiB0aGUgY29u
dGV4dCBvYmplY3QgaXMgYXNzaWduZWQgdG8gYSBzbG90IGluIG5lc3RlZCBzaGFkb3cgdHJlZXMg
b2Ygb3BlbiBtb2RlIAorUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCBza2lwIG9mZnNldCBwYXJlbnRz
IG9mIGFuIGVsZW1lbnQgd2hlbiB0aGUgY29udGV4dCBvYmplY3QgaXMgYXNzaWduZWQgdG8gYSBz
bG90IGluIG5lc3RlZCBzaGFkb3cgdHJlZXMgb2YgY2xvc2VkIG1vZGUgCitGQUlMIG9mZnNldFBh
cmVudCBtdXN0IGZpbmQgdGhlIGZpcnN0IG9mZnNldCBwYXJlbnQgd2hpY2ggaXMgYSBzaGFkb3ct
aW5jbHVkaW5nIGFuY2VzdG9yIG9mIHRoZSBjb250ZXh0IG9iamVjdCBldmVuIHNvbWUgc2hhZG93
IHRyZWUgb2Ygb3BlbiBtb2RlIGRpZCBub3QgaGF2ZSBhbnkgb2Zmc2V0IHBhcmVudCBhc3NlcnRf
ZXF1YWxzOiBleHBlY3RlZCAyNCBidXQgZ290IDMyCitGQUlMIG9mZnNldFBhcmVudCBtdXN0IGZp
bmQgdGhlIGZpcnN0IG9mZnNldCBwYXJlbnQgd2hpY2ggaXMgYSBzaGFkb3ctaW5jbHVkaW5nIGFu
Y2VzdG9yIG9mIHRoZSBjb250ZXh0IG9iamVjdCBldmVuIHNvbWUgc2hhZG93IHRyZWUgb2YgY2xv
c2VkIG1vZGUgZGlkIG5vdCBoYXZlIGFueSBvZmZzZXQgcGFyZW50IGFzc2VydF9lcXVhbHM6IGV4
cGVjdGVkIDI0IGJ1dCBnb3QgMzIKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIG51bGwg
b24gYSBjaGlsZCBlbGVtZW50IG9mIGEgc2hhZG93IGhvc3QgZm9yIHRoZSBzaGFkb3cgdHJlZSBp
biBvcGVuIG1vZGUgd2hpY2ggaXMgbm90IGFzc2lnbmVkIHRvIGFueSBzbG90IAorUEFTUyBvZmZz
ZXRQYXJlbnQgbXVzdCByZXR1cm4gbnVsbCBvbiBhIGNoaWxkIGVsZW1lbnQgb2YgYSBzaGFkb3cg
aG9zdCBmb3IgdGhlIHNoYWRvdyB0cmVlIGluIGNsb3NlZCBtb2RlIHdoaWNoIGlzIG5vdCBhc3Np
Z25lZCB0byBhbnkgc2xvdCAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIG51bGwgb24g
YSBjaGlsZCBlbGVtZW50IG9mIGEgc2hhZG93IGhvc3QgZm9yIHRoZSBzaGFkb3cgdHJlZSBpbiBv
cGVuIG1vZGUgd2hpY2ggaXMgbm90IGluIHRoZSBmbGF0IHRyZWUgCitQQVNTIG9mZnNldFBhcmVu
dCBtdXN0IHJldHVybiBudWxsIG9uIGEgY2hpbGQgZWxlbWVudCBvZiBhIHNoYWRvdyBob3N0IGZv
ciB0aGUgc2hhZG93IHRyZWUgaW4gY2xvc2VkIG1vZGUgd2hpY2ggaXMgbm90IGluIHRoZSBmbGF0
IHRyZWUgCisKSW5kZXg6IExheW91dFRlc3RzL2Zhc3Qvc2hhZG93LWRvbS9vZmZzZXRQYXJlbnQt
YWNyb3NzLXNoYWRvdy1ib3VuZGFyaWVzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9zaGFkb3ctZG9tL29mZnNldFBhcmVudC1hY3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMuaHRt
bAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy9mYXN0L3NoYWRvdy1kb20vb2Zmc2V0UGFy
ZW50LWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTkwIEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+Cis8bWV0YSBuYW1lPSJh
dXRob3IiIHRpdGxlPSJSeW9zdWtlIE5pd2EiIGhyZWY9Im1haWx0bzpybml3YUB3ZWJraXQub3Jn
Ij4KKzxtZXRhIG5hbWU9ImFzc2VydCIgY29udGVudD0ib2Zmc2V0UGFyZW50IHNob3VsZCBvbmx5
IHJldHVybiBub2RlcyB0aGF0IGFyZSBzaGFkb3cgaW5jbHVkaW5nIGFuY2VzdG9yIj4KKzxsaW5r
IHJlbD0iaGVscCIgaHJlZj0iaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL2Nzc29tLXZpZXcvI2Rv
bS1odG1sZWxlbWVudC1vZmZzZXRwYXJlbnQiPgorPGxpbmsgcmVsPSJoZWxwIiBocmVmPSJodHRw
czovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI2NvbmNlcHQtc2hhZG93LWluY2x1ZGluZy1pbmNsdXNp
dmUtYW5jZXN0b3IiPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVw
b3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJyZXNvdXJjZXMvZXZlbnQtcGF0aC10ZXN0
LWhlbHBlcnMuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8ZGl2IGlkPSJsb2ciPjwv
ZGl2PgorPGRpdiBpZD0iY29udGFpbmVyIiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj48L2Rp
dj4KKzxzY3JpcHQ+CisKK2NvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCdjb250YWluZXInKTsKKworZnVuY3Rpb24gdGVzdE9mZnNldFBhcmVudEluU2hhZG93VHJlZSht
b2RlKSB7CisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnN0IGhvc3QgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxk
KGhvc3QpOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVwKCgpID0+IGhvc3QucmVtb3ZlKCkpOwor
ICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coe21vZGV9KTsKKyAg
ICAgICAgc2hhZG93Um9vdC5pbm5lckhUTUwgPSAnPGRpdiBpZD0icmVsYXRpdmVQYXJlbnQiIHN0
eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmctbGVmdDogMTAwcHg7IHBhZGRpbmctdG9w
OiA3MHB4OyI+PGRpdiBpZD0idGFyZ2V0Ij48L2Rpdj48L2Rpdj4nOworICAgICAgICBjb25zdCBy
ZWxhdGl2ZVBhcmVudCA9IHNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoJ3JlbGF0aXZlUGFyZW50
Jyk7CisKKyAgICAgICAgYXNzZXJ0X3RydWUocmVsYXRpdmVQYXJlbnQgaW5zdGFuY2VvZiBIVE1M
RGl2RWxlbWVudCk7CisgICAgICAgIGNvbnN0IHRhcmdldCA9IHNoYWRvd1Jvb3QuZ2V0RWxlbWVu
dEJ5SWQoJ3RhcmdldCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRQYXJl
bnQsIHJlbGF0aXZlUGFyZW50KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0
TGVmdCwgMTAwKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0VG9wLCA3MCk7
CisgICAgfSwgYG9mZnNldFBhcmVudCBtdXN0IHJldHVybiB0aGUgb2Zmc2V0IHBhcmVudCBpbiB0
aGUgc2FtZSBzaGFkb3cgdHJlZSBvZiAke21vZGV9IG1vZGVgKTsKK30KKwordGVzdE9mZnNldFBh
cmVudEluU2hhZG93VHJlZSgnb3BlbicpOwordGVzdE9mZnNldFBhcmVudEluU2hhZG93VHJlZSgn
Y2xvc2VkJyk7CisKK2Z1bmN0aW9uIHRlc3RPZmZzZXRQYXJlbnRJbk5lc3RlZFNoYWRvd1RyZWVz
KG1vZGUpIHsKKyAgICB0ZXN0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc3Qgb3V0ZXJIb3N0
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VjdGlvbicpOworICAgICAgICBjb250YWluZXIu
YXBwZW5kQ2hpbGQob3V0ZXJIb3N0KTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBv
dXRlckhvc3QucmVtb3ZlKCkpOworICAgICAgICBjb25zdCBvdXRlclNoYWRvdyA9IG91dGVySG9z
dC5hdHRhY2hTaGFkb3coe21vZGV9KTsKKyAgICAgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0g
JzxzZWN0aW9uIGlkPSJvdXRlclBhcmVudCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9w
OiA1MHB4OyBsZWZ0OiA1MHB4OyI+PC9zZWN0aW9uPic7CisKKyAgICAgICAgY29uc3QgaW5uZXJI
b3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIG91dGVyU2hhZG93
LmZpcnN0Q2hpbGQuYXBwZW5kQ2hpbGQoaW5uZXJIb3N0KTsKKyAgICAgICAgY29uc3QgaW5uZXJT
aGFkb3cgPSBpbm5lckhvc3QuYXR0YWNoU2hhZG93KHttb2RlfSk7CisgICAgICAgIGlubmVyU2hh
ZG93LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJpbm5lclBhcmVudCIgc3R5bGU9InBvc2l0aW9uOiBy
ZWxhdGl2ZTsgcGFkZGluZy1sZWZ0OiA2MHB4OyBwYWRkaW5nLXRvcDogNDBweDsiPjxkaXYgaWQ9
InRhcmdldCI+PC9kaXY+PC9kaXY+JzsKKyAgICAgICAgY29uc3QgaW5uZXJQYXJlbnQgPSBpbm5l
clNoYWRvdy5nZXRFbGVtZW50QnlJZCgnaW5uZXJQYXJlbnQnKTsKKworICAgICAgICBjb25zdCB0
YXJnZXQgPSBpbm5lclNoYWRvdy5nZXRFbGVtZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgICAgIGFz
c2VydF90cnVlKGlubmVyUGFyZW50IGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnQpOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRQYXJlbnQsIGlubmVyUGFyZW50KTsKKyAgICAg
ICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0TGVmdCwgNjApOworICAgICAgICBhc3NlcnRf
ZXF1YWxzKHRhcmdldC5vZmZzZXRUb3AsIDQwKTsKKworICAgICAgICBvdXRlckhvc3QucmVtb3Zl
KCk7CisgICAgfSwgYG9mZnNldFBhcmVudCBtdXN0IHJldHVybiB0aGUgb2Zmc2V0IHBhcmVudCBp
biB0aGUgc2FtZSBzaGFkb3cgdHJlZSBvZiAke21vZGV9IG1vZGUgZXZlbiB3aGVuIG5lc3RlZGAp
OworfQorCit0ZXN0T2Zmc2V0UGFyZW50SW5OZXN0ZWRTaGFkb3dUcmVlcygnb3BlbicpOwordGVz
dE9mZnNldFBhcmVudEluTmVzdGVkU2hhZG93VHJlZXMoJ2Nsb3NlZCcpOworCitmdW5jdGlvbiB0
ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50QXNzaWduZWRUb1Nsb3RJbnNpZGVPZmZzZXRQYXJlbnQo
bW9kZSkgeworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICBjb25zdCBob3N0ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGhvc3QuaW5uZXJIVE1MID0gJzxk
aXYgaWQ9InRhcmdldCI+PC9kaXY+JworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaG9z
dCk7CisgICAgICAgIHRoaXMuYWRkX2NsZWFudXAoKCkgPT4gaG9zdC5yZW1vdmUoKSk7CisgICAg
ICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7bW9kZX0pOworICAgICAg
ICBzaGFkb3dSb290LmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7
IHBhZGRpbmctbGVmdDogODVweDsgcGFkZGluZy10b3A6IDQ1cHg7Ij48c2xvdD48L3Nsb3Q+PC9k
aXY+JzsKKyAgICAgICAgY29uc3QgdGFyZ2V0ID0gaG9zdC5xdWVyeVNlbGVjdG9yKCcjdGFyZ2V0
Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldFBhcmVudCwgY29udGFpbmVy
KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0TGVmdCwgODUpOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRUb3AsIDQ1KTsKKyAgICB9LCBgb2Zmc2V0UGFy
ZW50IG11c3Qgc2tpcCBvZmZzZXQgcGFyZW50cyBvZiBhbiBlbGVtZW50IHdoZW4gdGhlIGNvbnRl
eHQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgc2xvdCBpbiBhIHNoYWRvdyB0cmVlIG9mICR7bW9k
ZX0gbW9kZWApOworfQorCit0ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50QXNzaWduZWRUb1Nsb3RJ
bnNpZGVPZmZzZXRQYXJlbnQoJ29wZW4nKTsKK3Rlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRBc3Np
Z25lZFRvU2xvdEluc2lkZU9mZnNldFBhcmVudCgnY2xvc2VkJyk7CisKK2Z1bmN0aW9uIHRlc3RP
ZmZzZXRQYXJlbnRPbkVsZW1lbnRBc3NpZ25lZFRvU2xvdEluc2lkZU5lc3RlZE9mZnNldFBhcmVu
dHMobW9kZSkgeworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICBjb25zdCBob3N0ID0g
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CisgICAgICAgIGhvc3QuaW5uZXJIVE1MID0g
JzxkaXYgaWQ9InRhcmdldCIgc3R5bGU9ImJvcmRlcjpzb2xpZCAxcHggYmx1ZTsiPmhpPC9kaXY+
JzsKKyAgICAgICAgY29uc3QgcHJldmlvdXNCbG9jayA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworICAgICAgICBwcmV2aW91c0Jsb2NrLnN0eWxlLmhlaWdodCA9ICcxMnB4JzsKKyAg
ICAgICAgY29udGFpbmVyLmFwcGVuZChwcmV2aW91c0Jsb2NrLCBob3N0KTsKKyAgICAgICAgdGhp
cy5hZGRfY2xlYW51cCgoKSA9PiBjb250YWluZXIuaW5uZXJIVE1MID0gJycpOworICAgICAgICBj
b25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFkb3coe21vZGV9KTsKKyAgICAgICAgc2hh
ZG93Um9vdC5pbm5lckhUTUwgPSAnPHNlY3Rpb24gc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsg
bWFyZ2luLWxlZnQ6IDIwcHg7IG1hcmdpbi10b3A6IDEwMHB4OyBiYWNrZ3JvdW5kOiAjY2NjIj48
ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMTBweDsgbGVmdDogMTBweDsiPjxz
bG90Pjwvc2xvdD48L2Rpdj48L3NlY3Rpb24+JzsKKyAgICAgICAgY29uc3QgdGFyZ2V0ID0gaG9z
dC5xdWVyeVNlbGVjdG9yKCcjdGFyZ2V0Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0
Lm9mZnNldFBhcmVudCwgY29udGFpbmVyKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQu
b2Zmc2V0TGVmdCwgMzApOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRUb3As
IDEyMik7CisgICAgfSwgYG9mZnNldFBhcmVudCBtdXN0IHNraXAgb2Zmc2V0IHBhcmVudHMgb2Yg
YW4gZWxlbWVudCB3aGVuIHRoZSBjb250ZXh0IG9iamVjdCBpcyBhc3NpZ25lZCB0byBhIHNsb3Qg
aW4gYSBzaGFkb3cgdHJlZSBvZiAke21vZGV9IG1vZGVgKTsKK30KKwordGVzdE9mZnNldFBhcmVu
dE9uRWxlbWVudEFzc2lnbmVkVG9TbG90SW5zaWRlTmVzdGVkT2Zmc2V0UGFyZW50cygnb3Blbicp
OwordGVzdE9mZnNldFBhcmVudE9uRWxlbWVudEFzc2lnbmVkVG9TbG90SW5zaWRlTmVzdGVkT2Zm
c2V0UGFyZW50cygnY2xvc2VkJyk7CisKK2Z1bmN0aW9uIHRlc3RPZmZzZXRQYXJlbnRPbkVsZW1l
bnRBc3NpZ25lZFRvU2xvdEluc2lkZU5lc3RlZFNoYWRvd1RyZWVzKG1vZGUpIHsKKyAgICB0ZXN0
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc3Qgb3V0ZXJIb3N0ID0gZG9jdW1lbnQuY3JlYXRl
RWxlbWVudCgnc2VjdGlvbicpOworICAgICAgICBvdXRlckhvc3QuaW5uZXJIVE1MID0gJzxkaXYg
aWQ9InRhcmdldCI+PC9kaXY+JzsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG91dGVy
SG9zdCk7CisgICAgICAgIHRoaXMuYWRkX2NsZWFudXAoKCkgPT4gb3V0ZXJIb3N0LnJlbW92ZSgp
KTsKKyAgICAgICAgY29uc3Qgb3V0ZXJTaGFkb3cgPSBvdXRlckhvc3QuYXR0YWNoU2hhZG93KHtt
b2RlfSk7CisgICAgICAgIG91dGVyU2hhZG93LmlubmVySFRNTCA9ICc8c2VjdGlvbiBzdHlsZT0i
cG9zaXRpb246IGFic29sdXRlOyB0b3A6IDQwcHg7IGxlZnQ6IDUwcHg7Ij48ZGl2IGlkPSJpbm5l
ckhvc3QiPjxzbG90Pjwvc2xvdD48L2Rpdj48L3NlY3Rpb24+JzsKKworICAgICAgICBjb25zdCBp
bm5lclNoYWRvdyA9IG91dGVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCdpbm5lckhvc3QnKS5hdHRh
Y2hTaGFkb3coe21vZGV9KTsKKyAgICAgICAgaW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxkaXYg
c3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAyMDBweDsgbWFyZ2luLWxlZnQ6IDEwMHB4
OyI+PHNsb3Q+PC9zbG90PjwvZGl2Pic7CisKKyAgICAgICAgY29uc3QgdGFyZ2V0ID0gb3V0ZXJI
b3N0LnF1ZXJ5U2VsZWN0b3IoJyN0YXJnZXQnKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJn
ZXQub2Zmc2V0UGFyZW50LCBjb250YWluZXIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdl
dC5vZmZzZXRMZWZ0LCAxNTApOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRU
b3AsIDI0MCk7CisgICAgICAgIG91dGVySG9zdC5yZW1vdmUoKTsKKyAgICB9LCBgb2Zmc2V0UGFy
ZW50IG11c3Qgc2tpcCBvZmZzZXQgcGFyZW50cyBvZiBhbiBlbGVtZW50IHdoZW4gdGhlIGNvbnRl
eHQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgc2xvdCBpbiBuZXN0ZWQgc2hhZG93IHRyZWVzIG9m
ICR7bW9kZX0gbW9kZWApOworfQorCit0ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50QXNzaWduZWRU
b1Nsb3RJbnNpZGVOZXN0ZWRTaGFkb3dUcmVlcygnb3BlbicpOwordGVzdE9mZnNldFBhcmVudE9u
RWxlbWVudEFzc2lnbmVkVG9TbG90SW5zaWRlTmVzdGVkU2hhZG93VHJlZXMoJ2Nsb3NlZCcpOwor
CitmdW5jdGlvbiB0ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50SW5zaWRlU2hhZG93VHJlZVdpdGhv
dXRPZmZzZXRQYXJlbnQobW9kZSkgeworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICBj
b25zdCBvdXRlckhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWN0aW9uJyk7CisgICAg
ICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChvdXRlckhvc3QpOworICAgICAgICB0aGlzLmFkZF9j
bGVhbnVwKCgpID0+IG91dGVySG9zdC5yZW1vdmUoKSk7CisgICAgICAgIGNvbnN0IG91dGVyU2hh
ZG93ID0gb3V0ZXJIb3N0LmF0dGFjaFNoYWRvdyh7bW9kZX0pOworICAgICAgICBvdXRlclNoYWRv
dy5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaW5uZXJIb3N0Ij48ZGl2IGlkPSJ0YXJnZXQiPjwvZGl2
PjwvZGl2Pic7CisKKyAgICAgICAgY29uc3QgaW5uZXJTaGFkb3cgPSBvdXRlclNoYWRvdy5nZXRF
bGVtZW50QnlJZCgnaW5uZXJIb3N0JykuYXR0YWNoU2hhZG93KHttb2RlfSk7CisgICAgICAgIGlu
bmVyU2hhZG93LmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRv
cDogMjNweDsgbGVmdDogMjRweDsiPjxzbG90Pjwvc2xvdD48L2Rpdj4nOworCisgICAgICAgIGNv
bnN0IHRhcmdldCA9IG91dGVyU2hhZG93LnF1ZXJ5U2VsZWN0b3IoJyN0YXJnZXQnKTsKKyAgICAg
ICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0UGFyZW50LCBjb250YWluZXIpOworICAgICAg
ICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRMZWZ0LCAyNCk7CisgICAgICAgIGFzc2VydF9l
cXVhbHModGFyZ2V0Lm9mZnNldFRvcCwgMjMpOworICAgIH0sIGBvZmZzZXRQYXJlbnQgbXVzdCBm
aW5kIHRoZSBmaXJzdCBvZmZzZXQgcGFyZW50IHdoaWNoIGlzIGEgc2hhZG93LWluY2x1ZGluZyBh
bmNlc3RvciBvZiB0aGUgY29udGV4dCBvYmplY3QgZXZlbiBzb21lIHNoYWRvdyB0cmVlIG9mICR7
bW9kZX0gbW9kZSBkaWQgbm90IGhhdmUgYW55IG9mZnNldCBwYXJlbnRgKTsKK30KKwordGVzdE9m
ZnNldFBhcmVudE9uRWxlbWVudEluc2lkZVNoYWRvd1RyZWVXaXRob3V0T2Zmc2V0UGFyZW50KCdv
cGVuJyk7Cit0ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50SW5zaWRlU2hhZG93VHJlZVdpdGhvdXRP
ZmZzZXRQYXJlbnQoJ2Nsb3NlZCcpOworCitmdW5jdGlvbiB0ZXN0T2Zmc2V0UGFyZW50T25VbmFz
c2lnbmVkQ2hpbGQobW9kZSkgeworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICBjb25z
dCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VjdGlvbicpOworICAgICAgICBob3N0
LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJ0YXJnZXQiPjwvZGl2Pic7CisgICAgICAgIHRoaXMuYWRk
X2NsZWFudXAoKCkgPT4gaG9zdC5yZW1vdmUoKSk7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRD
aGlsZChob3N0KTsKKyAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93
KHttb2RlfSk7CisgICAgICAgIHNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gJzxzZWN0aW9uIHN0eWxl
PSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNTBweDsgbGVmdDogNTBweDsiPmNvbnRlbnQ8L3Nl
Y3Rpb24+JzsKKyAgICAgICAgY29uc3QgdGFyZ2V0ID0gaG9zdC5xdWVyeVNlbGVjdG9yKCcjdGFy
Z2V0Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldFBhcmVudCwgbnVsbCk7
CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldExlZnQsIDApOworICAgICAgICBh
c3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRUb3AsIDApOworICAgIH0sIGBvZmZzZXRQYXJlbnQg
bXVzdCByZXR1cm4gbnVsbCBvbiBhIGNoaWxkIGVsZW1lbnQgb2YgYSBzaGFkb3cgaG9zdCBmb3Ig
dGhlIHNoYWRvdyB0cmVlIGluICR7bW9kZX0gbW9kZSB3aGljaCBpcyBub3QgYXNzaWduZWQgdG8g
YW55IHNsb3RgKTsKK30KKwordGVzdE9mZnNldFBhcmVudE9uVW5hc3NpZ25lZENoaWxkKCdvcGVu
Jyk7Cit0ZXN0T2Zmc2V0UGFyZW50T25VbmFzc2lnbmVkQ2hpbGQoJ2Nsb3NlZCcpOworCitmdW5j
dGlvbiB0ZXN0T2Zmc2V0UGFyZW50T25Bc3NpZ25lZENoaWxkTm90SW5GbGF0VHJlZShtb2RlKSB7
CisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnN0IG91dGVySG9zdCA9IGRvY3Vt
ZW50LmNyZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nKTsKKyAgICAgICAgb3V0ZXJIb3N0LmlubmVySFRN
TCA9ICc8ZGl2IGlkPSJ0YXJnZXQiPjwvZGl2Pic7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRD
aGlsZChvdXRlckhvc3QpOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVwKCgpID0+IG91dGVySG9z
dC5yZW1vdmUoKSk7CisgICAgICAgIGNvbnN0IG91dGVyU2hhZG93ID0gb3V0ZXJIb3N0LmF0dGFj
aFNoYWRvdyh7bW9kZX0pOworICAgICAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwgPSAnPGRpdiBp
ZD0iaW5uZXJIb3N0Ij48ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNTBweDsg
bGVmdDogNTBweDsiPjxzbG90Pjwvc2xvdD48L2Rpdj48L2Rpdj4nOworCisgICAgICAgIGNvbnN0
IGlubmVyU2hhZG93ID0gb3V0ZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoJ2lubmVySG9zdCcpLmF0
dGFjaFNoYWRvdyh7bW9kZX0pOworICAgICAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPGRp
dj5jb250ZW50PC9kaXY+JzsKKworICAgICAgICBjb25zdCB0YXJnZXQgPSBvdXRlckhvc3QucXVl
cnlTZWxlY3RvcignI3RhcmdldCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZz
ZXRQYXJlbnQsIG51bGwpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRMZWZ0
LCAwKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0VG9wLCAwKTsKKyAgICB9
LCBgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIG51bGwgb24gYSBjaGlsZCBlbGVtZW50IG9mIGEg
c2hhZG93IGhvc3QgZm9yIHRoZSBzaGFkb3cgdHJlZSBpbiAke21vZGV9IG1vZGUgd2hpY2ggaXMg
bm90IGluIHRoZSBmbGF0IHRyZWVgKTsKK30KKwordGVzdE9mZnNldFBhcmVudE9uQXNzaWduZWRD
aGlsZE5vdEluRmxhdFRyZWUoJ29wZW4nKTsKK3Rlc3RPZmZzZXRQYXJlbnRPbkFzc2lnbmVkQ2hp
bGROb3RJbkZsYXRUcmVlKCdjbG9zZWQnKTsKKworPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAyMzkwOTUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg4MywyNyArODgzLDY3
IEBACiAgICAgcmV0dXJuIHN1YnBpeGVsTWV0cmljc0VuYWJsZWQoZG9jdW1lbnQpID8gdmFsdWUg
OiByb3VuZFN0cmF0ZWd5ID09IFJvdW5kID8gcm91bmQodmFsdWUpIDogZmxvb3IodmFsdWUpOwog
fQogCitzdGF0aWMgZG91YmxlIGFkanVzdE9mZnNldEZvclpvb21BbmRTdWJwaXhlbExheW91dChS
ZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIsIGNvbnN0IExheW91dFVuaXQmIG9mZnNldCkK
K3sKKyAgICBMYXlvdXRVbml0IG9mZnNldExlZnQgPSBzdWJwaXhlbE1ldHJpY3NFbmFibGVkKHJl
bmRlcmVyLT5kb2N1bWVudCgpKSA/IG9mZnNldCA6IExheW91dFVuaXQocm91bmRUb0ludChvZmZz
ZXQpKTsKKyAgICBkb3VibGUgem9vbUZhY3RvciA9IDE7CisgICAgZG91YmxlIG9mZnNldExlZnRB
ZGp1c3RlZFdpdGhab29tID0gYWRqdXN0Rm9yTG9jYWxab29tKG9mZnNldExlZnQsICpyZW5kZXJl
ciwgem9vbUZhY3Rvcik7CisgICAgcmV0dXJuIGNvbnZlcnRUb05vblN1YnBpeGVsVmFsdWVJZk5l
ZWRlZChvZmZzZXRMZWZ0QWRqdXN0ZWRXaXRoWm9vbSwgcmVuZGVyZXItPmRvY3VtZW50KCksIHpv
b21GYWN0b3IgPT0gMSA/IEZsb29yIDogUm91bmQpOworfQorCitkb3VibGUgRWxlbWVudDo6b2Zm
c2V0TGVmdEZvckJpbmRpbmdzKCkKK3sKKyAgICBhdXRvIHBhcmVudCA9IG1ha2VSZWZQdHIob2Zm
c2V0UGFyZW50KCkpOworICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlzSW5TaGFkb3dUcmVl
KCkpCisgICAgICAgIHJldHVybiBvZmZzZXRMZWZ0KCk7CisgICAgYXV0byByZXRhcmdldGVkT2Zm
c2V0UGFyZW50ID0gbWFrZVJlZih0cmVlU2NvcGUoKS5yZXRhcmdldEVsZW1lbnRUb1Njb3BlKCpw
YXJlbnQpKTsKKyAgICBpZiAocGFyZW50LmdldCgpID09IHJldGFyZ2V0ZWRPZmZzZXRQYXJlbnQu
cHRyKCkpCisgICAgICAgIHJldHVybiBvZmZzZXRMZWZ0KCk7CisKKyAgICBkb3VibGUgb2Zmc2V0
ID0gb2Zmc2V0TGVmdCgpOworICAgIFJlZlB0cjxFbGVtZW50PiBjdXJyZW50RWxlbWVudCA9IHBh
cmVudDsKKyAgICAvLyBGSVhNRTogb2Zmc2V0IHBhcmVudCBtYXkgc2tpcCByZXRhcmdldGVkT2Zm
c2V0UGFyZW50J3MgdHJlZSBzY29wZS4KKyAgICB3aGlsZSAoY3VycmVudEVsZW1lbnQgJiYgJmN1
cnJlbnRFbGVtZW50LT50cmVlU2NvcGUoKSAhPSAmcmV0YXJnZXRlZE9mZnNldFBhcmVudC0+dHJl
ZVNjb3BlKCkpIHsKKyAgICAgICAgb2Zmc2V0ICs9IGN1cnJlbnRFbGVtZW50LT5vZmZzZXRMZWZ0
KCk7CisgICAgICAgIGN1cnJlbnRFbGVtZW50ID0gY3VycmVudEVsZW1lbnQtPm9mZnNldFBhcmVu
dCgpOworICAgIH0KKworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKIGRvdWJsZSBFbGVtZW50Ojpv
ZmZzZXRMZWZ0KCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdT
dHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSBy
ZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0TGVmdCA9
IHN1YnBpeGVsTWV0cmljc0VuYWJsZWQocmVuZGVyZXItPmRvY3VtZW50KCkpID8gcmVuZGVyZXIt
Pm9mZnNldExlZnQoKSA6IExheW91dFVuaXQocm91bmRUb0ludChyZW5kZXJlci0+b2Zmc2V0TGVm
dCgpKSk7Ci0gICAgICAgIGRvdWJsZSB6b29tRmFjdG9yID0gMTsKLSAgICAgICAgZG91YmxlIG9m
ZnNldExlZnRBZGp1c3RlZFdpdGhab29tID0gYWRqdXN0Rm9yTG9jYWxab29tKG9mZnNldExlZnQs
ICpyZW5kZXJlciwgem9vbUZhY3Rvcik7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9Ob25TdWJw
aXhlbFZhbHVlSWZOZWVkZWQob2Zmc2V0TGVmdEFkanVzdGVkV2l0aFpvb20sIHJlbmRlcmVyLT5k
b2N1bWVudCgpLCB6b29tRmFjdG9yID09IDEgPyBGbG9vciA6IFJvdW5kKTsKLSAgICB9CisgICAg
aWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IHJlbmRlckJveE1vZGVsT2JqZWN0
KCkpCisgICAgICAgIHJldHVybiBhZGp1c3RPZmZzZXRGb3Jab29tQW5kU3VicGl4ZWxMYXlvdXQo
cmVuZGVyZXIsIHJlbmRlcmVyLT5vZmZzZXRMZWZ0KCkpOwogICAgIHJldHVybiAwOwogfQogCitk
b3VibGUgRWxlbWVudDo6b2Zmc2V0VG9wRm9yQmluZGluZ3MoKQoreworICAgIGF1dG8gcGFyZW50
ID0gbWFrZVJlZlB0cihvZmZzZXRQYXJlbnQoKSk7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVu
dC0+aXNJblNoYWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldFRvcCgpOworICAgIGF1
dG8gcmV0YXJnZXRlZE9mZnNldFBhcmVudCA9IG1ha2VSZWYodHJlZVNjb3BlKCkucmV0YXJnZXRF
bGVtZW50VG9TY29wZSgqcGFyZW50KSk7CisgICAgaWYgKHBhcmVudC5nZXQoKSA9PSByZXRhcmdl
dGVkT2Zmc2V0UGFyZW50LnB0cigpKQorICAgICAgICByZXR1cm4gb2Zmc2V0VG9wKCk7CisKKyAg
ICBkb3VibGUgb2Zmc2V0ID0gb2Zmc2V0VG9wKCk7CisgICAgUmVmUHRyPEVsZW1lbnQ+IGN1cnJl
bnRFbGVtZW50ID0gcGFyZW50OworICAgIC8vIEZJWE1FOiBvZmZzZXQgcGFyZW50IG1heSBza2lw
IHJldGFyZ2V0ZWRPZmZzZXRQYXJlbnQncyB0cmVlIHNjb3BlLgorICAgIHdoaWxlIChjdXJyZW50
RWxlbWVudCAmJiAmY3VycmVudEVsZW1lbnQtPnRyZWVTY29wZSgpICE9ICZyZXRhcmdldGVkT2Zm
c2V0UGFyZW50LT50cmVlU2NvcGUoKSkgeworICAgICAgICBvZmZzZXQgKz0gY3VycmVudEVsZW1l
bnQtPm9mZnNldFRvcCgpOworICAgICAgICBjdXJyZW50RWxlbWVudCA9IGN1cnJlbnRFbGVtZW50
LT5vZmZzZXRQYXJlbnQoKTsKKyAgICB9CisKKyAgICByZXR1cm4gb2Zmc2V0OworfQorCiBkb3Vi
bGUgRWxlbWVudDo6b2Zmc2V0VG9wKCkKIHsKICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dEln
bm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwotICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCog
cmVuZGVyZXIgPSByZW5kZXJCb3hNb2RlbE9iamVjdCgpKSB7Ci0gICAgICAgIExheW91dFVuaXQg
b2Zmc2V0VG9wID0gc3VicGl4ZWxNZXRyaWNzRW5hYmxlZChyZW5kZXJlci0+ZG9jdW1lbnQoKSkg
PyByZW5kZXJlci0+b2Zmc2V0VG9wKCkgOiBMYXlvdXRVbml0KHJvdW5kVG9JbnQocmVuZGVyZXIt
Pm9mZnNldFRvcCgpKSk7Ci0gICAgICAgIGRvdWJsZSB6b29tRmFjdG9yID0gMTsKLSAgICAgICAg
ZG91YmxlIG9mZnNldFRvcEFkanVzdGVkV2l0aFpvb20gPSBhZGp1c3RGb3JMb2NhbFpvb20ob2Zm
c2V0VG9wLCAqcmVuZGVyZXIsIHpvb21GYWN0b3IpOwotICAgICAgICByZXR1cm4gY29udmVydFRv
Tm9uU3VicGl4ZWxWYWx1ZUlmTmVlZGVkKG9mZnNldFRvcEFkanVzdGVkV2l0aFpvb20sIHJlbmRl
cmVyLT5kb2N1bWVudCgpLCB6b29tRmFjdG9yID09IDEgPyBGbG9vciA6IFJvdW5kKTsKLSAgICB9
CisgICAgaWYgKFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IHJlbmRlckJveE1vZGVs
T2JqZWN0KCkpCisgICAgICAgIHJldHVybiBhZGp1c3RPZmZzZXRGb3Jab29tQW5kU3VicGl4ZWxM
YXlvdXQocmVuZGVyZXIsIHJlbmRlcmVyLT5vZmZzZXRUb3AoKSk7CiAgICAgcmV0dXJuIDA7CiB9
CiAKQEAgLTkyNywxMiArOTY3LDE0IEBACiAgICAgcmV0dXJuIDA7CiB9CiAKLUVsZW1lbnQqIEVs
ZW1lbnQ6OmJpbmRpbmdzT2Zmc2V0UGFyZW50KCkKK0VsZW1lbnQqIEVsZW1lbnQ6Om9mZnNldFBh
cmVudEZvckJpbmRpbmdzKCkKIHsKICAgICBFbGVtZW50KiBlbGVtZW50ID0gb2Zmc2V0UGFyZW50
KCk7CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5pc0luU2hhZG93VHJlZSgpKQogICAg
ICAgICByZXR1cm4gZWxlbWVudDsKLSAgICByZXR1cm4gZWxlbWVudC0+Y29udGFpbmluZ1NoYWRv
d1Jvb3QoKS0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpVc2VyQWdlbnQgPyBudWxscHRyIDog
ZWxlbWVudDsKKyAgICB3aGlsZSAoZWxlbWVudCAmJiAhaXNEZXNjZW5kYW50T3JTaGFkb3dEZXNj
ZW5kYW50T2YoJmVsZW1lbnQtPnJvb3ROb2RlKCkpKQorICAgICAgICBlbGVtZW50ID0gZWxlbWVu
dC0+b2Zmc2V0UGFyZW50KCk7CisgICAgcmV0dXJuIGVsZW1lbnQ7CiB9CiAKIEVsZW1lbnQqIEVs
ZW1lbnQ6Om9mZnNldFBhcmVudCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHJldmlzaW9uIDIz
OTA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1Niw3ICsxNTYsOSBAQAogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsQnlMaW5lcyhp
bnQgbGluZXMpOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc2Nyb2xsQnlQYWdlcyhpbnQgcGFn
ZXMpOwogCisgICAgV0VCQ09SRV9FWFBPUlQgZG91YmxlIG9mZnNldExlZnRGb3JCaW5kaW5ncygp
OwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBvZmZzZXRMZWZ0KCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgZG91YmxlIG9mZnNldFRvcEZvckJpbmRpbmdzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQg
ZG91YmxlIG9mZnNldFRvcCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBvZmZzZXRXaWR0
aCgpOwogICAgIFdFQkNPUkVfRVhQT1JUIGRvdWJsZSBvZmZzZXRIZWlnaHQoKTsKQEAgLTE2NSw3
ICsxNjcsNyBAQAogCiAgICAgLy8gRklYTUU6IFJlcGxhY2UgdXNlcyBvZiBvZmZzZXRQYXJlbnQg
aW4gdGhlIHBsYXRmb3JtIHdpdGggY2FsbHMKICAgICAvLyB0byB0aGUgcmVuZGVyIGxheWVyIGFu
ZCBtZXJnZSBiaW5kaW5nc09mZnNldFBhcmVudCBhbmQgb2Zmc2V0UGFyZW50LgotICAgIFdFQkNP
UkVfRVhQT1JUIEVsZW1lbnQqIGJpbmRpbmdzT2Zmc2V0UGFyZW50KCk7CisgICAgV0VCQ09SRV9F
WFBPUlQgRWxlbWVudCogb2Zmc2V0UGFyZW50Rm9yQmluZGluZ3MoKTsKIAogICAgIGNvbnN0IEVs
ZW1lbnQqIHJvb3RFbGVtZW50KCkgY29uc3Q7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9U
cmVlU2NvcGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUu
Y3BwCShyZXZpc2lvbiAyMzkwOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDcgKzE3OSw2IEBACiAgICAgbV9lbGVtZW50c0J5TmFt
ZS0+cmVtb3ZlKG5hbWUsIGVsZW1lbnQpOwogfQogCi0KIE5vZGUmIFRyZWVTY29wZTo6cmV0YXJn
ZXRUb1Njb3BlKE5vZGUmIG5vZGUpIGNvbnN0CiB7CiAgICAgYXV0byYgc2NvcGUgPSBub2RlLnRy
ZWVTY29wZSgpOwpAQCAtMjExLDYgKzIxMCwxOCBAQAogICAgIHJldHVybiAqc2hhZG93Um9vdElu
TG93ZXN0Q29tbW9uVHJlZVNjb3BlLmhvc3QoKTsKIH0KIAorRWxlbWVudCYgVHJlZVNjb3BlOjpy
ZXRhcmdldEVsZW1lbnRUb1Njb3BlKEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0Cit7CisgICAgYXV0
byYgc2NvcGUgPSBlbGVtZW50LnRyZWVTY29wZSgpOworICAgIGlmIChMSUtFTFkodGhpcyA9PSAm
c2NvcGUgfHwgIWVsZW1lbnQuaXNJblNoYWRvd1RyZWUoKSkpCisgICAgICAgIHJldHVybiBlbGVt
ZW50OworICAgIEFTU0VSVChpczxTaGFkb3dSb290PihzY29wZS5yb290Tm9kZSgpKSk7CisKKyAg
ICBhdXRvJiBub2RlID0gcmV0YXJnZXRUb1Njb3BlKGVsZW1lbnQpOworICAgIEFTU0VSVCgmbm9k
ZSA9PSAmZWxlbWVudCB8fCBub2RlLnNoYWRvd1Jvb3QoKSk7CisgICAgcmV0dXJuIGRvd25jYXN0
PEVsZW1lbnQ+KG5vZGUpOworfQorCiBOb2RlKiBUcmVlU2NvcGU6OmFuY2VzdG9yTm9kZUluVGhp
c1Njb3BlKE5vZGUqIG5vZGUpIGNvbnN0CiB7CiAgICAgZm9yICg7IG5vZGU7IG5vZGUgPSBub2Rl
LT5zaGFkb3dIb3N0KCkpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vVHJlZVNjb3BlLmgJKHJldmlzaW9uIDIz
OTA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9UcmVlU2NvcGUuaAkod29ya2luZyBjb3B5KQpA
QCAtNzUsNiArNzUsNyBAQAogCiAgICAgLy8gaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNy
ZXRhcmdldAogICAgIE5vZGUmIHJldGFyZ2V0VG9TY29wZShOb2RlJikgY29uc3Q7CisgICAgRWxl
bWVudCYgcmV0YXJnZXRFbGVtZW50VG9TY29wZShFbGVtZW50JiBlbGVtZW50KSBjb25zdDsKIAog
ICAgIFdFQkNPUkVfRVhQT1JUIE5vZGUqIGFuY2VzdG9yTm9kZUluVGhpc1Njb3BlKE5vZGUqKSBj
b25zdDsKICAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBhbmNlc3RvckVsZW1lbnRJblRoaXNT
Y29wZShFbGVtZW50KikgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVt
ZW50LmlkbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50Lmlk
bAkocmV2aXNpb24gMjM5MDk1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5p
ZGwJKHdvcmtpbmcgY29weSkKQEAgLTUyLDkgKzUyLDkgQEAKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgYm9vbGVhbiBpc0NvbnRlbnRFZGl0YWJsZTsKIAogICAgIC8vIEV4dGVuc2lvbnMgZnJvbSBD
U1NPTS12aWV3IHNwZWNpZmljYXRpb24gKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS12
aWV3LyNleHRlbnNpb25zLXRvLXRoZS1odG1sZWxlbWVudC1pbnRlcmZhY2UpLgotICAgIFtJbXBs
ZW1lbnRlZEFzPWJpbmRpbmdzT2Zmc2V0UGFyZW50XSByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVu
dD8gb2Zmc2V0UGFyZW50OwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgb2Zmc2V0VG9w
OyAvLyBGSVhNRTogU2hvdWxkIGJlIG9mIHR5cGUgbG9uZy4KLSAgICByZWFkb25seSBhdHRyaWJ1
dGUgZG91YmxlIG9mZnNldExlZnQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgb2YgdHlwZSBsb25nLgor
ICAgIFtJbXBsZW1lbnRlZEFzPW9mZnNldFBhcmVudEZvckJpbmRpbmdzXSByZWFkb25seSBhdHRy
aWJ1dGUgRWxlbWVudD8gb2Zmc2V0UGFyZW50OworICAgIFtJbXBsZW1lbnRlZEFzPW9mZnNldFRv
cEZvckJpbmRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG9mZnNldFRvcDsgLy8gRklY
TUU6IFNob3VsZCBiZSBvZiB0eXBlIGxvbmcuCisgICAgW0ltcGxlbWVudGVkQXM9b2Zmc2V0TGVm
dEZvckJpbmRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG9mZnNldExlZnQ7IC8vIEZJ
WE1FOiBTaG91bGQgYmUgb2YgdHlwZSBsb25nLgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3Vi
bGUgb2Zmc2V0V2lkdGg7IC8vIEZJWE1FOiBTaG91bGQgYmUgb2YgdHlwZSBsb25nLgogICAgIHJl
YWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgb2Zmc2V0SGVpZ2h0OyAvLyBGSVhNRTogU2hvdWxkIGJl
IG9mIHR5cGUgbG9uZy4KIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUVs
ZW1lbnQubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUVs
ZW1lbnQubW0JKHJldmlzaW9uIDIzOTA5NSkKKysrIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0RP
TS9ET01FbGVtZW50Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC04MSwxMyArODEsMTMgQEAKIC0gKGlu
dClvZmZzZXRMZWZ0CiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRl
OwotICAgIHJldHVybiB1bndyYXAoKnNlbGYpLm9mZnNldExlZnQoKTsKKyAgICByZXR1cm4gdW53
cmFwKCpzZWxmKS5vZmZzZXRMZWZ0Rm9yQmluZGluZ3MoKTsKIH0KIAogLSAoaW50KW9mZnNldFRv
cAogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1
cm4gdW53cmFwKCpzZWxmKS5vZmZzZXRUb3AoKTsKKyAgICByZXR1cm4gdW53cmFwKCpzZWxmKS5v
ZmZzZXRUb3BGb3JCaW5kaW5ncygpOwogfQogCiAtIChpbnQpb2Zmc2V0V2lkdGgKQEAgLTE2NSw3
ICsxNjUsNyBAQAogLSAoRE9NRWxlbWVudCAqKW9mZnNldFBhcmVudAogewogICAgIFdlYkNvcmU6
OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKLSAgICByZXR1cm4ga2l0KHVud3JhcCgqc2Vs
ZikuYmluZGluZ3NPZmZzZXRQYXJlbnQoKSk7CisgICAgcmV0dXJuIGtpdCh1bndyYXAoKnNlbGYp
Lm9mZnNldFBhcmVudEZvckJpbmRpbmdzKCkpOwogfQogCiAtIChOU1N0cmluZyAqKWlubmVySFRN
TAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357478</attachid>
            <date>2018-12-17 14:39:06 -0800</date>
            <delta_ts>2018-12-17 17:01:27 -0800</delta_ts>
            <desc>Fixes the implementation</desc>
            <filename>bug-157437-20181217143905.patch</filename>
            <type>text/plain</type>
            <size>24798</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzOTA5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE4LTEyLTE3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIG9mZnNldExlZnQgYW5kIG9mZnNl
dFBhcmVudCBzaG91bGQgYWRqdXN0IGFjcm9zcyBzaGFkb3cgYm91bmRhcmllcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NDM3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yNjE1NDAyMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGVzIG91ciBpbXBsZW1lbnRhdGlvbiBvZiBvZmZzZXRMZWZ0
LCBvZmZzZXRUb3AsIGFuZCBvZmZzZXRQYXJlbnQgdG8gbWF0Y2ggdGhlIGxhdGVzdCBkaXNjdXNz
aW9uIGluIENTUyBXRy4KKyAgICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViY29t
cG9uZW50cy9pc3N1ZXMvNDk3IGFuZCBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYmNvbXBvbmVu
dHMvaXNzdWVzLzc2MworCisgICAgICAgIFRoZSBsYXRlc3QgY29uc2Vuc3VzIGlzIHRvIHVzZSB0
aGUgcmV0YXJnZXRpbmcgYWxnb3JpdGhtIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI3Jl
dGFyZ2V0KS4gSW4gcHJhY3RpY2UsCisgICAgICAgIHRoaXMgd291bGQgbWVhbiB0aGF0IHdlIG5l
ZWQgdG8ga2VlcCB3YWxraW5nIHVwIHRoZSBvZmZzZXQgcGFyZW50IGFuY2VzdG9ycyB1bnRpbCB3
ZSBmaW5kIHRoZSBvbmUgd2hpY2ggaXMgaW4KKyAgICAgICAgdGhlIHNhbWUgdHJlZSBhcyBhIHNo
YWRvdy1pbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGNvbnRleHQgb2JqZWN0LgorCisgICAgICAg
IEZvciBleGFtcGxlLCBpZiBhIG5vZGUgKHRoZSBjb250ZXh0IG9iamVjdCBvZiBvZmZzZXRUb3As
IG9mZnNldExlZnQsIG9mZnNldFBhcmVudCkgd2FzIGFzc2lnbmVkIHRvIGEgc2xvdCBpbnNpZGUK
KyAgICAgICAgYSBzaGFkb3cgdHJlZSBhbmQgaXRzIG9mZnNldCBwYXJlbnQgd2FzIGluIHRoZSBz
aGFkb3cgdHJlZSwgd2UgbmVlZCB0byB3YWxrIHVwIHRvIGl0cyBvZmZzZXQgcGFyZW50LCBhbmQg
dGhlbiBpdHMKKyAgICAgICAgb2Zmc2V0IHBhcmVudCwgZXRjLi4uIHVudGlsIHdlIGZpbmQgdGhl
IG9mZnNldCBwYXJlbnQgd2hpY2ggaXMgaW4gdGhlIHNhbWUgdHJlZSBhcyB0aGUgY29udGV4dCBv
YmplY3QuCisKKyAgICAgICAgTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgdGhhdCB0aGUgY29udGV4
dCBvYmplY3QgaXMgaW5zaWRlIGEgc2hhZG93IHRyZWUgd2hpY2ggZG9lcyBub3QgaGF2ZSBpdHMg
b3duIG9mZnNldCBwYXJlbnQuCisgICAgICAgIChlLmcuIGFsbCBlbGVtZW50cyBoYXZlIHBvc2l0
aW9uOiBzdGF0aWMpIEZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjb25zaWRlciBub3QganVz
dCBvZmZzZXQgcGFyZW50IGluIHRoZSBzYW1lCisgICAgICAgIHRyZWUgYXMgdGhlIGNvbnRleHQg
b2JqZWN0IGJ1dCBhcyB3ZWxsIGFzIGFueSBvZmZzZXQgcGFyZW50IHdoaWNoIGlzIGluIGFuY2Vz
dG9yIHRyZWVzIG9mIHRoZSBjb250ZXh0IG9iamVjdHMuCisKKyAgICAgICAgVGVzdDogZmFzdC9z
aGFkb3ctZG9tL29mZnNldFBhcmVudC1hY3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMuaHRtbAorCisg
ICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0T2Zmc2V0
Rm9yWm9vbUFuZFN1YnBpeGVsTGF5b3V0KTogRXh0cmFjdGVkIHRvIHNoYXJlIGNvZGUgYmV0d2Vl
biBvZmZzZXRMZWZ0IGFuZCBvZmZzZXRUb3AuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0QW5j
ZXN0b3JUcmVlU2NvcGVBc0hhc2hTZXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6Om9mZnNldExlZnRGb3JCaW5kaW5ncyk6IEFkZGVkLiBTdW1zIHVwIG9mZnNldExlZnQncyB1
bnRpbCBpdCBmaW5kcyB0aGUgZmlyc3Qgb2Zmc2V0IHBhcmVudAorICAgICAgICB3aGljaCBpcyBh
IHNoYWRvdy1pbmNsdWRpbmcgYW5jZXN0b3IgKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8j
Y29uY2VwdC1zaGFkb3ctaW5jbHVkaW5nLWFuY2VzdG9yKS4KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Om9mZnNldExlZnQpOiBOb3cgdXNlcyBhZGp1c3RPZmZzZXRGb3Jab29tQW5kU3VicGl4
ZWxMYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpvZmZzZXRUb3BGb3JCaW5kaW5n
cyk6IEFkZGVkLiBMaWtlIG9mZnNldExlZnRGb3JCaW5kaW5ncywgdGhpcyBmdW5jdGlvbiBzdW1z
IHVwIG9mZnNldFRvcCdzCisgICAgICAgIHVudGlsIGl0IGZpbmRzIHRoZSBmaXJzdCBvZmZzZXQg
cGFyZW50IHdoaWNoIGlzIGEgc2hhZG93LWluY2x1ZGluZyBhbmNlc3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6Om9mZnNldFRvcCk6IE5vdyB1c2VzIGFkanVzdE9mZnNldEZvclpvb21B
bmRTdWJwaXhlbExheW91dC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om9mZnNldFBhcmVu
dEZvckJpbmRpbmdzKTogUmVuYW1lZCBmcm9tIGJpbmRpbmdzT2Zmc2V0UGFyZW50IHRvIGJlIGNv
bnNpc3RlbnQgd2l0aCBvdGhlcgorICAgICAgICBmdW5jdGlvbnMgbWVhbnQgdG8gYmUgdXNlZCBm
b3IgYmluZGluZ3MgY29kZS4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEVsZW1lbnQuaWRsOgorCiAyMDE4LTEyLTEwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrIGlzIGludm9rZWQgZHVyaW5n
IHRoZSByZW1vdmFsIG9mIHRoZSBlbGVtZW50IGluc2lkZSBhbm90aGVyIGVsZW1lbnQncyBjb25u
ZWN0ZWRDYWxsYmFjawpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjM5MDk1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
ODMsMjcgKzg4Myw3OSBAQCBzdGF0aWMgZG91YmxlIGNvbnZlcnRUb05vblN1YnBpeGVsVmFsdWVJ
CiAgICAgcmV0dXJuIHN1YnBpeGVsTWV0cmljc0VuYWJsZWQoZG9jdW1lbnQpID8gdmFsdWUgOiBy
b3VuZFN0cmF0ZWd5ID09IFJvdW5kID8gcm91bmQodmFsdWUpIDogZmxvb3IodmFsdWUpOwogfQog
Ci1kb3VibGUgRWxlbWVudDo6b2Zmc2V0TGVmdCgpCitzdGF0aWMgZG91YmxlIGFkanVzdE9mZnNl
dEZvclpvb21BbmRTdWJwaXhlbExheW91dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IExheW91dFVuaXQmIG9mZnNldCkKK3sKKyAgICBMYXlvdXRVbml0IG9mZnNldExlZnQg
PSBzdWJwaXhlbE1ldHJpY3NFbmFibGVkKHJlbmRlcmVyLT5kb2N1bWVudCgpKSA/IG9mZnNldCA6
IExheW91dFVuaXQocm91bmRUb0ludChvZmZzZXQpKTsKKyAgICBkb3VibGUgem9vbUZhY3RvciA9
IDE7CisgICAgZG91YmxlIG9mZnNldExlZnRBZGp1c3RlZFdpdGhab29tID0gYWRqdXN0Rm9yTG9j
YWxab29tKG9mZnNldExlZnQsICpyZW5kZXJlciwgem9vbUZhY3Rvcik7CisgICAgcmV0dXJuIGNv
bnZlcnRUb05vblN1YnBpeGVsVmFsdWVJZk5lZWRlZChvZmZzZXRMZWZ0QWRqdXN0ZWRXaXRoWm9v
bSwgcmVuZGVyZXItPmRvY3VtZW50KCksIHpvb21GYWN0b3IgPT0gMSA/IEZsb29yIDogUm91bmQp
OworfQorCitzdGF0aWMgSGFzaFNldDxUcmVlU2NvcGUqPiBjb2xsZWN0QW5jZXN0b3JUcmVlU2Nv
cGVBc0hhc2hTZXQoTm9kZSYgbm9kZSkKK3sKKyAgICBIYXNoU2V0PFRyZWVTY29wZSo+IGFuY2Vz
dG9yczsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnRTY29wZSA9ICZub2RlLnRyZWVTY29wZSgpOyBj
dXJyZW50U2NvcGU7IGN1cnJlbnRTY29wZSA9IGN1cnJlbnRTY29wZS0+cGFyZW50VHJlZVNjb3Bl
KCkpCisgICAgICAgIGFuY2VzdG9ycy5hZGQoY3VycmVudFNjb3BlKTsKKyAgICByZXR1cm4gYW5j
ZXN0b3JzOworfQorCitkb3VibGUgRWxlbWVudDo6b2Zmc2V0TGVmdEZvckJpbmRpbmdzKCkKIHsK
ICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwot
ICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSByZW5kZXJCb3hNb2RlbE9i
amVjdCgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0TGVmdCA9IHN1YnBpeGVsTWV0cmlj
c0VuYWJsZWQocmVuZGVyZXItPmRvY3VtZW50KCkpID8gcmVuZGVyZXItPm9mZnNldExlZnQoKSA6
IExheW91dFVuaXQocm91bmRUb0ludChyZW5kZXJlci0+b2Zmc2V0TGVmdCgpKSk7Ci0gICAgICAg
IGRvdWJsZSB6b29tRmFjdG9yID0gMTsKLSAgICAgICAgZG91YmxlIG9mZnNldExlZnRBZGp1c3Rl
ZFdpdGhab29tID0gYWRqdXN0Rm9yTG9jYWxab29tKG9mZnNldExlZnQsICpyZW5kZXJlciwgem9v
bUZhY3Rvcik7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9Ob25TdWJwaXhlbFZhbHVlSWZOZWVk
ZWQob2Zmc2V0TGVmdEFkanVzdGVkV2l0aFpvb20sIHJlbmRlcmVyLT5kb2N1bWVudCgpLCB6b29t
RmFjdG9yID09IDEgPyBGbG9vciA6IFJvdW5kKTsKKworICAgIGF1dG8gcGFyZW50ID0gbWFrZVJl
ZlB0cihvZmZzZXRQYXJlbnQoKSk7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNJblNo
YWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldExlZnQoKTsKKworICAgIEFTU0VSVCgm
cGFyZW50LT5kb2N1bWVudCgpID09ICZkb2N1bWVudCgpKTsKKyAgICBpZiAoJnBhcmVudC0+dHJl
ZVNjb3BlKCkgPT0gJnRyZWVTY29wZSgpKQorICAgICAgICByZXR1cm4gb2Zmc2V0TGVmdCgpOwor
CisgICAgZG91YmxlIG9mZnNldCA9IG9mZnNldExlZnQoKTsKKyAgICBhdXRvIGFuY2VzdG9yVHJl
ZVNjb3BlcyA9IGNvbGxlY3RBbmNlc3RvclRyZWVTY29wZUFzSGFzaFNldCgqdGhpcyk7CisgICAg
d2hpbGUgKHBhcmVudCAmJiAhYW5jZXN0b3JUcmVlU2NvcGVzLmNvbnRhaW5zKCZwYXJlbnQtPnRy
ZWVTY29wZSgpKSkgeworICAgICAgICBvZmZzZXQgKz0gcGFyZW50LT5vZmZzZXRMZWZ0KCk7Cisg
ICAgICAgIHBhcmVudCA9IHBhcmVudC0+b2Zmc2V0UGFyZW50KCk7CiAgICAgfQorCisgICAgcmV0
dXJuIG9mZnNldDsKK30KKworZG91YmxlIEVsZW1lbnQ6Om9mZnNldExlZnQoKQoreworICAgIGRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYg
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IHJlbmRlckJveE1vZGVsT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiBhZGp1c3RPZmZzZXRGb3Jab29tQW5kU3VicGl4ZWxMYXlvdXQocmVu
ZGVyZXIsIHJlbmRlcmVyLT5vZmZzZXRMZWZ0KCkpOwogICAgIHJldHVybiAwOwogfQogCi1kb3Vi
bGUgRWxlbWVudDo6b2Zmc2V0VG9wKCkKK2RvdWJsZSBFbGVtZW50OjpvZmZzZXRUb3BGb3JCaW5k
aW5ncygpCiB7CiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKLSAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gcmVuZGVy
Qm94TW9kZWxPYmplY3QoKSkgewotICAgICAgICBMYXlvdXRVbml0IG9mZnNldFRvcCA9IHN1YnBp
eGVsTWV0cmljc0VuYWJsZWQocmVuZGVyZXItPmRvY3VtZW50KCkpID8gcmVuZGVyZXItPm9mZnNl
dFRvcCgpIDogTGF5b3V0VW5pdChyb3VuZFRvSW50KHJlbmRlcmVyLT5vZmZzZXRUb3AoKSkpOwot
ICAgICAgICBkb3VibGUgem9vbUZhY3RvciA9IDE7Ci0gICAgICAgIGRvdWJsZSBvZmZzZXRUb3BB
ZGp1c3RlZFdpdGhab29tID0gYWRqdXN0Rm9yTG9jYWxab29tKG9mZnNldFRvcCwgKnJlbmRlcmVy
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05vblN1YnBpeGVsVmFsdWVJ
Zk5lZWRlZChvZmZzZXRUb3BBZGp1c3RlZFdpdGhab29tLCByZW5kZXJlci0+ZG9jdW1lbnQoKSwg
em9vbUZhY3RvciA9PSAxID8gRmxvb3IgOiBSb3VuZCk7CisKKyAgICBhdXRvIHBhcmVudCA9IG1h
a2VSZWZQdHIob2Zmc2V0UGFyZW50KCkpOworICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlz
SW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiBvZmZzZXRUb3AoKTsKKworICAgIEFTU0VS
VCgmcGFyZW50LT5kb2N1bWVudCgpID09ICZkb2N1bWVudCgpKTsKKyAgICBpZiAoJnBhcmVudC0+
dHJlZVNjb3BlKCkgPT0gJnRyZWVTY29wZSgpKQorICAgICAgICByZXR1cm4gb2Zmc2V0VG9wKCk7
CisKKyAgICBkb3VibGUgb2Zmc2V0ID0gb2Zmc2V0VG9wKCk7CisgICAgYXV0byBhbmNlc3RvclRy
ZWVTY29wZXMgPSBjb2xsZWN0QW5jZXN0b3JUcmVlU2NvcGVBc0hhc2hTZXQoKnRoaXMpOworICAg
IHdoaWxlIChwYXJlbnQgJiYgIWFuY2VzdG9yVHJlZVNjb3Blcy5jb250YWlucygmcGFyZW50LT50
cmVlU2NvcGUoKSkpIHsKKyAgICAgICAgb2Zmc2V0ICs9IHBhcmVudC0+b2Zmc2V0VG9wKCk7Cisg
ICAgICAgIHBhcmVudCA9IHBhcmVudC0+b2Zmc2V0UGFyZW50KCk7CiAgICAgfQorCisgICAgcmV0
dXJuIG9mZnNldDsKK30KKworZG91YmxlIEVsZW1lbnQ6Om9mZnNldFRvcCgpCit7CisgICAgZG9j
dW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gcmVuZGVyQm94TW9kZWxPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIGFkanVzdE9mZnNldEZvclpvb21BbmRTdWJwaXhlbExheW91dChyZW5k
ZXJlciwgcmVuZGVyZXItPm9mZnNldFRvcCgpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTI3
LDEyICs5NzksMTQgQEAgZG91YmxlIEVsZW1lbnQ6Om9mZnNldEhlaWdodCgpCiAgICAgcmV0dXJu
IDA7CiB9CiAKLUVsZW1lbnQqIEVsZW1lbnQ6OmJpbmRpbmdzT2Zmc2V0UGFyZW50KCkKK0VsZW1l
bnQqIEVsZW1lbnQ6Om9mZnNldFBhcmVudEZvckJpbmRpbmdzKCkKIHsKICAgICBFbGVtZW50KiBl
bGVtZW50ID0gb2Zmc2V0UGFyZW50KCk7CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5p
c0luU2hhZG93VHJlZSgpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICByZXR1cm4gZWxl
bWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKS0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpV
c2VyQWdlbnQgPyBudWxscHRyIDogZWxlbWVudDsKKyAgICB3aGlsZSAoZWxlbWVudCAmJiAhaXNE
ZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YoJmVsZW1lbnQtPnJvb3ROb2RlKCkpKQorICAg
ICAgICBlbGVtZW50ID0gZWxlbWVudC0+b2Zmc2V0UGFyZW50KCk7CisgICAgcmV0dXJuIGVsZW1l
bnQ7CiB9CiAKIEVsZW1lbnQqIEVsZW1lbnQ6Om9mZnNldFBhcmVudCgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHJldmlzaW9uIDIzOTA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY3JvbGxCeUxpbmVzKGludCBsaW5lcyk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzY3JvbGxCeVBhZ2VzKGludCBwYWdlcyk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBk
b3VibGUgb2Zmc2V0TGVmdEZvckJpbmRpbmdzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgZG91Ymxl
IG9mZnNldExlZnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgb2Zmc2V0VG9wRm9yQmlu
ZGluZ3MoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgb2Zmc2V0VG9wKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgZG91YmxlIG9mZnNldFdpZHRoKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIG9mZnNldEhlaWdodCgpOwpAQCAtMTY1LDcgKzE2Nyw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IEZJWE1FOiBSZXBsYWNlIHVzZXMgb2Ygb2Zmc2V0UGFyZW50IGluIHRoZSBwbGF0Zm9ybSB3aXRo
IGNhbGxzCiAgICAgLy8gdG8gdGhlIHJlbmRlciBsYXllciBhbmQgbWVyZ2UgYmluZGluZ3NPZmZz
ZXRQYXJlbnQgYW5kIG9mZnNldFBhcmVudC4KLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBi
aW5kaW5nc09mZnNldFBhcmVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIG9mZnNl
dFBhcmVudEZvckJpbmRpbmdzKCk7CiAKICAgICBjb25zdCBFbGVtZW50KiByb290RWxlbWVudCgp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmlkbAkocmV2aXNpb24g
MjM5MDk1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDkgKzUyLDkgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBp
c0NvbnRlbnRFZGl0YWJsZTsKIAogICAgIC8vIEV4dGVuc2lvbnMgZnJvbSBDU1NPTS12aWV3IHNw
ZWNpZmljYXRpb24gKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS12aWV3LyNleHRlbnNp
b25zLXRvLXRoZS1odG1sZWxlbWVudC1pbnRlcmZhY2UpLgotICAgIFtJbXBsZW1lbnRlZEFzPWJp
bmRpbmdzT2Zmc2V0UGFyZW50XSByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudD8gb2Zmc2V0UGFy
ZW50OwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgb2Zmc2V0VG9wOyAvLyBGSVhNRTog
U2hvdWxkIGJlIG9mIHR5cGUgbG9uZy4KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG9m
ZnNldExlZnQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgb2YgdHlwZSBsb25nLgorICAgIFtJbXBsZW1l
bnRlZEFzPW9mZnNldFBhcmVudEZvckJpbmRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVu
dD8gb2Zmc2V0UGFyZW50OworICAgIFtJbXBsZW1lbnRlZEFzPW9mZnNldFRvcEZvckJpbmRpbmdz
XSByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG9mZnNldFRvcDsgLy8gRklYTUU6IFNob3VsZCBi
ZSBvZiB0eXBlIGxvbmcuCisgICAgW0ltcGxlbWVudGVkQXM9b2Zmc2V0TGVmdEZvckJpbmRpbmdz
XSByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG9mZnNldExlZnQ7IC8vIEZJWE1FOiBTaG91bGQg
YmUgb2YgdHlwZSBsb25nLgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgb2Zmc2V0V2lk
dGg7IC8vIEZJWE1FOiBTaG91bGQgYmUgb2YgdHlwZSBsb25nLgogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBkb3VibGUgb2Zmc2V0SGVpZ2h0OyAvLyBGSVhNRTogU2hvdWxkIGJlIG9mIHR5cGUgbG9u
Zy4KIApJbmRleDogU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZwkocmV2aXNpb24gMjM5Mjg5KQor
KysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTggQEAKKzIwMTgtMTItMTcgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+
CisKKyAgICAgICAgb2Zmc2V0TGVmdCBhbmQgb2Zmc2V0UGFyZW50IHNob3VsZCBhZGp1c3QgYWNy
b3NzIHNoYWRvdyBib3VuZGFyaWVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNTc0MzcKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzI2MTU0MDIxPgor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSAqZm9y
QmluZGluZ3MgdmFyaWFudHMgb2Ygb2Zmc2V0TGVmdCwgb2Zmc2V0VG9wLCBhbmQgb2Zmc2V0UGFy
ZW50LgorCisgICAgICAgICogRE9NL0RPTUVsZW1lbnQubW06CisgICAgICAgICgtW0RPTUVsZW1l
bnQgb2Zmc2V0TGVmdF0pOgorICAgICAgICAoLVtET01FbGVtZW50IG9mZnNldFRvcF0pOgorICAg
ICAgICAoLVtET01FbGVtZW50IG9mZnNldFBhcmVudF0pOgorCiAyMDE4LTEyLTE3ICBaYWxhbiBC
dWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCBidWlsZCBmaXgu
CkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NRWxlbWVudC5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9ET00vRE9NRWxlbWVudC5tbQkocmV2aXNp
b24gMjM5MDk1KQorKysgU291cmNlL1dlYktpdExlZ2FjeS9tYWMvRE9NL0RPTUVsZW1lbnQubW0J
KHdvcmtpbmcgY29weSkKQEAgLTgxLDEzICs4MSwxMyBAQCAtIChET01DU1NTdHlsZURlY2xhcmF0
aW9uICopc3R5bGUKIC0gKGludClvZmZzZXRMZWZ0CiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhy
ZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiB1bndyYXAoKnNlbGYpLm9mZnNldExlZnQo
KTsKKyAgICByZXR1cm4gdW53cmFwKCpzZWxmKS5vZmZzZXRMZWZ0Rm9yQmluZGluZ3MoKTsKIH0K
IAogLSAoaW50KW9mZnNldFRvcAogewogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0
ZSBzdGF0ZTsKLSAgICByZXR1cm4gdW53cmFwKCpzZWxmKS5vZmZzZXRUb3AoKTsKKyAgICByZXR1
cm4gdW53cmFwKCpzZWxmKS5vZmZzZXRUb3BGb3JCaW5kaW5ncygpOwogfQogCiAtIChpbnQpb2Zm
c2V0V2lkdGgKQEAgLTE2NSw3ICsxNjUsNyBAQCAtIChpbnQpc2Nyb2xsSGVpZ2h0CiAtIChET01F
bGVtZW50ICopb2Zmc2V0UGFyZW50CiB7CiAgICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0
YXRlIHN0YXRlOwotICAgIHJldHVybiBraXQodW53cmFwKCpzZWxmKS5iaW5kaW5nc09mZnNldFBh
cmVudCgpKTsKKyAgICByZXR1cm4ga2l0KHVud3JhcCgqc2VsZikub2Zmc2V0UGFyZW50Rm9yQmlu
ZGluZ3MoKSk7CiB9CiAKIC0gKE5TU3RyaW5nICopaW5uZXJIVE1MCkluZGV4OiBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lv
biAyMzkwOTYpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxNiBAQAorMjAxOC0xMi0xNyAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBvZmZzZXRMZWZ0IGFuZCBvZmZzZXRQYXJlbnQgc2hvdWxkIGFkanVzdCBhY3Jv
c3Mgc2hhZG93IGJvdW5kYXJpZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE1NzQzNworICAgICAgICA8cmRhcjovL3Byb2JsZW0vMjYxNTQwMjE+CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgYSBX
M0Mgc3R5bGUgdGVzdGhhcm5lc3MuanMgdGVzdC4KKworICAgICAgICAqIGZhc3Qvc2hhZG93LWRv
bS9vZmZzZXRQYXJlbnQtYWNyb3NzLXNoYWRvdy1ib3VuZGFyaWVzLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogZmFzdC9zaGFkb3ctZG9tL29mZnNldFBhcmVudC1hY3Jvc3Mtc2hhZG93
LWJvdW5kYXJpZXMuaHRtbDogQWRkZWQuCisKIDIwMTgtMTItMTAgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgY29ubmVjdGVkQ2FsbGJhY2sgaXMgaW52b2tlZCBk
dXJpbmcgdGhlIHJlbW92YWwgb2YgdGhlIGVsZW1lbnQgaW5zaWRlIGFub3RoZXIgZWxlbWVudCdz
IGNvbm5lY3RlZENhbGxiYWNrCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L3NoYWRvdy1kb20vb2Zm
c2V0UGFyZW50LWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy1leHBlY3RlZC50eHQKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9zaGFkb3ctZG9tL29mZnNldFBhcmVudC1hY3Jvc3Mtc2hh
ZG93LWJvdW5kYXJpZXMtZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3Rz
L2Zhc3Qvc2hhZG93LWRvbS9vZmZzZXRQYXJlbnQtYWNyb3NzLXNoYWRvdy1ib3VuZGFyaWVzLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE4IEBACisKK1BBU1Mgb2Zmc2V0
UGFyZW50IG11c3QgcmV0dXJuIHRoZSBvZmZzZXQgcGFyZW50IGluIHRoZSBzYW1lIHNoYWRvdyB0
cmVlIG9mIG9wZW4gbW9kZSAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIHRoZSBvZmZz
ZXQgcGFyZW50IGluIHRoZSBzYW1lIHNoYWRvdyB0cmVlIG9mIGNsb3NlZCBtb2RlIAorUEFTUyBv
ZmZzZXRQYXJlbnQgbXVzdCByZXR1cm4gdGhlIG9mZnNldCBwYXJlbnQgaW4gdGhlIHNhbWUgc2hh
ZG93IHRyZWUgb2Ygb3BlbiBtb2RlIGV2ZW4gd2hlbiBuZXN0ZWQgCitQQVNTIG9mZnNldFBhcmVu
dCBtdXN0IHJldHVybiB0aGUgb2Zmc2V0IHBhcmVudCBpbiB0aGUgc2FtZSBzaGFkb3cgdHJlZSBv
ZiBjbG9zZWQgbW9kZSBldmVuIHdoZW4gbmVzdGVkIAorUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCBz
a2lwIG9mZnNldCBwYXJlbnRzIG9mIGFuIGVsZW1lbnQgd2hlbiB0aGUgY29udGV4dCBvYmplY3Qg
aXMgYXNzaWduZWQgdG8gYSBzbG90IGluIGEgc2hhZG93IHRyZWUgb2Ygb3BlbiBtb2RlIAorUEFT
UyBvZmZzZXRQYXJlbnQgbXVzdCBza2lwIG9mZnNldCBwYXJlbnRzIG9mIGFuIGVsZW1lbnQgd2hl
biB0aGUgY29udGV4dCBvYmplY3QgaXMgYXNzaWduZWQgdG8gYSBzbG90IGluIGEgc2hhZG93IHRy
ZWUgb2YgY2xvc2VkIG1vZGUgCitQQVNTIG9mZnNldFBhcmVudCBtdXN0IHNraXAgb2Zmc2V0IHBh
cmVudHMgb2YgYW4gZWxlbWVudCB3aGVuIHRoZSBjb250ZXh0IG9iamVjdCBpcyBhc3NpZ25lZCB0
byBhIHNsb3QgaW4gYSBzaGFkb3cgdHJlZSBvZiBvcGVuIG1vZGUgCitQQVNTIG9mZnNldFBhcmVu
dCBtdXN0IHNraXAgb2Zmc2V0IHBhcmVudHMgb2YgYW4gZWxlbWVudCB3aGVuIHRoZSBjb250ZXh0
IG9iamVjdCBpcyBhc3NpZ25lZCB0byBhIHNsb3QgaW4gYSBzaGFkb3cgdHJlZSBvZiBjbG9zZWQg
bW9kZSAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3Qgc2tpcCBvZmZzZXQgcGFyZW50cyBvZiBhbiBl
bGVtZW50IHdoZW4gdGhlIGNvbnRleHQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgc2xvdCBpbiBu
ZXN0ZWQgc2hhZG93IHRyZWVzIG9mIG9wZW4gbW9kZSAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3Qg
c2tpcCBvZmZzZXQgcGFyZW50cyBvZiBhbiBlbGVtZW50IHdoZW4gdGhlIGNvbnRleHQgb2JqZWN0
IGlzIGFzc2lnbmVkIHRvIGEgc2xvdCBpbiBuZXN0ZWQgc2hhZG93IHRyZWVzIG9mIGNsb3NlZCBt
b2RlIAorUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCBmaW5kIHRoZSBmaXJzdCBvZmZzZXQgcGFyZW50
IHdoaWNoIGlzIGEgc2hhZG93LWluY2x1ZGluZyBhbmNlc3RvciBvZiB0aGUgY29udGV4dCBvYmpl
Y3QgZXZlbiBzb21lIHNoYWRvdyB0cmVlIG9mIG9wZW4gbW9kZSBkaWQgbm90IGhhdmUgYW55IG9m
ZnNldCBwYXJlbnQgCitQQVNTIG9mZnNldFBhcmVudCBtdXN0IGZpbmQgdGhlIGZpcnN0IG9mZnNl
dCBwYXJlbnQgd2hpY2ggaXMgYSBzaGFkb3ctaW5jbHVkaW5nIGFuY2VzdG9yIG9mIHRoZSBjb250
ZXh0IG9iamVjdCBldmVuIHNvbWUgc2hhZG93IHRyZWUgb2YgY2xvc2VkIG1vZGUgZGlkIG5vdCBo
YXZlIGFueSBvZmZzZXQgcGFyZW50IAorUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCByZXR1cm4gbnVs
bCBvbiBhIGNoaWxkIGVsZW1lbnQgb2YgYSBzaGFkb3cgaG9zdCBmb3IgdGhlIHNoYWRvdyB0cmVl
IGluIG9wZW4gbW9kZSB3aGljaCBpcyBub3QgYXNzaWduZWQgdG8gYW55IHNsb3QgCitQQVNTIG9m
ZnNldFBhcmVudCBtdXN0IHJldHVybiBudWxsIG9uIGEgY2hpbGQgZWxlbWVudCBvZiBhIHNoYWRv
dyBob3N0IGZvciB0aGUgc2hhZG93IHRyZWUgaW4gY2xvc2VkIG1vZGUgd2hpY2ggaXMgbm90IGFz
c2lnbmVkIHRvIGFueSBzbG90IAorUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCByZXR1cm4gbnVsbCBv
biBhIGNoaWxkIGVsZW1lbnQgb2YgYSBzaGFkb3cgaG9zdCBmb3IgdGhlIHNoYWRvdyB0cmVlIGlu
IG9wZW4gbW9kZSB3aGljaCBpcyBub3QgaW4gdGhlIGZsYXQgdHJlZSAKK1BBU1Mgb2Zmc2V0UGFy
ZW50IG11c3QgcmV0dXJuIG51bGwgb24gYSBjaGlsZCBlbGVtZW50IG9mIGEgc2hhZG93IGhvc3Qg
Zm9yIHRoZSBzaGFkb3cgdHJlZSBpbiBjbG9zZWQgbW9kZSB3aGljaCBpcyBub3QgaW4gdGhlIGZs
YXQgdHJlZSAKKwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9zaGFkb3ctZG9tL29mZnNldFBhcmVu
dC1hY3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9mYXN0L3NoYWRvdy1kb20vb2Zmc2V0UGFyZW50LWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy5o
dG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL2Zhc3Qvc2hhZG93LWRvbS9vZmZzZXRQ
YXJlbnQtYWNyb3NzLXNoYWRvdy1ib3VuZGFyaWVzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxOTAgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4KKzxtZXRhIG5hbWU9
ImF1dGhvciIgdGl0bGU9IlJ5b3N1a2UgTml3YSIgaHJlZj0ibWFpbHRvOnJuaXdhQHdlYmtpdC5v
cmciPgorPG1ldGEgbmFtZT0iYXNzZXJ0IiBjb250ZW50PSJvZmZzZXRQYXJlbnQgc2hvdWxkIG9u
bHkgcmV0dXJuIG5vZGVzIHRoYXQgYXJlIHNoYWRvdyBpbmNsdWRpbmcgYW5jZXN0b3IiPgorPGxp
bmsgcmVsPSJoZWxwIiBocmVmPSJodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvY3Nzb20tdmlldy8j
ZG9tLWh0bWxlbGVtZW50LW9mZnNldHBhcmVudCI+Cis8bGluayByZWw9ImhlbHAiIGhyZWY9Imh0
dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8jY29uY2VwdC1zaGFkb3ctaW5jbHVkaW5nLWluY2x1
c2l2ZS1hbmNlc3RvciI+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNz
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3Ny
ZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InJlc291cmNlcy9ldmVudC1wYXRoLXRl
c3QtaGVscGVycy5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxkaXYgaWQ9ImxvZyI+
PC9kaXY+Cis8ZGl2IGlkPSJjb250YWluZXIiIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmUiPjwv
ZGl2PgorPHNjcmlwdD4KKworY29uc3QgY29udGFpbmVyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoJ2NvbnRhaW5lcicpOworCitmdW5jdGlvbiB0ZXN0T2Zmc2V0UGFyZW50SW5TaGFkb3dUcmVl
KG1vZGUpIHsKKyAgICB0ZXN0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc3QgaG9zdCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hp
bGQoaG9zdCk7CisgICAgICAgIHRoaXMuYWRkX2NsZWFudXAoKCkgPT4gaG9zdC5yZW1vdmUoKSk7
CisgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7bW9kZX0pOwor
ICAgICAgICBzaGFkb3dSb290LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJyZWxhdGl2ZVBhcmVudCIg
c3R5bGU9InBvc2l0aW9uOiByZWxhdGl2ZTsgcGFkZGluZy1sZWZ0OiAxMDBweDsgcGFkZGluZy10
b3A6IDcwcHg7Ij48ZGl2IGlkPSJ0YXJnZXQiPjwvZGl2PjwvZGl2Pic7CisgICAgICAgIGNvbnN0
IHJlbGF0aXZlUGFyZW50ID0gc2hhZG93Um9vdC5nZXRFbGVtZW50QnlJZCgncmVsYXRpdmVQYXJl
bnQnKTsKKworICAgICAgICBhc3NlcnRfdHJ1ZShyZWxhdGl2ZVBhcmVudCBpbnN0YW5jZW9mIEhU
TUxEaXZFbGVtZW50KTsKKyAgICAgICAgY29uc3QgdGFyZ2V0ID0gc2hhZG93Um9vdC5nZXRFbGVt
ZW50QnlJZCgndGFyZ2V0Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldFBh
cmVudCwgcmVsYXRpdmVQYXJlbnQpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZz
ZXRMZWZ0LCAxMDApOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRUb3AsIDcw
KTsKKyAgICB9LCBgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIHRoZSBvZmZzZXQgcGFyZW50IGlu
IHRoZSBzYW1lIHNoYWRvdyB0cmVlIG9mICR7bW9kZX0gbW9kZWApOworfQorCit0ZXN0T2Zmc2V0
UGFyZW50SW5TaGFkb3dUcmVlKCdvcGVuJyk7Cit0ZXN0T2Zmc2V0UGFyZW50SW5TaGFkb3dUcmVl
KCdjbG9zZWQnKTsKKworZnVuY3Rpb24gdGVzdE9mZnNldFBhcmVudEluTmVzdGVkU2hhZG93VHJl
ZXMobW9kZSkgeworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAgICAgICBjb25zdCBvdXRlckhv
c3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWN0aW9uJyk7CisgICAgICAgIGNvbnRhaW5l
ci5hcHBlbmRDaGlsZChvdXRlckhvc3QpOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVwKCgpID0+
IG91dGVySG9zdC5yZW1vdmUoKSk7CisgICAgICAgIGNvbnN0IG91dGVyU2hhZG93ID0gb3V0ZXJI
b3N0LmF0dGFjaFNoYWRvdyh7bW9kZX0pOworICAgICAgICBvdXRlclNoYWRvdy5pbm5lckhUTUwg
PSAnPHNlY3Rpb24gaWQ9Im91dGVyUGFyZW50IiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0
b3A6IDUwcHg7IGxlZnQ6IDUwcHg7Ij48L3NlY3Rpb24+JzsKKworICAgICAgICBjb25zdCBpbm5l
ckhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgb3V0ZXJTaGFk
b3cuZmlyc3RDaGlsZC5hcHBlbmRDaGlsZChpbm5lckhvc3QpOworICAgICAgICBjb25zdCBpbm5l
clNoYWRvdyA9IGlubmVySG9zdC5hdHRhY2hTaGFkb3coe21vZGV9KTsKKyAgICAgICAgaW5uZXJT
aGFkb3cuaW5uZXJIVE1MID0gJzxkaXYgaWQ9ImlubmVyUGFyZW50IiBzdHlsZT0icG9zaXRpb246
IHJlbGF0aXZlOyBwYWRkaW5nLWxlZnQ6IDYwcHg7IHBhZGRpbmctdG9wOiA0MHB4OyI+PGRpdiBp
ZD0idGFyZ2V0Ij48L2Rpdj48L2Rpdj4nOworICAgICAgICBjb25zdCBpbm5lclBhcmVudCA9IGlu
bmVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCdpbm5lclBhcmVudCcpOworCisgICAgICAgIGNvbnN0
IHRhcmdldCA9IGlubmVyU2hhZG93LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICAgICAg
YXNzZXJ0X3RydWUoaW5uZXJQYXJlbnQgaW5zdGFuY2VvZiBIVE1MRGl2RWxlbWVudCk7CisgICAg
ICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldFBhcmVudCwgaW5uZXJQYXJlbnQpOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRMZWZ0LCA2MCk7CisgICAgICAgIGFzc2Vy
dF9lcXVhbHModGFyZ2V0Lm9mZnNldFRvcCwgNDApOworCisgICAgICAgIG91dGVySG9zdC5yZW1v
dmUoKTsKKyAgICB9LCBgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIHRoZSBvZmZzZXQgcGFyZW50
IGluIHRoZSBzYW1lIHNoYWRvdyB0cmVlIG9mICR7bW9kZX0gbW9kZSBldmVuIHdoZW4gbmVzdGVk
YCk7Cit9CisKK3Rlc3RPZmZzZXRQYXJlbnRJbk5lc3RlZFNoYWRvd1RyZWVzKCdvcGVuJyk7Cit0
ZXN0T2Zmc2V0UGFyZW50SW5OZXN0ZWRTaGFkb3dUcmVlcygnY2xvc2VkJyk7CisKK2Z1bmN0aW9u
IHRlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRBc3NpZ25lZFRvU2xvdEluc2lkZU9mZnNldFBhcmVu
dChtb2RlKSB7CisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnN0IGhvc3QgPSBk
b2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgaG9zdC5pbm5lckhUTUwgPSAn
PGRpdiBpZD0idGFyZ2V0Ij48L2Rpdj4nCisgICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCho
b3N0KTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBob3N0LnJlbW92ZSgpKTsKKyAg
ICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNoU2hhZG93KHttb2RlfSk7CisgICAg
ICAgIHNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOiByZWxhdGl2
ZTsgcGFkZGluZy1sZWZ0OiA4NXB4OyBwYWRkaW5nLXRvcDogNDVweDsiPjxzbG90Pjwvc2xvdD48
L2Rpdj4nOworICAgICAgICBjb25zdCB0YXJnZXQgPSBob3N0LnF1ZXJ5U2VsZWN0b3IoJyN0YXJn
ZXQnKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0UGFyZW50LCBjb250YWlu
ZXIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRMZWZ0LCA4NSk7CisgICAg
ICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldFRvcCwgNDUpOworICAgIH0sIGBvZmZzZXRQ
YXJlbnQgbXVzdCBza2lwIG9mZnNldCBwYXJlbnRzIG9mIGFuIGVsZW1lbnQgd2hlbiB0aGUgY29u
dGV4dCBvYmplY3QgaXMgYXNzaWduZWQgdG8gYSBzbG90IGluIGEgc2hhZG93IHRyZWUgb2YgJHtt
b2RlfSBtb2RlYCk7Cit9CisKK3Rlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRBc3NpZ25lZFRvU2xv
dEluc2lkZU9mZnNldFBhcmVudCgnb3BlbicpOwordGVzdE9mZnNldFBhcmVudE9uRWxlbWVudEFz
c2lnbmVkVG9TbG90SW5zaWRlT2Zmc2V0UGFyZW50KCdjbG9zZWQnKTsKKworZnVuY3Rpb24gdGVz
dE9mZnNldFBhcmVudE9uRWxlbWVudEFzc2lnbmVkVG9TbG90SW5zaWRlTmVzdGVkT2Zmc2V0UGFy
ZW50cyhtb2RlKSB7CisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnN0IGhvc3Qg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgaG9zdC5pbm5lckhUTUwg
PSAnPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0iYm9yZGVyOnNvbGlkIDFweCBibHVlOyI+aGk8L2Rp
dj4nOworICAgICAgICBjb25zdCBwcmV2aW91c0Jsb2NrID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgnZGl2Jyk7CisgICAgICAgIHByZXZpb3VzQmxvY2suc3R5bGUuaGVpZ2h0ID0gJzEycHgnOwor
ICAgICAgICBjb250YWluZXIuYXBwZW5kKHByZXZpb3VzQmxvY2ssIGhvc3QpOworICAgICAgICB0
aGlzLmFkZF9jbGVhbnVwKCgpID0+IGNvbnRhaW5lci5pbm5lckhUTUwgPSAnJyk7CisgICAgICAg
IGNvbnN0IHNoYWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7bW9kZX0pOworICAgICAgICBz
aGFkb3dSb290LmlubmVySFRNTCA9ICc8c2VjdGlvbiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZl
OyBtYXJnaW4tbGVmdDogMjBweDsgbWFyZ2luLXRvcDogMTAwcHg7IGJhY2tncm91bmQ6ICNjY2Mi
PjxkaXYgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAxMHB4OyBsZWZ0OiAxMHB4OyI+
PHNsb3Q+PC9zbG90PjwvZGl2Pjwvc2VjdGlvbj4nOworICAgICAgICBjb25zdCB0YXJnZXQgPSBo
b3N0LnF1ZXJ5U2VsZWN0b3IoJyN0YXJnZXQnKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJn
ZXQub2Zmc2V0UGFyZW50LCBjb250YWluZXIpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdl
dC5vZmZzZXRMZWZ0LCAzMCk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldFRv
cCwgMTIyKTsKKyAgICB9LCBgb2Zmc2V0UGFyZW50IG11c3Qgc2tpcCBvZmZzZXQgcGFyZW50cyBv
ZiBhbiBlbGVtZW50IHdoZW4gdGhlIGNvbnRleHQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgc2xv
dCBpbiBhIHNoYWRvdyB0cmVlIG9mICR7bW9kZX0gbW9kZWApOworfQorCit0ZXN0T2Zmc2V0UGFy
ZW50T25FbGVtZW50QXNzaWduZWRUb1Nsb3RJbnNpZGVOZXN0ZWRPZmZzZXRQYXJlbnRzKCdvcGVu
Jyk7Cit0ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50QXNzaWduZWRUb1Nsb3RJbnNpZGVOZXN0ZWRP
ZmZzZXRQYXJlbnRzKCdjbG9zZWQnKTsKKworZnVuY3Rpb24gdGVzdE9mZnNldFBhcmVudE9uRWxl
bWVudEFzc2lnbmVkVG9TbG90SW5zaWRlTmVzdGVkU2hhZG93VHJlZXMobW9kZSkgeworICAgIHRl
c3QoZnVuY3Rpb24gKCkgeworICAgICAgICBjb25zdCBvdXRlckhvc3QgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdzZWN0aW9uJyk7CisgICAgICAgIG91dGVySG9zdC5pbm5lckhUTUwgPSAnPGRp
diBpZD0idGFyZ2V0Ij48L2Rpdj4nOworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQob3V0
ZXJIb3N0KTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBvdXRlckhvc3QucmVtb3Zl
KCkpOworICAgICAgICBjb25zdCBvdXRlclNoYWRvdyA9IG91dGVySG9zdC5hdHRhY2hTaGFkb3co
e21vZGV9KTsKKyAgICAgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxzZWN0aW9uIHN0eWxl
PSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNDBweDsgbGVmdDogNTBweDsiPjxkaXYgaWQ9Imlu
bmVySG9zdCI+PHNsb3Q+PC9zbG90PjwvZGl2Pjwvc2VjdGlvbj4nOworCisgICAgICAgIGNvbnN0
IGlubmVyU2hhZG93ID0gb3V0ZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoJ2lubmVySG9zdCcpLmF0
dGFjaFNoYWRvdyh7bW9kZX0pOworICAgICAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPGRp
diBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDIwMHB4OyBtYXJnaW4tbGVmdDogMTAw
cHg7Ij48c2xvdD48L3Nsb3Q+PC9kaXY+JzsKKworICAgICAgICBjb25zdCB0YXJnZXQgPSBvdXRl
ckhvc3QucXVlcnlTZWxlY3RvcignI3RhcmdldCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRh
cmdldC5vZmZzZXRQYXJlbnQsIGNvbnRhaW5lcik7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFy
Z2V0Lm9mZnNldExlZnQsIDE1MCk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNl
dFRvcCwgMjQwKTsKKyAgICAgICAgb3V0ZXJIb3N0LnJlbW92ZSgpOworICAgIH0sIGBvZmZzZXRQ
YXJlbnQgbXVzdCBza2lwIG9mZnNldCBwYXJlbnRzIG9mIGFuIGVsZW1lbnQgd2hlbiB0aGUgY29u
dGV4dCBvYmplY3QgaXMgYXNzaWduZWQgdG8gYSBzbG90IGluIG5lc3RlZCBzaGFkb3cgdHJlZXMg
b2YgJHttb2RlfSBtb2RlYCk7Cit9CisKK3Rlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRBc3NpZ25l
ZFRvU2xvdEluc2lkZU5lc3RlZFNoYWRvd1RyZWVzKCdvcGVuJyk7Cit0ZXN0T2Zmc2V0UGFyZW50
T25FbGVtZW50QXNzaWduZWRUb1Nsb3RJbnNpZGVOZXN0ZWRTaGFkb3dUcmVlcygnY2xvc2VkJyk7
CisKK2Z1bmN0aW9uIHRlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRJbnNpZGVTaGFkb3dUcmVlV2l0
aG91dE9mZnNldFBhcmVudChtb2RlKSB7CisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAg
IGNvbnN0IG91dGVySG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nKTsKKyAg
ICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG91dGVySG9zdCk7CisgICAgICAgIHRoaXMuYWRk
X2NsZWFudXAoKCkgPT4gb3V0ZXJIb3N0LnJlbW92ZSgpKTsKKyAgICAgICAgY29uc3Qgb3V0ZXJT
aGFkb3cgPSBvdXRlckhvc3QuYXR0YWNoU2hhZG93KHttb2RlfSk7CisgICAgICAgIG91dGVyU2hh
ZG93LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJpbm5lckhvc3QiPjxkaXYgaWQ9InRhcmdldCI+PC9k
aXY+PC9kaXY+JzsKKworICAgICAgICBjb25zdCBpbm5lclNoYWRvdyA9IG91dGVyU2hhZG93Lmdl
dEVsZW1lbnRCeUlkKCdpbm5lckhvc3QnKS5hdHRhY2hTaGFkb3coe21vZGV9KTsKKyAgICAgICAg
aW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsg
dG9wOiAyM3B4OyBsZWZ0OiAyNHB4OyI+PHNsb3Q+PC9zbG90PjwvZGl2Pic7CisKKyAgICAgICAg
Y29uc3QgdGFyZ2V0ID0gb3V0ZXJTaGFkb3cucXVlcnlTZWxlY3RvcignI3RhcmdldCcpOworICAg
ICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRQYXJlbnQsIGNvbnRhaW5lcik7CisgICAg
ICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldExlZnQsIDI0KTsKKyAgICAgICAgYXNzZXJ0
X2VxdWFscyh0YXJnZXQub2Zmc2V0VG9wLCAyMyk7CisgICAgfSwgYG9mZnNldFBhcmVudCBtdXN0
IGZpbmQgdGhlIGZpcnN0IG9mZnNldCBwYXJlbnQgd2hpY2ggaXMgYSBzaGFkb3ctaW5jbHVkaW5n
IGFuY2VzdG9yIG9mIHRoZSBjb250ZXh0IG9iamVjdCBldmVuIHNvbWUgc2hhZG93IHRyZWUgb2Yg
JHttb2RlfSBtb2RlIGRpZCBub3QgaGF2ZSBhbnkgb2Zmc2V0IHBhcmVudGApOworfQorCit0ZXN0
T2Zmc2V0UGFyZW50T25FbGVtZW50SW5zaWRlU2hhZG93VHJlZVdpdGhvdXRPZmZzZXRQYXJlbnQo
J29wZW4nKTsKK3Rlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRJbnNpZGVTaGFkb3dUcmVlV2l0aG91
dE9mZnNldFBhcmVudCgnY2xvc2VkJyk7CisKK2Z1bmN0aW9uIHRlc3RPZmZzZXRQYXJlbnRPblVu
YXNzaWduZWRDaGlsZChtb2RlKSB7CisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIGNv
bnN0IGhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWN0aW9uJyk7CisgICAgICAgIGhv
c3QuaW5uZXJIVE1MID0gJzxkaXYgaWQ9InRhcmdldCI+PC9kaXY+JzsKKyAgICAgICAgdGhpcy5h
ZGRfY2xlYW51cCgoKSA9PiBob3N0LnJlbW92ZSgpKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKGhvc3QpOworICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5hdHRhY2hTaGFk
b3coe21vZGV9KTsKKyAgICAgICAgc2hhZG93Um9vdC5pbm5lckhUTUwgPSAnPHNlY3Rpb24gc3R5
bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA1MHB4OyBsZWZ0OiA1MHB4OyI+Y29udGVudDwv
c2VjdGlvbj4nOworICAgICAgICBjb25zdCB0YXJnZXQgPSBob3N0LnF1ZXJ5U2VsZWN0b3IoJyN0
YXJnZXQnKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0UGFyZW50LCBudWxs
KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0TGVmdCwgMCk7CisgICAgICAg
IGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldFRvcCwgMCk7CisgICAgfSwgYG9mZnNldFBhcmVu
dCBtdXN0IHJldHVybiBudWxsIG9uIGEgY2hpbGQgZWxlbWVudCBvZiBhIHNoYWRvdyBob3N0IGZv
ciB0aGUgc2hhZG93IHRyZWUgaW4gJHttb2RlfSBtb2RlIHdoaWNoIGlzIG5vdCBhc3NpZ25lZCB0
byBhbnkgc2xvdGApOworfQorCit0ZXN0T2Zmc2V0UGFyZW50T25VbmFzc2lnbmVkQ2hpbGQoJ29w
ZW4nKTsKK3Rlc3RPZmZzZXRQYXJlbnRPblVuYXNzaWduZWRDaGlsZCgnY2xvc2VkJyk7CisKK2Z1
bmN0aW9uIHRlc3RPZmZzZXRQYXJlbnRPbkFzc2lnbmVkQ2hpbGROb3RJbkZsYXRUcmVlKG1vZGUp
IHsKKyAgICB0ZXN0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc3Qgb3V0ZXJIb3N0ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgnc2VjdGlvbicpOworICAgICAgICBvdXRlckhvc3QuaW5uZXJI
VE1MID0gJzxkaXYgaWQ9InRhcmdldCI+PC9kaXY+JzsKKyAgICAgICAgY29udGFpbmVyLmFwcGVu
ZENoaWxkKG91dGVySG9zdCk7CisgICAgICAgIHRoaXMuYWRkX2NsZWFudXAoKCkgPT4gb3V0ZXJI
b3N0LnJlbW92ZSgpKTsKKyAgICAgICAgY29uc3Qgb3V0ZXJTaGFkb3cgPSBvdXRlckhvc3QuYXR0
YWNoU2hhZG93KHttb2RlfSk7CisgICAgICAgIG91dGVyU2hhZG93LmlubmVySFRNTCA9ICc8ZGl2
IGlkPSJpbm5lckhvc3QiPjxkaXYgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA1MHB4
OyBsZWZ0OiA1MHB4OyI+PHNsb3Q+PC9zbG90PjwvZGl2PjwvZGl2Pic7CisKKyAgICAgICAgY29u
c3QgaW5uZXJTaGFkb3cgPSBvdXRlclNoYWRvdy5nZXRFbGVtZW50QnlJZCgnaW5uZXJIb3N0Jyku
YXR0YWNoU2hhZG93KHttb2RlfSk7CisgICAgICAgIGlubmVyU2hhZG93LmlubmVySFRNTCA9ICc8
ZGl2PmNvbnRlbnQ8L2Rpdj4nOworCisgICAgICAgIGNvbnN0IHRhcmdldCA9IG91dGVySG9zdC5x
dWVyeVNlbGVjdG9yKCcjdGFyZ2V0Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9m
ZnNldFBhcmVudCwgbnVsbCk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldExl
ZnQsIDApOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRUb3AsIDApOworICAg
IH0sIGBvZmZzZXRQYXJlbnQgbXVzdCByZXR1cm4gbnVsbCBvbiBhIGNoaWxkIGVsZW1lbnQgb2Yg
YSBzaGFkb3cgaG9zdCBmb3IgdGhlIHNoYWRvdyB0cmVlIGluICR7bW9kZX0gbW9kZSB3aGljaCBp
cyBub3QgaW4gdGhlIGZsYXQgdHJlZWApOworfQorCit0ZXN0T2Zmc2V0UGFyZW50T25Bc3NpZ25l
ZENoaWxkTm90SW5GbGF0VHJlZSgnb3BlbicpOwordGVzdE9mZnNldFBhcmVudE9uQXNzaWduZWRD
aGlsZE5vdEluRmxhdFRyZWUoJ2Nsb3NlZCcpOworCis8L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>357503</attachid>
            <date>2018-12-17 17:01:30 -0800</date>
            <delta_ts>2018-12-17 18:32:18 -0800</delta_ts>
            <desc>Fixed GTK+ build failures</desc>
            <filename>bug-157437-20181217170129.patch</filename>
            <type>text/plain</type>
            <size>27161</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzOTA5NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQyIEBACisyMDE4LTEyLTE3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIG9mZnNldExlZnQgYW5kIG9mZnNl
dFBhcmVudCBzaG91bGQgYWRqdXN0IGFjcm9zcyBzaGFkb3cgYm91bmRhcmllcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NDM3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yNjE1NDAyMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGVzIG91ciBpbXBsZW1lbnRhdGlvbiBvZiBvZmZzZXRMZWZ0
LCBvZmZzZXRUb3AsIGFuZCBvZmZzZXRQYXJlbnQgdG8gbWF0Y2ggdGhlIGxhdGVzdCBkaXNjdXNz
aW9uIGluIENTUyBXRy4KKyAgICAgICAgU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS93M2Mvd2ViY29t
cG9uZW50cy9pc3N1ZXMvNDk3IGFuZCBodHRwczovL2dpdGh1Yi5jb20vdzNjL3dlYmNvbXBvbmVu
dHMvaXNzdWVzLzc2MworCisgICAgICAgIFRoZSBsYXRlc3QgY29uc2Vuc3VzIGlzIHRvIHVzZSB0
aGUgcmV0YXJnZXRpbmcgYWxnb3JpdGhtIChodHRwczovL2RvbS5zcGVjLndoYXR3Zy5vcmcvI3Jl
dGFyZ2V0KS4gSW4gcHJhY3RpY2UsCisgICAgICAgIHRoaXMgd291bGQgbWVhbiB0aGF0IHdlIG5l
ZWQgdG8ga2VlcCB3YWxraW5nIHVwIHRoZSBvZmZzZXQgcGFyZW50IGFuY2VzdG9ycyB1bnRpbCB3
ZSBmaW5kIHRoZSBvbmUgd2hpY2ggaXMgaW4KKyAgICAgICAgdGhlIHNhbWUgdHJlZSBhcyBhIHNo
YWRvdy1pbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGNvbnRleHQgb2JqZWN0LgorCisgICAgICAg
IEZvciBleGFtcGxlLCBpZiBhIG5vZGUgKHRoZSBjb250ZXh0IG9iamVjdCBvZiBvZmZzZXRUb3As
IG9mZnNldExlZnQsIG9mZnNldFBhcmVudCkgd2FzIGFzc2lnbmVkIHRvIGEgc2xvdCBpbnNpZGUK
KyAgICAgICAgYSBzaGFkb3cgdHJlZSBhbmQgaXRzIG9mZnNldCBwYXJlbnQgd2FzIGluIHRoZSBz
aGFkb3cgdHJlZSwgd2UgbmVlZCB0byB3YWxrIHVwIHRvIGl0cyBvZmZzZXQgcGFyZW50LCBhbmQg
dGhlbiBpdHMKKyAgICAgICAgb2Zmc2V0IHBhcmVudCwgZXRjLi4uIHVudGlsIHdlIGZpbmQgdGhl
IG9mZnNldCBwYXJlbnQgd2hpY2ggaXMgaW4gdGhlIHNhbWUgdHJlZSBhcyB0aGUgY29udGV4dCBv
YmplY3QuCisKKyAgICAgICAgTm90ZSB0aGF0IGl0J3MgcG9zc2libGUgdGhhdCB0aGUgY29udGV4
dCBvYmplY3QgaXMgaW5zaWRlIGEgc2hhZG93IHRyZWUgd2hpY2ggZG9lcyBub3QgaGF2ZSBpdHMg
b3duIG9mZnNldCBwYXJlbnQuCisgICAgICAgIChlLmcuIGFsbCBlbGVtZW50cyBoYXZlIHBvc2l0
aW9uOiBzdGF0aWMpIEZvciB0aGlzIHJlYXNvbiwgd2UgbmVlZCB0byBjb25zaWRlciBub3QganVz
dCBvZmZzZXQgcGFyZW50IGluIHRoZSBzYW1lCisgICAgICAgIHRyZWUgYXMgdGhlIGNvbnRleHQg
b2JqZWN0IGJ1dCBhcyB3ZWxsIGFzIGFueSBvZmZzZXQgcGFyZW50IHdoaWNoIGlzIGluIGFuY2Vz
dG9yIHRyZWVzIG9mIHRoZSBjb250ZXh0IG9iamVjdHMuCisKKyAgICAgICAgVGVzdDogZmFzdC9z
aGFkb3ctZG9tL29mZnNldFBhcmVudC1hY3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMuaHRtbAorCisg
ICAgICAgICogZG9tL0VsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6YWRqdXN0T2Zmc2V0
Rm9yWm9vbUFuZFN1YnBpeGVsTGF5b3V0KTogRXh0cmFjdGVkIHRvIHNoYXJlIGNvZGUgYmV0d2Vl
biBvZmZzZXRMZWZ0IGFuZCBvZmZzZXRUb3AuCisgICAgICAgIChXZWJDb3JlOjpjb2xsZWN0QW5j
ZXN0b3JUcmVlU2NvcGVBc0hhc2hTZXQpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1l
bnQ6Om9mZnNldExlZnRGb3JCaW5kaW5ncyk6IEFkZGVkLiBTdW1zIHVwIG9mZnNldExlZnQncyB1
bnRpbCBpdCBmaW5kcyB0aGUgZmlyc3Qgb2Zmc2V0IHBhcmVudAorICAgICAgICB3aGljaCBpcyBh
IHNoYWRvdy1pbmNsdWRpbmcgYW5jZXN0b3IgKGh0dHBzOi8vZG9tLnNwZWMud2hhdHdnLm9yZy8j
Y29uY2VwdC1zaGFkb3ctaW5jbHVkaW5nLWFuY2VzdG9yKS4KKyAgICAgICAgKFdlYkNvcmU6OkVs
ZW1lbnQ6Om9mZnNldExlZnQpOiBOb3cgdXNlcyBhZGp1c3RPZmZzZXRGb3Jab29tQW5kU3VicGl4
ZWxMYXlvdXQuCisgICAgICAgIChXZWJDb3JlOjpFbGVtZW50OjpvZmZzZXRUb3BGb3JCaW5kaW5n
cyk6IEFkZGVkLiBMaWtlIG9mZnNldExlZnRGb3JCaW5kaW5ncywgdGhpcyBmdW5jdGlvbiBzdW1z
IHVwIG9mZnNldFRvcCdzCisgICAgICAgIHVudGlsIGl0IGZpbmRzIHRoZSBmaXJzdCBvZmZzZXQg
cGFyZW50IHdoaWNoIGlzIGEgc2hhZG93LWluY2x1ZGluZyBhbmNlc3Rvci4KKyAgICAgICAgKFdl
YkNvcmU6OkVsZW1lbnQ6Om9mZnNldFRvcCk6IE5vdyB1c2VzIGFkanVzdE9mZnNldEZvclpvb21B
bmRTdWJwaXhlbExheW91dC4KKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6Om9mZnNldFBhcmVu
dEZvckJpbmRpbmdzKTogUmVuYW1lZCBmcm9tIGJpbmRpbmdzT2Zmc2V0UGFyZW50IHRvIGJlIGNv
bnNpc3RlbnQgd2l0aCBvdGhlcgorICAgICAgICBmdW5jdGlvbnMgbWVhbnQgdG8gYmUgdXNlZCBm
b3IgYmluZGluZ3MgY29kZS4KKyAgICAgICAgKiBkb20vRWxlbWVudC5oOgorICAgICAgICAqIGh0
bWwvSFRNTEVsZW1lbnQuaWRsOgorCiAyMDE4LTEyLTEwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIGNvbm5lY3RlZENhbGxiYWNrIGlzIGludm9rZWQgZHVyaW5n
IHRoZSByZW1vdmFsIG9mIHRoZSBlbGVtZW50IGluc2lkZSBhbm90aGVyIGVsZW1lbnQncyBjb25u
ZWN0ZWRDYWxsYmFjawpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcAkocmV2aXNpb24gMjM5MDk1
KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
ODMsMjcgKzg4Myw3OSBAQCBzdGF0aWMgZG91YmxlIGNvbnZlcnRUb05vblN1YnBpeGVsVmFsdWVJ
CiAgICAgcmV0dXJuIHN1YnBpeGVsTWV0cmljc0VuYWJsZWQoZG9jdW1lbnQpID8gdmFsdWUgOiBy
b3VuZFN0cmF0ZWd5ID09IFJvdW5kID8gcm91bmQodmFsdWUpIDogZmxvb3IodmFsdWUpOwogfQog
Ci1kb3VibGUgRWxlbWVudDo6b2Zmc2V0TGVmdCgpCitzdGF0aWMgZG91YmxlIGFkanVzdE9mZnNl
dEZvclpvb21BbmRTdWJwaXhlbExheW91dChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIs
IGNvbnN0IExheW91dFVuaXQmIG9mZnNldCkKK3sKKyAgICBMYXlvdXRVbml0IG9mZnNldExlZnQg
PSBzdWJwaXhlbE1ldHJpY3NFbmFibGVkKHJlbmRlcmVyLT5kb2N1bWVudCgpKSA/IG9mZnNldCA6
IExheW91dFVuaXQocm91bmRUb0ludChvZmZzZXQpKTsKKyAgICBkb3VibGUgem9vbUZhY3RvciA9
IDE7CisgICAgZG91YmxlIG9mZnNldExlZnRBZGp1c3RlZFdpdGhab29tID0gYWRqdXN0Rm9yTG9j
YWxab29tKG9mZnNldExlZnQsICpyZW5kZXJlciwgem9vbUZhY3Rvcik7CisgICAgcmV0dXJuIGNv
bnZlcnRUb05vblN1YnBpeGVsVmFsdWVJZk5lZWRlZChvZmZzZXRMZWZ0QWRqdXN0ZWRXaXRoWm9v
bSwgcmVuZGVyZXItPmRvY3VtZW50KCksIHpvb21GYWN0b3IgPT0gMSA/IEZsb29yIDogUm91bmQp
OworfQorCitzdGF0aWMgSGFzaFNldDxUcmVlU2NvcGUqPiBjb2xsZWN0QW5jZXN0b3JUcmVlU2Nv
cGVBc0hhc2hTZXQoTm9kZSYgbm9kZSkKK3sKKyAgICBIYXNoU2V0PFRyZWVTY29wZSo+IGFuY2Vz
dG9yczsKKyAgICBmb3IgKGF1dG8qIGN1cnJlbnRTY29wZSA9ICZub2RlLnRyZWVTY29wZSgpOyBj
dXJyZW50U2NvcGU7IGN1cnJlbnRTY29wZSA9IGN1cnJlbnRTY29wZS0+cGFyZW50VHJlZVNjb3Bl
KCkpCisgICAgICAgIGFuY2VzdG9ycy5hZGQoY3VycmVudFNjb3BlKTsKKyAgICByZXR1cm4gYW5j
ZXN0b3JzOworfQorCitkb3VibGUgRWxlbWVudDo6b2Zmc2V0TGVmdEZvckJpbmRpbmdzKCkKIHsK
ICAgICBkb2N1bWVudCgpLnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHlsZXNoZWV0cygpOwot
ICAgIGlmIChSZW5kZXJCb3hNb2RlbE9iamVjdCogcmVuZGVyZXIgPSByZW5kZXJCb3hNb2RlbE9i
amVjdCgpKSB7Ci0gICAgICAgIExheW91dFVuaXQgb2Zmc2V0TGVmdCA9IHN1YnBpeGVsTWV0cmlj
c0VuYWJsZWQocmVuZGVyZXItPmRvY3VtZW50KCkpID8gcmVuZGVyZXItPm9mZnNldExlZnQoKSA6
IExheW91dFVuaXQocm91bmRUb0ludChyZW5kZXJlci0+b2Zmc2V0TGVmdCgpKSk7Ci0gICAgICAg
IGRvdWJsZSB6b29tRmFjdG9yID0gMTsKLSAgICAgICAgZG91YmxlIG9mZnNldExlZnRBZGp1c3Rl
ZFdpdGhab29tID0gYWRqdXN0Rm9yTG9jYWxab29tKG9mZnNldExlZnQsICpyZW5kZXJlciwgem9v
bUZhY3Rvcik7Ci0gICAgICAgIHJldHVybiBjb252ZXJ0VG9Ob25TdWJwaXhlbFZhbHVlSWZOZWVk
ZWQob2Zmc2V0TGVmdEFkanVzdGVkV2l0aFpvb20sIHJlbmRlcmVyLT5kb2N1bWVudCgpLCB6b29t
RmFjdG9yID09IDEgPyBGbG9vciA6IFJvdW5kKTsKKworICAgIGF1dG8gcGFyZW50ID0gbWFrZVJl
ZlB0cihvZmZzZXRQYXJlbnQoKSk7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNJblNo
YWRvd1RyZWUoKSkKKyAgICAgICAgcmV0dXJuIG9mZnNldExlZnQoKTsKKworICAgIEFTU0VSVCgm
cGFyZW50LT5kb2N1bWVudCgpID09ICZkb2N1bWVudCgpKTsKKyAgICBpZiAoJnBhcmVudC0+dHJl
ZVNjb3BlKCkgPT0gJnRyZWVTY29wZSgpKQorICAgICAgICByZXR1cm4gb2Zmc2V0TGVmdCgpOwor
CisgICAgZG91YmxlIG9mZnNldCA9IG9mZnNldExlZnQoKTsKKyAgICBhdXRvIGFuY2VzdG9yVHJl
ZVNjb3BlcyA9IGNvbGxlY3RBbmNlc3RvclRyZWVTY29wZUFzSGFzaFNldCgqdGhpcyk7CisgICAg
d2hpbGUgKHBhcmVudCAmJiAhYW5jZXN0b3JUcmVlU2NvcGVzLmNvbnRhaW5zKCZwYXJlbnQtPnRy
ZWVTY29wZSgpKSkgeworICAgICAgICBvZmZzZXQgKz0gcGFyZW50LT5vZmZzZXRMZWZ0KCk7Cisg
ICAgICAgIHBhcmVudCA9IHBhcmVudC0+b2Zmc2V0UGFyZW50KCk7CiAgICAgfQorCisgICAgcmV0
dXJuIG9mZnNldDsKK30KKworZG91YmxlIEVsZW1lbnQ6Om9mZnNldExlZnQoKQoreworICAgIGRv
Y3VtZW50KCkudXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRzKCk7CisgICAgaWYg
KFJlbmRlckJveE1vZGVsT2JqZWN0KiByZW5kZXJlciA9IHJlbmRlckJveE1vZGVsT2JqZWN0KCkp
CisgICAgICAgIHJldHVybiBhZGp1c3RPZmZzZXRGb3Jab29tQW5kU3VicGl4ZWxMYXlvdXQocmVu
ZGVyZXIsIHJlbmRlcmVyLT5vZmZzZXRMZWZ0KCkpOwogICAgIHJldHVybiAwOwogfQogCi1kb3Vi
bGUgRWxlbWVudDo6b2Zmc2V0VG9wKCkKK2RvdWJsZSBFbGVtZW50OjpvZmZzZXRUb3BGb3JCaW5k
aW5ncygpCiB7CiAgICAgZG9jdW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVz
aGVldHMoKTsKLSAgICBpZiAoUmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gcmVuZGVy
Qm94TW9kZWxPYmplY3QoKSkgewotICAgICAgICBMYXlvdXRVbml0IG9mZnNldFRvcCA9IHN1YnBp
eGVsTWV0cmljc0VuYWJsZWQocmVuZGVyZXItPmRvY3VtZW50KCkpID8gcmVuZGVyZXItPm9mZnNl
dFRvcCgpIDogTGF5b3V0VW5pdChyb3VuZFRvSW50KHJlbmRlcmVyLT5vZmZzZXRUb3AoKSkpOwot
ICAgICAgICBkb3VibGUgem9vbUZhY3RvciA9IDE7Ci0gICAgICAgIGRvdWJsZSBvZmZzZXRUb3BB
ZGp1c3RlZFdpdGhab29tID0gYWRqdXN0Rm9yTG9jYWxab29tKG9mZnNldFRvcCwgKnJlbmRlcmVy
LCB6b29tRmFjdG9yKTsKLSAgICAgICAgcmV0dXJuIGNvbnZlcnRUb05vblN1YnBpeGVsVmFsdWVJ
Zk5lZWRlZChvZmZzZXRUb3BBZGp1c3RlZFdpdGhab29tLCByZW5kZXJlci0+ZG9jdW1lbnQoKSwg
em9vbUZhY3RvciA9PSAxID8gRmxvb3IgOiBSb3VuZCk7CisKKyAgICBhdXRvIHBhcmVudCA9IG1h
a2VSZWZQdHIob2Zmc2V0UGFyZW50KCkpOworICAgIGlmICghcGFyZW50IHx8ICFwYXJlbnQtPmlz
SW5TaGFkb3dUcmVlKCkpCisgICAgICAgIHJldHVybiBvZmZzZXRUb3AoKTsKKworICAgIEFTU0VS
VCgmcGFyZW50LT5kb2N1bWVudCgpID09ICZkb2N1bWVudCgpKTsKKyAgICBpZiAoJnBhcmVudC0+
dHJlZVNjb3BlKCkgPT0gJnRyZWVTY29wZSgpKQorICAgICAgICByZXR1cm4gb2Zmc2V0VG9wKCk7
CisKKyAgICBkb3VibGUgb2Zmc2V0ID0gb2Zmc2V0VG9wKCk7CisgICAgYXV0byBhbmNlc3RvclRy
ZWVTY29wZXMgPSBjb2xsZWN0QW5jZXN0b3JUcmVlU2NvcGVBc0hhc2hTZXQoKnRoaXMpOworICAg
IHdoaWxlIChwYXJlbnQgJiYgIWFuY2VzdG9yVHJlZVNjb3Blcy5jb250YWlucygmcGFyZW50LT50
cmVlU2NvcGUoKSkpIHsKKyAgICAgICAgb2Zmc2V0ICs9IHBhcmVudC0+b2Zmc2V0VG9wKCk7Cisg
ICAgICAgIHBhcmVudCA9IHBhcmVudC0+b2Zmc2V0UGFyZW50KCk7CiAgICAgfQorCisgICAgcmV0
dXJuIG9mZnNldDsKK30KKworZG91YmxlIEVsZW1lbnQ6Om9mZnNldFRvcCgpCit7CisgICAgZG9j
dW1lbnQoKS51cGRhdGVMYXlvdXRJZ25vcmVQZW5kaW5nU3R5bGVzaGVldHMoKTsKKyAgICBpZiAo
UmVuZGVyQm94TW9kZWxPYmplY3QqIHJlbmRlcmVyID0gcmVuZGVyQm94TW9kZWxPYmplY3QoKSkK
KyAgICAgICAgcmV0dXJuIGFkanVzdE9mZnNldEZvclpvb21BbmRTdWJwaXhlbExheW91dChyZW5k
ZXJlciwgcmVuZGVyZXItPm9mZnNldFRvcCgpKTsKICAgICByZXR1cm4gMDsKIH0KIApAQCAtOTI3
LDEyICs5NzksMTQgQEAgZG91YmxlIEVsZW1lbnQ6Om9mZnNldEhlaWdodCgpCiAgICAgcmV0dXJu
IDA7CiB9CiAKLUVsZW1lbnQqIEVsZW1lbnQ6OmJpbmRpbmdzT2Zmc2V0UGFyZW50KCkKK0VsZW1l
bnQqIEVsZW1lbnQ6Om9mZnNldFBhcmVudEZvckJpbmRpbmdzKCkKIHsKICAgICBFbGVtZW50KiBl
bGVtZW50ID0gb2Zmc2V0UGFyZW50KCk7CiAgICAgaWYgKCFlbGVtZW50IHx8ICFlbGVtZW50LT5p
c0luU2hhZG93VHJlZSgpKQogICAgICAgICByZXR1cm4gZWxlbWVudDsKLSAgICByZXR1cm4gZWxl
bWVudC0+Y29udGFpbmluZ1NoYWRvd1Jvb3QoKS0+bW9kZSgpID09IFNoYWRvd1Jvb3RNb2RlOjpV
c2VyQWdlbnQgPyBudWxscHRyIDogZWxlbWVudDsKKyAgICB3aGlsZSAoZWxlbWVudCAmJiAhaXNE
ZXNjZW5kYW50T3JTaGFkb3dEZXNjZW5kYW50T2YoJmVsZW1lbnQtPnJvb3ROb2RlKCkpKQorICAg
ICAgICBlbGVtZW50ID0gZWxlbWVudC0+b2Zmc2V0UGFyZW50KCk7CisgICAgcmV0dXJuIGVsZW1l
bnQ7CiB9CiAKIEVsZW1lbnQqIEVsZW1lbnQ6Om9mZnNldFBhcmVudCgpCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9kb20vRWxlbWVudC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmgJKHJldmlzaW9uIDIzOTA5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE1Niw3ICsxNTYsOSBAQCBwdWJsaWM6CiAgICAgV0VCQ09S
RV9FWFBPUlQgdm9pZCBzY3JvbGxCeUxpbmVzKGludCBsaW5lcyk7CiAgICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzY3JvbGxCeVBhZ2VzKGludCBwYWdlcyk7CiAKKyAgICBXRUJDT1JFX0VYUE9SVCBk
b3VibGUgb2Zmc2V0TGVmdEZvckJpbmRpbmdzKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgZG91Ymxl
IG9mZnNldExlZnQoKTsKKyAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgb2Zmc2V0VG9wRm9yQmlu
ZGluZ3MoKTsKICAgICBXRUJDT1JFX0VYUE9SVCBkb3VibGUgb2Zmc2V0VG9wKCk7CiAgICAgV0VC
Q09SRV9FWFBPUlQgZG91YmxlIG9mZnNldFdpZHRoKCk7CiAgICAgV0VCQ09SRV9FWFBPUlQgZG91
YmxlIG9mZnNldEhlaWdodCgpOwpAQCAtMTY1LDcgKzE2Nyw3IEBAIHB1YmxpYzoKIAogICAgIC8v
IEZJWE1FOiBSZXBsYWNlIHVzZXMgb2Ygb2Zmc2V0UGFyZW50IGluIHRoZSBwbGF0Zm9ybSB3aXRo
IGNhbGxzCiAgICAgLy8gdG8gdGhlIHJlbmRlciBsYXllciBhbmQgbWVyZ2UgYmluZGluZ3NPZmZz
ZXRQYXJlbnQgYW5kIG9mZnNldFBhcmVudC4KLSAgICBXRUJDT1JFX0VYUE9SVCBFbGVtZW50KiBi
aW5kaW5nc09mZnNldFBhcmVudCgpOworICAgIFdFQkNPUkVfRVhQT1JUIEVsZW1lbnQqIG9mZnNl
dFBhcmVudEZvckJpbmRpbmdzKCk7CiAKICAgICBjb25zdCBFbGVtZW50KiByb290RWxlbWVudCgp
IGNvbnN0OwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmlkbAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxFbGVtZW50LmlkbAkocmV2aXNpb24g
MjM5MDk1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRWxlbWVudC5pZGwJKHdvcmtpbmcg
Y29weSkKQEAgLTUyLDkgKzUyLDkgQEAKICAgICByZWFkb25seSBhdHRyaWJ1dGUgYm9vbGVhbiBp
c0NvbnRlbnRFZGl0YWJsZTsKIAogICAgIC8vIEV4dGVuc2lvbnMgZnJvbSBDU1NPTS12aWV3IHNw
ZWNpZmljYXRpb24gKGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy9jc3NvbS12aWV3LyNleHRlbnNp
b25zLXRvLXRoZS1odG1sZWxlbWVudC1pbnRlcmZhY2UpLgotICAgIFtJbXBsZW1lbnRlZEFzPWJp
bmRpbmdzT2Zmc2V0UGFyZW50XSByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVudD8gb2Zmc2V0UGFy
ZW50OwotICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgb2Zmc2V0VG9wOyAvLyBGSVhNRTog
U2hvdWxkIGJlIG9mIHR5cGUgbG9uZy4KLSAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG9m
ZnNldExlZnQ7IC8vIEZJWE1FOiBTaG91bGQgYmUgb2YgdHlwZSBsb25nLgorICAgIFtJbXBsZW1l
bnRlZEFzPW9mZnNldFBhcmVudEZvckJpbmRpbmdzXSByZWFkb25seSBhdHRyaWJ1dGUgRWxlbWVu
dD8gb2Zmc2V0UGFyZW50OworICAgIFtJbXBsZW1lbnRlZEFzPW9mZnNldFRvcEZvckJpbmRpbmdz
XSByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG9mZnNldFRvcDsgLy8gRklYTUU6IFNob3VsZCBi
ZSBvZiB0eXBlIGxvbmcuCisgICAgW0ltcGxlbWVudGVkQXM9b2Zmc2V0TGVmdEZvckJpbmRpbmdz
XSByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIG9mZnNldExlZnQ7IC8vIEZJWE1FOiBTaG91bGQg
YmUgb2YgdHlwZSBsb25nLgogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBkb3VibGUgb2Zmc2V0V2lk
dGg7IC8vIEZJWE1FOiBTaG91bGQgYmUgb2YgdHlwZSBsb25nLgogICAgIHJlYWRvbmx5IGF0dHJp
YnV0ZSBkb3VibGUgb2Zmc2V0SGVpZ2h0OyAvLyBGSVhNRTogU2hvdWxkIGJlIG9mIHR5cGUgbG9u
Zy4KIApJbmRleDogU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzOTMwMykKKysrIFNvdXJjZS9XZWJLaXQvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTggQEAKKzIwMTgtMTItMTcgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgb2Zmc2V0TGVmdCBhbmQgb2Zm
c2V0UGFyZW50IHNob3VsZCBhZGp1c3QgYWNyb3NzIHNoYWRvdyBib3VuZGFyaWVzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTc0MzcKKyAgICAgICAg
PHJkYXI6Ly9wcm9ibGVtLzI2MTU0MDIxPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFVzZSAqZm9yQmluZGluZ3MgdmFyaWFudHMgb2Ygb2Zmc2V0TGVm
dCwgb2Zmc2V0VG9wLCBhbmQgb2Zmc2V0UGFyZW50LgorCisgICAgICAgICogV2ViUHJvY2Vzcy9J
bmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50R3RrLmNwcDoKKyAgICAg
ICAgKHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X2xlZnQpOgorICAgICAgICAod2Via2l0
X2RvbV9lbGVtZW50X2dldF9vZmZzZXRfdG9wKToKKyAgICAgICAgKHdlYmtpdF9kb21fZWxlbWVu
dF9nZXRfb2Zmc2V0X3BhcmVudCk6CisKIDIwMTgtMTItMTcgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnQgcmVjZW50IENyYXNoUmVw
b3J0ZXJDbGllbnQgYnVpbGQgZml4ZXMgYXMgdGhleSBhcmUgbm8gbG9uZ2VyIG5lZWRlZC4KSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9BUEkvZ3RrL0RPTS9X
ZWJLaXRET01FbGVtZW50R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvQVBJL2d0ay9ET00vV2ViS2l0RE9NRWxlbWVudEd0ay5jcHAJ
KHJldmlzaW9uIDIzOTA5NSkKKysrIFNvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9BUEkvZ3RrL0RPTS9XZWJLaXRET01FbGVtZW50R3RrLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA4OCw3ICsxMDg4LDcgQEAgZ2RvdWJsZSB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0X29mZnNl
dF9sZQogICAgIFdlYkNvcmU6OkpTTWFpblRocmVhZE51bGxTdGF0ZSBzdGF0ZTsKICAgICBnX3Jl
dHVybl92YWxfaWZfZmFpbChXRUJLSVRfRE9NX0lTX0VMRU1FTlQoc2VsZiksIDApOwogICAgIFdl
YkNvcmU6OkVsZW1lbnQqIGl0ZW0gPSBXZWJLaXQ6OmNvcmUoc2VsZik7Ci0gICAgZ2RvdWJsZSBy
ZXN1bHQgPSBpdGVtLT5vZmZzZXRMZWZ0KCk7CisgICAgZ2RvdWJsZSByZXN1bHQgPSBpdGVtLT5v
ZmZzZXRMZWZ0Rm9yQmluZGluZ3MoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMDk3
LDcgKzEwOTcsNyBAQCBnZG91YmxlIHdlYmtpdF9kb21fZWxlbWVudF9nZXRfb2Zmc2V0X3RvCiAg
ICAgV2ViQ29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3Zh
bF9pZl9mYWlsKFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CiAgICAgV2ViQ29yZTo6
RWxlbWVudCogaXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBnZG91YmxlIHJlc3VsdCA9
IGl0ZW0tPm9mZnNldFRvcCgpOworICAgIGdkb3VibGUgcmVzdWx0ID0gaXRlbS0+b2Zmc2V0VG9w
Rm9yQmluZGluZ3MoKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCkBAIC0xMjI4LDcgKzEyMjgs
NyBAQCBXZWJLaXRET01FbGVtZW50KiB3ZWJraXRfZG9tX2VsZW1lbnRfZ2V0CiAgICAgV2ViQ29y
ZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwogICAgIGdfcmV0dXJuX3ZhbF9pZl9mYWls
KFdFQktJVF9ET01fSVNfRUxFTUVOVChzZWxmKSwgMCk7CiAgICAgV2ViQ29yZTo6RWxlbWVudCog
aXRlbSA9IFdlYktpdDo6Y29yZShzZWxmKTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RWxlbWVudD4g
Z29iamVjdFJlc3VsdCA9IFdURjo6Z2V0UHRyKGl0ZW0tPmJpbmRpbmdzT2Zmc2V0UGFyZW50KCkp
OworICAgIFJlZlB0cjxXZWJDb3JlOjpFbGVtZW50PiBnb2JqZWN0UmVzdWx0ID0gV1RGOjpnZXRQ
dHIoaXRlbS0+b2Zmc2V0UGFyZW50Rm9yQmluZGluZ3MoKSk7CiAgICAgcmV0dXJuIFdlYktpdDo6
a2l0KGdvYmplY3RSZXN1bHQuZ2V0KCkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hh
bmdlTG9nCShyZXZpc2lvbiAyMzkyODkpCisrKyBTb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxOCBAQAorMjAxOC0xMi0xNyAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBvZmZzZXRMZWZ0IGFuZCBvZmZz
ZXRQYXJlbnQgc2hvdWxkIGFkanVzdCBhY3Jvc3Mgc2hhZG93IGJvdW5kYXJpZXMKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzQzNworICAgICAgICA8
cmRhcjovL3Byb2JsZW0vMjYxNTQwMjE+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgVXNlICpmb3JCaW5kaW5ncyB2YXJpYW50cyBvZiBvZmZzZXRMZWZ0
LCBvZmZzZXRUb3AsIGFuZCBvZmZzZXRQYXJlbnQuCisKKyAgICAgICAgKiBET00vRE9NRWxlbWVu
dC5tbToKKyAgICAgICAgKC1bRE9NRWxlbWVudCBvZmZzZXRMZWZ0XSk6CisgICAgICAgICgtW0RP
TUVsZW1lbnQgb2Zmc2V0VG9wXSk6CisgICAgICAgICgtW0RPTUVsZW1lbnQgb2Zmc2V0UGFyZW50
XSk6CisKIDIwMTgtMTItMTcgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAg
ICAgICBVbnJldmlld2VkIGJ1aWxkIGZpeC4KSW5kZXg6IFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01FbGVtZW50Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L0RPTS9ET01FbGVtZW50Lm1tCShyZXZpc2lvbiAyMzkwOTUpCisrKyBTb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9ET00vRE9NRWxlbWVudC5tbQkod29ya2luZyBjb3B5KQpAQCAtODEsMTMgKzgxLDEz
IEBAIC0gKERPTUNTU1N0eWxlRGVjbGFyYXRpb24gKilzdHlsZQogLSAoaW50KW9mZnNldExlZnQK
IHsKICAgICBXZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJu
IHVud3JhcCgqc2VsZikub2Zmc2V0TGVmdCgpOworICAgIHJldHVybiB1bndyYXAoKnNlbGYpLm9m
ZnNldExlZnRGb3JCaW5kaW5ncygpOwogfQogCiAtIChpbnQpb2Zmc2V0VG9wCiB7CiAgICAgV2Vi
Q29yZTo6SlNNYWluVGhyZWFkTnVsbFN0YXRlIHN0YXRlOwotICAgIHJldHVybiB1bndyYXAoKnNl
bGYpLm9mZnNldFRvcCgpOworICAgIHJldHVybiB1bndyYXAoKnNlbGYpLm9mZnNldFRvcEZvckJp
bmRpbmdzKCk7CiB9CiAKIC0gKGludClvZmZzZXRXaWR0aApAQCAtMTY1LDcgKzE2NSw3IEBAIC0g
KGludClzY3JvbGxIZWlnaHQKIC0gKERPTUVsZW1lbnQgKilvZmZzZXRQYXJlbnQKIHsKICAgICBX
ZWJDb3JlOjpKU01haW5UaHJlYWROdWxsU3RhdGUgc3RhdGU7Ci0gICAgcmV0dXJuIGtpdCh1bndy
YXAoKnNlbGYpLmJpbmRpbmdzT2Zmc2V0UGFyZW50KCkpOworICAgIHJldHVybiBraXQodW53cmFw
KCpzZWxmKS5vZmZzZXRQYXJlbnRGb3JCaW5kaW5ncygpKTsKIH0KIAogLSAoTlNTdHJpbmcgKilp
bm5lckhUTUwKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDIzOTA5NikKKysrIExheW91dFRlc3RzL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE4LTEyLTE3ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIG9mZnNldExlZnQgYW5kIG9mZnNl
dFBhcmVudCBzaG91bGQgYWRqdXN0IGFjcm9zcyBzaGFkb3cgYm91bmRhcmllcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3NDM3CisgICAgICAgIDxy
ZGFyOi8vcHJvYmxlbS8yNjE1NDAyMT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBBZGRlZCBhIFczQyBzdHlsZSB0ZXN0aGFybmVzcy5qcyB0ZXN0Lgor
CisgICAgICAgICogZmFzdC9zaGFkb3ctZG9tL29mZnNldFBhcmVudC1hY3Jvc3Mtc2hhZG93LWJv
dW5kYXJpZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L3NoYWRvdy1kb20v
b2Zmc2V0UGFyZW50LWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy5odG1sOiBBZGRlZC4KKwogMjAx
OC0xMi0xMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBjb25u
ZWN0ZWRDYWxsYmFjayBpcyBpbnZva2VkIGR1cmluZyB0aGUgcmVtb3ZhbCBvZiB0aGUgZWxlbWVu
dCBpbnNpZGUgYW5vdGhlciBlbGVtZW50J3MgY29ubmVjdGVkQ2FsbGJhY2sKSW5kZXg6IExheW91
dFRlc3RzL2Zhc3Qvc2hhZG93LWRvbS9vZmZzZXRQYXJlbnQtYWNyb3NzLXNoYWRvdy1ib3VuZGFy
aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L3NoYWRvdy1k
b20vb2Zmc2V0UGFyZW50LWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy1leHBlY3RlZC50eHQJKG5v
bmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvZmFzdC9zaGFkb3ctZG9tL29mZnNldFBhcmVudC1h
Y3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsMTggQEAKKworUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCByZXR1cm4gdGhlIG9mZnNldCBw
YXJlbnQgaW4gdGhlIHNhbWUgc2hhZG93IHRyZWUgb2Ygb3BlbiBtb2RlIAorUEFTUyBvZmZzZXRQ
YXJlbnQgbXVzdCByZXR1cm4gdGhlIG9mZnNldCBwYXJlbnQgaW4gdGhlIHNhbWUgc2hhZG93IHRy
ZWUgb2YgY2xvc2VkIG1vZGUgCitQQVNTIG9mZnNldFBhcmVudCBtdXN0IHJldHVybiB0aGUgb2Zm
c2V0IHBhcmVudCBpbiB0aGUgc2FtZSBzaGFkb3cgdHJlZSBvZiBvcGVuIG1vZGUgZXZlbiB3aGVu
IG5lc3RlZCAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIHRoZSBvZmZzZXQgcGFyZW50
IGluIHRoZSBzYW1lIHNoYWRvdyB0cmVlIG9mIGNsb3NlZCBtb2RlIGV2ZW4gd2hlbiBuZXN0ZWQg
CitQQVNTIG9mZnNldFBhcmVudCBtdXN0IHNraXAgb2Zmc2V0IHBhcmVudHMgb2YgYW4gZWxlbWVu
dCB3aGVuIHRoZSBjb250ZXh0IG9iamVjdCBpcyBhc3NpZ25lZCB0byBhIHNsb3QgaW4gYSBzaGFk
b3cgdHJlZSBvZiBvcGVuIG1vZGUgCitQQVNTIG9mZnNldFBhcmVudCBtdXN0IHNraXAgb2Zmc2V0
IHBhcmVudHMgb2YgYW4gZWxlbWVudCB3aGVuIHRoZSBjb250ZXh0IG9iamVjdCBpcyBhc3NpZ25l
ZCB0byBhIHNsb3QgaW4gYSBzaGFkb3cgdHJlZSBvZiBjbG9zZWQgbW9kZSAKK1BBU1Mgb2Zmc2V0
UGFyZW50IG11c3Qgc2tpcCBvZmZzZXQgcGFyZW50cyBvZiBhbiBlbGVtZW50IHdoZW4gdGhlIGNv
bnRleHQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgc2xvdCBpbiBhIHNoYWRvdyB0cmVlIG9mIG9w
ZW4gbW9kZSAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3Qgc2tpcCBvZmZzZXQgcGFyZW50cyBvZiBh
biBlbGVtZW50IHdoZW4gdGhlIGNvbnRleHQgb2JqZWN0IGlzIGFzc2lnbmVkIHRvIGEgc2xvdCBp
biBhIHNoYWRvdyB0cmVlIG9mIGNsb3NlZCBtb2RlIAorUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCBz
a2lwIG9mZnNldCBwYXJlbnRzIG9mIGFuIGVsZW1lbnQgd2hlbiB0aGUgY29udGV4dCBvYmplY3Qg
aXMgYXNzaWduZWQgdG8gYSBzbG90IGluIG5lc3RlZCBzaGFkb3cgdHJlZXMgb2Ygb3BlbiBtb2Rl
IAorUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCBza2lwIG9mZnNldCBwYXJlbnRzIG9mIGFuIGVsZW1l
bnQgd2hlbiB0aGUgY29udGV4dCBvYmplY3QgaXMgYXNzaWduZWQgdG8gYSBzbG90IGluIG5lc3Rl
ZCBzaGFkb3cgdHJlZXMgb2YgY2xvc2VkIG1vZGUgCitQQVNTIG9mZnNldFBhcmVudCBtdXN0IGZp
bmQgdGhlIGZpcnN0IG9mZnNldCBwYXJlbnQgd2hpY2ggaXMgYSBzaGFkb3ctaW5jbHVkaW5nIGFu
Y2VzdG9yIG9mIHRoZSBjb250ZXh0IG9iamVjdCBldmVuIHNvbWUgc2hhZG93IHRyZWUgb2Ygb3Bl
biBtb2RlIGRpZCBub3QgaGF2ZSBhbnkgb2Zmc2V0IHBhcmVudCAKK1BBU1Mgb2Zmc2V0UGFyZW50
IG11c3QgZmluZCB0aGUgZmlyc3Qgb2Zmc2V0IHBhcmVudCB3aGljaCBpcyBhIHNoYWRvdy1pbmNs
dWRpbmcgYW5jZXN0b3Igb2YgdGhlIGNvbnRleHQgb2JqZWN0IGV2ZW4gc29tZSBzaGFkb3cgdHJl
ZSBvZiBjbG9zZWQgbW9kZSBkaWQgbm90IGhhdmUgYW55IG9mZnNldCBwYXJlbnQgCitQQVNTIG9m
ZnNldFBhcmVudCBtdXN0IHJldHVybiBudWxsIG9uIGEgY2hpbGQgZWxlbWVudCBvZiBhIHNoYWRv
dyBob3N0IGZvciB0aGUgc2hhZG93IHRyZWUgaW4gb3BlbiBtb2RlIHdoaWNoIGlzIG5vdCBhc3Np
Z25lZCB0byBhbnkgc2xvdCAKK1BBU1Mgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIG51bGwgb24g
YSBjaGlsZCBlbGVtZW50IG9mIGEgc2hhZG93IGhvc3QgZm9yIHRoZSBzaGFkb3cgdHJlZSBpbiBj
bG9zZWQgbW9kZSB3aGljaCBpcyBub3QgYXNzaWduZWQgdG8gYW55IHNsb3QgCitQQVNTIG9mZnNl
dFBhcmVudCBtdXN0IHJldHVybiBudWxsIG9uIGEgY2hpbGQgZWxlbWVudCBvZiBhIHNoYWRvdyBo
b3N0IGZvciB0aGUgc2hhZG93IHRyZWUgaW4gb3BlbiBtb2RlIHdoaWNoIGlzIG5vdCBpbiB0aGUg
ZmxhdCB0cmVlIAorUEFTUyBvZmZzZXRQYXJlbnQgbXVzdCByZXR1cm4gbnVsbCBvbiBhIGNoaWxk
IGVsZW1lbnQgb2YgYSBzaGFkb3cgaG9zdCBmb3IgdGhlIHNoYWRvdyB0cmVlIGluIGNsb3NlZCBt
b2RlIHdoaWNoIGlzIG5vdCBpbiB0aGUgZmxhdCB0cmVlIAorCkluZGV4OiBMYXlvdXRUZXN0cy9m
YXN0L3NoYWRvdy1kb20vb2Zmc2V0UGFyZW50LWFjcm9zcy1zaGFkb3ctYm91bmRhcmllcy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qvc2hhZG93LWRvbS9vZmZzZXRQYXJlbnQt
YWNyb3NzLXNoYWRvdy1ib3VuZGFyaWVzLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9zaGFkb3ctZG9tL29mZnNldFBhcmVudC1hY3Jvc3Mtc2hhZG93LWJvdW5kYXJpZXMu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE5MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8
aHRtbD4KKzxoZWFkPgorPG1ldGEgbmFtZT0iYXV0aG9yIiB0aXRsZT0iUnlvc3VrZSBOaXdhIiBo
cmVmPSJtYWlsdG86cm5pd2FAd2Via2l0Lm9yZyI+Cis8bWV0YSBuYW1lPSJhc3NlcnQiIGNvbnRl
bnQ9Im9mZnNldFBhcmVudCBzaG91bGQgb25seSByZXR1cm4gbm9kZXMgdGhhdCBhcmUgc2hhZG93
IGluY2x1ZGluZyBhbmNlc3RvciI+Cis8bGluayByZWw9ImhlbHAiIGhyZWY9Imh0dHBzOi8vZHJh
ZnRzLmNzc3dnLm9yZy9jc3NvbS12aWV3LyNkb20taHRtbGVsZW1lbnQtb2Zmc2V0cGFyZW50Ij4K
KzxsaW5rIHJlbD0iaGVscCIgaHJlZj0iaHR0cHM6Ly9kb20uc3BlYy53aGF0d2cub3JnLyNjb25j
ZXB0LXNoYWRvdy1pbmNsdWRpbmctaW5jbHVzaXZlLWFuY2VzdG9yIj4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0icmVzb3VyY2VzL2V2ZW50LXBhdGgtdGVzdC1oZWxwZXJzLmpzIj48L3NjcmlwdD4KKzwvaGVh
ZD4KKzxib2R5PgorPGRpdiBpZD0ibG9nIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnRhaW5lciIgc3R5
bGU9InBvc2l0aW9uOiByZWxhdGl2ZSI+PC9kaXY+Cis8c2NyaXB0PgorCitjb25zdCBjb250YWlu
ZXIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29udGFpbmVyJyk7CisKK2Z1bmN0aW9uIHRl
c3RPZmZzZXRQYXJlbnRJblNoYWRvd1RyZWUobW9kZSkgeworICAgIHRlc3QoZnVuY3Rpb24gKCkg
eworICAgICAgICBjb25zdCBob3N0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Cisg
ICAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZChob3N0KTsKKyAgICAgICAgdGhpcy5hZGRfY2xl
YW51cCgoKSA9PiBob3N0LnJlbW92ZSgpKTsKKyAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhv
c3QuYXR0YWNoU2hhZG93KHttb2RlfSk7CisgICAgICAgIHNoYWRvd1Jvb3QuaW5uZXJIVE1MID0g
JzxkaXYgaWQ9InJlbGF0aXZlUGFyZW50IiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBwYWRk
aW5nLWxlZnQ6IDEwMHB4OyBwYWRkaW5nLXRvcDogNzBweDsiPjxkaXYgaWQ9InRhcmdldCI+PC9k
aXY+PC9kaXY+JzsKKyAgICAgICAgY29uc3QgcmVsYXRpdmVQYXJlbnQgPSBzaGFkb3dSb290Lmdl
dEVsZW1lbnRCeUlkKCdyZWxhdGl2ZVBhcmVudCcpOworCisgICAgICAgIGFzc2VydF90cnVlKHJl
bGF0aXZlUGFyZW50IGluc3RhbmNlb2YgSFRNTERpdkVsZW1lbnQpOworICAgICAgICBjb25zdCB0
YXJnZXQgPSBzaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCd0YXJnZXQnKTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0UGFyZW50LCByZWxhdGl2ZVBhcmVudCk7CisgICAgICAg
IGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldExlZnQsIDEwMCk7CisgICAgICAgIGFzc2VydF9l
cXVhbHModGFyZ2V0Lm9mZnNldFRvcCwgNzApOworICAgIH0sIGBvZmZzZXRQYXJlbnQgbXVzdCBy
ZXR1cm4gdGhlIG9mZnNldCBwYXJlbnQgaW4gdGhlIHNhbWUgc2hhZG93IHRyZWUgb2YgJHttb2Rl
fSBtb2RlYCk7Cit9CisKK3Rlc3RPZmZzZXRQYXJlbnRJblNoYWRvd1RyZWUoJ29wZW4nKTsKK3Rl
c3RPZmZzZXRQYXJlbnRJblNoYWRvd1RyZWUoJ2Nsb3NlZCcpOworCitmdW5jdGlvbiB0ZXN0T2Zm
c2V0UGFyZW50SW5OZXN0ZWRTaGFkb3dUcmVlcyhtb2RlKSB7CisgICAgdGVzdChmdW5jdGlvbiAo
KSB7CisgICAgICAgIGNvbnN0IG91dGVySG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3Nl
Y3Rpb24nKTsKKyAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKG91dGVySG9zdCk7CisgICAg
ICAgIHRoaXMuYWRkX2NsZWFudXAoKCkgPT4gb3V0ZXJIb3N0LnJlbW92ZSgpKTsKKyAgICAgICAg
Y29uc3Qgb3V0ZXJTaGFkb3cgPSBvdXRlckhvc3QuYXR0YWNoU2hhZG93KHttb2RlfSk7CisgICAg
ICAgIG91dGVyU2hhZG93LmlubmVySFRNTCA9ICc8c2VjdGlvbiBpZD0ib3V0ZXJQYXJlbnQiIHN0
eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogNTBweDsgbGVmdDogNTBweDsiPjwvc2VjdGlv
bj4nOworCisgICAgICAgIGNvbnN0IGlubmVySG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2RpdicpOworICAgICAgICBvdXRlclNoYWRvdy5maXJzdENoaWxkLmFwcGVuZENoaWxkKGlubmVy
SG9zdCk7CisgICAgICAgIGNvbnN0IGlubmVyU2hhZG93ID0gaW5uZXJIb3N0LmF0dGFjaFNoYWRv
dyh7bW9kZX0pOworICAgICAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPGRpdiBpZD0iaW5u
ZXJQYXJlbnQiIHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IHBhZGRpbmctbGVmdDogNjBweDsg
cGFkZGluZy10b3A6IDQwcHg7Ij48ZGl2IGlkPSJ0YXJnZXQiPjwvZGl2PjwvZGl2Pic7CisgICAg
ICAgIGNvbnN0IGlubmVyUGFyZW50ID0gaW5uZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoJ2lubmVy
UGFyZW50Jyk7CisKKyAgICAgICAgY29uc3QgdGFyZ2V0ID0gaW5uZXJTaGFkb3cuZ2V0RWxlbWVu
dEJ5SWQoJ3RhcmdldCcpOworICAgICAgICBhc3NlcnRfdHJ1ZShpbm5lclBhcmVudCBpbnN0YW5j
ZW9mIEhUTUxEaXZFbGVtZW50KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0
UGFyZW50LCBpbm5lclBhcmVudCk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNl
dExlZnQsIDYwKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0VG9wLCA0MCk7
CisKKyAgICAgICAgb3V0ZXJIb3N0LnJlbW92ZSgpOworICAgIH0sIGBvZmZzZXRQYXJlbnQgbXVz
dCByZXR1cm4gdGhlIG9mZnNldCBwYXJlbnQgaW4gdGhlIHNhbWUgc2hhZG93IHRyZWUgb2YgJHtt
b2RlfSBtb2RlIGV2ZW4gd2hlbiBuZXN0ZWRgKTsKK30KKwordGVzdE9mZnNldFBhcmVudEluTmVz
dGVkU2hhZG93VHJlZXMoJ29wZW4nKTsKK3Rlc3RPZmZzZXRQYXJlbnRJbk5lc3RlZFNoYWRvd1Ry
ZWVzKCdjbG9zZWQnKTsKKworZnVuY3Rpb24gdGVzdE9mZnNldFBhcmVudE9uRWxlbWVudEFzc2ln
bmVkVG9TbG90SW5zaWRlT2Zmc2V0UGFyZW50KG1vZGUpIHsKKyAgICB0ZXN0KGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwor
ICAgICAgICBob3N0LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJ0YXJnZXQiPjwvZGl2PicKKyAgICAg
ICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGhvc3QpOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVw
KCgpID0+IGhvc3QucmVtb3ZlKCkpOworICAgICAgICBjb25zdCBzaGFkb3dSb290ID0gaG9zdC5h
dHRhY2hTaGFkb3coe21vZGV9KTsKKyAgICAgICAgc2hhZG93Um9vdC5pbm5lckhUTUwgPSAnPGRp
diBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyBwYWRkaW5nLWxlZnQ6IDg1cHg7IHBhZGRpbmct
dG9wOiA0NXB4OyI+PHNsb3Q+PC9zbG90PjwvZGl2Pic7CisgICAgICAgIGNvbnN0IHRhcmdldCA9
IGhvc3QucXVlcnlTZWxlY3RvcignI3RhcmdldCcpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRh
cmdldC5vZmZzZXRQYXJlbnQsIGNvbnRhaW5lcik7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFy
Z2V0Lm9mZnNldExlZnQsIDg1KTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0
VG9wLCA0NSk7CisgICAgfSwgYG9mZnNldFBhcmVudCBtdXN0IHNraXAgb2Zmc2V0IHBhcmVudHMg
b2YgYW4gZWxlbWVudCB3aGVuIHRoZSBjb250ZXh0IG9iamVjdCBpcyBhc3NpZ25lZCB0byBhIHNs
b3QgaW4gYSBzaGFkb3cgdHJlZSBvZiAke21vZGV9IG1vZGVgKTsKK30KKwordGVzdE9mZnNldFBh
cmVudE9uRWxlbWVudEFzc2lnbmVkVG9TbG90SW5zaWRlT2Zmc2V0UGFyZW50KCdvcGVuJyk7Cit0
ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50QXNzaWduZWRUb1Nsb3RJbnNpZGVPZmZzZXRQYXJlbnQo
J2Nsb3NlZCcpOworCitmdW5jdGlvbiB0ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50QXNzaWduZWRU
b1Nsb3RJbnNpZGVOZXN0ZWRPZmZzZXRQYXJlbnRzKG1vZGUpIHsKKyAgICB0ZXN0KGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2Rpdicp
OworICAgICAgICBob3N0LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJ0YXJnZXQiIHN0eWxlPSJib3Jk
ZXI6c29saWQgMXB4IGJsdWU7Ij5oaTwvZGl2Pic7CisgICAgICAgIGNvbnN0IHByZXZpb3VzQmxv
Y2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsKKyAgICAgICAgcHJldmlvdXNCbG9j
ay5zdHlsZS5oZWlnaHQgPSAnMTJweCc7CisgICAgICAgIGNvbnRhaW5lci5hcHBlbmQocHJldmlv
dXNCbG9jaywgaG9zdCk7CisgICAgICAgIHRoaXMuYWRkX2NsZWFudXAoKCkgPT4gY29udGFpbmVy
LmlubmVySFRNTCA9ICcnKTsKKyAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGhvc3QuYXR0YWNo
U2hhZG93KHttb2RlfSk7CisgICAgICAgIHNoYWRvd1Jvb3QuaW5uZXJIVE1MID0gJzxzZWN0aW9u
IHN0eWxlPSJwb3NpdGlvbjogcmVsYXRpdmU7IG1hcmdpbi1sZWZ0OiAyMHB4OyBtYXJnaW4tdG9w
OiAxMDBweDsgYmFja2dyb3VuZDogI2NjYyI+PGRpdiBzdHlsZT0icG9zaXRpb246IGFic29sdXRl
OyB0b3A6IDEwcHg7IGxlZnQ6IDEwcHg7Ij48c2xvdD48L3Nsb3Q+PC9kaXY+PC9zZWN0aW9uPic7
CisgICAgICAgIGNvbnN0IHRhcmdldCA9IGhvc3QucXVlcnlTZWxlY3RvcignI3RhcmdldCcpOwor
ICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRQYXJlbnQsIGNvbnRhaW5lcik7Cisg
ICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldExlZnQsIDMwKTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0VG9wLCAxMjIpOworICAgIH0sIGBvZmZzZXRQYXJlbnQg
bXVzdCBza2lwIG9mZnNldCBwYXJlbnRzIG9mIGFuIGVsZW1lbnQgd2hlbiB0aGUgY29udGV4dCBv
YmplY3QgaXMgYXNzaWduZWQgdG8gYSBzbG90IGluIGEgc2hhZG93IHRyZWUgb2YgJHttb2RlfSBt
b2RlYCk7Cit9CisKK3Rlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRBc3NpZ25lZFRvU2xvdEluc2lk
ZU5lc3RlZE9mZnNldFBhcmVudHMoJ29wZW4nKTsKK3Rlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRB
c3NpZ25lZFRvU2xvdEluc2lkZU5lc3RlZE9mZnNldFBhcmVudHMoJ2Nsb3NlZCcpOworCitmdW5j
dGlvbiB0ZXN0T2Zmc2V0UGFyZW50T25FbGVtZW50QXNzaWduZWRUb1Nsb3RJbnNpZGVOZXN0ZWRT
aGFkb3dUcmVlcyhtb2RlKSB7CisgICAgdGVzdChmdW5jdGlvbiAoKSB7CisgICAgICAgIGNvbnN0
IG91dGVySG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlY3Rpb24nKTsKKyAgICAgICAg
b3V0ZXJIb3N0LmlubmVySFRNTCA9ICc8ZGl2IGlkPSJ0YXJnZXQiPjwvZGl2Pic7CisgICAgICAg
IGNvbnRhaW5lci5hcHBlbmRDaGlsZChvdXRlckhvc3QpOworICAgICAgICB0aGlzLmFkZF9jbGVh
bnVwKCgpID0+IG91dGVySG9zdC5yZW1vdmUoKSk7CisgICAgICAgIGNvbnN0IG91dGVyU2hhZG93
ID0gb3V0ZXJIb3N0LmF0dGFjaFNoYWRvdyh7bW9kZX0pOworICAgICAgICBvdXRlclNoYWRvdy5p
bm5lckhUTUwgPSAnPHNlY3Rpb24gc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiA0MHB4
OyBsZWZ0OiA1MHB4OyI+PGRpdiBpZD0iaW5uZXJIb3N0Ij48c2xvdD48L3Nsb3Q+PC9kaXY+PC9z
ZWN0aW9uPic7CisKKyAgICAgICAgY29uc3QgaW5uZXJTaGFkb3cgPSBvdXRlclNoYWRvdy5nZXRF
bGVtZW50QnlJZCgnaW5uZXJIb3N0JykuYXR0YWNoU2hhZG93KHttb2RlfSk7CisgICAgICAgIGlu
bmVyU2hhZG93LmlubmVySFRNTCA9ICc8ZGl2IHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRv
cDogMjAwcHg7IG1hcmdpbi1sZWZ0OiAxMDBweDsiPjxzbG90Pjwvc2xvdD48L2Rpdj4nOworCisg
ICAgICAgIGNvbnN0IHRhcmdldCA9IG91dGVySG9zdC5xdWVyeVNlbGVjdG9yKCcjdGFyZ2V0Jyk7
CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNldFBhcmVudCwgY29udGFpbmVyKTsK
KyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0TGVmdCwgMTUwKTsKKyAgICAgICAg
YXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0VG9wLCAyNDApOworICAgICAgICBvdXRlckhvc3Qu
cmVtb3ZlKCk7CisgICAgfSwgYG9mZnNldFBhcmVudCBtdXN0IHNraXAgb2Zmc2V0IHBhcmVudHMg
b2YgYW4gZWxlbWVudCB3aGVuIHRoZSBjb250ZXh0IG9iamVjdCBpcyBhc3NpZ25lZCB0byBhIHNs
b3QgaW4gbmVzdGVkIHNoYWRvdyB0cmVlcyBvZiAke21vZGV9IG1vZGVgKTsKK30KKwordGVzdE9m
ZnNldFBhcmVudE9uRWxlbWVudEFzc2lnbmVkVG9TbG90SW5zaWRlTmVzdGVkU2hhZG93VHJlZXMo
J29wZW4nKTsKK3Rlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRBc3NpZ25lZFRvU2xvdEluc2lkZU5l
c3RlZFNoYWRvd1RyZWVzKCdjbG9zZWQnKTsKKworZnVuY3Rpb24gdGVzdE9mZnNldFBhcmVudE9u
RWxlbWVudEluc2lkZVNoYWRvd1RyZWVXaXRob3V0T2Zmc2V0UGFyZW50KG1vZGUpIHsKKyAgICB0
ZXN0KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc3Qgb3V0ZXJIb3N0ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgnc2VjdGlvbicpOworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQob3V0
ZXJIb3N0KTsKKyAgICAgICAgdGhpcy5hZGRfY2xlYW51cCgoKSA9PiBvdXRlckhvc3QucmVtb3Zl
KCkpOworICAgICAgICBjb25zdCBvdXRlclNoYWRvdyA9IG91dGVySG9zdC5hdHRhY2hTaGFkb3co
e21vZGV9KTsKKyAgICAgICAgb3V0ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxkaXYgaWQ9ImlubmVy
SG9zdCI+PGRpdiBpZD0idGFyZ2V0Ij48L2Rpdj48L2Rpdj4nOworCisgICAgICAgIGNvbnN0IGlu
bmVyU2hhZG93ID0gb3V0ZXJTaGFkb3cuZ2V0RWxlbWVudEJ5SWQoJ2lubmVySG9zdCcpLmF0dGFj
aFNoYWRvdyh7bW9kZX0pOworICAgICAgICBpbm5lclNoYWRvdy5pbm5lckhUTUwgPSAnPGRpdiBz
dHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDIzcHg7IGxlZnQ6IDI0cHg7Ij48c2xvdD48
L3Nsb3Q+PC9kaXY+JzsKKworICAgICAgICBjb25zdCB0YXJnZXQgPSBvdXRlclNoYWRvdy5xdWVy
eVNlbGVjdG9yKCcjdGFyZ2V0Jyk7CisgICAgICAgIGFzc2VydF9lcXVhbHModGFyZ2V0Lm9mZnNl
dFBhcmVudCwgY29udGFpbmVyKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0
TGVmdCwgMjQpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdldC5vZmZzZXRUb3AsIDIzKTsK
KyAgICB9LCBgb2Zmc2V0UGFyZW50IG11c3QgZmluZCB0aGUgZmlyc3Qgb2Zmc2V0IHBhcmVudCB3
aGljaCBpcyBhIHNoYWRvdy1pbmNsdWRpbmcgYW5jZXN0b3Igb2YgdGhlIGNvbnRleHQgb2JqZWN0
IGV2ZW4gc29tZSBzaGFkb3cgdHJlZSBvZiAke21vZGV9IG1vZGUgZGlkIG5vdCBoYXZlIGFueSBv
ZmZzZXQgcGFyZW50YCk7Cit9CisKK3Rlc3RPZmZzZXRQYXJlbnRPbkVsZW1lbnRJbnNpZGVTaGFk
b3dUcmVlV2l0aG91dE9mZnNldFBhcmVudCgnb3BlbicpOwordGVzdE9mZnNldFBhcmVudE9uRWxl
bWVudEluc2lkZVNoYWRvd1RyZWVXaXRob3V0T2Zmc2V0UGFyZW50KCdjbG9zZWQnKTsKKworZnVu
Y3Rpb24gdGVzdE9mZnNldFBhcmVudE9uVW5hc3NpZ25lZENoaWxkKG1vZGUpIHsKKyAgICB0ZXN0
KGZ1bmN0aW9uICgpIHsKKyAgICAgICAgY29uc3QgaG9zdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ3NlY3Rpb24nKTsKKyAgICAgICAgaG9zdC5pbm5lckhUTUwgPSAnPGRpdiBpZD0idGFyZ2V0
Ij48L2Rpdj4nOworICAgICAgICB0aGlzLmFkZF9jbGVhbnVwKCgpID0+IGhvc3QucmVtb3ZlKCkp
OworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoaG9zdCk7CisgICAgICAgIGNvbnN0IHNo
YWRvd1Jvb3QgPSBob3N0LmF0dGFjaFNoYWRvdyh7bW9kZX0pOworICAgICAgICBzaGFkb3dSb290
LmlubmVySFRNTCA9ICc8c2VjdGlvbiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDUw
cHg7IGxlZnQ6IDUwcHg7Ij5jb250ZW50PC9zZWN0aW9uPic7CisgICAgICAgIGNvbnN0IHRhcmdl
dCA9IGhvc3QucXVlcnlTZWxlY3RvcignI3RhcmdldCcpOworICAgICAgICBhc3NlcnRfZXF1YWxz
KHRhcmdldC5vZmZzZXRQYXJlbnQsIG51bGwpOworICAgICAgICBhc3NlcnRfZXF1YWxzKHRhcmdl
dC5vZmZzZXRMZWZ0LCAwKTsKKyAgICAgICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0VG9w
LCAwKTsKKyAgICB9LCBgb2Zmc2V0UGFyZW50IG11c3QgcmV0dXJuIG51bGwgb24gYSBjaGlsZCBl
bGVtZW50IG9mIGEgc2hhZG93IGhvc3QgZm9yIHRoZSBzaGFkb3cgdHJlZSBpbiAke21vZGV9IG1v
ZGUgd2hpY2ggaXMgbm90IGFzc2lnbmVkIHRvIGFueSBzbG90YCk7Cit9CisKK3Rlc3RPZmZzZXRQ
YXJlbnRPblVuYXNzaWduZWRDaGlsZCgnb3BlbicpOwordGVzdE9mZnNldFBhcmVudE9uVW5hc3Np
Z25lZENoaWxkKCdjbG9zZWQnKTsKKworZnVuY3Rpb24gdGVzdE9mZnNldFBhcmVudE9uQXNzaWdu
ZWRDaGlsZE5vdEluRmxhdFRyZWUobW9kZSkgeworICAgIHRlc3QoZnVuY3Rpb24gKCkgeworICAg
ICAgICBjb25zdCBvdXRlckhvc3QgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzZWN0aW9uJyk7
CisgICAgICAgIG91dGVySG9zdC5pbm5lckhUTUwgPSAnPGRpdiBpZD0idGFyZ2V0Ij48L2Rpdj4n
OworICAgICAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQob3V0ZXJIb3N0KTsKKyAgICAgICAgdGhp
cy5hZGRfY2xlYW51cCgoKSA9PiBvdXRlckhvc3QucmVtb3ZlKCkpOworICAgICAgICBjb25zdCBv
dXRlclNoYWRvdyA9IG91dGVySG9zdC5hdHRhY2hTaGFkb3coe21vZGV9KTsKKyAgICAgICAgb3V0
ZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxkaXYgaWQ9ImlubmVySG9zdCI+PGRpdiBzdHlsZT0icG9z
aXRpb246IGFic29sdXRlOyB0b3A6IDUwcHg7IGxlZnQ6IDUwcHg7Ij48c2xvdD48L3Nsb3Q+PC9k
aXY+PC9kaXY+JzsKKworICAgICAgICBjb25zdCBpbm5lclNoYWRvdyA9IG91dGVyU2hhZG93Lmdl
dEVsZW1lbnRCeUlkKCdpbm5lckhvc3QnKS5hdHRhY2hTaGFkb3coe21vZGV9KTsKKyAgICAgICAg
aW5uZXJTaGFkb3cuaW5uZXJIVE1MID0gJzxkaXY+Y29udGVudDwvZGl2Pic7CisKKyAgICAgICAg
Y29uc3QgdGFyZ2V0ID0gb3V0ZXJIb3N0LnF1ZXJ5U2VsZWN0b3IoJyN0YXJnZXQnKTsKKyAgICAg
ICAgYXNzZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0UGFyZW50LCBudWxsKTsKKyAgICAgICAgYXNz
ZXJ0X2VxdWFscyh0YXJnZXQub2Zmc2V0TGVmdCwgMCk7CisgICAgICAgIGFzc2VydF9lcXVhbHMo
dGFyZ2V0Lm9mZnNldFRvcCwgMCk7CisgICAgfSwgYG9mZnNldFBhcmVudCBtdXN0IHJldHVybiBu
dWxsIG9uIGEgY2hpbGQgZWxlbWVudCBvZiBhIHNoYWRvdyBob3N0IGZvciB0aGUgc2hhZG93IHRy
ZWUgaW4gJHttb2RlfSBtb2RlIHdoaWNoIGlzIG5vdCBpbiB0aGUgZmxhdCB0cmVlYCk7Cit9CisK
K3Rlc3RPZmZzZXRQYXJlbnRPbkFzc2lnbmVkQ2hpbGROb3RJbkZsYXRUcmVlKCdvcGVuJyk7Cit0
ZXN0T2Zmc2V0UGFyZW50T25Bc3NpZ25lZENoaWxkTm90SW5GbGF0VHJlZSgnY2xvc2VkJyk7CisK
Kzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgo=
</data>
<flag name="review"
          id="374389"
          type_id="1"
          status="+"
          setter="simon.fraser"
    />
          </attachment>
      

    </bug>

</bugzilla>