<?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>199634</bug_id>
          
          <creation_ts>2019-07-09 12:21:24 -0700</creation_ts>
          <short_desc>[WHLSL] Make enums work</short_desc>
          <delta_ts>2019-07-20 05:42:33 -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>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>195681</blocked>
    
    <blocked>199853</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1551345</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-09 12:21:24 -0700</bug_when>
    <thetext>This shouldn&apos;t crash:

        enum Weekday {
            Monday,
            Tuesday,
            Wednesday,
            Thursday,
            Pizzaday
        }
        int foo()
        {
            (Weekday.Monday);
            return 42;
        }</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553039</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-15 17:14:36 -0700</bug_when>
    <thetext>doing this</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553051</commentid>
    <comment_count>2</comment_count>
      <attachid>374172</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-15 17:36:23 -0700</bug_when>
    <thetext>Created attachment 374172
WIP

WIP. It&apos;s starting to work. Just need to write some interesting tests around &quot;overflowing&quot; the +1 of enum values past UINT_MAX/INT_MAX</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553481</commentid>
    <comment_count>3</comment_count>
      <attachid>374287</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-17 04:22:44 -0700</bug_when>
    <thetext>Created attachment 374287
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553482</commentid>
    <comment_count>4</comment_count>
      <attachid>374288</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-17 04:29:27 -0700</bug_when>
    <thetext>Created attachment 374288
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1553598</commentid>
    <comment_count>5</comment_count>
      <attachid>374288</attachid>
    <who name="Robin Morisset">rmorisset</who>
    <bug_when>2019-07-17 11:24:00 -0700</bug_when>
    <thetext>Comment on attachment 374288
patch

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

r=me with just a few comments.

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:852
&gt; +auto Parser::parseEnumerationMember(int64_t defaltValue) -&gt; Expected&lt;AST::EnumerationMember, Error&gt;

defalt -&gt; default

&gt; Source/WebCore/Modules/webgpu/WHLSL/WHLSLParser.cpp:875
&gt; +    return AST::EnumerationMember(*identifier, WTFMove(name), defaltValue);

defalt -&gt; default

&gt; LayoutTests/webgpu/whlsl-enums-2.html:64
&gt; +            return a == b;

So == and != are to be automatically generated for enums? I can add it to the spec if it is on purpose.

&gt; LayoutTests/webgpu/whlsl-enums-2.html:144
&gt; +            return _war().value;

Similarly, this &quot;.value&quot; thing is not in the spec currently. I can add it, but why have both this and int(_war()) be supported?

