<?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>176209</bug_id>
          
          <creation_ts>2017-08-31 19:38:03 -0700</creation_ts>
          <short_desc>WSL IntLiteral should have variable type so that it can unify with things like uint</short_desc>
          <delta_ts>2018-10-13 19:56:39 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>ggaren</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344282</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-08-31 19:38:03 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345000</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-03 10:55:36 -0700</bug_when>
    <thetext>I think that if you use an integer literal without any suffixes, then it should unify with any type in which that literal is representable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345005</commentid>
    <comment_count>2</comment_count>
      <attachid>319789</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-03 11:28:17 -0700</bug_when>
    <thetext>Created attachment 319789
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345032</commentid>
    <comment_count>3</comment_count>
      <attachid>319796</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-03 12:38:18 -0700</bug_when>
    <thetext>Created attachment 319796
the patch

Added more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345239</commentid>
    <comment_count>4</comment_count>
      <attachid>319796</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-09-04 13:10:20 -0700</bug_when>
    <thetext>Comment on attachment 319796
the patch

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

&gt; Tools/ChangeLog:24
&gt; +        Also updated Test.html so that it runs again and is better at printing things.

So the following wouldn&apos;t work:
int x = 4;
double y = x;

But the following would work:
double y = 4;

&gt; Tools/WebGPUShadingLanguageRI/IntLiteralType.js:57
&gt; +        print(&quot;Unified with: &quot; + realThis);