&gt; LayoutTests/webgpu/whlsl-enums.html:13
&gt; +whlslTests.failTrickyDoubleZero = async () =&gt; {

The tests in this file are very nice! 👍</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554483</commentid>
    <comment_count>6</comment_count>
      <attachid>374288</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-20 05:09:22 -0700</bug_when>
    <thetext>Comment on attachment 374288
patch

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

&gt;&gt; LayoutTests/webgpu/whlsl-enums-2.html:144
&gt;&gt; +            return _war().value;
&gt; 
&gt; Similarly, this &quot;.value&quot; thing is not in the spec currently. I can add it, but why have both this and int(_war()) be supported?

I just copied this from the spec repo. I vote for removing it unless we think it&apos;s necessary. I&apos;ll omit these tests for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554484</commentid>
    <comment_count>7</comment_count>
      <attachid>374288</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-20 05:10:29 -0700</bug_when>
    <thetext>Comment on attachment 374288
patch

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

&gt;&gt; LayoutTests/webgpu/whlsl-enums-2.html:64
&gt;&gt; +            return a == b;
&gt; 
&gt; So == and != are to be automatically generated for enums? I can add it to the spec if it is on purpose.

Yeah I believe they are.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554485</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-07-20 05:41:57 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/247666/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1554486</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-07-20 05:42:33 -0700</bug_when>
    <thetext>&lt;rdar://problem/53344896&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374172</attachid>
            <date>2019-07-15 17:36:23 -0700</date>
            <delta_ts>2019-07-17 04:22:44 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>37538</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzQxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM1IEBACisyMDE5LTA3LTEyICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTWF0cml4IG1lbW9y
eSBsYXlvdXQgc2hvdWxkIG1hdGNoIEhMU0wgYnkgbGF5aW5nIG91dCBjb2x1bW5zIGxpbmVhcmx5
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTkyMTUK
KworICAgICAgICBSZXZpZXdlZCBieSBNeWxlcyBDLiBNYXhmaWVsZC4KKworICAgICAgICBUaGlz
IHBhdGNoIG1ha2VzIGl0IHNvIHRoYXQgd2UgbGF5IG91dCBtYXRyaWNlcyBpbiBtZW1vcnkgaW4g
dGhlIHNhbWUKKyAgICAgICAgd2F5IEhMU0wgZG9lcy4gVGhpcyBpcyBieSBsYXlpbmcgb3V0IGNv
bHVtbnMgbGluZWFybHkgaW4gbWVtb3J5LiBTbyBhIGZsb2F0NHg0CisgICAgICAgIGNvbXBvc2Vk
IGJ5IHRoaXMgc2VyaWVzIG9mIGZsb2F0cyBpbiBtZW1vcnk6CisgICAgICAgIFswLCAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5LCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1XQorICAgICAgICAKKyAg
ICAgICAgY29tcG9zZXMgdGhpcyBsb2dpY2FsIG1hdHJpeDoKKyAgICAgICAgW1sgMCwgIDQsICA4
LCAxMl0KKyAgICAgICAgIFsgMSwgIDUsICA5LCAxM10KKyAgICAgICAgIFsgMiwgIDYsIDEwLCAx
NF0KKyAgICAgICAgIFsgMywgIDcsIDExLCAxNV1dCisgICAgICAgIAorICAgICAgICBUbyBpbXBs
ZW1lbnQgdGhpcywgd2Ugc3dpdGNoIHRvIHVzaW5nIGFuIGFycmF5IHRvIHJlcHJlc2VudCB0aGUg
bWVtb3J5CisgICAgICAgIGNvbnRlbnRzIGxpbmVhciBtZW1vcnkgbGF5b3V0IG9mIGEgbWF0cml4
LiBTbyB0aGUgbWF0cml4IGZsb2F0NHgzIHdpbGwgbm93CisgICAgICAgIGJlIGFuIGFycmF5PGZs
b2F0LCAxMj4gaW4gbWV0YWwuIFRoZW4sIHdlIGNoYW5nZSB0aGUgaW5kZXhlZCBnZXR0ZXIgYW5k
CisgICAgICAgIHNldHRlciBtZXRob2RzIGZvciBtYXRyaWNlcyB0byBsb2FkIGFuZCBzdG9yZSBm
cm9tIGFuZCB0byB0aGUgY29ycmVjdAorICAgICAgICBtZW1vcnkgbG9jYXRpb25zLiBUaGUgbWVt
b3J5IGxheW91dCBvZiBtYXRyaWNlcyBpcyBvYnNlcnZhYmxlIHRvIFdITFNMCisgICAgICAgIHdo
ZW4gdXNpbmcgYSBtYXRyaXggYXMgYW4gaW5wdXQvb3V0cHV0IHRvIGEgc2hhZGVyLgorCisgICAg
ICAgIFRlc3Q6IHdlYmdwdS93aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91dC5odG1sCisKKyAgICAg
ICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVGdW5jdGlv
bik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVUeXBl
V3JpdGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpNZXRhbDo6d3JpdGVOYXRpdmVU
eXBlKToKKwogMjAxOS0wNy0xMiAgVGhpYmF1bHQgU2F1bmllciAgPHRzYXVuaWVyQGlnYWxpYS5j
b20+CiAKICAgICAgICAgW0dTdHJlYW1lcl0gTW9jayBHU3RyZWFtZXIgcmVhbHRpbWUgc291cmNl
cyBzaG91bGQga2VlcCBhIFJlZiBvZiB0aGVpciBtb2NrIHJlYWx0aW1lIG1lZGlhIHNvdXJjZXMK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9X
SExTTEFTVER1bXBlci5jcHAJKHJldmlzaW9uIDI0NzQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTM0LDExICsxMzQsNyBAQCB2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRl
CiAKIHZvaWQgQVNURHVtcGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJh
dGlvbk1lbWJlcikKIHsKLSAgICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCkp
OwotICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKSB7Ci0gICAgICAgIG1fb3V0LnBy
aW50KCIgPSAiKTsKLSAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOwot
ICAgIH0KKyAgICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCksICIgPSAiLCBl
bnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKTsKIH0KIAogdm9pZCBBU1REdW1wZXI6OnZpc2l0KEFT
VDo6RnVuY3Rpb25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJ
KHJldmlzaW9uIDI0NzQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNM
L1dITFNMQ2hlY2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNSwxNyArNjI1LDYgQEAgc3Rh
dGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAgIH0pKTsKIH0KIAotc3Rh
dGljIE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQo
UmVzb2x2aW5nVHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkK
LXsKLSAgICByZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShV
bmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVu
aXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICBpZiAobWF0Y2hlcyhyZXNvbHZp
bmdUeXBlLCBuYW1lZFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUtPmNs
b25lKCk7Ci0gICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxS
ZXNvbHZhYmxlVHlwZVJlZmVyZW5jZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1
ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQo
bmFtZWRUeXBlLCByZXNvbHZpbmdUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKLSAgICB9KSk7Ci19
Ci0KIHN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChS
ZXNvbHZpbmdUeXBlJiByZXNvbHZpbmdUeXBlKQogewogICAgIHJldHVybiByZXNvbHZpbmdUeXBl
LnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYg
dW5uYW1lZFR5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewpA
QCAtNjQ5LDYgKzYzOCw3IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVk
VHkKIAogdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51
bWVyYXRpb25EZWZpbml0aW9uKQogeworICAgIGJvb2wgaXNTaWduZWQ7CiAgICAgYXV0byogYmFz
ZVR5cGUgPSAoWyZdKCkgLT4gQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHsKICAgICAgICAg
Y2hlY2tFcnJvckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgICAg
ICBhdXRvJiBiYXNlVHlwZSA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2Rl
KCk7CkBAIC02NjAsNiArNjUwLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0
aW9uRGVmaQogICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxB
U1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgaWYgKCFuYXRp
dmVUeXBlRGVjbGFyYXRpb24uaXNJbnQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgICAgICBpc1NpZ25lZCA9IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc1NpZ25lZCgpOwogICAg
ICAgICByZXR1cm4gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKICAgICB9KSgpOwogICAgIGlmICgh
YmFzZVR5cGUpIHsKQEAgLTY2OSw3MSArNjYwLDI1IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpFbnVtZXJhdGlvbkRlZmkKIAogICAgIGF1dG8gZW51bWVyYXRpb25NZW1iZXJzID0gZW51bWVy
YXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpOwogCi0gICAgYXV0byBtYXRjaEFu
ZENvbW1pdE1lbWJlciA9IFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBtZW1iZXIpIC0+IGJv
b2wgewotICAgICAgICByZXR1cm4gbWVtYmVyLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0
b3IoWyZdKEFTVDo6RXhwcmVzc2lvbiYgdmFsdWUpIC0+IGJvb2wgewotICAgICAgICAgICAgYXV0
byB2YWx1ZUluZm8gPSByZWN1cnNlQW5kR2V0SW5mbyh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAo
IXZhbHVlSW5mbykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQodmFsdWVJbmZvLT5yZXNvbHZp
bmdUeXBlLCAqYmFzZVR5cGUpKTsKLSAgICAgICAgfSkpOwotICAgIH07Ci0KICAgICBmb3IgKGF1
dG8mIG1lbWJlciA6IGVudW1lcmF0aW9uTWVtYmVycykgewotICAgICAgICBpZiAoIW1lbWJlci5n
ZXQoKS52YWx1ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFtYXRj
aEFuZENvbW1pdE1lbWJlcihtZW1iZXIpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50NjRfdCBuZXh0VmFs
dWUgPSAwOwotICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVyYXRpb25NZW1iZXJzKSB7Ci0g
ICAgICAgIGlmIChtZW1iZXIuZ2V0KCkudmFsdWUoKSkgewotICAgICAgICAgICAgYXV0byB2YWx1
ZSA9IG1lbWJlci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6
OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgLT4gaW50NjRfdCB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIGludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7Ci0gICAg
ICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVn
ZXJMaXRlcmFsKSAtPiBpbnQ2NF90IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5zaWduZWRJ
bnRlZ2VyTGl0ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOwotICAgICAgICAgICAgfSwgWyZd
KGF1dG8mKSAtPiBpbnQ2NF90IHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0pKTsKLSAgICAgICAg
ICAgIG5leHRWYWx1ZSA9IGJhc2VUeXBlLT5zdWNjZXNzb3IoKSh2YWx1ZSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAobmV4dFZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxp
bnQ+OjptYXgoKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChuZXh0VmFsdWUgPD0gc3RkOjpu
dW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBtZW1iZXIu
Z2V0KCkuc2V0VmFsdWUoQVNUOjpDb25zdGFudEV4cHJlc3Npb24oQVNUOjpVbnNpZ25lZEludGVn
ZXJMaXRlcmFsKG1lbWJlci5nZXQoKS5jb2RlTG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWdu
ZWQ+KG5leHRWYWx1ZSkpKSk7CisgICAgICAgIGlmIChpc1NpZ25lZCkgeworICAgICAgICAgICAg
QVNTRVJUKG1lbWJlci5nZXQoKS52YWx1ZSgpID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50MzJf
dD46Om1pbigpKTsKKyAgICAgICAgICAgIGlmIChtZW1iZXIuZ2V0KCkudmFsdWUoKSA+IHN0ZDo6
bnVtZXJpY19saW1pdHM8aW50MzJfdD46Om1heCgpKSB7CisgICAgICAgICAgICAgICAgc2V0RXJy
b3IoKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBBU1NFUlQobmV4dFZhbHVlID49IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkpOwot
ICAgICAgICAgICAgbWVtYmVyLmdldCgpLnNldFZhbHVlKEFTVDo6Q29uc3RhbnRFeHByZXNzaW9u
KEFTVDo6SW50ZWdlckxpdGVyYWwobWVtYmVyLmdldCgpLmNvZGVMb2NhdGlvbigpLCBzdGF0aWNf
Y2FzdDxpbnQ+KG5leHRWYWx1ZSkpKSk7Ci0KLSAgICAgICAgICAgIGlmICghbWF0Y2hBbmRDb21t
aXRNZW1iZXIobWVtYmVyKSkgeworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgKG1l
bWJlci5nZXQoKS52YWx1ZSgpID4gc3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgp
KSB7CiAgICAgICAgICAgICAgICAgc2V0RXJyb3IoKTsKICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG5leHRWYWx1ZSA9IGJhc2VUeXBlLT5zdWNj
ZXNzb3IoKShuZXh0VmFsdWUpOwogICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byBnZXRWYWx1
ZSA9IFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBtZW1iZXIpIC0+IGludDY0X3QgewotICAg
ICAgICBBU1NFUlQobWVtYmVyLnZhbHVlKCkpOwotICAgICAgICBhdXRvIHZhbHVlID0gbWVtYmVy
LnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwm
IGludGVnZXJMaXRlcmFsKSAtPiBpbnQ2NF90IHsKLSAgICAgICAgICAgIHJldHVybiBpbnRlZ2Vy
TGl0ZXJhbC52YWx1ZSgpOwotICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRl
cmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSAtPiBpbnQ2NF90IHsKLSAgICAgICAgICAgIHJl
dHVybiB1bnNpZ25lZEludGVnZXJMaXRlcmFsLnZhbHVlKCk7Ci0gICAgICAgIH0sIFsmXShhdXRv
JikgLT4gaW50NjRfdCB7Ci0gICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAg
ICB9OwotCiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBlbnVtZXJhdGlvbk1lbWJlcnMuc2l6
ZSgpOyArK2kpIHsKLSAgICAgICAgYXV0byB2YWx1ZSA9IGdldFZhbHVlKGVudW1lcmF0aW9uTWVt
YmVyc1tpXS5nZXQoKSk7CisgICAgICAgIGF1dG8gdmFsdWUgPSBlbnVtZXJhdGlvbk1lbWJlcnNb
aV0uZ2V0KCkudmFsdWUoKTsKICAgICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgZW51
bWVyYXRpb25NZW1iZXJzLnNpemUoKTsgKytqKSB7Ci0gICAgICAgICAgICBhdXRvIG90aGVyVmFs
dWUgPSBnZXRWYWx1ZShlbnVtZXJhdGlvbk1lbWJlcnNbal0uZ2V0KCkpOworICAgICAgICAgICAg
YXV0byBvdGhlclZhbHVlID0gZW51bWVyYXRpb25NZW1iZXJzW2pdLmdldCgpLnZhbHVlKCk7CiAg
ICAgICAgICAgICBpZiAodmFsdWUgPT0gb3RoZXJWYWx1ZSkgewogICAgICAgICAgICAgICAgIHNl
dEVycm9yKCk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNzQzLDcgKzY4OCw3IEBAIHZv
aWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlZmkKIAogICAgIGJvb2wgZm91bmRa
ZXJvID0gZmFsc2U7CiAgICAgZm9yIChhdXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMp
IHsKLSAgICAgICAgaWYgKCFnZXRWYWx1ZShtZW1iZXIuZ2V0KCkpKSB7CisgICAgICAgIGlmICgh
bWVtYmVyLmdldCgpLnZhbHVlKCkpIHsKICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxl
cy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ3NDEw
KQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04MjYsNyArODI2LDkgQEAgYXV0byBQYXJzZXI6OnBhcnNlRW51
bWVyYXRpb25EZWZpbml0aW9uKAogCiAgICAgQ09OU1VNRV9UWVBFKGxlZnRDdXJseUJyYWNrZXQs
IExlZnRDdXJseUJyYWNrZXQpOwogCi0gICAgUEFSU0UoZmlyc3RFbnVtZXJhdGlvbk1lbWJlciwg
RW51bWVyYXRpb25NZW1iZXIpOworICAgIGludDY0X3QgbmV4dFZhbHVlID0gMDsKKyAgICBQQVJT
RShmaXJzdEVudW1lcmF0aW9uTWVtYmVyLCBFbnVtZXJhdGlvbk1lbWJlciwgbmV4dFZhbHVlKTsK
KyAgICBuZXh0VmFsdWUgPSBmaXJzdEVudW1lcmF0aW9uTWVtYmVyLT52YWx1ZSgpICsgMTsKIAog
ICAgIEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uIHJlc3VsdCh7IH0sIG5hbWUtPnN0cmluZ1Zp
ZXcobV9sZXhlcikudG9TdHJpbmcoKSwgV1RGTW92ZSgqdHlwZSkpOwogICAgIGF1dG8gc3VjY2Vz
cyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikpOwpAQCAtODM0
LDcgKzgzNiw4IEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigKICAg
ICAgICAgcmV0dXJuIGZhaWwoIkNhbm5vdCBhZGQgZW51bWVyYXRpb24gbWVtYmVyIl9zdHIpOwog
CiAgICAgd2hpbGUgKHRyeVR5cGUoVG9rZW46OlR5cGU6OkNvbW1hKSkgewotICAgICAgICBQQVJT
RShtZW1iZXIsIEVudW1lcmF0aW9uTWVtYmVyKTsKKyAgICAgICAgUEFSU0UobWVtYmVyLCBFbnVt
ZXJhdGlvbk1lbWJlciwgbmV4dFZhbHVlKTsKKyAgICAgICAgbmV4dFZhbHVlID0gbWVtYmVyLT52
YWx1ZSgpICsgMTsKICAgICAgICAgc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqbWVtYmVy
KSk7CiAgICAgICAgIGlmICghc3VjY2VzcykKICAgICAgICAgICAgIHJldHVybiBmYWlsKCJDYW5u
b3QgYWRkIGVudW1lcmF0aW9uIG1lbWJlciJfc3RyKTsKQEAgLTg0NiwxNiArODQ5LDMwIEBAIGF1
dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigKICAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOwogfQogCi1hdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbk1lbWJlcigpIC0+
IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9yPgorYXV0byBQYXJzZXI6OnBh
cnNlRW51bWVyYXRpb25NZW1iZXIoaW50NjRfdCBkZWZhbHRWYWx1ZSkgLT4gRXhwZWN0ZWQ8QVNU
OjpFbnVtZXJhdGlvbk1lbWJlciwgRXJyb3I+CiB7CiAgICAgQ09OU1VNRV9UWVBFKGlkZW50aWZp
ZXIsIElkZW50aWZpZXIpOwogICAgIGF1dG8gbmFtZSA9IGlkZW50aWZpZXItPnN0cmluZ1ZpZXco
bV9sZXhlcikudG9TdHJpbmcoKTsKIAogICAgIGlmICh0cnlUeXBlKFRva2VuOjpUeXBlOjpFcXVh
bHNTaWduKSkgewogICAgICAgICBQQVJTRShjb25zdGFudEV4cHJlc3Npb24sIENvbnN0YW50RXhw
cmVzc2lvbik7Ci0gICAgICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKCppZGVudGlm
aWVyLCBXVEZNb3ZlKG5hbWUpLCBXVEZNb3ZlKCpjb25zdGFudEV4cHJlc3Npb24pKTsKKworICAg
ICAgICBPcHRpb25hbDxpbnQ2NF90PiB2YWx1ZTsKKyAgICAgICAgY29uc3RhbnRFeHByZXNzaW9u
LT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2Vy
TGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOwor
ICAgICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVn
ZXJMaXRlcmFsKSB7CisgICAgICAgICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwu
dmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICB9
LCBbJl0oQVNUOjpOdWxsTGl0ZXJhbCYpIHsKKyAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxp
dGVyYWwmKSB7CisgICAgICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYp
IHsKKyAgICAgICAgfSkpOworCisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gVW5leHBlY3RlZDxFcnJvcj4oImVudW0gaW5pdGlhbGl6YXRpb24gdmFsdWVzIGNhbiBvbmx5
IGJlIGFuIGludCBvciB1aW50IGNvbnN0YW50LiIpOworICAgICAgICByZXR1cm4gQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlcigqaWRlbnRpZmllciwgV1RGTW92ZShuYW1lKSwgKnZhbHVlKTsKICAgICB9
Ci0gICAgcmV0dXJuIEFTVDo6RW51bWVyYXRpb25NZW1iZXIoKmlkZW50aWZpZXIsIFdURk1vdmUo
bmFtZSkpOworICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKCppZGVudGlmaWVyLCBX
VEZNb3ZlKG5hbWUpLCBkZWZhbHRWYWx1ZSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZU5hdGl2
ZVR5cGVEZWNsYXJhdGlvbigpIC0+IEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9u
LCBFcnJvcj4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNM
UGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQYXJzZXIuaAkocmV2aXNpb24gMjQ3NDEwKQorKysgU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcg
KzE4NCw3IEBAIHByaXZhdGU6CiAgICAgRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVFbGVtZW50LCBF
cnJvcj4gcGFyc2VTdHJ1Y3R1cmVFbGVtZW50KCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1
cmVEZWZpbml0aW9uLCBFcnJvcj4gcGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9uKCk7CiAgICAgRXhw
ZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbkRlZmluaXRpb24sIEVycm9yPiBwYXJzZUVudW1lcmF0aW9u
RGVmaW5pdGlvbigpOwotICAgIEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9y
PiBwYXJzZUVudW1lcmF0aW9uTWVtYmVyKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlv
bk1lbWJlciwgRXJyb3I+IHBhcnNlRW51bWVyYXRpb25NZW1iZXIoaW50NjRfdCBkZWZhdWx0VmFs
dWUpOwogICAgIEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFy
c2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKTsKICAgICBFeHBlY3RlZDxBU1Q6Ok51bVRocmVhZHNG
dW5jdGlvbkF0dHJpYnV0ZSwgRXJyb3I+IHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRl
KCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+IHBhcnNlQXR0cmli
dXRlQmxvY2soKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJn
cHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAkocmV2aXNpb24gMjQ3NDEwKQorKysgU291cmNlL1dl
YkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQzLDEwICsxNDMsOCBAQCB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RydWN0dXJl
RWxlbWVuCiAgICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgqc3RydWN0dXJlRWxlbWVudC5zZW1h
bnRpYygpKTsKIH0KIAotdm9pZCBWaXNpdG9yOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVy
JiBlbnVtZXJhdGlvbk1lbWJlcikKK3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlv
bk1lbWJlciYpCiB7Ci0gICAgaWYgKGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpCi0gICAgICAg
IGNoZWNrRXJyb3JBbmRWaXNpdCgqZW51bWVyYXRpb25NZW1iZXIudmFsdWUoKSk7CiB9CiAKIHZv
aWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xh
cmF0aW9uKQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dI
TFNMRW51bWVyYXRpb25NZW1iZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCShyZXZpc2lvbiAy
NDc0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xF
bnVtZXJhdGlvbk1lbWJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgbmFt
ZXNwYWNlIEFTVCB7CiAKIGNsYXNzIEVudW1lcmF0aW9uTWVtYmVyIHsKIHB1YmxpYzoKLSAgICBF
bnVtZXJhdGlvbk1lbWJlcihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIE9w
dGlvbmFsPENvbnN0YW50RXhwcmVzc2lvbj4mJiB2YWx1ZSA9IFdURjo6bnVsbG9wdCkKKyAgICBF
bnVtZXJhdGlvbk1lbWJlcihDb2RlTG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIGlu
dDY0X3QgdmFsdWUpCiAgICAgICAgIDogbV9jb2RlTG9jYXRpb24obG9jYXRpb24pCiAgICAgICAg
ICwgbV9uYW1lKFdURk1vdmUobmFtZSkpCi0gICAgICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVl
KSkKKyAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CiAKQEAgLTU1LDE4ICs1
NSwxMiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBDb2RlTG9jYXRpb24mIGNvZGVMb2NhdGlvbigp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZUxvY2F0aW9uOyB9CiAgICAgU3RyaW5nIG5hbWUoKSB7IHJl
dHVybiBtX25hbWU7IH0KLSAgICBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+JiB2YWx1ZSgp
IHsgcmV0dXJuIG1fdmFsdWU7IH0KLQotICAgIHZvaWQgc2V0VmFsdWUoQ29uc3RhbnRFeHByZXNz
aW9uJiYgdmFsdWUpCi0gICAgewotICAgICAgICBBU1NFUlQoIW1fdmFsdWUpOwotICAgICAgICBt
X3ZhbHVlID0gV1RGTW92ZSh2YWx1ZSk7Ci0gICAgfQorICAgIGludDY0X3QgdmFsdWUoKSB7IHJl
dHVybiBtX3ZhbHVlOyB9CiAKIHByaXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0
aW9uOwogICAgIFN0cmluZyBtX25hbWU7Ci0gICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9u
PiBtX3ZhbHVlOworICAgIGludDY0X3QgbV92YWx1ZTsKIH07CiAKIHVzaW5nIEVudW1lcmF0aW9u
TWVtYmVycyA9IFZlY3RvcjxFbnVtZXJhdGlvbk1lbWJlcj47CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExT
TEZ1bmN0aW9uV3JpdGVyLmNwcAkocmV2aXNpb24gMjQ3NDEwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ4MCw3ICs0ODAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRl
cjo6dmlzaXQoQVNUCiAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJh
dGlvbkRlZmluaXRpb24oKSk7CiAgICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRW
YXJpYWJsZU5hbWUoKTsKICAgICBhdXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1h
bmdsZWROYW1lRm9yVHlwZShlbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkp
OwotICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUs
ICcgJywgdmFyaWFibGVOYW1lLCAiID0gIiwgbWFuZ2xlZFR5cGVOYW1lLCAnLicsIG1fdHlwZU5h
bWVyLm1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0
ZXJhbC5lbnVtZXJhdGlvbk1lbWJlcigpKSwgIjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9
ICIsIG1hbmdsZWRUeXBlTmFtZSwgIjo6IiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVt
ZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVy
KCkpLCAiO1xuIikpOwogICAgIGFwcGVuZFJpZ2h0VmFsdWUoZW51bWVyYXRpb25NZW1iZXJMaXRl
cmFsLCB2YXJpYWJsZU5hbWUpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xNZXRhbENv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAyNDc0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE1ldGFsQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNlIFdITFNMIHsKIAogbmFtZXNwYWNl
IE1ldGFsIHsKIAotc3RhdGljIGNvbnN0ZXhwciBib29sIGR1bXBNZXRhbENvZGUgPSBmYWxzZTsK
K3N0YXRpYyBjb25zdGV4cHIgYm9vbCBkdW1wTWV0YWxDb2RlID0gdHJ1ZTsKIAogc3RhdGljIFN0
cmluZyBnZW5lcmF0ZU1ldGFsQ29kZVNoYXJlZChTdHJpbmcmJiBtZXRhbFR5cGVzLCBTdHJpbmcm
JiBtZXRhbEZ1bmN0aW9ucykKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVuY3Rpb25Xcml0ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMTmF0aXZlRnVu
Y3Rpb25Xcml0ZXIuY3BwCShyZXZpc2lvbiAyNDc0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZUZ1bmN0aW9uV3JpdGVyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjUwLDEyICsyNTAsMTggQEAgU3RyaW5nIHdyaXRlTmF0aXZlRnVuY3Rp
b24oQVNUOjpOYXRpdmVGdQogICAgICAgICByZXR1cm4gc3RyaW5nQnVpbGRlci50b1N0cmluZygp
OwogICAgIH0KIAotICAgIGF1dG8gbnVtYmVyT2ZNYXRyaXhSb3dzID0gWyZdIHsKKyAgICBhdXRv
IG1hdHJpeERpbWVuc2lvbiA9IFsmXSAodW5zaWduZWQgdHlwZUFyZ3VtZW50SW5kZXgpIC0+IHVu
c2lnbmVkIHsKICAgICAgICAgYXV0byYgdHlwZVJlZmVyZW5jZSA9IGRvd25jYXN0PEFTVDo6VHlw
ZVJlZmVyZW5jZT4oKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzBdLT50
eXBlKCkpOwogICAgICAgICBhdXRvJiBtYXRyaXhUeXBlID0gZG93bmNhc3Q8QVNUOjpOYXRpdmVU
eXBlRGVjbGFyYXRpb24+KGRvd25jYXN0PEFTVDo6VHlwZVJlZmVyZW5jZT4oZG93bmNhc3Q8QVNU
OjpUeXBlRGVmaW5pdGlvbj4odHlwZVJlZmVyZW5jZS5yZXNvbHZlZFR5cGUoKSkudHlwZSgpKS5y
ZXNvbHZlZFR5cGUoKSk7CiAgICAgICAgIEFTU0VSVChtYXRyaXhUeXBlLm5hbWUoKSA9PSAibWF0
cml4Iik7CiAgICAgICAgIEFTU0VSVChtYXRyaXhUeXBlLnR5cGVBcmd1bWVudHMoKS5zaXplKCkg
PT0gMyk7Ci0gICAgICAgIHJldHVybiBTdHJpbmc6Om51bWJlcihXVEY6OmdldDxBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbj4obWF0cml4VHlwZS50eXBlQXJndW1lbnRzKClbMV0pLmludGVnZXJMaXRl
cmFsKCkudmFsdWUoKSk7CisgICAgICAgIHJldHVybiBXVEY6OmdldDxBU1Q6OkNvbnN0YW50RXhw
cmVzc2lvbj4obWF0cml4VHlwZS50eXBlQXJndW1lbnRzKClbdHlwZUFyZ3VtZW50SW5kZXhdKS5p
bnRlZ2VyTGl0ZXJhbCgpLnZhbHVlKCk7CisgICAgfTsKKyAgICBhdXRvIG51bWJlck9mTWF0cml4
Um93cyA9IFsmXSB7CisgICAgICAgIHJldHVybiBtYXRyaXhEaW1lbnNpb24oMSk7CisgICAgfTsK
KyAgICBhdXRvIG51bWJlck9mTWF0cml4Q29sdW1ucyA9IFsmXSB7CisgICAgICAgIHJldHVybiBt
YXRyaXhEaW1lbnNpb24oMik7CiAgICAgfTsKIAogICAgIGlmIChuYXRpdmVGdW5jdGlvbkRlY2xh
cmF0aW9uLm5hbWUoKSA9PSAib3BlcmF0b3JbXSIpIHsKQEAgLTI2Myw5ICsyNjksMjAgQEAgU3Ry
aW5nIHdyaXRlTmF0aXZlRnVuY3Rpb24oQVNUOjpOYXRpdmVGdQogICAgICAgICBhdXRvIG1ldGFs
UGFyYW1ldGVyMU5hbWUgPSB0eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JUeXBlKCpuYXRpdmVGdW5j
dGlvbkRlY2xhcmF0aW9uLnBhcmFtZXRlcnMoKVswXS0+dHlwZSgpKTsKICAgICAgICAgYXV0byBt
ZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqbmF0aXZl
RnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAgICAgIGF1
dG8gbWV0YWxSZXR1cm5OYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShuYXRpdmVG
dW5jdGlvbkRlY2xhcmF0aW9uLnR5cGUoKSk7CisKKyAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZS
b3dzID0gbnVtYmVyT2ZNYXRyaXhSb3dzKCk7CisgICAgICAgIHVuc2lnbmVkIG51bWJlck9mQ29s
dW1ucyA9IG51bWJlck9mTWF0cml4Q29sdW1ucygpOworCiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcobWV0YWxSZXR1cm5OYW1lLCAnICcsIG91dHB1dEZ1bmN0aW9uTmFt
ZSwgJygnLCBtZXRhbFBhcmFtZXRlcjFOYW1lLCAiIG0sICIsIG1ldGFsUGFyYW1ldGVyMk5hbWUs
ICIgaSkge1xuIikpOwotICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIg
ICAgaWYgKGkgPCAiLCBudW1iZXJPZk1hdHJpeFJvd3MoKSwgIikgcmV0dXJuIG1baV07XG4iKSk7
Ci0gICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXR1cm4gIiwg
bWV0YWxSZXR1cm5OYW1lLCAiKDApO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgaWYgKGkgPj0gIiwgbnVtYmVyT2ZSb3dzLCAiKSByZXR1cm4gIiwg
bWV0YWxSZXR1cm5OYW1lLCAiKDApO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVu
ZChtYWtlU3RyaW5nKCIgICAgIiwgbWV0YWxSZXR1cm5OYW1lLCAiIHJlc3VsdDtcbiIpKTsKKyAg
ICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXN1bHRbMF0gPSBtW2ldO1xuIik7Cisg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXN1bHRbMV0gPSBt
W2kgKyAiLCBudW1iZXJPZlJvd3MsICJdO1xuIikpOworICAgICAgICBpZiAobnVtYmVyT2ZDb2x1
bW5zID49IDMpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIg
ICAgcmVzdWx0WzJdID0gbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMiwgIl07XG4iKSk7CisgICAg
ICAgIGlmIChudW1iZXJPZkNvbHVtbnMgPj0gNCkKKyAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoIiAgICByZXN1bHRbM10gPSBtW2kgKyAiLCBudW1iZXJPZlJvd3Mg
KiAzLCAiXTtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQoIiAgICByZXR1cm4g
cmVzdWx0O1xuIik7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9XG4iKTsKICAgICAg
ICAgcmV0dXJuIHN0cmluZ0J1aWxkZXIudG9TdHJpbmcoKTsKICAgICB9CkBAIC0yNzYsOSArMjkz
LDE5IEBAIFN0cmluZyB3cml0ZU5hdGl2ZUZ1bmN0aW9uKEFTVDo6TmF0aXZlRnUKICAgICAgICAg
YXV0byBtZXRhbFBhcmFtZXRlcjJOYW1lID0gdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgq
bmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi5wYXJhbWV0ZXJzKClbMV0tPnR5cGUoKSk7CiAgICAg
ICAgIGF1dG8gbWV0YWxQYXJhbWV0ZXIzTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUoKm5hdGl2ZUZ1bmN0aW9uRGVjbGFyYXRpb24ucGFyYW1ldGVycygpWzJdLT50eXBlKCkpOwog
ICAgICAgICBhdXRvIG1ldGFsUmV0dXJuTmFtZSA9IHR5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5
cGUobmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbi50eXBlKCkpOworCisgICAgICAgIHVuc2lnbmVk
IG51bWJlck9mUm93cyA9IG51bWJlck9mTWF0cml4Um93cygpOworICAgICAgICB1bnNpZ25lZCBu
dW1iZXJPZkNvbHVtbnMgPSBudW1iZXJPZk1hdHJpeENvbHVtbnMoKTsKKwogICAgICAgICBzdHJp
bmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1ldGFsUmV0dXJuTmFtZSwgJyAnLCBvdXRwdXRG
dW5jdGlvbk5hbWUsICcoJywgbWV0YWxQYXJhbWV0ZXIxTmFtZSwgIiBtLCAiLCBtZXRhbFBhcmFt
ZXRlcjJOYW1lLCAiIGksICIsIG1ldGFsUGFyYW1ldGVyM05hbWUsICIgdikge1xuIikpOwotICAg
ICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgaWYgKGkgPCAiLCBudW1i
ZXJPZk1hdHJpeFJvd3MoKSwgIikgbVtpXSA9IHY7XG4iKSk7Ci0gICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKCIgICAgcmV0dXJuIG07XG4iKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZygiICAgIGlmIChpID49ICIsIG51bWJlck9mUm93cywgIikgcmV0dXJuIG07
XG4iKSk7CisgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICBtW2ld
ID0gdlswXTtcbiIpKTsKKyAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygi
ICAgIG1baSArICIsIG51bWJlck9mUm93cywgIl0gPSB2WzFdO1xuIikpOworICAgICAgICBpZiAo
bnVtYmVyT2ZDb2x1bW5zID49IDMpCisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCht
YWtlU3RyaW5nKCIgICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMiwgIl0gPSB2WzJdO1xuIikp
OworICAgICAgICBpZiAobnVtYmVyT2ZDb2x1bW5zID49IDQpCisgICAgICAgICAgICBzdHJpbmdC
dWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCIgICAgbVtpICsgIiwgbnVtYmVyT2ZSb3dzICogMywg
Il0gPSB2WzNdO1xuIikpOworICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgiICAgIHJldHVy
biBtOyIpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifVxuIik7CiAgICAgICAgIHJl
dHVybiBzdHJpbmdCdWlsZGVyLnRvU3RyaW5nKCk7CiAgICAgfQpJbmRleDogU291cmNlL1dlYkNv
cmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xOYXRpdmVUeXBlV3JpdGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9X
SExTTE5hdGl2ZVR5cGVXcml0ZXIuY3BwCShyZXZpc2lvbiAyNDc0MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTE5hdGl2ZVR5cGVXcml0ZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjIsMzUgKzEyMiwxOSBAQCBTdHJpbmcgd3JpdGVOYXRpdmVU
eXBlKEFTVDo6TmF0aXZlVHlwZURlCiAgICAgICAgICAgICBBU1NFUlQocGFyYW1ldGVyVHlwZS5u
YW1lKCkgPT0gImZsb2F0Iik7CiAgICAgICAgICAgICByZXR1cm4gImZsb2F0IjsKICAgICAgICAg
fSkoKTsKKwogICAgICAgICBBU1NFUlQoV1RGOjpob2xkc19hbHRlcm5hdGl2ZTxBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsxXSkp
OwogICAgICAgICBhdXRvJiBjb25zdGFudEV4cHJlc3Npb24xID0gV1RGOjpnZXQ8QVNUOjpDb25z
dGFudEV4cHJlc3Npb24+KG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMV0p
OwogICAgICAgICBhdXRvJiBpbnRlZ2VyTGl0ZXJhbDEgPSBjb25zdGFudEV4cHJlc3Npb24xLmlu
dGVnZXJMaXRlcmFsKCk7Ci0gICAgICAgIGF1dG8gbWlkZGxlID0gKFsmXSgpIC0+IFN0cmluZyB7
Ci0gICAgICAgICAgICBzd2l0Y2ggKGludGVnZXJMaXRlcmFsMS52YWx1ZSgpKSB7Ci0gICAgICAg
ICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIyIl9zdHI7Ci0gICAgICAgICAg
ICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgcmV0dXJuICIzIl9zdHI7Ci0gICAgICAgICAgICBk
ZWZhdWx0OgotICAgICAgICAgICAgICAgIEFTU0VSVChpbnRlZ2VyTGl0ZXJhbDEudmFsdWUoKSA9
PSA0KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gIjQiX3N0cjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfSkoKTsKKyAgICAgICAgdW5zaWduZWQgcm93cyA9IGludGVnZXJMaXRlcmFsMS52YWx1
ZSgpOworICAgICAgICBBU1NFUlQocm93cyA9PSAyIHx8IHJvd3MgPT0gMyB8fCByb3dzID09IDQp
OworCiAgICAgICAgIEFTU0VSVChXVEY6OmhvbGRzX2FsdGVybmF0aXZlPEFTVDo6Q29uc3RhbnRF
eHByZXNzaW9uPihuYXRpdmVUeXBlRGVjbGFyYXRpb24udHlwZUFyZ3VtZW50cygpWzJdKSk7CiAg
ICAgICAgIGF1dG8mIGNvbnN0YW50RXhwcmVzc2lvbjIgPSBXVEY6OmdldDxBU1Q6OkNvbnN0YW50
RXhwcmVzc2lvbj4obmF0aXZlVHlwZURlY2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKVsyXSk7CiAg
ICAgICAgIGF1dG8mIGludGVnZXJMaXRlcmFsMiA9IGNvbnN0YW50RXhwcmVzc2lvbjIuaW50ZWdl
ckxpdGVyYWwoKTsKLSAgICAgICAgYXV0byBzdWZmaXggPSAoWyZdKCkgLT4gU3RyaW5nIHsKLSAg
ICAgICAgICAgIHN3aXRjaCAoaW50ZWdlckxpdGVyYWwyLnZhbHVlKCkpIHsKLSAgICAgICAgICAg
IGNhc2UgMjoKLSAgICAgICAgICAgICAgICByZXR1cm4gIjIiX3N0cjsKLSAgICAgICAgICAgIGNh
c2UgMzoKLSAgICAgICAgICAgICAgICByZXR1cm4gIjMiX3N0cjsKLSAgICAgICAgICAgIGRlZmF1
bHQ6Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGludGVnZXJMaXRlcmFsMi52YWx1ZSgpID09IDQp
OwotICAgICAgICAgICAgICAgIHJldHVybiAiNCJfc3RyOwotICAgICAgICAgICAgfQotICAgICAg
ICB9KSgpOwotICAgICAgICByZXR1cm4gbWFrZVN0cmluZyhwcmVmaXgsIG1pZGRsZSwgJ3gnLCBz
dWZmaXgpOworICAgICAgICB1bnNpZ25lZCBjb2x1bW5zID0gaW50ZWdlckxpdGVyYWwyLnZhbHVl
KCk7CisgICAgICAgIEFTU0VSVChjb2x1bW5zID09IDIgfHwgY29sdW1ucyA9PSAzIHx8IGNvbHVt
bnMgPT0gNCk7CisgICAgICAgIHJldHVybiBtYWtlU3RyaW5nKCJhcnJheTwiLCBwcmVmaXgsICIs
ICIsIGNvbHVtbnMgKiByb3dzLCAiPiIpOwogICAgIH0KICAgICBBU1NFUlQobmF0aXZlVHlwZURl
Y2xhcmF0aW9uLnR5cGVBcmd1bWVudHMoKS5zaXplKCkgPT0gMSk7CiAgICAgQVNTRVJUKFdURjo6
aG9sZHNfYWx0ZXJuYXRpdmU8VW5pcXVlUmVmPEFTVDo6VHlwZVJlZmVyZW5jZT4+KG5hdGl2ZVR5
cGVEZWNsYXJhdGlvbi50eXBlQXJndW1lbnRzKClbMF0pKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVO
YW1lci5jcHAJKHJldmlzaW9uIDI0NzQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEz
LDcgKzQxMyw3IEBAIHZvaWQgVHlwZU5hbWVyOjplbWl0TmFtZWRUeXBlRGVmaW5pdGlvbigKICAg
ICAgICAgYXV0byYgYmFzZVR5cGUgPSBlbnVtZXJhdGlvbkRlZmluaXRpb24udHlwZSgpLnVuaWZ5
Tm9kZSgpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJlbnVtIGNs
YXNzICIsIG1hbmdsZWROYW1lRm9yVHlwZShlbnVtZXJhdGlvbkRlZmluaXRpb24pLCAiIDogIiwg
bWFuZ2xlZE5hbWVGb3JUeXBlKGRvd25jYXN0PEFTVDo6TmFtZWRUeXBlPihiYXNlVHlwZSkpLCAi
IHtcbiIpKTsKICAgICAgICAgZm9yIChhdXRvJiBlbnVtZXJhdGlvbk1lbWJlciA6IGVudW1lcmF0
aW9uRGVmaW5pdGlvbi5lbnVtZXJhdGlvbk1lbWJlcnMoKSkKLSAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9u
TWVtYmVyKGVudW1lcmF0aW9uTWVtYmVyKSwgIixcbiIpKTsKKyAgICAgICAgICAgIHN0cmluZ0J1
aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcoIiAgICAiLCBtYW5nbGVkTmFtZUZvckVudW1lcmF0aW9u
TWVtYmVyKGVudW1lcmF0aW9uTWVtYmVyKSwgIiA9ICIsIGVudW1lcmF0aW9uTWVtYmVyLmdldCgp
LnZhbHVlKCksICIsXG4iKSk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKCJ9O1xuIik7
CiAgICAgfSBlbHNlIGlmIChpczxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBl
KSkgewogICAgICAgICAvLyBOYXRpdmUgdHlwZXMgYWxyZWFkeSBoYXZlIGRlZmluaXRpb25zLiBU
aGVyZSdzIG5vdGhpbmcgdG8gZG8uCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAyNDc0MTApCisrKyBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNCBAQAorMjAxOS0w
Ny0xMiAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KKworICAgICAgICBbV0hMU0xd
IE1hdHJpeCBtZW1vcnkgbGF5b3V0IHNob3VsZCBtYXRjaCBITFNMIGJ5IGxheWluZyBvdXQgY29s
dW1ucyBsaW5lYXJseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTk5MjE1CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTXlsZXMgQy4gTWF4ZmllbGQuCisK
KyAgICAgICAgKiB3ZWJncHUvd2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQuaHRt
bDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLXRlc3QtaGFybmVzcy10ZXN0Lmh0bWw6
CisKIDIwMTktMDctMTIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFN0b3BwaW5nIGEgY2xvbmVkIE1lZGlhU3RyZWFtIHZpZGVvIHRyYWNrIHNob3VsZCBub3Qg
c3RvcCBhbnkgb3RoZXIgdmlkZW8gdHJhY2sKSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1lbnVtcy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVt
cy5odG1sCShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVtcy5o
dG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjY4IEBACis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPG1ldGEgY2hhcnNldD11dGYtOD4KKzxtZXRhIG5hbWU9InRpbWVvdXQiIGNvbnRlbnQ9
ImxvbmciPgorPHRpdGxlPkVudW1zLjwvdGl0bGU+Cis8c2NyaXB0IHNyYz0ianMvd2hsc2wtdGVz
dC1oYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJqcy93ZWJncHUtZnVuY3Rpb25z
LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3MuanMi
Pjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzc3JlcG9ydC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorY29uc3Qgd2hsc2xUZXN0cyA9IHt9OworCit3aGxzbFRl
c3RzLmZhaWxUcmlja3lEb3VibGVaZXJvID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0IHByb2dy
YW0gPSBgCisgICAgICAgIGVudW0gRSB7CisgICAgICAgICAgICBGLAorICAgICAgICAgICAgRyA9
IC0yLAorICAgICAgICAgICAgSCwKKyAgICAgICAgICAgIEkgLy8gc2hvdWxkIGdldCB6ZXJvLCBh
bmQgdGhhdCdzIGEgZHVwZS4KKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAg
eworICAgICAgICAgICAgRSBlID0gRS5Gb287CisgICAgICAgICAgICByZXR1cm4gNDI7CisgICAg
ICAgIH0KKyAgICBgOworICAgIGF3YWl0IGNoZWNrRmFpbChwcm9ncmFtKTsKK307CisKK3dobHNs
VGVzdHMuc2ltcGxlRGVjbGFyYXRpb24gPSBhc3luYyAoKSA9PiB7CisgICAgY29uc3QgcHJvZ3Jh
bSA9IGAKKyAgICAgICAgZW51bSBFIHsKKyAgICAgICAgICAgIEZvbywKKyAgICAgICAgICAgIEJh
cgorICAgICAgICB9CisgICAgICAgIGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBF
IGUgPSBFLkZvbzsKKyAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgfQorICAgIGA7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFtd
KSwgNDIpOworfTsKKword2hsc2xUZXN0cy5lbnVtV2l0aFVpbnRCYXNlID0gYXN5bmMgKCkgPT4g
eworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBlbnVtIEZvbyA6IHVpbnQgeworICAgICAg
ICAgICAgV2FyLAorICAgICAgICAgICAgRmFtaW5lLAorICAgICAgICAgICAgUGVzdGlsZW5jZSwK
KyAgICAgICAgICAgIERlYXRoCisgICAgICAgIH0KKworICAgICAgICBGb28gX3dhcigpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uV2FyOworICAgICAgICB9CisKKyAgICAgICAg
Rm9vIHdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfd2FyKCk7CisgICAgICAg
IH0KKworICAgICAgICBGb28gX2ZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBGb28uRmFtaW5lOworICAgICAgICB9CisKKyAgICAgICAgRm9vIGZhbWluZSgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBfZmFtaW5lKCk7CisgICAgICAgIH0KKworICAgICAgICBG
b28gX3Blc3RpbGVuY2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLlBlc3Rp
bGVuY2U7CisgICAgICAgIH0KKworICAgICAgICBGb28gcGVzdGlsZW5jZSgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBfcGVzdGlsZW5jZSgpOworICAgICAgICB9CisKKyAgICAgICAg
Rm9vIF9kZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uRGVhdGg7Cisg
ICAgICAgIH0KKworICAgICAgICBGb28gZGVhdGgoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gX2RlYXRoKCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIF9lcXVhbHMoRm9vIGEs
IEZvbyBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBfbm90RXF1YWxzKEZvbyBhLCBGb28gYikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGEgIT0gYjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdGVzdFNp
bXBsZUVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9lcXVhbHMoRm9vLldh
ciwgRm9vLldhcik7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRlc3RBbm90aGVyRXF1YWwo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uUGVzdGlsZW5jZSwg
Rm9vLlBlc3RpbGVuY2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0Tm90RXF1YWwo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uRmFtaW5lLCBGb28u
RGVhdGgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0U2ltcGxlTm90RXF1YWwoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX25vdEVxdWFscyhGb28uV2FyLCBGb28uV2Fy
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdGVzdEFub3RoZXJOb3RFcXVhbCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfbm90RXF1YWxzKEZvby5QZXN0aWxlbmNlLCBGb28u
UGVzdGlsZW5jZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRlc3ROb3ROb3RFcXVhbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfbm90RXF1YWxzKEZvby5GYW1pbmUsIEZv
by5EZWF0aCk7CisgICAgICAgIH0KKworICAgICAgICB1aW50IF91aW50V2FyKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIHVpbnQoX3dhcigpKTsKKyAgICAgICAgfQorCisgICAgICAg
IHVpbnQgdWludFdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfdWludFdhcigp
OworICAgICAgICB9CisKKyAgICAgICAgdWludCBfdWludEZhbWluZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiB1aW50KF9mYW1pbmUoKSk7CisgICAgICAgIH0KKworICAgICAgICB1
aW50IHVpbnRGYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3VpbnRGYW1p
bmUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgX3VpbnRQZXN0aWxlbmNlKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIHVpbnQoX3Blc3RpbGVuY2UoKSk7CisgICAgICAgIH0K
KworICAgICAgICB1aW50IHVpbnRQZXN0aWxlbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIF91aW50UGVzdGlsZW5jZSgpOworICAgICAgICB9CisKKyAgICAgICAgdWludCBfdWlu
dERlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHVpbnQoX2RlYXRoKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgdWludCB1aW50RGVhdGgoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gX3VpbnREZWF0aCgpOworICAgICAgICB9CisKKyAgICAgICAgdWludCB3YXJW
YWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfd2FyKCkudmFsdWU7CisgICAg
ICAgIH0KKworICAgICAgICB1aW50IGZhbWluZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIF9mYW1pbmUoKS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgcGVz
dGlsZW5jZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9wZXN0aWxlbmNl
KCkudmFsdWU7CisgICAgICAgIH0KKworICAgICAgICB1aW50IGRlYXRoVmFsdWUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gX2RlYXRoKCkudmFsdWU7CisgICAgICAgIH0KKworICAg
ICAgICB1aW50IHdhclZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBGb28uV2FyLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgdWludCBmYW1pbmVWYWx1ZUxp
dGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkZhbWluZS52YWx1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHVpbnQgcGVzdGlsZW5jZVZhbHVlTGl0ZXJhbCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZS52YWx1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIHVpbnQgZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRm9vLkRlYXRoLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgRm9vIHVp
bnRXYXJCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKF91aW50
V2FyKCkpOworICAgICAgICB9CisKKyAgICAgICAgRm9vIHVpbnRGYW1pbmVCYWNrd2FyZHMoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKF91aW50RmFtaW5lKCkpOworICAgICAg
ICB9CisKKyAgICAgICAgRm9vIHVpbnRQZXN0aWxlbmNlQmFja3dhcmRzKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEZvbyhfdWludFBlc3RpbGVuY2UoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBGb28gdWludERlYXRoQmFja3dhcmRzKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEZvbyhfdWludERlYXRoKCkpOworICAgICAgICB9CisgICAgYDsKKyAgICAvL2NoZWNr
RW51bShwcm9ncmFtLCAid2FyIiwgW10pLCAwKTsKKyAgICAvL2NoZWNrRW51bShwcm9ncmFtLCAi
ZmFtaW5lIiwgW10pLCAxKTsKKyAgICAvL2NoZWNrRW51bShwcm9ncmFtLCAicGVzdGlsZW5jZSIs
IFtdKSwgMik7CisgICAgLy9jaGVja0VudW0ocHJvZ3JhbSwgImRlYXRoIiwgW10pLCAzKTsKKwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdFNp
bXBsZUVxdWFsIiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29s
RnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RBbm90aGVyRXF1YWwiLCBbXSksIHRydWUpOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdE5vdEVxdWFs
IiwgW10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHByb2dyYW0sICJ0ZXN0U2ltcGxlTm90RXF1YWwiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RBbm90aGVyTm90RXF1
YWwiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24ocHJvZ3JhbSwgInRlc3ROb3ROb3RFcXVhbCIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJ1aW50V2FyIiwgW10pLCAwKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgInVpbnRG
YW1pbmUiLCBbXSksIDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlv
bihwcm9ncmFtLCAidWludFBlc3RpbGVuY2UiLCBbXSksIDIpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAidWludERlYXRoIiwgW10pLCAzKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgIndhclZhbHVl
IiwgW10pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZhbWluZVZhbHVlIiwgW10pLCAxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2VWYWx1ZSIsIFtdKSwgMik7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0aFZhbHVl
IiwgW10pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJv
Z3JhbSwgIndhclZhbHVlTGl0ZXJhbCIsIFtdKSwgMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmVWYWx1ZUxpdGVyYWwiLCBbXSksIDEp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAicGVz
dGlsZW5jZVZhbHVlTGl0ZXJhbCIsIFtdKSwgMik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0aFZhbHVlTGl0ZXJhbCIsIFtdKSwgMyk7CisK
KyAgICAvL2NoZWNrRW51bShwcm9ncmFtLCAidWludFdhckJhY2t3YXJkcyIsIFtdKSwgMCk7Cisg
ICAgLy9jaGVja0VudW0ocHJvZ3JhbSwgInVpbnRGYW1pbmVCYWNrd2FyZHMiLCBbXSksIDEpOwor
ICAgIC8vY2hlY2tFbnVtKHByb2dyYW0sICJ1aW50UGVzdGlsZW5jZUJhY2t3YXJkcyIsIFtdKSwg
Mik7CisgICAgLy9jaGVja0VudW0ocHJvZ3JhbSwgInVpbnREZWF0aEJhY2t3YXJkcyIsIFtdKSwg
Myk7Cit9OworCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwvc2NyaXB0PgorPC9odG1sPgorCisK
SW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1tYXRyaXgtbWVtb3J5LWxheW91dC1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW1hdHJpeC1t
ZW1vcnktbGF5b3V0LWV4cGVjdGVkLnR4dAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRUZXN0cy93
ZWJncHUvd2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNSBAQAorUEFTUyAKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRy
dWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbWF0
cml4LW1lbW9yeS1sYXlvdXQuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUv
d2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQuaHRtbAkobm9uZXhpc3RlbnQpCisrKyBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtbWF0cml4LW1lbW9yeS1sYXlvdXQuaHRtbAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEzOSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4K
KzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhyZWFkcygxLCAxLCAxKV0K
K2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9hdDR4NFtdIGJ1ZmZlciA6IHJl
Z2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hUaHJlYWRJRCkgeworICAg
IGZsb2F0NHg0IHJlc3VsdDsKKyAgICByZXN1bHRbMF0gPSBmbG9hdDQoMSwgMiwgMywgNCk7Cisg
ICAgcmVzdWx0WzFdID0gZmxvYXQ0KDUsIDYsIDcsIDgpOworICAgIHJlc3VsdFsyXSA9IGZsb2F0
NCg5LCAxMCwgMTEsIDEyKTsKKyAgICByZXN1bHRbM10gPSBmbG9hdDQoMTMsIDE0LCAxNSwgMTYp
OworCisgICAgZmxvYXQ0eDQgbWF0ID0gYnVmZmVyWzBdOworCisgICAgaWYgKG1hdFswXVswXSA9
PSAwCisgICAgICAgICYmIG1hdFswXVsxXSA9PSAxCisgICAgICAgICYmIG1hdFswXVsyXSA9PSAy
CisgICAgICAgICYmIG1hdFswXVszXSA9PSAzCisKKyAgICAgICAgJiYgbWF0WzFdWzBdID09IDQK
KyAgICAgICAgJiYgbWF0WzFdWzFdID09IDUKKyAgICAgICAgJiYgbWF0WzFdWzJdID09IDYKKyAg
ICAgICAgJiYgbWF0WzFdWzNdID09IDcKKworICAgICAgICAmJiBtYXRbMl1bMF0gPT0gOAorICAg
ICAgICAmJiBtYXRbMl1bMV0gPT0gOQorICAgICAgICAmJiBtYXRbMl1bMl0gPT0gMTAKKyAgICAg
ICAgJiYgbWF0WzJdWzNdID09IDExCisKKyAgICAgICAgJiYgbWF0WzNdWzBdID09IDEyCisgICAg
ICAgICYmIG1hdFszXVsxXSA9PSAxMworICAgICAgICAmJiBtYXRbM11bMl0gPT0gMTQKKyAgICAg
ICAgJiYgbWF0WzNdWzNdID09IDE1KSB7CisgICAgICAgIGJ1ZmZlclswXSA9IHJlc3VsdDsKKyAg
ICB9Cit9CitgOworCithc3luYyBmdW5jdGlvbiBzdGFydChkZXZpY2UpIHsKKyAgICBjb25zdCBz
aGFkZXJNb2R1bGUgPSBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3Vy
Y2UsIGlzV0hMU0w6IHRydWV9KTsKKyAgICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBz
aGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBi
aW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2li
aWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdlLWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3Vw
TGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNj
cmlwdG9yKTsKKyAgICBjb25zdCBwaXBlbGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3Vw
TGF5b3V0czogW2JpbmRHcm91cExheW91dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0g
ZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisK
KyAgICBjb25zdCBjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5
b3V0OiBwaXBlbGluZUxheW91dH07CisgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNl
LmNyZWF0ZUNvbXB1dGVQaXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAg
IGNvbnN0IHNpemUgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiAxNjsKKworICAg
IGNvbnN0IGJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1B
UF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQ307CisgICAgY29uc3QgYnVmZmVy
ID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKKyAgICBjb25zdCBidWZm
ZXJBcnJheUJ1ZmZlciA9IGF3YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CisgICAgY29uc3Qg
YnVmZmVyRmxvYXQzMkFycmF5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7
CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzBdID0gMDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlb
MV0gPSA0OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVsyXSA9IDg7CisgICAgYnVmZmVyRmxvYXQz
MkFycmF5WzNdID0gMTI7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzRdID0gMTsKKyAgICBidWZm
ZXJGbG9hdDMyQXJyYXlbNV0gPSA1OworICAgIGJ1ZmZlckZsb2F0MzJBcnJheVs2XSA9IDk7Cisg
ICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0gMTM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5Wzhd
ID0gMjsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbOV0gPSA2OworICAgIGJ1ZmZlckZsb2F0MzJB
cnJheVsxMF0gPSAxMDsKKyAgICBidWZmZXJGbG9hdDMyQXJyYXlbMTFdID0gMTQ7CisgICAgYnVm
ZmVyRmxvYXQzMkFycmF5WzEyXSA9IDM7CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzEzXSA9IDc7
CisgICAgYnVmZmVyRmxvYXQzMkFycmF5WzE0XSA9IDExOworICAgIGJ1ZmZlckZsb2F0MzJBcnJh
eVsxNV0gPSAxNTsKKyAgICBidWZmZXIudW5tYXAoKTsKKworICAgIGNvbnN0IHJlc3VsdHNCdWZm
ZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BV
QnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAg
IGNvbnN0IHJlc3VsdHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJE
ZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRz
QnVmZmVyLCBzaXplfTsKKyAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAs
IHJlc291cmNlOiBidWZmZXJCaW5kaW5nfTsKKyAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9y
ID0ge2xheW91dDogYmluZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmdd
fTsKKyAgICBjb25zdCBiaW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91
cERlc2NyaXB0b3IpOworCisgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRl
Q29tbWFuZEVuY29kZXIoKTsgLy8ge30KKyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9C
dWZmZXIoYnVmZmVyLCAwLCByZXN1bHRzQnVmZmVyLCAwLCBzaXplKTsKKyAgICBjb25zdCBjb21w
dXRlUGFzc0VuY29kZXIgPSBjb21tYW5kRW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CisgICAg
Y29tcHV0ZVBhc3NFbmNvZGVyLnNldFBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CisgICAgY29t
cHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApOworICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5kaXNwYXRjaCgyLCAxLCAxKTsKKyAgICBjb21wdXRlUGFzc0VuY29kZXIuZW5k
UGFzcygpOworICAgIGNvbnN0IGNvbW1hbmRCdWZmZXIgPSBjb21tYW5kRW5jb2Rlci5maW5pc2go
KTsKKyAgICBkZXZpY2UuZ2V0UXVldWUoKS5zdWJtaXQoW2NvbW1hbmRCdWZmZXJdKTsKKworICAg
IGNvbnN0IHJlc3VsdHNBcnJheUJ1ZmZlciA9IGF3YWl0IHJlc3VsdHNCdWZmZXIubWFwUmVhZEFz
eW5jKCk7CisgICAgY29uc3QgcmVzdWx0c0Zsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXko
cmVzdWx0c0FycmF5QnVmZmVyKTsKKyAgICBpZiAocmVzdWx0c0Zsb2F0MzJBcnJheVswXSA9PT0g
MQorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzFdID09PSA1CisgICAgICAgICYmIHJl
c3VsdHNGbG9hdDMyQXJyYXlbMl0gPT09IDkKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJh
eVszXSA9PT0gMTMKKworICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzRdID09PSAyCisg
ICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbNV0gPT09IDYKKyAgICAgICAgJiYgcmVzdWx0
c0Zsb2F0MzJBcnJheVs2XSA9PT0gMTAKKyAgICAgICAgJiYgcmVzdWx0c0Zsb2F0MzJBcnJheVs3
XSA9PT0gMTQKKworICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzhdID09PSAzCisgICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbOV0gPT09IDcKKyAgICAgICAgJiYgcmVzdWx0c0Zs
b2F0MzJBcnJheVsxMF0gPT09IDExCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTFd
ID09PSAxNQorCisgICAgICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTJdID09PSA0CisgICAg
ICAgICYmIHJlc3VsdHNGbG9hdDMyQXJyYXlbMTNdID09PSA4CisgICAgICAgICYmIHJlc3VsdHNG
bG9hdDMyQXJyYXlbMTRdID09PSAxMgorICAgICAgICAmJiByZXN1bHRzRmxvYXQzMkFycmF5WzE1
XSA9PT0gMTYpCisgICAgICAgIHRlc3RQYXNzZWQoIiIpOworICAgIGVsc2UKKyAgICAgICAgdGVz
dEZhaWxlZCgiIik7CisgICAgcmVzdWx0c0J1ZmZlci51bm1hcCgpOworfQord2luZG93LmpzVGVz
dElzQXN5bmMgPSB0cnVlOworZ2V0QmFzaWNEZXZpY2UoKS50aGVuKGZ1bmN0aW9uKGRldmljZSkg
eworICAgIHN0YXJ0KGRldmljZSkudGhlbihmdW5jdGlvbigpIHsKKyAgICAgICAgZmluaXNoSlNU
ZXN0KCk7CisgICAgfSwgZnVuY3Rpb24oKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIiIpOworICAg
ICAgICBmaW5pc2hKU1Rlc3QoKTsKKyAgICB9KTsKK30sIGZ1bmN0aW9uKCkgeworICAgIHRlc3RQ
YXNzZWQoIiIpOworICAgIGZpbmlzaEpTVGVzdCgpOworfSk7Cis8L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwv
aHRtbD4KSW5kZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXN0LWhhcm5lc3MtdGVzdC5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC10ZXN0LWhhcm5lc3Mt
dGVzdC5odG1sCShyZXZpc2lvbiAyNDc0MTApCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
dGVzdC1oYXJuZXNzLXRlc3QuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNDIsOCArNDIsOSBAQCBj
b25zdCBhcnJheUFyZ01ha2VycyA9IHsKICAgICAiZmxvYXQ0eDQiOiBtYWtlRmxvYXQ0eDQKIH07
CiAKLWNvbnN0IGZsb2F0NHg0ZXhwZWN0ZWQgPSBbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywgOCwg
OSwgMTAsIDExLCAxMiwgMTMsIDE0LCAxNV07Ci1jb25zdCBmbG9hdDRleHBlY3RlZCA9IGZsb2F0
NHg0ZXhwZWN0ZWQuc2xpY2UoMCwgNCk7Citjb25zdCBmbG9hdDR4NGV4cGVjdGVkID0gWzAsIDQs
IDgsIDEyLCAxLCA1LCA5LCAxMywgMiwgNiwgMTAsIDE0LCAzLCA3LCAxMSwgMTVdOworY29uc3Qg
ZmxvYXQ0eDRDb2x1bW5FeHBlY3RlZCA9IFswLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAx
MCwgMTEsIDEyLCAxMywgMTQsIDE1XTsKK2NvbnN0IGZsb2F0NGV4cGVjdGVkID0gWzAsIDEsIDIs
IDNdOwogCiBsZXQgd2hsc2xUZXN0cyA9IHt9OwogCkBAIC0xNzIsNyArMTczLDcgQEAgd2hsc2xU
ZXN0cy5mbG9hdDR4NHRlc3RzID0gKCkgPT4gewogICAgICAgICBhcmdbaV0gPSBpOwogICAgICAg
ICBtdWx0aXBsZTR4NGFyZ3MucHVzaChhcmcpOwogICAgIH0KLSAgICBjaGVja0FycmF5cygiZmxv
YXQ0eDQiLCAicmV0dXJuIGluMCArIGluMSArIGluMiArIGluMyArIGluNCArIGluNSArIGluNiAr
IGluNyArIGluOCArIGluOSArIGluMTAgKyBpbjExICsgaW4xMiArIGluMTMgKyBpbjE0ICsgaW4x
NTsiLCBtdWx0aXBsZTR4NGFyZ3MsIGZsb2F0NHg0ZXhwZWN0ZWQpOworICAgIGNoZWNrQXJyYXlz
KCJmbG9hdDR4NCIsICJyZXR1cm4gaW4wICsgaW4xICsgaW4yICsgaW4zICsgaW40ICsgaW41ICsg
aW42ICsgaW43ICsgaW44ICsgaW45ICsgaW4xMCArIGluMTEgKyBpbjEyICsgaW4xMyArIGluMTQg
KyBpbjE1OyIsIG11bHRpcGxlNHg0YXJncywgZmxvYXQ0eDRDb2x1bW5FeHBlY3RlZCk7CiAgICAg
Y2hlY2tBcnJheXMoImZsb2F0NHg0IiwgInJldHVybiBpbjBbMF07IiwgW1tmbG9hdDR4NGV4cGVj
dGVkXV0sIGZsb2F0NHg0ZXhwZWN0ZWQpOwogfTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374287</attachid>
            <date>2019-07-17 04:22:44 -0700</date>
            <delta_ts>2019-07-17 04:29:27 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>43551</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzUxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE5LTA3LTE3ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTWFrZSBlbnVtcyB3
b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk2
MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIG1ha2VzIGVudW1zIHdvcmsuIFRoZXJlIHdlcmUgYSBjb3VwbGUgY2hhbmdlcyBuZWVk
ZWQgdG8gZG8gdGhpcyB3b3JrOgorICAgICAgICAxLiBJbiB0aGUgbWV0YWwgY29kZWdlbiwgd2Ug
d2VyZSBlbWl0dGluZyBjb2RlIGxpa2UgIkVudW1UeXBlLkVudW1WYWx1ZSIKKyAgICAgICAgaW5z
dGVhZCBvZiAiRW51bVR5cGU6OkVudW1WYWx1ZSIuCisgICAgICAgIAorICAgICAgICAyLiBJbnNp
ZGUgdGhlIGVudW1lcmF0aW9uIGRlY2xhcmF0aW9uIEFTVCBub2RlLCB3ZSB0cmFjayBlbnVtcyBp
biBhIEhhc2hNYXAKKyAgICAgICAgYmVjYXVzZSB3ZSBuZWVkIHRvIGxvb2sgdXAgbmFtZXMgb2Yg
ZW51bSB2YWx1ZXMgaW4gdGhhdCBtYXAgaW4gcGFydHMgb2YgdGhlCisgICAgICAgIGNvbXBpbGVy
LiBIb3dldmVyLCBIYXNoTWFwIGlzIG5vdCBvcmRlcmVkIGJ1dCB3ZSB3ZXJlIHJlbHlpbmcgb24g
dGhlIGl0ZXJhdGlvbgorICAgICAgICBvcmRlciBvZiBpdCB0byBnZW5lcmF0ZSB0aGUgZGVmYXVs
dCB2YWx1ZXMgb2YgZW51bXMuIEUuZywgaW46ICJlbnVtIHsgRm9vID0gMTAsIEJhciB9IiwKKyAg
ICAgICAgQmFyIHNob3VsZCBiZSAxMS4gSG93ZXZlciwgdGhlcmUgd2FzIG5vIGd1YXJhbnRlZSB0
aGF0IHdlIGl0ZXJhdGVkIG92ZXIgQmFyCisgICAgICAgIGFmdGVyIEZvby4gSW5zdGVhZCwgd2Ug
anVzdCB0cmFjayB0aGUgZGVmYXVsdCB2YWx1ZXMgYXMgd2UgcGFyc2UgYW4gZW51bQorICAgICAg
ICBpbnNpZGUgb2YgdGhlIHBhcnNlci4gVGhpcyBhbGxvd3MgdXMgdG8gY29udGludWUgdG8ga2Vl
cCB1c2luZyBIYXNoTWFwIHdpdGhvdXQKKyAgICAgICAgYWxzbyBhZGRpbmcgYW4gYXV4aWxpYXJ5
IGRhdGEgc3RydWN0dXJlIChvciB1c2luZyBtb3JlIG1lbW9yeSBpbiBzb21lIHdheSkgdG8KKyAg
ICAgICAgdHJhY2sgdGhlIG9yZGVyIG9mIHRoZSBlbnVtIGVsZW1lbnRzLgorICAgICAgICAKKyAg
ICAgICAgSSd2ZSBhbHNvIGZpbGVkIGEgcGF0Y2ggdG8gZG8gZm9sbG93LXVwIHdvcmsgb24gaW1w
bGVtZW50aW5nIHRoZSBjb3JyZWN0CisgICAgICAgIG9wZXJhdGlvbmFsIGJlaGF2aW9yIHdoZW4g
Y29uc3RydWN0aW5nIGFuIGVudW0gZnJvbSBpdHMgdW5kZXJseWluZyB0eXBlIHdoZW4KKyAgICAg
ICAgdGhlIHVuZGVybHlpbmcgdmFsdWUgZG9lcyBub3QgbWF0Y2ggYW55IGVudW0gdmFsdWU6Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk4NTMKKwor
ICAgICAgICBUZXN0czogd2ViZ3B1L3dobHNsLWVudW1zLTIuaHRtbAorICAgICAgICAgICAgICAg
d2ViZ3B1L3dobHNsLWVudW1zLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpFbnVtZXJhdGlvbk1lbWJlcjo6RW51bWVyYXRpb25NZW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6RW51bWVyYXRpb25NZW1iZXI6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OkVudW1lcmF0aW9uTWVtYmVyOjpzZXRWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OmNvbnN0YW50RXhwcmVzc2lvblN0cmluZyk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9u
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNURHVtcGVyOjp2aXNpdCk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VFbnVt
ZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFy
c2VFbnVtZXJhdGlvbk1lbWJlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlZpc2l0b3I6OnZpc2l0KToKKwogMjAxOS0w
Ny0xNyAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEFkZCByZWZlcnJl
cnBvbGljeSBhdHRyaWJ1dGUgc3VwcG9ydCBmb3IgPHNjcmlwdD4gZWxlbWVudHMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAJKHJldmlzaW9uIDI0NzQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDExICsx
MzQsNyBAQCB2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlCiAKIHZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJl
cikKIHsKLSAgICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCkpOwotICAgIGlm
IChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKSB7Ci0gICAgICAgIG1fb3V0LnByaW50KCIgPSAi
KTsKLSAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOwotICAgIH0KKyAg
ICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCksICIgPSAiLCBlbnVtZXJhdGlv
bk1lbWJlci52YWx1ZSgpKTsKIH0KIAogdm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlzaW9u
IDI0NzQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNSwxNyArNjI1LDYgQEAgc3RhdGljIE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAgIH0pKTsKIH0KIAotc3RhdGljIE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5n
VHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKLXsKLSAgICBy
ZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICBpZiAobWF0Y2hlcyhyZXNvbHZpbmdUeXBlLCBu
YW1lZFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUtPmNsb25lKCk7Ci0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4gewotICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBl
LCByZXNvbHZpbmdUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKLSAgICB9KSk7Ci19Ci0KIHN0YXRp
YyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChSZXNvbHZpbmdU
eXBlJiByZXNvbHZpbmdUeXBlKQogewogICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5
cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewpAQCAtNjQ5LDYg
KzYzOCw3IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHkKIAogdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25E
ZWZpbml0aW9uKQogeworICAgIGJvb2wgaXNTaWduZWQ7CiAgICAgYXV0byogYmFzZVR5cGUgPSAo
WyZdKCkgLT4gQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHsKICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvJiBi
YXNlVHlwZSA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CkBAIC02
NjAsNiArNjUwLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaQog
ICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVj
bGFyYXRpb24uaXNJbnQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBp
c1NpZ25lZCA9IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc1NpZ25lZCgpOwogICAgICAgICByZXR1
cm4gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKICAgICB9KSgpOwogICAgIGlmICghYmFzZVR5cGUp
IHsKQEAgLTY2OSw3MSArNjYwLDI2IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbkRlZmkKIAogICAgIGF1dG8gZW51bWVyYXRpb25NZW1iZXJzID0gZW51bWVyYXRpb25EZWZp
bml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpOwogCi0gICAgYXV0byBtYXRjaEFuZENvbW1pdE1l
bWJlciA9IFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBtZW1iZXIpIC0+IGJvb2wgewotICAg
ICAgICByZXR1cm4gbWVtYmVyLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFT
VDo6RXhwcmVzc2lvbiYgdmFsdWUpIC0+IGJvb2wgewotICAgICAgICAgICAgYXV0byB2YWx1ZUlu
Zm8gPSByZWN1cnNlQW5kR2V0SW5mbyh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlSW5m
bykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQodmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCAq
YmFzZVR5cGUpKTsKLSAgICAgICAgfSkpOwotICAgIH07Ci0KICAgICBmb3IgKGF1dG8mIG1lbWJl
ciA6IGVudW1lcmF0aW9uTWVtYmVycykgewotICAgICAgICBpZiAoIW1lbWJlci5nZXQoKS52YWx1
ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1p
dE1lbWJlcihtZW1iZXIpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50NjRfdCBuZXh0VmFsdWUgPSAwOwot
ICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVyYXRpb25NZW1iZXJzKSB7Ci0gICAgICAgIGlm
IChtZW1iZXIuZ2V0KCkudmFsdWUoKSkgewotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IG1lbWJl
ci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJM
aXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgLT4gaW50NjRfdCB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7Ci0gICAgICAgICAgICB9
LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFs
KSAtPiBpbnQ2NF90IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOwotICAgICAgICAgICAgfSwgWyZdKGF1dG8mKSAt
PiBpbnQ2NF90IHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgIG5leHRW
YWx1ZSA9IGJhc2VUeXBlLT5zdWNjZXNzb3IoKSh2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAobmV4dFZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChuZXh0VmFsdWUgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBtZW1iZXIuZ2V0KCkuc2V0
VmFsdWUoQVNUOjpDb25zdGFudEV4cHJlc3Npb24oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
KG1lbWJlci5nZXQoKS5jb2RlTG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5leHRW
YWx1ZSkpKSk7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBtZW1iZXIuZ2V0KCkudmFsdWUoKTsK
KyAgICAgICAgaWYgKGlzU2lnbmVkKSB7CisgICAgICAgICAgICBBU1NFUlQobWVtYmVyLmdldCgp
LnZhbHVlKCkgPj0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQzMl90Pjo6bWluKCkpOworICAgICAg
ICAgICAgaWYgKHN0YXRpY19jYXN0PGludDY0X3Q+KHN0YXRpY19jYXN0PGludDMyX3Q+KHZhbHVl
KSkgIT0gdmFsdWUpIHsKKyAgICAgICAgICAgICAgICBzZXRFcnJvcigpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEFTU0VSVChuZXh0VmFsdWUg
Pj0gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptaW4oKSk7Ci0gICAgICAgICAgICBtZW1iZXIu
Z2V0KCkuc2V0VmFsdWUoQVNUOjpDb25zdGFudEV4cHJlc3Npb24oQVNUOjpJbnRlZ2VyTGl0ZXJh
bChtZW1iZXIuZ2V0KCkuY29kZUxvY2F0aW9uKCksIHN0YXRpY19jYXN0PGludD4obmV4dFZhbHVl
KSkpKTsKLQotICAgICAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1pdE1lbWJlcihtZW1iZXIpKSB7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAodmFsdWUgPCAwIHx8IHZhbHVlID4g
c3RkOjpudW1lcmljX2xpbWl0czx1aW50MzJfdD46Om1heCgpKSB7CiAgICAgICAgICAgICAgICAg
c2V0RXJyb3IoKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIG5leHRWYWx1ZSA9IGJhc2VUeXBlLT5zdWNjZXNzb3IoKShuZXh0VmFsdWUpOwog
ICAgICAgICB9CiAgICAgfQogCi0gICAgYXV0byBnZXRWYWx1ZSA9IFsmXShBU1Q6OkVudW1lcmF0
aW9uTWVtYmVyJiBtZW1iZXIpIC0+IGludDY0X3QgewotICAgICAgICBBU1NFUlQobWVtYmVyLnZh
bHVlKCkpOwotICAgICAgICBhdXRvIHZhbHVlID0gbWVtYmVyLnZhbHVlKCktPnZpc2l0KFdURjo6
bWFrZVZpc2l0b3IoWyZdKEFTVDo6SW50ZWdlckxpdGVyYWwmIGludGVnZXJMaXRlcmFsKSAtPiBp
bnQ2NF90IHsKLSAgICAgICAgICAgIHJldHVybiBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOwotICAg
ICAgICB9LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJM
aXRlcmFsKSAtPiBpbnQ2NF90IHsKLSAgICAgICAgICAgIHJldHVybiB1bnNpZ25lZEludGVnZXJM
aXRlcmFsLnZhbHVlKCk7Ci0gICAgICAgIH0sIFsmXShhdXRvJikgLT4gaW50NjRfdCB7Ci0gICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAg
ICAgICB9KSk7Ci0gICAgICAgIHJldHVybiB2YWx1ZTsKLSAgICB9OwotCiAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBlbnVtZXJhdGlvbk1lbWJlcnMuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAg
YXV0byB2YWx1ZSA9IGdldFZhbHVlKGVudW1lcmF0aW9uTWVtYmVyc1tpXS5nZXQoKSk7CisgICAg
ICAgIGF1dG8gdmFsdWUgPSBlbnVtZXJhdGlvbk1lbWJlcnNbaV0uZ2V0KCkudmFsdWUoKTsKICAg
ICAgICAgZm9yIChzaXplX3QgaiA9IGkgKyAxOyBqIDwgZW51bWVyYXRpb25NZW1iZXJzLnNpemUo
KTsgKytqKSB7Ci0gICAgICAgICAgICBhdXRvIG90aGVyVmFsdWUgPSBnZXRWYWx1ZShlbnVtZXJh
dGlvbk1lbWJlcnNbal0uZ2V0KCkpOworICAgICAgICAgICAgYXV0byBvdGhlclZhbHVlID0gZW51
bWVyYXRpb25NZW1iZXJzW2pdLmdldCgpLnZhbHVlKCk7CiAgICAgICAgICAgICBpZiAodmFsdWUg
PT0gb3RoZXJWYWx1ZSkgewogICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtNzQzLDcgKzY4OSw3IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNU
OjpFbnVtZXJhdGlvbkRlZmkKIAogICAgIGJvb2wgZm91bmRaZXJvID0gZmFsc2U7CiAgICAgZm9y
IChhdXRvJiBtZW1iZXIgOiBlbnVtZXJhdGlvbk1lbWJlcnMpIHsKLSAgICAgICAgaWYgKCFnZXRW
YWx1ZShtZW1iZXIuZ2V0KCkpKSB7CisgICAgICAgIGlmICghbWVtYmVyLmdldCgpLnZhbHVlKCkp
IHsKICAgICAgICAgICAgIGZvdW5kWmVybyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQ
YXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dI
TFNML1dITFNMUGFyc2VyLmNwcAkocmV2aXNpb24gMjQ3NDEwKQorKysgU291cmNlL1dlYkNvcmUv
TW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
MjYsNyArODI2LDkgQEAgYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25EZWZpbml0aW9uKAog
CiAgICAgQ09OU1VNRV9UWVBFKGxlZnRDdXJseUJyYWNrZXQsIExlZnRDdXJseUJyYWNrZXQpOwog
Ci0gICAgUEFSU0UoZmlyc3RFbnVtZXJhdGlvbk1lbWJlciwgRW51bWVyYXRpb25NZW1iZXIpOwor
ICAgIGludDY0X3QgbmV4dFZhbHVlID0gMDsKKyAgICBQQVJTRShmaXJzdEVudW1lcmF0aW9uTWVt
YmVyLCBFbnVtZXJhdGlvbk1lbWJlciwgbmV4dFZhbHVlKTsKKyAgICBuZXh0VmFsdWUgPSBmaXJz
dEVudW1lcmF0aW9uTWVtYmVyLT52YWx1ZSgpICsgMTsKIAogICAgIEFTVDo6RW51bWVyYXRpb25E
ZWZpbml0aW9uIHJlc3VsdCh7IH0sIG5hbWUtPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmco
KSwgV1RGTW92ZSgqdHlwZSkpOwogICAgIGF1dG8gc3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92
ZSgqZmlyc3RFbnVtZXJhdGlvbk1lbWJlcikpOwpAQCAtODM0LDcgKzgzNiw4IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigKICAgICAgICAgcmV0dXJuIGZhaWwoIkNh
bm5vdCBhZGQgZW51bWVyYXRpb24gbWVtYmVyIl9zdHIpOwogCiAgICAgd2hpbGUgKHRyeVR5cGUo
VG9rZW46OlR5cGU6OkNvbW1hKSkgewotICAgICAgICBQQVJTRShtZW1iZXIsIEVudW1lcmF0aW9u
TWVtYmVyKTsKKyAgICAgICAgUEFSU0UobWVtYmVyLCBFbnVtZXJhdGlvbk1lbWJlciwgbmV4dFZh
bHVlKTsKKyAgICAgICAgbmV4dFZhbHVlID0gbWVtYmVyLT52YWx1ZSgpICsgMTsKICAgICAgICAg
c3VjY2VzcyA9IHJlc3VsdC5hZGQoV1RGTW92ZSgqbWVtYmVyKSk7CiAgICAgICAgIGlmICghc3Vj
Y2VzcykKICAgICAgICAgICAgIHJldHVybiBmYWlsKCJDYW5ub3QgYWRkIGVudW1lcmF0aW9uIG1l
bWJlciJfc3RyKTsKQEAgLTg0NiwxNiArODQ5LDMwIEBAIGF1dG8gUGFyc2VyOjpwYXJzZUVudW1l
cmF0aW9uRGVmaW5pdGlvbigKICAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCi1hdXRv
IFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbk1lbWJlcigpIC0+IEV4cGVjdGVkPEFTVDo6RW51bWVy
YXRpb25NZW1iZXIsIEVycm9yPgorYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRpb25NZW1iZXIo
aW50NjRfdCBkZWZhbHRWYWx1ZSkgLT4gRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbk1lbWJlciwg
RXJyb3I+CiB7CiAgICAgQ09OU1VNRV9UWVBFKGlkZW50aWZpZXIsIElkZW50aWZpZXIpOwogICAg
IGF1dG8gbmFtZSA9IGlkZW50aWZpZXItPnN0cmluZ1ZpZXcobV9sZXhlcikudG9TdHJpbmcoKTsK
IAogICAgIGlmICh0cnlUeXBlKFRva2VuOjpUeXBlOjpFcXVhbHNTaWduKSkgewogICAgICAgICBQ
QVJTRShjb25zdGFudEV4cHJlc3Npb24sIENvbnN0YW50RXhwcmVzc2lvbik7Ci0gICAgICAgIHJl
dHVybiBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKCppZGVudGlmaWVyLCBXVEZNb3ZlKG5hbWUpLCBX
VEZNb3ZlKCpjb25zdGFudEV4cHJlc3Npb24pKTsKKworICAgICAgICBPcHRpb25hbDxpbnQ2NF90
PiB2YWx1ZTsKKyAgICAgICAgY29uc3RhbnRFeHByZXNzaW9uLT52aXNpdChXVEY6Om1ha2VWaXNp
dG9yKFsmXShBU1Q6OkludGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAg
ICAgdmFsdWUgPSBpbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOworICAgICAgICB9LCBbJl0oQVNUOjpV
bnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFsKSB7CisgICAgICAg
ICAgICB2YWx1ZSA9IHVuc2lnbmVkSW50ZWdlckxpdGVyYWwudmFsdWUoKTsKKyAgICAgICAgfSwg
WyZdKEFTVDo6RmxvYXRMaXRlcmFsJikgeworICAgICAgICB9LCBbJl0oQVNUOjpOdWxsTGl0ZXJh
bCYpIHsKKyAgICAgICAgfSwgWyZdKEFTVDo6Qm9vbGVhbkxpdGVyYWwmKSB7CisgICAgICAgIH0s
IFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYpIHsKKyAgICAgICAgfSkpOworCisg
ICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gVW5leHBlY3RlZDxFcnJvcj4o
ImVudW0gaW5pdGlhbGl6YXRpb24gdmFsdWVzIGNhbiBvbmx5IGJlIGFuIGludCBvciB1aW50IGNv
bnN0YW50LiIpOworICAgICAgICByZXR1cm4gQVNUOjpFbnVtZXJhdGlvbk1lbWJlcigqaWRlbnRp
ZmllciwgV1RGTW92ZShuYW1lKSwgKnZhbHVlKTsKICAgICB9Ci0gICAgcmV0dXJuIEFTVDo6RW51
bWVyYXRpb25NZW1iZXIoKmlkZW50aWZpZXIsIFdURk1vdmUobmFtZSkpOworICAgIHJldHVybiBB
U1Q6OkVudW1lcmF0aW9uTWVtYmVyKCppZGVudGlmaWVyLCBXVEZNb3ZlKG5hbWUpLCBkZWZhbHRW
YWx1ZSk7CiB9CiAKIGF1dG8gUGFyc2VyOjpwYXJzZU5hdGl2ZVR5cGVEZWNsYXJhdGlvbigpIC0+
IEV4cGVjdGVkPEFTVDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJvcj4KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xQYXJzZXIuaAkocmV2
aXNpb24gMjQ3NDEwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw3IEBAIHByaXZhdGU6CiAg
ICAgRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVFbGVtZW50LCBFcnJvcj4gcGFyc2VTdHJ1Y3R1cmVF
bGVtZW50KCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpTdHJ1Y3R1cmVEZWZpbml0aW9uLCBFcnJvcj4g
cGFyc2VTdHJ1Y3R1cmVEZWZpbml0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlv
bkRlZmluaXRpb24sIEVycm9yPiBwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigpOwotICAgIEV4
cGVjdGVkPEFTVDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9yPiBwYXJzZUVudW1lcmF0aW9uTWVt
YmVyKCk7CisgICAgRXhwZWN0ZWQ8QVNUOjpFbnVtZXJhdGlvbk1lbWJlciwgRXJyb3I+IHBhcnNl
RW51bWVyYXRpb25NZW1iZXIoaW50NjRfdCBkZWZhdWx0VmFsdWUpOwogICAgIEV4cGVjdGVkPEFT
VDo6TmF0aXZlVHlwZURlY2xhcmF0aW9uLCBFcnJvcj4gcGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRp
b24oKTsKICAgICBFeHBlY3RlZDxBU1Q6Ok51bVRocmVhZHNGdW5jdGlvbkF0dHJpYnV0ZSwgRXJy
b3I+IHBhcnNlTnVtVGhyZWFkc0Z1bmN0aW9uQXR0cmlidXRlKCk7CiAgICAgRXhwZWN0ZWQ8QVNU
OjpBdHRyaWJ1dGVCbG9jaywgRXJyb3I+IHBhcnNlQXR0cmlidXRlQmxvY2soKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xWaXNpdG9y
LmNwcAkocmV2aXNpb24gMjQ3NDEwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUv
V0hMU0wvV0hMU0xWaXNpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQzLDEwICsxNDMsOCBA
QCB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6U3RydWN0dXJlRWxlbWVuCiAgICAgICAgIGNoZWNr
RXJyb3JBbmRWaXNpdCgqc3RydWN0dXJlRWxlbWVudC5zZW1hbnRpYygpKTsKIH0KIAotdm9pZCBW
aXNpdG9yOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJlcikK
K3ZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYpCiB7Ci0gICAgaWYg
KGVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpCi0gICAgICAgIGNoZWNrRXJyb3JBbmRWaXNpdCgq
ZW51bWVyYXRpb25NZW1iZXIudmFsdWUoKSk7CiB9CiAKIHZvaWQgVmlzaXRvcjo6dmlzaXQoQVNU
OjpGdW5jdGlvbkRlY2xhcmF0aW9uJiBmdW5jdGlvbkRlY2xhcmF0aW9uKQpJbmRleDogU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1Qv
V0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCShyZXZpc2lvbiAyNDc0MTApCisrKyBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9BU1QvV0hMU0xFbnVtZXJhdGlvbk1lbWJlci5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMCArNDEsMTAgQEAgbmFtZXNwYWNlIEFTVCB7CiAKIGNsYXNz
IEVudW1lcmF0aW9uTWVtYmVyIHsKIHB1YmxpYzoKLSAgICBFbnVtZXJhdGlvbk1lbWJlcihDb2Rl
TG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIE9wdGlvbmFsPENvbnN0YW50RXhwcmVz
c2lvbj4mJiB2YWx1ZSA9IFdURjo6bnVsbG9wdCkKKyAgICBFbnVtZXJhdGlvbk1lbWJlcihDb2Rl
TG9jYXRpb24gbG9jYXRpb24sIFN0cmluZyYmIG5hbWUsIGludDY0X3QgdmFsdWUpCiAgICAgICAg
IDogbV9jb2RlTG9jYXRpb24obG9jYXRpb24pCiAgICAgICAgICwgbV9uYW1lKFdURk1vdmUobmFt
ZSkpCi0gICAgICAgICwgbV92YWx1ZShXVEZNb3ZlKHZhbHVlKSkKKyAgICAgICAgLCBtX3ZhbHVl
KHZhbHVlKQogICAgIHsKICAgICB9CiAKQEAgLTU1LDE4ICs1NSwxMiBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCBDb2RlTG9jYXRpb24mIGNvZGVMb2NhdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZUxvY2F0aW9uOyB9CiAgICAgU3RyaW5nIG5hbWUoKSB7IHJldHVybiBtX25hbWU7IH0KLSAgICBP
cHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+JiB2YWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWU7IH0K
LQotICAgIHZvaWQgc2V0VmFsdWUoQ29uc3RhbnRFeHByZXNzaW9uJiYgdmFsdWUpCi0gICAgewot
ICAgICAgICBBU1NFUlQoIW1fdmFsdWUpOwotICAgICAgICBtX3ZhbHVlID0gV1RGTW92ZSh2YWx1
ZSk7Ci0gICAgfQorICAgIGludDY0X3QgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9CiAKIHBy
aXZhdGU6CiAgICAgQ29kZUxvY2F0aW9uIG1fY29kZUxvY2F0aW9uOwogICAgIFN0cmluZyBtX25h
bWU7Ci0gICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNzaW9uPiBtX3ZhbHVlOworICAgIGludDY0
X3QgbV92YWx1ZTsKIH07CiAKIHVzaW5nIEVudW1lcmF0aW9uTWVtYmVycyA9IFZlY3RvcjxFbnVt
ZXJhdGlvbk1lbWJlcj47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEZ1bmN0aW9uV3JpdGVyLmNwcAko
cmV2aXNpb24gMjQ3NDEwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wv
TWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4MCw3ICs0
ODAsNyBAQCB2b2lkIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6dmlzaXQoQVNUCiAgICAgQVNT
RVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7CiAg
ICAgYXV0byB2YXJpYWJsZU5hbWUgPSBnZW5lcmF0ZU5leHRWYXJpYWJsZU5hbWUoKTsKICAgICBh
dXRvIG1hbmdsZWRUeXBlTmFtZSA9IG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZShlbnVt
ZXJhdGlvbk1lbWJlckxpdGVyYWwucmVzb2x2ZWRUeXBlKCkpOwotICAgIG1fc3RyaW5nQnVpbGRl
ci5hcHBlbmQobWFrZVN0cmluZyhtYW5nbGVkVHlwZU5hbWUsICcgJywgdmFyaWFibGVOYW1lLCAi
ID0gIiwgbWFuZ2xlZFR5cGVOYW1lLCAnLicsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yRW51
bWVyYXRpb25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbk1lbWJl
cigpKSwgIjtcbiIpKTsKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFu
Z2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1hbmdsZWRUeXBlTmFtZSwg
Ijo6IiwgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcigqZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVtYmVyKCkpLCAiO1xuIikpOwogICAgIGFw
cGVuZFJpZ2h0VmFsdWUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLCB2YXJpYWJsZU5hbWUpOwog
fQogCkBAIC03MDUsNyArNzA1LDcgQEAgU3RyaW5nIEZ1bmN0aW9uRGVmaW5pdGlvbldyaXRlcjo6
Y29uc3RhbgogICAgIH0sIFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCYgZW51bWVy
YXRpb25NZW1iZXJMaXRlcmFsKSAtPiBTdHJpbmcgewogICAgICAgICBBU1NFUlQoZW51bWVyYXRp
b25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKTsKICAgICAgICAgQVNTRVJU
KGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSk7Ci0gICAg
ICAgIHJldHVybiBtYWtlU3RyaW5nKG1fdHlwZU5hbWVyLm1hbmdsZWROYW1lRm9yVHlwZSgqZW51
bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uRGVmaW5pdGlvbigpKSwgJy4nLCBtX3R5
cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKCplbnVtZXJhdGlvbk1lbWJl
ckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSkpOworICAgICAgICByZXR1cm4gbWFrZVN0cmlu
ZyhtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJh
bC5lbnVtZXJhdGlvbkRlZmluaXRpb24oKSksICI6OiIsIG1fdHlwZU5hbWVyLm1hbmdsZWROYW1l
Rm9yRW51bWVyYXRpb25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJhdGlv
bk1lbWJlcigpKSk7CiAgICAgfSkpOwogfQogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3Bw
CShyZXZpc2lvbiAyNDc0MTApCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExT
TC9NZXRhbC9XSExTTFR5cGVOYW1lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMyw3ICs0MTMs
NyBAQCB2b2lkIFR5cGVOYW1lcjo6ZW1pdE5hbWVkVHlwZURlZmluaXRpb24oCiAgICAgICAgIGF1
dG8mIGJhc2VUeXBlID0gZW51bWVyYXRpb25EZWZpbml0aW9uLnR5cGUoKS51bmlmeU5vZGUoKTsK
ICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiZW51bSBjbGFzcyAiLCBt
YW5nbGVkTmFtZUZvclR5cGUoZW51bWVyYXRpb25EZWZpbml0aW9uKSwgIiA6ICIsIG1hbmdsZWRO
YW1lRm9yVHlwZShkb3duY2FzdDxBU1Q6Ok5hbWVkVHlwZT4oYmFzZVR5cGUpKSwgIiB7XG4iKSk7
CiAgICAgICAgIGZvciAoYXV0byYgZW51bWVyYXRpb25NZW1iZXIgOiBlbnVtZXJhdGlvbkRlZmlu
aXRpb24uZW51bWVyYXRpb25NZW1iZXJzKCkpCi0gICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihl
bnVtZXJhdGlvbk1lbWJlciksICIsXG4iKSk7CisgICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFw
cGVuZChtYWtlU3RyaW5nKCIgICAgIiwgbWFuZ2xlZE5hbWVGb3JFbnVtZXJhdGlvbk1lbWJlcihl
bnVtZXJhdGlvbk1lbWJlciksICIgPSAiLCBlbnVtZXJhdGlvbk1lbWJlci5nZXQoKS52YWx1ZSgp
LCAiLFxuIikpOwogICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZCgifTtcbiIpOwogICAgIH0g
ZWxzZSBpZiAoaXM8QVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24+KG5hbWVkVHlwZSkpIHsKICAg
ICAgICAgLy8gTmF0aXZlIHR5cGVzIGFscmVhZHkgaGF2ZSBkZWZpbml0aW9ucy4gVGhlcmUncyBu
b3RoaW5nIHRvIGRvLgpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMjQ3NDEwKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTktMDctMTcgIFNh
YW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CisKKyAgICAgICAgW1dITFNMXSBNYWtlIGVu
dW1zIHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE5OTYzNAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogd2ViZ3B1L3dobHNsLWVudW1zLTItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3
ZWJncHUvd2hsc2wtZW51bXMtMi5odG1sOiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wt
ZW51bXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtZW51bXMu
aHRtbDogQWRkZWQuCisKIDIwMTktMDctMTIgIFlvdWVubiBGYWJsZXQgIDx5b3Vlbm5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFN0b3BwaW5nIGEgY2xvbmVkIE1lZGlhU3RyZWFtIHZpZGVvIHRyYWNr
IHNob3VsZCBub3Qgc3RvcCBhbnkgb3RoZXIgdmlkZW8gdHJhY2sKSW5kZXg6IExheW91dFRlc3Rz
L3dlYmdwdS93aGxzbC1lbnVtcy0yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy93ZWJncHUvd2hsc2wtZW51bXMtMi1leHBlY3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysg
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW1zLTItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNCBAQAorCitQQVNTIHNpbXBsZUVudW0gCitQQVNTIGVudW1XaXRoRXhw
bGljaXRJbnRCYXNlIAorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bXMtMi5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVtcy0yLmh0bWwJ
KG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW1zLTIuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4K
KzxtZXRhIGNoYXJzZXQ9dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25n
Ij4KKzx0aXRsZT5FbnVtcy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFy
bmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3Nj
cmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwv
c2NyaXB0PgorPHNjcmlwdD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5z
aW1wbGVFbnVtID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBl
bnVtIEZvbyB7CisgICAgICAgICAgICBXYXIsCisgICAgICAgICAgICBGYW1pbmUsCisgICAgICAg
ICAgICBQZXN0aWxlbmNlLAorICAgICAgICAgICAgRGVhdGgKKyAgICAgICAgfQorCisgICAgICAg
IEZvbyBfd2FyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5XYXI7CisgICAg
ICAgIH0KKworICAgICAgICBib29sIHdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBfd2FyKCkgPT0gRm9vLldhcjsKKyAgICAgICAgfQorCisgICAgICAgIEZvbyBfZmFtaW5lKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5GYW1pbmU7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIGZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZmFt
aW5lKCkgPT0gRm9vLkZhbWluZTsKKyAgICAgICAgfQorCisgICAgICAgIEZvbyBfcGVzdGlsZW5j
ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgcGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBfcGVzdGlsZW5jZSgpID09IEZvby5QZXN0aWxlbmNlOworICAgICAgICB9CisKKyAg
ICAgICAgRm9vIF9kZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uRGVh
dGg7CisgICAgICAgIH0KKworICAgICAgICBib29sIGRlYXRoKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIF9kZWF0aCgpID09IEZvby5EZWF0aDsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgX2VxdWFscyhGb28gYSwgRm9vIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBhID09IGI7CisgICAgICAgIH0KKworICAgICAgICBib29sIF9ub3RFcXVhbHMoRm9vIGEsIEZv
byBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAhPSBiOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCB0ZXN0U2ltcGxlRXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gX2VxdWFscyhGb28uV2FyLCBGb28uV2FyKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdGVzdEFub3RoZXJFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZXF1
YWxzKEZvby5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHRlc3ROb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZXF1
YWxzKEZvby5GYW1pbmUsIEZvby5EZWF0aCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRl
c3RTaW1wbGVOb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfbm90RXF1
YWxzKEZvby5XYXIsIEZvby5XYXIpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0QW5v
dGhlck5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9ub3RFcXVhbHMo
Rm9vLlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgdGVzdE5vdE5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9ub3RF
cXVhbHMoRm9vLkZhbWluZSwgRm9vLkRlYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBf
aW50V2FyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChfd2FyKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IGludFdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBfaW50V2FyKCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgX2ludEZhbWluZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQoX2ZhbWluZSgpKTsKKyAgICAgICAgfQor
CisgICAgICAgIGludCBpbnRGYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
X2ludEZhbWluZSgpOworICAgICAgICB9CisKKyAgICAgICAgaW50IF9pbnRQZXN0aWxlbmNlKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChfcGVzdGlsZW5jZSgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCBpbnRQZXN0aWxlbmNlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIF9pbnRQZXN0aWxlbmNlKCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgX2lu
dERlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChfZGVhdGgoKSk7Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgaW50RGVhdGgoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gX2ludERlYXRoKCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgd2FyVmFsdWUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3dhcigpLnZhbHVlOworICAgICAgICB9
CisKKyAgICAgICAgaW50IGZhbWluZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIF9mYW1pbmUoKS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwZXN0aWxlbmNl
VmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3Blc3RpbGVuY2UoKS52YWx1
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBkZWF0aFZhbHVlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIF9kZWF0aCgpLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaW50
IHdhclZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uV2Fy
LnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaW50IGZhbWluZVZhbHVlTGl0ZXJhbCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uRmFtaW5lLnZhbHVlOworICAgICAgICB9
CisKKyAgICAgICAgaW50IHBlc3RpbGVuY2VWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRm9vLlBlc3RpbGVuY2UudmFsdWU7CisgICAgICAgIH0KKworICAgICAg
ICBpbnQgZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
Rm9vLkRlYXRoLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpbnRXYXJCYWNrd2Fy
ZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKF9pbnRXYXIoKSkgPT0gRm9v
LldhcjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaW50RmFtaW5lQmFja3dhcmRzKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyhfaW50RmFtaW5lKCkpID09IEZvby5GYW1p
bmU7CisgICAgICAgIH0KKworICAgICAgICBib29sIGludFBlc3RpbGVuY2VCYWNrd2FyZHMoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKF9pbnRQZXN0aWxlbmNlKCkpID09IEZv
by5QZXN0aWxlbmNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpbnREZWF0aEJhY2t3YXJk
cygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28oX2ludERlYXRoKCkpID09IEZv
by5EZWF0aDsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgIndhciIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmUiLCBbXSksIHRydWUp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAicGVz
dGlsZW5jZSIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1
bmN0aW9uKHByb2dyYW0sICJkZWF0aCIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTaW1wbGVFcXVhbCIsIFtdKSwg
dHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0s
ICJ0ZXN0QW5vdGhlckVxdWFsIiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3ROb3RFcXVhbCIsIFtdKSwgZmFsc2UpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdFNp
bXBsZU5vdEVxdWFsIiwgW10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
Qm9vbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0QW5vdGhlck5vdEVxdWFsIiwgW10pLCBmYWxzZSk7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0
Tm90Tm90RXF1YWwiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJpbnRXYXIiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJpbnRGYW1pbmUiLCBbXSksIDEpOworICAg
IGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJpbnRQZXN0aWxl
bmNlIiwgW10pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiaW50RGVhdGgiLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJ3YXJWYWx1ZSIsIFtdKSwgMCk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZhbWluZVZhbHVlIiwgW10pLCAx
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAicGVz
dGlsZW5jZVZhbHVlIiwgW10pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZGVhdGhWYWx1ZSIsIFtdKSwgMyk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgIndhclZhbHVlTGl0ZXJhbCIsIFtdKSwg
MCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZh
bWluZVZhbHVlTGl0ZXJhbCIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxs
SW50RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2VWYWx1ZUxpdGVyYWwiLCBbXSksIDIpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0aFZh
bHVlTGl0ZXJhbCIsIFtdKSwgMyk7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29s
RnVuY3Rpb24ocHJvZ3JhbSwgImludFdhckJhY2t3YXJkcyIsIFtdKSwgdHJ1ZSk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRGYW1pbmVCYWNr
d2FyZHMiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAiaW50UGVzdGlsZW5jZUJhY2t3YXJkcyIsIFtdKSwgdHJ1ZSk7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJpbnREZWF0aEJh
Y2t3YXJkcyIsIFtdKSwgdHJ1ZSk7Cit9OworCit3aGxzbFRlc3RzLmVudW1XaXRoRXhwbGljaXRJ
bnRCYXNlID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBlbnVt
IEZvbyA6IGludCB7CisgICAgICAgICAgICBXYXIsCisgICAgICAgICAgICBGYW1pbmUsCisgICAg
ICAgICAgICBQZXN0aWxlbmNlLAorICAgICAgICAgICAgRGVhdGgKKyAgICAgICAgfQorCisgICAg
ICAgIEZvbyBfd2FyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5XYXI7Cisg
ICAgICAgIH0KKworICAgICAgICBib29sIHdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBfd2FyKCkgPT0gRm9vLldhcjsKKyAgICAgICAgfQorCisgICAgICAgIEZvbyBfZmFtaW5l
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5GYW1pbmU7CisgICAgICAgIH0K
KworICAgICAgICBib29sIGZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBf
ZmFtaW5lKCkgPT0gRm9vLkZhbWluZTsKKyAgICAgICAgfQorCisgICAgICAgIEZvbyBfcGVzdGls
ZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgcGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBfcGVzdGlsZW5jZSgpID09IEZvby5QZXN0aWxlbmNlOworICAgICAgICB9CisK
KyAgICAgICAgRm9vIF9kZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28u
RGVhdGg7CisgICAgICAgIH0KKworICAgICAgICBib29sIGRlYXRoKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIF9kZWF0aCgpID09IEZvby5EZWF0aDsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgX2VxdWFscyhGb28gYSwgRm9vIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBhID09IGI7CisgICAgICAgIH0KKworICAgICAgICBib29sIF9ub3RFcXVhbHMoRm9vIGEs
IEZvbyBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAhPSBiOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCB0ZXN0U2ltcGxlRXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gX2VxdWFscyhGb28uV2FyLCBGb28uV2FyKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgdGVzdEFub3RoZXJFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBf
ZXF1YWxzKEZvby5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIHRlc3ROb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBf
ZXF1YWxzKEZvby5GYW1pbmUsIEZvby5EZWF0aCk7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHRlc3RTaW1wbGVOb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfbm90
RXF1YWxzKEZvby5XYXIsIEZvby5XYXIpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0
QW5vdGhlck5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9ub3RFcXVh
bHMoRm9vLlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgdGVzdE5vdE5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9u
b3RFcXVhbHMoRm9vLkZhbWluZSwgRm9vLkRlYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIGlu
dCBfaW50V2FyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChfd2FyKCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgaW50IGludFdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBfaW50V2FyKCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgX2ludEZhbWluZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQoX2ZhbWluZSgpKTsKKyAgICAgICAg
fQorCisgICAgICAgIGludCBpbnRGYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gX2ludEZhbWluZSgpOworICAgICAgICB9CisKKyAgICAgICAgaW50IF9pbnRQZXN0aWxlbmNl
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChfcGVzdGlsZW5jZSgpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGludCBpbnRQZXN0aWxlbmNlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIF9pbnRQZXN0aWxlbmNlKCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQg
X2ludERlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChfZGVhdGgoKSk7
CisgICAgICAgIH0KKworICAgICAgICBpbnQgaW50RGVhdGgoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gX2ludERlYXRoKCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgd2FyVmFs
dWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3dhcigpLnZhbHVlOworICAgICAg
ICB9CisKKyAgICAgICAgaW50IGZhbWluZVZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIF9mYW1pbmUoKS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwZXN0aWxl
bmNlVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3Blc3RpbGVuY2UoKS52
YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBkZWF0aFZhbHVlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIF9kZWF0aCgpLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAg
aW50IHdhclZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28u
V2FyLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaW50IGZhbWluZVZhbHVlTGl0ZXJhbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uRmFtaW5lLnZhbHVlOworICAgICAg
ICB9CisKKyAgICAgICAgaW50IHBlc3RpbGVuY2VWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gRm9vLlBlc3RpbGVuY2UudmFsdWU7CisgICAgICAgIH0KKworICAg
ICAgICBpbnQgZGVhdGhWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gRm9vLkRlYXRoLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpbnRXYXJCYWNr
d2FyZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKF9pbnRXYXIoKSkgPT0g
Rm9vLldhcjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgaW50RmFtaW5lQmFja3dhcmRzKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyhfaW50RmFtaW5lKCkpID09IEZvby5G
YW1pbmU7CisgICAgICAgIH0KKworICAgICAgICBib29sIGludFBlc3RpbGVuY2VCYWNrd2FyZHMo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKF9pbnRQZXN0aWxlbmNlKCkpID09
IEZvby5QZXN0aWxlbmNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBpbnREZWF0aEJhY2t3
YXJkcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28oX2ludERlYXRoKCkpID09
IEZvby5EZWF0aDsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgIndhciIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmUiLCBbXSksIHRy
dWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAi
cGVzdGlsZW5jZSIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9v
bEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0aCIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTaW1wbGVFcXVhbCIsIFtd
KSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJ0ZXN0QW5vdGhlckVxdWFsIiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3ROb3RFcXVhbCIsIFtdKSwgZmFsc2Up
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVz
dFNpbXBsZU5vdEVxdWFsIiwgW10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0QW5vdGhlck5vdEVxdWFsIiwgW10pLCBmYWxz
ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJ0
ZXN0Tm90Tm90RXF1YWwiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEludEZ1bmN0aW9uKHByb2dyYW0sICJpbnRXYXIiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJpbnRGYW1pbmUiLCBbXSksIDEpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJpbnRQZXN0
aWxlbmNlIiwgW10pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiaW50RGVhdGgiLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJ3YXJWYWx1ZSIsIFtdKSwgMCk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZhbWluZVZhbHVlIiwgW10p
LCAxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
cGVzdGlsZW5jZVZhbHVlIiwgW10pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJ
bnRGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGhWYWx1ZSIsIFtdKSwgMyk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgIndhclZhbHVlTGl0ZXJhbCIsIFtd
KSwgMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwg
ImZhbWluZVZhbHVlTGl0ZXJhbCIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2VWYWx1ZUxpdGVyYWwiLCBbXSksIDIp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0
aFZhbHVlTGl0ZXJhbCIsIFtdKSwgMyk7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxC
b29sRnVuY3Rpb24ocHJvZ3JhbSwgImludFdhckJhY2t3YXJkcyIsIFtdKSwgdHJ1ZSk7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRGYW1pbmVC
YWNrd2FyZHMiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiaW50UGVzdGlsZW5jZUJhY2t3YXJkcyIsIFtdKSwgdHJ1ZSk7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJpbnREZWF0
aEJhY2t3YXJkcyIsIFtdKSwgdHJ1ZSk7Cit9OworCitydW5UZXN0cyh3aGxzbFRlc3RzKTsKKzwv
c2NyaXB0PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW1zLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bXMt
ZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1l
bnVtcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNCBAQAorCitQQVNT
IGZhaWxUcmlja3lEb3VibGVaZXJvIAorUEFTUyBzaW1wbGVEZWNsYXJhdGlvbiAKK1BBU1MgZW51
bVdpdGhVaW50QmFzZSAKK1BBU1MgZW51bVdpdGhvdXRaZXJvIAorUEFTUyBlbnVtTmVnYXRpdmVV
aW50IAorUEFTUyBwYXN0SW50TWF4IAorUEFTUyBlbnVtV2l0aFNvbWVNYW51YWxWYWx1ZXMgCitQ
QVNTIGVudW1Td2l0Y2hCcmVha0V4aGF1c3RpdmUgCitQQVNTIGVudW1Td2l0Y2hCcmVha05vdFF1
aXRlRXhoYXVzdGl2ZVdpdGhEZWZhdWx0IAorUEFTUyBlbnVtV2l0aE1hbnVhbFZhbHVlcyAKK1BB
U1MgZW51bVN3aXRjaEJyZWFrTm90UXVpdGVFeGhhdXN0aXZlIAorUEFTUyBjb3B5Q29uc3RydWN0
b3JzIAorCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bXMuaHRtbAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bXMuaHRtbAkobm9uZXhpc3RlbnQp
CisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bXMuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ3MCBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxtZXRhIGNoYXJzZXQ9
dXRmLTg+Cis8bWV0YSBuYW1lPSJ0aW1lb3V0IiBjb250ZW50PSJsb25nIj4KKzx0aXRsZT5FbnVt
cy48L3RpdGxlPgorPHNjcmlwdCBzcmM9ImpzL3dobHNsLXRlc3QtaGFybmVzcy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ianMvd2ViZ3B1LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3RoYXJuZXNzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSIuLi9yZXNvdXJjZXMvdGVzdGhhcm5lc3NyZXBvcnQuanMiPjwvc2NyaXB0PgorPHNjcmlw
dD4KK2NvbnN0IHdobHNsVGVzdHMgPSB7fTsKKword2hsc2xUZXN0cy5mYWlsVHJpY2t5RG91Ymxl
WmVybyA9IGFzeW5jICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICBlbnVt
IEUgeworICAgICAgICAgICAgRiwKKyAgICAgICAgICAgIEcgPSAtMiwKKyAgICAgICAgICAgIEgs
CisgICAgICAgICAgICBJIC8vIHNob3VsZCBnZXQgemVybywgYW5kIHRoYXQncyBhIGR1cGUuCisg
ICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsKKyAgICAgICAgICAgIEUgZSA9
IEUuRm9vOworICAgICAgICAgICAgcmV0dXJuIDQyOworICAgICAgICB9CisgICAgYDsKKyAgICBh
d2FpdCBjaGVja0ZhaWwocHJvZ3JhbSk7Cit9OworCit3aGxzbFRlc3RzLnNpbXBsZURlY2xhcmF0
aW9uID0gYXN5bmMgKCkgPT4geworICAgIGNvbnN0IHByb2dyYW0gPSBgCisgICAgICAgIGVudW0g
RSB7CisgICAgICAgICAgICBGb28sCisgICAgICAgICAgICBCYXIKKyAgICAgICAgfQorICAgICAg
ICBpbnQgZm9vKCkKKyAgICAgICAgeworICAgICAgICAgICAgRSBlID0gRS5Gb287CisgICAgICAg
ICAgICByZXR1cm4gNDI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3dobHNs
VGVzdHMuZW51bVdpdGhVaW50QmFzZSA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9
IGAKKyAgICAgICAgZW51bSBGb28gOiB1aW50IHsKKyAgICAgICAgICAgIFdhciwKKyAgICAgICAg
ICAgIEZhbWluZSwKKyAgICAgICAgICAgIFBlc3RpbGVuY2UsCisgICAgICAgICAgICBEZWF0aAor
ICAgICAgICB9CisKKyAgICAgICAgRm9vIF93YXIoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRm9vLldhcjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgd2FyKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIF93YXIoKSA9PSBGb28uV2FyOworICAgICAgICB9CisKKyAg
ICAgICAgRm9vIF9mYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkZh
bWluZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZmFtaW5lKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIF9mYW1pbmUoKSA9PSBGb28uRmFtaW5lOworICAgICAgICB9CisKKyAg
ICAgICAgRm9vIF9wZXN0aWxlbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZv
by5QZXN0aWxlbmNlOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBwZXN0aWxlbmNlKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9wZXN0aWxlbmNlKCkgPT0gRm9vLlBlc3RpbGVu
Y2U7CisgICAgICAgIH0KKworICAgICAgICBGb28gX2RlYXRoKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEZvby5EZWF0aDsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgZGVhdGgo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2RlYXRoKCkgPT0gRm9vLkRlYXRoOwor
ICAgICAgICB9CisKKyAgICAgICAgYm9vbCBfZXF1YWxzKEZvbyBhLCBGb28gYikKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGEgPT0gYjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
X25vdEVxdWFscyhGb28gYSwgRm9vIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ICE9IGI7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRlc3RTaW1wbGVFcXVhbCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZXF1YWxzKEZvby5XYXIsIEZvby5XYXIpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0QW5vdGhlckVxdWFsKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIF9lcXVhbHMoRm9vLlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdGVzdE5vdEVxdWFsKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIF9lcXVhbHMoRm9vLkZhbWluZSwgRm9vLkRlYXRoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgdGVzdFNpbXBsZU5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIF9ub3RFcXVhbHMoRm9vLldhciwgRm9vLldhcik7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIHRlc3RBbm90aGVyTm90RXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gX25vdEVxdWFscyhGb28uUGVzdGlsZW5jZSwgRm9vLlBlc3RpbGVuY2UpOworICAg
ICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0Tm90Tm90RXF1YWwoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gX25vdEVxdWFscyhGb28uRmFtaW5lLCBGb28uRGVhdGgpOworICAgICAg
ICB9CisKKyAgICAgICAgdWludCBfdWludFdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiB1aW50KF93YXIoKSk7CisgICAgICAgIH0KKworICAgICAgICB1aW50IHVpbnRXYXIoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3VpbnRXYXIoKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHVpbnQgX3VpbnRGYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
dWludChfZmFtaW5lKCkpOworICAgICAgICB9CisKKyAgICAgICAgdWludCB1aW50RmFtaW5lKCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF91aW50RmFtaW5lKCk7CisgICAgICAgIH0K
KworICAgICAgICB1aW50IF91aW50UGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiB1aW50KF9wZXN0aWxlbmNlKCkpOworICAgICAgICB9CisKKyAgICAgICAgdWludCB1
aW50UGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfdWludFBlc3Rp
bGVuY2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgX3VpbnREZWF0aCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiB1aW50KF9kZWF0aCgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHVpbnQgdWludERlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF91aW50
RGVhdGgoKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgd2FyVmFsdWUoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gX3dhcigpLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAg
dWludCBmYW1pbmVWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZmFtaW5l
KCkudmFsdWU7CisgICAgICAgIH0KKworICAgICAgICB1aW50IHBlc3RpbGVuY2VWYWx1ZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfcGVzdGlsZW5jZSgpLnZhbHVlOworICAgICAg
ICB9CisKKyAgICAgICAgdWludCBkZWF0aFZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIF9kZWF0aCgpLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgdWludCB3YXJWYWx1
ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLldhci52YWx1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHVpbnQgZmFtaW5lVmFsdWVMaXRlcmFsKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIEZvby5GYW1pbmUudmFsdWU7CisgICAgICAgIH0KKworICAg
ICAgICB1aW50IHBlc3RpbGVuY2VWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRm9vLlBlc3RpbGVuY2UudmFsdWU7CisgICAgICAgIH0KKworICAgICAgICB1aW50
IGRlYXRoVmFsdWVMaXRlcmFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5E
ZWF0aC52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdWludFdhckJhY2t3YXJkcygp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28oX3VpbnRXYXIoKSkgPT0gRm9vLldh
cjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdWludEZhbWluZUJhY2t3YXJkcygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28oX3VpbnRGYW1pbmUoKSkgPT0gRm9vLkZhbWlu
ZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdWludFBlc3RpbGVuY2VCYWNrd2FyZHMoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vKF91aW50UGVzdGlsZW5jZSgpKSA9PSBG
b28uUGVzdGlsZW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdWludERlYXRoQmFja3dh
cmRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvbyhfdWludERlYXRoKCkpID09
IEZvby5EZWF0aDsKKyAgICAgICAgfQorICAgIGA7CisKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgIndhciIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmUiLCBbXSksIHRy
dWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAi
cGVzdGlsZW5jZSIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9v
bEZ1bmN0aW9uKHByb2dyYW0sICJkZWF0aCIsIFtdKSwgdHJ1ZSk7CisKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTaW1wbGVFcXVhbCIsIFtd
KSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJ0ZXN0QW5vdGhlckVxdWFsIiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3ROb3RFcXVhbCIsIFtdKSwgZmFsc2Up
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVz
dFNpbXBsZU5vdEVxdWFsIiwgW10pLCBmYWxzZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBj
YWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJ0ZXN0QW5vdGhlck5vdEVxdWFsIiwgW10pLCBmYWxz
ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJ0
ZXN0Tm90Tm90RXF1YWwiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bFVpbnRGdW5jdGlvbihwcm9ncmFtLCAidWludFdhciIsIFtdKSwgMCk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJ1aW50RmFtaW5lIiwgW10pLCAx
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgInVp
bnRQZXN0aWxlbmNlIiwgW10pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50
RnVuY3Rpb24ocHJvZ3JhbSwgInVpbnREZWF0aCIsIFtdKSwgMyk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJ3YXJWYWx1ZSIsIFtdKSwgMCk7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmVW
YWx1ZSIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9u
KHByb2dyYW0sICJwZXN0aWxlbmNlVmFsdWUiLCBbXSksIDIpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGhWYWx1ZSIsIFtdKSwgMyk7Cisg
ICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJ3YXJWYWx1
ZUxpdGVyYWwiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5j
dGlvbihwcm9ncmFtLCAiZmFtaW5lVmFsdWVMaXRlcmFsIiwgW10pLCAxKTsKKyAgICBhc3NlcnRf
ZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2VWYWx1ZUxp
dGVyYWwiLCBbXSksIDIpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlv
bihwcm9ncmFtLCAiZGVhdGhWYWx1ZUxpdGVyYWwiLCBbXSksIDMpOworCisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJ1aW50V2FyQmFja3dhcmRzIiwg
W10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJv
Z3JhbSwgInVpbnRGYW1pbmVCYWNrd2FyZHMiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidWludFBlc3RpbGVuY2VCYWNrd2Fy
ZHMiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlv
bihwcm9ncmFtLCAidWludERlYXRoQmFja3dhcmRzIiwgW10pLCB0cnVlKTsKK307CisKKword2hs
c2xUZXN0cy5lbnVtV2l0aG91dFplcm8gPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICBlbnVtIEZvbyB7CisgICAgICAgICAgICAgICAg
V2FyID0gNzIsCisgICAgICAgICAgICAgICAgRmFtaW5lID0gNjQsCisgICAgICAgICAgICAgICAg
UGVzdGlsZW5jZSA9IDIzLAorICAgICAgICAgICAgICAgIERlYXRoID0gLTQyCisgICAgICAgICAg
ICB9CisgICAgICAgIGApOworfTsKKword2hsc2xUZXN0cy5lbnVtTmVnYXRpdmVVaW50ID0gYXN5
bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAg
ZW51bSBGb28gOiB1aW50IHsKKyAgICAgICAgICAgICAgICBXYXIsCisgICAgICAgICAgICAgICAg
RmFtaW5lLAorICAgICAgICAgICAgICAgIFBlc3RpbGVuY2UsCisgICAgICAgICAgICAgICAgRGVh
dGggPSAtNDIKKyAgICAgICAgICAgIH0KKyAgICAgICAgYCk7Cit9OworCit3aGxzbFRlc3RzLnBh
c3RJbnRNYXggPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tGYWlsKAorICAgICAgICBg
CisgICAgICAgICAgICBlbnVtIEZvbyA6IGludCB7CisgICAgICAgICAgICAgICAgV2FyID0gMjE0
NzQ4MzY0NywKKyAgICAgICAgICAgICAgICBGYW1pbmUsCisgICAgICAgICAgICAgICAgUGVzdGls
ZW5jZSA9IDAsCisgICAgICAgICAgICAgICAgRGVhdGgKKyAgICAgICAgICAgIH0KKyAgICAgICAg
YCk7Cit9OworCit3aGxzbFRlc3RzLmVudW1XaXRoU29tZU1hbnVhbFZhbHVlcyA9IGFzeW5jICgp
ID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgZW51bSBGb28geworICAgICAgICAg
ICAgV2FyID0gNzIsCisgICAgICAgICAgICBGYW1pbmUsCisgICAgICAgICAgICBQZXN0aWxlbmNl
ID0gMCwKKyAgICAgICAgICAgIERlYXRoCisgICAgICAgIH0KKyAgICAgICAgaW50IHdhcigpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQoRm9vLldhcik7CisgICAgICAgIH0KKyAg
ICAgICAgaW50IGZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQoRm9v
LkZhbWluZSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IHBlc3RpbGVuY2UoKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gaW50KEZvby5QZXN0aWxlbmNlKTsKKyAgICAgICAgfQorICAg
ICAgICBpbnQgZGVhdGgoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50KEZvby5E
ZWF0aCk7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJ3YXIiLCBbXSksIDcyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZmFtaW5lIiwgW10pLCA3Myk7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2UiLCBb
XSksIDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJkZWF0aCIsIFtdKSwgMSk7Cit9OworCisKK3dobHNsVGVzdHMuZW51bVN3aXRjaEJyZWFrRXho
YXVzdGl2ZSA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgZW51
bSBGb28geworICAgICAgICAgICAgQSwgQiwgQworICAgICAgICB9CisgICAgICAgIGludCBmb28o
aW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAwOworICAgICAgICAg
ICAgc3dpdGNoIChGb28oeCkpIHsKKyAgICAgICAgICAgIGNhc2UgRm9vLkE6CisgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9IDI3OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Y2FzZSBGb28uQjoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gNzYyNDsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRm9vLkM6CisgICAgICAgICAgICAgICAgcmVz
dWx0ICs9IDQ5OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDApXSksIDI3
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZm9v
IiwgW21ha2VJbnQoMSldKSwgNzYyNCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50
RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDIpXSksIDQ5KTsKK30KKworCit3aGxz
bFRlc3RzLmVudW1Td2l0Y2hCcmVha05vdFF1aXRlRXhoYXVzdGl2ZVdpdGhEZWZhdWx0ID0gYXN5
bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBlbnVtIEZvbyB7CisgICAg
ICAgICAgICBBLCBCLCBDCisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbyhpbnQgeCkKKyAgICAg
ICAgeworICAgICAgICAgICAgaW50IHJlc3VsdCA9IDA7CisgICAgICAgICAgICBzd2l0Y2ggKEZv
byh4KSkgeworICAgICAgICAgICAgY2FzZSBGb28uQToKKyAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gMjc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEZvby5COgor
ICAgICAgICAgICAgICAgIHJlc3VsdCArPSA3NjI0OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gNDk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRG
dW5jdGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMCldKSwgMjcpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbbWFrZUludCgxKV0p
LCA3NjI0KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAiZm9vIiwgW21ha2VJbnQoMildKSwgNDkpOworfQorCit3aGxzbFRlc3RzLmVudW1XaXRoTWFu
dWFsVmFsdWVzID0gYXN5bmMgKCkgPT4geworICAgIGxldCBwcm9ncmFtID0gYAorICAgICAgICBl
bnVtIEZvbyB7CisgICAgICAgICAgICBXYXIgPSA3MiwKKyAgICAgICAgICAgIEZhbWluZSA9IDAs
CisgICAgICAgICAgICBQZXN0aWxlbmNlID0gMjMsCisgICAgICAgICAgICBEZWF0aCA9IC00Mgor
ICAgICAgICB9CisgICAgICAgIGludCB3YXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gaW50KEZvby5XYXIpOworICAgICAgICB9CisgICAgICAgIGludCBmYW1pbmUoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gaW50KEZvby5GYW1pbmUpOworICAgICAgICB9CisgICAg
ICAgIGludCBwZXN0aWxlbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChG
b28uUGVzdGlsZW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGRlYXRoKCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGludChGb28uRGVhdGgpOworICAgICAgICB9CisgICAgYDsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAid2FyIiwg
W10pLCA3Mik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3Jh
bSwgImZhbWluZSIsIFtdKSwgMCk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVu
Y3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2UiLCBbXSksIDIzKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGgiLCBbXSksIC00Mik7Cit9Owor
Cit3aGxzbFRlc3RzLmVudW1Td2l0Y2hCcmVha05vdFF1aXRlRXhoYXVzdGl2ZSA9IGFzeW5jICgp
ID0+IHsKKyAgICBhd2FpdCBjaGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGVudW0g
Rm9vIHsKKyAgICAgICAgICAgICAgICBBLCBCLCBDLCBECisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBpbnQgZm9vKEZvbyB4KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCBy
ZXN1bHQgPSAwOworICAgICAgICAgICAgICAgIHN3aXRjaCAoeCkgeworICAgICAgICAgICAgICAg
IGNhc2UgRm9vLkE6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAyNzsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBGb28uQjoKKyAgICAgICAg
ICAgICAgICAgICAgcmVzdWx0ICs9IDc2MjQ7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIGNhc2UgRm9vLkM6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCAr
PSA0OTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAgICAgICB9CisgICAgICAgIGApOwor
fTsKKword2hsc2xUZXN0cy5jb3B5Q29uc3RydWN0b3JzID0gYXN5bmMgKCkgPT4geworICAgIGNv
bnN0IHByb2dyYW0gPSBgCisgICAgICAgIGVudW0gV2Vla2RheSB7CisgICAgICAgICAgICBNb25k
YXksCisgICAgICAgICAgICBUdWVzZGF5LAorICAgICAgICAgICAgV2VkbmVzZGF5LAorICAgICAg
ICAgICAgVGh1cnNkYXksCisgICAgICAgICAgICBQaXp6YWRheQorICAgICAgICB9CisgICAgICAg
IGludCBmb28oKQorICAgICAgICB7CisgICAgICAgICAgICBXZWVrZGF5IHggPSBXZWVrZGF5Lk1v
bmRheTsKKyAgICAgICAgICAgIFdlZWtkYXkgeSA9IFdlZWtkYXkoeCk7CisgICAgICAgICAgICBm
bG9hdDQgeiA9IGZsb2F0NCgxLCAyLCAzLCA0KTsKKyAgICAgICAgICAgIGZsb2F0NCB3ID0gZmxv
YXQ0KHopOworICAgICAgICAgICAgZmxvYXQyeDIgcDsKKyAgICAgICAgICAgIGZsb2F0MngyIHEg
PSBmbG9hdDJ4MihwKTsKKyAgICAgICAgICAgIHJldHVybiA0MjsKKyAgICAgICAgfQorICAgIGA7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFtdKSwgNDIpOworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRt
bD4K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>374288</attachid>
            <date>2019-07-17 04:29:27 -0700</date>
            <delta_ts>2019-07-17 11:24:00 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>43471</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NzUxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDUyIEBACisyMDE5LTA3LTE3ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTWFrZSBlbnVtcyB3
b3JrCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk2
MzQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIG1ha2VzIGVudW1zIHdvcmsuIFRoZXJlIHdlcmUgYSBjb3VwbGUgY2hhbmdlcyBuZWVk
ZWQgdG8gZG8gdGhpcyB3b3JrOgorICAgICAgICAxLiBJbiB0aGUgbWV0YWwgY29kZWdlbiwgd2Ug
d2VyZSBlbWl0dGluZyBjb2RlIGxpa2UgIkVudW1UeXBlLkVudW1WYWx1ZSIKKyAgICAgICAgaW5z
dGVhZCBvZiAiRW51bVR5cGU6OkVudW1WYWx1ZSIuCisgICAgICAgIAorICAgICAgICAyLiBJbnNp
ZGUgdGhlIGVudW1lcmF0aW9uIGRlY2xhcmF0aW9uIEFTVCBub2RlLCB3ZSB0cmFjayBlbnVtcyBp
biBhIEhhc2hNYXAKKyAgICAgICAgYmVjYXVzZSB3ZSBuZWVkIHRvIGxvb2sgdXAgbmFtZXMgb2Yg
ZW51bSB2YWx1ZXMgaW4gdGhhdCBtYXAgaW4gcGFydHMgb2YgdGhlCisgICAgICAgIGNvbXBpbGVy
LiBIb3dldmVyLCBIYXNoTWFwIGlzIG5vdCBvcmRlcmVkIGJ1dCB3ZSB3ZXJlIHJlbHlpbmcgb24g
dGhlIGl0ZXJhdGlvbgorICAgICAgICBvcmRlciBvZiBpdCB0byBnZW5lcmF0ZSB0aGUgZGVmYXVs
dCB2YWx1ZXMgb2YgZW51bXMuIEUuZywgaW46ICJlbnVtIHsgRm9vID0gMTAsIEJhciB9IiwKKyAg
ICAgICAgQmFyIHNob3VsZCBiZSAxMS4gSG93ZXZlciwgdGhlcmUgd2FzIG5vIGd1YXJhbnRlZSB0
aGF0IHdlIGl0ZXJhdGVkIG92ZXIgQmFyCisgICAgICAgIGFmdGVyIEZvby4gSW5zdGVhZCwgd2Ug
anVzdCB0cmFjayB0aGUgZGVmYXVsdCB2YWx1ZXMgYXMgd2UgcGFyc2UgYW4gZW51bQorICAgICAg
ICBpbnNpZGUgb2YgdGhlIHBhcnNlci4gVGhpcyBhbGxvd3MgdXMgdG8gY29udGludWUgdG8ga2Vl
cCB1c2luZyBIYXNoTWFwIHdpdGhvdXQKKyAgICAgICAgYWxzbyBhZGRpbmcgYW4gYXV4aWxpYXJ5
IGRhdGEgc3RydWN0dXJlIChvciB1c2luZyBtb3JlIG1lbW9yeSBpbiBzb21lIHdheSkgdG8KKyAg
ICAgICAgdHJhY2sgdGhlIG9yZGVyIG9mIHRoZSBlbnVtIGVsZW1lbnRzLgorICAgICAgICAKKyAg
ICAgICAgSSd2ZSBhbHNvIGZpbGVkIGEgcGF0Y2ggdG8gZG8gZm9sbG93LXVwIHdvcmsgb24gaW1w
bGVtZW50aW5nIHRoZSBjb3JyZWN0CisgICAgICAgIG9wZXJhdGlvbmFsIGJlaGF2aW9yIHdoZW4g
Y29uc3RydWN0aW5nIGFuIGVudW0gZnJvbSBpdHMgdW5kZXJseWluZyB0eXBlIHdoZW4KKyAgICAg
ICAgdGhlIHVuZGVybHlpbmcgdmFsdWUgZG9lcyBub3QgbWF0Y2ggYW55IGVudW0gdmFsdWU6Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk4NTMKKwor
ICAgICAgICBUZXN0czogd2ViZ3B1L3dobHNsLWVudW1zLTIuaHRtbAorICAgICAgICAgICAgICAg
d2ViZ3B1L3dobHNsLWVudW1zLmh0bWwKKworICAgICAgICAqIE1vZHVsZXMvd2ViZ3B1L1dITFNM
L0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmg6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6
QVNUOjpFbnVtZXJhdGlvbk1lbWJlcjo6RW51bWVyYXRpb25NZW1iZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6V0hMU0w6OkFTVDo6RW51bWVyYXRpb25NZW1iZXI6OnZhbHVlKToKKyAgICAgICAgKFdl
YkNvcmU6OldITFNMOjpBU1Q6OkVudW1lcmF0aW9uTWVtYmVyOjpzZXRWYWx1ZSk6IERlbGV0ZWQu
CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExTTDo6TWV0YWw6OkZ1bmN0aW9uRGVmaW5pdGlv
bldyaXRlcjo6dmlzaXQpOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpGdW5jdGlv
bkRlZmluaXRpb25Xcml0ZXI6OmNvbnN0YW50RXhwcmVzc2lvblN0cmluZyk6CisgICAgICAgICog
TW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6Ok1ldGFsOjpUeXBlTmFtZXI6OmVtaXROYW1lZFR5cGVEZWZpbml0aW9u
KToKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1bXBlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpXSExTTDo6QVNURHVtcGVyOjp2aXNpdCk6CisgICAgICAgICogTW9k
dWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldI
TFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFyc2VFbnVt
ZXJhdGlvbkRlZmluaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlBhcnNlcjo6cGFy
c2VFbnVtZXJhdGlvbk1lbWJlcik6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hM
U0xQYXJzZXIuaDoKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFZpc2l0b3Iu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6V0hMU0w6OlZpc2l0b3I6OnZpc2l0KToKKwogMjAxOS0w
Ny0xNyAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEFkZCByZWZlcnJl
cnBvbGljeSBhdHRyaWJ1dGUgc3VwcG9ydCBmb3IgPHNjcmlwdD4gZWxlbWVudHMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTEFTVER1
bXBlci5jcHAJKHJldmlzaW9uIDI0NzQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML1dITFNMQVNURHVtcGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDExICsx
MzQsNyBAQCB2b2lkIEFTVER1bXBlcjo6dmlzaXQoQVNUOjpFbnVtZXJhdGlvbkRlCiAKIHZvaWQg
QVNURHVtcGVyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBlbnVtZXJhdGlvbk1lbWJl
cikKIHsKLSAgICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCkpOwotICAgIGlm
IChlbnVtZXJhdGlvbk1lbWJlci52YWx1ZSgpKSB7Ci0gICAgICAgIG1fb3V0LnByaW50KCIgPSAi
KTsKLSAgICAgICAgdmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVlKCkpOwotICAgIH0KKyAg
ICBtX291dC5wcmludChlbnVtZXJhdGlvbk1lbWJlci5uYW1lKCksICIgPSAiLCBlbnVtZXJhdGlv
bk1lbWJlci52YWx1ZSgpKTsKIH0KIAogdm9pZCBBU1REdW1wZXI6OnZpc2l0KEFTVDo6RnVuY3Rp
b25EZWZpbml0aW9uJiBmdW5jdGlvbkRlZmluaXRpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlzaW9u
IDI0NzQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hl
Y2tlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyNSwxNyArNjI1LDYgQEAgc3RhdGljIE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeQogICAgIH0pKTsKIH0KIAotc3RhdGljIE9wdGlv
bmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gbWF0Y2hBbmRDb21taXQoUmVzb2x2aW5n
VHlwZSYgcmVzb2x2aW5nVHlwZSwgQVNUOjpOYW1lZFR5cGUmIG5hbWVkVHlwZSkKLXsKLSAgICBy
ZXR1cm4gcmVzb2x2aW5nVHlwZS52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShVbmlxdWVSZWY8
QVNUOjpVbm5hbWVkVHlwZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxB
U1Q6OlVubmFtZWRUeXBlPj4gewotICAgICAgICBpZiAobWF0Y2hlcyhyZXNvbHZpbmdUeXBlLCBu
YW1lZFR5cGUpKQotICAgICAgICAgICAgcmV0dXJuIHJlc29sdmluZ1R5cGUtPmNsb25lKCk7Ci0g
ICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgfSwgWyZdKFJlZlB0cjxSZXNvbHZhYmxl
VHlwZVJlZmVyZW5jZT4mIHJlc29sdmluZ1R5cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6
OlVubmFtZWRUeXBlPj4gewotICAgICAgICByZXR1cm4gbWF0Y2hBbmRDb21taXQobmFtZWRUeXBl
LCByZXNvbHZpbmdUeXBlLT5yZXNvbHZhYmxlVHlwZSgpKTsKLSAgICB9KSk7Ci19Ci0KIHN0YXRp
YyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHlwZT4+IGNvbW1pdChSZXNvbHZpbmdU
eXBlJiByZXNvbHZpbmdUeXBlKQogewogICAgIHJldHVybiByZXNvbHZpbmdUeXBlLnZpc2l0KFdU
Rjo6bWFrZVZpc2l0b3IoWyZdKFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPiYgdW5uYW1lZFR5
cGUpIC0+IE9wdGlvbmFsPFVuaXF1ZVJlZjxBU1Q6OlVubmFtZWRUeXBlPj4gewpAQCAtNjQ5LDYg
KzYzOCw3IEBAIHN0YXRpYyBPcHRpb25hbDxVbmlxdWVSZWY8QVNUOjpVbm5hbWVkVHkKIAogdm9p
ZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiYgZW51bWVyYXRpb25E
ZWZpbml0aW9uKQogeworICAgIGJvb2wgaXNTaWduZWQ7CiAgICAgYXV0byogYmFzZVR5cGUgPSAo
WyZdKCkgLT4gQVNUOjpOYXRpdmVUeXBlRGVjbGFyYXRpb24qIHsKICAgICAgICAgY2hlY2tFcnJv
ckFuZFZpc2l0KGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkpOwogICAgICAgICBhdXRvJiBi
YXNlVHlwZSA9IGVudW1lcmF0aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CkBAIC02
NjAsNiArNjUwLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6OkVudW1lcmF0aW9uRGVmaQog
ICAgICAgICBhdXRvJiBuYXRpdmVUeXBlRGVjbGFyYXRpb24gPSBkb3duY2FzdDxBU1Q6Ok5hdGl2
ZVR5cGVEZWNsYXJhdGlvbj4obmFtZWRUeXBlKTsKICAgICAgICAgaWYgKCFuYXRpdmVUeXBlRGVj
bGFyYXRpb24uaXNJbnQoKSkKICAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICBp
c1NpZ25lZCA9IG5hdGl2ZVR5cGVEZWNsYXJhdGlvbi5pc1NpZ25lZCgpOwogICAgICAgICByZXR1
cm4gJm5hdGl2ZVR5cGVEZWNsYXJhdGlvbjsKICAgICB9KSgpOwogICAgIGlmICghYmFzZVR5cGUp
IHsKQEAgLTY2OSw3MSArNjYwLDI1IEBAIHZvaWQgQ2hlY2tlcjo6dmlzaXQoQVNUOjpFbnVtZXJh
dGlvbkRlZmkKIAogICAgIGF1dG8gZW51bWVyYXRpb25NZW1iZXJzID0gZW51bWVyYXRpb25EZWZp
bml0aW9uLmVudW1lcmF0aW9uTWVtYmVycygpOwogCi0gICAgYXV0byBtYXRjaEFuZENvbW1pdE1l
bWJlciA9IFsmXShBU1Q6OkVudW1lcmF0aW9uTWVtYmVyJiBtZW1iZXIpIC0+IGJvb2wgewotICAg
ICAgICByZXR1cm4gbWVtYmVyLnZhbHVlKCktPnZpc2l0KFdURjo6bWFrZVZpc2l0b3IoWyZdKEFT
VDo6RXhwcmVzc2lvbiYgdmFsdWUpIC0+IGJvb2wgewotICAgICAgICAgICAgYXV0byB2YWx1ZUlu
Zm8gPSByZWN1cnNlQW5kR2V0SW5mbyh2YWx1ZSk7Ci0gICAgICAgICAgICBpZiAoIXZhbHVlSW5m
bykKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Ym9vbD4obWF0Y2hBbmRDb21taXQodmFsdWVJbmZvLT5yZXNvbHZpbmdUeXBlLCAq
YmFzZVR5cGUpKTsKLSAgICAgICAgfSkpOwotICAgIH07Ci0KICAgICBmb3IgKGF1dG8mIG1lbWJl
ciA6IGVudW1lcmF0aW9uTWVtYmVycykgewotICAgICAgICBpZiAoIW1lbWJlci5nZXQoKS52YWx1
ZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFtYXRjaEFuZENvbW1p
dE1lbWJlcihtZW1iZXIpKSB7Ci0gICAgICAgICAgICBzZXRFcnJvcigpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaW50NjRfdCBuZXh0VmFsdWUgPSAwOwot
ICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVyYXRpb25NZW1iZXJzKSB7Ci0gICAgICAgIGlm
IChtZW1iZXIuZ2V0KCkudmFsdWUoKSkgewotICAgICAgICAgICAgYXV0byB2YWx1ZSA9IG1lbWJl
ci5nZXQoKS52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6OkludGVnZXJM
aXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgLT4gaW50NjRfdCB7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIGludGVnZXJMaXRlcmFsLnZhbHVlRm9yU2VsZWN0ZWRUeXBlKCk7Ci0gICAgICAgICAgICB9
LCBbJl0oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFsJiB1bnNpZ25lZEludGVnZXJMaXRlcmFs
KSAtPiBpbnQ2NF90IHsKLSAgICAgICAgICAgICAgICByZXR1cm4gdW5zaWduZWRJbnRlZ2VyTGl0
ZXJhbC52YWx1ZUZvclNlbGVjdGVkVHlwZSgpOwotICAgICAgICAgICAgfSwgWyZdKGF1dG8mKSAt
PiBpbnQ2NF90IHsKLSAgICAgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIH0pKTsKLSAgICAgICAgICAgIG5leHRW
YWx1ZSA9IGJhc2VUeXBlLT5zdWNjZXNzb3IoKSh2YWx1ZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICBpZiAobmV4dFZhbHVlID4gc3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgo
KSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChuZXh0VmFsdWUgPD0gc3RkOjpudW1lcmljX2xp
bWl0czx1bnNpZ25lZD46Om1heCgpKTsKLSAgICAgICAgICAgICAgICBtZW1iZXIuZ2V0KCkuc2V0
VmFsdWUoQVNUOjpDb25zdGFudEV4cHJlc3Npb24oQVNUOjpVbnNpZ25lZEludGVnZXJMaXRlcmFs
KG1lbWJlci5nZXQoKS5jb2RlTG9jYXRpb24oKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG5leHRW
YWx1ZSkpKSk7CisgICAgICAgIGludDY0X3QgdmFsdWUgPSBtZW1iZXIuZ2V0KCkudmFsdWUoKTsK
KyAgICAgICAgaWYgKGlzU2lnbmVkKSB7CisgICAgICAgICAgICBpZiAoc3RhdGljX2Nhc3Q8aW50
NjRfdD4oc3RhdGljX2Nhc3Q8aW50MzJfdD4odmFsdWUpKSAhPSB2YWx1ZSkgeworICAgICAgICAg
ICAgICAgIHNldEVycm9yKCk7CisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgQVNTRVJUKG5leHRWYWx1ZSA+PSBzdGQ6Om51bWVyaWNfbGltaXRzPGlu
dD46Om1pbigpKTsKLSAgICAgICAgICAgIG1lbWJlci5nZXQoKS5zZXRWYWx1ZShBU1Q6OkNvbnN0
YW50RXhwcmVzc2lvbihBU1Q6OkludGVnZXJMaXRlcmFsKG1lbWJlci5nZXQoKS5jb2RlTG9jYXRp
b24oKSwgc3RhdGljX2Nhc3Q8aW50PihuZXh0VmFsdWUpKSkpOwotCi0gICAgICAgICAgICBpZiAo
IW1hdGNoQW5kQ29tbWl0TWVtYmVyKG1lbWJlcikpIHsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIGlmIChzdGF0aWNfY2FzdDxpbnQ2NF90PihzdGF0aWNfY2FzdDx1aW50MzJfdD4odmFs
dWUpKSAhPSB2YWx1ZSkgewogICAgICAgICAgICAgICAgIHNldEVycm9yKCk7CiAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBuZXh0VmFsdWUgPSBi
YXNlVHlwZS0+c3VjY2Vzc29yKCkobmV4dFZhbHVlKTsKICAgICAgICAgfQogICAgIH0KIAotICAg
IGF1dG8gZ2V0VmFsdWUgPSBbJl0oQVNUOjpFbnVtZXJhdGlvbk1lbWJlciYgbWVtYmVyKSAtPiBp
bnQ2NF90IHsKLSAgICAgICAgQVNTRVJUKG1lbWJlci52YWx1ZSgpKTsKLSAgICAgICAgYXV0byB2
YWx1ZSA9IG1lbWJlci52YWx1ZSgpLT52aXNpdChXVEY6Om1ha2VWaXNpdG9yKFsmXShBU1Q6Oklu
dGVnZXJMaXRlcmFsJiBpbnRlZ2VyTGl0ZXJhbCkgLT4gaW50NjRfdCB7Ci0gICAgICAgICAgICBy
ZXR1cm4gaW50ZWdlckxpdGVyYWwudmFsdWUoKTsKLSAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWdu
ZWRJbnRlZ2VyTGl0ZXJhbCYgdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgLT4gaW50NjRfdCB7Ci0g
ICAgICAgICAgICByZXR1cm4gdW5zaWduZWRJbnRlZ2VyTGl0ZXJhbC52YWx1ZSgpOwotICAgICAg
ICB9LCBbJl0oYXV0byYpIC0+IGludDY0X3QgewotICAgICAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfSkpOwotICAgICAgICByZXR1
cm4gdmFsdWU7Ci0gICAgfTsKLQogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZW51bWVyYXRp
b25NZW1iZXJzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGF1dG8gdmFsdWUgPSBnZXRWYWx1ZShl
bnVtZXJhdGlvbk1lbWJlcnNbaV0uZ2V0KCkpOworICAgICAgICBhdXRvIHZhbHVlID0gZW51bWVy
YXRpb25NZW1iZXJzW2ldLmdldCgpLnZhbHVlKCk7CiAgICAgICAgIGZvciAoc2l6ZV90IGogPSBp
ICsgMTsgaiA8IGVudW1lcmF0aW9uTWVtYmVycy5zaXplKCk7ICsraikgewotICAgICAgICAgICAg
YXV0byBvdGhlclZhbHVlID0gZ2V0VmFsdWUoZW51bWVyYXRpb25NZW1iZXJzW2pdLmdldCgpKTsK
KyAgICAgICAgICAgIGF1dG8gb3RoZXJWYWx1ZSA9IGVudW1lcmF0aW9uTWVtYmVyc1tqXS5nZXQo
KS52YWx1ZSgpOwogICAgICAgICAgICAgaWYgKHZhbHVlID09IG90aGVyVmFsdWUpIHsKICAgICAg
ICAgICAgICAgICBzZXRFcnJvcigpOwogICAgICAgICAgICAgICAgIHJldHVybjsKQEAgLTc0Myw3
ICs2ODgsNyBAQCB2b2lkIENoZWNrZXI6OnZpc2l0KEFTVDo6RW51bWVyYXRpb25EZWZpCiAKICAg
ICBib29sIGZvdW5kWmVybyA9IGZhbHNlOwogICAgIGZvciAoYXV0byYgbWVtYmVyIDogZW51bWVy
YXRpb25NZW1iZXJzKSB7Ci0gICAgICAgIGlmICghZ2V0VmFsdWUobWVtYmVyLmdldCgpKSkgewor
ICAgICAgICBpZiAoIW1lbWJlci5nZXQoKS52YWx1ZSgpKSB7CiAgICAgICAgICAgICBmb3VuZFpl
cm8gPSB0cnVlOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9XSExTTFBhcnNlci5jcHAJKHJl
dmlzaW9uIDI0NzQxMCkKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dI
TFNMUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODI2LDcgKzgyNiw5IEBAIGF1dG8gUGFy
c2VyOjpwYXJzZUVudW1lcmF0aW9uRGVmaW5pdGlvbigKIAogICAgIENPTlNVTUVfVFlQRShsZWZ0
Q3VybHlCcmFja2V0LCBMZWZ0Q3VybHlCcmFja2V0KTsKIAotICAgIFBBUlNFKGZpcnN0RW51bWVy
YXRpb25NZW1iZXIsIEVudW1lcmF0aW9uTWVtYmVyKTsKKyAgICBpbnQ2NF90IG5leHRWYWx1ZSA9
IDA7CisgICAgUEFSU0UoZmlyc3RFbnVtZXJhdGlvbk1lbWJlciwgRW51bWVyYXRpb25NZW1iZXIs
IG5leHRWYWx1ZSk7CisgICAgbmV4dFZhbHVlID0gZmlyc3RFbnVtZXJhdGlvbk1lbWJlci0+dmFs
dWUoKSArIDE7CiAKICAgICBBU1Q6OkVudW1lcmF0aW9uRGVmaW5pdGlvbiByZXN1bHQoeyB9LCBu
YW1lLT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCksIFdURk1vdmUoKnR5cGUpKTsKICAg
ICBhdXRvIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdURk1vdmUoKmZpcnN0RW51bWVyYXRpb25NZW1i
ZXIpKTsKQEAgLTgzNCw3ICs4MzYsOCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRl
ZmluaXRpb24oCiAgICAgICAgIHJldHVybiBmYWlsKCJDYW5ub3QgYWRkIGVudW1lcmF0aW9uIG1l
bWJlciJfc3RyKTsKIAogICAgIHdoaWxlICh0cnlUeXBlKFRva2VuOjpUeXBlOjpDb21tYSkpIHsK
LSAgICAgICAgUEFSU0UobWVtYmVyLCBFbnVtZXJhdGlvbk1lbWJlcik7CisgICAgICAgIFBBUlNF
KG1lbWJlciwgRW51bWVyYXRpb25NZW1iZXIsIG5leHRWYWx1ZSk7CisgICAgICAgIG5leHRWYWx1
ZSA9IG1lbWJlci0+dmFsdWUoKSArIDE7CiAgICAgICAgIHN1Y2Nlc3MgPSByZXN1bHQuYWRkKFdU
Rk1vdmUoKm1lbWJlcikpOwogICAgICAgICBpZiAoIXN1Y2Nlc3MpCiAgICAgICAgICAgICByZXR1
cm4gZmFpbCgiQ2Fubm90IGFkZCBlbnVtZXJhdGlvbiBtZW1iZXIiX3N0cik7CkBAIC04NDYsMTYg
Kzg0OSwzMCBAQCBhdXRvIFBhcnNlcjo6cGFyc2VFbnVtZXJhdGlvbkRlZmluaXRpb24oCiAgICAg
cmV0dXJuIFdURk1vdmUocmVzdWx0KTsKIH0KIAotYXV0byBQYXJzZXI6OnBhcnNlRW51bWVyYXRp
b25NZW1iZXIoKSAtPiBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9uTWVtYmVyLCBFcnJvcj4KK2F1
dG8gUGFyc2VyOjpwYXJzZUVudW1lcmF0aW9uTWVtYmVyKGludDY0X3QgZGVmYWx0VmFsdWUpIC0+
IEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9yPgogewogICAgIENPTlNVTUVf
VFlQRShpZGVudGlmaWVyLCBJZGVudGlmaWVyKTsKICAgICBhdXRvIG5hbWUgPSBpZGVudGlmaWVy
LT5zdHJpbmdWaWV3KG1fbGV4ZXIpLnRvU3RyaW5nKCk7CiAKICAgICBpZiAodHJ5VHlwZShUb2tl
bjo6VHlwZTo6RXF1YWxzU2lnbikpIHsKICAgICAgICAgUEFSU0UoY29uc3RhbnRFeHByZXNzaW9u
LCBDb25zdGFudEV4cHJlc3Npb24pOwotICAgICAgICByZXR1cm4gQVNUOjpFbnVtZXJhdGlvbk1l
bWJlcigqaWRlbnRpZmllciwgV1RGTW92ZShuYW1lKSwgV1RGTW92ZSgqY29uc3RhbnRFeHByZXNz
aW9uKSk7CisKKyAgICAgICAgT3B0aW9uYWw8aW50NjRfdD4gdmFsdWU7CisgICAgICAgIGNvbnN0
YW50RXhwcmVzc2lvbi0+dmlzaXQoV1RGOjptYWtlVmlzaXRvcihbJl0oQVNUOjpJbnRlZ2VyTGl0
ZXJhbCYgaW50ZWdlckxpdGVyYWwpIHsKKyAgICAgICAgICAgIHZhbHVlID0gaW50ZWdlckxpdGVy
YWwudmFsdWUoKTsKKyAgICAgICAgfSwgWyZdKEFTVDo6VW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCYg
dW5zaWduZWRJbnRlZ2VyTGl0ZXJhbCkgeworICAgICAgICAgICAgdmFsdWUgPSB1bnNpZ25lZElu
dGVnZXJMaXRlcmFsLnZhbHVlKCk7CisgICAgICAgIH0sIFsmXShBU1Q6OkZsb2F0TGl0ZXJhbCYp
IHsKKyAgICAgICAgfSwgWyZdKEFTVDo6TnVsbExpdGVyYWwmKSB7CisgICAgICAgIH0sIFsmXShB
U1Q6OkJvb2xlYW5MaXRlcmFsJikgeworICAgICAgICB9LCBbJl0oQVNUOjpFbnVtZXJhdGlvbk1l
bWJlckxpdGVyYWwmKSB7CisgICAgICAgIH0pKTsKKworICAgICAgICBpZiAoIXZhbHVlKQorICAg
ICAgICAgICAgcmV0dXJuIFVuZXhwZWN0ZWQ8RXJyb3I+KCJlbnVtIGluaXRpYWxpemF0aW9uIHZh
bHVlcyBjYW4gb25seSBiZSBhbiBpbnQgb3IgdWludCBjb25zdGFudC4iKTsKKyAgICAgICAgcmV0
dXJuIEFTVDo6RW51bWVyYXRpb25NZW1iZXIoKmlkZW50aWZpZXIsIFdURk1vdmUobmFtZSksICp2
YWx1ZSk7CiAgICAgfQotICAgIHJldHVybiBBU1Q6OkVudW1lcmF0aW9uTWVtYmVyKCppZGVudGlm
aWVyLCBXVEZNb3ZlKG5hbWUpKTsKKyAgICByZXR1cm4gQVNUOjpFbnVtZXJhdGlvbk1lbWJlcigq
aWRlbnRpZmllciwgV1RGTW92ZShuYW1lKSwgZGVmYWx0VmFsdWUpOwogfQogCiBhdXRvIFBhcnNl
cjo6cGFyc2VOYXRpdmVUeXBlRGVjbGFyYXRpb24oKSAtPiBFeHBlY3RlZDxBU1Q6Ok5hdGl2ZVR5
cGVEZWNsYXJhdGlvbiwgRXJyb3I+CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdw
dS9XSExTTC9XSExTTFBhcnNlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgJKHJldmlzaW9uIDI0NzQxMCkKKysrIFNvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUGFyc2VyLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTE4NCw3ICsxODQsNyBAQCBwcml2YXRlOgogICAgIEV4cGVjdGVkPEFTVDo6U3RydWN0
dXJlRWxlbWVudCwgRXJyb3I+IHBhcnNlU3RydWN0dXJlRWxlbWVudCgpOwogICAgIEV4cGVjdGVk
PEFTVDo6U3RydWN0dXJlRGVmaW5pdGlvbiwgRXJyb3I+IHBhcnNlU3RydWN0dXJlRGVmaW5pdGlv
bigpOwogICAgIEV4cGVjdGVkPEFTVDo6RW51bWVyYXRpb25EZWZpbml0aW9uLCBFcnJvcj4gcGFy
c2VFbnVtZXJhdGlvbkRlZmluaXRpb24oKTsKLSAgICBFeHBlY3RlZDxBU1Q6OkVudW1lcmF0aW9u
TWVtYmVyLCBFcnJvcj4gcGFyc2VFbnVtZXJhdGlvbk1lbWJlcigpOworICAgIEV4cGVjdGVkPEFT
VDo6RW51bWVyYXRpb25NZW1iZXIsIEVycm9yPiBwYXJzZUVudW1lcmF0aW9uTWVtYmVyKGludDY0
X3QgZGVmYXVsdFZhbHVlKTsKICAgICBFeHBlY3RlZDxBU1Q6Ok5hdGl2ZVR5cGVEZWNsYXJhdGlv
biwgRXJyb3I+IHBhcnNlTmF0aXZlVHlwZURlY2xhcmF0aW9uKCk7CiAgICAgRXhwZWN0ZWQ8QVNU
OjpOdW1UaHJlYWRzRnVuY3Rpb25BdHRyaWJ1dGUsIEVycm9yPiBwYXJzZU51bVRocmVhZHNGdW5j
dGlvbkF0dHJpYnV0ZSgpOwogICAgIEV4cGVjdGVkPEFTVDo6QXR0cmlidXRlQmxvY2ssIEVycm9y
PiBwYXJzZUF0dHJpYnV0ZUJsb2NrKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dl
YmdwdS9XSExTTC9XSExTTFZpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAJKHJldmlzaW9uIDI0NzQxMCkK
KysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMVmlzaXRvci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MywxMCArMTQzLDggQEAgdm9pZCBWaXNpdG9yOjp2aXNpdChB
U1Q6OlN0cnVjdHVyZUVsZW1lbgogICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKnN0cnVjdHVy
ZUVsZW1lbnQuc2VtYW50aWMoKSk7CiB9CiAKLXZvaWQgVmlzaXRvcjo6dmlzaXQoQVNUOjpFbnVt
ZXJhdGlvbk1lbWJlciYgZW51bWVyYXRpb25NZW1iZXIpCit2b2lkIFZpc2l0b3I6OnZpc2l0KEFT
VDo6RW51bWVyYXRpb25NZW1iZXImKQogewotICAgIGlmIChlbnVtZXJhdGlvbk1lbWJlci52YWx1
ZSgpKQotICAgICAgICBjaGVja0Vycm9yQW5kVmlzaXQoKmVudW1lcmF0aW9uTWVtYmVyLnZhbHVl
KCkpOwogfQogCiB2b2lkIFZpc2l0b3I6OnZpc2l0KEFTVDo6RnVuY3Rpb25EZWNsYXJhdGlvbiYg
ZnVuY3Rpb25EZWNsYXJhdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML0FTVC9XSExTTEVudW1lcmF0aW9uTWVtYmVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIu
aAkocmV2aXNpb24gMjQ3NDEwKQorKysgU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvQVNUL1dITFNMRW51bWVyYXRpb25NZW1iZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAg
KzQxLDEwIEBAIG5hbWVzcGFjZSBBU1QgewogCiBjbGFzcyBFbnVtZXJhdGlvbk1lbWJlciB7CiBw
dWJsaWM6Ci0gICAgRW51bWVyYXRpb25NZW1iZXIoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJp
bmcmJiBuYW1lLCBPcHRpb25hbDxDb25zdGFudEV4cHJlc3Npb24+JiYgdmFsdWUgPSBXVEY6Om51
bGxvcHQpCisgICAgRW51bWVyYXRpb25NZW1iZXIoQ29kZUxvY2F0aW9uIGxvY2F0aW9uLCBTdHJp
bmcmJiBuYW1lLCBpbnQ2NF90IHZhbHVlKQogICAgICAgICA6IG1fY29kZUxvY2F0aW9uKGxvY2F0
aW9uKQogICAgICAgICAsIG1fbmFtZShXVEZNb3ZlKG5hbWUpKQotICAgICAgICAsIG1fdmFsdWUo
V1RGTW92ZSh2YWx1ZSkpCisgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQog
CkBAIC01NSwxOCArNTUsMTIgQEAgcHVibGljOgogCiAgICAgY29uc3QgQ29kZUxvY2F0aW9uJiBj
b2RlTG9jYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2NvZGVMb2NhdGlvbjsgfQogICAgIFN0cmlu
ZyBuYW1lKCkgeyByZXR1cm4gbV9uYW1lOyB9Ci0gICAgT3B0aW9uYWw8Q29uc3RhbnRFeHByZXNz
aW9uPiYgdmFsdWUoKSB7IHJldHVybiBtX3ZhbHVlOyB9Ci0KLSAgICB2b2lkIHNldFZhbHVlKENv
bnN0YW50RXhwcmVzc2lvbiYmIHZhbHVlKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCFtX3ZhbHVl
KTsKLSAgICAgICAgbV92YWx1ZSA9IFdURk1vdmUodmFsdWUpOwotICAgIH0KKyAgICBpbnQ2NF90
IHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQogCiBwcml2YXRlOgogICAgIENvZGVMb2NhdGlv
biBtX2NvZGVMb2NhdGlvbjsKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIE9wdGlvbmFsPENvbnN0
YW50RXhwcmVzc2lvbj4gbV92YWx1ZTsKKyAgICBpbnQ2NF90IG1fdmFsdWU7CiB9OwogCiB1c2lu
ZyBFbnVtZXJhdGlvbk1lbWJlcnMgPSBWZWN0b3I8RW51bWVyYXRpb25NZW1iZXI+OwpJbmRleDog
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xGdW5jdGlvbldy
aXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hM
U0wvTWV0YWwvV0hMU0xGdW5jdGlvbldyaXRlci5jcHAJKHJldmlzaW9uIDI0NzQxMCkKKysrIFNv
dXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML01ldGFsL1dITFNMRnVuY3Rpb25Xcml0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00ODAsNyArNDgwLDcgQEAgdm9pZCBGdW5jdGlvbkRl
ZmluaXRpb25Xcml0ZXI6OnZpc2l0KEFTVAogICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxp
dGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOwogICAgIGF1dG8gdmFyaWFibGVOYW1lID0g
Z2VuZXJhdGVOZXh0VmFyaWFibGVOYW1lKCk7CiAgICAgYXV0byBtYW5nbGVkVHlwZU5hbWUgPSBt
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLnJl
c29sdmVkVHlwZSgpKTsKLSAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFu
Z2xlZFR5cGVOYW1lLCAnICcsIHZhcmlhYmxlTmFtZSwgIiA9ICIsIG1hbmdsZWRUeXBlTmFtZSwg
Jy4nLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKCplbnVtZXJh
dGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSksICI7XG4iKSk7CisgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKG1hbmdsZWRUeXBlTmFtZSwgJyAnLCB2YXJp
YWJsZU5hbWUsICIgPSAiLCBtYW5nbGVkVHlwZU5hbWUsICI6OiIsIG1fdHlwZU5hbWVyLm1hbmds
ZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVt
ZXJhdGlvbk1lbWJlcigpKSwgIjtcbiIpKTsKICAgICBhcHBlbmRSaWdodFZhbHVlKGVudW1lcmF0
aW9uTWVtYmVyTGl0ZXJhbCwgdmFyaWFibGVOYW1lKTsKIH0KIApAQCAtNzA1LDcgKzcwNSw3IEBA
IFN0cmluZyBGdW5jdGlvbkRlZmluaXRpb25Xcml0ZXI6OmNvbnN0YW4KICAgICB9LCBbJl0oQVNU
OjpFbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwmIGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbCkgLT4g
U3RyaW5nIHsKICAgICAgICAgQVNTRVJUKGVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5lbnVtZXJh
dGlvbkRlZmluaXRpb24oKSk7CiAgICAgICAgIEFTU0VSVChlbnVtZXJhdGlvbk1lbWJlckxpdGVy
YWwuZW51bWVyYXRpb25EZWZpbml0aW9uKCkpOwotICAgICAgICByZXR1cm4gbWFrZVN0cmluZyht
X3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoKmVudW1lcmF0aW9uTWVtYmVyTGl0ZXJhbC5l
bnVtZXJhdGlvbkRlZmluaXRpb24oKSksICcuJywgbV90eXBlTmFtZXIubWFuZ2xlZE5hbWVGb3JF
bnVtZXJhdGlvbk1lbWJlcigqZW51bWVyYXRpb25NZW1iZXJMaXRlcmFsLmVudW1lcmF0aW9uTWVt
YmVyKCkpKTsKKyAgICAgICAgcmV0dXJuIG1ha2VTdHJpbmcobV90eXBlTmFtZXIubWFuZ2xlZE5h
bWVGb3JUeXBlKCplbnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25EZWZpbml0aW9u
KCkpLCAiOjoiLCBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvckVudW1lcmF0aW9uTWVtYmVyKCpl
bnVtZXJhdGlvbk1lbWJlckxpdGVyYWwuZW51bWVyYXRpb25NZW1iZXIoKSkpOwogICAgIH0pKTsK
IH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hM
U0xUeXBlTmFtZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2Vi
Z3B1L1dITFNML01ldGFsL1dITFNMVHlwZU5hbWVyLmNwcAkocmV2aXNpb24gMjQ3NDEwKQorKysg
U291cmNlL1dlYkNvcmUvTW9kdWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xUeXBlTmFtZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsNyArNDEzLDcgQEAgdm9pZCBUeXBlTmFtZXI6OmVt
aXROYW1lZFR5cGVEZWZpbml0aW9uKAogICAgICAgICBhdXRvJiBiYXNlVHlwZSA9IGVudW1lcmF0
aW9uRGVmaW5pdGlvbi50eXBlKCkudW5pZnlOb2RlKCk7CiAgICAgICAgIHN0cmluZ0J1aWxkZXIu
YXBwZW5kKG1ha2VTdHJpbmcoImVudW0gY2xhc3MgIiwgbWFuZ2xlZE5hbWVGb3JUeXBlKGVudW1l
cmF0aW9uRGVmaW5pdGlvbiksICIgOiAiLCBtYW5nbGVkTmFtZUZvclR5cGUoZG93bmNhc3Q8QVNU
OjpOYW1lZFR5cGU+KGJhc2VUeXBlKSksICIge1xuIikpOwogICAgICAgICBmb3IgKGF1dG8mIGVu
dW1lcmF0aW9uTWVtYmVyIDogZW51bWVyYXRpb25EZWZpbml0aW9uLmVudW1lcmF0aW9uTWVtYmVy
cygpKQotICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIs
IG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpLCAiLFxu
IikpOworICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZygiICAgICIs
IG1hbmdsZWROYW1lRm9yRW51bWVyYXRpb25NZW1iZXIoZW51bWVyYXRpb25NZW1iZXIpLCAiID0g
IiwgZW51bWVyYXRpb25NZW1iZXIuZ2V0KCkudmFsdWUoKSwgIixcbiIpKTsKICAgICAgICAgc3Ry
aW5nQnVpbGRlci5hcHBlbmQoIn07XG4iKTsKICAgICB9IGVsc2UgaWYgKGlzPEFTVDo6TmF0aXZl
VHlwZURlY2xhcmF0aW9uPihuYW1lZFR5cGUpKSB7CiAgICAgICAgIC8vIE5hdGl2ZSB0eXBlcyBh
bHJlYWR5IGhhdmUgZGVmaW5pdGlvbnMuIFRoZXJlJ3Mgbm90aGluZyB0byBkby4KSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDI0NzQxMCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDE1IEBACisyMDE5LTA3LTE3ICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBw
bGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTWFrZSBlbnVtcyB3b3JrCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTk2MzQKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHdlYmdwdS93aGxzbC1lbnVtcy0y
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWVudW1zLTIuaHRt
bDogQWRkZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWVudW1zLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICogd2ViZ3B1L3dobHNsLWVudW1zLmh0bWw6IEFkZGVkLgorCiAyMDE5LTA3
LTEyICBZb3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBTdG9wcGlu
ZyBhIGNsb25lZCBNZWRpYVN0cmVhbSB2aWRlbyB0cmFjayBzaG91bGQgbm90IHN0b3AgYW55IG90
aGVyIHZpZGVvIHRyYWNrCkluZGV4OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bXMtMi1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW1z
LTItZXhwZWN0ZWQudHh0CShub25leGlzdGVudCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxz
bC1lbnVtcy0yLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQgQEAKKwor
UEFTUyBzaW1wbGVFbnVtIAorUEFTUyBlbnVtV2l0aEV4cGxpY2l0SW50QmFzZSAKKwpJbmRleDog
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW1zLTIuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bXMtMi5odG1sCShub25leGlzdGVudCkKKysrIExheW91
dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVtcy0yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw0NTUgQEAKKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04Pgor
PG1ldGEgbmFtZT0idGltZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+RW51bXMuPC90aXRs
ZT4KKzxzY3JpcHQgc3JjPSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9ImpzL3dlYmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy90ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
cmVzb3VyY2VzL3Rlc3RoYXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25z
dCB3aGxzbFRlc3RzID0ge307CisKK3dobHNsVGVzdHMuc2ltcGxlRW51bSA9IGFzeW5jICgpID0+
IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgZW51bSBGb28geworICAgICAgICAgICAg
V2FyLAorICAgICAgICAgICAgRmFtaW5lLAorICAgICAgICAgICAgUGVzdGlsZW5jZSwKKyAgICAg
ICAgICAgIERlYXRoCisgICAgICAgIH0KKworICAgICAgICBGb28gX3dhcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBGb28uV2FyOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB3
YXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3dhcigpID09IEZvby5XYXI7Cisg
ICAgICAgIH0KKworICAgICAgICBGb28gX2ZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBGb28uRmFtaW5lOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBmYW1pbmUoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2ZhbWluZSgpID09IEZvby5GYW1pbmU7Cisg
ICAgICAgIH0KKworICAgICAgICBGb28gX3Blc3RpbGVuY2UoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRm9vLlBlc3RpbGVuY2U7CisgICAgICAgIH0KKworICAgICAgICBib29sIHBl
c3RpbGVuY2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3Blc3RpbGVuY2UoKSA9
PSBGb28uUGVzdGlsZW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIEZvbyBfZGVhdGgoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkRlYXRoOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBkZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZGVhdGgoKSA9
PSBGb28uRGVhdGg7CisgICAgICAgIH0KKworICAgICAgICBib29sIF9lcXVhbHMoRm9vIGEsIEZv
byBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAgICB9CisK
KyAgICAgICAgYm9vbCBfbm90RXF1YWxzKEZvbyBhLCBGb28gYikKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIGEgIT0gYjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdGVzdFNpbXBs
ZUVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9lcXVhbHMoRm9vLldhciwg
Rm9vLldhcik7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRlc3RBbm90aGVyRXF1YWwoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uUGVzdGlsZW5jZSwgRm9v
LlBlc3RpbGVuY2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0Tm90RXF1YWwoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uRmFtaW5lLCBGb28uRGVh
dGgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0U2ltcGxlTm90RXF1YWwoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gX25vdEVxdWFscyhGb28uV2FyLCBGb28uV2FyKTsK
KyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdGVzdEFub3RoZXJOb3RFcXVhbCgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBfbm90RXF1YWxzKEZvby5QZXN0aWxlbmNlLCBGb28uUGVz
dGlsZW5jZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRlc3ROb3ROb3RFcXVhbCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfbm90RXF1YWxzKEZvby5GYW1pbmUsIEZvby5E
ZWF0aCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgX2ludFdhcigpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpbnQoX3dhcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBp
bnRXYXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2ludFdhcigpOworICAgICAg
ICB9CisKKyAgICAgICAgaW50IF9pbnRGYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaW50KF9mYW1pbmUoKSk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgaW50RmFtaW5l
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9pbnRGYW1pbmUoKTsKKyAgICAgICAg
fQorCisgICAgICAgIGludCBfaW50UGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBpbnQoX3Blc3RpbGVuY2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgaW50
UGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfaW50UGVzdGlsZW5j
ZSgpOworICAgICAgICB9CisKKyAgICAgICAgaW50IF9pbnREZWF0aCgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBpbnQoX2RlYXRoKCkpOworICAgICAgICB9CisKKyAgICAgICAgaW50
IGludERlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9pbnREZWF0aCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgaW50IHdhclZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIF93YXIoKS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBmYW1pbmVW
YWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZmFtaW5lKCkudmFsdWU7Cisg
ICAgICAgIH0KKworICAgICAgICBpbnQgcGVzdGlsZW5jZVZhbHVlKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIF9wZXN0aWxlbmNlKCkudmFsdWU7CisgICAgICAgIH0KKworICAgICAg
ICBpbnQgZGVhdGhWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZGVhdGgo
KS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCB3YXJWYWx1ZUxpdGVyYWwoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLldhci52YWx1ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIGludCBmYW1pbmVWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gRm9vLkZhbWluZS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwZXN0aWxl
bmNlVmFsdWVMaXRlcmFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5QZXN0
aWxlbmNlLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaW50IGRlYXRoVmFsdWVMaXRlcmFs
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5EZWF0aC52YWx1ZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgaW50V2FyQmFja3dhcmRzKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEZvbyhfaW50V2FyKCkpID09IEZvby5XYXI7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIGludEZhbWluZUJhY2t3YXJkcygpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBGb28oX2ludEZhbWluZSgpKSA9PSBGb28uRmFtaW5lOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBpbnRQZXN0aWxlbmNlQmFja3dhcmRzKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEZvbyhfaW50UGVzdGlsZW5jZSgpKSA9PSBGb28uUGVzdGlsZW5jZTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgaW50RGVhdGhCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gRm9vKF9pbnREZWF0aCgpKSA9PSBGb28uRGVhdGg7CisgICAgICAgIH0KKyAg
ICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0s
ICJ3YXIiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAiZmFtaW5lIiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2UiLCBbXSksIHRydWUpOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGgi
LCBbXSksIHRydWUpOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9u
KHByb2dyYW0sICJ0ZXN0U2ltcGxlRXF1YWwiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdEFub3RoZXJFcXVhbCIsIFtd
KSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJ0ZXN0Tm90RXF1YWwiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTaW1wbGVOb3RFcXVhbCIsIFtdKSwgZmFs
c2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAi
dGVzdEFub3RoZXJOb3RFcXVhbCIsIFtdKSwgZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdE5vdE5vdEVxdWFsIiwgW10pLCB0cnVl
KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiaW50
V2FyIiwgW10pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihw
cm9ncmFtLCAiaW50RmFtaW5lIiwgW10pLCAxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNh
bGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiaW50UGVzdGlsZW5jZSIsIFtdKSwgMik7CisgICAgYXNz
ZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImludERlYXRoIiwgW10p
LCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
d2FyVmFsdWUiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJmYW1pbmVWYWx1ZSIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2VWYWx1ZSIsIFtdKSwgMik7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImRlYXRo
VmFsdWUiLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJ3YXJWYWx1ZUxpdGVyYWwiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmVWYWx1ZUxpdGVyYWwiLCBbXSks
IDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJw
ZXN0aWxlbmNlVmFsdWVMaXRlcmFsIiwgW10pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGhWYWx1ZUxpdGVyYWwiLCBbXSksIDMpOwor
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJpbnRX
YXJCYWNrd2FyZHMiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJv
b2xGdW5jdGlvbihwcm9ncmFtLCAiaW50RmFtaW5lQmFja3dhcmRzIiwgW10pLCB0cnVlKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImludFBlc3Rp
bGVuY2VCYWNrd2FyZHMiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiaW50RGVhdGhCYWNrd2FyZHMiLCBbXSksIHRydWUpOwor
fTsKKword2hsc2xUZXN0cy5lbnVtV2l0aEV4cGxpY2l0SW50QmFzZSA9IGFzeW5jICgpID0+IHsK
KyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgZW51bSBGb28gOiBpbnQgeworICAgICAgICAg
ICAgV2FyLAorICAgICAgICAgICAgRmFtaW5lLAorICAgICAgICAgICAgUGVzdGlsZW5jZSwKKyAg
ICAgICAgICAgIERlYXRoCisgICAgICAgIH0KKworICAgICAgICBGb28gX3dhcigpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBGb28uV2FyOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCB3YXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3dhcigpID09IEZvby5XYXI7
CisgICAgICAgIH0KKworICAgICAgICBGb28gX2ZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBGb28uRmFtaW5lOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBmYW1pbmUo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2ZhbWluZSgpID09IEZvby5GYW1pbmU7
CisgICAgICAgIH0KKworICAgICAgICBGb28gX3Blc3RpbGVuY2UoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRm9vLlBlc3RpbGVuY2U7CisgICAgICAgIH0KKworICAgICAgICBib29s
IHBlc3RpbGVuY2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX3Blc3RpbGVuY2Uo
KSA9PSBGb28uUGVzdGlsZW5jZTsKKyAgICAgICAgfQorCisgICAgICAgIEZvbyBfZGVhdGgoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLkRlYXRoOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBkZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZGVhdGgo
KSA9PSBGb28uRGVhdGg7CisgICAgICAgIH0KKworICAgICAgICBib29sIF9lcXVhbHMoRm9vIGEs
IEZvbyBiKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSA9PSBiOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBfbm90RXF1YWxzKEZvbyBhLCBGb28gYikKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIGEgIT0gYjsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdGVzdFNp
bXBsZUVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9lcXVhbHMoRm9vLldh
ciwgRm9vLldhcik7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRlc3RBbm90aGVyRXF1YWwo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uUGVzdGlsZW5jZSwg
Rm9vLlBlc3RpbGVuY2UpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0Tm90RXF1YWwo
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2VxdWFscyhGb28uRmFtaW5lLCBGb28u
RGVhdGgpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0U2ltcGxlTm90RXF1YWwoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX25vdEVxdWFscyhGb28uV2FyLCBGb28uV2Fy
KTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgdGVzdEFub3RoZXJOb3RFcXVhbCgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfbm90RXF1YWxzKEZvby5QZXN0aWxlbmNlLCBGb28u
UGVzdGlsZW5jZSk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRlc3ROb3ROb3RFcXVhbCgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfbm90RXF1YWxzKEZvby5GYW1pbmUsIEZv
by5EZWF0aCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgX2ludFdhcigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpbnQoX3dhcigpKTsKKyAgICAgICAgfQorCisgICAgICAgIGlu
dCBpbnRXYXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2ludFdhcigpOworICAg
ICAgICB9CisKKyAgICAgICAgaW50IF9pbnRGYW1pbmUoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gaW50KF9mYW1pbmUoKSk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgaW50RmFt
aW5lKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9pbnRGYW1pbmUoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGludCBfaW50UGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpbnQoX3Blc3RpbGVuY2UoKSk7CisgICAgICAgIH0KKworICAgICAgICBpbnQg
aW50UGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfaW50UGVzdGls
ZW5jZSgpOworICAgICAgICB9CisKKyAgICAgICAgaW50IF9pbnREZWF0aCgpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpbnQoX2RlYXRoKCkpOworICAgICAgICB9CisKKyAgICAgICAg
aW50IGludERlYXRoKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9pbnREZWF0aCgp
OworICAgICAgICB9CisKKyAgICAgICAgaW50IHdhclZhbHVlKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIF93YXIoKS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBmYW1p
bmVWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZmFtaW5lKCkudmFsdWU7
CisgICAgICAgIH0KKworICAgICAgICBpbnQgcGVzdGlsZW5jZVZhbHVlKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIF9wZXN0aWxlbmNlKCkudmFsdWU7CisgICAgICAgIH0KKworICAg
ICAgICBpbnQgZGVhdGhWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZGVh
dGgoKS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCB3YXJWYWx1ZUxpdGVyYWwoKQor
ICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gRm9vLldhci52YWx1ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGludCBmYW1pbmVWYWx1ZUxpdGVyYWwoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRm9vLkZhbWluZS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBwZXN0
aWxlbmNlVmFsdWVMaXRlcmFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5Q
ZXN0aWxlbmNlLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgaW50IGRlYXRoVmFsdWVMaXRl
cmFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5EZWF0aC52YWx1ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIGJvb2wgaW50V2FyQmFja3dhcmRzKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIEZvbyhfaW50V2FyKCkpID09IEZvby5XYXI7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIGludEZhbWluZUJhY2t3YXJkcygpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBGb28oX2ludEZhbWluZSgpKSA9PSBGb28uRmFtaW5lOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCBpbnRQZXN0aWxlbmNlQmFja3dhcmRzKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIEZvbyhfaW50UGVzdGlsZW5jZSgpKSA9PSBGb28uUGVzdGlsZW5jZTsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgaW50RGVhdGhCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gRm9vKF9pbnREZWF0aCgpKSA9PSBGb28uRGVhdGg7CisgICAgICAgIH0K
KyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJ3YXIiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZmFtaW5lIiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2UiLCBbXSksIHRydWUp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZGVh
dGgiLCBbXSksIHRydWUpOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHByb2dyYW0sICJ0ZXN0U2ltcGxlRXF1YWwiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdEFub3RoZXJFcXVhbCIs
IFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJ0ZXN0Tm90RXF1YWwiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTaW1wbGVOb3RFcXVhbCIsIFtdKSwg
ZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFt
LCAidGVzdEFub3RoZXJOb3RFcXVhbCIsIFtdKSwgZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdE5vdE5vdEVxdWFsIiwgW10pLCB0
cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAi
aW50V2FyIiwgW10pLCAwKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlv
bihwcm9ncmFtLCAiaW50RmFtaW5lIiwgW10pLCAxKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0
IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiaW50UGVzdGlsZW5jZSIsIFtdKSwgMik7CisgICAg
YXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImludERlYXRoIiwg
W10pLCAzKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFt
LCAid2FyVmFsdWUiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1
bmN0aW9uKHByb2dyYW0sICJmYW1pbmVWYWx1ZSIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFs
cyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2VWYWx1ZSIsIFtdKSwg
Mik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImRl
YXRoVmFsdWUiLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0
aW9uKHByb2dyYW0sICJ3YXJWYWx1ZUxpdGVyYWwiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVh
bHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmVWYWx1ZUxpdGVyYWwiLCBb
XSksIDEpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0s
ICJwZXN0aWxlbmNlVmFsdWVMaXRlcmFsIiwgW10pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGhWYWx1ZUxpdGVyYWwiLCBbXSksIDMp
OworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJp
bnRXYXJCYWNrd2FyZHMiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2Fs
bEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiaW50RmFtaW5lQmFja3dhcmRzIiwgW10pLCB0cnVlKTsK
KyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgImludFBl
c3RpbGVuY2VCYWNrd2FyZHMiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiaW50RGVhdGhCYWNrd2FyZHMiLCBbXSksIHRydWUp
OworfTsKKworcnVuVGVzdHMod2hsc2xUZXN0cyk7Cis8L3NjcmlwdD4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1lbnVtcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWVudW1zLWV4cGVjdGVkLnR4dAkobm9uZXhpc3Rl
bnQpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtZW51bXMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQgQEAKKworUEFTUyBmYWlsVHJpY2t5RG91YmxlWmVybyAK
K1BBU1Mgc2ltcGxlRGVjbGFyYXRpb24gCitQQVNTIGVudW1XaXRoVWludEJhc2UgCitQQVNTIGVu
dW1XaXRob3V0WmVybyAKK1BBU1MgZW51bU5lZ2F0aXZlVWludCAKK1BBU1MgcGFzdEludE1heCAK
K1BBU1MgZW51bVdpdGhTb21lTWFudWFsVmFsdWVzIAorUEFTUyBlbnVtU3dpdGNoQnJlYWtFeGhh
dXN0aXZlIAorUEFTUyBlbnVtU3dpdGNoQnJlYWtOb3RRdWl0ZUV4aGF1c3RpdmVXaXRoRGVmYXVs
dCAKK1BBU1MgZW51bVdpdGhNYW51YWxWYWx1ZXMgCitQQVNTIGVudW1Td2l0Y2hCcmVha05vdFF1
aXRlRXhoYXVzdGl2ZSAKK1BBU1MgY29weUNvbnN0cnVjdG9ycyAKKwpJbmRleDogTGF5b3V0VGVz
dHMvd2ViZ3B1L3dobHNsLWVudW1zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvd2Vi
Z3B1L3dobHNsLWVudW1zLmh0bWwJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1
L3dobHNsLWVudW1zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NzAgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+Cis8bWV0YSBjaGFyc2V0PXV0Zi04PgorPG1ldGEgbmFtZT0idGlt
ZW91dCIgY29udGVudD0ibG9uZyI+Cis8dGl0bGU+RW51bXMuPC90aXRsZT4KKzxzY3JpcHQgc3Jj
PSJqcy93aGxzbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9ImpzL3dl
YmdwdS1mdW5jdGlvbnMuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy90
ZXN0aGFybmVzcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL3Rlc3Ro
YXJuZXNzcmVwb3J0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQ+Citjb25zdCB3aGxzbFRlc3RzID0g
e307CisKK3dobHNsVGVzdHMuZmFpbFRyaWNreURvdWJsZVplcm8gPSBhc3luYyAoKSA9PiB7Cisg
ICAgY29uc3QgcHJvZ3JhbSA9IGAKKyAgICAgICAgZW51bSBFIHsKKyAgICAgICAgICAgIEYsCisg
ICAgICAgICAgICBHID0gLTIsCisgICAgICAgICAgICBILAorICAgICAgICAgICAgSSAvLyBzaG91
bGQgZ2V0IHplcm8sIGFuZCB0aGF0J3MgYSBkdXBlLgorICAgICAgICB9CisgICAgICAgIGludCBm
b28oKQorICAgICAgICB7CisgICAgICAgICAgICBFIGUgPSBFLkZvbzsKKyAgICAgICAgICAgIHJl
dHVybiA0MjsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXdhaXQgY2hlY2tGYWlsKHByb2dyYW0p
OworfTsKKword2hsc2xUZXN0cy5zaW1wbGVEZWNsYXJhdGlvbiA9IGFzeW5jICgpID0+IHsKKyAg
ICBjb25zdCBwcm9ncmFtID0gYAorICAgICAgICBlbnVtIEUgeworICAgICAgICAgICAgRm9vLAor
ICAgICAgICAgICAgQmFyCisgICAgICAgIH0KKyAgICAgICAgaW50IGZvbygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIEUgZSA9IEUuRm9vOworICAgICAgICAgICAgcmV0dXJuIDQyOworICAgICAg
ICB9CisgICAgYDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9n
cmFtLCAiZm9vIiwgW10pLCA0Mik7Cit9OworCit3aGxzbFRlc3RzLmVudW1XaXRoVWludEJhc2Ug
PSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGVudW0gRm9vIDog
dWludCB7CisgICAgICAgICAgICBXYXIsCisgICAgICAgICAgICBGYW1pbmUsCisgICAgICAgICAg
ICBQZXN0aWxlbmNlLAorICAgICAgICAgICAgRGVhdGgKKyAgICAgICAgfQorCisgICAgICAgIEZv
byBfd2FyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5XYXI7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHdhcigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBf
d2FyKCkgPT0gRm9vLldhcjsKKyAgICAgICAgfQorCisgICAgICAgIEZvbyBfZmFtaW5lKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5GYW1pbmU7CisgICAgICAgIH0KKworICAg
ICAgICBib29sIGZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZmFtaW5l
KCkgPT0gRm9vLkZhbWluZTsKKyAgICAgICAgfQorCisgICAgICAgIEZvbyBfcGVzdGlsZW5jZSgp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uUGVzdGlsZW5jZTsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgcGVzdGlsZW5jZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBfcGVzdGlsZW5jZSgpID09IEZvby5QZXN0aWxlbmNlOworICAgICAgICB9CisKKyAgICAg
ICAgRm9vIF9kZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uRGVhdGg7
CisgICAgICAgIH0KKworICAgICAgICBib29sIGRlYXRoKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIF9kZWF0aCgpID09IEZvby5EZWF0aDsKKyAgICAgICAgfQorCisgICAgICAgIGJv
b2wgX2VxdWFscyhGb28gYSwgRm9vIGIpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBh
ID09IGI7CisgICAgICAgIH0KKworICAgICAgICBib29sIF9ub3RFcXVhbHMoRm9vIGEsIEZvbyBi
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYSAhPSBiOworICAgICAgICB9CisKKyAg
ICAgICAgYm9vbCB0ZXN0U2ltcGxlRXF1YWwoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gX2VxdWFscyhGb28uV2FyLCBGb28uV2FyKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
dGVzdEFub3RoZXJFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZXF1YWxz
KEZvby5QZXN0aWxlbmNlLCBGb28uUGVzdGlsZW5jZSk7CisgICAgICAgIH0KKworICAgICAgICBi
b29sIHRlc3ROb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZXF1YWxz
KEZvby5GYW1pbmUsIEZvby5EZWF0aCk7CisgICAgICAgIH0KKworICAgICAgICBib29sIHRlc3RT
aW1wbGVOb3RFcXVhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfbm90RXF1YWxz
KEZvby5XYXIsIEZvby5XYXIpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCB0ZXN0QW5vdGhl
ck5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9ub3RFcXVhbHMoRm9v
LlBlc3RpbGVuY2UsIEZvby5QZXN0aWxlbmNlKTsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wg
dGVzdE5vdE5vdEVxdWFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF9ub3RFcXVh
bHMoRm9vLkZhbWluZSwgRm9vLkRlYXRoKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgX3Vp
bnRXYXIoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdWludChfd2FyKCkpOworICAg
ICAgICB9CisKKyAgICAgICAgdWludCB1aW50V2FyKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIF91aW50V2FyKCk7CisgICAgICAgIH0KKworICAgICAgICB1aW50IF91aW50RmFtaW5l
KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHVpbnQoX2ZhbWluZSgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHVpbnQgdWludEZhbWluZSgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiBfdWludEZhbWluZSgpOworICAgICAgICB9CisKKyAgICAgICAgdWludCBfdWludFBl
c3RpbGVuY2UoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdWludChfcGVzdGlsZW5j
ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgdWludFBlc3RpbGVuY2UoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gX3VpbnRQZXN0aWxlbmNlKCk7CisgICAgICAgIH0KKwor
ICAgICAgICB1aW50IF91aW50RGVhdGgoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
dWludChfZGVhdGgoKSk7CisgICAgICAgIH0KKworICAgICAgICB1aW50IHVpbnREZWF0aCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfdWludERlYXRoKCk7CisgICAgICAgIH0KKwor
ICAgICAgICB1aW50IHdhclZhbHVlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIF93
YXIoKS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgZmFtaW5lVmFsdWUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gX2ZhbWluZSgpLnZhbHVlOworICAgICAgICB9CisK
KyAgICAgICAgdWludCBwZXN0aWxlbmNlVmFsdWUoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gX3Blc3RpbGVuY2UoKS52YWx1ZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQgZGVh
dGhWYWx1ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBfZGVhdGgoKS52YWx1ZTsK
KyAgICAgICAgfQorCisgICAgICAgIHVpbnQgd2FyVmFsdWVMaXRlcmFsKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgcmV0dXJuIEZvby5XYXIudmFsdWU7CisgICAgICAgIH0KKworICAgICAgICB1
aW50IGZhbWluZVZhbHVlTGl0ZXJhbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBG
b28uRmFtaW5lLnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgdWludCBwZXN0aWxlbmNlVmFs
dWVMaXRlcmFsKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEZvby5QZXN0aWxlbmNl
LnZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgdWludCBkZWF0aFZhbHVlTGl0ZXJhbCgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBGb28uRGVhdGgudmFsdWU7CisgICAgICAgIH0K
KworICAgICAgICBib29sIHVpbnRXYXJCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gRm9vKF91aW50V2FyKCkpID09IEZvby5XYXI7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHVpbnRGYW1pbmVCYWNrd2FyZHMoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gRm9vKF91aW50RmFtaW5lKCkpID09IEZvby5GYW1pbmU7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIHVpbnRQZXN0aWxlbmNlQmFja3dhcmRzKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIEZvbyhfdWludFBlc3RpbGVuY2UoKSkgPT0gRm9vLlBlc3RpbGVuY2U7CisgICAgICAg
IH0KKworICAgICAgICBib29sIHVpbnREZWF0aEJhY2t3YXJkcygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHJldHVybiBGb28oX3VpbnREZWF0aCgpKSA9PSBGb28uRGVhdGg7CisgICAgICAgIH0K
KyAgICBgOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dy
YW0sICJ3YXIiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xG
dW5jdGlvbihwcm9ncmFtLCAiZmFtaW5lIiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxz
KGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInBlc3RpbGVuY2UiLCBbXSksIHRydWUp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAiZGVh
dGgiLCBbXSksIHRydWUpOworCisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0
aW9uKHByb2dyYW0sICJ0ZXN0U2ltcGxlRXF1YWwiLCBbXSksIHRydWUpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdEFub3RoZXJFcXVhbCIs
IFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHBy
b2dyYW0sICJ0ZXN0Tm90RXF1YWwiLCBbXSksIGZhbHNlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3
YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInRlc3RTaW1wbGVOb3RFcXVhbCIsIFtdKSwg
ZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFt
LCAidGVzdEFub3RoZXJOb3RFcXVhbCIsIFtdKSwgZmFsc2UpOworICAgIGFzc2VydF9lcXVhbHMo
YXdhaXQgY2FsbEJvb2xGdW5jdGlvbihwcm9ncmFtLCAidGVzdE5vdE5vdEVxdWFsIiwgW10pLCB0
cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwg
InVpbnRXYXIiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5j
dGlvbihwcm9ncmFtLCAidWludEZhbWluZSIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJ1aW50UGVzdGlsZW5jZSIsIFtdKSwgMik7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1bmN0aW9uKHByb2dyYW0sICJ1aW50
RGVhdGgiLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlv
bihwcm9ncmFtLCAid2FyVmFsdWUiLCBbXSksIDApOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAiZmFtaW5lVmFsdWUiLCBbXSksIDEpOworICAgIGFz
c2VydF9lcXVhbHMoYXdhaXQgY2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAicGVzdGlsZW5jZVZh
bHVlIiwgW10pLCAyKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24o
cHJvZ3JhbSwgImRlYXRoVmFsdWUiLCBbXSksIDMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQg
Y2FsbFVpbnRGdW5jdGlvbihwcm9ncmFtLCAid2FyVmFsdWVMaXRlcmFsIiwgW10pLCAwKTsKKyAg
ICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImZhbWluZVZh
bHVlTGl0ZXJhbCIsIFtdKSwgMSk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsVWludEZ1
bmN0aW9uKHByb2dyYW0sICJwZXN0aWxlbmNlVmFsdWVMaXRlcmFsIiwgW10pLCAyKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxVaW50RnVuY3Rpb24ocHJvZ3JhbSwgImRlYXRoVmFsdWVM
aXRlcmFsIiwgW10pLCAzKTsKKworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEJvb2xGdW5j
dGlvbihwcm9ncmFtLCAidWludFdhckJhY2t3YXJkcyIsIFtdKSwgdHJ1ZSk7CisgICAgYXNzZXJ0
X2VxdWFscyhhd2FpdCBjYWxsQm9vbEZ1bmN0aW9uKHByb2dyYW0sICJ1aW50RmFtaW5lQmFja3dh
cmRzIiwgW10pLCB0cnVlKTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rp
b24ocHJvZ3JhbSwgInVpbnRQZXN0aWxlbmNlQmFja3dhcmRzIiwgW10pLCB0cnVlKTsKKyAgICBh
c3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxCb29sRnVuY3Rpb24ocHJvZ3JhbSwgInVpbnREZWF0aEJh
Y2t3YXJkcyIsIFtdKSwgdHJ1ZSk7Cit9OworCisKK3dobHNsVGVzdHMuZW51bVdpdGhvdXRaZXJv
ID0gYXN5bmMgKCkgPT4geworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAg
ICAgICAgZW51bSBGb28geworICAgICAgICAgICAgICAgIFdhciA9IDcyLAorICAgICAgICAgICAg
ICAgIEZhbWluZSA9IDY0LAorICAgICAgICAgICAgICAgIFBlc3RpbGVuY2UgPSAyMywKKyAgICAg
ICAgICAgICAgICBEZWF0aCA9IC00MgorICAgICAgICAgICAgfQorICAgICAgICBgKTsKK307CisK
K3dobHNsVGVzdHMuZW51bU5lZ2F0aXZlVWludCA9IGFzeW5jICgpID0+IHsKKyAgICBhd2FpdCBj
aGVja0ZhaWwoCisgICAgICAgIGAKKyAgICAgICAgICAgIGVudW0gRm9vIDogdWludCB7CisgICAg
ICAgICAgICAgICAgV2FyLAorICAgICAgICAgICAgICAgIEZhbWluZSwKKyAgICAgICAgICAgICAg
ICBQZXN0aWxlbmNlLAorICAgICAgICAgICAgICAgIERlYXRoID0gLTQyCisgICAgICAgICAgICB9
CisgICAgICAgIGApOworfTsKKword2hsc2xUZXN0cy5wYXN0SW50TWF4ID0gYXN5bmMgKCkgPT4g
eworICAgIGF3YWl0IGNoZWNrRmFpbCgKKyAgICAgICAgYAorICAgICAgICAgICAgZW51bSBGb28g
OiBpbnQgeworICAgICAgICAgICAgICAgIFdhciA9IDIxNDc0ODM2NDcsCisgICAgICAgICAgICAg
ICAgRmFtaW5lLAorICAgICAgICAgICAgICAgIFBlc3RpbGVuY2UgPSAwLAorICAgICAgICAgICAg
ICAgIERlYXRoCisgICAgICAgICAgICB9CisgICAgICAgIGApOworfTsKKword2hsc2xUZXN0cy5l
bnVtV2l0aFNvbWVNYW51YWxWYWx1ZXMgPSBhc3luYyAoKSA9PiB7CisgICAgbGV0IHByb2dyYW0g
PSBgCisgICAgICAgIGVudW0gRm9vIHsKKyAgICAgICAgICAgIFdhciA9IDcyLAorICAgICAgICAg
ICAgRmFtaW5lLAorICAgICAgICAgICAgUGVzdGlsZW5jZSA9IDAsCisgICAgICAgICAgICBEZWF0
aAorICAgICAgICB9CisgICAgICAgIGludCB3YXIoKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gaW50KEZvby5XYXIpOworICAgICAgICB9CisgICAgICAgIGludCBmYW1pbmUoKQorICAg
ICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW50KEZvby5GYW1pbmUpOworICAgICAgICB9Cisg
ICAgICAgIGludCBwZXN0aWxlbmNlKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGlu
dChGb28uUGVzdGlsZW5jZSk7CisgICAgICAgIH0KKyAgICAgICAgaW50IGRlYXRoKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIGludChGb28uRGVhdGgpOworICAgICAgICB9CisgICAg
YDsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAid2Fy
IiwgW10pLCA3Mik7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJv
Z3JhbSwgImZhbWluZSIsIFtdKSwgNzMpOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbElu
dEZ1bmN0aW9uKHByb2dyYW0sICJwZXN0aWxlbmNlIiwgW10pLCAwKTsKKyAgICBhc3NlcnRfZXF1
YWxzKGF3YWl0IGNhbGxJbnRGdW5jdGlvbihwcm9ncmFtLCAiZGVhdGgiLCBbXSksIDEpOworfTsK
KworCit3aGxzbFRlc3RzLmVudW1Td2l0Y2hCcmVha0V4aGF1c3RpdmUgPSBhc3luYyAoKSA9PiB7
CisgICAgbGV0IHByb2dyYW0gPSBgCisgICAgICAgIGVudW0gRm9vIHsKKyAgICAgICAgICAgIEEs
IEIsIEMKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKGludCB4KQorICAgICAgICB7CisgICAg
ICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAgIHN3aXRjaCAoRm9vKHgpKSB7Cisg
ICAgICAgICAgICBjYXNlIEZvby5BOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSAyNzsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgRm9vLkI6CisgICAgICAgICAg
ICAgICAgcmVzdWx0ICs9IDc2MjQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICBjYXNlIEZvby5DOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSA0OTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9u
KHByb2dyYW0sICJmb28iLCBbbWFrZUludCgwKV0pLCAyNyk7CisgICAgYXNzZXJ0X2VxdWFscyhh
d2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDEpXSksIDc2MjQp
OworICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28i
LCBbbWFrZUludCgyKV0pLCA0OSk7Cit9CisKKword2hsc2xUZXN0cy5lbnVtU3dpdGNoQnJlYWtO
b3RRdWl0ZUV4aGF1c3RpdmVXaXRoRGVmYXVsdCA9IGFzeW5jICgpID0+IHsKKyAgICBsZXQgcHJv
Z3JhbSA9IGAKKyAgICAgICAgZW51bSBGb28geworICAgICAgICAgICAgQSwgQiwgQworICAgICAg
ICB9CisgICAgICAgIGludCBmb28oaW50IHgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBy
ZXN1bHQgPSAwOworICAgICAgICAgICAgc3dpdGNoIChGb28oeCkpIHsKKyAgICAgICAgICAgIGNh
c2UgRm9vLkE6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IDI3OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBGb28uQjoKKyAgICAgICAgICAgICAgICByZXN1bHQg
Kz0gNzYyNDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgcmVzdWx0ICs9IDQ5OworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfQorICAgIGA7
CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIs
IFttYWtlSW50KDApXSksIDI3KTsKKyAgICBhc3NlcnRfZXF1YWxzKGF3YWl0IGNhbGxJbnRGdW5j
dGlvbihwcm9ncmFtLCAiZm9vIiwgW21ha2VJbnQoMSldKSwgNzYyNCk7CisgICAgYXNzZXJ0X2Vx
dWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgImZvbyIsIFttYWtlSW50KDIpXSks
IDQ5KTsKK30KKword2hsc2xUZXN0cy5lbnVtV2l0aE1hbnVhbFZhbHVlcyA9IGFzeW5jICgpID0+
IHsKKyAgICBsZXQgcHJvZ3JhbSA9IGAKKyAgICAgICAgZW51bSBGb28geworICAgICAgICAgICAg
V2FyID0gNzIsCisgICAgICAgICAgICBGYW1pbmUgPSAwLAorICAgICAgICAgICAgUGVzdGlsZW5j
ZSA9IDIzLAorICAgICAgICAgICAgRGVhdGggPSAtNDIKKyAgICAgICAgfQorICAgICAgICBpbnQg
d2FyKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGludChGb28uV2FyKTsKKyAgICAg
ICAgfQorICAgICAgICBpbnQgZmFtaW5lKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJu
IGludChGb28uRmFtaW5lKTsKKyAgICAgICAgfQorICAgICAgICBpbnQgcGVzdGlsZW5jZSgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpbnQoRm9vLlBlc3RpbGVuY2UpOworICAgICAg
ICB9CisgICAgICAgIGludCBkZWF0aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBp
bnQoRm9vLkRlYXRoKTsKKyAgICAgICAgfQorICAgIGA7CisgICAgYXNzZXJ0X2VxdWFscyhhd2Fp
dCBjYWxsSW50RnVuY3Rpb24ocHJvZ3JhbSwgIndhciIsIFtdKSwgNzIpOworICAgIGFzc2VydF9l
cXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmYW1pbmUiLCBbXSksIDApOwor
ICAgIGFzc2VydF9lcXVhbHMoYXdhaXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJwZXN0aWxl
bmNlIiwgW10pLCAyMyk7CisgICAgYXNzZXJ0X2VxdWFscyhhd2FpdCBjYWxsSW50RnVuY3Rpb24o
cHJvZ3JhbSwgImRlYXRoIiwgW10pLCAtNDIpOworfTsKKword2hsc2xUZXN0cy5lbnVtU3dpdGNo
QnJlYWtOb3RRdWl0ZUV4aGF1c3RpdmUgPSBhc3luYyAoKSA9PiB7CisgICAgYXdhaXQgY2hlY2tG
YWlsKAorICAgICAgICBgCisgICAgICAgICAgICBlbnVtIEZvbyB7CisgICAgICAgICAgICAgICAg
QSwgQiwgQywgRAorICAgICAgICAgICAgfQorICAgICAgICAgICAgaW50IGZvbyhGb28geCkKKyAg
ICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpbnQgcmVzdWx0ID0gMDsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKHgpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEZvby5BOgorICAgICAgICAg
ICAgICAgICAgICByZXN1bHQgKz0gMjc7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIGNhc2UgRm9vLkI6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSA3
NjI0OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIEZv
by5DOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gNDk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgICAgICAgICAgfQorICAgICAgICBgKTsKK307CisKK3dobHNsVGVzdHMuY29weUNv
bnN0cnVjdG9ycyA9IGFzeW5jICgpID0+IHsKKyAgICBjb25zdCBwcm9ncmFtID0gYAorICAgICAg
ICBlbnVtIFdlZWtkYXkgeworICAgICAgICAgICAgTW9uZGF5LAorICAgICAgICAgICAgVHVlc2Rh
eSwKKyAgICAgICAgICAgIFdlZG5lc2RheSwKKyAgICAgICAgICAgIFRodXJzZGF5LAorICAgICAg
ICAgICAgUGl6emFkYXkKKyAgICAgICAgfQorICAgICAgICBpbnQgZm9vKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgV2Vla2RheSB4ID0gV2Vla2RheS5Nb25kYXk7CisgICAgICAgICAgICBXZWVr
ZGF5IHkgPSBXZWVrZGF5KHgpOworICAgICAgICAgICAgZmxvYXQ0IHogPSBmbG9hdDQoMSwgMiwg
MywgNCk7CisgICAgICAgICAgICBmbG9hdDQgdyA9IGZsb2F0NCh6KTsKKyAgICAgICAgICAgIGZs
b2F0MngyIHA7CisgICAgICAgICAgICBmbG9hdDJ4MiBxID0gZmxvYXQyeDIocCk7CisgICAgICAg
ICAgICByZXR1cm4gNDI7CisgICAgICAgIH0KKyAgICBgOworICAgIGFzc2VydF9lcXVhbHMoYXdh
aXQgY2FsbEludEZ1bmN0aW9uKHByb2dyYW0sICJmb28iLCBbXSksIDQyKTsKK307CisKK3J1blRl
c3RzKHdobHNsVGVzdHMpOworPC9zY3JpcHQ+Cis8L2h0bWw+Cg==
</data>
<flag name="review"
          id="390074"
          type_id="1"
          status="+"
          setter="rmorisset"
    />
          </attachment>
      

    </bug>

</bugzilla>