print() :(

&gt; Tools/WebGPUShadingLanguageRI/Intrinsics.js:67
&gt; +                type.isInt = true;

I never see this read from. What is it used for?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345252</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-04 14:06:44 -0700</bug_when>
    <thetext>Landed in https://trac.webkit.org/changeset/221593/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345254</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-09-04 14:08:50 -0700</bug_when>
    <thetext>(In reply to Myles C. Maxfield from comment #4)
&gt; Comment on attachment 319796 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=319796&amp;action=review
&gt; 
&gt; &gt; Tools/ChangeLog:24
&gt; &gt; +        Also updated Test.html so that it runs again and is better at printing things.
&gt; 
&gt; So the following wouldn&apos;t work:
&gt; int x = 4;
&gt; double y = x;
&gt; 
&gt; But the following would work:
&gt; double y = 4;

Right.

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/IntLiteralType.js:57
&gt; &gt; +        print(&quot;Unified with: &quot; + realThis);
&gt; 
&gt; print() :(

I removed it!

&gt; 
&gt; &gt; Tools/WebGPUShadingLanguageRI/Intrinsics.js:67
&gt; &gt; +                type.isInt = true;
&gt; 
&gt; I never see this read from. What is it used for?

It&apos;s not used right now.  I added it because all compilers eventually need to ask their types if they are int or float.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1353763</commentid>
    <comment_count>7</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-27 13:00:42 -0700</bug_when>
    <thetext>&lt;rdar://problem/34694473&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1469006</commentid>
    <comment_count>8</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 19:56:39 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/200</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319789</attachid>
            <date>2017-09-03 11:28:17 -0700</date>
            <delta_ts>2017-09-03 12:38:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22298</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTU1MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg0IEBACisyMDE3LTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIEludExpdGVyYWwgc2hvdWxkIGJlIGhhdmUgdmFyaWFibGUgdHlwZSBzbyB0
aGF0IGl0IGNhbiB1bmlmeSB3aXRoIHRoaW5ncyBsaWtlIHVpbnQKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjIwOQorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpbnRyb2R1Y2VzIElu
dExpdGVyYWxUeXBlLCB3aGljaCBjYW4gdW5pZnkgd2l0aCBhbnkgbnVtYmVyIHR5cGUgdGhhdCBj
YW4gcmVwcmVzZW50IHRoZQorICAgICAgICBpbnQgbGl0ZXJhbC4KKyAgICAgICAgCisgICAgICAg
IFRoaXMgbWVhbnMgdGhhdCBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgbGVnYWw6CisgICAgICAg
IAorICAgICAgICAgICAgZG91YmxlIHggPSAwOyAvLyAwIHVuaWZpZXMgd2l0aCBkb3VibGUKKyAg
ICAgICAgICAgIGRvdWJsZSB5ID0geCArIDU7IC8vIHNob3VsZCByZXNvbHZlIHRvIGRvdWJsZStk
b3VibGUKKyAgICAgICAgICAgIGRvdWJsZSB6ID0gYXJyYXlbMF07IC8vIDAgdW5pZmllcyB3aXRo
IHVpbnQKKyAgICAgICAgCisgICAgICAgIFdlIGNhbiBkbyBzaW1pbGFyIHRoaW5ncyB3aXRoIGZs
b2F0IGxpdGVyYWxzLCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHN1ZmZpeCAiZiIgYWxsIHRo
ZQorICAgICAgICB0aW1lLgorICAgICAgICAKKyAgICAgICAgSSB0aGluayB0aGF0IHRoaXMgaXMg
dmVyeSBkaWZmZXJlbnQgZnJvbSB3aGF0IEMgZG9lcy4gQyBqdXN0IHN1cHBvcnRzIGltcGxpY2l0
IHR5cGUKKyAgICAgICAgY29udmVyc2lvbnMuIFRoYXQncyB3aHkgImRvdWJsZSB4ID0gMCIgd29y
a3MgaW4gQy4gV2UgZG9uJ3QgZG8gdHlwZSBjb252ZXJzaW9ucy4gSW5zdGVhZCwgd2UKKyAgICAg
ICAgbGV0IGVhY2ggbGl0ZXJhbCB1bmlmeSBpdHNlbGYgd2l0aCBvbmUgdHlwZS4KKyAgICAgICAg
CisgICAgICAgIEFsc28gdXBkYXRlZCBUZXN0Lmh0bWwgc28gdGhhdCBpdCBydW5zIGFnYWluIGFu
ZCBpcyBiZXR0ZXIgYXQgcHJpbnRpbmcgdGhpbmdzLgorCisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0No
ZWNrZXIuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbC5q
czoKKyAgICAgICAgKEludExpdGVyYWwpOgorICAgICAgICAoSW50TGl0ZXJhbC5wcm90b3R5cGUu
dG9TdHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWxU
eXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKEludExpdGVyYWxUeXBlKToKKyAgICAgICAgKEludExp
dGVyYWxUeXBlLnByb3RvdHlwZS5nZXQgb3JpZ2luKToKKyAgICAgICAgKEludExpdGVyYWxUeXBl
LnByb3RvdHlwZS5nZXQgdmFsdWUpOgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBl
LmdldCBpc1ByaW1pdGl2ZSk6CisgICAgICAgIChJbnRMaXRlcmFsVHlwZS5wcm90b3R5cGUuZ2V0
IGlzVW5pZmlhYmxlKToKKyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS50eXBlVmFy
aWFibGVVbmlmeSk6CisgICAgICAgIChJbnRMaXRlcmFsVHlwZS5wcm90b3R5cGUudW5pZnlJbXBs
KToKKyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS52ZXJpZnlBc0FyZ3VtZW50KToK
KyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS52ZXJpZnlBc1BhcmFtZXRlcik6Cisg
ICAgICAgIChJbnRMaXRlcmFsVHlwZS5wcm90b3R5cGUuY29tbWl0VW5pZmljYXRpb24pOgorICAg
ICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzOgorICAgICAgICAoSW50cmluc2ljcy4p
OgorICAgICAgICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTGl0ZXJhbFR5cGVDaGVja2VyLmpzOgorICAgICAgICAoTGl0ZXJhbFR5cGVDaGVja2VyLnBy
b3RvdHlwZS52aXNpdEludExpdGVyYWxUeXBlKToKKyAgICAgICAgKExpdGVyYWxUeXBlQ2hlY2tl
cik6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlVHlwZS5qczoKKyAg
ICAgICAgKE5hdGl2ZVR5cGUpOgorICAgICAgICAoTmF0aXZlVHlwZS5wcm90b3R5cGUuZ2V0IGlz
TnVtYmVyKToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90eXBlLnNldCBpc051bWJlcik6Cisg
ICAgICAgIChOYXRpdmVUeXBlLnByb3RvdHlwZS5nZXQgaXNJbnQpOgorICAgICAgICAoTmF0aXZl
VHlwZS5wcm90b3R5cGUuc2V0IGlzSW50KToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90eXBl
LmdldCBpc0Zsb2F0KToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90eXBlLnNldCBpc0Zsb2F0
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzOgorICAgICAg
ICAocHJlcGFyZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIu
anM6CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRJbnRMaXRlcmFsKToKKyAgICAg
ICAgKFJld3JpdGVyLnByb3RvdHlwZS52aXNpdEludExpdGVyYWxUeXBlKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanM6CisgICAgICAgICogV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1Rlc3QuanM6CisgICAgICAgICh0aGlzLndpbmRvdy50aGlzLnByaW50KToKKyAg
ICAgICAgKGRvUHJlcCk6CisgICAgICAgIChkb0xleCk6CisgICAgICAgIChjaGVja051bWJlcik6
CisgICAgICAgIChjaGVja0ludCk6CisgICAgICAgIChURVNUX25hbWVSZXNvbHV0aW9uRmFpbHVy
ZSk6CisgICAgICAgIChURVNUX3RocmVhZEFycmF5TG9hZEludExpdGVyYWwpOgorICAgICAgICAo
VEVTVF9kZXZpY2VBcnJheVN0b3JlSW50TGl0ZXJhbCk6CisgICAgICAgIChURVNUX3JldHVybklu
dExpdGVyYWxEb3VibGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUu
anM6CisgICAgICAgIChUeXBlLnByb3RvdHlwZS5nZXQgaXNOdW1iZXIpOgorICAgICAgICAoVHlw
ZS5wcm90b3R5cGUuZ2V0IGlzSW50KToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc0Zs
b2F0KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzOgorICAg
ICAgICAoVmlzaXRvci5wcm90b3R5cGUudmlzaXRJbnRMaXRlcmFsKToKKyAgICAgICAgKFZpc2l0
b3IucHJvdG90eXBlLnZpc2l0SW50TGl0ZXJhbFR5cGUpOgorCiAyMDE3LTA5LTAyICBGaWxpcCBQ
aXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgV1NMIHNob3VsZCBzdXBwb3J0IHN0
cnVjdHMKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIy
MTU1MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBj
b3B5KQpAQCAtNjUsNiArNjUsNyBAQCBsb2FkKCJJbmxpbmUuanMiKTsKIGxvYWQoIklubGluZXIu
anMiKTsKIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJh
bC5qcyIpOworbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMi
KTsKIGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7CkluZGV4OiBUb29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMTU1MCkKKysr
IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcgY29weSkK
QEAgLTE5OCwxMCArMTk4LDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAg
IAogICAgIHZpc2l0SW50TGl0ZXJhbChub2RlKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHJldHVybiBzb21lIGtpbmQgb2YgdHlwZSB2YXJpYWJsZSB0aGF0IGRlZmF1bHRz
IHRvIGludCBidXQgaXMgaGFwcHkgdG8KLSAgICAgICAgLy8gdW5pZnkgd2l0aCB1aW50LgotICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjA5Ci0g
ICAgICAgIHJldHVybiB0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MuaW50MzI7CisgICAgICAgIHJl
dHVybiBub2RlLnR5cGU7CiAgICAgfQogICAgIAogICAgIHZpc2l0VWludExpdGVyYWwobm9kZSkK
QEAgLTIxMSw3ICsyMDgsNiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAg
CiAgICAgdmlzaXROdWxsTGl0ZXJhbChub2RlKQogICAgIHsKLSAgICAgICAgLy8gUmV0dXJuIHRo
ZSBudWxsIGxpdGVyYWwncyB0eXBlIHZhcmlhYmxlLgogICAgICAgICByZXR1cm4gbm9kZS50eXBl
OwogICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExp
dGVyYWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50
TGl0ZXJhbC5qcwkocmV2aXNpb24gMjIxNTUwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvSW50TGl0ZXJhbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQCBjbGFz
cyBJbnRMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgewogICAgICAgICBzdXBlcihv
cmlnaW4pOwogICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOworICAgICAgICB0aGlzLnR5cGUg
PSBuZXcgSW50TGl0ZXJhbFR5cGUob3JpZ2luLCB2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIGdl
dCB2YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9CkBAIC0zNiw3ICszNyw3IEBAIGNsYXNz
IEludExpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICAKICAgICB0b1N0cmluZygpCiAg
ICAgewotICAgICAgICByZXR1cm4gIiIgKyB0aGlzLl92YWx1ZTsKKyAgICAgICAgcmV0dXJuICIi
ICsgdGhpcy52YWx1ZTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL0ludExpdGVyYWxUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0ludExpdGVyYWxUeXBlLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWxUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgSW50TGl0ZXJhbFR5cGUgZXh0ZW5kcyBUeXBlIHsK
KyAgICBjb25zdHJ1Y3RvcihvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsK
KyAgICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLl92YWx1ZSA9IHZh
bHVlOworICAgIH0KKyAgICAKKyAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2lu
OyB9CisgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KKyAgICAKKyAgICBn
ZXQgaXNQcmltaXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgZ2V0IGlzVW5pZmlhYmxlKCkg
eyByZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHR5cGVWYXJpYWJsZVVuaWZ5KHVuaWZpY2F0aW9u
Q29udGV4dCwgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFR5
cGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJu
IHRoaXMuX3R5cGVWYXJpYWJsZVVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKTsK
KyAgICB9CisgICAgCisgICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy50eXBlVmFyaWFibGVVbmlmeSh1bmlmaWNhdGlvbkNv
bnRleHQsIG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdmVyaWZ5QXNBcmd1bWVudCh1bmlmaWNh
dGlvbkNvbnRleHQpCisgICAgeworICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNv
bnRleHQuZmluZCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlYWxUaGlzLmlzTnVtYmVyICYmIHJl
YWxUaGlzLmNhblJlcHJlc2VudCh0aGlzLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdmVyaWZ5
QXNQYXJhbWV0ZXIodW5pZmljYXRpb25Db250ZXh0KQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJJbnRMaXRlcmFsVHlwZSBzaG91bGQgbmV2ZXIgYmUgdXNlZCBhcyBhIHR5cGUgcGFy
YW1ldGVyIik7CisgICAgfQorICAgIAorICAgIGNvbW1pdFVuaWZpY2F0aW9uKHVuaWZpY2F0aW9u
Q29udGV4dCkKKyAgICB7CisgICAgICAgIHRoaXMudHlwZSA9IHVuaWZpY2F0aW9uQ29udGV4dC5m
aW5kKHRoaXMpOworICAgIH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICBy
ZXR1cm4gImludExpdGVyYWxUeXBlPCIgKyB0aGlzLnZhbHVlICsgIj4iOworICAgIH0KK30KKwpJ
bmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZp
c2lvbiAyMjE1NTApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNz
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC00NSwxMSArNDUsMjggQEAgY2xhc3MgSW50cmluc2ljcyB7
CiAgICAgICAgICAgICAgICAgdHlwZS5zaXplID0gMDsKICAgICAgICAgICAgICAgICB0eXBlLnBv
cHVsYXRlRGVmYXVsdFZhbHVlID0gKCkgPT4geyB9OwogICAgICAgICAgICAgfSk7CisgICAgICAg
IAorICAgICAgICBmdW5jdGlvbiBpc0JpdHdpc2VFcXVpdmFsZW50KGxlZnQsIHJpZ2h0KQorICAg
ICAgICB7CisgICAgICAgICAgICBsZXQgZG91YmxlQXJyYXkgPSBuZXcgRmxvYXQ2NEFycmF5KDEp
OworICAgICAgICAgICAgbGV0IGludEFycmF5ID0gbmV3IEludDMyQXJyYXkoZG91YmxlQXJyYXku
YnVmZmVyKTsKKyAgICAgICAgICAgIGRvdWJsZUFycmF5WzBdID0gbGVmdDsKKyAgICAgICAgICAg
IGxldCBsZWZ0SW50cyA9IG5ldyBJbnQzMkFycmF5KGludEFycmF5KTsKKyAgICAgICAgICAgIGRv
dWJsZUFycmF5WzFdID0gcmlnaHQ7CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChsZWZ0SW50c1tpXSAhPSBpbnRBcnJheVtpXSkK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KIAogICAgICAgICB0aGlzLl9tYXAuc2V0KAog
ICAgICAgICAgICAgIm5hdGl2ZSBwcmltaXRpdmUgdHlwZSBpbnQzMjw+IiwKICAgICAgICAgICAg
IHR5cGUgPT4gewogICAgICAgICAgICAgICAgIHRoaXMuaW50MzIgPSB0eXBlOworICAgICAgICAg
ICAgICAgIHR5cGUuaXNJbnQgPSB0cnVlOworICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1iZXIg
PSB0cnVlOworICAgICAgICAgICAgICAgIHR5cGUuY2FuUmVwcmVzZW50ID0gdmFsdWUgPT4gaXNC
aXR3aXNlRXF1aXZhbGVudCh2YWx1ZSB8IDAsIHZhbHVlKTsKICAgICAgICAgICAgICAgICB0eXBl
LnNpemUgPSAxOwogICAgICAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAo
YnVmZmVyLCBvZmZzZXQpID0+IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKICAgICAgICAgICAgIH0p
OwpAQCAtNTgsNiArNzUsOSBAQCBjbGFzcyBJbnRyaW5zaWNzIHsKICAgICAgICAgICAgICJuYXRp
dmUgcHJpbWl0aXZlIHR5cGUgdWludDMyPD4iLAogICAgICAgICAgICAgdHlwZSA9PiB7CiAgICAg
ICAgICAgICAgICAgdGhpcy51aW50MzIgPSB0eXBlOworICAgICAgICAgICAgICAgIHR5cGUuaXNJ
bnQgPSB0cnVlOworICAgICAgICAgICAgICAgIHR5cGUuaXNOdW1iZXIgPSB0cnVlOworICAgICAg
ICAgICAgICAgIHR5cGUuY2FuUmVwcmVzZW50ID0gdmFsdWUgPT4gaXNCaXR3aXNlRXF1aXZhbGVu
dCh2YWx1ZSA+Pj4gMCwgdmFsdWUpOwogICAgICAgICAgICAgICAgIHR5cGUuc2l6ZSA9IDE7CiAg
ICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURlZmF1bHRWYWx1ZSA9IChidWZmZXIsIG9mZnNl
dCkgPT4gYnVmZmVyLnNldChvZmZzZXQsIDApOwogICAgICAgICAgICAgfSk7CkBAIC02Nyw2ICs4
Nyw5IEBAIGNsYXNzIEludHJpbnNpY3MgewogICAgICAgICAgICAgdHlwZSA9PiB7CiAgICAgICAg
ICAgICAgICAgdGhpcy5kb3VibGUgPSB0eXBlOwogICAgICAgICAgICAgICAgIHR5cGUuc2l6ZSA9
IDE7CisgICAgICAgICAgICAgICAgdHlwZS5pc0Zsb2F0ID0gdHJ1ZTsKKyAgICAgICAgICAgICAg
ICB0eXBlLmlzTnVtYmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0eXBlLmNhblJlcHJlc2Vu
dCA9IHZhbHVlID0+IHRydWU7CiAgICAgICAgICAgICAgICAgdHlwZS5wb3B1bGF0ZURlZmF1bHRW
YWx1ZSA9IChidWZmZXIsIG9mZnNldCkgPT4gYnVmZmVyLnNldChvZmZzZXQsIDApOwogICAgICAg
ICAgICAgfSk7CiAgICAgICAgIApJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TGl0ZXJhbFR5cGVDaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0xpdGVyYWxUeXBlQ2hlY2tlci5qcwkocmV2aXNpb24gMjIxNTUwKQorKysgVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGl0ZXJhbFR5cGVDaGVja2VyLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0zOCw1ICszOCwxMSBAQCBjbGFzcyBMaXRlcmFsVHlwZUNoZWNrZXIgZXh0ZW5k
cyBWaXNpdG9yCiAgICAgICAgIGlmICghbm9kZS50eXBlKQogICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJOdWxsIGF0ICIgKyBub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcgKyAiIGRvZXMgbm90
IGhhdmUgdHlwZSIpOwogICAgIH0KKyAgICAKKyAgICB2aXNpdEludExpdGVyYWxUeXBlKG5vZGUp
CisgICAgeworICAgICAgICBpZiAoIW5vZGUudHlwZSkKKyAgICAgICAgICAgIHRocm93IG5ldyBF
cnJvcihub2RlICsgIiBhdCAiICsgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBkb2VzIG5v
dCBoYXZlIHR5cGUiKTsKKyAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL05hdGl2ZVR5cGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvTmF0aXZlVHlwZS5qcwkocmV2aXNpb24gMjIxNTUwKQorKysgVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlVHlwZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsOSBAQCBjbGFzcyBOYXRpdmVUeXBlIGV4dGVuZHMgVHlwZSB7CiAgICAgICAgIHRoaXMuX25h
bWUgPSBuYW1lOwogICAgICAgICB0aGlzLl9pc1ByaW1pdGl2ZSA9IGlzUHJpbWl0aXZlOwogICAg
ICAgICB0aGlzLl90eXBlUGFyYW1ldGVycyA9IHR5cGVQYXJhbWV0ZXJzOworICAgICAgICB0aGlz
Ll9pc051bWJlciA9IGZhbHNlOworICAgICAgICB0aGlzLl9pc0ludCA9IGZhbHNlOworICAgICAg
ICB0aGlzLl9pc0Zsb2F0ID0gZmFsc2U7CiAgICAgfQogICAgIAogICAgIGdldCBvcmlnaW4oKSB7
IHJldHVybiB0aGlzLl9vcmlnaW47IH0KQEAgLTQwLDYgKzQzLDE0IEBAIGNsYXNzIE5hdGl2ZVR5
cGUgZXh0ZW5kcyBUeXBlIHsKICAgICBnZXQgdHlwZVBhcmFtZXRlcnMoKSB7IHJldHVybiB0aGlz
Ll90eXBlUGFyYW1ldGVyczsgfQogICAgIGdldCBpc05hdGl2ZSgpIHsgcmV0dXJuIHRydWU7IH0K
ICAgICAKKyAgICAvLyBXZSBsZXQgSW50cmluc2ljcy5qcyBzZXQgdGhlc2UgYXMgaXQgbGlrZXMu
CisgICAgZ2V0IGlzTnVtYmVyKCkgeyByZXR1cm4gdGhpcy5faXNOdW1iZXI7IH0KKyAgICBzZXQg
aXNOdW1iZXIodmFsdWUpIHsgdGhpcy5faXNOdW1iZXIgPSB2YWx1ZTsgfQorICAgIGdldCBpc0lu
dCgpIHsgcmV0dXJuIHRoaXMuX2lzSW50OyB9CisgICAgc2V0IGlzSW50KHZhbHVlKSB7IHRoaXMu
X2lzSW50ID0gdmFsdWU7IH0KKyAgICBnZXQgaXNGbG9hdCgpIHsgcmV0dXJuIHRoaXMuX2lzRmxv
YXQ7IH0KKyAgICBzZXQgaXNGbG9hdCh2YWx1ZSkgeyB0aGlzLl9pc0Zsb2F0ID0gdmFsdWU7IH0K
KyAgICAKICAgICBpbnN0YW50aWF0ZSh0eXBlQXJndW1lbnRzKQogICAgIHsKICAgICAgICAgaWYg
KHR5cGVBcmd1bWVudHMubGVuZ3RoICE9IHRoaXMudHlwZVBhcmFtZXRlcnMubGVuZ3RoKQpJbmRl
eDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCShyZXZpc2lvbiAyMjE1
NTApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiBmdW5jdGlvbiBwcmVwYXJlKG9yaWdpbiwgbGluZU51
bWJlck9mZnNldCwgdGV4dCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IG5ldyBQcm9ncmFtKCk7Ci0g
ICAgcGFyc2UocHJvZ3JhbSwgIjxzdGRsaWI+IiwgMjgsIHN0YW5kYXJkTGlicmFyeSk7CisgICAg
cGFyc2UocHJvZ3JhbSwgIi9pbnRlcm5hbC9zdGRsaWIiLCAyOCwgc3RhbmRhcmRMaWJyYXJ5KTsK
ICAgICBwYXJzZShwcm9ncmFtLCBvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpOwogICAg
IHJlc29sdmVOYW1lcyhwcm9ncmFtKTsKICAgICByZXNvbHZlVHlwZURlZnMocHJvZ3JhbSk7Cklu
ZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9SZXdyaXRlci5qcwkocmV2aXNpb24g
MjIxNTUwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHdv
cmtpbmcgY29weSkKQEAgLTIwMCw3ICsyMDAsMTYgQEAgY2xhc3MgUmV3cml0ZXIgewogICAgIAog
ICAgIHZpc2l0SW50TGl0ZXJhbChub2RlKQogICAgIHsKLSAgICAgICAgcmV0dXJuIG5vZGU7Cisg
ICAgICAgIGxldCByZXN1bHQgPSBuZXcgSW50TGl0ZXJhbChub2RlLm9yaWdpbiwgbm9kZS52YWx1
ZSk7CisgICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgICAKKyAgICB2aXNpdEludExpdGVyYWxUeXBlKG5v
ZGUpCisgICAgeworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3IEludExpdGVyYWxUeXBlKG5vZGUu
b3JpZ2luLCBub2RlLnZhbHVlKTsKKyAgICAgICAgcmVzdWx0LnR5cGUgPSBub2RlLnR5cGUgPyBu
b2RlLnR5cGUudmlzaXQodGhpcykgOiBudWxsOworICAgICAgICByZXR1cm4gcmVzdWx0OwogICAg
IH0KIAogICAgIHZpc2l0VWludExpdGVyYWwobm9kZSkKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHJldmlzaW9uIDIyMTU1MCkK
KysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1N0YW5kYXJkTGlicmFyeS5qcwkod29y
a2luZyBjb3B5KQpAQCAtMzgsNiArMzgsOCBAQCBuYXRpdmUgcHJpbWl0aXZlIHR5cGVkZWYgdWlu
dDMyOwogdHlwZWRlZiBpbnQgPSBpbnQzMjsKIHR5cGVkZWYgdWludCA9IHVpbnQzMjsKIAorbmF0
aXZlIHByaW1pdGl2ZSB0eXBlZGVmIGRvdWJsZTsKKwogbmF0aXZlIGludCBvcGVyYXRvcisoaW50
LCBpbnQpOwogCiBuYXRpdmUgdGhyZWFkIFReIG9wZXJhdG9yJltdPFQ+KHRocmVhZCBUW10sIHVp
bnQpOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkocmV2aXNp
b24gMjIxNTUwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0xNywxMSArMTcsMTMgQEAKIDxzY3JpcHQgc3JjPSJDYWxsRXhwcmVz
c2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2FsbEZ1bmN0aW9uLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJDaGVjay5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iQ2hlY2tM
aXRlcmFsVHlwZXMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNoZWNrUmV0dXJucy5qcyI+
PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2hlY2tVbnJlYWNoYWJsZUNvZGUuanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkNvbW1h
RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ29uc3RleHByVHlwZVBhcmFt
ZXRlci5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iRG90RXhwcmVzc2lvbi5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJFQXJyYXlSZWYuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkVCdWZmZXIu
anMiPjwvc2NyaXB0PgpAQCAtMzksNyArNDEsOSBAQAogPHNjcmlwdCBzcmM9IklubGluZXIuanMi
Pjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ikluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyI+PC9zY3Jp
cHQ+CiA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
SW50TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkludHJpbnNpY3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkxpdGVyYWxUeXBlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+
CiA8c2NyaXB0IHNyYz0iTGV4ZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxleGVyVG9r
ZW4uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik1ha2VQdHJFeHByZXNzaW9uLmpzIj48L3Nj
cmlwdD4KQEAgLTUxLDYgKzU1LDcgQEAKIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBlSW5zdGFuY2Uu
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9Ik51bGxMaXRlcmFsLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQgc3JjPSJOdWxsVHlwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iT3ZlcmxvYWRS
ZXNvbHV0aW9uRmFpbHVyZS5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iUGFyc2UuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlByZXBhcmUuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IlByb2dyYW0uanMiPjwvc2NyaXB0PgpAQCAtNjYsNiArNzEsNyBAQAogPHNjcmlwdCBzcmM9IlJl
dHVybkNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlJldHVybkV4Y2VwdGlvbi5q
cyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RhbmRhcmRMaWJyYXJ5LmpzIj48L3NjcmlwdD4K
KzxzY3JpcHQgc3JjPSJTdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJTdWJzdGl0dXRpb24u
anMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IlN1ZmZpeENhbGxBc3NpZ25tZW50LmpzIj48L3Nj
cmlwdD4KQEAgLTg2LDggKzkyLDIxIEBACiA8c2NyaXB0IHNyYz0iV1R5cGVFcnJvci5qcyI+PC9z
Y3JpcHQ+CiAKIDxzY3JpcHQgc3JjPSJUZXN0LmpzIj48L3NjcmlwdD4KKworPHNjcmlwdD4KK2Z1
bmN0aW9uIGRvVGVzdEluQnJvd3NlcigpCit7CisgICAgdHJ5IHsKKyAgICAgICAgZG9UZXN0KHdp
bmRvdyk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBwcmludCgiRVJST1I6ICIgKyBlLm1l
c3NhZ2UpOworICAgICAgICBwcmludChlLnN0YWNrKTsKKyAgICB9Cit9Cis8L3NjcmlwdD4KKwog
PC9oZWFkPgotPGJvZHkgb25sb2FkPSJkb1Rlc3QodGhpcykiPgorPGJvZHkgb25sb2FkPSJkb1Rl
c3RJbkJyb3dzZXIoKSI+CiA8ZGl2IGlkPSJtZXNzYWdlcyI+PC9kaXY+CiA8L2JvZHk+CiA8L2h0
bWw+CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHJldmlzaW9uIDIy
MTU1MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAgaWYgKHRoaXMud2luZG93KSB7CiAgICAgdGhpcy5wcmlu
dCA9ICh0ZXh0KSA9PiB7CiAgICAgICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgic3BhbiIpOwogICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgibWVzc2FnZXMiKS5h
cHBlbmRDaGlsZChzcGFuKTsKLSAgICAgICAgc3Bhbi5pbm5lckhUTUwgPSB0ZXh0ICsgIjxicj4i
OworICAgICAgICBzcGFuLmlubmVySFRNTCA9IHRleHQucmVwbGFjZSgvIC9nLCAiJm5ic3A7Iiku
cmVwbGFjZSgvXG4vZywgIjxicj4iKSArICI8YnI+IjsKICAgICB9OwogICAgIHRoaXMucHJlY2lz
ZVRpbWUgPSAoKSA9PiBwZXJmb3JtYW5jZS5ub3coKSAvIDEwMDA7CiB9IGVsc2UKQEAgLTM2LDEy
ICszNiwxMiBAQCBpZiAodGhpcy53aW5kb3cpIHsKIAogZnVuY3Rpb24gZG9QcmVwKGNvZGUpCiB7
Ci0gICAgcmV0dXJuIHByZXBhcmUoIjx0ZXN0PiIsIDAsIGNvZGUpOworICAgIHJldHVybiBwcmVw
YXJlKCIvaW50ZXJuYWwvdGVzdCIsIDAsIGNvZGUpOwogfQogCiBmdW5jdGlvbiBkb0xleChjb2Rl
KQogewotICAgIGxldCBsZXhlciA9IG5ldyBMZXhlcigiPHRlc3Q+IiwgMCwgY29kZSk7CisgICAg
bGV0IGxleGVyID0gbmV3IExleGVyKCIvaW50ZXJuYWwvdGVzdCIsIDAsIGNvZGUpOwogICAgIHZh
ciByZXN1bHQgPSBbXTsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIGxldCBuZXh0ID0gbGV4ZXIu
bmV4dCgpOwpAQCAtNTcsMTMgKzU3LDIxIEBAIGZ1bmN0aW9uIG1ha2VJbnQocHJvZ3JhbSwgdmFs
dWUpCiAgICAgcmV0dXJuIFR5cGVkVmFsdWUuYm94KHByb2dyYW0uaW50cmluc2ljcy5pbnQzMiwg
dmFsdWUpOwogfQogCi1mdW5jdGlvbiBjaGVja0ludChwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVk
KQorZnVuY3Rpb24gY2hlY2tOdW1iZXIocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCkKIHsKLSAg
ICBpZiAoIXJlc3VsdC50eXBlLmVxdWFscyhwcm9ncmFtLmludHJpbnNpY3MuaW50MzIpKQorICAg
IGlmICghcmVzdWx0LnR5cGUuaXNOdW1iZXIpCiAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV3Jv
bmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJlc3VsdCk7CiAgICAgaWYgKHJlc3VsdC52YWx1
ZSAhPSBleHBlY3RlZCkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyByZXN1bHQ6ICIg
KyByZXN1bHQgKyAiIChleHBlY3RlZCAiICsgZXhwZWN0ZWQgKyAiKSIpOwogfQorCitmdW5jdGlv
biBjaGVja0ludChwcm9ncmFtLCByZXN1bHQsIGV4cGVjdGVkKQoreworICAgIGlmICghcmVzdWx0
LnR5cGUuZXF1YWxzKHByb2dyYW0uaW50cmluc2ljcy5pbnQzMikpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcigiV3JvbmcgcmVzdWx0IHR5cGU7IHJlc3VsdDogIiArIHJlc3VsdCk7CisgICAgY2hl
Y2tOdW1iZXIocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCk7Cit9CisKIGZ1bmN0aW9uIGNoZWNr
TGV4ZXJUb2tlbihyZXN1bHQsIGV4cGVjdGVkSW5kZXgsIGV4cGVjdGVkS2luZCwgZXhwZWN0ZWRU
ZXh0KQogewogICAgIGlmIChyZXN1bHQuX2luZGV4ICE9IGV4cGVjdGVkSW5kZXgpCkBAIC0xMDUs
NyArMTEzLDcgQEAgZnVuY3Rpb24gVEVTVF9uYW1lUmVzb2x1dGlvbkZhaWx1cmUoKQogewogICAg
IGNoZWNrRmFpbCgKICAgICAgICAgKCkgPT4gZG9QcmVwKCJpbnQgZm9vKGludCB4KSB7IHJldHVy
biB4ICsgeTsgfSIpLAotICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYg
ZS5tZXNzYWdlLmluZGV4T2YoIjx0ZXN0PjoxIikgIT0gLTEpOworICAgICAgICAoZSkgPT4gZSBp
bnN0YW5jZW9mIFdUeXBlRXJyb3IgJiYgZS5tZXNzYWdlLmluZGV4T2YoIi9pbnRlcm5hbC90ZXN0
OjEiKSAhPSAtMSk7CiB9CiAKIGZ1bmN0aW9uIFRFU1Rfc2ltcGxlVmFyaWFibGUoKQpAQCAtMjA4
LDYgKzIxNiwyMCBAQCBmdW5jdGlvbiBURVNUX3RocmVhZEFycmF5TG9hZCgpCiAgICAgY2hlY2tJ
bnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7CiB9CiAKK2Z1bmN0aW9uIFRFU1RfdGhyZWFkQXJyYXlM
b2FkSW50TGl0ZXJhbCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAgICAgICBp
bnQgZm9vKHRocmVhZCBpbnRbXSBhcnJheSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGFycmF5WzBdOworICAgICAgICB9CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVm
ZmVyKDEpOworICAgIGJ1ZmZlci5zZXQoMCwgODkpOworICAgIGxldCByZXN1bHQgPSBjYWxsRnVu
Y3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbVHlwZWRWYWx1ZS5ib3gobmV3IEFycmF5UmVmVHlw
ZShudWxsLCAidGhyZWFkIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludDMyKSwgbmV3IEVBcnJheVJl
ZihuZXcgRVB0cihidWZmZXIsIDApLCAxKSldKTsKKyAgICBjaGVja0ludChwcm9ncmFtLCByZXN1
bHQsIDg5KTsKK30KKwogZnVuY3Rpb24gVEVTVF9kZXZpY2VBcnJheUxvYWQoKQogewogICAgIGxl
dCBwcm9ncmFtID0gZG9QcmVwKGAKQEAgLTI2NCw2ICsyODYsMjcgQEAgZnVuY3Rpb24gVEVTVF9k
ZXZpY2VBcnJheVN0b3JlKCkKICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3Rv
cmVkIGludG8gYnVmZmVyIChleHBlY3RlZCAtMTExKTogIiArIGJ1ZmZlci5nZXQoMCkpOwogfQog
CitmdW5jdGlvbiBURVNUX2RldmljZUFycmF5U3RvcmVJbnRMaXRlcmFsKCkKK3sKKyAgICBsZXQg
cHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIHZvaWQgZm9vKGRldmljZSBpbnRbXSBhcnJheSwg
aW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBhcnJheVswXSA9IHZhbHVlOworICAg
ICAgICB9CisgICAgYCk7CisgICAgbGV0IGJ1ZmZlciA9IG5ldyBFQnVmZmVyKDEpOworICAgIGJ1
ZmZlci5zZXQoMCwgMTUpOworICAgIGxldCBhcnJheVJlZiA9IFR5cGVkVmFsdWUuYm94KAorICAg
ICAgICBuZXcgQXJyYXlSZWZUeXBlKG51bGwsICJkZXZpY2UiLCBwcm9ncmFtLmludHJpbnNpY3Mu
aW50MzIpLAorICAgICAgICBuZXcgRUFycmF5UmVmKG5ldyBFUHRyKGJ1ZmZlciwgMCksIDEpKTsK
KyAgICBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbYXJyYXlSZWYsIG1ha2VJbnQo
cHJvZ3JhbSwgNjUpXSk7CisgICAgaWYgKGJ1ZmZlci5nZXQoMCkgIT0gNjUpCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQgNjUp
OiAiICsgYnVmZmVyLmdldCgwKSk7CisgICAgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSwgW2FycmF5UmVmLCBtYWtlSW50KHByb2dyYW0sIC0xMTEpXSk7CisgICAgaWYgKGJ1ZmZlci5n
ZXQoMCkgIT0gLTExMSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJCYWQgdmFsdWUgc3RvcmVk
IGludG8gYnVmZmVyIChleHBlY3RlZCAtMTExKTogIiArIGJ1ZmZlci5nZXQoMCkpOworfQorCiBm
dW5jdGlvbiBURVNUX3NpbXBsZVByb3RvY29sKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJl
cChgCkBAIC02MzMsNiArNjc2LDIwIEBAIGZ1bmN0aW9uIFRFU1RfZGVmYXVsdEluaXRpYWxpemVk
TnVsbEFycmEKICAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHJhcEVycm9yKTsKIH0KIAor
ZnVuY3Rpb24gVEVTVF9kZWZhdWx0SW5pdGlhbGl6ZWROdWxsQXJyYXlSZWZJbnRMaXRlcmFsKCkK
K3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCisgICAgICAgIGludCBmb28oKQorICAgICAg
ICB7CisgICAgICAgICAgICB0aHJlYWQgaW50W10gcCA9IG51bGw7CisgICAgICAgICAgICByZXR1
cm4gcFswXTsKKyAgICAgICAgfQorICAgIGApOworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkg
PT4gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLAorICAgICAgICAoZSkgPT4g
ZSBpbnN0YW5jZW9mIFdUcmFwRXJyb3IpOworfQorCiBmdW5jdGlvbiBURVNUX3Bhc3NOdWxsVG9Q
dHJNb25vbW9ycGhpY0FycmF5UmVmKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCkBA
IC02NjYsNiArNzIzLDE4IEBAIGZ1bmN0aW9uIFRFU1RfcGFzc051bGxUb1B0clBvbHltb3JwaGlj
QXIKICAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yKTsKIH0KIAorZnVuY3Rp
b24gVEVTVF9yZXR1cm5JbnRMaXRlcmFsVWludCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1By
ZXAoInVpbnQgZm9vKCkgeyByZXR1cm4gNDI7IH0iKTsKKyAgICBjaGVja051bWJlcihwcm9ncmFt
LCBjYWxsRnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtdLCBbXSksIDQyKTsKK30KKworZnVuY3Rp
b24gVEVTVF9yZXR1cm5JbnRMaXRlcmFsRG91YmxlKCkKK3sKKyAgICBsZXQgcHJvZ3JhbSA9IGRv
UHJlcCgiZG91YmxlIGZvbygpIHsgcmV0dXJuIDQyOyB9Iik7CisgICAgY2hlY2tOdW1iZXIocHJv
Z3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSwgW10pLCA0Mik7Cit9CisKIGxl
dCBmaWx0ZXIgPSAvLiovOyAvLyBydW4gZXZlcnl0aGluZyBieSBkZWZhdWx0CiBpZiAodGhpc1si
YXJndW1lbnRzIl0pIHsKICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7
IGkrKykgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVHlwZS5qcwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCShyZXZpc2lv
biAyMjE1NTApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw5IEBAIGNsYXNzIFR5cGUgZXh0ZW5kcyBOb2RlIHsKICAg
ICBnZXQga2luZCgpIHsgcmV0dXJuIFR5cGU7IH0KICAgICBnZXQgaXNQdHIoKSB7IHJldHVybiBm
YWxzZTsgfQogICAgIGdldCBpc0FycmF5UmVmKCkgeyByZXR1cm4gZmFsc2U7IH0KKyAgICBnZXQg
aXNOdW1iZXIoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdldCBpc0ludCgpIHsgcmV0dXJuIGZh
bHNlOyB9CisgICAgZ2V0IGlzRmxvYXQoKSB7IHJldHVybiBmYWxzZTsgfQogICAgIAogICAgIGlu
aGVyaXRzKHByb3RvY29sKQogICAgIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL1Zpc2l0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvVmlzaXRvci5qcwkocmV2aXNpb24gMjIxNTUwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvVmlzaXRvci5qcwkod29ya2luZyBjb3B5KQpAQCAtMjE1LDYgKzIxNSwxMyBAQCBj
bGFzcyBWaXNpdG9yIHsKICAgICAKICAgICB2aXNpdEludExpdGVyYWwobm9kZSkKICAgICB7Cisg
ICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICB9CisgICAgCisgICAgdmlzaXRJbnRM
aXRlcmFsVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgaWYgKG5vZGUudHlwZSkKKyAgICAgICAg
ICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKICAgICB9CiAgICAgCiAgICAgdmlzaXRVaW50TGl0
ZXJhbChub2RlKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319796</attachid>
            <date>2017-09-03 12:38:18 -0700</date>
            <delta_ts>2017-09-04 13:11:22 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>23773</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDIyMTU1MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDg0IEBACisyMDE3LTA5LTAzICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisK
KyAgICAgICAgV1NMIEludExpdGVyYWwgc2hvdWxkIGhhdmUgdmFyaWFibGUgdHlwZSBzbyB0aGF0
IGl0IGNhbiB1bmlmeSB3aXRoIHRoaW5ncyBsaWtlIHVpbnQKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3NjIwOQorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpbnRyb2R1Y2VzIEludExp
dGVyYWxUeXBlLCB3aGljaCBjYW4gdW5pZnkgd2l0aCBhbnkgbnVtYmVyIHR5cGUgdGhhdCBjYW4g
cmVwcmVzZW50IHRoZQorICAgICAgICBpbnQgbGl0ZXJhbC4KKyAgICAgICAgCisgICAgICAgIFRo
aXMgbWVhbnMgdGhhdCBhbGwgb2YgdGhlIGZvbGxvd2luZyBhcmUgbGVnYWw6CisgICAgICAgIAor
ICAgICAgICAgICAgZG91YmxlIHggPSAwOyAvLyAwIHVuaWZpZXMgd2l0aCBkb3VibGUKKyAgICAg
ICAgICAgIGRvdWJsZSB5ID0geCArIDU7IC8vIHNob3VsZCByZXNvbHZlIHRvIGRvdWJsZStkb3Vi
bGUKKyAgICAgICAgICAgIGRvdWJsZSB6ID0gYXJyYXlbMF07IC8vIDAgdW5pZmllcyB3aXRoIHVp
bnQKKyAgICAgICAgCisgICAgICAgIFdlIGNhbiBkbyBzaW1pbGFyIHRoaW5ncyB3aXRoIGZsb2F0
IGxpdGVyYWxzLCBzbyB0aGF0IHlvdSBkb24ndCBoYXZlIHRvIHN1ZmZpeCAiZiIgYWxsIHRoZQor
ICAgICAgICB0aW1lLgorICAgICAgICAKKyAgICAgICAgSSB0aGluayB0aGF0IHRoaXMgaXMgdmVy
eSBkaWZmZXJlbnQgZnJvbSB3aGF0IEMgZG9lcy4gQyBqdXN0IHN1cHBvcnRzIGltcGxpY2l0IHR5
cGUKKyAgICAgICAgY29udmVyc2lvbnMuIFRoYXQncyB3aHkgImRvdWJsZSB4ID0gMCIgd29ya3Mg
aW4gQy4gV2UgZG9uJ3QgZG8gdHlwZSBjb252ZXJzaW9ucy4gSW5zdGVhZCwgd2UKKyAgICAgICAg
bGV0IGVhY2ggbGl0ZXJhbCB1bmlmeSBpdHNlbGYgd2l0aCBvbmUgdHlwZS4KKyAgICAgICAgCisg
ICAgICAgIEFsc28gdXBkYXRlZCBUZXN0Lmh0bWwgc28gdGhhdCBpdCBydW5zIGFnYWluIGFuZCBp
cyBiZXR0ZXIgYXQgcHJpbnRpbmcgdGhpbmdzLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvQWxsLmpzOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNr
ZXIuanM6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0ZXJhbC5qczoK
KyAgICAgICAgKEludExpdGVyYWwpOgorICAgICAgICAoSW50TGl0ZXJhbC5wcm90b3R5cGUudG9T
dHJpbmcpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWxUeXBl
LmpzOiBBZGRlZC4KKyAgICAgICAgKEludExpdGVyYWxUeXBlKToKKyAgICAgICAgKEludExpdGVy
YWxUeXBlLnByb3RvdHlwZS5nZXQgb3JpZ2luKToKKyAgICAgICAgKEludExpdGVyYWxUeXBlLnBy
b3RvdHlwZS5nZXQgdmFsdWUpOgorICAgICAgICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLmdl
dCBpc1ByaW1pdGl2ZSk6CisgICAgICAgIChJbnRMaXRlcmFsVHlwZS5wcm90b3R5cGUuZ2V0IGlz
VW5pZmlhYmxlKToKKyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS50eXBlVmFyaWFi
bGVVbmlmeSk6CisgICAgICAgIChJbnRMaXRlcmFsVHlwZS5wcm90b3R5cGUudW5pZnlJbXBsKToK
KyAgICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS52ZXJpZnlBc0FyZ3VtZW50KToKKyAg
ICAgICAgKEludExpdGVyYWxUeXBlLnByb3RvdHlwZS52ZXJpZnlBc1BhcmFtZXRlcik6CisgICAg
ICAgIChJbnRMaXRlcmFsVHlwZS5wcm90b3R5cGUuY29tbWl0VW5pZmljYXRpb24pOgorICAgICAg
ICAoSW50TGl0ZXJhbFR5cGUucHJvdG90eXBlLnRvU3RyaW5nKToKKyAgICAgICAgKiBXZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzOgorICAgICAgICAoSW50cmluc2ljcy4pOgor
ICAgICAgICAoSW50cmluc2ljcyk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
TGl0ZXJhbFR5cGVDaGVja2VyLmpzOgorICAgICAgICAoTGl0ZXJhbFR5cGVDaGVja2VyLnByb3Rv
dHlwZS52aXNpdEludExpdGVyYWxUeXBlKToKKyAgICAgICAgKExpdGVyYWxUeXBlQ2hlY2tlcik6
CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTmF0aXZlVHlwZS5qczoKKyAgICAg
ICAgKE5hdGl2ZVR5cGUpOgorICAgICAgICAoTmF0aXZlVHlwZS5wcm90b3R5cGUuZ2V0IGlzTnVt
YmVyKToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90eXBlLnNldCBpc051bWJlcik6CisgICAg
ICAgIChOYXRpdmVUeXBlLnByb3RvdHlwZS5nZXQgaXNJbnQpOgorICAgICAgICAoTmF0aXZlVHlw
ZS5wcm90b3R5cGUuc2V0IGlzSW50KToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90eXBlLmdl
dCBpc0Zsb2F0KToKKyAgICAgICAgKE5hdGl2ZVR5cGUucHJvdG90eXBlLnNldCBpc0Zsb2F0KToK
KyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9QcmVwYXJlLmpzOgorICAgICAgICAo
cHJlcGFyZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvUmV3cml0ZXIuanM6
CisgICAgICAgIChSZXdyaXRlci5wcm90b3R5cGUudmlzaXRJbnRMaXRlcmFsKToKKyAgICAgICAg
KFJld3JpdGVyLnByb3RvdHlwZS52aXNpdEludExpdGVyYWxUeXBlKToKKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanM6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5odG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1Rlc3QuanM6CisgICAgICAgICh0aGlzLndpbmRvdy50aGlzLnByaW50KToKKyAgICAg
ICAgKGRvUHJlcCk6CisgICAgICAgIChkb0xleCk6CisgICAgICAgIChjaGVja051bWJlcik6Cisg
ICAgICAgIChjaGVja0ludCk6CisgICAgICAgIChURVNUX25hbWVSZXNvbHV0aW9uRmFpbHVyZSk6
CisgICAgICAgIChURVNUX3RocmVhZEFycmF5TG9hZEludExpdGVyYWwpOgorICAgICAgICAoVEVT
VF9kZXZpY2VBcnJheVN0b3JlSW50TGl0ZXJhbCk6CisgICAgICAgIChURVNUX3JldHVybkludExp
dGVyYWxEb3VibGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanM6
CisgICAgICAgIChUeXBlLnByb3RvdHlwZS5nZXQgaXNOdW1iZXIpOgorICAgICAgICAoVHlwZS5w
cm90b3R5cGUuZ2V0IGlzSW50KToKKyAgICAgICAgKFR5cGUucHJvdG90eXBlLmdldCBpc0Zsb2F0
KToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNpdG9yLmpzOgorICAgICAg
ICAoVmlzaXRvci5wcm90b3R5cGUudmlzaXRJbnRMaXRlcmFsKToKKyAgICAgICAgKFZpc2l0b3Iu
cHJvdG90eXBlLnZpc2l0SW50TGl0ZXJhbFR5cGUpOgorCiAyMDE3LTA5LTAyICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgV1NMIHNob3VsZCBzdXBwb3J0IHN0cnVj
dHMKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9BbGwuanMJKHJldmlzaW9uIDIyMTU1
MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0FsbC5qcwkod29ya2luZyBjb3B5
KQpAQCAtNjUsNiArNjUsNyBAQCBsb2FkKCJJbmxpbmUuanMiKTsKIGxvYWQoIklubGluZXIuanMi
KTsKIGxvYWQoIkluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyIpOwogbG9hZCgiSW50TGl0ZXJhbC5q
cyIpOworbG9hZCgiSW50TGl0ZXJhbFR5cGUuanMiKTsKIGxvYWQoIkludHJpbnNpY3MuanMiKTsK
IGxvYWQoIkxleGVyLmpzIik7CiBsb2FkKCJMZXhlclRva2VuLmpzIik7CkluZGV4OiBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9DaGVja2VyLmpzCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHJldmlzaW9uIDIyMTU1MCkKKysrIFRv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0NoZWNrZXIuanMJKHdvcmtpbmcgY29weSkKQEAg
LTE5OCwxMCArMTk4LDcgQEAgY2xhc3MgQ2hlY2tlciBleHRlbmRzIFZpc2l0b3IgewogICAgIAog
ICAgIHZpc2l0SW50TGl0ZXJhbChub2RlKQogICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMg
c2hvdWxkIHJldHVybiBzb21lIGtpbmQgb2YgdHlwZSB2YXJpYWJsZSB0aGF0IGRlZmF1bHRzIHRv
IGludCBidXQgaXMgaGFwcHkgdG8KLSAgICAgICAgLy8gdW5pZnkgd2l0aCB1aW50LgotICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc2MjA5Ci0gICAg
ICAgIHJldHVybiB0aGlzLl9wcm9ncmFtLmludHJpbnNpY3MuaW50MzI7CisgICAgICAgIHJldHVy
biBub2RlLnR5cGU7CiAgICAgfQogICAgIAogICAgIHZpc2l0VWludExpdGVyYWwobm9kZSkKQEAg
LTIxMSw3ICsyMDgsNiBAQCBjbGFzcyBDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgCiAg
ICAgdmlzaXROdWxsTGl0ZXJhbChub2RlKQogICAgIHsKLSAgICAgICAgLy8gUmV0dXJuIHRoZSBu
dWxsIGxpdGVyYWwncyB0eXBlIHZhcmlhYmxlLgogICAgICAgICByZXR1cm4gbm9kZS50eXBlOwog
ICAgIH0KICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVy
YWwuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50TGl0
ZXJhbC5qcwkocmV2aXNpb24gMjIxNTUwKQorKysgVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvSW50TGl0ZXJhbC5qcwkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQCBjbGFzcyBJ
bnRMaXRlcmFsIGV4dGVuZHMgRXhwcmVzc2lvbiB7CiAgICAgewogICAgICAgICBzdXBlcihvcmln
aW4pOwogICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVlOworICAgICAgICB0aGlzLnR5cGUgPSBu
ZXcgSW50TGl0ZXJhbFR5cGUob3JpZ2luLCB2YWx1ZSk7CiAgICAgfQogICAgIAogICAgIGdldCB2
YWx1ZSgpIHsgcmV0dXJuIHRoaXMuX3ZhbHVlOyB9CkBAIC0zNiw3ICszNyw3IEBAIGNsYXNzIElu
dExpdGVyYWwgZXh0ZW5kcyBFeHByZXNzaW9uIHsKICAgICAKICAgICB0b1N0cmluZygpCiAgICAg
ewotICAgICAgICByZXR1cm4gIiIgKyB0aGlzLl92YWx1ZTsKKyAgICAgICAgcmV0dXJuICIiICsg
dGhpcy52YWx1ZTsKICAgICB9CiB9CiAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0ludExpdGVyYWxUeXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL0ludExpdGVyYWxUeXBlLmpzCShub25leGlzdGVudCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL0ludExpdGVyYWxUeXBlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KyJ1c2Ugc3RyaWN0IjsKKworY2xhc3MgSW50TGl0ZXJhbFR5cGUgZXh0ZW5kcyBUeXBlIHsKKyAg
ICBjb25zdHJ1Y3RvcihvcmlnaW4sIHZhbHVlKQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAg
ICAgICAgdGhpcy5fb3JpZ2luID0gb3JpZ2luOworICAgICAgICB0aGlzLl92YWx1ZSA9IHZhbHVl
OworICAgIH0KKyAgICAKKyAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5fb3JpZ2luOyB9
CisgICAgZ2V0IHZhbHVlKCkgeyByZXR1cm4gdGhpcy5fdmFsdWU7IH0KKyAgICAKKyAgICBnZXQg
aXNQcmltaXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CisgICAgZ2V0IGlzVW5pZmlhYmxlKCkgeyBy
ZXR1cm4gdHJ1ZTsgfQorICAgIAorICAgIHR5cGVWYXJpYWJsZVVuaWZ5KHVuaWZpY2F0aW9uQ29u
dGV4dCwgb3RoZXIpCisgICAgeworICAgICAgICBpZiAoIShvdGhlciBpbnN0YW5jZW9mIFR5cGUp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAKKyAgICAgICAgcmV0dXJuIHRo
aXMuX3R5cGVWYXJpYWJsZVVuaWZ5SW1wbCh1bmlmaWNhdGlvbkNvbnRleHQsIG90aGVyKTsKKyAg
ICB9CisgICAgCisgICAgdW5pZnlJbXBsKHVuaWZpY2F0aW9uQ29udGV4dCwgb3RoZXIpCisgICAg
eworICAgICAgICByZXR1cm4gdGhpcy50eXBlVmFyaWFibGVVbmlmeSh1bmlmaWNhdGlvbkNvbnRl
eHQsIG90aGVyKTsKKyAgICB9CisgICAgCisgICAgdmVyaWZ5QXNBcmd1bWVudCh1bmlmaWNhdGlv
bkNvbnRleHQpCisgICAgeworICAgICAgICBsZXQgcmVhbFRoaXMgPSB1bmlmaWNhdGlvbkNvbnRl
eHQuZmluZCh0aGlzKTsKKyAgICAgICAgcHJpbnQoIlVuaWZpZWQgd2l0aDogIiArIHJlYWxUaGlz
KTsKKyAgICAgICAgcmV0dXJuIHJlYWxUaGlzLmlzTnVtYmVyICYmIHJlYWxUaGlzLmNhblJlcHJl
c2VudCh0aGlzLnZhbHVlKTsKKyAgICB9CisgICAgCisgICAgdmVyaWZ5QXNQYXJhbWV0ZXIodW5p
ZmljYXRpb25Db250ZXh0KQorICAgIHsKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbnRMaXRl
cmFsVHlwZSBzaG91bGQgbmV2ZXIgYmUgdXNlZCBhcyBhIHR5cGUgcGFyYW1ldGVyIik7CisgICAg
fQorICAgIAorICAgIGNvbW1pdFVuaWZpY2F0aW9uKHVuaWZpY2F0aW9uQ29udGV4dCkKKyAgICB7
CisgICAgICAgIHRoaXMudHlwZSA9IHVuaWZpY2F0aW9uQ29udGV4dC5maW5kKHRoaXMpOworICAg
IH0KKyAgICAKKyAgICB0b1N0cmluZygpCisgICAgeworICAgICAgICByZXR1cm4gImludExpdGVy
YWxUeXBlPCIgKyB0aGlzLnZhbHVlICsgIj4iOworICAgIH0KK30KKwpJbmRleDogVG9vbHMvV2Vi
R1BVU2hhZGluZ0xhbmd1YWdlUkkvSW50cmluc2ljcy5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCShyZXZpc2lvbiAyMjE1NTApCisr
KyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9JbnRyaW5zaWNzLmpzCSh3b3JraW5nIGNv
cHkpCkBAIC00NSwxMSArNDUsMjggQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICAg
ICAgdHlwZS5zaXplID0gMDsKICAgICAgICAgICAgICAgICB0eXBlLnBvcHVsYXRlRGVmYXVsdFZh
bHVlID0gKCkgPT4geyB9OwogICAgICAgICAgICAgfSk7CisgICAgICAgIAorICAgICAgICBmdW5j
dGlvbiBpc0JpdHdpc2VFcXVpdmFsZW50KGxlZnQsIHJpZ2h0KQorICAgICAgICB7CisgICAgICAg
ICAgICBsZXQgZG91YmxlQXJyYXkgPSBuZXcgRmxvYXQ2NEFycmF5KDEpOworICAgICAgICAgICAg
bGV0IGludEFycmF5ID0gbmV3IEludDMyQXJyYXkoZG91YmxlQXJyYXkuYnVmZmVyKTsKKyAgICAg
ICAgICAgIGRvdWJsZUFycmF5WzBdID0gbGVmdDsKKyAgICAgICAgICAgIGxldCBsZWZ0SW50cyA9
IEludDMyQXJyYXkuZnJvbShpbnRBcnJheSk7CisgICAgICAgICAgICBkb3VibGVBcnJheVswXSA9
IHJpZ2h0OworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCAyOyArK2kpIHsKKyAgICAg
ICAgICAgICAgICBpZiAobGVmdEludHNbaV0gIT0gaW50QXJyYXlbaV0pCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CiAKICAgICAgICAgdGhpcy5fbWFwLnNldCgKICAgICAgICAgICAgICJu
YXRpdmUgcHJpbWl0aXZlIHR5cGUgaW50MzI8PiIsCiAgICAgICAgICAgICB0eXBlID0+IHsKICAg
ICAgICAgICAgICAgICB0aGlzLmludDMyID0gdHlwZTsKKyAgICAgICAgICAgICAgICB0eXBlLmlz
SW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0eXBlLmlzTnVtYmVyID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB0eXBlLmNhblJlcHJlc2VudCA9IHZhbHVlID0+IGlzQml0d2lzZUVxdWl2YWxl
bnQodmFsdWUgfCAwLCB2YWx1ZSk7CiAgICAgICAgICAgICAgICAgdHlwZS5zaXplID0gMTsKICAg
ICAgICAgICAgICAgICB0eXBlLnBvcHVsYXRlRGVmYXVsdFZhbHVlID0gKGJ1ZmZlciwgb2Zmc2V0
KSA9PiBidWZmZXIuc2V0KG9mZnNldCwgMCk7CiAgICAgICAgICAgICB9KTsKQEAgLTU4LDYgKzc1
LDkgQEAgY2xhc3MgSW50cmluc2ljcyB7CiAgICAgICAgICAgICAibmF0aXZlIHByaW1pdGl2ZSB0
eXBlIHVpbnQzMjw+IiwKICAgICAgICAgICAgIHR5cGUgPT4gewogICAgICAgICAgICAgICAgIHRo
aXMudWludDMyID0gdHlwZTsKKyAgICAgICAgICAgICAgICB0eXBlLmlzSW50ID0gdHJ1ZTsKKyAg
ICAgICAgICAgICAgICB0eXBlLmlzTnVtYmVyID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB0eXBl
LmNhblJlcHJlc2VudCA9IHZhbHVlID0+IGlzQml0d2lzZUVxdWl2YWxlbnQodmFsdWUgPj4+IDAs
IHZhbHVlKTsKICAgICAgICAgICAgICAgICB0eXBlLnNpemUgPSAxOwogICAgICAgICAgICAgICAg
IHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVyLCBvZmZzZXQpID0+IGJ1ZmZlci5z
ZXQob2Zmc2V0LCAwKTsKICAgICAgICAgICAgIH0pOwpAQCAtNjcsNiArODcsOSBAQCBjbGFzcyBJ
bnRyaW5zaWNzIHsKICAgICAgICAgICAgIHR5cGUgPT4gewogICAgICAgICAgICAgICAgIHRoaXMu
ZG91YmxlID0gdHlwZTsKICAgICAgICAgICAgICAgICB0eXBlLnNpemUgPSAxOworICAgICAgICAg
ICAgICAgIHR5cGUuaXNGbG9hdCA9IHRydWU7CisgICAgICAgICAgICAgICAgdHlwZS5pc051bWJl
ciA9IHRydWU7CisgICAgICAgICAgICAgICAgdHlwZS5jYW5SZXByZXNlbnQgPSB2YWx1ZSA9PiB0
cnVlOwogICAgICAgICAgICAgICAgIHR5cGUucG9wdWxhdGVEZWZhdWx0VmFsdWUgPSAoYnVmZmVy
LCBvZmZzZXQpID0+IGJ1ZmZlci5zZXQob2Zmc2V0LCAwKTsKICAgICAgICAgICAgIH0pOwogICAg
ICAgICAKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xpdGVyYWxUeXBlQ2hl
Y2tlci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MaXRl
cmFsVHlwZUNoZWNrZXIuanMJKHJldmlzaW9uIDIyMTU1MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL0xpdGVyYWxUeXBlQ2hlY2tlci5qcwkod29ya2luZyBjb3B5KQpAQCAtMzgs
NSArMzgsMTEgQEAgY2xhc3MgTGl0ZXJhbFR5cGVDaGVja2VyIGV4dGVuZHMgVmlzaXRvcgogICAg
ICAgICBpZiAoIW5vZGUudHlwZSkKICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTnVsbCBh
dCAiICsgbm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nICsgIiBkb2VzIG5vdCBoYXZlIHR5cGUiKTsK
ICAgICB9CisgICAgCisgICAgdmlzaXRJbnRMaXRlcmFsVHlwZShub2RlKQorICAgIHsKKyAgICAg
ICAgaWYgKCFub2RlLnR5cGUpCisgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Iobm9kZSArICIg
YXQgIiArIG5vZGUub3JpZ2luLm9yaWdpblN0cmluZyArICIgZG9lcyBub3QgaGF2ZSB0eXBlIik7
CisgICAgfQogfQogCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9OYXRpdmVU
eXBlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL05hdGl2
ZVR5cGUuanMJKHJldmlzaW9uIDIyMTU1MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL05hdGl2ZVR5cGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTMyLDYgKzMyLDkgQEAgY2xhc3Mg
TmF0aXZlVHlwZSBleHRlbmRzIFR5cGUgewogICAgICAgICB0aGlzLl9uYW1lID0gbmFtZTsKICAg
ICAgICAgdGhpcy5faXNQcmltaXRpdmUgPSBpc1ByaW1pdGl2ZTsKICAgICAgICAgdGhpcy5fdHlw
ZVBhcmFtZXRlcnMgPSB0eXBlUGFyYW1ldGVyczsKKyAgICAgICAgdGhpcy5faXNOdW1iZXIgPSBm
YWxzZTsKKyAgICAgICAgdGhpcy5faXNJbnQgPSBmYWxzZTsKKyAgICAgICAgdGhpcy5faXNGbG9h
dCA9IGZhbHNlOwogICAgIH0KICAgICAKICAgICBnZXQgb3JpZ2luKCkgeyByZXR1cm4gdGhpcy5f
b3JpZ2luOyB9CkBAIC00MCw2ICs0MywxNCBAQCBjbGFzcyBOYXRpdmVUeXBlIGV4dGVuZHMgVHlw
ZSB7CiAgICAgZ2V0IHR5cGVQYXJhbWV0ZXJzKCkgeyByZXR1cm4gdGhpcy5fdHlwZVBhcmFtZXRl
cnM7IH0KICAgICBnZXQgaXNOYXRpdmUoKSB7IHJldHVybiB0cnVlOyB9CiAgICAgCisgICAgLy8g
V2UgbGV0IEludHJpbnNpY3MuanMgc2V0IHRoZXNlIGFzIGl0IGxpa2VzLgorICAgIGdldCBpc051
bWJlcigpIHsgcmV0dXJuIHRoaXMuX2lzTnVtYmVyOyB9CisgICAgc2V0IGlzTnVtYmVyKHZhbHVl
KSB7IHRoaXMuX2lzTnVtYmVyID0gdmFsdWU7IH0KKyAgICBnZXQgaXNJbnQoKSB7IHJldHVybiB0
aGlzLl9pc0ludDsgfQorICAgIHNldCBpc0ludCh2YWx1ZSkgeyB0aGlzLl9pc0ludCA9IHZhbHVl
OyB9CisgICAgZ2V0IGlzRmxvYXQoKSB7IHJldHVybiB0aGlzLl9pc0Zsb2F0OyB9CisgICAgc2V0
IGlzRmxvYXQodmFsdWUpIHsgdGhpcy5faXNGbG9hdCA9IHZhbHVlOyB9CisgICAgCiAgICAgaW5z
dGFudGlhdGUodHlwZUFyZ3VtZW50cykKICAgICB7CiAgICAgICAgIGlmICh0eXBlQXJndW1lbnRz
Lmxlbmd0aCAhPSB0aGlzLnR5cGVQYXJhbWV0ZXJzLmxlbmd0aCkKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1BhcnNlLmpzCShyZXZpc2lvbiAyMjE1NTApCisrKyBUb29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9QYXJzZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTcyLDkgKzE3
Miw5IEBAIGZ1bmN0aW9uIHBhcnNlKHByb2dyYW0sIG9yaWdpbiwgbGluZU51bWIKICAgICAgICAg
aWYgKHRva2VuID0gdHJ5Q29uc3VtZUtpbmQoImlkZW50aWZpZXIiKSkKICAgICAgICAgICAgIHJl
dHVybiBuZXcgVmFyaWFibGVSZWYodG9rZW4sIHRva2VuLnRleHQpOwogICAgICAgICBpZiAodG9r
ZW4gPSB0cnlDb25zdW1lS2luZCgiaW50TGl0ZXJhbCIpKSB7Ci0gICAgICAgICAgICBsZXQgaW50
VmVyc2lvbiA9IHRva2VuLnRleHQgfCAwOwotICAgICAgICAgICAgaWYgKGludFZlcnNpb24gIT0g
dG9rZW4udGV4dCkKLSAgICAgICAgICAgICAgICBsZXhlci5mYWlsKCJJbnRlZ2VyIGxpdGVyYWwg
aXMgbm90IDMyLWJpdCBpbnRlZ2VyIik7CisgICAgICAgICAgICBsZXQgaW50VmVyc2lvbiA9IE1h
dGguZmxvb3IoK3Rva2VuLnRleHQpOworICAgICAgICAgICAgaWYgKCIiICsgaW50VmVyc2lvbiAh
PT0gdG9rZW4udGV4dCkKKyAgICAgICAgICAgICAgICBsZXhlci5mYWlsKCJJbnRlZ2VyIGxpdGVy
YWwgaXMgbm90IGFuIGludGVnZXIiKTsKICAgICAgICAgICAgIHJldHVybiBuZXcgSW50TGl0ZXJh
bCh0b2tlbiwgaW50VmVyc2lvbik7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHRva2VuID0gdHJ5
Q29uc3VtZUtpbmQoInVpbnRMaXRlcmFsIikpIHsKSW5kZXg6IFRvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1ByZXBhcmUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvUHJlcGFyZS5qcwkocmV2aXNpb24gMjIxNTUwKQorKysgVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvUHJlcGFyZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjcsNyArMjcsNyBA
QAogZnVuY3Rpb24gcHJlcGFyZShvcmlnaW4sIGxpbmVOdW1iZXJPZmZzZXQsIHRleHQpCiB7CiAg
ICAgbGV0IHByb2dyYW0gPSBuZXcgUHJvZ3JhbSgpOwotICAgIHBhcnNlKHByb2dyYW0sICI8c3Rk
bGliPiIsIDI4LCBzdGFuZGFyZExpYnJhcnkpOworICAgIHBhcnNlKHByb2dyYW0sICIvaW50ZXJu
YWwvc3RkbGliIiwgMjgsIHN0YW5kYXJkTGlicmFyeSk7CiAgICAgcGFyc2UocHJvZ3JhbSwgb3Jp
Z2luLCBsaW5lTnVtYmVyT2Zmc2V0LCB0ZXh0KTsKICAgICByZXNvbHZlTmFtZXMocHJvZ3JhbSk7
CiAgICAgcmVzb2x2ZVR5cGVEZWZzKHByb2dyYW0pOwpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmV3cml0ZXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvUmV3cml0ZXIuanMJKHJldmlzaW9uIDIyMTU1MCkKKysrIFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Jld3JpdGVyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMDAsNyAr
MjAwLDE2IEBAIGNsYXNzIFJld3JpdGVyIHsKICAgICAKICAgICB2aXNpdEludExpdGVyYWwobm9k
ZSkKICAgICB7Ci0gICAgICAgIHJldHVybiBub2RlOworICAgICAgICBsZXQgcmVzdWx0ID0gbmV3
IEludExpdGVyYWwobm9kZS5vcmlnaW4sIG5vZGUudmFsdWUpOworICAgICAgICByZXN1bHQudHlw
ZSA9IG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisgICAgCisgICAgdmlzaXRJbnRMaXRlcmFsVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0
IHJlc3VsdCA9IG5ldyBJbnRMaXRlcmFsVHlwZShub2RlLm9yaWdpbiwgbm9kZS52YWx1ZSk7Cisg
ICAgICAgIHJlc3VsdC50eXBlID0gbm9kZS50eXBlID8gbm9kZS50eXBlLnZpc2l0KHRoaXMpIDog
bnVsbDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAKICAgICB2aXNpdFVpbnRMaXRl
cmFsKG5vZGUpCkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TdGFuZGFyZExp
YnJhcnkuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU3Rh
bmRhcmRMaWJyYXJ5LmpzCShyZXZpc2lvbiAyMjE1NTApCisrKyBUb29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TdGFuZGFyZExpYnJhcnkuanMJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4
LDggQEAgbmF0aXZlIHByaW1pdGl2ZSB0eXBlZGVmIHVpbnQzMjsKIHR5cGVkZWYgaW50ID0gaW50
MzI7CiB0eXBlZGVmIHVpbnQgPSB1aW50MzI7CiAKK25hdGl2ZSBwcmltaXRpdmUgdHlwZWRlZiBk
b3VibGU7CisKIG5hdGl2ZSBpbnQgb3BlcmF0b3IrKGludCwgaW50KTsKIAogbmF0aXZlIHRocmVh
ZCBUXiBvcGVyYXRvciZbXTxUPih0aHJlYWQgVFtdLCB1aW50KTsKSW5kZXg6IFRvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UZXN0Lmh0bWwJKHJldmlzaW9uIDIyMTU1MCkKKysrIFRvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL1Rlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMTcsMTEg
KzE3LDEzIEBACiA8c2NyaXB0IHNyYz0iQ2FsbEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNj
cmlwdCBzcmM9IkNhbGxGdW5jdGlvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iQ2hlY2su
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkNoZWNrTGl0ZXJhbFR5cGVzLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJDaGVja1JldHVybnMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9
IkNoZWNrVW5yZWFjaGFibGVDb2RlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDaGVja2Vy
LmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJDb21tYUV4cHJlc3Npb24uanMiPjwvc2NyaXB0
PgogPHNjcmlwdCBzcmM9IkNvbnN0ZXhwclR5cGVQYXJhbWV0ZXIuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9IkRvdEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkRlcmVm
ZXJlbmNlRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iRUFycmF5UmVmLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJFQnVmZmVyLmpzIj48L3NjcmlwdD4KQEAgLTM5LDcg
KzQxLDkgQEAKIDxzY3JpcHQgc3JjPSJJbmxpbmVyLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3Jj
PSJJbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkludExp
dGVyYWwuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9IkludExpdGVyYWxUeXBlLmpzIj48L3Nj
cmlwdD4KIDxzY3JpcHQgc3JjPSJJbnRyaW5zaWNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJMaXRlcmFsVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlwdCBzcmM9IkxleGVyLmpz
Ij48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJMZXhlclRva2VuLmpzIj48L3NjcmlwdD4KIDxzY3Jp
cHQgc3JjPSJNYWtlUHRyRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CkBAIC01MSw2ICs1NSw3IEBA
CiA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZUluc3RhbmNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJOdWxsTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iTnVsbFR5cGUuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMiPjwv
c2NyaXB0PgogPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQ
cmVwYXJlLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3NjcmlwdD4K
QEAgLTY2LDYgKzcxLDcgQEAKIDxzY3JpcHQgc3JjPSJSZXR1cm5DaGVja2VyLmpzIj48L3Njcmlw
dD4KIDxzY3JpcHQgc3JjPSJSZXR1cm5FeGNlcHRpb24uanMiPjwvc2NyaXB0PgogPHNjcmlwdCBz
cmM9IlN0YW5kYXJkTGlicmFyeS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iU3RydWN0TGF5
b3V0QnVpbGRlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3RydWN0VHlwZS5qcyI+PC9z
Y3JpcHQ+CiA8c2NyaXB0IHNyYz0iU3Vic3RpdHV0aW9uLmpzIj48L3NjcmlwdD4KIDxzY3JpcHQg
c3JjPSJTdWZmaXhDYWxsQXNzaWdubWVudC5qcyI+PC9zY3JpcHQ+CkBAIC04Niw4ICs5MiwyMSBA
QAogPHNjcmlwdCBzcmM9IldUeXBlRXJyb3IuanMiPjwvc2NyaXB0PgogCiA8c2NyaXB0IHNyYz0i
VGVzdC5qcyI+PC9zY3JpcHQ+CisKKzxzY3JpcHQ+CitmdW5jdGlvbiBkb1Rlc3RJbkJyb3dzZXIo
KQoreworICAgIHRyeSB7CisgICAgICAgIGRvVGVzdCh3aW5kb3cpOworICAgIH0gY2F0Y2ggKGUp
IHsKKyAgICAgICAgcHJpbnQoIkVSUk9SOiAiICsgZS5tZXNzYWdlKTsKKyAgICAgICAgcHJpbnQo
ZS5zdGFjayk7CisgICAgfQorfQorPC9zY3JpcHQ+CisKIDwvaGVhZD4KLTxib2R5IG9ubG9hZD0i
ZG9UZXN0KHRoaXMpIj4KKzxib2R5IG9ubG9hZD0iZG9UZXN0SW5Ccm93c2VyKCkiPgogPGRpdiBp
ZD0ibWVzc2FnZXMiPjwvZGl2PgogPC9ib2R5PgogPC9odG1sPgpJbmRleDogVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvVGVzdC5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCShyZXZpc2lvbiAyMjE1NTApCisrKyBUb29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9UZXN0LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBA
IGlmICh0aGlzLndpbmRvdykgewogICAgIHRoaXMucHJpbnQgPSAodGV4dCkgPT4gewogICAgICAg
ICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgZG9j
dW1lbnQuZ2V0RWxlbWVudEJ5SWQoIm1lc3NhZ2VzIikuYXBwZW5kQ2hpbGQoc3Bhbik7Ci0gICAg
ICAgIHNwYW4uaW5uZXJIVE1MID0gdGV4dCArICI8YnI+IjsKKyAgICAgICAgc3Bhbi5pbm5lckhU
TUwgPSB0ZXh0LnJlcGxhY2UoLyAvZywgIiZuYnNwOyIpLnJlcGxhY2UoL1xuL2csICI8YnI+Iikg
KyAiPGJyPiI7CiAgICAgfTsKICAgICB0aGlzLnByZWNpc2VUaW1lID0gKCkgPT4gcGVyZm9ybWFu
Y2Uubm93KCkgLyAxMDAwOwogfSBlbHNlCkBAIC0zNiwxMiArMzYsMTIgQEAgaWYgKHRoaXMud2lu
ZG93KSB7CiAKIGZ1bmN0aW9uIGRvUHJlcChjb2RlKQogewotICAgIHJldHVybiBwcmVwYXJlKCI8
dGVzdD4iLCAwLCBjb2RlKTsKKyAgICByZXR1cm4gcHJlcGFyZSgiL2ludGVybmFsL3Rlc3QiLCAw
LCBjb2RlKTsKIH0KIAogZnVuY3Rpb24gZG9MZXgoY29kZSkKIHsKLSAgICBsZXQgbGV4ZXIgPSBu
ZXcgTGV4ZXIoIjx0ZXN0PiIsIDAsIGNvZGUpOworICAgIGxldCBsZXhlciA9IG5ldyBMZXhlcigi
L2ludGVybmFsL3Rlc3QiLCAwLCBjb2RlKTsKICAgICB2YXIgcmVzdWx0ID0gW107CiAgICAgZm9y
ICg7OykgewogICAgICAgICBsZXQgbmV4dCA9IGxleGVyLm5leHQoKTsKQEAgLTU3LDEzICs1Nywy
MSBAQCBmdW5jdGlvbiBtYWtlSW50KHByb2dyYW0sIHZhbHVlKQogICAgIHJldHVybiBUeXBlZFZh
bHVlLmJveChwcm9ncmFtLmludHJpbnNpY3MuaW50MzIsIHZhbHVlKTsKIH0KIAotZnVuY3Rpb24g
Y2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCBleHBlY3RlZCkKK2Z1bmN0aW9uIGNoZWNrTnVtYmVy
KHByb2dyYW0sIHJlc3VsdCwgZXhwZWN0ZWQpCiB7Ci0gICAgaWYgKCFyZXN1bHQudHlwZS5lcXVh
bHMocHJvZ3JhbS5pbnRyaW5zaWNzLmludDMyKSkKKyAgICBpZiAoIXJlc3VsdC50eXBlLmlzTnVt
YmVyKQogICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdCB0eXBlOyByZXN1bHQ6
ICIgKyByZXN1bHQpOwogICAgIGlmIChyZXN1bHQudmFsdWUgIT0gZXhwZWN0ZWQpCiAgICAgICAg
IHRocm93IG5ldyBFcnJvcigiV3JvbmcgcmVzdWx0OiAiICsgcmVzdWx0ICsgIiAoZXhwZWN0ZWQg
IiArIGV4cGVjdGVkICsgIikiKTsKIH0KKworZnVuY3Rpb24gY2hlY2tJbnQocHJvZ3JhbSwgcmVz
dWx0LCBleHBlY3RlZCkKK3sKKyAgICBpZiAoIXJlc3VsdC50eXBlLmVxdWFscyhwcm9ncmFtLmlu
dHJpbnNpY3MuaW50MzIpKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIldyb25nIHJlc3VsdCB0
eXBlOyByZXN1bHQ6ICIgKyByZXN1bHQpOworICAgIGNoZWNrTnVtYmVyKHByb2dyYW0sIHJlc3Vs
dCwgZXhwZWN0ZWQpOworfQorCiBmdW5jdGlvbiBjaGVja0xleGVyVG9rZW4ocmVzdWx0LCBleHBl
Y3RlZEluZGV4LCBleHBlY3RlZEtpbmQsIGV4cGVjdGVkVGV4dCkKIHsKICAgICBpZiAocmVzdWx0
Ll9pbmRleCAhPSBleHBlY3RlZEluZGV4KQpAQCAtMTA1LDcgKzExMyw3IEBAIGZ1bmN0aW9uIFRF
U1RfbmFtZVJlc29sdXRpb25GYWlsdXJlKCkKIHsKICAgICBjaGVja0ZhaWwoCiAgICAgICAgICgp
ID0+IGRvUHJlcCgiaW50IGZvbyhpbnQgeCkgeyByZXR1cm4geCArIHk7IH0iKSwKLSAgICAgICAg
KGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYmIGUubWVzc2FnZS5pbmRleE9mKCI8dGVz
dD46MSIpICE9IC0xKTsKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHlwZUVycm9yICYm
IGUubWVzc2FnZS5pbmRleE9mKCIvaW50ZXJuYWwvdGVzdDoxIikgIT0gLTEpOwogfQogCiBmdW5j
dGlvbiBURVNUX3NpbXBsZVZhcmlhYmxlKCkKQEAgLTIwOCw2ICsyMTYsMjAgQEAgZnVuY3Rpb24g
VEVTVF90aHJlYWRBcnJheUxvYWQoKQogICAgIGNoZWNrSW50KHByb2dyYW0sIHJlc3VsdCwgODkp
OwogfQogCitmdW5jdGlvbiBURVNUX3RocmVhZEFycmF5TG9hZEludExpdGVyYWwoKQoreworICAg
IGxldCBwcm9ncmFtID0gZG9QcmVwKGAKKyAgICAgICAgaW50IGZvbyh0aHJlYWQgaW50W10gYXJy
YXkpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhcnJheVswXTsKKyAgICAgICAgfQor
ICAgIGApOworICAgIGxldCBidWZmZXIgPSBuZXcgRUJ1ZmZlcigxKTsKKyAgICBidWZmZXIuc2V0
KDAsIDg5KTsKKyAgICBsZXQgcmVzdWx0ID0gY2FsbEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBb
XSwgW1R5cGVkVmFsdWUuYm94KG5ldyBBcnJheVJlZlR5cGUobnVsbCwgInRocmVhZCIsIHByb2dy
YW0uaW50cmluc2ljcy5pbnQzMiksIG5ldyBFQXJyYXlSZWYobmV3IEVQdHIoYnVmZmVyLCAwKSwg
MSkpXSk7CisgICAgY2hlY2tJbnQocHJvZ3JhbSwgcmVzdWx0LCA4OSk7Cit9CisKIGZ1bmN0aW9u
IFRFU1RfZGV2aWNlQXJyYXlMb2FkKCkKIHsKICAgICBsZXQgcHJvZ3JhbSA9IGRvUHJlcChgCkBA
IC0yNjQsNiArMjg2LDI3IEBAIGZ1bmN0aW9uIFRFU1RfZGV2aWNlQXJyYXlTdG9yZSgpCiAgICAg
ICAgIHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0
ZWQgLTExMSk6ICIgKyBidWZmZXIuZ2V0KDApKTsKIH0KIAorZnVuY3Rpb24gVEVTVF9kZXZpY2VB
cnJheVN0b3JlSW50TGl0ZXJhbCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYAorICAg
ICAgICB2b2lkIGZvbyhkZXZpY2UgaW50W10gYXJyYXksIGludCB2YWx1ZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgYXJyYXlbMF0gPSB2YWx1ZTsKKyAgICAgICAgfQorICAgIGApOworICAgIGxl
dCBidWZmZXIgPSBuZXcgRUJ1ZmZlcigxKTsKKyAgICBidWZmZXIuc2V0KDAsIDE1KTsKKyAgICBs
ZXQgYXJyYXlSZWYgPSBUeXBlZFZhbHVlLmJveCgKKyAgICAgICAgbmV3IEFycmF5UmVmVHlwZShu
dWxsLCAiZGV2aWNlIiwgcHJvZ3JhbS5pbnRyaW5zaWNzLmludDMyKSwKKyAgICAgICAgbmV3IEVB
cnJheVJlZihuZXcgRVB0cihidWZmZXIsIDApLCAxKSk7CisgICAgY2FsbEZ1bmN0aW9uKHByb2dy
YW0sICJmb28iLCBbXSwgW2FycmF5UmVmLCBtYWtlSW50KHByb2dyYW0sIDY1KV0pOworICAgIGlm
IChidWZmZXIuZ2V0KDApICE9IDY1KQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkJhZCB2YWx1
ZSBzdG9yZWQgaW50byBidWZmZXIgKGV4cGVjdGVkIDY1KTogIiArIGJ1ZmZlci5nZXQoMCkpOwor
ICAgIGNhbGxGdW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW10sIFthcnJheVJlZiwgbWFrZUludChw
cm9ncmFtLCAtMTExKV0pOworICAgIGlmIChidWZmZXIuZ2V0KDApICE9IC0xMTEpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcigiQmFkIHZhbHVlIHN0b3JlZCBpbnRvIGJ1ZmZlciAoZXhwZWN0ZWQg
LTExMSk6ICIgKyBidWZmZXIuZ2V0KDApKTsKK30KKwogZnVuY3Rpb24gVEVTVF9zaW1wbGVQcm90
b2NvbCgpCiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYApAQCAtNjMzLDYgKzY3NiwyMCBA
QCBmdW5jdGlvbiBURVNUX2RlZmF1bHRJbml0aWFsaXplZE51bGxBcnJhCiAgICAgICAgIChlKSA9
PiBlIGluc3RhbmNlb2YgV1RyYXBFcnJvcik7CiB9CiAKK2Z1bmN0aW9uIFRFU1RfZGVmYXVsdElu
aXRpYWxpemVkTnVsbEFycmF5UmVmSW50TGl0ZXJhbCgpCit7CisgICAgbGV0IHByb2dyYW0gPSBk
b1ByZXAoYAorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgdGhyZWFk
IGludFtdIHAgPSBudWxsOworICAgICAgICAgICAgcmV0dXJuIHBbMF07CisgICAgICAgIH0KKyAg
ICBgKTsKKyAgICBjaGVja0ZhaWwoCisgICAgICAgICgpID0+IGNhbGxGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW10sIFtdKSwKKyAgICAgICAgKGUpID0+IGUgaW5zdGFuY2VvZiBXVHJhcEVycm9y
KTsKK30KKwogZnVuY3Rpb24gVEVTVF9wYXNzTnVsbFRvUHRyTW9ub21vcnBoaWNBcnJheVJlZigp
CiB7CiAgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoYApAQCAtNjY2LDYgKzcyMywzOSBAQCBmdW5j
dGlvbiBURVNUX3Bhc3NOdWxsVG9QdHJQb2x5bW9ycGhpY0FyCiAgICAgICAgIChlKSA9PiBlIGlu
c3RhbmNlb2YgV1R5cGVFcnJvcik7CiB9CiAKK2Z1bmN0aW9uIFRFU1RfcmV0dXJuSW50TGl0ZXJh
bFVpbnQoKQoreworICAgIGxldCBwcm9ncmFtID0gZG9QcmVwKCJ1aW50IGZvbygpIHsgcmV0dXJu
IDQyOyB9Iik7CisgICAgY2hlY2tOdW1iZXIocHJvZ3JhbSwgY2FsbEZ1bmN0aW9uKHByb2dyYW0s
ICJmb28iLCBbXSwgW10pLCA0Mik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfcmV0dXJuSW50TGl0ZXJh
bERvdWJsZSgpCit7CisgICAgbGV0IHByb2dyYW0gPSBkb1ByZXAoImRvdWJsZSBmb28oKSB7IHJl
dHVybiA0MjsgfSIpOworICAgIGNoZWNrTnVtYmVyKHByb2dyYW0sIGNhbGxGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10sIFtdKSwgNDIpOworfQorCitmdW5jdGlvbiBURVNUX2JhZEludExpdGVy
YWxGb3JJbnQoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKCJ2b2lk
IGZvbygpIHsgaW50IHggPSAzMDAwMDAwMDAwOyB9IiksCisgICAgICAgIChlKSA9PiBlIGluc3Rh
bmNlb2YgV1R5cGVFcnJvcik7Cit9CisKK2Z1bmN0aW9uIFRFU1RfYmFkSW50TGl0ZXJhbEZvclVp
bnQoKQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKCJ2b2lkIGZvbygp
IHsgdWludCB4ID0gNTAwMDAwMDAwMDsgfSIpLAorICAgICAgICAoZSkgPT4gZSBpbnN0YW5jZW9m
IFdUeXBlRXJyb3IpOworfQorCitmdW5jdGlvbiBURVNUX2JhZEludExpdGVyYWxGb3JEb3VibGUo
KQoreworICAgIGNoZWNrRmFpbCgKKyAgICAgICAgKCkgPT4gZG9QcmVwKCJ2b2lkIGZvbygpIHsg
ZG91YmxlIHggPSA1MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwOyB9IiksCisg
ICAgICAgIChlKSA9PiBlIGluc3RhbmNlb2YgV1N5bnRheEVycm9yKTsKK30KKwogbGV0IGZpbHRl
ciA9IC8uKi87IC8vIHJ1biBldmVyeXRoaW5nIGJ5IGRlZmF1bHQKIGlmICh0aGlzWyJhcmd1bWVu
dHMiXSkgewogICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7
CkluZGV4OiBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9UeXBlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHJldmlzaW9uIDIyMTU1
MCkKKysrIFRvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1R5cGUuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDkgQEAgY2xhc3MgVHlwZSBleHRlbmRzIE5vZGUgewogICAgIGdldCBr
aW5kKCkgeyByZXR1cm4gVHlwZTsgfQogICAgIGdldCBpc1B0cigpIHsgcmV0dXJuIGZhbHNlOyB9
CiAgICAgZ2V0IGlzQXJyYXlSZWYoKSB7IHJldHVybiBmYWxzZTsgfQorICAgIGdldCBpc051bWJl
cigpIHsgcmV0dXJuIGZhbHNlOyB9CisgICAgZ2V0IGlzSW50KCkgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICBnZXQgaXNGbG9hdCgpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgCiAgICAgaW5oZXJpdHMo
cHJvdG9jb2wpCiAgICAgewpJbmRleDogVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvVmlz
aXRvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9WaXNp
dG9yLmpzCShyZXZpc2lvbiAyMjE1NTApCisrKyBUb29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9WaXNpdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsNiArMjE1LDEzIEBAIGNsYXNzIFZp
c2l0b3IgewogICAgIAogICAgIHZpc2l0SW50TGl0ZXJhbChub2RlKQogICAgIHsKKyAgICAgICAg
bm9kZS50eXBlLnZpc2l0KHRoaXMpOworICAgIH0KKyAgICAKKyAgICB2aXNpdEludExpdGVyYWxU
eXBlKG5vZGUpCisgICAgeworICAgICAgICBpZiAobm9kZS50eXBlKQorICAgICAgICAgICAgbm9k
ZS50eXBlLnZpc2l0KHRoaXMpOwogICAgIH0KICAgICAKICAgICB2aXNpdFVpbnRMaXRlcmFsKG5v
ZGUpCg==
</data>
<flag name="review"
          id="339994"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>