<?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>9673</bug_id>
          
          <creation_ts>2006-07-01 03:03:56 -0700</creation_ts>
          <short_desc>Add support for window.atob() and window.btoa()</short_desc>
          <delta_ts>2006-12-11 23:05:00 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>DOM</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://developer.mozilla.org/en/docs/DOM:window.atob</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Alexey Proskuryakov">ap</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>47894</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-01 03:03:56 -0700</bug_when>
    <thetext>These convert between base64 and binary strings, see the bug URL for documentation.

Supported by Mozilla and Konqueror, not supported by Opera 9, haven&apos;t tested WinIE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>47895</commentid>
    <comment_count>1</comment_count>
      <attachid>9117</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-07-01 03:04:49 -0700</bug_when>
    <thetext>Created attachment 9117
btoa test</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46718</commentid>
    <comment_count>2</comment_count>
      <attachid>11405</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-11-06 12:32:57 -0800</bug_when>
    <thetext>Created attachment 11405
proposed fix

This implementation is based on the one from KDE, but has been tweaked for better Firefox compatibility.

One thing I couldn&apos;t understand in khtml (and thus didn&apos;t copy) was a special case for AToB/BToA in Window::getOwnPropertySlot:

    switch(entry-&gt;value) {
    case Frames:
// ...
    case Blur:
    case AToB:
    case BToA:
      getSlotFromEntry&lt;WindowFunc, Window&gt;(entry, this, slot);

&lt;http://websvn.kde.org/trunk/KDE/kdelibs/khtml/ecma/kjs_window.cpp?rev=592458&amp;view=markup&gt;

WebCore has similar (but not identical) code for Blur etc. here, so maybe we actually need it, too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46563</commentid>
    <comment_count>3</comment_count>
      <attachid>11405</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2006-11-08 07:11:42 -0800</bug_when>
    <thetext>Comment on attachment 11405
proposed fix

Setting r- due to a couple of issues I see.  

In Base64.cpp:

The * should be next to the type

+inline int strncasecmp(const char *first, const char *second, size_t maxLength)

Though, you should probably use the version of strncasecmp in StringExtras.h if you can.

Please use &quot;unsigned&quot; instead of &quot;unsigned int&quot; in a bunch of places.

Put spaces around infix operators in bunch of places as well.

Also, since this is based on the KDE impl, if there is a bug number or a patch that implemented this it would be nice to have a link to it or at least note who the author of the   patch was.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>46505</commentid>
    <comment_count>4</comment_count>
      <attachid>11425</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-11-08 09:20:55 -0800</bug_when>
    <thetext>Created attachment 11425
proposed fix

&gt; Though, you should probably use the version of strncasecmp in StringExtras.h if
&gt; you can.

  Done (had to add the header to wtf, however - hope this is OK). Also made this change in DeprecatedString.cpp.

&gt; Please use &quot;unsigned&quot; instead of &quot;unsigned int&quot; in a bunch of places.

  Do we have such a rule? I don&apos;t see one in the guidelines, and I don&apos;t like this style myself.

&gt; Put spaces around infix operators in bunch of places as well.

  OK, but please note that I intentionally broke this rule in these places - I think adding spaces there has a negative impact on redability. But done.

&gt; Also, since this is based on the KDE impl, if there is a bug number or a patch
&gt; that implemented this it would be nice to have a link to it or at least note
&gt; who the author of the   patch was.

  Base64 implementation comes from kdecore and is completely unrelated to khtml. Its authorship is already reflected in the copyright header.

  The kjs_window part of this implementation is trivial (but note the getOwnPropertySlot question I asked in comment 2). I haven&apos;t researched its history.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>45677</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-11-15 10:38:24 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (but note the getOwnPropertySlot question I asked in comment 2). 

  OK, I think I see it now. The code is there to allow/deny access to functions from other windows (e.g. window.frames[0].close). Logically speaking, atob() and btoa() are absolutely safe, so there&apos;s no reason to disallow them - but Firefox does that, so the patch stands as it is.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42945</commentid>
    <comment_count>6</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2006-12-07 15:24:09 -0800</bug_when>
    <thetext>&gt; &gt; Please use &quot;unsigned&quot; instead of &quot;unsigned int&quot; in a bunch of places.
&gt; 
&gt;   Do we have such a rule? I don&apos;t see one in the guidelines, and I don&apos;t like
&gt; this style myself.

I&apos;m not sure if it&apos;s officially in the guidelines, but Darin harps on it from time to time. I guess being concise is his argument.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42927</commentid>
    <comment_count>7</comment_count>
      <attachid>11770</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-12-07 22:00:12 -0800</bug_when>
    <thetext>Created attachment 11770
now with unsigned instead of unsigned int

OK. Would be nice to put this into official guidelines then!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42641</commentid>
    <comment_count>8</comment_count>
      <attachid>11770</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-12-11 15:42:15 -0800</bug_when>
    <thetext>Comment on attachment 11770
now with unsigned instead of unsigned int

Looks good. r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>42520</commentid>
    <comment_count>9</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2006-12-11 23:05:00 -0800</bug_when>
    <thetext>Committed revision 18170.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>9117</attachid>
            <date>2006-07-01 03:04:49 -0700</date>
            <delta_ts>2006-07-01 03:04:49 -0700</delta_ts>
            <desc>btoa test</desc>
            <filename>btoa.html</filename>
            <type>text/html</type>
            <size>25270</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">PGhlYWQ+CjxzY3JpcHQ+Ci8vCi8vIFBORyBkcmF3aW5nIGxpYnJhcnkgZm9yIEphdmFTY3JpcHQu
Ci8vIENvcHlyaWdodCAoQykgMTk5OSBieSBSb2dlciBFIENyaXRjaGxvdyBKciwKLy8gU2FudGEg
RmUsIE5ldyBNZXhpY28sIFVTQS4KLy8KLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZy
ZWUgTGljZW5zZSB2ZXJzaW9uIDIuMQovLwovLyBUaGUgaG9tZSBwYWdlIGZvciBQbmdsZXRzIGlz
IGh0dHA6Ly93d3cuZWxmLm9yZy9wbmdsZXRzLAovLyBhIGNvcHkgb2YgdGhlIEFGTCBtYXkgYmUg
Zm91bmQgYXQgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9hZmwtMi4xLnBocCwK
Ly8gUG5nbGV0cyB3ZXJlIGluc3BpcmVkIGJ5IGFuZCBjb3BpZWQgZnJvbSBnZDEuMywgaHR0cDov
L3d3dy5ib3V0ZWxsLmNvbS9nZCwKLy8gb3RoZXIgcGFydHMgd2VyZSBpbnNwaXJlZCBieSBvciBj
b3BpZWQgZnJvbSBUY2wvVGssIGh0dHA6Ly93d3cuc2NyaXB0aWNzLmNvbSwKLy8gYW5kIHNvbWUg
YWxnb3JpdGhtcyB3ZXJlIHRha2VuIGZyb20gRm9sZXkgJiB2YW4gRGFtIDJuZCBFZGl0aW9uLgov
LwovLyBUaGFua3MgdG8gQWxleCBWaW5jZW50IGZvciBwb2ludGluZyBvdXQgdGhlIGFkdmFudGFn
ZXMgb2YgZWxpbWluYXRpbmcgc3RyaWN0Ci8vIGphdmFzY3JpcHQgd2FybmluZ3MuCi8vCgovLyBj
cmVhdGUgYSBuZXcgUG5nbGV0IG9mIHNwZWNpZmllZCB3aWR0aCwgaGVpZ2h0LCBhbmQgZGVwdGgK
Ly8gd2lkdGggYW5kIGhlaWdodCBhcmUgc3BlY2lmaWVkIGluIHBpeGVscwovLyBkZXB0aCBpcyBy
ZWFsbHkgdGhlIG51bWJlciBvZiBwYWxldHRlIGVudHJpZXMKZnVuY3Rpb24gUG5nbGV0KHdpZHRo
LGhlaWdodCxkZXB0aCkgewogIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxNjsKICB0aGlzLmhlaWdo
dCA9IGhlaWdodCB8fCAxNjsKICB0aGlzLmRlcHRoID0gTWF0aC5taW4oMjU2LCBkZXB0aCB8fCAx
Nik7CgogIC8vIHBpeGVsIGRhdGEgYW5kIHJvdyBmaWx0ZXIgaWRlbnRpZmllciBzaXplCiAgdGhp
cy5waXhfc2l6ZSA9IGhlaWdodCood2lkdGgrMSk7CgogIC8vIGRlZmxhdGUgaGVhZGVyLCBwaXhf
c2l6ZSwgYmxvY2sgaGVhZGVycywgYWRsZXIzMiBjaGVja3N1bQogIHRoaXMuZGF0YV9zaXplID0g
MiArIHRoaXMucGl4X3NpemUgKyA1Kk1hdGguZmxvb3IoKHRoaXMucGl4X3NpemUrMHhmZmZmLTEp
LzB4ZmZmZikgKyA0OwoKICAvLyBvZmZzZXRzIGFuZCBzaXplcyBvZiBQbmcgY2h1bmtzCiAgdGhp
cy5paGRyX29mZnMgPSAwOwkJCQkJLy8gSUhEUiBvZmZzZXQgYW5kIHNpemUKICB0aGlzLmloZHJf
c2l6ZSA9IDQrNCsxMys0OwogIHRoaXMucGx0ZV9vZmZzID0gdGhpcy5paGRyX29mZnMrdGhpcy5p
aGRyX3NpemU7CS8vIFBMVEUgb2Zmc2V0IGFuZCBzaXplCiAgdGhpcy5wbHRlX3NpemUgPSA0KzQr
MypkZXB0aCs0OwogIHRoaXMudHJuc19vZmZzID0gdGhpcy5wbHRlX29mZnMrdGhpcy5wbHRlX3Np
emU7CS8vIHRSTlMgb2Zmc2V0IGFuZCBzaXplCiAgdGhpcy50cm5zX3NpemUgPSA0KzQrZGVwdGgr
NDsKICB0aGlzLmlkYXRfb2ZmcyA9IHRoaXMudHJuc19vZmZzK3RoaXMudHJuc19zaXplOwkvLyBJ
REFUIG9mZnNldCBhbmQgc2l6ZQogIHRoaXMuaWRhdF9zaXplID0gNCs0K3RoaXMuZGF0YV9zaXpl
KzQ7CiAgdGhpcy5pZW5kX29mZnMgPSB0aGlzLmlkYXRfb2Zmcyt0aGlzLmlkYXRfc2l6ZTsJLy8g
SUVORCBvZmZzZXQgYW5kIHNpemUKICB0aGlzLmllbmRfc2l6ZSA9IDQrNCs0OwogIHRoaXMucG5n
X3NpemUgPSB0aGlzLmllbmRfb2Zmcyt0aGlzLmllbmRfc2l6ZTsJLy8gdG90YWwgUE5HIHNpemUK
CiAgLy8gYXJyYXkgb2Ygb25lIGJ5dGUgc3RyaW5ncwogIHRoaXMucG5nID0gbmV3IEFycmF5KHRo
aXMucG5nX3NpemUpOwoKICAvLyBmdW5jdGlvbnMgZm9yIGluaXRpYWxpemluZyBkYXRhCiAgZnVu
Y3Rpb24gaW5pdGlhbGl6ZShwbmcsIG9mZnMsIHN0cikgewogICAgZm9yICh2YXIgaSA9IDE7IGkg
PCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDEpCiAgICAgIGlmICh0eXBlb2YgYXJndW1lbnRzW2ld
Lmxlbmd0aCAhPSAidW5kZWZpbmVkIikKICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ3Vt
ZW50c1tpXS5sZW5ndGg7IGogKz0gMSkKICAgICAgICAgIHBuZ1tvZmZzKytdID0gYXJndW1lbnRz
W2ldLmNoYXJBdChqKTsKICB9OwogIGZ1bmN0aW9uIGJ5dGUyKHcpIHsgcmV0dXJuIFN0cmluZy5m
cm9tQ2hhckNvZGUoKHc+PjgpJjI1NSwgdyYyNTUpOyB9OwogIGZ1bmN0aW9uIGJ5dGU0KHcpIHsg
cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKHc+PjI0KSYyNTUsICh3Pj4xNikmMjU1LCAodz4+
OCkmMjU1LCB3JjI1NSk7IH07CiAgZnVuY3Rpb24gYnl0ZTJsc2IodykgeyByZXR1cm4gU3RyaW5n
LmZyb21DaGFyQ29kZSh3JjI1NSwgKHc+PjgpJjI1NSk7IH07CgogIC8vIGluaXRpYWxpemUgZXZl
cnl0aGluZyB0byB6ZXJvIGJ5dGUKICBmb3IgKHZhciBpID0gMDsgaSA8IHRoaXMucG5nX3NpemU7
IGkgKz0gMSkKICAgIHRoaXMucG5nW2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTsKCiAgLy8g
aW5pdGlhbGl6ZSBub24temVybyBlbGVtZW50cwogIGluaXRpYWxpemUodGhpcy5wbmcsIHRoaXMu
aWhkcl9vZmZzLCBieXRlNCh0aGlzLmloZHJfc2l6ZS0xMiksICdJSERSJywKICAgICAgICAgICAg
IGJ5dGU0KHdpZHRoKSwgYnl0ZTQoaGVpZ2h0KSwgU3RyaW5nLmZyb21DaGFyQ29kZSg4LCAzKSk7
CiAgaW5pdGlhbGl6ZSh0aGlzLnBuZywgdGhpcy5wbHRlX29mZnMsIGJ5dGU0KHRoaXMucGx0ZV9z
aXplLTEyKSwgJ1BMVEUnKTsKICBpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLnRybnNfb2Zmcywg
Ynl0ZTQodGhpcy50cm5zX3NpemUtMTIpLCAndFJOUycpOwogIGluaXRpYWxpemUodGhpcy5wbmcs
IHRoaXMuaWRhdF9vZmZzLCBieXRlNCh0aGlzLmlkYXRfc2l6ZS0xMiksICdJREFUJyk7CiAgaW5p
dGlhbGl6ZSh0aGlzLnBuZywgdGhpcy5pZW5kX29mZnMsIGJ5dGU0KHRoaXMuaWVuZF9zaXplLTEy
KSwgJ0lFTkQnKTsKCiAgLy8gaW5pdGlhbGl6ZSBkZWZsYXRlIGhlYWRlcgogIHZhciBoZWFkZXIg
PSAoKDggKyAoNzw8NCkpIDw8IDgpIHwgKDMgPDwgNik7CiAgaGVhZGVyICs9IDMxIC0gKGhlYWRl
ciAlIDMxKTsKICBpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLmlkYXRfb2Zmcys4LCBieXRlMiho
ZWFkZXIpKTsKCiAgLy8gaW5pdGlhbGl6ZSBkZWZsYXRlIGJsb2NrIGhlYWRlcnMKICBmb3IgKGkg
PSAwOyBpKjB4ZmZmZiA8IHRoaXMucGl4X3NpemU7IGkgKz0gMSkgewoJdmFyIHNpemUsIGJpdHM7
CglpZiAoaSArIDB4ZmZmZiA8IHRoaXMucGl4X3NpemUpIHsKICAgICAgc2l6ZSA9IDB4ZmZmZjsK
ICAgICAgYml0cyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoMCk7Cgl9IGVsc2UgewogICAgICBzaXpl
ID0gdGhpcy5waXhfc2l6ZSAtIGkqMHhmZmZmOwogICAgICBiaXRzID0gU3RyaW5nLmZyb21DaGFy
Q29kZSgxKTsKCX0KCWluaXRpYWxpemUodGhpcy5wbmcsIHRoaXMuaWRhdF9vZmZzKzgrMitpKig1
KzB4ZmZmZiksIGJpdHMsIGJ5dGUybHNiKHNpemUpLCBieXRlMmxzYih+c2l6ZSkpOwogIH0KCiAg
Ly8gaW5pdGlhbGl6ZSBwYWxldHRlIGhhc2gKICB0aGlzLnBhbGV0dGUgPSBuZXcgT2JqZWN0KCk7
CiAgdGhpcy5waW5kZXggPSAwOwp9CgovLyB2ZXJzaW9uIHN0cmluZy9udW1iZXIKUG5nbGV0LnZl
cnNpb24gPSAiMTk5OTA0MjcuMCI7CgovLyB0ZXN0IGlmIGNvb3JkaW5hdGVzIGFyZSB3aXRoaW4g
Ym91bmRzClBuZ2xldC5wcm90b3R5cGUuaW5Cb3VuZHMgPSBmdW5jdGlvbih4LHkpIHsgcmV0dXJu
IHggPj0gMCAmJiB4IDwgdGhpcy53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHRoaXMuaGVpZ2h0OyB9
CgovLyBjbGlwIGFuIHggdmFsdWUgdG8gdGhlIHdpbmRvdyB3aWR0aApQbmdsZXQucHJvdG90eXBl
LmNsaXBYID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggPCAwKSA/IDAgOiAoeCA+PSB0aGlzLndp
ZHRoKSA/IHRoaXMud2lkdGgtMSA6IHggOyB9CgovLyBjbGlwIGEgeSB2YWx1ZSB0byB0aGUgd2lu
ZG93IGhlaWdodApQbmdsZXQucHJvdG90eXBlLmNsaXBZID0gZnVuY3Rpb24oeSkgeyByZXR1cm4g
KHkgPCAwKSA/IDAgOiAoeSA+PSB0aGlzLmhlaWdodCkgPyB0aGlzLmhlaWdodC0xIDogeSA7IH0K
Ci8vIGNvbXB1dGUgdGhlIGluZGV4IGludG8gYSBwbmcgZm9yIGEgZ2l2ZW4gcGl4ZWwKUG5nbGV0
LnByb3RvdHlwZS5pbmRleCA9IGZ1bmN0aW9uKHgseSkgewogIHZhciBpID0geSoodGhpcy53aWR0
aCsxKSt4KzE7CiAgdmFyIGogPSB0aGlzLmlkYXRfb2Zmcys4KzIrTWF0aC5mbG9vcigoaS8weGZm
ZmYpKzEpKjUraTsKICByZXR1cm4gajsKfQoKLy8gbWFrZSBhIGNvbG9yIGluIGEgUG5nbGV0ClBu
Z2xldC5wcm90b3R5cGUuY29sb3IgPSBmdW5jdGlvbihyZWQsIGdyZWVuLCBibHVlLCBhbHBoYSkg
ewogIGFscGhhID0gYWxwaGEgPj0gMCA/IGFscGhhIDogMjU1OwogIHZhciByZ2JhID0gKCgoKChh
bHBoYTw8OCkrcmVkKTw8OCkrZ3JlZW4pPDw4KStibHVlOwogIGlmICggdHlwZW9mIHRoaXMucGFs
ZXR0ZVtyZ2JhXSA9PSAidW5kZWZpbmVkIikgewoJaWYgKHRoaXMucGluZGV4ID09IHRoaXMuZGVw
dGgpIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKDApOwoJdGhpcy5wYWxldHRlW3JnYmFdID0g
U3RyaW5nLmZyb21DaGFyQ29kZSh0aGlzLnBpbmRleCk7Cgl0aGlzLnBuZ1t0aGlzLnBsdGVfb2Zm
cys4K3RoaXMucGluZGV4KjMrMF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJlZCk7Cgl0aGlzLnBu
Z1t0aGlzLnBsdGVfb2Zmcys4K3RoaXMucGluZGV4KjMrMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2Rl
KGdyZWVuKTsKCXRoaXMucG5nW3RoaXMucGx0ZV9vZmZzKzgrdGhpcy5waW5kZXgqMysyXSA9IFN0
cmluZy5mcm9tQ2hhckNvZGUoYmx1ZSk7Cgl0aGlzLnBuZ1t0aGlzLnRybnNfb2Zmcys4K3RoaXMu
cGluZGV4XSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYWxwaGEpOwoJdGhpcy5waW5kZXggKz0gMTsK
ICB9CiAgcmV0dXJuIHRoaXMucGFsZXR0ZVtyZ2JhXTsKfQoKLy8gcmV0dXJuIHRydWUgaWYgdGhp
cyBpcyBhIGNvbG9yClBuZ2xldC5wcm90b3R5cGUuaXNDb2xvciA9IGZ1bmN0aW9uKGNvbG9yKSB7
CiAgcmV0dXJuIHR5cGVvZihjb2xvcikgPT0gJ3N0cmluZycgJiYKCWNvbG9yLmxlbmd0aCA9PSAx
ICYmCgljb2xvci5jaGFyQ29kZUF0KDApID49IDAgJiYKCWNvbG9yLmNoYXJDb2RlQXQoMCkgPCB0
aGlzLmRlcHRoOwp9CgovLyBmaW5kIHRoZSByZWQsIGdyZWVuLCBibHVlLCBvciBhbHBoYSB2YWx1
ZSBvZiBhIFBuZ2xldCBjb2xvcgpQbmdsZXQucHJvdG90eXBlLnJlZCA9IGZ1bmN0aW9uKGNvbG9y
KSB7IHJldHVybiB0aGlzLnBuZ1t0aGlzLnBsdGVfb2Zmcys4K2NvbG9yLmNoYXJDb2RlQXQoMCkq
MyswXS5jaGFyQ29kZUF0KDApOyB9ClBuZ2xldC5wcm90b3R5cGUuZ3JlZW4gPSBmdW5jdGlvbihj
b2xvcikgeyByZXR1cm4gdGhpcy5wbmdbdGhpcy5wbHRlX29mZnMrOCtjb2xvci5jaGFyQ29kZUF0
KDApKjMrMV0uY2hhckNvZGVBdCgwKTsgfQpQbmdsZXQucHJvdG90eXBlLmJsdWUgPSBmdW5jdGlv
bihjb2xvcikgeyByZXR1cm4gdGhpcy5wbmdbdGhpcy5wbHRlX29mZnMrOCtjb2xvci5jaGFyQ29k
ZUF0KDApKjMrMl0uY2hhckNvZGVBdCgwKTsgfQpQbmdsZXQucHJvdG90eXBlLmFscGhhID0gZnVu
Y3Rpb24oY29sb3IpIHsgcmV0dXJuIHRoaXMucG5nW3RoaXMudHJuc19vZmZzKzgrY29sb3IuY2hh
ckNvZGVBdCgwKV0uY2hhckNvZGVBdCgwKTsgfQoKLy8gZHJhdyBhIHBvaW50IG9yIHBvaW50cwpQ
bmdsZXQucHJvdG90eXBlLnBvaW50ID0gZnVuY3Rpb24ocG9pbnRDb2xvciwgeDAsIHkwKSB7CiAg
dmFyIGEgPSBhcmd1bWVudHM7CiAgdGhpcy5wb2ludE5YWShwb2ludENvbG9yLCAoYS5sZW5ndGgt
MSkvMiwgZnVuY3Rpb24oaSkgeyByZXR1cm4gYVsyKmkrMV07IH0sIGZ1bmN0aW9uKGkpIHsgcmV0
dXJuIGFbMippKzJdOyB9KTsKfQoKUG5nbGV0LnByb3RvdHlwZS5wb2ludE5YWSA9IGZ1bmN0aW9u
KHBvaW50Q29sb3IsIG4sIHgsIHkpIHsKICBpZiAoICEgdGhpcy5pc0NvbG9yKHBvaW50Q29sb3Ip
KQoJcmV0dXJuOwogIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSArPSAxKSB7Cgl2YXIgeDEgPSB4
KGkpLCB5MSA9IHkoaSk7CglpZiAodGhpcy5pbkJvdW5kcyh4MSx5MSkpCiAgICAgIHRoaXMucG5n
W3RoaXMuaW5kZXgoeDEseTEpXSA9IHBvaW50Q29sb3I7CiAgfQp9CgovLyByZWFkIGEgcGl4ZWwg
ClBuZ2xldC5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlvbih4LHkpIHsgcmV0dXJuIHRoaXMu
aW5Cb3VuZHMoeCx5KSA/IHRoaXMucG5nW3RoaXMuaW5kZXgoeCx5KV0gOiBTdHJpbmcuZnJvbUNo
YXJDb2RlKDApOyB9CgovLyBkcmF3IGEgaG9yaXpvbnRhbCBsaW5lClBuZ2xldC5wcm90b3R5cGUu
aG9yaXpvbnRhbExpbmUgPSBmdW5jdGlvbihsaW5lQ29sb3IsIHgxLCB4MiwgeSkgewogIGlmICgg
ISB0aGlzLmlzQ29sb3IobGluZUNvbG9yKSkKCXJldHVybjsKICB4MSA9IHRoaXMuY2xpcFgoeDEp
OwogIHgyID0gdGhpcy5jbGlwWCh4Mik7CiAgdmFyIHg7CiAgaWYgKHgxIDwgeDIpCglmb3IgKHgg
PSB4MTsgeCA8PSB4MjsgeCArPSAxKQogICAgICB0aGlzLnBuZ1t0aGlzLmluZGV4KHgseSldID0g
bGluZUNvbG9yOwogIGVsc2UKCWZvciAoeCA9IHgyOyB4IDw9IHgxOyB4ICs9IDEpCiAgICAgIHRo
aXMucG5nW3RoaXMuaW5kZXgoeCx5KV0gPSBsaW5lQ29sb3I7Cn0KCi8vIGRyYXcgYSB2ZXJ0aWNh
bCBsaW5lClBuZ2xldC5wcm90b3R5cGUudmVydGljYWxMaW5lID0gZnVuY3Rpb24obGluZUNvbG9y
LCB4LCB5MSwgeTIpIHsKICBpZiAoICEgdGhpcy5pc0NvbG9yKGxpbmVDb2xvcikpCglyZXR1cm47
CiAgeTEgPSB0aGlzLmNsaXBZKHkxKTsKICB5MiA9IHRoaXMuY2xpcFkoeTIpOwogIHZhciB5Owog
IGlmICh5MSA8IHkyKQoJZm9yICh5ID0geTE7IHkgPD0geTI7IHkgKz0gMSkKICAgICAgdGhpcy5w
bmdbdGhpcy5pbmRleCh4LHkpXSA9IGxpbmVDb2xvcjsKICBlbHNlCglmb3IgKHkgPSB5MjsgeSA8
PSB5MTsgeSArPSAxKQogICAgICB0aGlzLnBuZ1t0aGlzLmluZGV4KHgseSldID0gbGluZUNvbG9y
Owp9CgovLyBkcmF3IGEgZ2VuZXJhbCBsaW5lClBuZ2xldC5wcm90b3R5cGUuZ2VuZXJhbExpbmUg
PSBmdW5jdGlvbihsaW5lQ29sb3IsIHgxLCB5MSwgeDIsIHkyKSB7CiAgaWYgKCAhIHRoaXMuaXND
b2xvcihsaW5lQ29sb3IpKQoJcmV0dXJuOwogIHZhciBkeCA9IE1hdGguYWJzKHgyLXgxKSwgZHkg
PSBNYXRoLmFicyh5Mi15MSk7CiAgdmFyIGluY3IxLCBpbmNyMiwgZCwgeCwgeSwgeGVuZCwgeWVu
ZCwgeGRpcmZsYWcsIHlkaXJmbGFnLCB4aW5jLCB5aW5jOwogIGlmIChkeSA8PSBkeCkgewoJZCA9
IDIqZHkgLSBkeDsKCWluY3IxID0gMipkeTsKCWluY3IyID0gMiAqIChkeSAtIGR4KTsKCWlmICh4
MSA+IHgyKSB7CiAgICAgIHggPSB4MjsKICAgICAgeSA9IHkyOwogICAgICB5ZGlyZmxhZyA9IC0x
OwogICAgICB4ZW5kID0geDE7Cgl9IGVsc2UgewogICAgICB4ID0geDE7CiAgICAgIHkgPSB5MTsK
ICAgICAgeWRpcmZsYWcgPSAxOwogICAgICB4ZW5kID0geDI7Cgl9Cgl5aW5jID0gKCgoeTIgLSB5
MSkgKiB5ZGlyZmxhZykgPiAwKSA/IDEgOiAtMTsKCXRoaXMucG9pbnQobGluZUNvbG9yLCB4LCB5
KTsKCXdoaWxlICh4KysgPCB4ZW5kKSB7CiAgICAgIGlmIChkIDwgMCkgewoJCWQgKz0gaW5jcjE7
CiAgICAgIH0gZWxzZSB7CgkJeSArPSB5aW5jOwoJCWQgKz0gaW5jcjI7CiAgICAgIH0KICAgICAg
dGhpcy5wb2ludChsaW5lQ29sb3IsIHgsIHkpOwoJfQogIH0gZWxzZSB7CQkJLyogZHkgPiBkeCAq
LwoJZCA9IDIqZHggLSBkeTsKCWluY3IxID0gMipkeDsKCWluY3IyID0gMiAqIChkeCAtIGR5KTsK
CWlmICh5MSA+IHkyKSB7CiAgICAgIHkgPSB5MjsKICAgICAgeCA9IHgyOwogICAgICB5ZW5kID0g
eTE7CiAgICAgIHhkaXJmbGFnID0gLTE7Cgl9IGVsc2UgewogICAgICB5ID0geTE7CiAgICAgIHgg
PSB4MTsKICAgICAgeWVuZCA9IHkyOwogICAgICB4ZGlyZmxhZyA9IDE7Cgl9Cgl4aW5jID0gKCgo
eDIgLSB4MSkgKiB4ZGlyZmxhZykgPiAwKSA/IDEgOiAtMTsKCXRoaXMucG9pbnQobGluZUNvbG9y
LCB4LCB5KTsKCXdoaWxlICh5KysgPCB5ZW5kKSB7CiAgICAgIGlmIChkIDwgMCkgewoJCWQgKz0g
aW5jcjE7CiAgICAgIH0gZWxzZSB7CgkJeCArPSB4aW5jOwoJCWQgKz0gaW5jcjI7CiAgICAgIH0K
ICAgICAgdGhpcy5wb2ludChsaW5lQ29sb3IsIHgsIHkpOwoJfQogIH0KfQoKLy8gZHJhdyBhIGxp
bmUKUG5nbGV0LnByb3RvdHlwZS5saW5lID0gZnVuY3Rpb24obGluZUNvbG9yLCB4MCwgeTApIHsK
ICB2YXIgYSA9IGFyZ3VtZW50czsKICB0aGlzLmxpbmVOWFkobGluZUNvbG9yLCAoYS5sZW5ndGgt
MSkvMiwgZnVuY3Rpb24oaSkgeyByZXR1cm4gYVsyKmkrMV07IH0sIGZ1bmN0aW9uKGkpIHsgcmV0
dXJuIGFbMippKzJdOyB9KTsKfQoKUG5nbGV0LnByb3RvdHlwZS5saW5lTlhZID0gZnVuY3Rpb24o
bGluZUNvbG9yLCBuLCB4LCB5KSB7CiAgaWYgKCAhIHRoaXMuaXNDb2xvcihsaW5lQ29sb3IpKQoJ
cmV0dXJuOwogIHZhciB4MSA9IHgoMCksIHkxID0geSgwKTsKICBmb3IgKHZhciBpID0gMTsgaSA8
IG47IGkgKz0gMSkgewoJdmFyIHgyID0geChpKSwgeTIgPSB5KGkpOwoJaWYgKHgxID09IHgyKQog
ICAgICB0aGlzLnZlcnRpY2FsTGluZShsaW5lQ29sb3IsIHgxLCB5MSwgeTIpOwoJZWxzZSBpZiAo
eTEgPT0geTIpCiAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmUobGluZUNvbG9yLCB4MSwgeDIsIHkx
KTsKCWVsc2UKICAgICAgdGhpcy5nZW5lcmFsTGluZShsaW5lQ29sb3IsIHgxLCB5MSwgeDIsIHky
KTsKCXgxID0geDI7Cgl5MSA9IHkyOwogIH0KfQoKLy8gZHJhdyBhIHBvbHlnb24KUG5nbGV0LnBy
b3RvdHlwZS5wb2x5Z29uID0gZnVuY3Rpb24ob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIHgxLCB5
MSkgewogIHZhciBhID0gYXJndW1lbnRzOwogIHRoaXMucG9seWdvbk5YWShvdXRsaW5lQ29sb3Is
IGZpbGxDb2xvciwgKGEubGVuZ3RoLTIpLzIsIGZ1bmN0aW9uKGkpIHtyZXR1cm4gYVsyKmkrMl07
fSwgZnVuY3Rpb24oaSkge3JldHVybiBhWzIqaSszXTt9KTsKfQoKUG5nbGV0LnByb3RvdHlwZS5w
b2x5Z29uTlhZID0gZnVuY3Rpb24ob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIG4sIHgsIHkpIHsK
ICBpZiAobiA8PSAwKQoJcmV0dXJuOwogIGlmICh0aGlzLmlzQ29sb3IoZmlsbENvbG9yKSkKCXRo
aXMuY29uY2F2ZU5YWShmaWxsQ29sb3IsIG4sIHgsIHkpOwogIGlmICh0aGlzLmlzQ29sb3Iob3V0
bGluZUNvbG9yKSkKCXRoaXMubGluZU5YWShvdXRsaW5lQ29sb3IsIG4rMSwgZnVuY3Rpb24oaSkg
eyByZXR1cm4geChpJW4pOyB9LCBmdW5jdGlvbihpKSB7IHJldHVybiB5KGklbik7IH0pOwp9Cgov
KgogKiBDb25jYXZlIFBvbHlnb24gU2NhbiBDb252ZXJzaW9uCiAqIGJ5IFBhdWwgSGVja2JlcnQK
ICogZnJvbSAiR3JhcGhpY3MgR2VtcyIsIEFjYWRlbWljIFByZXNzLCAxOTkwCiAqLwpQbmdsZXQu
cHJvdG90eXBlLmNvbmNhdmVOWFkgPSBmdW5jdGlvbihmaWxsQ29sb3IsIG4sIHB0eCwgcHR5KSB7
CiAgZnVuY3Rpb24gRWRnZShleCwgZWR4LCBlaSkgewkvKiBhIHBvbHlnb24gZWRnZSAqLwoJdGhp
cy54ID0gZXg7CS8qIHggY29vcmRpbmF0ZSBvZiBlZGdlJ3MgaW50ZXJzZWN0aW9uIHdpdGggY3Vy
cmVudCBzY2FubGluZSAqLwoJdGhpcy5keCA9IGVkeDsJLyogY2hhbmdlIGluIHggd2l0aCByZXNw
ZWN0IHRvIHkgKi8KCXRoaXMuaSA9IGVpOwkvKiBlZGdlIG51bWJlcjogZWRnZSBpIGdvZXMgZnJv
bSBwdFtpXSB0byBwdFtpKzFdICovCiAgfTsKICBmdW5jdGlvbiBjZGVsZXRlKGRpKSB7CS8qIHJl
bW92ZSBlZGdlIGkgZnJvbSBhY3RpdmUgbGlzdCAqLwogICAgZm9yICh2YXIgaiA9IDA7IGogPCBh
Y3RpdmUubGVuZ3RoOyBqICs9IDEpCiAgICAgIGlmIChhY3RpdmVbal0uaSA9PSBkaSkKICAgICAg
ICBhY3RpdmUuc3BsaWNlKGosIDEpOwogIH07CiAgZnVuY3Rpb24gY2luc2VydChpaSwgaXkpIHsJ
LyogYXBwZW5kIGVkZ2UgaSB0byBlbmQgb2YgYWN0aXZlIGxpc3QgKi8KICAgIHZhciBpaiA9IGlp
PG4tMSA/IGlpKzEgOiAwOwogICAgdmFyIHB4LCBweSwgcXgsIHF5OwogICAgaWYgKHB0eShpaSkg
PCBwdHkoaWopKSB7CiAgICAgIHB4ID0gcHR4KGlpKTsgcHkgPSBwdHkoaWkpOwogICAgICBxeCA9
IHB0eChpaik7IHF5ID0gcHR5KGlqKTsKICAgIH0gZWxzZSB7CiAgICAgIHB4ID0gcHR4KGlqKTsg
cHkgPSBwdHkoaWopOwogICAgICBxeCA9IHB0eChpaSk7IHF5ID0gcHR5KGlpKTsKICAgIH0KICAg
IC8qIGluaXRpYWxpemUgeCBwb3NpdGlvbiBhdCBpbnRlcnNlY3Rpb24gb2YgZWRnZSB3aXRoIHNj
YW5saW5lIHkgKi8KICAgIHZhciBkeCA9IChxeC1weCkvKHF5LXB5KTsKICAgIGFjdGl2ZS5wdXNo
KG5ldyBFZGdlKGR4KihpeSsuNS1weSkrcHgsIGR4LCBpaSkpOwogIH07CgogIHZhciBpbmQgPSBu
ZXcgQXJyYXkobik7CQkvKiBsaXN0IG9mIHZlcnRleCBpbmRpY2VzLCBzb3J0ZWQgYnkgcHRbaW5k
W2pdXS55ICovCiAgdmFyIGFjdGl2ZSA9IG5ldyBBcnJheSgwKTsJCS8qIHN0YXJ0IHdpdGggYW4g
ZW1wdHkgYWN0aXZlIGxpc3QgKi8KCiAgLyogY3JlYXRlIHktc29ydGVkIGFycmF5IG9mIGluZGlj
ZXMgaW5kW2tdIGludG8gdmVydGV4IGxpc3QgKi8KICBmb3IgKHZhciBrID0gMDsgayA8IG47IGsg
Kz0gMSkgaW5kW2tdID0gazsKICBpbmQuc29ydChmdW5jdGlvbihpMSwgaTIpIHsgcmV0dXJuIHB0
eShpMSkgPD0gcHR5KGkyKSA/IC0xIDogMTsgfSk7CiAgayA9IDA7ICAgICAgICAgICAgICAgICAg
ICAgICAgLyogaW5kW2tdIGlzIG5leHQgdmVydGV4IHRvIHByb2Nlc3MgKi8KICB2YXIgeTAgPSBN
YXRoLm1heCgwLCBNYXRoLmNlaWwocHR5KGluZFswXSkrLjUpKTsJCQkvKiB5bWluIG9mIHBvbHln
b24gKi8KICB2YXIgeTEgPSBNYXRoLm1pbih0aGlzLmhlaWdodCwgTWF0aC5mbG9vcihwdHkoaW5k
W24tMV0pLS41KSk7CS8qIHltYXggb2YgcG9seWdvbiAqLwoKICBmb3IgKHZhciB5ID0geTA7IHkg
PD0geTE7IHkgKz0gMSkgewkJLyogc3RlcCB0aHJvdWdoIHNjYW5saW5lcyAqLwoJLyogc2Nhbmxp
bmUgeSBpcyBhdCB5Ky41IGluIGNvbnRpbnVvdXMgY29vcmRpbmF0ZXMgKi8KCgkvKiBjaGVjayB2
ZXJ0aWNlcyBiZXR3ZWVuIHByZXZpb3VzIHNjYW5saW5lIGFuZCBjdXJyZW50IG9uZSwgaWYgYW55
ICovCglmb3IgKDsgazxuICYmIHB0eShpbmRba10pIDw9IHkrLjU7IGsgKz0gMSkgewogICAgICAv
KiB0byBzaW1wbGlmeSwgaWYgcHQueT15Ky41LCBwcmV0ZW5kIGl0J3MgYWJvdmUgKi8KICAgICAg
LyogaW52YXJpYW50OiB5LS41IDwgcHRbaV0ueSA8PSB5Ky41ICovCiAgICAgIHZhciBpID0gaW5k
W2tdOwkKCiAgICAgIC8qCiAgICAgICAqIGluc2VydCBvciBkZWxldGUgZWRnZXMgYmVmb3JlIGFu
ZCBhZnRlciB2ZXJ0ZXggaSAoaS0xIHRvIGksCiAgICAgICAqIGFuZCBpIHRvIGkrMSkgZnJvbSBh
Y3RpdmUgbGlzdCBpZiB0aGV5IGNyb3NzIHNjYW5saW5lIHkKICAgICAgICovCiAgICAgIHZhciBq
ID0gKGktMStuKSVuOwkJLyogdmVydGV4IHByZXZpb3VzIHRvIGkgKi8KICAgICAgaWYgKHB0eShq
KSA8PSB5LS41KQl7CS8qIG9sZCBlZGdlLCByZW1vdmUgZnJvbSBhY3RpdmUgbGlzdCAqLwoJCWNk
ZWxldGUoaik7CiAgICAgIH0gZWxzZSBpZiAocHR5KGopID4geSsuNSkgewkvKiBuZXcgZWRnZSwg
YWRkIHRvIGFjdGl2ZSBsaXN0ICovCgkJY2luc2VydChqLCB5KTsKICAgICAgfQogICAgICBpZiAo
aSAhPSBpbmRba10pIHsKCQlhbGVydCgiWW91ciBicm93c2VyJ3MgaW1wbGVtZW50YXRpb24gb2Yg
SmF2YVNjcmlwdCBpcyBzZXJpb3VzbHkgYnJva2VuLFxuIisKCQkgICAgICAiYXMgaW4gdmFyaWFi
bGVzIGFyZSBjaGFuZ2luZyB2YWx1ZSBvZiB0aGVpciBvd24gdm9saXRpb24uXG4iKwoJCSAgICAg
ICJZb3Ugc2hvdWxkIHVwZ3JhZGUgdG8gYSBuZXdlciB2ZXJzaW9uIGJyb3dzZXIuIik7CgkJcmV0
dXJuOwogICAgICB9CiAgICAgIGogPSAoaSsxKSVuOwkJLyogdmVydGV4IG5leHQgYWZ0ZXIgaSAq
LwogICAgICBpZiAocHR5KGopIDw9IHktLjUpCXsJLyogb2xkIGVkZ2UsIHJlbW92ZSBmcm9tIGFj
dGl2ZSBsaXN0ICovCgkJY2RlbGV0ZShpKTsKICAgICAgfSBlbHNlIGlmIChwdHkoaikgPiB5Ky41
KSB7CS8qIG5ldyBlZGdlLCBhZGQgdG8gYWN0aXZlIGxpc3QgKi8KCQljaW5zZXJ0KGksIHkpOwog
ICAgICB9Cgl9CgoJLyogc29ydCBhY3RpdmUgZWRnZSBsaXN0IGJ5IGFjdGl2ZVtqXS54ICovCglh
Y3RpdmUuc29ydChmdW5jdGlvbih1LHYpIHsgcmV0dXJuIHUueCA8PSB2LnggPyAtMSA6IDE7IH0p
OwoKCS8qIGRyYXcgaG9yaXpvbnRhbCBzZWdtZW50cyBmb3Igc2NhbmxpbmUgeSAqLwoJZm9yIChq
ID0gMDsgaiA8IGFjdGl2ZS5sZW5ndGg7IGogKz0gMikgewkvKiBkcmF3IGhvcml6b250YWwgc2Vn
bWVudHMgKi8KICAgICAgLyogc3BhbiAndHdlZW4gaiAmIGorMSBpcyBpbnNpZGUsIHNwYW4gdHdl
ZW4gaisxICYgaisyIGlzIG91dHNpZGUgKi8KICAgICAgdmFyIHhsID0gTWF0aC5jZWlsKGFjdGl2
ZVtqXS54Ky41KTsJCS8qIGxlZnQgZW5kIG9mIHNwYW4gKi8KICAgICAgaWYgKHhsPDApIHhsID0g
MDsKICAgICAgdmFyIHhyID0gTWF0aC5mbG9vcihhY3RpdmVbaisxXS54LS41KTsJLyogcmlnaHQg
ZW5kIG9mIHNwYW4gKi8KICAgICAgaWYgKHhyPnRoaXMud2lkdGgtMSkgeHIgPSB0aGlzLndpZHRo
LTE7CiAgICAgIGlmICh4bDw9eHIpCgkJdGhpcy5ob3Jpem9udGFsTGluZShmaWxsQ29sb3IsIHhs
LCB4ciwgeSk7CS8qIGRyYXcgcGl4ZWxzIGluIHNwYW4gKi8KICAgICAgYWN0aXZlW2pdLnggKz0g
YWN0aXZlW2pdLmR4OwkvKiBpbmNyZW1lbnQgZWRnZSBjb29yZHMgKi8KICAgICAgYWN0aXZlW2or
MV0ueCArPSBhY3RpdmVbaisxXS5keDsKCX0KICB9Cn0KCi8vIGRyYXcgYSByZWN0YW5nbGUKUG5n
bGV0LnByb3RvdHlwZS5yZWN0YW5nbGUgPSBmdW5jdGlvbihvdXRsaW5lQ29sb3IsIGZpbGxDb2xv
ciwgeDAseTAseDEseTEpIHsKICBpZiAodGhpcy5pc0NvbG9yKGZpbGxDb2xvcikpCglmb3IgKHZh
ciB5ID0geTA7IHkgPCB5MTsgeSArPSAxKQogICAgICB0aGlzLmhvcml6b250YWxMaW5lKGZpbGxD
b2xvciwgeDArMSwgeDEtMiwgeSk7CiAgaWYgKHRoaXMuaXNDb2xvcihvdXRsaW5lQ29sb3IpKSB7
Cgl0aGlzLmhvcml6b250YWxMaW5lKG91dGxpbmVDb2xvciwgeDAsIHgxLTEsIHkwKTsKCXRoaXMu
aG9yaXpvbnRhbExpbmUob3V0bGluZUNvbG9yLCB4MCwgeDEtMSwgeTEtMSk7Cgl0aGlzLnZlcnRp
Y2FsTGluZShvdXRsaW5lQ29sb3IsIHgwLCB5MCwgeTEtMSk7Cgl0aGlzLnZlcnRpY2FsTGluZShv
dXRsaW5lQ29sb3IsIHgxLTEsIHkwLCB5MS0xKTsKICB9Cn0KCQovLyBkcmF3IGFuIGFyYwpQbmds
ZXQucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9uKG91dGxpbmVDb2xvciwgY3gsY3ksdyxoLCBzLGUp
IHsKICB2YXIgcCA9IHRoaXMubWlkcG9pbnRFbGxpcHNlKGN4LGN5LCB3LGgsIHMsZSk7CiAgZnVu
Y3Rpb24geChpKSB7IHJldHVybiBwW2kqMl07IH07CiAgZnVuY3Rpb24geShpKSB7IHJldHVybiBw
W2kqMisxXTsgfTsKICB0aGlzLmxpbmVOWFkob3V0bGluZUNvbG9yLCBwLmxlbmd0aC8yLCB4LCB5
KTsKfQoKLy8gZHJhdyBhbiBvdmFsClBuZ2xldC5wcm90b3R5cGUub3ZhbCA9IGZ1bmN0aW9uKG91
dGxpbmVDb2xvciwgZmlsbENvbG9yLCBjeCxjeSx3LGgpIHsKICB2YXIgcCA9IHRoaXMubWlkcG9p
bnRFbGxpcHNlKGN4LGN5LCB3LGgsIDAsMzU5KTsKICBmdW5jdGlvbiB4KGkpIHsgcmV0dXJuIHBb
aSoyXTsgfTsKICBmdW5jdGlvbiB5KGkpIHsgcmV0dXJuIHBbaSoyKzFdOyB9OwogIHRoaXMucG9s
eWdvbk5YWShvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwgcC5sZW5ndGgvMiwgeCwgeSk7Cn0KCi8v
IGRyYXcgYW4gYXJjIHdpdGggY2hvcmQKUG5nbGV0LnByb3RvdHlwZS5jaG9yZCA9IGZ1bmN0aW9u
KG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBjeCxjeSx3LGgsIHMsZSkgewogIHZhciBwID0gdGhp
cy5taWRwb2ludEVsbGlwc2UoY3gsY3ksIHcsaCwgcyxlKTsKICBmdW5jdGlvbiB4KGkpIHsgcmV0
dXJuIHBbaSoyXTsgfTsKICBmdW5jdGlvbiB5KGkpIHsgcmV0dXJuIHBbaSoyKzFdOyB9OwogIHRo
aXMucG9seWdvbk5YWShvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwgcC5sZW5ndGgvMiwgeCwgeSk7
Cn0KCi8vIGRyYXcgYW4gYXJjIHdpdGggcGllc2xpY2UKUG5nbGV0LnByb3RvdHlwZS5waWVzbGlj
ZSA9IGZ1bmN0aW9uKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBjeCxjeSx3LGgsIHMsZSkgewog
IHZhciBwID0gdGhpcy5taWRwb2ludEVsbGlwc2UoY3gsY3ksIHcsaCwgcyxlKTsKICBwW3AubGVu
Z3RoXSA9IGN4OwogIHBbcC5sZW5ndGhdID0gY3k7CiAgZnVuY3Rpb24geChpKSB7IHJldHVybiBw
W2kqMl07IH07CiAgZnVuY3Rpb24geShpKSB7IHJldHVybiBwW2kqMisxXTsgfTsKICB0aGlzLnBv
bHlnb25OWFkob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIHAubGVuZ3RoLzIsIHgsIHkpOwp9Cgov
LyBvdmFsIGFyY3MKLy8gZ2VuZXJhdGUgcG9pbnRzIG9mIG92YWwgY2lyY3VtZmVyZW5jZQovLyBt
aWRwb2ludCBlbGxpcHNlLCBGb2xleSAmIHZhbiBEYW0sIDJuZCBFZGl0aW9uLCBwLiA5MCwgMTk5
MApQbmdsZXQucHJvdG90eXBlLm1pZHBvaW50RWxsaXBzZSA9IGZ1bmN0aW9uKGN4LGN5LCB3LGgs
IHMsZSkgewogIHZhciBhID0gTWF0aC5mbG9vcih3LzIpLCBiID0gTWF0aC5mbG9vcihoLzIpOwog
IHZhciBhMiA9IGEqYSwgYjIgPSBiKmIsIHggPSAwLCB5ID0gYjsKICB2YXIgZDEgPSBiMiAtIGEy
KmIgKyBhMi80OwogIGN4ID0gTWF0aC5mbG9vcihjeCk7CiAgY3kgPSBNYXRoLmZsb29yKGN5KTsK
ICB2YXIgcCA9IG5ldyBBcnJheSgpOwoKICAvLyBxdWFkcmFudCBJLCBhbnRpY2xvY2t3aXNlCiAg
cC5wdXNoKHgsLXkpOwogIHdoaWxlIChhMiooeS0xLzIpID4gYjIqKHgrMSkpIHsKCWlmIChkMSA8
IDApIHsKICAgICAgZDEgKz0gYjIqKDIqeCszKTsKCX0gZWxzZSB7CiAgICAgIGQxICs9IGIyKigy
KngrMykgKyBhMiooLTIqeSArIDIpOwogICAgICB5IC09IDE7Cgl9Cgl4ICs9IDE7CglwLnVuc2hp
ZnQoeCwteSk7CiAgfQogIHZhciBkMiA9IGIyKih4KzEvMikqKHgrMS8yKSArIGEyKih5LTEpKih5
LTEpIC0gYTIqYjI7CiAgd2hpbGUgKHkgPiAwKSB7CglpZiAoZDIgPCAwKSB7CiAgICAgIGQyICs9
IGIyKigyKngrMikgKyBhMiooLTIqeSszKTsKICAgICAgeCArPSAxOwoJfSBlbHNlIHsKICAgICAg
ZDIgKz0gYTIqKC0yKnkrMyk7Cgl9Cgl5IC09IDE7CglwLnVuc2hpZnQoeCwteSk7CiAgfQogIC8v
IHF1YWRyYW50IElJLCBhbnRpY2xvY2t3aXNlCiAgdmFyIG40ID0gcC5sZW5ndGg7CiAgZm9yICh2
YXIgaSA9IG40LTQ7IGkgPj0gMDsgaSAtPSAyKQogICAgcC5wdXNoKC1wW2ldLCBwW2krMV0pOwog
IC8vIHF1YWRyYW50cyBJSUkgYW5kIElWLCBhbnRpY2xvY2t3aXNlCiAgdmFyIG4yID0gcC5sZW5n
dGg7CiAgZm9yIChpID0gbjItNDsgaSA+IDA7IGkgLT0gMikKICAgIHAucHVzaChwW2ldLCAtcFtp
KzFdKTsKCiAgLy8gY29tcHV0ZSBzdGFydCBhbmQgZW5kIGluZGV4ZXMgZnJvbSBzdGFydCBhbmQg
ZXh0ZW50CiAgZSAlPSAzNjA7CiAgaWYgKGUgPCAwKSB7CglzICs9IGU7CgllID0gLWU7CiAgfQog
IHMgJT0gMzYwOwogIGlmIChzIDwgMCkKCXMgKz0gMzYwOwogIHZhciBpcyA9IE1hdGguZmxvb3Io
cy8zNTkgKiBwLmxlbmd0aC8yKTsKICB2YXIgaWUgPSBNYXRoLmZsb29yKGUvMzU5ICogcC5sZW5n
dGgvMikrMTsKICBwID0gcC5zbGljZShpcyoyKS5jb25jYXQocC5zbGljZSgwLCBpcyoyKSkuc2xp
Y2UoMCwgaWUqMik7CgogIC8vIGRpc3BsYWNlIHRvIGNlbnRlcgogIGZvciAoaSA9IDA7IGkgPCBw
Lmxlbmd0aDsgaSArPSAyKSB7CglwW2ldICs9IGN4OwoJcFtpKzFdICs9IGN5OwogIH0KICByZXR1
cm4gcDsKfQoKLy8gZmlsbCBhIHJlZ2lvbiAKLy8gZnJvbSBnZDEuMyB3aXRoIG1vZGlmaWNhdGlv
bnMKUG5nbGV0LnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24ob3V0bGluZUNvbG9yLGZpbGxDb2xv
cix4LHkpIHsKICBpZiAob3V0bGluZUNvbG9yKSB7CQkJLy8gZmlsbCB0byBvdXRsaW5lIGNvbG9y
CgkvKiBTZWVrIGxlZnQgKi8KCXZhciBsZWZ0TGltaXQgPSAtMTsKCWZvciAodmFyIGkgPSB4OyBp
ID49IDAgJiYgdGhpcy5nZXRQb2ludChpLCB5KSAhPSBvdXRsaW5lQ29sb3I7IGkgLT0gMSkKICAg
ICAgbGVmdExpbWl0ID0gaTsKCQoJaWYgKGxlZnRMaW1pdCA9PSAtMSkKICAgICAgcmV0dXJuOwoK
CS8qIFNlZWsgcmlnaHQgKi8KCXZhciByaWdodExpbWl0ID0geDsKCWZvciAoaSA9ICh4KzEpOyBp
IDwgdGhpcy53aWR0aCAmJiB0aGlzLmdldFBvaW50KGksIHkpICE9IG91dGxpbmVDb2xvcjsgaSAr
PSAxKQogICAgICByaWdodExpbWl0ID0gaTsKCgkvKiBmaWxsIGV4dGVudCBmb3VuZCAqLwoJdGhp
cy5ob3Jpem9udGFsTGluZShmaWxsQ29sb3IsIGxlZnRMaW1pdCwgcmlnaHRMaW1pdCwgeSk7CgoJ
LyogU2VlayBhYm92ZSBhbmQgYmVsb3cgKi8KCWZvciAodmFyIGR5ID0gLTE7IGR5IDw9IDE7IGR5
ICs9IDIpIHsKICAgICAgaWYgKHRoaXMuaW5Cb3VuZHMoeCx5K2R5KSkgewoJCXZhciBsYXN0Qm9y
ZGVyID0gMTsKCQlmb3IgKGkgPSBsZWZ0TGltaXQ7IGkgPD0gcmlnaHRMaW1pdDsgaSsrKSB7CiAg
ICAgICAgICB2YXIgYyA9IHRoaXMuZ2V0UG9pbnQoaSwgeStkeSk7CiAgICAgICAgICBpZiAobGFz
dEJvcmRlcikgewoJCQlpZiAoKGMgIT0gb3V0bGluZUNvbG9yKSAmJiAoYyAhPSBmaWxsQ29sb3Ip
KSB7CQogICAgICAgICAgICAgIHRoaXMuZmlsbChvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwgaSwg
eStkeSk7CiAgICAgICAgICAgICAgbGFzdEJvcmRlciA9IDA7CgkJCX0KICAgICAgICAgIH0gZWxz
ZSBpZiAoKGMgPT0gb3V0bGluZUNvbG9yKSB8fCAoYyA9PSBmaWxsQ29sb3IpKSB7CgkJCWxhc3RC
b3JkZXIgPSAxOwogICAgICAgICAgfQoJCX0KICAgICAgfQoJfQogICAgCiAgfSBlbHNlIHsJCQkv
LyBmbG9vZCBmaWxsIGNvbG9yIGF0IHgsIHkgCgkvKiBUZXN0IGZvciBjb21wbGV0aW9uICovCgl2
YXIgb2xkQ29sb3IgPSB0aGlzLmdldFBvaW50KHgsIHkpOwoJaWYgKG9sZENvbG9yID09IGZpbGxD
b2xvcikKICAgICAgcmV0dXJuOwoKCS8qIFNlZWsgbGVmdCAqLwoJbGVmdExpbWl0ID0gKC0xKTsK
CWZvciAoaSA9IHg7IGkgPj0gMCAmJiB0aGlzLmdldFBvaW50KGksIHkpID09IG9sZENvbG9yOyBp
LS0pCiAgICAgIGxlZnRMaW1pdCA9IGk7CgoJaWYgKGxlZnRMaW1pdCA9PSAtMSkKICAgICAgcmV0
dXJuOwoKCS8qIFNlZWsgcmlnaHQgKi8KCXJpZ2h0TGltaXQgPSB4OwoJZm9yIChpID0gKHgrMSk7
IGkgPCB0aGlzLndpZHRoICYmIHRoaXMuZ2V0UG9pbnQoaSwgeSkgPT0gb2xkQ29sb3I7IGkrKykK
ICAgICAgcmlnaHRMaW1pdCA9IGk7CgoJLyogRmlsbCBleHRlbnQgZm91bmQgKi8KCXRoaXMuaG9y
aXpvbnRhbExpbmUoZmlsbENvbG9yLCBsZWZ0TGltaXQsIHJpZ2h0TGltaXQsIHkpOwoKCS8qIFNl
ZWsgYWJvdmUgYW5kIGJlbG93ICovCglmb3IgKGR5ID0gLTE7IGR5IDw9IDE7IGR5ICs9IDIpIHsK
ICAgICAgaWYgKHRoaXMuaW5Cb3VuZHMoeCx5K2R5KSkgewoJCWxhc3RCb3JkZXIgPSAxOwoJCWZv
ciAoaSA9IGxlZnRMaW1pdDsgaSA8PSByaWdodExpbWl0OyBpKyspIHsKICAgICAgICAgIGMgPSB0
aGlzLmdldFBvaW50KGksIHkrZHkpOwogICAgICAgICAgaWYgKGxhc3RCb3JkZXIpIHsKCQkJaWYg
KGMgPT0gb2xkQ29sb3IpIHsJCiAgICAgICAgICAgICAgdGhpcy5maWxsKG51bGwsIGZpbGxDb2xv
ciwgaSwgeStkeSk7CiAgICAgICAgICAgICAgbGFzdEJvcmRlciA9IDA7CgkJCX0KICAgICAgICAg
IH0gZWxzZSBpZiAoYyAhPSBvbGRDb2xvcikgewoJCQlsYXN0Qm9yZGVyID0gMTsKICAgICAgICAg
IH0KCQl9CiAgICAgIH0KCX0KICB9Cn0KCi8vIHNtb290aGVkIHBvaW50cwpQbmdsZXQucHJvdG90
eXBlLnNtb290aFBvaW50ID0gZnVuY3Rpb24oc21vb3RoU3RlcHMsIHBvaW50Q29sb3IsIHgwLCB5
MCkgewogIHZhciBhID0gYXJndW1lbnRzLCBzZWxmID0gdGhpcywgbiA9IChhLmxlbmd0aC0yKS8y
OwogIHRoaXMuc21vb3RoKHNtb290aFN0ZXBzLAogICAgICAgICAgICAgIGZ1bmN0aW9uKG4sIHgs
IHkpIHsgc2VsZi5wb2ludE5YWShwb2ludENvbG9yLCBuLCB4LCB5KTsgfSwKICAgICAgICAgICAg
ICBuLAogICAgICAgICAgICAgIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGFbMippKzJdOyB9LAogICAg
ICAgICAgICAgIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGFbMippKzNdOyB9KTsKfQoKLy8gc21vb3Ro
ZWQgcG9seWxpbmUKUG5nbGV0LnByb3RvdHlwZS5zbW9vdGhMaW5lID0gZnVuY3Rpb24oc21vb3Ro
U3RlcHMsIGxpbmVDb2xvciwgeDAsIHkwKSB7CiAgdmFyIGEgPSBhcmd1bWVudHMsIHNlbGYgPSB0
aGlzLCBuID0gKGEubGVuZ3RoLTIpLzI7CiAgdGhpcy5zbW9vdGgoc21vb3RoU3RlcHMsCiAgICAg
ICAgICAgICAgZnVuY3Rpb24obiwgeCwgeSkgeyBzZWxmLmxpbmVOWFkobGluZUNvbG9yLCBuLCB4
LCB5KTsgfSwKICAgICAgICAgICAgICBuLAogICAgICAgICAgICAgIGZ1bmN0aW9uKGkpIHsgcmV0
dXJuIGFbMippKzJdOyB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGFbMipp
KzNdOyB9KTsKfQoKLy8gc21vb3RoZWQgcG9seWdvbgpQbmdsZXQucHJvdG90eXBlLnNtb290aFBv
bHlnb24gPSBmdW5jdGlvbihzbW9vdGhTdGVwcywgb3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIHgw
LCB5MCkgewogIHZhciBhID0gYXJndW1lbnRzLCBzZWxmID0gdGhpcywgbiA9IChhLmxlbmd0aC0z
KS8yICsgMTsKICB0aGlzLnNtb290aChzbW9vdGhTdGVwcywKICAgICAgICAgICAgICBmdW5jdGlv
bihuLCB4LCB5KSB7IHNlbGYucG9seWdvbk5YWShvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwgbiwg
eCwgeSk7IH0sCiAgICAgICAgICAgICAgbiwKICAgICAgICAgICAgICBmdW5jdGlvbihpKSB7IHJl
dHVybiBhWzIqKGklKG4tMSkpKzNdOyB9LAogICAgICAgICAgICAgIGZ1bmN0aW9uKGkpIHsgcmV0
dXJuIGFbMiooaSUobi0xKSkrNF07IH0pOwp9CiAgICAKLy8gZ2VuZXJhdGUgc21vb3RoU3RlcHMg
cG9pbnRzIGZvciB0aGUgbGluZSBzZWdtZW50IGNvbm5lY3RpbmcKLy8gZWFjaCBjb25zZWN1dGl2
ZSBwYWlyIG9mIHBvaW50cyBpbiB4KGkpLCB5KGkpLgovLyBhZGFwdGVkIGZyb20gdGhlIHNvdXJj
ZSBmb3IgdGs4LjFiMywgaHR0cDovL3d3dy5zY3JpcHRpY3MuY29tClBuZ2xldC5wcm90b3R5cGUu
c21vb3RoID0gZnVuY3Rpb24oc21vb3RoU3RlcHMsIGZOWFksIG4sIHgsIHkpIHsKICB2YXIgY29u
dHJvbCA9IG5ldyBBcnJheSg4KTsKICB2YXIgb3V0cHV0UG9pbnRzID0gMDsKICB2YXIgZGJsUG9p
bnRzID0gbmV3IEFycmF5KCk7CgogIC8vIGNvbXB1dGUgbnVtU3RlcHMgb2Ygc21vb3RoZWQgcG9p
bnRzCiAgLy8gYWNjb3JkaW5nIHRvIHRoZSBiYXNpcyBpbiBjb250cm9sW10KICAvLyBwbGFjaW5n
IHBvaW50cyBpbnRvIGNvb3JkUHRyW2Nvb3JkT2ZmXQogIGZ1bmN0aW9uIHNtb290aFBvaW50cyhj
b250cm9sLCBudW1TdGVwcywgY29vcmRQdHIsIGNvb3JkT2ZmKSB7Cglmb3IgKHZhciBpID0gMTsg
aSA8PSBudW1TdGVwczsgaSsrLCBjb29yZE9mZiArPSAyKSB7CiAgICAgIHZhciB0ID0gaS9udW1T
dGVwcywgdDIgPSB0KnQsIHQzID0gdDIqdCwKCQl1ID0gMS4wIC0gdCwgdTIgPSB1KnUsIHUzID0g
dTIqdTsKICAgICAgY29vcmRQdHJbY29vcmRPZmYrMF0gPSBjb250cm9sWzBdKnUzICsgMy4wICog
KGNvbnRyb2xbMl0qdCp1MiArIGNvbnRyb2xbNF0qdDIqdSkgKyBjb250cm9sWzZdKnQzOwogICAg
ICBjb29yZFB0cltjb29yZE9mZisxXSA9IGNvbnRyb2xbMV0qdTMgKyAzLjAgKiAoY29udHJvbFsz
XSp0KnUyICsgY29udHJvbFs1XSp0Mip1KSArIGNvbnRyb2xbN10qdDM7Cgl9CiAgfTsKCiAgLyoK
ICAgKiBJZiB0aGUgY3VydmUgaXMgYSBjbG9zZWQgb25lIHRoZW4gZ2VuZXJhdGUgYSBzcGVjaWFs
IHNwbGluZQogICAqIHRoYXQgc3BhbnMgdGhlIGxhc3QgcG9pbnRzIGFuZCB0aGUgZmlyc3Qgb25l
cy4gIE90aGVyd2lzZQogICAqIGp1c3QgcHV0IHRoZSBmaXJzdCBwb2ludCBpbnRvIHRoZSBvdXRw
dXQuCiAgICovCgogIHZhciBjbG9zZWQgPSAoeCgwKSA9PSB4KG4tMSkpICYmICh5KDApID09IHko
bi0xKSk7CiAgaWYgKGNsb3NlZCkgewoJY29udHJvbFswXSA9IDAuNSp4KG4tMikgKyAwLjUqeCgw
KTsKCWNvbnRyb2xbMV0gPSAwLjUqeShuLTIpICsgMC41KnkoMCk7Cgljb250cm9sWzJdID0gMC4x
NjcqeChuLTIpICsgMC44MzMqeCgwKTsKCWNvbnRyb2xbM10gPSAwLjE2Nyp5KG4tMikgKyAwLjgz
Myp5KDApOwoJY29udHJvbFs0XSA9IDAuODMzKngoMCkgKyAwLjE2Nyp4KDEpOwoJY29udHJvbFs1
XSA9IDAuODMzKnkoMCkgKyAwLjE2Nyp5KDEpOwoJY29udHJvbFs2XSA9IDAuNSp4KDApICsgMC41
KngoMSk7Cgljb250cm9sWzddID0gMC41KnkoMCkgKyAwLjUqeSgxKTsKCWRibFBvaW50c1syKm91
dHB1dFBvaW50cyswXSA9IGNvbnRyb2xbMF07CglkYmxQb2ludHNbMipvdXRwdXRQb2ludHMrMV0g
PSBjb250cm9sWzFdOwoJb3V0cHV0UG9pbnRzICs9IDE7CglzbW9vdGhQb2ludHMoY29udHJvbCwg
c21vb3RoU3RlcHMsIGRibFBvaW50cywgMipvdXRwdXRQb2ludHMpOwoJb3V0cHV0UG9pbnRzICs9
IHNtb290aFN0ZXBzOwogIH0gZWxzZSB7CglkYmxQb2ludHNbMipvdXRwdXRQb2ludHMrMF0gPSB4
KDApOwoJZGJsUG9pbnRzWzIqb3V0cHV0UG9pbnRzKzFdID0geSgwKTsKCW91dHB1dFBvaW50cyAr
PSAxOwogIH0KCiAgZm9yICh2YXIgaSA9IDI7IGkgPCBuOyBpICs9IDEpIHsKCXZhciBqID0gaSAt
IDI7CgkvKgoJICogU2V0IHVwIHRoZSBmaXJzdCB0d28gY29udHJvbCBwb2ludHMuICBUaGlzIGlz
IGRvbmUKCSAqIGRpZmZlcmVudGx5IGZvciB0aGUgZmlyc3Qgc3BsaW5lIG9mIGFuIG9wZW4gY3Vy
dmUKCSAqIHRoYW4gZm9yIG90aGVyIGNhc2VzLgoJICovCglpZiAoKGkgPT0gMikgJiYgIWNsb3Nl
ZCkgewogICAgICBjb250cm9sWzBdID0geChqKTsKICAgICAgY29udHJvbFsxXSA9IHkoaik7CiAg
ICAgIGNvbnRyb2xbMl0gPSAwLjMzMyp4KGopICsgMC42NjcqeChqKzEpOwogICAgICBjb250cm9s
WzNdID0gMC4zMzMqeShqKSArIDAuNjY3KnkoaisxKTsKCX0gZWxzZSB7CiAgICAgIGNvbnRyb2xb
MF0gPSAwLjUqeChqKSArIDAuNSp4KGorMSk7CiAgICAgIGNvbnRyb2xbMV0gPSAwLjUqeShqKSAr
IDAuNSp5KGorMSk7CiAgICAgIGNvbnRyb2xbMl0gPSAwLjE2Nyp4KGopICsgMC44MzMqeChqKzEp
OwogICAgICBjb250cm9sWzNdID0gMC4xNjcqeShqKSArIDAuODMzKnkoaisxKTsKCX0KCgkvKgoJ
ICogU2V0IHVwIHRoZSBsYXN0IHR3byBjb250cm9sIHBvaW50cy4gIFRoaXMgaXMgZG9uZQoJICog
ZGlmZmVyZW50bHkgZm9yIHRoZSBsYXN0IHNwbGluZSBvZiBhbiBvcGVuIGN1cnZlCgkgKiB0aGFu
IGZvciBvdGhlciBjYXNlcy4KCSAqLwoKCWlmICgoaSA9PSAobi0xKSkgJiYgIWNsb3NlZCkgewog
ICAgICBjb250cm9sWzRdID0gLjY2Nyp4KGorMSkgKyAuMzMzKngoaisyKTsKICAgICAgY29udHJv
bFs1XSA9IC42NjcqeShqKzEpICsgLjMzMyp5KGorMik7CiAgICAgIGNvbnRyb2xbNl0gPSB4KGor
Mik7CiAgICAgIGNvbnRyb2xbN10gPSB5KGorMik7Cgl9IGVsc2UgewogICAgICBjb250cm9sWzRd
ID0gLjgzMyp4KGorMSkgKyAuMTY3KngoaisyKTsKICAgICAgY29udHJvbFs1XSA9IC44MzMqeShq
KzEpICsgLjE2Nyp5KGorMik7CiAgICAgIGNvbnRyb2xbNl0gPSAwLjUqeChqKzEpICsgMC41Kngo
aisyKTsKICAgICAgY29udHJvbFs3XSA9IDAuNSp5KGorMSkgKyAwLjUqeShqKzIpOwoJfQoKCS8q
CgkgKiBJZiB0aGUgZmlyc3QgdHdvIHBvaW50cyBjb2luY2lkZSwgb3IgaWYgdGhlIGxhc3QKCSAq
IHR3byBwb2ludHMgY29pbmNpZGUsIHRoZW4gZ2VuZXJhdGUgYSBzaW5nbGUKCSAqIHN0cmFpZ2h0
LWxpbmUgc2VnbWVudCBieSBvdXRwdXR0aW5nIHRoZSBsYXN0IGNvbnRyb2wKCSAqIHBvaW50LgoJ
ICovCgoJaWYgKCgoeChqKSA9PSB4KGorMSkpICYmICh5KGopID09IHkoaisxKSkpCiAgICAgICAg
fHwgKCh4KGorMSkgPT0geChqKzIpKSAmJiAoeShqKzEpID09IHkoaisyKSkpKSB7CgkgIGRibFBv
aW50c1syKm91dHB1dFBvaW50cyswXSA9IGNvbnRyb2xbNl07CgkgIGRibFBvaW50c1syKm91dHB1
dFBvaW50cysxXSA9IGNvbnRyb2xbN107CgkgIG91dHB1dFBvaW50cyArPSAxOwoJICBjb250aW51
ZTsKCX0KCgkvKgoJICogR2VuZXJhdGUgYSBCZXppZXIgc3BsaW5lIHVzaW5nIHRoZSBjb250cm9s
IHBvaW50cy4KCSAqLwoJc21vb3RoUG9pbnRzKGNvbnRyb2wsIHNtb290aFN0ZXBzLCBkYmxQb2lu
dHMsIDIqb3V0cHV0UG9pbnRzKTsKCW91dHB1dFBvaW50cyArPSBzbW9vdGhTdGVwczsKICB9Cgog
IC8vIGRyYXcgdGhlIHBvaW50cwogIC8vIGFub255bW91cyBmdW5jdGlvbnMgZG9uJ3Qgd29yayBo
ZXJlCiAgLy8gdGhleSByZXN1bHQgaW4gInVuZGVmaW5lZCIgcG9pbnQgdmFsdWVzCiAgZnVuY3Rp
b24gbXl4KGkpIHsgcmV0dXJuIE1hdGgucm91bmQoZGJsUG9pbnRzWzIqaV0pOyB9CiAgICBmdW5j
dGlvbiBteXkoaSkgeyByZXR1cm4gTWF0aC5yb3VuZChkYmxQb2ludHNbMippKzFdKTsgfQogICAg
Zk5YWShvdXRwdXRQb2ludHMsIG15eCwgbXl5KTsKfQoKLy8gb3V0cHV0IGEgUE5HIHN0cmluZwpQ
bmdsZXQucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uKCkgewogIC8vIG91dHB1dCB0cmFuc2xh
dGlvbnMKICBmdW5jdGlvbiBpbml0aWFsaXplKHBuZywgb2Zmcywgc3RyKSB7Cglmb3IgKHZhciBp
ID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMSkKICAgICAgaWYgKHR5cGVvZiBhcmd1
bWVudHNbaV0ubGVuZ3RoICE9ICJ1bmRlZmluZWQiKQogICAgICAgIGZvciAodmFyIGogPSAwOyBq
IDwgYXJndW1lbnRzW2ldLmxlbmd0aDsgaiArPSAxKQogICAgICAgICAgcG5nW29mZnMrK10gPSBh
cmd1bWVudHNbaV0uY2hhckF0KGopOwogIH0KICAgIGZ1bmN0aW9uIGJ5dGU0KHcpIHsgcmV0dXJu
IFN0cmluZy5mcm9tQ2hhckNvZGUoKHc+PjI0KSYyNTUsICh3Pj4xNikmMjU1LCAodz4+OCkmMjU1
LCB3JjI1NSk7IH0KCiAgICAvLyBjb21wdXRlIGFkbGVyMzIgb2Ygb3V0cHV0IHBpeGVscyArIHJv
dyBmaWx0ZXIgYnl0ZXMKICAgIHZhciBCQVNFID0gNjU1MjE7IC8qIGxhcmdlc3QgcHJpbWUgc21h
bGxlciB0aGFuIDY1NTM2ICovCiAgdmFyIE5NQVggPSA1NTUyOyAgLyogTk1BWCBpcyB0aGUgbGFy
Z2VzdCBuIHN1Y2ggdGhhdCAyNTVuKG4rMSkvMiArIChuKzEpKEJBU0UtMSkgPD0gMl4zMi0xICov
CiAgdmFyIHMxID0gMTsKICB2YXIgczIgPSAwOwogIHZhciBuID0gTk1BWDsKICBmb3IgKHZhciB5
ID0gMDsgeSA8IHRoaXMuaGVpZ2h0OyB5ICs9IDEpCglmb3IgKHZhciB4ID0gLTE7IHggPCB0aGlz
LndpZHRoOyB4ICs9IDEpIHsKICAgICAgczEgKz0gdGhpcy5wbmdbdGhpcy5pbmRleCh4LHkpXS5j
aGFyQ29kZUF0KDApOwogICAgICBzMiArPSBzMTsKICAgICAgaWYgKChuIC09IDEpID09IDApIHsK
CQlzMSAlPSBCQVNFOwoJCXMyICU9IEJBU0U7CgkJbiA9IE5NQVg7CiAgICAgIH0KCX0KICBzMSAl
PSBCQVNFOwogIHMyICU9IEJBU0U7CiAgaW5pdGlhbGl6ZSh0aGlzLnBuZywgdGhpcy5pZGF0X29m
ZnMrdGhpcy5pZGF0X3NpemUtOCwgYnl0ZTQoKHMyIDw8IDE2KSB8IHMxKSk7CgogIC8vIGNvbXB1
dGUgY3JjMzIgb2YgdGhlIFBORyBjaHVua3MKICBmdW5jdGlvbiBjcmMzMihwbmcsIG9mZnMsIHNp
emUpIHsKCXZhciBjcmMgPSAtMTsJCS8vIGluaXRpYWxpemUgY3JjCglmb3IgKHZhciBpID0gNDsg
aSA8IHNpemUtNDsgaSArPSAxKQogICAgICBjcmMgPSBQbmdsZXQuY3JjMzJfdGFibGVbKGNyYyBe
IHBuZ1tvZmZzK2ldLmNoYXJDb2RlQXQoMCkpICYgMHhmZl0gXiAoKGNyYyA+PiA4KSAmIDB4MDBm
ZmZmZmYpOwoJaW5pdGlhbGl6ZShwbmcsIG9mZnMrc2l6ZS00LCBieXRlNChjcmMgXiAtMSkpOwog
IH0KCiAgICBjcmMzMih0aGlzLnBuZywgdGhpcy5paGRyX29mZnMsIHRoaXMuaWhkcl9zaXplKTsK
ICBjcmMzMih0aGlzLnBuZywgdGhpcy5wbHRlX29mZnMsIHRoaXMucGx0ZV9zaXplKTsKICBjcmMz
Mih0aGlzLnBuZywgdGhpcy50cm5zX29mZnMsIHRoaXMudHJuc19zaXplKTsKICBjcmMzMih0aGlz
LnBuZywgdGhpcy5pZGF0X29mZnMsIHRoaXMuaWRhdF9zaXplKTsKICBjcmMzMih0aGlzLnBuZywg
dGhpcy5pZW5kX29mZnMsIHRoaXMuaWVuZF9zaXplKTsKCiAgLy8gY29udmVydCBQTkcgdG8gc3Ry
aW5nCiAgcmV0dXJuICJcMjExUE5HXHJcblwwMzJcbiIrdGhpcy5wbmcuam9pbignJyk7Cn0KCi8q
IFRhYmxlIG9mIENSQ3Mgb2YgYWxsIDgtYml0IG1lc3NhZ2VzLiAqLwpQbmdsZXQuY3JjMzJfdGFi
bGUgPSBuZXcgQXJyYXkoMjU2KTsKZm9yICh2YXIgbiA9IDA7IG4gPCAyNTY7IG4rKykgewogIHZh
ciBjID0gbjsKICBmb3IgKHZhciBrID0gMDsgayA8IDg7IGsrKykgewogICAgaWYgKGMgJiAxKQog
ICAgICBjID0gLTMwNjY3NDkxMiBeICgoYyA+PiAxKSAmIDB4N2ZmZmZmZmYpOwogICAgZWxzZQog
ICAgICBjID0gKGMgPj4gMSkgJiAweDdmZmZmZmZmOwogIH0KICBQbmdsZXQuY3JjMzJfdGFibGVb
bl0gPSBjOwp9Cjwvc2NyaXB0Pgo8L2hlYWQ+Cgo8Ym9keT4KPHA+U2hvdWxkIHNlZSBhIGxpZ2h0
IGdyZWVuIHJlY3RhbmdsZTo8L3A+CjxkaXYgaWQ9cmVzdWx0PjwvZGl2Pgo8c2NyaXB0PgoJcG5n
ZGF0YSA9IG5ldyBQbmdsZXQoMSwxLDEpOwoJcG5nZGF0YS5wb2ludChwbmdkYXRhLmNvbG9yKDAs
MjU1LDAsMTI3KSwxLDEpOwoKCXBuZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImltZyIpOwoJ
cG5nLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7Cglwbmcuc3R5bGUud2lkdGggPSAiMTAwcHgiOwoJ
Cglwbmcuc3JjID0gImRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwiICsgYnRvYShwbmdkYXRhLm91dHB1
dCgpKTsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdyZXN1bHQnKS5hcHBlbmRDaGlsZChwbmcp
Owo8L3NjcmlwdD4KPC9ib2R5Pg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11405</attachid>
            <date>2006-11-06 12:32:57 -0800</date>
            <delta_ts>2006-11-08 09:20:55 -0800</delta_ts>
            <desc>proposed fix</desc>
            <filename>9673r1_patch.txt</filename>
            <type>text/plain</type>
            <size>61831</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjIzKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMTEtMDYgIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk2NzMKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHdpbmRvdy5hdG9iKCkgYW5kIHdpbmRv
dy5idG9hKCkKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IFVTdHJpbmc6
OmlzOEJpdCgpLgorCiAyMDA2LTExLTA2ICBNYXJrIFJvd2UgIDxiZGFzaEB3ZWJraXQub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IHRoZSB3b25kZXJmdWwgTWl0eiBQZXR0ZWwuCkluZGV4OiBK
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUuZXhwCShyZXZpc2lvbiAxNzYxOCkKKysrIEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLmV4cAkod29ya2luZyBjb3B5KQpAQCAtMjUyLDYgKzI1Miw3IEBA
IF9fWk5LM0tKUzdKU1ZhbHVlOXRvSW50ZWdlckVQTlNfOUV4ZWNTdGEKIF9fWk5LM0tKUzdVU3Ry
aW5nMTBVVEY4U3RyaW5nRXYKIF9fWk5LM0tKUzdVU3RyaW5nMTR0b1N0cmljdFVJbnQzMkVQYgog
X19aTkszS0pTN1VTdHJpbmc1YXNjaWlFdgorX19aTkszS0pTN1VTdHJpbmc2aXM4Qml0RXYKIF9f
Wk5LM0tKUzdVU3RyaW5nOHRvVUludDMyRVBiCiBfX1pOSzNLSlM4SlNPYmplY3QxMWhhc1Byb3Bl
cnR5RVBOU185RXhlY1N0YXRlRVJLTlNfMTBJZGVudGlmaWVyRQogX19aTkszS0pTOEpTT2JqZWN0
MTJkZWZhdWx0VmFsdWVFUE5TXzlFeGVjU3RhdGVFTlNfNkpTVHlwZUUKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE3NjIzKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDMgKzEsMTggQEAKKzIwMDYtMTEtMDYgIEFsZXhleSBQcm9za3VyeWFrb3YgIDxhcEBueXBvcC5j
b20+CisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9OTY3
MworICAgICAgICBBZGQgc3VwcG9ydCBmb3Igd2luZG93LmF0b2IoKSBhbmQgd2luZG93LmJ0b2Eo
KQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmFz
dC9kb20vV2luZG93L2F0b2ItYnRvYS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGZh
c3QvZG9tL1dpbmRvdy9hdG9iLWJ0b2EuaHRtbDogQWRkZWQuCisgICAgICAgICogZmFzdC9kb20v
V2luZG93L2J0b2EtcG5nbGV0LWV4cGVjdGVkLmNoZWNrc3VtOiBBZGRlZC4KKyAgICAgICAgKiBm
YXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQucG5nOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBmYXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQuaHRtbDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dDoKKwogMjAwNi0x
MS0wNiAgT2xpdmVyIEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IE1pdHouCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYXRvYi1idG9hLWV4
cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYXRv
Yi1idG9hLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L1dpbmRvdy9hdG9iLWJ0b2EtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDQ4
IEBACitQQVNTIHdpbmRvdy5hdG9iKCJZUT09IikgaXMgImEiCitQQVNTIHdpbmRvdy5hdG9iKCJZ
V0k9IikgaXMgImFiIgorUEFTUyB3aW5kb3cuYXRvYigiWVdKaiIpIGlzICJhYmMiCitQQVNTIHdp
bmRvdy5hdG9iKCJZV0pqWkE9PSIpIGlzICJhYmNkIgorUEFTUyB3aW5kb3cuYXRvYigiWVdKalpH
VT0iKSBpcyAiYWJjZGUiCitQQVNTIHdpbmRvdy5hdG9iKCJZV0pqWkdWbSIpIGlzICJhYmNkZWYi
CitQQVNTIHdpbmRvdy5idG9hKCJhIikgaXMgIllRPT0iCitQQVNTIHdpbmRvdy5idG9hKCJhYiIp
IGlzICJZV0k9IgorUEFTUyB3aW5kb3cuYnRvYSgiYWJjIikgaXMgIllXSmoiCitQQVNTIHdpbmRv
dy5idG9hKCJhYmNkIikgaXMgIllXSmpaQT09IgorUEFTUyB3aW5kb3cuYnRvYSgiYWJjZGUiKSBp
cyAiWVdKalpHVT0iCitQQVNTIHdpbmRvdy5idG9hKCJhYmNkZWYiKSBpcyAiWVdKalpHVm0iCitQ
QVNTIHR5cGVvZiB3aW5kb3cuYnRvYSBpcyAiZnVuY3Rpb24iCitQQVNTIHdpbmRvdy5idG9hKCkg
dGhyZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KK1BBU1Mg
d2luZG93LmJ0b2EoIiIpIGlzICIiCitQQVNTIHdpbmRvdy5idG9hKG51bGwpIGlzICIiCitQQVNT
IHdpbmRvdy5idG9hKHdpbmRvdykgaXMgIlcyOWlhbVZqZENCWGFXNWtiM2RkIgorUEFTUyB3aW5k
b3cuYnRvYSgiw6nDqSIpIGlzICI2ZWs9IgorUEFTUyB3aW5kb3cuYnRvYSgiXHUwMDgwXHUwMDgx
IikgaXMgImdJRT0iCitQQVNTIHdpbmRvdy5idG9hKCLRgtC10YHRgiIpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogSU5WQUxJRF9DSEFSQUNURVJfRVJSOiBET00gRXhjZXB0aW9uIDUuCitQQVNTIHdp
bmRvdy5idG9hIGlzIDAKK1BBU1MgdHlwZW9mIHdpbmRvdy5idG9hIGlzICJudW1iZXIiCitQQVNT
IHR5cGVvZiB3aW5kb3cuYXRvYiBpcyAiZnVuY3Rpb24iCitQQVNTIHdpbmRvdy5hdG9iKCkgdGhy
ZXcgZXhjZXB0aW9uIFN5bnRheEVycm9yOiBOb3QgZW5vdWdoIGFyZ3VtZW50cy4KK1BBU1Mgd2lu
ZG93LmF0b2IoIiIpIGlzICIiCitQQVNTIHdpbmRvdy5hdG9iKG51bGwpIGlzICIiCitQQVNTIHdp
bmRvdy5hdG9iKCIgWVE9PSIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogQ2Fubm90IGRlY29kZSBi
YXNlNjQuCitQQVNTIHdpbmRvdy5hdG9iKCJZUT09XHUwMDBhIikgdGhyZXcgZXhjZXB0aW9uIEVy
cm9yOiBDYW5ub3QgZGVjb2RlIGJhc2U2NC4KK1BBU1Mgd2luZG93LmF0b2IoIjZlaz0iKSBpcyAi
w6nDqSIKK1BBU1Mgd2luZG93LmF0b2IoIjZlayIpIGlzICLDqcOpIgorUEFTUyB3aW5kb3cuYXRv
YigiZ0lFPSIpIGlzICLCgMKBIgorUEFTUyB3aW5kb3cuYXRvYigi0YLQtdGB0YIiKSB0aHJldyBl
eGNlcHRpb24gRXJyb3I6IElOVkFMSURfQ0hBUkFDVEVSX0VSUjogRE9NIEV4Y2VwdGlvbiA1Lgor
UEFTUyB3aW5kb3cuYXRvYigieiIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogQ2Fubm90IGRlY29k
ZSBiYXNlNjQuCitQQVNTIHdpbmRvdy5hdG9iKCJ6eiIpIGlzICLDjyIKK1BBU1Mgd2luZG93LmF0
b2IoInp6eiIpIGlzICLDjzwiCitQQVNTIHdpbmRvdy5hdG9iKCJ6enp6IikgaXMgIsOPPMOzIgor
UEFTUyB3aW5kb3cuYXRvYigienp6enoiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBk
ZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigiPSIpIHRocmV3IGV4Y2VwdGlvbiBFcnJv
cjogQ2Fubm90IGRlY29kZSBiYXNlNjQuCitQQVNTIHdpbmRvdy5hdG9iKCI9PSIpIHRocmV3IGV4
Y2VwdGlvbiBFcnJvcjogQ2Fubm90IGRlY29kZSBiYXNlNjQuCitQQVNTIHdpbmRvdy5hdG9iKCI9
PT0iKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBkZWNvZGUgYmFzZTY0LgorUEFTUyB3
aW5kb3cuYXRvYigiPT09PSIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjogQ2Fubm90IGRlY29kZSBi
YXNlNjQuCitQQVNTIHdpbmRvdy5hdG9iKCI9PT09PSIpIHRocmV3IGV4Y2VwdGlvbiBFcnJvcjog
Q2Fubm90IGRlY29kZSBiYXNlNjQuCitQQVNTIHdpbmRvdy5hdG9iIGlzIDAKK1BBU1MgdHlwZW9m
IHdpbmRvdy5hdG9iIGlzICJudW1iZXIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFz
dC9kb20vV2luZG93L2F0b2ItYnRvYS1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46
bWltZS10eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZl
CgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2F0b2ItYnRvYS5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9hdG9iLWJ0b2EuaHRtbAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9hdG9iLWJ0b2EuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw2NCBAQAor77u/PCFET0NUWVBFIEhUTUwgUFVCTElDICIt
Ly9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxsaW5rIHJlbD0ic3R5bGVz
aGVldCIgaHJlZj0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzIj4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8cCBpZD0iZGVzY3JpcHRpb24iPjwvcD4KKzxkaXYgaWQ9ImNvbnNvbGUi
PjwvZGl2PgorPHNjcmlwdD4KK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigiWVE9PSIpJywgJyJhIicp
Oworc2hvdWxkQmUoJ3dpbmRvdy5hdG9iKCJZV0k9IiknLCAnImFiIicpOworc2hvdWxkQmUoJ3dp
bmRvdy5hdG9iKCJZV0pqIiknLCAnImFiYyInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigiWVdK
alpBPT0iKScsICciYWJjZCInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigiWVdKalpHVT0iKScs
ICciYWJjZGUiJyk7CitzaG91bGRCZSgnd2luZG93LmF0b2IoIllXSmpaR1ZtIiknLCAnImFiY2Rl
ZiInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYnRvYSgiYSIpJywgJyJZUT09IicpOworc2hvdWxkQmUo
J3dpbmRvdy5idG9hKCJhYiIpJywgJyJZV0k9IicpOworc2hvdWxkQmUoJ3dpbmRvdy5idG9hKCJh
YmMiKScsICciWVdKaiInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYnRvYSgiYWJjZCIpJywgJyJZV0pq
WkE9PSInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYnRvYSgiYWJjZGUiKScsICciWVdKalpHVT0iJyk7
CitzaG91bGRCZSgnd2luZG93LmJ0b2EoImFiY2RlZiIpJywgJyJZV0pqWkdWbSInKTsKKworc2hv
dWxkQmUoJ3R5cGVvZiB3aW5kb3cuYnRvYScsICciZnVuY3Rpb24iJyk7CitzaG91bGRUaHJvdygn
d2luZG93LmJ0b2EoKScpOworc2hvdWxkQmUoJ3dpbmRvdy5idG9hKCIiKScsICciIicpOworc2hv
dWxkQmUoJ3dpbmRvdy5idG9hKG51bGwpJywgJyIiJyk7CitzaG91bGRCZSgnd2luZG93LmJ0b2Eo
d2luZG93KScsICciVzI5aWFtVmpkQ0JYYVc1a2IzZGQiJyk7IC8vICJbb2JqZWN0IFdpbmRvd10i
CitzaG91bGRCZSgnd2luZG93LmJ0b2EoIsOpw6kiKScsICciNmVrPSInKTsKK3Nob3VsZEJlKCd3
aW5kb3cuYnRvYSgiXFx1MDA4MFxcdTAwODEiKScsICciZ0lFPSInKTsKK3Nob3VsZFRocm93KCd3
aW5kb3cuYnRvYSgi0YLQtdGB0YIiKScpOword2luZG93LmJ0b2EgPSAwOworc2hvdWxkQmUoJ3dp
bmRvdy5idG9hJywgJzAnKTsKK3Nob3VsZEJlKCd0eXBlb2Ygd2luZG93LmJ0b2EnLCAnIm51bWJl
ciInKTsKKworc2hvdWxkQmUoJ3R5cGVvZiB3aW5kb3cuYXRvYicsICciZnVuY3Rpb24iJyk7Citz
aG91bGRUaHJvdygnd2luZG93LmF0b2IoKScpOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9iKCIiKScs
ICciIicpOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9iKG51bGwpJywgJyIiJyk7CitzaG91bGRUaHJv
dygnd2luZG93LmF0b2IoIiBZUT09IiknKTsKK3Nob3VsZFRocm93KCd3aW5kb3cuYXRvYigiWVE9
PVxcdTAwMGEiKScpOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9iKCI2ZWs9IiknLCAnIsOpw6kiJyk7
CitzaG91bGRCZSgnd2luZG93LmF0b2IoIjZlayIpJywgJyLDqcOpIicpOworc2hvdWxkQmUoJ3dp
bmRvdy5hdG9iKCJnSUU9IiknLCAnIlx1MDA4MFx1MDA4MSInKTsKK3Nob3VsZFRocm93KCd3aW5k
b3cuYXRvYigi0YLQtdGB0YIiKScpOworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCJ6IiknKTsK
K3Nob3VsZEJlKCd3aW5kb3cuYXRvYigienoiKScsICciw48iJyk7CitzaG91bGRCZSgnd2luZG93
LmF0b2IoInp6eiIpJywgJyLDj1x1MDAzQyInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigienp6
eiIpJywgJyLDj1x1MDAzQ8OzIicpOworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCJ6enp6eiIp
Jyk7CitzaG91bGRUaHJvdygnd2luZG93LmF0b2IoIj0iKScpOworc2hvdWxkVGhyb3coJ3dpbmRv
dy5hdG9iKCI9PSIpJyk7CitzaG91bGRUaHJvdygnd2luZG93LmF0b2IoIj09PSIpJyk7CitzaG91
bGRUaHJvdygnd2luZG93LmF0b2IoIj09PT0iKScpOworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9i
KCI9PT09PSIpJyk7Cit3aW5kb3cuYXRvYiA9IDA7CitzaG91bGRCZSgnd2luZG93LmF0b2InLCAn
MCcpOworc2hvdWxkQmUoJ3R5cGVvZiB3aW5kb3cuYXRvYicsICcibnVtYmVyIicpOworCitzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMv
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CgpQ
cm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYXRvYi1idG9h
Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBlCiAgICsgdGV4dC9odG1sCgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0LWV4cGVjdGVkLmNoZWNr
c3VtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xl
dC1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9t
L1dpbmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC5jaGVja3N1bQkocmV2aXNpb24gMCkKQEAgLTAs
MCArMSBAQAorNDBlNjhjZjJiODAyZTk3NmI0NmIxOWY5NGZmMTlhNTUKXCBObyBuZXdsaW5lIGF0
IGVuZCBvZiBmaWxlCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYnRvYS1wbmds
ZXQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRv
dy9idG9hLXBuZ2xldC1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQpAQCAt
MCwwICsxLDEwIEBACitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAgUmVuZGVyVmlldyBh
dCAoMCwwKSBzaXplIDgwMHg2MDAKK2xheWVyIGF0ICgwLDApIHNpemUgODAweDYwMAorICBSZW5k
ZXJCbG9jayB7SFRNTH0gYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgICAgUmVuZGVyQm9keSB7Qk9E
WX0gYXQgKDgsOCkgc2l6ZSA3ODR4NTg0CisgICAgICBSZW5kZXJCbG9jayB7UH0gYXQgKDAsMCkg
c2l6ZSA3ODR4MTgKKyAgICAgICAgUmVuZGVyVGV4dCB7I3RleHR9IGF0ICgwLDApIHNpemUgMjE2
eDE4CisgICAgICAgICAgdGV4dCBydW4gYXQgKDAsMCkgd2lkdGggMjE2OiAiU2hvdWxkIHNlZSBh
IGxpZ2h0IGdyZWVuIHJlY3RhbmdsZToiCisgICAgICBSZW5kZXJCbG9jayB7RElWfSBhdCAoMCwz
NCkgc2l6ZSA3ODR4MTAwCisgICAgICAgIFJlbmRlckltYWdlIHtJTUd9IGF0ICgwLDApIHNpemUg
MTAweDEwMAoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93
L2J0b2EtcG5nbGV0LWV4cGVjdGVkLnR4dApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjptaW1lLXR5cGUK
ICAgKyB0ZXh0L3BsYWluCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBM
YXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQuaHRtbAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC5odG1sCShyZXZp
c2lvbiAwKQpAQCAtMCwwICsxLDc5OCBAQAorPGhlYWQ+Cis8c2NyaXB0PgorLy8KKy8vIFBORyBk
cmF3aW5nIGxpYnJhcnkgZm9yIEphdmFTY3JpcHQuCisvLyBDb3B5cmlnaHQgKEMpIDE5OTkgYnkg
Um9nZXIgRSBDcml0Y2hsb3cgSnIsCisvLyBTYW50YSBGZSwgTmV3IE1leGljbywgVVNBLgorLy8K
Ky8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UgdmVyc2lvbiAyLjEK
Ky8vCisvLyBUaGUgaG9tZSBwYWdlIGZvciBQbmdsZXRzIGlzIGh0dHA6Ly93d3cuZWxmLm9yZy9w
bmdsZXRzLAorLy8gYSBjb3B5IG9mIHRoZSBBRkwgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly93d3cu
b3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYWZsLTIuMS5waHAsCisvLyBQbmdsZXRzIHdlcmUgaW5z
cGlyZWQgYnkgYW5kIGNvcGllZCBmcm9tIGdkMS4zLCBodHRwOi8vd3d3LmJvdXRlbGwuY29tL2dk
LAorLy8gb3RoZXIgcGFydHMgd2VyZSBpbnNwaXJlZCBieSBvciBjb3BpZWQgZnJvbSBUY2wvVGss
IGh0dHA6Ly93d3cuc2NyaXB0aWNzLmNvbSwKKy8vIGFuZCBzb21lIGFsZ29yaXRobXMgd2VyZSB0
YWtlbiBmcm9tIEZvbGV5ICYgdmFuIERhbSAybmQgRWRpdGlvbi4KKy8vCisvLyBUaGFua3MgdG8g
QWxleCBWaW5jZW50IGZvciBwb2ludGluZyBvdXQgdGhlIGFkdmFudGFnZXMgb2YgZWxpbWluYXRp
bmcgc3RyaWN0CisvLyBqYXZhc2NyaXB0IHdhcm5pbmdzLgorLy8KKworLy8gY3JlYXRlIGEgbmV3
IFBuZ2xldCBvZiBzcGVjaWZpZWQgd2lkdGgsIGhlaWdodCwgYW5kIGRlcHRoCisvLyB3aWR0aCBh
bmQgaGVpZ2h0IGFyZSBzcGVjaWZpZWQgaW4gcGl4ZWxzCisvLyBkZXB0aCBpcyByZWFsbHkgdGhl
IG51bWJlciBvZiBwYWxldHRlIGVudHJpZXMKK2Z1bmN0aW9uIFBuZ2xldCh3aWR0aCxoZWlnaHQs
ZGVwdGgpIHsKKyAgdGhpcy53aWR0aCA9IHdpZHRoIHx8IDE2OworICB0aGlzLmhlaWdodCA9IGhl
aWdodCB8fCAxNjsKKyAgdGhpcy5kZXB0aCA9IE1hdGgubWluKDI1NiwgZGVwdGggfHwgMTYpOwor
CisgIC8vIHBpeGVsIGRhdGEgYW5kIHJvdyBmaWx0ZXIgaWRlbnRpZmllciBzaXplCisgIHRoaXMu
cGl4X3NpemUgPSBoZWlnaHQqKHdpZHRoKzEpOworCisgIC8vIGRlZmxhdGUgaGVhZGVyLCBwaXhf
c2l6ZSwgYmxvY2sgaGVhZGVycywgYWRsZXIzMiBjaGVja3N1bQorICB0aGlzLmRhdGFfc2l6ZSA9
IDIgKyB0aGlzLnBpeF9zaXplICsgNSpNYXRoLmZsb29yKCh0aGlzLnBpeF9zaXplKzB4ZmZmZi0x
KS8weGZmZmYpICsgNDsKKworICAvLyBvZmZzZXRzIGFuZCBzaXplcyBvZiBQbmcgY2h1bmtzCisg
IHRoaXMuaWhkcl9vZmZzID0gMDsJCQkJCS8vIElIRFIgb2Zmc2V0IGFuZCBzaXplCisgIHRoaXMu
aWhkcl9zaXplID0gNCs0KzEzKzQ7CisgIHRoaXMucGx0ZV9vZmZzID0gdGhpcy5paGRyX29mZnMr
dGhpcy5paGRyX3NpemU7CS8vIFBMVEUgb2Zmc2V0IGFuZCBzaXplCisgIHRoaXMucGx0ZV9zaXpl
ID0gNCs0KzMqZGVwdGgrNDsKKyAgdGhpcy50cm5zX29mZnMgPSB0aGlzLnBsdGVfb2Zmcyt0aGlz
LnBsdGVfc2l6ZTsJLy8gdFJOUyBvZmZzZXQgYW5kIHNpemUKKyAgdGhpcy50cm5zX3NpemUgPSA0
KzQrZGVwdGgrNDsKKyAgdGhpcy5pZGF0X29mZnMgPSB0aGlzLnRybnNfb2Zmcyt0aGlzLnRybnNf
c2l6ZTsJLy8gSURBVCBvZmZzZXQgYW5kIHNpemUKKyAgdGhpcy5pZGF0X3NpemUgPSA0KzQrdGhp
cy5kYXRhX3NpemUrNDsKKyAgdGhpcy5pZW5kX29mZnMgPSB0aGlzLmlkYXRfb2Zmcyt0aGlzLmlk
YXRfc2l6ZTsJLy8gSUVORCBvZmZzZXQgYW5kIHNpemUKKyAgdGhpcy5pZW5kX3NpemUgPSA0KzQr
NDsKKyAgdGhpcy5wbmdfc2l6ZSA9IHRoaXMuaWVuZF9vZmZzK3RoaXMuaWVuZF9zaXplOwkvLyB0
b3RhbCBQTkcgc2l6ZQorCisgIC8vIGFycmF5IG9mIG9uZSBieXRlIHN0cmluZ3MKKyAgdGhpcy5w
bmcgPSBuZXcgQXJyYXkodGhpcy5wbmdfc2l6ZSk7CisKKyAgLy8gZnVuY3Rpb25zIGZvciBpbml0
aWFsaXppbmcgZGF0YQorICBmdW5jdGlvbiBpbml0aWFsaXplKHBuZywgb2Zmcywgc3RyKSB7Cisg
ICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDEpCisgICAgICBp
ZiAodHlwZW9mIGFyZ3VtZW50c1tpXS5sZW5ndGggIT0gInVuZGVmaW5lZCIpCisgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgYXJndW1lbnRzW2ldLmxlbmd0aDsgaiArPSAxKQorICAgICAgICAg
IHBuZ1tvZmZzKytdID0gYXJndW1lbnRzW2ldLmNoYXJBdChqKTsKKyAgfTsKKyAgZnVuY3Rpb24g
Ynl0ZTIodykgeyByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgodz4+OCkmMjU1LCB3JjI1NSk7
IH07CisgIGZ1bmN0aW9uIGJ5dGU0KHcpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKHc+
PjI0KSYyNTUsICh3Pj4xNikmMjU1LCAodz4+OCkmMjU1LCB3JjI1NSk7IH07CisgIGZ1bmN0aW9u
IGJ5dGUybHNiKHcpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodyYyNTUsICh3Pj44KSYy
NTUpOyB9OworCisgIC8vIGluaXRpYWxpemUgZXZlcnl0aGluZyB0byB6ZXJvIGJ5dGUKKyAgZm9y
ICh2YXIgaSA9IDA7IGkgPCB0aGlzLnBuZ19zaXplOyBpICs9IDEpCisgICAgdGhpcy5wbmdbaV0g
PSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApOworCisgIC8vIGluaXRpYWxpemUgbm9uLXplcm8gZWxl
bWVudHMKKyAgaW5pdGlhbGl6ZSh0aGlzLnBuZywgdGhpcy5paGRyX29mZnMsIGJ5dGU0KHRoaXMu
aWhkcl9zaXplLTEyKSwgJ0lIRFInLAorICAgICAgICAgICAgIGJ5dGU0KHdpZHRoKSwgYnl0ZTQo
aGVpZ2h0KSwgU3RyaW5nLmZyb21DaGFyQ29kZSg4LCAzKSk7CisgIGluaXRpYWxpemUodGhpcy5w
bmcsIHRoaXMucGx0ZV9vZmZzLCBieXRlNCh0aGlzLnBsdGVfc2l6ZS0xMiksICdQTFRFJyk7Cisg
IGluaXRpYWxpemUodGhpcy5wbmcsIHRoaXMudHJuc19vZmZzLCBieXRlNCh0aGlzLnRybnNfc2l6
ZS0xMiksICd0Uk5TJyk7CisgIGluaXRpYWxpemUodGhpcy5wbmcsIHRoaXMuaWRhdF9vZmZzLCBi
eXRlNCh0aGlzLmlkYXRfc2l6ZS0xMiksICdJREFUJyk7CisgIGluaXRpYWxpemUodGhpcy5wbmcs
IHRoaXMuaWVuZF9vZmZzLCBieXRlNCh0aGlzLmllbmRfc2l6ZS0xMiksICdJRU5EJyk7CisKKyAg
Ly8gaW5pdGlhbGl6ZSBkZWZsYXRlIGhlYWRlcgorICB2YXIgaGVhZGVyID0gKCg4ICsgKDc8PDQp
KSA8PCA4KSB8ICgzIDw8IDYpOworICBoZWFkZXIgKz0gMzEgLSAoaGVhZGVyICUgMzEpOworICBp
bml0aWFsaXplKHRoaXMucG5nLCB0aGlzLmlkYXRfb2Zmcys4LCBieXRlMihoZWFkZXIpKTsKKwor
ICAvLyBpbml0aWFsaXplIGRlZmxhdGUgYmxvY2sgaGVhZGVycworICBmb3IgKGkgPSAwOyBpKjB4
ZmZmZiA8IHRoaXMucGl4X3NpemU7IGkgKz0gMSkgeworCXZhciBzaXplLCBiaXRzOworCWlmIChp
ICsgMHhmZmZmIDwgdGhpcy5waXhfc2l6ZSkgeworICAgICAgc2l6ZSA9IDB4ZmZmZjsKKyAgICAg
IGJpdHMgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDApOworCX0gZWxzZSB7CisgICAgICBzaXplID0g
dGhpcy5waXhfc2l6ZSAtIGkqMHhmZmZmOworICAgICAgYml0cyA9IFN0cmluZy5mcm9tQ2hhckNv
ZGUoMSk7CisJfQorCWluaXRpYWxpemUodGhpcy5wbmcsIHRoaXMuaWRhdF9vZmZzKzgrMitpKig1
KzB4ZmZmZiksIGJpdHMsIGJ5dGUybHNiKHNpemUpLCBieXRlMmxzYih+c2l6ZSkpOworICB9CisK
KyAgLy8gaW5pdGlhbGl6ZSBwYWxldHRlIGhhc2gKKyAgdGhpcy5wYWxldHRlID0gbmV3IE9iamVj
dCgpOworICB0aGlzLnBpbmRleCA9IDA7Cit9CisKKy8vIHZlcnNpb24gc3RyaW5nL251bWJlcgor
UG5nbGV0LnZlcnNpb24gPSAiMTk5OTA0MjcuMCI7CisKKy8vIHRlc3QgaWYgY29vcmRpbmF0ZXMg
YXJlIHdpdGhpbiBib3VuZHMKK1BuZ2xldC5wcm90b3R5cGUuaW5Cb3VuZHMgPSBmdW5jdGlvbih4
LHkpIHsgcmV0dXJuIHggPj0gMCAmJiB4IDwgdGhpcy53aWR0aCAmJiB5ID49IDAgJiYgeSA8IHRo
aXMuaGVpZ2h0OyB9CisKKy8vIGNsaXAgYW4geCB2YWx1ZSB0byB0aGUgd2luZG93IHdpZHRoCitQ
bmdsZXQucHJvdG90eXBlLmNsaXBYID0gZnVuY3Rpb24oeCkgeyByZXR1cm4gKHggPCAwKSA/IDAg
OiAoeCA+PSB0aGlzLndpZHRoKSA/IHRoaXMud2lkdGgtMSA6IHggOyB9CisKKy8vIGNsaXAgYSB5
IHZhbHVlIHRvIHRoZSB3aW5kb3cgaGVpZ2h0CitQbmdsZXQucHJvdG90eXBlLmNsaXBZID0gZnVu
Y3Rpb24oeSkgeyByZXR1cm4gKHkgPCAwKSA/IDAgOiAoeSA+PSB0aGlzLmhlaWdodCkgPyB0aGlz
LmhlaWdodC0xIDogeSA7IH0KKworLy8gY29tcHV0ZSB0aGUgaW5kZXggaW50byBhIHBuZyBmb3Ig
YSBnaXZlbiBwaXhlbAorUG5nbGV0LnByb3RvdHlwZS5pbmRleCA9IGZ1bmN0aW9uKHgseSkgewor
ICB2YXIgaSA9IHkqKHRoaXMud2lkdGgrMSkreCsxOworICB2YXIgaiA9IHRoaXMuaWRhdF9vZmZz
KzgrMitNYXRoLmZsb29yKChpLzB4ZmZmZikrMSkqNStpOworICByZXR1cm4gajsKK30KKworLy8g
bWFrZSBhIGNvbG9yIGluIGEgUG5nbGV0CitQbmdsZXQucHJvdG90eXBlLmNvbG9yID0gZnVuY3Rp
b24ocmVkLCBncmVlbiwgYmx1ZSwgYWxwaGEpIHsKKyAgYWxwaGEgPSBhbHBoYSA+PSAwID8gYWxw
aGEgOiAyNTU7CisgIHZhciByZ2JhID0gKCgoKChhbHBoYTw8OCkrcmVkKTw8OCkrZ3JlZW4pPDw4
KStibHVlOworICBpZiAoIHR5cGVvZiB0aGlzLnBhbGV0dGVbcmdiYV0gPT0gInVuZGVmaW5lZCIp
IHsKKwlpZiAodGhpcy5waW5kZXggPT0gdGhpcy5kZXB0aCkgcmV0dXJuIFN0cmluZy5mcm9tQ2hh
ckNvZGUoMCk7CisJdGhpcy5wYWxldHRlW3JnYmFdID0gU3RyaW5nLmZyb21DaGFyQ29kZSh0aGlz
LnBpbmRleCk7CisJdGhpcy5wbmdbdGhpcy5wbHRlX29mZnMrOCt0aGlzLnBpbmRleCozKzBdID0g
U3RyaW5nLmZyb21DaGFyQ29kZShyZWQpOworCXRoaXMucG5nW3RoaXMucGx0ZV9vZmZzKzgrdGhp
cy5waW5kZXgqMysxXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoZ3JlZW4pOworCXRoaXMucG5nW3Ro
aXMucGx0ZV9vZmZzKzgrdGhpcy5waW5kZXgqMysyXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYmx1
ZSk7CisJdGhpcy5wbmdbdGhpcy50cm5zX29mZnMrOCt0aGlzLnBpbmRleF0gPSBTdHJpbmcuZnJv
bUNoYXJDb2RlKGFscGhhKTsKKwl0aGlzLnBpbmRleCArPSAxOworICB9CisgIHJldHVybiB0aGlz
LnBhbGV0dGVbcmdiYV07Cit9CisKKy8vIHJldHVybiB0cnVlIGlmIHRoaXMgaXMgYSBjb2xvcgor
UG5nbGV0LnByb3RvdHlwZS5pc0NvbG9yID0gZnVuY3Rpb24oY29sb3IpIHsKKyAgcmV0dXJuIHR5
cGVvZihjb2xvcikgPT0gJ3N0cmluZycgJiYKKwljb2xvci5sZW5ndGggPT0gMSAmJgorCWNvbG9y
LmNoYXJDb2RlQXQoMCkgPj0gMCAmJgorCWNvbG9yLmNoYXJDb2RlQXQoMCkgPCB0aGlzLmRlcHRo
OworfQorCisvLyBmaW5kIHRoZSByZWQsIGdyZWVuLCBibHVlLCBvciBhbHBoYSB2YWx1ZSBvZiBh
IFBuZ2xldCBjb2xvcgorUG5nbGV0LnByb3RvdHlwZS5yZWQgPSBmdW5jdGlvbihjb2xvcikgeyBy
ZXR1cm4gdGhpcy5wbmdbdGhpcy5wbHRlX29mZnMrOCtjb2xvci5jaGFyQ29kZUF0KDApKjMrMF0u
Y2hhckNvZGVBdCgwKTsgfQorUG5nbGV0LnByb3RvdHlwZS5ncmVlbiA9IGZ1bmN0aW9uKGNvbG9y
KSB7IHJldHVybiB0aGlzLnBuZ1t0aGlzLnBsdGVfb2Zmcys4K2NvbG9yLmNoYXJDb2RlQXQoMCkq
MysxXS5jaGFyQ29kZUF0KDApOyB9CitQbmdsZXQucHJvdG90eXBlLmJsdWUgPSBmdW5jdGlvbihj
b2xvcikgeyByZXR1cm4gdGhpcy5wbmdbdGhpcy5wbHRlX29mZnMrOCtjb2xvci5jaGFyQ29kZUF0
KDApKjMrMl0uY2hhckNvZGVBdCgwKTsgfQorUG5nbGV0LnByb3RvdHlwZS5hbHBoYSA9IGZ1bmN0
aW9uKGNvbG9yKSB7IHJldHVybiB0aGlzLnBuZ1t0aGlzLnRybnNfb2Zmcys4K2NvbG9yLmNoYXJD
b2RlQXQoMCldLmNoYXJDb2RlQXQoMCk7IH0KKworLy8gZHJhdyBhIHBvaW50IG9yIHBvaW50cwor
UG5nbGV0LnByb3RvdHlwZS5wb2ludCA9IGZ1bmN0aW9uKHBvaW50Q29sb3IsIHgwLCB5MCkgewor
ICB2YXIgYSA9IGFyZ3VtZW50czsKKyAgdGhpcy5wb2ludE5YWShwb2ludENvbG9yLCAoYS5sZW5n
dGgtMSkvMiwgZnVuY3Rpb24oaSkgeyByZXR1cm4gYVsyKmkrMV07IH0sIGZ1bmN0aW9uKGkpIHsg
cmV0dXJuIGFbMippKzJdOyB9KTsKK30KKworUG5nbGV0LnByb3RvdHlwZS5wb2ludE5YWSA9IGZ1
bmN0aW9uKHBvaW50Q29sb3IsIG4sIHgsIHkpIHsKKyAgaWYgKCAhIHRoaXMuaXNDb2xvcihwb2lu
dENvbG9yKSkKKwlyZXR1cm47CisgIGZvciAodmFyIGkgPSAwOyBpIDwgbjsgaSArPSAxKSB7CisJ
dmFyIHgxID0geChpKSwgeTEgPSB5KGkpOworCWlmICh0aGlzLmluQm91bmRzKHgxLHkxKSkKKyAg
ICAgIHRoaXMucG5nW3RoaXMuaW5kZXgoeDEseTEpXSA9IHBvaW50Q29sb3I7CisgIH0KK30KKwor
Ly8gcmVhZCBhIHBpeGVsIAorUG5nbGV0LnByb3RvdHlwZS5nZXRQb2ludCA9IGZ1bmN0aW9uKHgs
eSkgeyByZXR1cm4gdGhpcy5pbkJvdW5kcyh4LHkpID8gdGhpcy5wbmdbdGhpcy5pbmRleCh4LHkp
XSA6IFN0cmluZy5mcm9tQ2hhckNvZGUoMCk7IH0KKworLy8gZHJhdyBhIGhvcml6b250YWwgbGlu
ZQorUG5nbGV0LnByb3RvdHlwZS5ob3Jpem9udGFsTGluZSA9IGZ1bmN0aW9uKGxpbmVDb2xvciwg
eDEsIHgyLCB5KSB7CisgIGlmICggISB0aGlzLmlzQ29sb3IobGluZUNvbG9yKSkKKwlyZXR1cm47
CisgIHgxID0gdGhpcy5jbGlwWCh4MSk7CisgIHgyID0gdGhpcy5jbGlwWCh4Mik7CisgIHZhciB4
OworICBpZiAoeDEgPCB4MikKKwlmb3IgKHggPSB4MTsgeCA8PSB4MjsgeCArPSAxKQorICAgICAg
dGhpcy5wbmdbdGhpcy5pbmRleCh4LHkpXSA9IGxpbmVDb2xvcjsKKyAgZWxzZQorCWZvciAoeCA9
IHgyOyB4IDw9IHgxOyB4ICs9IDEpCisgICAgICB0aGlzLnBuZ1t0aGlzLmluZGV4KHgseSldID0g
bGluZUNvbG9yOworfQorCisvLyBkcmF3IGEgdmVydGljYWwgbGluZQorUG5nbGV0LnByb3RvdHlw
ZS52ZXJ0aWNhbExpbmUgPSBmdW5jdGlvbihsaW5lQ29sb3IsIHgsIHkxLCB5MikgeworICBpZiAo
ICEgdGhpcy5pc0NvbG9yKGxpbmVDb2xvcikpCisJcmV0dXJuOworICB5MSA9IHRoaXMuY2xpcFko
eTEpOworICB5MiA9IHRoaXMuY2xpcFkoeTIpOworICB2YXIgeTsKKyAgaWYgKHkxIDwgeTIpCisJ
Zm9yICh5ID0geTE7IHkgPD0geTI7IHkgKz0gMSkKKyAgICAgIHRoaXMucG5nW3RoaXMuaW5kZXgo
eCx5KV0gPSBsaW5lQ29sb3I7CisgIGVsc2UKKwlmb3IgKHkgPSB5MjsgeSA8PSB5MTsgeSArPSAx
KQorICAgICAgdGhpcy5wbmdbdGhpcy5pbmRleCh4LHkpXSA9IGxpbmVDb2xvcjsKK30KKworLy8g
ZHJhdyBhIGdlbmVyYWwgbGluZQorUG5nbGV0LnByb3RvdHlwZS5nZW5lcmFsTGluZSA9IGZ1bmN0
aW9uKGxpbmVDb2xvciwgeDEsIHkxLCB4MiwgeTIpIHsKKyAgaWYgKCAhIHRoaXMuaXNDb2xvcihs
aW5lQ29sb3IpKQorCXJldHVybjsKKyAgdmFyIGR4ID0gTWF0aC5hYnMoeDIteDEpLCBkeSA9IE1h
dGguYWJzKHkyLXkxKTsKKyAgdmFyIGluY3IxLCBpbmNyMiwgZCwgeCwgeSwgeGVuZCwgeWVuZCwg
eGRpcmZsYWcsIHlkaXJmbGFnLCB4aW5jLCB5aW5jOworICBpZiAoZHkgPD0gZHgpIHsKKwlkID0g
MipkeSAtIGR4OworCWluY3IxID0gMipkeTsKKwlpbmNyMiA9IDIgKiAoZHkgLSBkeCk7CisJaWYg
KHgxID4geDIpIHsKKyAgICAgIHggPSB4MjsKKyAgICAgIHkgPSB5MjsKKyAgICAgIHlkaXJmbGFn
ID0gLTE7CisgICAgICB4ZW5kID0geDE7CisJfSBlbHNlIHsKKyAgICAgIHggPSB4MTsKKyAgICAg
IHkgPSB5MTsKKyAgICAgIHlkaXJmbGFnID0gMTsKKyAgICAgIHhlbmQgPSB4MjsKKwl9CisJeWlu
YyA9ICgoKHkyIC0geTEpICogeWRpcmZsYWcpID4gMCkgPyAxIDogLTE7CisJdGhpcy5wb2ludChs
aW5lQ29sb3IsIHgsIHkpOworCXdoaWxlICh4KysgPCB4ZW5kKSB7CisgICAgICBpZiAoZCA8IDAp
IHsKKwkJZCArPSBpbmNyMTsKKyAgICAgIH0gZWxzZSB7CisJCXkgKz0geWluYzsKKwkJZCArPSBp
bmNyMjsKKyAgICAgIH0KKyAgICAgIHRoaXMucG9pbnQobGluZUNvbG9yLCB4LCB5KTsKKwl9Cisg
IH0gZWxzZSB7CQkJLyogZHkgPiBkeCAqLworCWQgPSAyKmR4IC0gZHk7CisJaW5jcjEgPSAyKmR4
OworCWluY3IyID0gMiAqIChkeCAtIGR5KTsKKwlpZiAoeTEgPiB5MikgeworICAgICAgeSA9IHky
OworICAgICAgeCA9IHgyOworICAgICAgeWVuZCA9IHkxOworICAgICAgeGRpcmZsYWcgPSAtMTsK
Kwl9IGVsc2UgeworICAgICAgeSA9IHkxOworICAgICAgeCA9IHgxOworICAgICAgeWVuZCA9IHky
OworICAgICAgeGRpcmZsYWcgPSAxOworCX0KKwl4aW5jID0gKCgoeDIgLSB4MSkgKiB4ZGlyZmxh
ZykgPiAwKSA/IDEgOiAtMTsKKwl0aGlzLnBvaW50KGxpbmVDb2xvciwgeCwgeSk7CisJd2hpbGUg
KHkrKyA8IHllbmQpIHsKKyAgICAgIGlmIChkIDwgMCkgeworCQlkICs9IGluY3IxOworICAgICAg
fSBlbHNlIHsKKwkJeCArPSB4aW5jOworCQlkICs9IGluY3IyOworICAgICAgfQorICAgICAgdGhp
cy5wb2ludChsaW5lQ29sb3IsIHgsIHkpOworCX0KKyAgfQorfQorCisvLyBkcmF3IGEgbGluZQor
UG5nbGV0LnByb3RvdHlwZS5saW5lID0gZnVuY3Rpb24obGluZUNvbG9yLCB4MCwgeTApIHsKKyAg
dmFyIGEgPSBhcmd1bWVudHM7CisgIHRoaXMubGluZU5YWShsaW5lQ29sb3IsIChhLmxlbmd0aC0x
KS8yLCBmdW5jdGlvbihpKSB7IHJldHVybiBhWzIqaSsxXTsgfSwgZnVuY3Rpb24oaSkgeyByZXR1
cm4gYVsyKmkrMl07IH0pOworfQorCitQbmdsZXQucHJvdG90eXBlLmxpbmVOWFkgPSBmdW5jdGlv
bihsaW5lQ29sb3IsIG4sIHgsIHkpIHsKKyAgaWYgKCAhIHRoaXMuaXNDb2xvcihsaW5lQ29sb3Ip
KQorCXJldHVybjsKKyAgdmFyIHgxID0geCgwKSwgeTEgPSB5KDApOworICBmb3IgKHZhciBpID0g
MTsgaSA8IG47IGkgKz0gMSkgeworCXZhciB4MiA9IHgoaSksIHkyID0geShpKTsKKwlpZiAoeDEg
PT0geDIpCisgICAgICB0aGlzLnZlcnRpY2FsTGluZShsaW5lQ29sb3IsIHgxLCB5MSwgeTIpOwor
CWVsc2UgaWYgKHkxID09IHkyKQorICAgICAgdGhpcy5ob3Jpem9udGFsTGluZShsaW5lQ29sb3Is
IHgxLCB4MiwgeTEpOworCWVsc2UKKyAgICAgIHRoaXMuZ2VuZXJhbExpbmUobGluZUNvbG9yLCB4
MSwgeTEsIHgyLCB5Mik7CisJeDEgPSB4MjsKKwl5MSA9IHkyOworICB9Cit9CisKKy8vIGRyYXcg
YSBwb2x5Z29uCitQbmdsZXQucHJvdG90eXBlLnBvbHlnb24gPSBmdW5jdGlvbihvdXRsaW5lQ29s
b3IsIGZpbGxDb2xvciwgeDEsIHkxKSB7CisgIHZhciBhID0gYXJndW1lbnRzOworICB0aGlzLnBv
bHlnb25OWFkob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIChhLmxlbmd0aC0yKS8yLCBmdW5jdGlv
bihpKSB7cmV0dXJuIGFbMippKzJdO30sIGZ1bmN0aW9uKGkpIHtyZXR1cm4gYVsyKmkrM107fSk7
Cit9CisKK1BuZ2xldC5wcm90b3R5cGUucG9seWdvbk5YWSA9IGZ1bmN0aW9uKG91dGxpbmVDb2xv
ciwgZmlsbENvbG9yLCBuLCB4LCB5KSB7CisgIGlmIChuIDw9IDApCisJcmV0dXJuOworICBpZiAo
dGhpcy5pc0NvbG9yKGZpbGxDb2xvcikpCisJdGhpcy5jb25jYXZlTlhZKGZpbGxDb2xvciwgbiwg
eCwgeSk7CisgIGlmICh0aGlzLmlzQ29sb3Iob3V0bGluZUNvbG9yKSkKKwl0aGlzLmxpbmVOWFko
b3V0bGluZUNvbG9yLCBuKzEsIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIHgoaSVuKTsgfSwgZnVuY3Rp
b24oaSkgeyByZXR1cm4geShpJW4pOyB9KTsKK30KKworLyoKKyAqIENvbmNhdmUgUG9seWdvbiBT
Y2FuIENvbnZlcnNpb24KKyAqIGJ5IFBhdWwgSGVja2JlcnQKKyAqIGZyb20gIkdyYXBoaWNzIEdl
bXMiLCBBY2FkZW1pYyBQcmVzcywgMTk5MAorICovCitQbmdsZXQucHJvdG90eXBlLmNvbmNhdmVO
WFkgPSBmdW5jdGlvbihmaWxsQ29sb3IsIG4sIHB0eCwgcHR5KSB7CisgIGZ1bmN0aW9uIEVkZ2Uo
ZXgsIGVkeCwgZWkpIHsJLyogYSBwb2x5Z29uIGVkZ2UgKi8KKwl0aGlzLnggPSBleDsJLyogeCBj
b29yZGluYXRlIG9mIGVkZ2UncyBpbnRlcnNlY3Rpb24gd2l0aCBjdXJyZW50IHNjYW5saW5lICov
CisJdGhpcy5keCA9IGVkeDsJLyogY2hhbmdlIGluIHggd2l0aCByZXNwZWN0IHRvIHkgKi8KKwl0
aGlzLmkgPSBlaTsJLyogZWRnZSBudW1iZXI6IGVkZ2UgaSBnb2VzIGZyb20gcHRbaV0gdG8gcHRb
aSsxXSAqLworICB9OworICBmdW5jdGlvbiBjZGVsZXRlKGRpKSB7CS8qIHJlbW92ZSBlZGdlIGkg
ZnJvbSBhY3RpdmUgbGlzdCAqLworICAgIGZvciAodmFyIGogPSAwOyBqIDwgYWN0aXZlLmxlbmd0
aDsgaiArPSAxKQorICAgICAgaWYgKGFjdGl2ZVtqXS5pID09IGRpKQorICAgICAgICBhY3RpdmUu
c3BsaWNlKGosIDEpOworICB9OworICBmdW5jdGlvbiBjaW5zZXJ0KGlpLCBpeSkgewkvKiBhcHBl
bmQgZWRnZSBpIHRvIGVuZCBvZiBhY3RpdmUgbGlzdCAqLworICAgIHZhciBpaiA9IGlpPG4tMSA/
IGlpKzEgOiAwOworICAgIHZhciBweCwgcHksIHF4LCBxeTsKKyAgICBpZiAocHR5KGlpKSA8IHB0
eShpaikpIHsKKyAgICAgIHB4ID0gcHR4KGlpKTsgcHkgPSBwdHkoaWkpOworICAgICAgcXggPSBw
dHgoaWopOyBxeSA9IHB0eShpaik7CisgICAgfSBlbHNlIHsKKyAgICAgIHB4ID0gcHR4KGlqKTsg
cHkgPSBwdHkoaWopOworICAgICAgcXggPSBwdHgoaWkpOyBxeSA9IHB0eShpaSk7CisgICAgfQor
ICAgIC8qIGluaXRpYWxpemUgeCBwb3NpdGlvbiBhdCBpbnRlcnNlY3Rpb24gb2YgZWRnZSB3aXRo
IHNjYW5saW5lIHkgKi8KKyAgICB2YXIgZHggPSAocXgtcHgpLyhxeS1weSk7CisgICAgYWN0aXZl
LnB1c2gobmV3IEVkZ2UoZHgqKGl5Ky41LXB5KStweCwgZHgsIGlpKSk7CisgIH07CisKKyAgdmFy
IGluZCA9IG5ldyBBcnJheShuKTsJCS8qIGxpc3Qgb2YgdmVydGV4IGluZGljZXMsIHNvcnRlZCBi
eSBwdFtpbmRbal1dLnkgKi8KKyAgdmFyIGFjdGl2ZSA9IG5ldyBBcnJheSgwKTsJCS8qIHN0YXJ0
IHdpdGggYW4gZW1wdHkgYWN0aXZlIGxpc3QgKi8KKworICAvKiBjcmVhdGUgeS1zb3J0ZWQgYXJy
YXkgb2YgaW5kaWNlcyBpbmRba10gaW50byB2ZXJ0ZXggbGlzdCAqLworICBmb3IgKHZhciBrID0g
MDsgayA8IG47IGsgKz0gMSkgaW5kW2tdID0gazsKKyAgaW5kLnNvcnQoZnVuY3Rpb24oaTEsIGky
KSB7IHJldHVybiBwdHkoaTEpIDw9IHB0eShpMikgPyAtMSA6IDE7IH0pOworICBrID0gMDsgICAg
ICAgICAgICAgICAgICAgICAgICAvKiBpbmRba10gaXMgbmV4dCB2ZXJ0ZXggdG8gcHJvY2VzcyAq
LworICB2YXIgeTAgPSBNYXRoLm1heCgwLCBNYXRoLmNlaWwocHR5KGluZFswXSkrLjUpKTsJCQkv
KiB5bWluIG9mIHBvbHlnb24gKi8KKyAgdmFyIHkxID0gTWF0aC5taW4odGhpcy5oZWlnaHQsIE1h
dGguZmxvb3IocHR5KGluZFtuLTFdKS0uNSkpOwkvKiB5bWF4IG9mIHBvbHlnb24gKi8KKworICBm
b3IgKHZhciB5ID0geTA7IHkgPD0geTE7IHkgKz0gMSkgewkJLyogc3RlcCB0aHJvdWdoIHNjYW5s
aW5lcyAqLworCS8qIHNjYW5saW5lIHkgaXMgYXQgeSsuNSBpbiBjb250aW51b3VzIGNvb3JkaW5h
dGVzICovCisKKwkvKiBjaGVjayB2ZXJ0aWNlcyBiZXR3ZWVuIHByZXZpb3VzIHNjYW5saW5lIGFu
ZCBjdXJyZW50IG9uZSwgaWYgYW55ICovCisJZm9yICg7IGs8biAmJiBwdHkoaW5kW2tdKSA8PSB5
Ky41OyBrICs9IDEpIHsKKyAgICAgIC8qIHRvIHNpbXBsaWZ5LCBpZiBwdC55PXkrLjUsIHByZXRl
bmQgaXQncyBhYm92ZSAqLworICAgICAgLyogaW52YXJpYW50OiB5LS41IDwgcHRbaV0ueSA8PSB5
Ky41ICovCisgICAgICB2YXIgaSA9IGluZFtrXTsJCisKKyAgICAgIC8qCisgICAgICAgKiBpbnNl
cnQgb3IgZGVsZXRlIGVkZ2VzIGJlZm9yZSBhbmQgYWZ0ZXIgdmVydGV4IGkgKGktMSB0byBpLAor
ICAgICAgICogYW5kIGkgdG8gaSsxKSBmcm9tIGFjdGl2ZSBsaXN0IGlmIHRoZXkgY3Jvc3Mgc2Nh
bmxpbmUgeQorICAgICAgICovCisgICAgICB2YXIgaiA9IChpLTErbiklbjsJCS8qIHZlcnRleCBw
cmV2aW91cyB0byBpICovCisgICAgICBpZiAocHR5KGopIDw9IHktLjUpCXsJLyogb2xkIGVkZ2Us
IHJlbW92ZSBmcm9tIGFjdGl2ZSBsaXN0ICovCisJCWNkZWxldGUoaik7CisgICAgICB9IGVsc2Ug
aWYgKHB0eShqKSA+IHkrLjUpIHsJLyogbmV3IGVkZ2UsIGFkZCB0byBhY3RpdmUgbGlzdCAqLwor
CQljaW5zZXJ0KGosIHkpOworICAgICAgfQorICAgICAgaWYgKGkgIT0gaW5kW2tdKSB7CisJCWFs
ZXJ0KCJZb3VyIGJyb3dzZXIncyBpbXBsZW1lbnRhdGlvbiBvZiBKYXZhU2NyaXB0IGlzIHNlcmlv
dXNseSBicm9rZW4sXG4iKworCQkgICAgICAiYXMgaW4gdmFyaWFibGVzIGFyZSBjaGFuZ2luZyB2
YWx1ZSBvZiB0aGVpciBvd24gdm9saXRpb24uXG4iKworCQkgICAgICAiWW91IHNob3VsZCB1cGdy
YWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiBicm93c2VyLiIpOworCQlyZXR1cm47CisgICAgICB9Cisg
ICAgICBqID0gKGkrMSklbjsJCS8qIHZlcnRleCBuZXh0IGFmdGVyIGkgKi8KKyAgICAgIGlmIChw
dHkoaikgPD0geS0uNSkJewkvKiBvbGQgZWRnZSwgcmVtb3ZlIGZyb20gYWN0aXZlIGxpc3QgKi8K
KwkJY2RlbGV0ZShpKTsKKyAgICAgIH0gZWxzZSBpZiAocHR5KGopID4geSsuNSkgewkvKiBuZXcg
ZWRnZSwgYWRkIHRvIGFjdGl2ZSBsaXN0ICovCisJCWNpbnNlcnQoaSwgeSk7CisgICAgICB9CisJ
fQorCisJLyogc29ydCBhY3RpdmUgZWRnZSBsaXN0IGJ5IGFjdGl2ZVtqXS54ICovCisJYWN0aXZl
LnNvcnQoZnVuY3Rpb24odSx2KSB7IHJldHVybiB1LnggPD0gdi54ID8gLTEgOiAxOyB9KTsKKwor
CS8qIGRyYXcgaG9yaXpvbnRhbCBzZWdtZW50cyBmb3Igc2NhbmxpbmUgeSAqLworCWZvciAoaiA9
IDA7IGogPCBhY3RpdmUubGVuZ3RoOyBqICs9IDIpIHsJLyogZHJhdyBob3Jpem9udGFsIHNlZ21l
bnRzICovCisgICAgICAvKiBzcGFuICd0d2VlbiBqICYgaisxIGlzIGluc2lkZSwgc3BhbiB0d2Vl
biBqKzEgJiBqKzIgaXMgb3V0c2lkZSAqLworICAgICAgdmFyIHhsID0gTWF0aC5jZWlsKGFjdGl2
ZVtqXS54Ky41KTsJCS8qIGxlZnQgZW5kIG9mIHNwYW4gKi8KKyAgICAgIGlmICh4bDwwKSB4bCA9
IDA7CisgICAgICB2YXIgeHIgPSBNYXRoLmZsb29yKGFjdGl2ZVtqKzFdLngtLjUpOwkvKiByaWdo
dCBlbmQgb2Ygc3BhbiAqLworICAgICAgaWYgKHhyPnRoaXMud2lkdGgtMSkgeHIgPSB0aGlzLndp
ZHRoLTE7CisgICAgICBpZiAoeGw8PXhyKQorCQl0aGlzLmhvcml6b250YWxMaW5lKGZpbGxDb2xv
ciwgeGwsIHhyLCB5KTsJLyogZHJhdyBwaXhlbHMgaW4gc3BhbiAqLworICAgICAgYWN0aXZlW2pd
LnggKz0gYWN0aXZlW2pdLmR4OwkvKiBpbmNyZW1lbnQgZWRnZSBjb29yZHMgKi8KKyAgICAgIGFj
dGl2ZVtqKzFdLnggKz0gYWN0aXZlW2orMV0uZHg7CisJfQorICB9Cit9CisKKy8vIGRyYXcgYSBy
ZWN0YW5nbGUKK1BuZ2xldC5wcm90b3R5cGUucmVjdGFuZ2xlID0gZnVuY3Rpb24ob3V0bGluZUNv
bG9yLCBmaWxsQ29sb3IsIHgwLHkwLHgxLHkxKSB7CisgIGlmICh0aGlzLmlzQ29sb3IoZmlsbENv
bG9yKSkKKwlmb3IgKHZhciB5ID0geTA7IHkgPCB5MTsgeSArPSAxKQorICAgICAgdGhpcy5ob3Jp
em9udGFsTGluZShmaWxsQ29sb3IsIHgwKzEsIHgxLTIsIHkpOworICBpZiAodGhpcy5pc0NvbG9y
KG91dGxpbmVDb2xvcikpIHsKKwl0aGlzLmhvcml6b250YWxMaW5lKG91dGxpbmVDb2xvciwgeDAs
IHgxLTEsIHkwKTsKKwl0aGlzLmhvcml6b250YWxMaW5lKG91dGxpbmVDb2xvciwgeDAsIHgxLTEs
IHkxLTEpOworCXRoaXMudmVydGljYWxMaW5lKG91dGxpbmVDb2xvciwgeDAsIHkwLCB5MS0xKTsK
Kwl0aGlzLnZlcnRpY2FsTGluZShvdXRsaW5lQ29sb3IsIHgxLTEsIHkwLCB5MS0xKTsKKyAgfQor
fQorCQorLy8gZHJhdyBhbiBhcmMKK1BuZ2xldC5wcm90b3R5cGUuYXJjID0gZnVuY3Rpb24ob3V0
bGluZUNvbG9yLCBjeCxjeSx3LGgsIHMsZSkgeworICB2YXIgcCA9IHRoaXMubWlkcG9pbnRFbGxp
cHNlKGN4LGN5LCB3LGgsIHMsZSk7CisgIGZ1bmN0aW9uIHgoaSkgeyByZXR1cm4gcFtpKjJdOyB9
OworICBmdW5jdGlvbiB5KGkpIHsgcmV0dXJuIHBbaSoyKzFdOyB9OworICB0aGlzLmxpbmVOWFko
b3V0bGluZUNvbG9yLCBwLmxlbmd0aC8yLCB4LCB5KTsKK30KKworLy8gZHJhdyBhbiBvdmFsCitQ
bmdsZXQucHJvdG90eXBlLm92YWwgPSBmdW5jdGlvbihvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwg
Y3gsY3ksdyxoKSB7CisgIHZhciBwID0gdGhpcy5taWRwb2ludEVsbGlwc2UoY3gsY3ksIHcsaCwg
MCwzNTkpOworICBmdW5jdGlvbiB4KGkpIHsgcmV0dXJuIHBbaSoyXTsgfTsKKyAgZnVuY3Rpb24g
eShpKSB7IHJldHVybiBwW2kqMisxXTsgfTsKKyAgdGhpcy5wb2x5Z29uTlhZKG91dGxpbmVDb2xv
ciwgZmlsbENvbG9yLCBwLmxlbmd0aC8yLCB4LCB5KTsKK30KKworLy8gZHJhdyBhbiBhcmMgd2l0
aCBjaG9yZAorUG5nbGV0LnByb3RvdHlwZS5jaG9yZCA9IGZ1bmN0aW9uKG91dGxpbmVDb2xvciwg
ZmlsbENvbG9yLCBjeCxjeSx3LGgsIHMsZSkgeworICB2YXIgcCA9IHRoaXMubWlkcG9pbnRFbGxp
cHNlKGN4LGN5LCB3LGgsIHMsZSk7CisgIGZ1bmN0aW9uIHgoaSkgeyByZXR1cm4gcFtpKjJdOyB9
OworICBmdW5jdGlvbiB5KGkpIHsgcmV0dXJuIHBbaSoyKzFdOyB9OworICB0aGlzLnBvbHlnb25O
WFkob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIHAubGVuZ3RoLzIsIHgsIHkpOworfQorCisvLyBk
cmF3IGFuIGFyYyB3aXRoIHBpZXNsaWNlCitQbmdsZXQucHJvdG90eXBlLnBpZXNsaWNlID0gZnVu
Y3Rpb24ob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIGN4LGN5LHcsaCwgcyxlKSB7CisgIHZhciBw
ID0gdGhpcy5taWRwb2ludEVsbGlwc2UoY3gsY3ksIHcsaCwgcyxlKTsKKyAgcFtwLmxlbmd0aF0g
PSBjeDsKKyAgcFtwLmxlbmd0aF0gPSBjeTsKKyAgZnVuY3Rpb24geChpKSB7IHJldHVybiBwW2kq
Ml07IH07CisgIGZ1bmN0aW9uIHkoaSkgeyByZXR1cm4gcFtpKjIrMV07IH07CisgIHRoaXMucG9s
eWdvbk5YWShvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwgcC5sZW5ndGgvMiwgeCwgeSk7Cit9CisK
Ky8vIG92YWwgYXJjcworLy8gZ2VuZXJhdGUgcG9pbnRzIG9mIG92YWwgY2lyY3VtZmVyZW5jZQor
Ly8gbWlkcG9pbnQgZWxsaXBzZSwgRm9sZXkgJiB2YW4gRGFtLCAybmQgRWRpdGlvbiwgcC4gOTAs
IDE5OTAKK1BuZ2xldC5wcm90b3R5cGUubWlkcG9pbnRFbGxpcHNlID0gZnVuY3Rpb24oY3gsY3ks
IHcsaCwgcyxlKSB7CisgIHZhciBhID0gTWF0aC5mbG9vcih3LzIpLCBiID0gTWF0aC5mbG9vciho
LzIpOworICB2YXIgYTIgPSBhKmEsIGIyID0gYipiLCB4ID0gMCwgeSA9IGI7CisgIHZhciBkMSA9
IGIyIC0gYTIqYiArIGEyLzQ7CisgIGN4ID0gTWF0aC5mbG9vcihjeCk7CisgIGN5ID0gTWF0aC5m
bG9vcihjeSk7CisgIHZhciBwID0gbmV3IEFycmF5KCk7CisKKyAgLy8gcXVhZHJhbnQgSSwgYW50
aWNsb2Nrd2lzZQorICBwLnB1c2goeCwteSk7CisgIHdoaWxlIChhMiooeS0xLzIpID4gYjIqKHgr
MSkpIHsKKwlpZiAoZDEgPCAwKSB7CisgICAgICBkMSArPSBiMiooMip4KzMpOworCX0gZWxzZSB7
CisgICAgICBkMSArPSBiMiooMip4KzMpICsgYTIqKC0yKnkgKyAyKTsKKyAgICAgIHkgLT0gMTsK
Kwl9CisJeCArPSAxOworCXAudW5zaGlmdCh4LC15KTsKKyAgfQorICB2YXIgZDIgPSBiMiooeCsx
LzIpKih4KzEvMikgKyBhMiooeS0xKSooeS0xKSAtIGEyKmIyOworICB3aGlsZSAoeSA+IDApIHsK
KwlpZiAoZDIgPCAwKSB7CisgICAgICBkMiArPSBiMiooMip4KzIpICsgYTIqKC0yKnkrMyk7Cisg
ICAgICB4ICs9IDE7CisJfSBlbHNlIHsKKyAgICAgIGQyICs9IGEyKigtMip5KzMpOworCX0KKwl5
IC09IDE7CisJcC51bnNoaWZ0KHgsLXkpOworICB9CisgIC8vIHF1YWRyYW50IElJLCBhbnRpY2xv
Y2t3aXNlCisgIHZhciBuNCA9IHAubGVuZ3RoOworICBmb3IgKHZhciBpID0gbjQtNDsgaSA+PSAw
OyBpIC09IDIpCisgICAgcC5wdXNoKC1wW2ldLCBwW2krMV0pOworICAvLyBxdWFkcmFudHMgSUlJ
IGFuZCBJViwgYW50aWNsb2Nrd2lzZQorICB2YXIgbjIgPSBwLmxlbmd0aDsKKyAgZm9yIChpID0g
bjItNDsgaSA+IDA7IGkgLT0gMikKKyAgICBwLnB1c2gocFtpXSwgLXBbaSsxXSk7CisKKyAgLy8g
Y29tcHV0ZSBzdGFydCBhbmQgZW5kIGluZGV4ZXMgZnJvbSBzdGFydCBhbmQgZXh0ZW50CisgIGUg
JT0gMzYwOworICBpZiAoZSA8IDApIHsKKwlzICs9IGU7CisJZSA9IC1lOworICB9CisgIHMgJT0g
MzYwOworICBpZiAocyA8IDApCisJcyArPSAzNjA7CisgIHZhciBpcyA9IE1hdGguZmxvb3Iocy8z
NTkgKiBwLmxlbmd0aC8yKTsKKyAgdmFyIGllID0gTWF0aC5mbG9vcihlLzM1OSAqIHAubGVuZ3Ro
LzIpKzE7CisgIHAgPSBwLnNsaWNlKGlzKjIpLmNvbmNhdChwLnNsaWNlKDAsIGlzKjIpKS5zbGlj
ZSgwLCBpZSoyKTsKKworICAvLyBkaXNwbGFjZSB0byBjZW50ZXIKKyAgZm9yIChpID0gMDsgaSA8
IHAubGVuZ3RoOyBpICs9IDIpIHsKKwlwW2ldICs9IGN4OworCXBbaSsxXSArPSBjeTsKKyAgfQor
ICByZXR1cm4gcDsKK30KKworLy8gZmlsbCBhIHJlZ2lvbiAKKy8vIGZyb20gZ2QxLjMgd2l0aCBt
b2RpZmljYXRpb25zCitQbmdsZXQucHJvdG90eXBlLmZpbGwgPSBmdW5jdGlvbihvdXRsaW5lQ29s
b3IsZmlsbENvbG9yLHgseSkgeworICBpZiAob3V0bGluZUNvbG9yKSB7CQkJLy8gZmlsbCB0byBv
dXRsaW5lIGNvbG9yCisJLyogU2VlayBsZWZ0ICovCisJdmFyIGxlZnRMaW1pdCA9IC0xOworCWZv
ciAodmFyIGkgPSB4OyBpID49IDAgJiYgdGhpcy5nZXRQb2ludChpLCB5KSAhPSBvdXRsaW5lQ29s
b3I7IGkgLT0gMSkKKyAgICAgIGxlZnRMaW1pdCA9IGk7CisJCisJaWYgKGxlZnRMaW1pdCA9PSAt
MSkKKyAgICAgIHJldHVybjsKKworCS8qIFNlZWsgcmlnaHQgKi8KKwl2YXIgcmlnaHRMaW1pdCA9
IHg7CisJZm9yIChpID0gKHgrMSk7IGkgPCB0aGlzLndpZHRoICYmIHRoaXMuZ2V0UG9pbnQoaSwg
eSkgIT0gb3V0bGluZUNvbG9yOyBpICs9IDEpCisgICAgICByaWdodExpbWl0ID0gaTsKKworCS8q
IGZpbGwgZXh0ZW50IGZvdW5kICovCisJdGhpcy5ob3Jpem9udGFsTGluZShmaWxsQ29sb3IsIGxl
ZnRMaW1pdCwgcmlnaHRMaW1pdCwgeSk7CisKKwkvKiBTZWVrIGFib3ZlIGFuZCBiZWxvdyAqLwor
CWZvciAodmFyIGR5ID0gLTE7IGR5IDw9IDE7IGR5ICs9IDIpIHsKKyAgICAgIGlmICh0aGlzLmlu
Qm91bmRzKHgseStkeSkpIHsKKwkJdmFyIGxhc3RCb3JkZXIgPSAxOworCQlmb3IgKGkgPSBsZWZ0
TGltaXQ7IGkgPD0gcmlnaHRMaW1pdDsgaSsrKSB7CisgICAgICAgICAgdmFyIGMgPSB0aGlzLmdl
dFBvaW50KGksIHkrZHkpOworICAgICAgICAgIGlmIChsYXN0Qm9yZGVyKSB7CisJCQlpZiAoKGMg
IT0gb3V0bGluZUNvbG9yKSAmJiAoYyAhPSBmaWxsQ29sb3IpKSB7CQorICAgICAgICAgICAgICB0
aGlzLmZpbGwob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIGksIHkrZHkpOworICAgICAgICAgICAg
ICBsYXN0Qm9yZGVyID0gMDsKKwkJCX0KKyAgICAgICAgICB9IGVsc2UgaWYgKChjID09IG91dGxp
bmVDb2xvcikgfHwgKGMgPT0gZmlsbENvbG9yKSkgeworCQkJbGFzdEJvcmRlciA9IDE7CisgICAg
ICAgICAgfQorCQl9CisgICAgICB9CisJfQorICAgIAorICB9IGVsc2UgewkJCS8vIGZsb29kIGZp
bGwgY29sb3IgYXQgeCwgeSAKKwkvKiBUZXN0IGZvciBjb21wbGV0aW9uICovCisJdmFyIG9sZENv
bG9yID0gdGhpcy5nZXRQb2ludCh4LCB5KTsKKwlpZiAob2xkQ29sb3IgPT0gZmlsbENvbG9yKQor
ICAgICAgcmV0dXJuOworCisJLyogU2VlayBsZWZ0ICovCisJbGVmdExpbWl0ID0gKC0xKTsKKwlm
b3IgKGkgPSB4OyBpID49IDAgJiYgdGhpcy5nZXRQb2ludChpLCB5KSA9PSBvbGRDb2xvcjsgaS0t
KQorICAgICAgbGVmdExpbWl0ID0gaTsKKworCWlmIChsZWZ0TGltaXQgPT0gLTEpCisgICAgICBy
ZXR1cm47CisKKwkvKiBTZWVrIHJpZ2h0ICovCisJcmlnaHRMaW1pdCA9IHg7CisJZm9yIChpID0g
KHgrMSk7IGkgPCB0aGlzLndpZHRoICYmIHRoaXMuZ2V0UG9pbnQoaSwgeSkgPT0gb2xkQ29sb3I7
IGkrKykKKyAgICAgIHJpZ2h0TGltaXQgPSBpOworCisJLyogRmlsbCBleHRlbnQgZm91bmQgKi8K
Kwl0aGlzLmhvcml6b250YWxMaW5lKGZpbGxDb2xvciwgbGVmdExpbWl0LCByaWdodExpbWl0LCB5
KTsKKworCS8qIFNlZWsgYWJvdmUgYW5kIGJlbG93ICovCisJZm9yIChkeSA9IC0xOyBkeSA8PSAx
OyBkeSArPSAyKSB7CisgICAgICBpZiAodGhpcy5pbkJvdW5kcyh4LHkrZHkpKSB7CisJCWxhc3RC
b3JkZXIgPSAxOworCQlmb3IgKGkgPSBsZWZ0TGltaXQ7IGkgPD0gcmlnaHRMaW1pdDsgaSsrKSB7
CisgICAgICAgICAgYyA9IHRoaXMuZ2V0UG9pbnQoaSwgeStkeSk7CisgICAgICAgICAgaWYgKGxh
c3RCb3JkZXIpIHsKKwkJCWlmIChjID09IG9sZENvbG9yKSB7CQorICAgICAgICAgICAgICB0aGlz
LmZpbGwobnVsbCwgZmlsbENvbG9yLCBpLCB5K2R5KTsKKyAgICAgICAgICAgICAgbGFzdEJvcmRl
ciA9IDA7CisJCQl9CisgICAgICAgICAgfSBlbHNlIGlmIChjICE9IG9sZENvbG9yKSB7CisJCQls
YXN0Qm9yZGVyID0gMTsKKyAgICAgICAgICB9CisJCX0KKyAgICAgIH0KKwl9CisgIH0KK30KKwor
Ly8gc21vb3RoZWQgcG9pbnRzCitQbmdsZXQucHJvdG90eXBlLnNtb290aFBvaW50ID0gZnVuY3Rp
b24oc21vb3RoU3RlcHMsIHBvaW50Q29sb3IsIHgwLCB5MCkgeworICB2YXIgYSA9IGFyZ3VtZW50
cywgc2VsZiA9IHRoaXMsIG4gPSAoYS5sZW5ndGgtMikvMjsKKyAgdGhpcy5zbW9vdGgoc21vb3Ro
U3RlcHMsCisgICAgICAgICAgICAgIGZ1bmN0aW9uKG4sIHgsIHkpIHsgc2VsZi5wb2ludE5YWShw
b2ludENvbG9yLCBuLCB4LCB5KTsgfSwKKyAgICAgICAgICAgICAgbiwKKyAgICAgICAgICAgICAg
ZnVuY3Rpb24oaSkgeyByZXR1cm4gYVsyKmkrMl07IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9u
KGkpIHsgcmV0dXJuIGFbMippKzNdOyB9KTsKK30KKworLy8gc21vb3RoZWQgcG9seWxpbmUKK1Bu
Z2xldC5wcm90b3R5cGUuc21vb3RoTGluZSA9IGZ1bmN0aW9uKHNtb290aFN0ZXBzLCBsaW5lQ29s
b3IsIHgwLCB5MCkgeworICB2YXIgYSA9IGFyZ3VtZW50cywgc2VsZiA9IHRoaXMsIG4gPSAoYS5s
ZW5ndGgtMikvMjsKKyAgdGhpcy5zbW9vdGgoc21vb3RoU3RlcHMsCisgICAgICAgICAgICAgIGZ1
bmN0aW9uKG4sIHgsIHkpIHsgc2VsZi5saW5lTlhZKGxpbmVDb2xvciwgbiwgeCwgeSk7IH0sCisg
ICAgICAgICAgICAgIG4sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGFbMipp
KzJdOyB9LAorICAgICAgICAgICAgICBmdW5jdGlvbihpKSB7IHJldHVybiBhWzIqaSszXTsgfSk7
Cit9CisKKy8vIHNtb290aGVkIHBvbHlnb24KK1BuZ2xldC5wcm90b3R5cGUuc21vb3RoUG9seWdv
biA9IGZ1bmN0aW9uKHNtb290aFN0ZXBzLCBvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwgeDAsIHkw
KSB7CisgIHZhciBhID0gYXJndW1lbnRzLCBzZWxmID0gdGhpcywgbiA9IChhLmxlbmd0aC0zKS8y
ICsgMTsKKyAgdGhpcy5zbW9vdGgoc21vb3RoU3RlcHMsCisgICAgICAgICAgICAgIGZ1bmN0aW9u
KG4sIHgsIHkpIHsgc2VsZi5wb2x5Z29uTlhZKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBuLCB4
LCB5KTsgfSwKKyAgICAgICAgICAgICAgbiwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oaSkgeyBy
ZXR1cm4gYVsyKihpJShuLTEpKSszXTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oaSkgeyBy
ZXR1cm4gYVsyKihpJShuLTEpKSs0XTsgfSk7Cit9CisgICAgCisvLyBnZW5lcmF0ZSBzbW9vdGhT
dGVwcyBwb2ludHMgZm9yIHRoZSBsaW5lIHNlZ21lbnQgY29ubmVjdGluZworLy8gZWFjaCBjb25z
ZWN1dGl2ZSBwYWlyIG9mIHBvaW50cyBpbiB4KGkpLCB5KGkpLgorLy8gYWRhcHRlZCBmcm9tIHRo
ZSBzb3VyY2UgZm9yIHRrOC4xYjMsIGh0dHA6Ly93d3cuc2NyaXB0aWNzLmNvbQorUG5nbGV0LnBy
b3RvdHlwZS5zbW9vdGggPSBmdW5jdGlvbihzbW9vdGhTdGVwcywgZk5YWSwgbiwgeCwgeSkgewor
ICB2YXIgY29udHJvbCA9IG5ldyBBcnJheSg4KTsKKyAgdmFyIG91dHB1dFBvaW50cyA9IDA7Cisg
IHZhciBkYmxQb2ludHMgPSBuZXcgQXJyYXkoKTsKKworICAvLyBjb21wdXRlIG51bVN0ZXBzIG9m
IHNtb290aGVkIHBvaW50cworICAvLyBhY2NvcmRpbmcgdG8gdGhlIGJhc2lzIGluIGNvbnRyb2xb
XQorICAvLyBwbGFjaW5nIHBvaW50cyBpbnRvIGNvb3JkUHRyW2Nvb3JkT2ZmXQorICBmdW5jdGlv
biBzbW9vdGhQb2ludHMoY29udHJvbCwgbnVtU3RlcHMsIGNvb3JkUHRyLCBjb29yZE9mZikgewor
CWZvciAodmFyIGkgPSAxOyBpIDw9IG51bVN0ZXBzOyBpKyssIGNvb3JkT2ZmICs9IDIpIHsKKyAg
ICAgIHZhciB0ID0gaS9udW1TdGVwcywgdDIgPSB0KnQsIHQzID0gdDIqdCwKKwkJdSA9IDEuMCAt
IHQsIHUyID0gdSp1LCB1MyA9IHUyKnU7CisgICAgICBjb29yZFB0cltjb29yZE9mZiswXSA9IGNv
bnRyb2xbMF0qdTMgKyAzLjAgKiAoY29udHJvbFsyXSp0KnUyICsgY29udHJvbFs0XSp0Mip1KSAr
IGNvbnRyb2xbNl0qdDM7CisgICAgICBjb29yZFB0cltjb29yZE9mZisxXSA9IGNvbnRyb2xbMV0q
dTMgKyAzLjAgKiAoY29udHJvbFszXSp0KnUyICsgY29udHJvbFs1XSp0Mip1KSArIGNvbnRyb2xb
N10qdDM7CisJfQorICB9OworCisgIC8qCisgICAqIElmIHRoZSBjdXJ2ZSBpcyBhIGNsb3NlZCBv
bmUgdGhlbiBnZW5lcmF0ZSBhIHNwZWNpYWwgc3BsaW5lCisgICAqIHRoYXQgc3BhbnMgdGhlIGxh
c3QgcG9pbnRzIGFuZCB0aGUgZmlyc3Qgb25lcy4gIE90aGVyd2lzZQorICAgKiBqdXN0IHB1dCB0
aGUgZmlyc3QgcG9pbnQgaW50byB0aGUgb3V0cHV0LgorICAgKi8KKworICB2YXIgY2xvc2VkID0g
KHgoMCkgPT0geChuLTEpKSAmJiAoeSgwKSA9PSB5KG4tMSkpOworICBpZiAoY2xvc2VkKSB7CisJ
Y29udHJvbFswXSA9IDAuNSp4KG4tMikgKyAwLjUqeCgwKTsKKwljb250cm9sWzFdID0gMC41Knko
bi0yKSArIDAuNSp5KDApOworCWNvbnRyb2xbMl0gPSAwLjE2Nyp4KG4tMikgKyAwLjgzMyp4KDAp
OworCWNvbnRyb2xbM10gPSAwLjE2Nyp5KG4tMikgKyAwLjgzMyp5KDApOworCWNvbnRyb2xbNF0g
PSAwLjgzMyp4KDApICsgMC4xNjcqeCgxKTsKKwljb250cm9sWzVdID0gMC44MzMqeSgwKSArIDAu
MTY3KnkoMSk7CisJY29udHJvbFs2XSA9IDAuNSp4KDApICsgMC41KngoMSk7CisJY29udHJvbFs3
XSA9IDAuNSp5KDApICsgMC41KnkoMSk7CisJZGJsUG9pbnRzWzIqb3V0cHV0UG9pbnRzKzBdID0g
Y29udHJvbFswXTsKKwlkYmxQb2ludHNbMipvdXRwdXRQb2ludHMrMV0gPSBjb250cm9sWzFdOwor
CW91dHB1dFBvaW50cyArPSAxOworCXNtb290aFBvaW50cyhjb250cm9sLCBzbW9vdGhTdGVwcywg
ZGJsUG9pbnRzLCAyKm91dHB1dFBvaW50cyk7CisJb3V0cHV0UG9pbnRzICs9IHNtb290aFN0ZXBz
OworICB9IGVsc2UgeworCWRibFBvaW50c1syKm91dHB1dFBvaW50cyswXSA9IHgoMCk7CisJZGJs
UG9pbnRzWzIqb3V0cHV0UG9pbnRzKzFdID0geSgwKTsKKwlvdXRwdXRQb2ludHMgKz0gMTsKKyAg
fQorCisgIGZvciAodmFyIGkgPSAyOyBpIDwgbjsgaSArPSAxKSB7CisJdmFyIGogPSBpIC0gMjsK
KwkvKgorCSAqIFNldCB1cCB0aGUgZmlyc3QgdHdvIGNvbnRyb2wgcG9pbnRzLiAgVGhpcyBpcyBk
b25lCisJICogZGlmZmVyZW50bHkgZm9yIHRoZSBmaXJzdCBzcGxpbmUgb2YgYW4gb3BlbiBjdXJ2
ZQorCSAqIHRoYW4gZm9yIG90aGVyIGNhc2VzLgorCSAqLworCWlmICgoaSA9PSAyKSAmJiAhY2xv
c2VkKSB7CisgICAgICBjb250cm9sWzBdID0geChqKTsKKyAgICAgIGNvbnRyb2xbMV0gPSB5KGop
OworICAgICAgY29udHJvbFsyXSA9IDAuMzMzKngoaikgKyAwLjY2Nyp4KGorMSk7CisgICAgICBj
b250cm9sWzNdID0gMC4zMzMqeShqKSArIDAuNjY3KnkoaisxKTsKKwl9IGVsc2UgeworICAgICAg
Y29udHJvbFswXSA9IDAuNSp4KGopICsgMC41KngoaisxKTsKKyAgICAgIGNvbnRyb2xbMV0gPSAw
LjUqeShqKSArIDAuNSp5KGorMSk7CisgICAgICBjb250cm9sWzJdID0gMC4xNjcqeChqKSArIDAu
ODMzKngoaisxKTsKKyAgICAgIGNvbnRyb2xbM10gPSAwLjE2Nyp5KGopICsgMC44MzMqeShqKzEp
OworCX0KKworCS8qCisJICogU2V0IHVwIHRoZSBsYXN0IHR3byBjb250cm9sIHBvaW50cy4gIFRo
aXMgaXMgZG9uZQorCSAqIGRpZmZlcmVudGx5IGZvciB0aGUgbGFzdCBzcGxpbmUgb2YgYW4gb3Bl
biBjdXJ2ZQorCSAqIHRoYW4gZm9yIG90aGVyIGNhc2VzLgorCSAqLworCisJaWYgKChpID09IChu
LTEpKSAmJiAhY2xvc2VkKSB7CisgICAgICBjb250cm9sWzRdID0gLjY2Nyp4KGorMSkgKyAuMzMz
KngoaisyKTsKKyAgICAgIGNvbnRyb2xbNV0gPSAuNjY3KnkoaisxKSArIC4zMzMqeShqKzIpOwor
ICAgICAgY29udHJvbFs2XSA9IHgoaisyKTsKKyAgICAgIGNvbnRyb2xbN10gPSB5KGorMik7CisJ
fSBlbHNlIHsKKyAgICAgIGNvbnRyb2xbNF0gPSAuODMzKngoaisxKSArIC4xNjcqeChqKzIpOwor
ICAgICAgY29udHJvbFs1XSA9IC44MzMqeShqKzEpICsgLjE2Nyp5KGorMik7CisgICAgICBjb250
cm9sWzZdID0gMC41KngoaisxKSArIDAuNSp4KGorMik7CisgICAgICBjb250cm9sWzddID0gMC41
KnkoaisxKSArIDAuNSp5KGorMik7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgZmlyc3QgdHdvIHBv
aW50cyBjb2luY2lkZSwgb3IgaWYgdGhlIGxhc3QKKwkgKiB0d28gcG9pbnRzIGNvaW5jaWRlLCB0
aGVuIGdlbmVyYXRlIGEgc2luZ2xlCisJICogc3RyYWlnaHQtbGluZSBzZWdtZW50IGJ5IG91dHB1
dHRpbmcgdGhlIGxhc3QgY29udHJvbAorCSAqIHBvaW50LgorCSAqLworCisJaWYgKCgoeChqKSA9
PSB4KGorMSkpICYmICh5KGopID09IHkoaisxKSkpCisgICAgICAgIHx8ICgoeChqKzEpID09IHgo
aisyKSkgJiYgKHkoaisxKSA9PSB5KGorMikpKSkgeworCSAgZGJsUG9pbnRzWzIqb3V0cHV0UG9p
bnRzKzBdID0gY29udHJvbFs2XTsKKwkgIGRibFBvaW50c1syKm91dHB1dFBvaW50cysxXSA9IGNv
bnRyb2xbN107CisJICBvdXRwdXRQb2ludHMgKz0gMTsKKwkgIGNvbnRpbnVlOworCX0KKworCS8q
CisJICogR2VuZXJhdGUgYSBCZXppZXIgc3BsaW5lIHVzaW5nIHRoZSBjb250cm9sIHBvaW50cy4K
KwkgKi8KKwlzbW9vdGhQb2ludHMoY29udHJvbCwgc21vb3RoU3RlcHMsIGRibFBvaW50cywgMipv
dXRwdXRQb2ludHMpOworCW91dHB1dFBvaW50cyArPSBzbW9vdGhTdGVwczsKKyAgfQorCisgIC8v
IGRyYXcgdGhlIHBvaW50cworICAvLyBhbm9ueW1vdXMgZnVuY3Rpb25zIGRvbid0IHdvcmsgaGVy
ZQorICAvLyB0aGV5IHJlc3VsdCBpbiAidW5kZWZpbmVkIiBwb2ludCB2YWx1ZXMKKyAgZnVuY3Rp
b24gbXl4KGkpIHsgcmV0dXJuIE1hdGgucm91bmQoZGJsUG9pbnRzWzIqaV0pOyB9CisgICAgZnVu
Y3Rpb24gbXl5KGkpIHsgcmV0dXJuIE1hdGgucm91bmQoZGJsUG9pbnRzWzIqaSsxXSk7IH0KKyAg
ICBmTlhZKG91dHB1dFBvaW50cywgbXl4LCBteXkpOworfQorCisvLyBvdXRwdXQgYSBQTkcgc3Ry
aW5nCitQbmdsZXQucHJvdG90eXBlLm91dHB1dCA9IGZ1bmN0aW9uKCkgeworICAvLyBvdXRwdXQg
dHJhbnNsYXRpb25zCisgIGZ1bmN0aW9uIGluaXRpYWxpemUocG5nLCBvZmZzLCBzdHIpIHsKKwlm
b3IgKHZhciBpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkgKz0gMSkKKyAgICAgIGlmICh0
eXBlb2YgYXJndW1lbnRzW2ldLmxlbmd0aCAhPSAidW5kZWZpbmVkIikKKyAgICAgICAgZm9yICh2
YXIgaiA9IDA7IGogPCBhcmd1bWVudHNbaV0ubGVuZ3RoOyBqICs9IDEpCisgICAgICAgICAgcG5n
W29mZnMrK10gPSBhcmd1bWVudHNbaV0uY2hhckF0KGopOworICB9CisgICAgZnVuY3Rpb24gYnl0
ZTQodykgeyByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSgodz4+MjQpJjI1NSwgKHc+PjE2KSYy
NTUsICh3Pj44KSYyNTUsIHcmMjU1KTsgfQorCisgICAgLy8gY29tcHV0ZSBhZGxlcjMyIG9mIG91
dHB1dCBwaXhlbHMgKyByb3cgZmlsdGVyIGJ5dGVzCisgICAgdmFyIEJBU0UgPSA2NTUyMTsgLyog
bGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KKyAgdmFyIE5NQVggPSA1NTUyOyAg
LyogTk1BWCBpcyB0aGUgbGFyZ2VzdCBuIHN1Y2ggdGhhdCAyNTVuKG4rMSkvMiArIChuKzEpKEJB
U0UtMSkgPD0gMl4zMi0xICovCisgIHZhciBzMSA9IDE7CisgIHZhciBzMiA9IDA7CisgIHZhciBu
ID0gTk1BWDsKKyAgZm9yICh2YXIgeSA9IDA7IHkgPCB0aGlzLmhlaWdodDsgeSArPSAxKQorCWZv
ciAodmFyIHggPSAtMTsgeCA8IHRoaXMud2lkdGg7IHggKz0gMSkgeworICAgICAgczEgKz0gdGhp
cy5wbmdbdGhpcy5pbmRleCh4LHkpXS5jaGFyQ29kZUF0KDApOworICAgICAgczIgKz0gczE7Cisg
ICAgICBpZiAoKG4gLT0gMSkgPT0gMCkgeworCQlzMSAlPSBCQVNFOworCQlzMiAlPSBCQVNFOwor
CQluID0gTk1BWDsKKyAgICAgIH0KKwl9CisgIHMxICU9IEJBU0U7CisgIHMyICU9IEJBU0U7Cisg
IGluaXRpYWxpemUodGhpcy5wbmcsIHRoaXMuaWRhdF9vZmZzK3RoaXMuaWRhdF9zaXplLTgsIGJ5
dGU0KChzMiA8PCAxNikgfCBzMSkpOworCisgIC8vIGNvbXB1dGUgY3JjMzIgb2YgdGhlIFBORyBj
aHVua3MKKyAgZnVuY3Rpb24gY3JjMzIocG5nLCBvZmZzLCBzaXplKSB7CisJdmFyIGNyYyA9IC0x
OwkJLy8gaW5pdGlhbGl6ZSBjcmMKKwlmb3IgKHZhciBpID0gNDsgaSA8IHNpemUtNDsgaSArPSAx
KQorICAgICAgY3JjID0gUG5nbGV0LmNyYzMyX3RhYmxlWyhjcmMgXiBwbmdbb2ZmcytpXS5jaGFy
Q29kZUF0KDApKSAmIDB4ZmZdIF4gKChjcmMgPj4gOCkgJiAweDAwZmZmZmZmKTsKKwlpbml0aWFs
aXplKHBuZywgb2ZmcytzaXplLTQsIGJ5dGU0KGNyYyBeIC0xKSk7CisgIH0KKworICAgIGNyYzMy
KHRoaXMucG5nLCB0aGlzLmloZHJfb2ZmcywgdGhpcy5paGRyX3NpemUpOworICBjcmMzMih0aGlz
LnBuZywgdGhpcy5wbHRlX29mZnMsIHRoaXMucGx0ZV9zaXplKTsKKyAgY3JjMzIodGhpcy5wbmcs
IHRoaXMudHJuc19vZmZzLCB0aGlzLnRybnNfc2l6ZSk7CisgIGNyYzMyKHRoaXMucG5nLCB0aGlz
LmlkYXRfb2ZmcywgdGhpcy5pZGF0X3NpemUpOworICBjcmMzMih0aGlzLnBuZywgdGhpcy5pZW5k
X29mZnMsIHRoaXMuaWVuZF9zaXplKTsKKworICAvLyBjb252ZXJ0IFBORyB0byBzdHJpbmcKKyAg
cmV0dXJuICJcMjExUE5HXHJcblwwMzJcbiIrdGhpcy5wbmcuam9pbignJyk7Cit9CisKKy8qIFRh
YmxlIG9mIENSQ3Mgb2YgYWxsIDgtYml0IG1lc3NhZ2VzLiAqLworUG5nbGV0LmNyYzMyX3RhYmxl
ID0gbmV3IEFycmF5KDI1Nik7Citmb3IgKHZhciBuID0gMDsgbiA8IDI1NjsgbisrKSB7CisgIHZh
ciBjID0gbjsKKyAgZm9yICh2YXIgayA9IDA7IGsgPCA4OyBrKyspIHsKKyAgICBpZiAoYyAmIDEp
CisgICAgICBjID0gLTMwNjY3NDkxMiBeICgoYyA+PiAxKSAmIDB4N2ZmZmZmZmYpOworICAgIGVs
c2UKKyAgICAgIGMgPSAoYyA+PiAxKSAmIDB4N2ZmZmZmZmY7CisgIH0KKyAgUG5nbGV0LmNyYzMy
X3RhYmxlW25dID0gYzsKK30KKzwvc2NyaXB0PgorPC9oZWFkPgorCis8Ym9keT4KKzxwPlNob3Vs
ZCBzZWUgYSBsaWdodCBncmVlbiByZWN0YW5nbGU6PC9wPgorPGRpdiBpZD1yZXN1bHQ+PC9kaXY+
Cis8c2NyaXB0PgorCXBuZ2RhdGEgPSBuZXcgUG5nbGV0KDEsMSwxKTsKKwlwbmdkYXRhLnBvaW50
KHBuZ2RhdGEuY29sb3IoMCwyNTUsMCwxMjcpLDEsMSk7CisKKwlwbmcgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCJpbWciKTsKKwlwbmcuc3R5bGUuaGVpZ2h0ID0gIjEwMHB4IjsKKwlwbmcuc3R5
bGUud2lkdGggPSAiMTAwcHgiOworCQorCXBuZy5zcmMgPSAiZGF0YTppbWFnZS9wbmc7YmFzZTY0
LCIgKyBidG9hKHBuZ2RhdGEub3V0cHV0KCkpOworCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdy
ZXN1bHQnKS5hcHBlbmRDaGlsZChwbmcpOworPC9zY3JpcHQ+Cis8L2JvZHk+ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9k
b20vV2luZG93L2J0b2EtcG5nbGV0Lmh0bWwKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10eXBl
CiAgICsgdGV4dC9odG1sCgpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L3dpbmRv
dy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAxNzYx
OCkKKysrIExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93aW5kb3ctcHJvcGVydGllcy1leHBl
Y3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTUzNSw3ICs1MzUsOSBAQCB3aW5kb3cuWFNMVFBy
b2Nlc3Nvci5wcm90b3R5cGUudHJhbnNmb3JtCiB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lciBbZnVu
Y3Rpb25dCiB3aW5kb3cuYWxlcnQgW2Z1bmN0aW9uXQogd2luZG93LmFwcGxlU2NyaXB0Q29udHJv
bGxlciBbb2JqZWN0IFJ1bnRpbWVPYmplY3RdCit3aW5kb3cuYXRvYiBbZnVuY3Rpb25dCiB3aW5k
b3cuYmx1ciBbZnVuY3Rpb25dCit3aW5kb3cuYnRvYSBbZnVuY3Rpb25dCiB3aW5kb3cuY2FwdHVy
ZUV2ZW50cyBbZnVuY3Rpb25dCiB3aW5kb3cuY2xlYXJJbnRlcnZhbCBbZnVuY3Rpb25dCiB3aW5k
b3cuY2xlYXJUaW1lb3V0IFtmdW5jdGlvbl0KSW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNzYyMykKKysrIFdlYkNvcmUv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMDYtMTEtMDYgIEFs
ZXhleSBQcm9za3VyeWFrb3YgIDxhcEBueXBvcC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cDovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9OTY3MworICAgICAgICBBZGQgc3VwcG9ydCBmb3Igd2luZG93LmF0b2IoKSBhbmQg
d2luZG93LmJ0b2EoKQorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qOiBBZGRlZCBCYXNlNjQue2gsY3BwfQorICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc193aW5k
b3cuY3BwOgorICAgICAgICAoS0pTOjpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlvbik6CisgICAg
ICAgICogYmluZGluZ3MvanMva2pzX3dpbmRvdy5oOgorICAgICAgICAoS0pTOjpXaW5kb3c6Oik6
CisgICAgICAgICogcGxhdGZvcm0vQmFzZTY0LmNwcDogQWRkZWQuCisgICAgICAgIChzdHJuY2Fz
ZWNtcCk6CisgICAgICAgIChiYXNlNjRFbmNvZGUpOgorICAgICAgICAoYmFzZTY0RGVjb2RlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9CYXNlNjQuaDogQWRkZWQuCisKIDIwMDYtMTEtMDYgIEJyYWR5
IEVpZHNvbiAgPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmUg
SGFycmlzb24KSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CShyZXZpc2lvbiAxNzYxOCkKKysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yNzEyLDYgKzI3MTIsOCBAQAogCQlFMTQ4NDJGRjBB
Njc0QTMxMDA3RTREMzkgLyogVGV4dENvZGVjSUNVLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxNDg0MkZFMEE2NzRBMzEwMDdFNEQzOSAvKiBUZXh0
Q29kZWNJQ1UuY3BwICovOyB9OwogCQlFMTQ4NDMyRjBBNjc0RkMyMDA3RTREMzkgLyogVGV4dENv
ZGVjTWFjLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MTQ4NDMyRTBBNjc0RkMyMDA3RTREMzkgLyogVGV4dENvZGVjTWFjLmggKi87IH07CiAJCUUxNDg0
M0Q2MEE2NzU0QTYwMDdFNEQzOSAvKiBUZXh0Q29kZWNNYWMuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0ODQzOTEwQTY3NTJCRjAwN0U0RDM5IC8q
IFRleHRDb2RlY01hYy5jcHAgKi87IH07CisJCUUxRTM4OUE5MEFGRjhBM0MwMEJGMkIyMCAvKiBC
YXNlNjQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUx
RTM4OUE3MEFGRjhBM0MwMEJGMkIyMCAvKiBCYXNlNjQuaCAqLzsgfTsKKwkJRTFFMzg5QUEwQUZG
OEEzQzAwQkYyQjIwIC8qIEJhc2U2NC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSBFMUUzODlBODBBRkY4QTNDMDBCRjJCMjAgLyogQmFzZTY0LmNwcCAq
LzsgfTsKIAkJRTFFQkJCRDQwQUFDOUI4NzAwMUZFOEUyIC8qIENTU0NoYXJzZXRSdWxlLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxRUJCQkQzMEFB
QzlCODcwMDFGRThFMiAvKiBDU1NDaGFyc2V0UnVsZS5jcHAgKi87IH07CiAJCUUxRjA0MjQ2MDk4
MzkzODkwMDY2OTRFQSAvKiB4bWxodHRwcmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMUYwNDI0NDA5ODM5Mzg5MDA2Njk0RUEgLyogeG1s
aHR0cHJlcXVlc3QuY3BwICovOyB9OwogCQlFMUYwNDI0NzA5ODM5Mzg5MDA2Njk0RUEgLyogeG1s
aHR0cHJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEUxRjA0MjQ1MDk4MzkzODkwMDY2OTRFQSAvKiB4bWxodHRwcmVxdWVzdC5oICovOyB9OwpA
QCAtNTcwMSw2ICs1NzAzLDggQEAKIAkJRTE0ODQyRkUwQTY3NEEzMTAwN0U0RDM5IC8qIFRleHRD
b2RlY0lDVS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBUZXh0Q29k
ZWNJQ1UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMTQ4NDMyRTBBNjc0RkMy
MDA3RTREMzkgLyogVGV4dENvZGVjTWFjLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbGlu
ZUVuZGluZyA9IDA7IG5hbWUgPSBUZXh0Q29kZWNNYWMuaDsgcGF0aCA9IG1hYy9UZXh0Q29kZWNN
YWMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTE0ODQzOTEwQTY3NTJCRjAwN0U0
RDM5IC8qIFRleHRDb2RlY01hYy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxp
bmVFbmRpbmcgPSAwOyBuYW1lID0gVGV4dENvZGVjTWFjLmNwcDsgcGF0aCA9IG1hYy9UZXh0Q29k
ZWNNYWMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUUzODlBNzBBRkY4QTND
MDBCRjJCMjAgLyogQmFzZTY0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJh
c2U2NC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlFMUUzODlBODBBRkY4QTNDMDBC
RjJCMjAgLyogQmFzZTY0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEJhc2U2NC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRUJCQkQzMEFBQzlC
ODcwMDFGRThFMiAvKiBDU1NDaGFyc2V0UnVsZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDU1NDaGFyc2V0UnVsZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUUxRjA0MjQ0MDk4MzkzODkwMDY2OTRFQSAvKiB4bWxodHRwcmVxdWVzdC5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSB4bWxodHRwcmVxdWVzdC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxRjA0MjQ1MDk4MzkzODkwMDY2OTRFQSAvKiB4
bWxodHRwcmVxdWVzdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSB4bWxodHRw
cmVxdWVzdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODUxMiw2ICs4NTE2LDgg
QEAKIAkJCQk5M0NENEZENzA5OTVGOUVBMDA3RUNDOTcgLyogQXRvbWljU3RyaW5nLmNwcCAqLywK
IAkJCQk5M0NENEZEODA5OTVGOUVBMDA3RUNDOTcgLyogQXRvbWljU3RyaW5nLmggKi8sCiAJCQkJ
OTNDRDRGRDkwOTk1RjlFQTAwN0VDQzk3IC8qIEF0b21pY1N0cmluZ0ltcGwuaCAqLywKKwkJCQlF
MUUzODlBNzBBRkY4QTNDMDBCRjJCMjAgLyogQmFzZTY0LmggKi8sCisJCQkJRTFFMzg5QTgwQUZG
OEEzQzAwQkYyQjIwIC8qIEJhc2U2NC5jcHAgKi8sCiAJCQkJNjVGNTM4MjAwOUIyQjU1NzAwRjNE
QzRBIC8qIGNoYXJhY3Rlci1zZXRzLnR4dCAqLywKIAkJCQk5MzI2REMwQTA5REFENUJFMDBBRkM4
NDcgLyogQ2hhcnNldERhdGEuaCAqLywKIAkJCQlCQ0M4Q0ZDODA5ODZDRDI0MDAxNDBCRjIgLyog
Q29sb3IuY3BwICovLApAQCAtMTA1MjAsNiArMTA1MjYsNyBAQAogCQkJCTE0RDgyNDA4MEFGOTNB
RUIwMDA0RjA1NyAvKiBDaHJvbWVDbGllbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1REFEQTAw
MEFGRDg2QkYwMENFNTNFRCAvKiBGb3JtRGF0YVN0cmVhbU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNjVEQURBMTgwQUZEODc4MDAwQ0U1M0VEIC8qIEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywK
KwkJCQlFMUUzODlBOTBBRkY4QTNDMDBCRjJCMjAgLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywK
IAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsK
QEAgLTExNzYzLDYgKzExNzcwLDcgQEAKIAkJCQkxNEQ4MjM4QjBBRjkyREY2MDAwNEYwNTcgLyog
Q2hyb21lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTY1REFEOUZDMEFGRDg2QjQwMENFNTNFRCAv
KiBGb3JtRGF0YS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk2NURBREEwMTBBRkQ4NkJGMDBDRTUz
RUQgLyogRm9ybURhdGFTdHJlYW1NYWMubW0gaW4gU291cmNlcyAqLywKKwkJCQlFMUUzODlBQTBB
RkY4QTNDMDBCRjJCMjAgLyogQmFzZTY0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogV2ViQ29y
ZS9iaW5kaW5ncy9qcy9ranNfd2luZG93LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JpbmRp
bmdzL2pzL2tqc193aW5kb3cuY3BwCShyZXZpc2lvbiAxNzYxOCkKKysrIFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX3dpbmRvdy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQsNiArNCw3IEBACiAgKiAg
Q29weXJpZ2h0IChDKSAyMDAwIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDA2IEpvbiBTaGllciAoanNoaWVyQGlhc3RhdGUuZWR1KQogICogIENvcHly
aWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICog
IENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3ZWJraXQub3JnKQog
ICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYwpAQCAtMjMsMTIgKzI0LDE0IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAia2pzX3dpbmRvdy5oIgogCisjaW5jbHVkZSAiQmFzZTY0LmgiCiAjaW5j
bHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ1N0cmluZy5oIgogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJFdmVudExpc3RlbmVyLmgiCiAj
aW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2luY2x1ZGUgIkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkZyYW1lTG9h
ZFJlcXVlc3QuaCIKQEAgLTIyMCw2ICsyMjMsOCBAQCBjb25zdCBDbGFzc0luZm8gV2luZG93Ojpp
bmZvID0geyAiV2luZG93CiAKIC8qCiBAYmVnaW4gV2luZG93VGFibGUgMTAzCisgIGF0b2IgICAg
ICAgICAgV2luZG93OjpBVG9CICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAxCisgIGJ0
b2EgICAgICAgICAgV2luZG93OjpCVG9BICAgICAgICAgICAgRG9udERlbGV0ZXxGdW5jdGlvbiAx
CiAgIGNsb3NlZCAgICAgICAgV2luZG93OjpDbG9zZWQgICAgICAgICAgRG9udERlbGV0ZXxSZWFk
T25seQogICBjcnlwdG8gICAgICAgIFdpbmRvdzo6Q3J5cHRvICAgICAgICAgIERvbnREZWxldGV8
UmVhZE9ubHkKICAgZGVmYXVsdFN0YXR1cyBXaW5kb3c6OkRlZmF1bHRTdGF0dXMgICBEb250RGVs
ZXRlCkBAIC0xNTM3LDYgKzE1NDIsMzAgQEAgSlNWYWx1ZSAqV2luZG93RnVuYzo6Y2FsbEFzRnVu
Y3Rpb24oRXhlYwogICAgIGZyYW1lLT5ydW5KYXZhU2NyaXB0QWxlcnQoc3RyKTsKICAgICBleGVj
LT5keW5hbWljSW50ZXJwcmV0ZXIoKS0+cmVzdW1lVGltZW91dENoZWNrKCk7CiAgICAgcmV0dXJu
IGpzVW5kZWZpbmVkKCk7CisgIGNhc2UgV2luZG93OjpBVG9COgorICBjYXNlIFdpbmRvdzo6QlRv
QTogeworICAgIGlmIChhcmdzLnNpemUoKSA8IDEpCisgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIFN5bnRheEVycm9yLCAiTm90IGVub3VnaCBhcmd1bWVudHMiKTsKKyAgICBpZiAodi0+
aXNOdWxsKCkpCisgICAgICAgIHJldHVybiBqc1N0cmluZygpOworICAgIGlmICghcy5pczhCaXQo
KSkgeworICAgICAgICBzZXRET01FeGNlcHRpb24oZXhlYywgSU5WQUxJRF9DSEFSQUNURVJfRVJS
KTsKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAgfQorICAgIAorICAgIFZlY3Rv
cjxjaGFyPiBpbihzLnNpemUoKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzLnNpemUoKTsg
KytpKQorICAgICAgICBpbltpXSA9IHN0YXRpY19jYXN0PGNoYXI+KHMuZGF0YSgpW2ldLnVuaWNv
ZGUoKSk7CisgICAgVmVjdG9yPGNoYXI+IG91dDsKKworICAgIGlmIChpZCA9PSBXaW5kb3c6OkFU
b0IpIHsKKyAgICAgICAgaWYgKCFiYXNlNjREZWNvZGUoaW4sIG91dCkpCisgICAgICAgICAgICBy
ZXR1cm4gdGhyb3dFcnJvcihleGVjLCBHZW5lcmFsRXJyb3IsICJDYW5ub3QgZGVjb2RlIGJhc2U2
NCIpOworICAgIH0gZWxzZQorICAgICAgICBiYXNlNjRFbmNvZGUoaW4sIG91dCk7CisgICAgCisg
ICAgcmV0dXJuIGpzU3RyaW5nKFN0cmluZyhvdXQuZGF0YSgpLCBvdXQuc2l6ZSgpKSk7CisgIH0K
ICAgY2FzZSBXaW5kb3c6OkNvbmZpcm06IHsKICAgICBpZiAoZnJhbWUgJiYgZnJhbWUtPmRvY3Vt
ZW50KCkpCiAgICAgICBmcmFtZS0+ZG9jdW1lbnQoKS0+dXBkYXRlUmVuZGVyaW5nKCk7CkluZGV4
OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tqc193aW5kb3cuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2JpbmRpbmdzL2pzL2tqc193aW5kb3cuaAkocmV2aXNpb24gMTc2MTgpCisrKyBXZWJDb3JlL2Jp
bmRpbmdzL2pzL2tqc193aW5kb3cuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1LDcgKzE1NSw3IEBA
IG5hbWVzcGFjZSBLSlMgewogICAgIFVucHJvdGVjdGVkTGlzdGVuZXJzTWFwIGpzVW5wcm90ZWN0
ZWRIVE1MRXZlbnRMaXN0ZW5lcnM7CiAgICAgdmlydHVhbCBjb25zdCBDbGFzc0luZm8qIGNsYXNz
SW5mbygpIGNvbnN0IHsgcmV0dXJuICZpbmZvOyB9CiAgICAgc3RhdGljIGNvbnN0IENsYXNzSW5m
byBpbmZvOwotICAgIGVudW0geyBDbG9zZWQsIENyeXB0bywgRGVmYXVsdFN0YXR1cywgU3RhdHVz
LCBET01FeGNlcHRpb24sIEZyYW1lcywgSGlzdG9yeV8sIEV2ZW50XywgSW5uZXJIZWlnaHQsCisg
ICAgZW51bSB7IEFUb0IsIEJUb0EsIENsb3NlZCwgQ3J5cHRvLCBEZWZhdWx0U3RhdHVzLCBTdGF0
dXMsIERPTUV4Y2VwdGlvbiwgRnJhbWVzLCBIaXN0b3J5XywgRXZlbnRfLCBJbm5lckhlaWdodCwK
ICAgICAgICAgICAgSW5uZXJXaWR0aCwgTGVuZ3RoLCBMb2NhdGlvbl8sIExvY2F0aW9uYmFyLCBO
YW1lLCBOYXZpZ2F0b3JfLCBDbGllbnRJbmZvcm1hdGlvbiwKICAgICAgICAgICAgTWVudWJhciwg
T2Zmc2NyZWVuQnVmZmVyaW5nLCBPcGVuZXIsIE91dGVySGVpZ2h0LCBPdXRlcldpZHRoLCBQYWdl
WE9mZnNldCwgUGFnZVlPZmZzZXQsCiAgICAgICAgICAgIFBhcmVudCwgUGVyc29uYWxiYXIsIFNj
cmVlblgsIFNjcmVlblksIFNjcm9sbGJhcnMsIFNjcm9sbCwgU2Nyb2xsQnksCkluZGV4OiBXZWJD
b3JlL3BsYXRmb3JtL0Jhc2U2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9C
YXNlNjQuY3BwCShyZXZpc2lvbiAwKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9CYXNlNjQuY3BwCShy
ZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE3MyBAQAorLyoKKyAgIENvcHlyaWdodCAoQykgMjAwMC0y
MDAxIERhd2l0IEFsZW1heWVodSA8YWRhd2l0QGtkZS5vcmc+CisgICBDb3B5cmlnaHQgKEMpIDIw
MDYgQWxleGV5IFByb3NrdXJ5YWtvdiA8YXBAd2Via2l0Lm9yZz4KKworICAgVGhpcyBwcm9ncmFt
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkK
KyAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIChMR1BMKQorICAgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uLgorCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICBHTlUg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwor
ICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSwgVVNBLgorCisgICBUaGlzIGNvZGUg
aXMgYmFzZWQgb24gdGhlIGphdmEgaW1wbGVtZW50YXRpb24gaW4gSFRUUENsaWVudAorICAgcGFj
a2FnZSBieSBSb25hbGQgVHNjaGFsw6RyIENvcHlyaWdodCAoQykgMTk5Ni0xOTk5LgorKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJhc2U2NC5oIgorCisjaW5jbHVkZSA8d3Rm
L3BsYXRmb3JtLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVuY01hcFs2NF0gPQorewor
ICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3LCAweDQ4LAorICAweDQ5
LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUwLAorICAweDUxLCAweDUy
LCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAorICAweDU5LCAweDVBLCAweDYx
LCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LAorICAweDY3LCAweDY4LCAweDY5LCAweDZB
LCAweDZCLCAweDZDLCAweDZELCAweDZFLAorICAweDZGLCAweDcwLCAweDcxLCAweDcyLCAweDcz
LCAweDc0LCAweDc1LCAweDc2LAorICAweDc3LCAweDc4LCAweDc5LCAweDdBLCAweDMwLCAweDMx
LCAweDMyLCAweDMzLAorICAweDM0LCAweDM1LCAweDM2LCAweDM3LCAweDM4LCAweDM5LCAweDJC
LCAweDJGCit9OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjREZWNNYXBbMTI4XSA9Cit7Cisg
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0UsIDB4MDAs
IDB4MDAsIDB4MDAsIDB4M0YsCisgIDB4MzQsIDB4MzUsIDB4MzYsIDB4MzcsIDB4MzgsIDB4Mzks
IDB4M0EsIDB4M0IsCisgIDB4M0MsIDB4M0QsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYs
CisgIDB4MDcsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4MEQsIDB4MEUsCisgIDB4
MEYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsCisgIDB4MTcsIDB4
MTgsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MUEsIDB4
MUIsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYsIDB4MjAsCisgIDB4MjEsIDB4MjIsIDB4MjMsIDB4
MjQsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsCisgIDB4MjksIDB4MkEsIDB4MkIsIDB4MkMsIDB4
MkQsIDB4MkUsIDB4MkYsIDB4MzAsCisgIDB4MzEsIDB4MzIsIDB4MzMsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAKK307CisKKyNpZiBQTEFURk9STShXSU5fT1MpCitpbmxpbmUgaW50IHN0
cm5jYXNlY21wKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQsIHNpemVfdCBt
YXhMZW5ndGgpCit7CisgICAgcmV0dXJuIF9zdHJuaWNtcChmaXJzdCwgc2Vjb25kLCBtYXhMZW5n
dGgpOworfQorI2VuZGlmCisKK3ZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYg
aW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBib29sIGluc2VydExGcykKK3sKKyAgICAvLyBjbGVhciBv
dXQgdGhlIG91dHB1dCBidWZmZXIKKyAgICBvdXQuY2xlYXIoKTsKKyAgICBpZiAoaW4uaXNFbXB0
eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBpbnQgc2lkeCA9IDA7CisgICAg
dW5zaWduZWQgaW50IGRpZHggPSAwOworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBpbi5kYXRhKCk7
CisgICAgY29uc3QgdW5zaWduZWQgaW50IGxlbiA9IGluLnNpemUoKTsKKworICAgIHVuc2lnbmVk
IGludCBvdXRfbGVuID0gKChsZW4gKyAyKSAvIDMpICogNDsKKworICAgIC8vIERlYWwgd2l0aCB0
aGUgNzYgY2hhcmFjdGVycyBvciBsZXNzIHBlcgorICAgIC8vIGxpbmUgbGltaXQgc3BlY2lmaWVk
IGluIFJGQyAyMDQ1IG9uIGEKKyAgICAvLyBwcmUgcmVxdWVzdCBiYXNpcy4KKyAgICBpbnNlcnRM
RnMgPSAoaW5zZXJ0TEZzICYmIG91dF9sZW4gPiA3Nik7CisgICAgaWYgKGluc2VydExGcykKKyAg
ICAgICAgb3V0X2xlbiArPSAoKG91dF9sZW4gLSAxKSAvIDc2KTsKKworICAgIGludCBjb3VudCA9
IDA7CisgICAgb3V0LnJlc2l6ZShvdXRfbGVuKTsKKworICAgIC8vIDMtYnl0ZSB0byA0LWJ5dGUg
Y29udmVyc2lvbiArIDAtNjMgdG8gYXNjaWkgcHJpbnRhYmxlIGNvbnZlcnNpb24KKyAgICBpZiAo
bGVuID4gMSkgeworICAgICAgICB3aGlsZSAoc2lkeCA8IGxlbiAtIDIpIHsKKyAgICAgICAgICAg
IGlmIChpbnNlcnRMRnMpIHsKKyAgICAgICAgICAgICAgICBpZiAoY291bnQgJiYgKGNvdW50ICUg
NzYpID09IDApCisgICAgICAgICAgICAgICAgICAgIG91dFtkaWR4KytdID0gJ1xuJzsKKyAgICAg
ICAgICAgICAgICBjb3VudCArPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAgb3V0W2Rp
ZHgrK10gPSBiYXNlNjRFbmNNYXBbKGRhdGFbc2lkeF0gPj4gMikgJiAwNzddOworICAgICAgICAg
ICAgb3V0W2RpZHgrK10gPSBiYXNlNjRFbmNNYXBbKGRhdGFbc2lkeCsxXSA+PiA0KSAmIDAxNyB8
IChkYXRhW3NpZHhdIDw8IDQpICYgMDc3XTsKKyAgICAgICAgICAgIG91dFtkaWR4KytdID0gYmFz
ZTY0RW5jTWFwWyhkYXRhW3NpZHgrMl0gPj4gNikgJiAwMDMgfCAoZGF0YVtzaWR4KzFdIDw8IDIp
ICYgMDc3XTsKKyAgICAgICAgICAgIG91dFtkaWR4KytdID0gYmFzZTY0RW5jTWFwW2RhdGFbc2lk
eCsyXSAmIDA3N107CisgICAgICAgICAgICBzaWR4ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAoc2lkeCA8IGxlbikgeworICAgICAgICBpZiAoaW5zZXJ0TEZzICYmIChjb3VudCA+
IDApICYmIChjb3VudCAlIDc2KSA9PSAwKQorICAgICAgICAgICBvdXRbZGlkeCsrXSA9ICdcbic7
CisKKyAgICAgICAgb3V0W2RpZHgrK10gPSBiYXNlNjRFbmNNYXBbKGRhdGFbc2lkeF0gPj4gMikg
JiAwNzddOworICAgICAgICBpZiAoc2lkeCA8IGxlbiAtIDEpIHsKKyAgICAgICAgICAgIG91dFtk
aWR4KytdID0gYmFzZTY0RW5jTWFwWyhkYXRhW3NpZHgrMV0gPj4gNCkgJiAwMTcgfCAoZGF0YVtz
aWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGJhc2U2NEVuY01h
cFsoZGF0YVtzaWR4KzFdIDw8IDIpICYgMDc3XTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBvdXRbZGlkeCsrXSA9IGJhc2U2NEVuY01hcFsoZGF0YVtzaWR4XSA8PCA0KSAmIDA3N107Cisg
ICAgfQorCisgICAgLy8gQWRkIHBhZGRpbmcKKyAgICB3aGlsZSAoZGlkeCA8IG91dC5zaXplKCkp
IHsKKyAgICAgICAgb3V0W2RpZHhdID0gJz0nOworICAgICAgICBkaWR4Kys7CisgICAgfQorfQor
Citib29sIGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4m
IG91dCkKK3sKKyAgICBvdXQuY2xlYXIoKTsKKyAgICBpZiAoaW4uaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4gdHJ1ZTsKKworICAgIHVuc2lnbmVkIGludCBsZW4gPSBpbi5zaXplKCk7CisgICAg
Y29uc3QgY2hhciogZGF0YSA9IGluLmRhdGEoKTsKKworICAgIHdoaWxlIChsZW4gJiYgZGF0YVts
ZW4tMV0gPT0gJz0nKQorICAgICAgICAtLWxlbjsKKworICAgIG91dC5yZXNpemUobGVuKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGludCBpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7CisgICAgICAg
IHVuc2lnbmVkIGNoYXIgY2ggPSBkYXRhW2lkeF07CisgICAgICAgIGlmICgoY2ggPiA0NyAmJiBj
aCA8IDU4KSB8fCAoY2ggPiA2NCAmJiBjaCA8IDkxKSB8fCAoY2ggPiA5NiAmJiBjaCA8IDEyMykg
fHwgY2ggPT0gJysnIHx8IGNoID09ICcvJyB8fCBjaCA9PSAnPScpCisgICAgICAgICAgICBvdXRb
aWR4XSA9IGJhc2U2NERlY01hcFtjaF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICAvLyA0LWJ5dGUgdG8gMy1ieXRlIGNvbnZlcnNpb24KKyAg
ICB1bnNpZ25lZCBpbnQgb3V0TGVuID0gbGVuIC0gKChsZW4gKyAzKSAvIDQpOworICAgIGlmICgh
b3V0TGVuIHx8ICgob3V0TGVuICsgMikgLyAzKSAqIDQgPCBsZW4pCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIHVuc2lnbmVkIGludCBzaWR4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgZGlk
eCA9IDA7CisgICAgaWYgKG91dExlbiA+IDEpIHsKKyAgICAgICAgd2hpbGUgKGRpZHggPCBvdXRM
ZW4gLSAyKSB7CisgICAgICAgICAgICBvdXRbZGlkeF0gPSAoKChvdXRbc2lkeF0gPDwgMikgJiAy
NTUpIHwgKChvdXRbc2lkeCsxXSA+PiA0KSAmIDAwMykpOworICAgICAgICAgICAgb3V0W2RpZHgr
MV0gPSAoKChvdXRbc2lkeCsxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4KzJdID4+IDIpICYg
MDE3KSk7CisgICAgICAgICAgICBvdXRbZGlkeCsyXSA9ICgoKG91dFtzaWR4KzJdIDw8IDYpICYg
MjU1KSB8IChvdXRbc2lkeCszXSAmIDA3NykpOworICAgICAgICAgICAgc2lkeCArPSA0OworICAg
ICAgICAgICAgZGlkeCArPSAzOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRpZHggPCBv
dXRMZW4pCisgICAgICAgIG91dFtkaWR4XSA9ICgoKG91dFtzaWR4XSA8PCAyKSAmIDI1NSkgfCAo
KG91dFtzaWR4KzFdID4+IDQpICYgMDAzKSk7CisKKyAgICBpZiAoKytkaWR4IDwgb3V0TGVuKQor
ICAgICAgICBvdXRbZGlkeF0gPSAoKChvdXRbc2lkeCsxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtz
aWR4KzJdID4+IDIpICYgMDE3KSk7CisKKyAgICBpZiAob3V0TGVuIDwgb3V0LnNpemUoKSkKKyAg
ICAgICAgb3V0LnJlc2l6ZShvdXRMZW4pOworCisgICAgcmV0dXJuIHRydWU7Cit9CgpQcm9wZXJ0
eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5jcHAKX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1l
OiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9CYXNl
NjQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5oCShyZXZpc2lvbiAw
KQorKysgV2ViQ29yZS9wbGF0Zm9ybS9CYXNlNjQuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwz
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1cnlha292IChhcEB3
ZWJraXQub3JnKQorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEJhc2U2NF9oCisjZGVmaW5lIEJhc2U2NF9oCisK
KyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3ZvaWQgYmFzZTY0RW5jb2RlKGNvbnN0IFZlY3Rv
cjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYsIGJvb2wgaW5zZXJ0TEZzID0gZmFsc2UpOworCisvLyB0
aGlzIGRlY29kZXIgaXMgbm90IGdlbmVyYWwgcHVycG9zZSAtIGl0IHJldHVybnMgYW4gZXJyb3Ig
aWYgaXQgZW5jb3VudGVycyBhIGxpbmVmZWVkLCBhcyBuZWVkZWQgZm9yIHdpbmRvdy5hdG9iCiti
b29sIGJhc2U2NERlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mLCBWZWN0b3I8Y2hhcj4mKTsKKwor
I2VuZGlmIC8vIEJhc2U2NF9oCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL3BsYXRmb3Jt
L0Jhc2U2NC5oCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5hdGl2ZQoKSW5k
ZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC5wbmcK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQpDYW5ub3QgZGlzcGxheTogZmlsZSBtYXJrZWQgYXMgYSBiaW5hcnkgdHlwZS4K
c3ZuOm1pbWUtdHlwZSA9IGltYWdlL3BuZwoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0LWV4cGVjdGVkLnBuZwpfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5h
bWU6IHN2bjptaW1lLXR5cGUKICAgKyBpbWFnZS9wbmcKCgppVkJPUncwS0dnb0FBQUFOU1VoRVVn
QUFBeUFBQUFKWUNBWUFBQUNhZG9Kd0FBQWFWRWxFUVZSNG5PM2RmNnhYZGYzQThkZkZlMEYrCkRv
VWJpT1JGVWJzNERSM2lEMXdwbVdhRzAyRW1NOTNVaFRoY0xzcWMxYVpwUldPMVVKc0VybFhMNlFC
ZEJxYWgvRkNVaVFpQ0crYWwKbEduRERCQUVBWUY3NGZMKy91RzhjWUg3QTRTWGZlbngrTy9lY3o3
bjh6NnY4L25qUHUvblYwVXBwUVFBQUVDQ0RwLzJBZ0FBZ1A4ZApBZ1FBQUVnalFBQUFnRFFDQkFB
QVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEVDdGU0NiTm0yS2YvN3pueEVS
CnNYbno1dGkrZlh2VHRpMWJ0c1NxVmFzTzd1cDJVMTlmSHkrKytHS0wyeHNiRzJQRmloV0g3UDRQ
cGozUFpmMzY5ZkhHRzIrMCsvYUgKZXRic3Y3WWVud0FBZktSZEFmS3ZmLzBycnJ2dXVyanR0dHZp
dnZ2dWk2RkRoOGE1NTU0YnI3NzZha1JFUFBMSUk5R25UNTk0NktHSApEc2tpRnkxYUZHZWVlV2FN
SERseW45c1hMMTRjcDU5K2V0eDAwMDJINVA0UHBuMmR5NTEzM2hsWFhIRkZ1MjUvcUdmTi9tdnI4
UWtBCndIKzBLMERHalJzWG16ZHZqZ2NmZkRCKzlhdGZ4WXN2dmhpVmxaWHh6anZ2UkVURU5kZGNF
elUxTllkc2tXZWZmWFpjZi8zMUxXNGYKT25Sb1hIREJCVkZWVlhYSTFuQ3c3T3RjN3Jubm52anpu
Ly9jcnR1M1o5YjE5Zlh4N0xQUEh1Z1NEeHRaYzJqcjhRa0F3SCswSzBCVwpyRmdScTFhdGloMDdk
a1JFUkZWVlZmeis5NytQOTk5L3YybWZxcXFxcUtpb09EU3JqSWlPSFR2dTgvaTdkdTJLaUlqS3lz
cm8wS0h0CjB5bWxIUFMxN1c3bnpwMXQ3clBudWZUcTFTdE9PdW1rdmZacmFhMnR6WHJIamgxeDNY
WFh4UXN2dk5EbU9nNzFMRDVOcmMyaFBkZW8KSlMzTnJLWEhKd0FBelZXMlo2ZFJvMGJGajM3MG83
am9vb3RpMnJScDBhZFBuempqakRQaWpEUE9hTGJmcmwyNzRzNDc3NHcvL09FUAowYU5IajNqaWlT
ZmkrT09QajRpUDNyZHd4eDEzUktkT25XTGx5cFZ4M0hISHhZUUpFNkp6NTg0eGJkcTArTzUzdnh0
MzNIRkhmUHZiCjM0NnBVNmZHWFhmZEZjT0hENC9Ka3lmdmMwMWJ0MjZOMjI2N0xmcjI3UnZ2dnZ0
dS9PMXZmNHNqanp5eXhYT1lObTFhdlAvKys3RnAKMDZhWU1XTkcwK3YxMTZ4WkV4TW1USWhYWG5r
bHRtelpFZzg4OEVDY2M4NDViVzdiMDl5NWMyUEpraVZSVVZFUk0yYk1pQ2xUcHNTcApwNTdhNW16
Ly9lOS94ME1QUFJTUFAvNTRMRnk0c09uY2JyLzk5dmpNWno0VEN4WXNpS09QUGpyT09PT01HRFpz
V0h6aEMxOW9kZGIzCjNudHZ6Snc1TTk1ODg4MVl1WEpsVEpvMEticDI3YnJYN0ZvNmZ0ZXVYV1BL
bENsUlhWMGRuVHQzam52dnZUZWVmUExKcUttcDJlODUKUGZ2c3N6Rmx5cFRvMzc5L0RCbzBLTWFQ
SHg5VlZWWHgxNy8rdGVseHNidWxTNWZ1OTMxdjI3WXRmdnJUbjBhUEhqMWk2ZEtsTVhUbwowTGp0
dHR2Mk9ZZVhYbnBwbjllb1BldHN6elhaWFd1UG5aLzg1Q2N4YytiTVdMeDRjWnVQRHdDQXcwNXBo
dzgrK0tCY2NNRUZKU0pLCjc5Njl5OHlaTS9mYTUvT2YvM3daUEhod21UTm5UbG0xYWxXcHJhMHQz
L3JXdDVxMmYvR0xYeXgvL09NZlN5bWxORFEwbExQT09xdU0KR0RHaWFmdXh4eDViZnZhem56WDlm
UEhGRjVlcnJycXE2ZWY3NzcrLzlPM2J0K25ucjMzdGEyWHExS21sbEZJYUd4dEx2Mzc5eWtVWApY
YlRQOWUvWXNhT2NlZWFaVFQrUEd6ZXVORFkybHAwN2Q1YXZmdldyWmRPbVRhV3hzYkdNR1RPbVZG
ZFhsdzBiTnJTNmJVLzE5ZlhsCjJHT1BMZlBtelN1bGxQTGpILys0WEhubGxTM09jL2R6V2J0MmJi
bjU1cHRMNzk2OW03Yi8rdGUvTHQvNzN2ZEtLYVVzWDc2OFJFU1oKTUdGQ2VmdnR0OXMxNndFREJw
VHg0OGUzZVArdEhYL2h3b1hscUtPT0txZWZmbnA1N0xISHlwZ3hZMHBkWGQwQnpXbjE2dFhsNUpO
UApMclcxdGVXSko1NG9iNy85ZHZuYzV6NVhSbzhldmM5MTdlOTlsMUxLSlpkY1VoWXVYRmhLS1dY
SmtpVWxJc29ycjd5eTF4eGF1MGJ0CldXZGIxMlQzYTlyV1krZUJCeDRvbDE5K2VZdlhCd0RnY05h
dWwyRDE2TkVqbm5ubW1makJEMzRRR3pac2lDdXV1Q0ltVFpxMDEzNGoKUm95SUN5KzhNUHIzN3gv
RGh3OXYrbFNxV2JObXhZSUZDMkxVcUZFUjhkRkxpRzY4OGNiNHkxLyswdlJmLzg2ZE96ZDdDVXVY
TGwxYQpmRW5MU3krOUZFODk5VlI4NVN0ZmlZaUlEaDA2eEtXWFh0cmkramR1M0JpdnZ2cHFQUFhV
VXhFUk1YcjA2Q2lseFBUcDA2T1VFaSs4CjhFTE1talVyampubW1IanZ2ZmZpK2VlZmIzWGJucXFx
cW1Ma3lKRXhlUERnaVBqb0pWVjFkWFZ0empVaW9ycTZPazQ3N2JSbUwrMTUKNktHSG9sZXZYaEVS
Y2VxcHAwWjFkWFZFUkxQM2ZyUTA2NCsxOW5LZzFvNS96am5uUkcxdGJRd2FOQ2l1dlBMS21EeDVj
aXhidHV5QQo1dFNuVDU4WU9IQmduSGJhYVRGaXhJaW9xYW1KTDMzcFMvSDN2Lzk5bit2YTMvdWVO
MjllTEZ1MkxNNCsrK3lJaUJneVpFaE1uank1CjJadytua05yMTZnOTYyelBOZmxZVzQrZHNXUEh0
dnM5UHdBQWg1dDJmd3h2VlZWVmpCOC9QdWJPblJ2VjFkVnh5eTIzeEtPUFB0cHMKbjkzLzZEM3Fx
S05peTVZdEVSSHg4c3N2UjNWMWRiTTNpWjkxMWxrUkViRnMyYkw5WHZSenp6MFh0YlcxMGJObno2
YmZkZXZXcmNVLwp1bnYzN2gwalI0Nk15eTY3TEc2NTVaWVlNR0JBSEhIRUViRnc0Y0xvMWF0WGRP
ellNVHAyN0Jqbm5YZGV6SjQ5TzRZTUdkTHF0ajFWClZGVEUvZmZmSHhzM2Jvd0pFeWJFL1Buelkv
UG16ZTArbjRxS2ltWnI3OTY5ZTFPWVJVVDA3ZHUzNlkvczNXL3pzZDFudmEvdGUycnIKK0owN2Qy
NzZBenNpUHRHYzluVnV1Mzk4ODU3MjU3NmZmLzc1R0Rac1dMUGpqeGt6cGlrVWRwOURXOWVvclhX
MjU1cTBaODBBQVAvcgoybndQeU50dnZ4MjlldldLN3QyN1IwVEUrZWVmSDMvNjA1L2l2UFBPaTBj
ZmZUU3V1dXFxTnU5azY5YXRzVzdkdXRpeVpVdDA2OVl0CklpSk9PKzIwcUt5c2pBOC8vSEMvRi8z
T08rL0V1blhyOXZwOWEzOTBQL0xJSTlHdlg3KzQ3Nzc3WXVuU3BmSDAwMC9IdW5Ycm9yS3kKTXI3
ODVTL3Z0WDlyMi9abHlwUXBzV0RCZ3ZqZDczNFh2LzN0YitQbGwxOXUvd250WWR5NGNYSDk5ZGZI
OHVYTG8xT25UdEdsUzVjNAovL3p6RC9oNG4vVDRCM05PKzZ1MTQ2OVpzeVplZSsyMWRoL3JrMXlq
L1puWm9aNEpBTUQvWjIwK0E3Sm16WnE0Nzc3N212MXUyTEJoCk1XREFnSFovR1Y1dGJXMDBOalky
ZTlQdDJyVnJZK2ZPblRGbzBLQ20zMzM4aVZadDZkZXZYN3ozM252eGozLzhvMTM3cjE2OU90YXUK
WFJzVEowNk1XYk5teGZMbHkyUHExS2x4L1BISHgrelpzNXY5cDd1VUVzODk5MXlyMi9iMCt1dXZ4
OWl4WStPWHYvemxRZmtvNEVzdgp2VFJHang0ZHMyYk5paVZMbGh6UVI4bTJGbVA3ZS95RE5hY0Qw
ZHJ4YTJwcTRvMDMzb2lWSzFjMjI3YjdzMm9meitHVFhxUDltZG1oCm5na0F3UDluYlFiSUNTZWNF
Qk1uVG16MngvN3ExYXZqblhmZWFmYStpNjFidDhiV3JWdWJmdDYyYlZ0czI3WXRJaUt1dXVxcTZO
Ky8KZjh5ZVBidHArNUlsUzZLMnRqWXV1ZVNTaVBqb0daRkZpeFpGUTBORHZQdnV1N0Z5NWNwWXYz
NTkwLzRORFExTkh3Tjg5ZFZYUjJWbApaYk5QeUZxeFlrV3NXN2N1R2hzYjl6cUg5ZXZYeDdScDB5
SWk0dUtMTDQ3TEw3ODh1blhyRnQvODVqZGp6Wm8xTVdiTW1OaXdZVU9zClhiczI3cm5ubmpqcHBK
TmEzYmFudXJxNjJMVnJWN3orK3V2UjJOZ1k4K2ZQaiszYnQwY3BaWjhmMjdyN3VYdzh1MjNidGpY
dGUvZmQKZDhmSko1OGN0OTU2YTF4enpUWFJ1WFBuWnJkdmJkWVJFVDE3OW16NmpwWU5HemJzZGY5
dEhYL256cDNOanZkSjV0VFEwTkFzTExkdQozYnJQYTNRZzkzMzExVmZIa1VjZUdUZmNjRVBVMWRW
RlhWMWQzSDc3N2ZIWnozNTJyemtzWHJ5NDFXdlUxanJibXRudTE3U3RtYnp3Cndnc3hjZUxFRm1j
QUFIQllhODg3MVd0cmE4dnc0Y1BMdUhIanl2ang0OHZnd1lQTFRUZmRWQm9hR2tvcHBUejIyR09s
UTRjTzVaUlQKVGluTGxpMHJTNWN1TFlNR0RTcVZsWlZObjVpMWRPblNjc29wcDVSZi9PSVg1YW1u
bmlxalJvMHFkWFYxVGZjeGQrN2MwcXRYcjNMQwpDU2VVNzMvLysrWG1tMjh1RjE1NFlaazNiMTVa
dEdoUkdUSmtTSW1JTW1uU3BGSmZYMThlZnZqaDByMTc5ekpvMEtEeWpXOThvMXgyCjJXVmwyTEJo
NWVHSEg5NXIvYSs5OWxvWk9IQmdtVEpsU3BreFkwWVpPM1pzMmJGalJ5bWxsTi84NWplbFU2ZE9w
YUtpb2xSWFY1ZkgKSDMrODZYYXRiZHZkaHg5K1dFNC8vZlRTclZ1M2NzTU5ONVFubjN5eWRPblNw
Vng3N2JXbHZyNisyYjU3bnN1Q0JRdkt1ZWVlV3lLaQpUSnc0c2RUWDE1ZnZmT2M3SlNKS1JKUWpq
amlpOU9uVHA0d2RPN2JVMTllM2E5WS8vT0VQUzBWRlJibnh4aHZMbWpWcjlscHZhOGQvCitPR0hT
OWV1WGNzeHh4eFRwazJiMXE1WnRMUnQvdno1cFdmUG5xVmZ2MzVsNGNLRjVkVlhYeTBubm5oaTZk
U3BVM25tbVdmMld0ZUIKM1Bmamp6OWVxcXVyUzBTVW1wcWFzbURCZ3FadHU4L2hyYmZlYXZFYXpa
a3pwODExdGphemZUMCtXMXZ6cmJmZVd2cjI3VnQyN3R5NQp6OGNUQU1EaHJLS1V0citON3YzMzM0
K2pqejQ2dG03ZEdtKzk5VlljZDl4eFRlOEoyYy9ZaVRmZmZETTZkT2dRQXdjTzNHdDdRME5ECk5E
WTJSdWZPbldQSGpoMXR2bFNtc2JFeE5tellFTDE3OTQ3dDI3ZTMrRDBndTNidGlnNGRPc1RHalJ1
anFxcHFyKy9GYUdob2lGV3IKVmtWTlRVMVVWbGEyZTl1ZXRtM2IxdlNmOGZhc3Z5VS8vL25QNCt0
Zi8zcHMzNzQ5Tm0vZUhCczNib3pwMDZmSHRkZGUyKzczRmF4Ygp0eTU2OSs1OVVJOS9zT1owSUZv
N2Zpa2wxcTVkRzMzNjlObnJkbnZPNFVDdjBZSE1yS1UxbDFKaSsvYnRlejJMQWdEd3Y2QmRBVUtl
CkJ4OThNS1pQbng1ejVzeHA5dnVubjM0NkJnNGNHQ2VlZU9KLzlmRVBSMllHQUhEd0NKRC9Nc3VY
TDQraFE0ZkdaWmRkRmtPR0RJbHQKMjdiRm1qVnJZc1NJRVRGaXhJai8rdU1manN3TUFPRGdFU0Qv
aFQ3NDRJTjQvdm5uWS9YcTFURjgrUENEL2gvMlEzMzh3NUdaQVFBYwpIQUlFQUFCSTArNXZRZ2NB
QVBpa0JBZ0FBSkJHZ0FBQUFHa0VDQUFBa0VhQUFBQUFhUVFJQUFDUVJvQUFBQUJwQkFnQUFKQkdn
QUFBCkFHa0VDQUFBa0VhQUFBQUFhUVFJQUFDUVJvQUFBQUJwQkFnQUFKQkdnQUFBQUdrcTI5cmg3
cmc3WXgyMDAxMXgxNmU5QkFBQU9HQ2UKQVFFQUFOSUlFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJB
QURTQ0JBQUFDQ05BQUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFBQgpBQURTQ0JBQUFDQ05B
QUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFBQkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJ
MEFBUUFBCjBnZ1FBQUFnalFBQkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGdnUUFB
QWdqUUFCQUFEU0NCQUFBQ0NOQUFFQUFOSUkKRUFBQUlJMEFBUUFBMGdnUUFBQWdqUUFCQUFEU0NC
QUFBQ0NOQUFFQUFOSUlFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJBQURTQ0JBQQpBQ0NOQUFFQUFO
SUlFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJBQURTQ0JBQUFDQ05BQUVBQU5JSUVBQUFJSTBBQVFB
QTBnZ1FBQUFnCmpRQUJBQURTQ0JBQUFDQ05BQUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFB
QkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJMEEKQVFBQTBnZ1FBQUFnalFBQkFBRFNDQkFBQUND
TkFBRUFBTklJRUFBQUlJMEFBUUFBMGdnUUFBQWdqUUFCQUFEU0NCQUFBQ0NOQUFFQQpBTklJRUFB
QUlJMEFBUUFBMGdnUUFBQWdqUUFCQUFEU0NCQUFBQ0NOQUFFQUFOSUlFQUFBSUkwQUFRQUEwZ2dR
QUFBZ2pRQUJBQURTCkNCQUFBQ0NOQUFFQUFOSUlFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJBQURT
Q0JBQUFDQ05BQUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1EKQUFBZ2pRQUJBQURTQ0JBQUFDQ05BQUVB
QU5JSUVBQUFJSTBBQVFBQTBsU1VVc3FudlFnQUFPQi9nMmRBQUFDQU5BSUVBQUJJSTBBQQpBSUEw
QWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFn
RFFDQkFBQVNDTkFBQUNBCk5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFB
QUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUMKQkFBQVNDTkFBQUNBTkFJRUFBQklJ
MEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQQpB
RWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JB
QUFTQ05BQUFDQU5BSUVBQUJJCkkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5B
SUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkEKQUFDQU5BSUVBQUJJSTBBQUFJ
QTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFB
QQpnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NO
QUFBQ0FOQUlFQUFCSUkwQUFBSUEwCkFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFC
SUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUUKQUFCSUkwQUFBSUEwQWdR
QUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFD
QkFBQQpTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNB
TkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqClFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFB
QUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUEKQUlBMEFnUUFBRWdq
UUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFT
Q05BQUFDQQpOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVB
QUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDCkJBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBB
Z1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUEKQUVnalFBQUFn
RFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFB
Q0FOQUlFQUFCSQpJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkw
QUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BCkFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFF
Z2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUEKZ0RRQ0JB
QUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJ
RUFBQklJMEFBQUlBMApBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlB
MEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFCkFBQklJMEFBQUlBMEFnUUFBRWdqUUFB
QWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUEKU0NO
QUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJ
STBBQUFJQTBBZ1FBQUVnagpRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FB
QUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBCkFJQTBBZ1FBQUVnalFBQUFnRFFD
QkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0EK
TkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFB
SUEwQWdRQUFFZ2pRQUFBZ0RRQwpCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pR
QUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBCkFFZ2pRQUFBZ0RRQ0JBQUFT
Q05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFB
QkkKSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFn
UUFBRWdqUUFBQWdEUUNCQUFBU0NOQQpBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdE
UUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBCmdEUUNCQUFBU0NOQUFB
Q0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBB
QUFJQTAKQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVn
alFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRQpBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFB
QVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBClNDTkFBQUNBTkFJ
RUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEw
QWdRQUFFZ2oKUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFB
Z0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQQpBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05B
QUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBCk5BSUVBQUJJ
STBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFB
RWdqUUFBQWdEUUMKQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNC
QUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQQpBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FO
QUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJCkkwQUFB
SUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFB
QUFnRFFDQkFBQVNDTkEKQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVND
TkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQQpnRFFDQkFBQVNDTkFBQUNBTkFJRUFB
QklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwCkFn
UUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RR
Q0JBQUFTQ05BQUFDQU5BSUUKQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFD
QU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQQpTQ05BQUFDQU5BSUVBQUJJSTBB
QUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdq
ClFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFB
U0NOQUFBQ0FOUDhIdkhIZVlFS08KTmhjQUFBQUFTVVZPUks1Q1lJST0KCg==
</data>
<flag name="review"
          id="3993"
          type_id="1"
          status="-"
          setter="sam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11425</attachid>
            <date>2006-11-08 09:20:55 -0800</date>
            <delta_ts>2006-12-07 22:00:12 -0800</delta_ts>
            <desc>proposed fix</desc>
            <filename>9673r2_patch.txt</filename>
            <type>text/plain</type>
            <size>66216</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjYxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMTEtMDggIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk2NzMKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHdpbmRvdy5hdG9iKCkgYW5kIHdpbmRv
dy5idG9hKCkKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IFVTdHJpbmc6
OmlzOEJpdCgpLgorCiAyMDA2LTExLTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhY2FybHNzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMTc2NjEpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBfX1pOSzNLSlM3
SlNWYWx1ZTl0b0ludGVnZXJFUE5TXzlFeGVjU3RhCiBfX1pOSzNLSlM3VVN0cmluZzEwVVRGOFN0
cmluZ0V2CiBfX1pOSzNLSlM3VVN0cmluZzE0dG9TdHJpY3RVSW50MzJFUGIKIF9fWk5LM0tKUzdV
U3RyaW5nNWFzY2lpRXYKK19fWk5LM0tKUzdVU3RyaW5nNmlzOEJpdEV2CiBfX1pOSzNLSlM3VVN0
cmluZzh0b1VJbnQzMkVQYgogX19aTkszS0pTOEpTT2JqZWN0MTFoYXNQcm9wZXJ0eUVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk5LM0tKUzhKU09iamVjdDEyZGVmYXVsdFZh
bHVlRVBOU185RXhlY1N0YXRlRU5TXzZKU1R5cGVFCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE3NjYxKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2Miw3IEBACiAJCUJDRjY1
NTU5MEEyMDQ5NzEwMDM4QTE5NCAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y2NTUzQjBBMjA0OERFMDAzOEExOTQgLyogTWF0
aEV4dHJhcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUQyMTIwMjJBMEFENDMxMEQwMEVENzlCNiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMjEyMDIyODBBRDQzMTBDMDBFRDc5
QjYgLyogRGF0ZU1hdGguY3BwICovOyB9OwogCQlEMjEyMDIyQjBBRDQzMTBEMDBFRDc5QjYgLyog
RGF0ZU1hdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlTWF0aC5oICovOyB9OworCQlFMTAzQTI2
RTBCMDI0NUVCMDA4NjRBQUMgLyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTAzQTI2RDBCMDI0NUVCMDA4NjRBQUMgLyogU3Ry
aW5nRXh0cmFzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTE5NTY3OTYwOUU3Q0YxMjAwQjg5RDEzIC8qIFVuaWNvZGVJY3UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTU2NzhGMDlFN0NGMTIwMEI4
OUQxMyAvKiBVbmljb2RlSWN1LmggKi87IH07CiAJCUUxOTU2Nzk4MDlFN0NGMTIwMEI4OUQxMyAv
KiBVbmljb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTk1Njc5NDA5RTdDRjEyMDBCODlEMTMgLyogVW5pY29kZS5oICovOyB9OwogCQlFMTk1Njc5
OTA5RTdDRjEyMDBCODlEMTMgLyogVW5pY29kZUNhdGVnb3J5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk1Njc5NTA5RTdDRjEyMDBCODlEMTMgLyog
VW5pY29kZUNhdGVnb3J5LmggKi87IH07CkBAIC01MTksNiArNTIwLDcgQEAKIAkJQkNGNjU1M0Iw
QTIwNDhERTAwMzhBMTk0IC8qIE1hdGhFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hdGhFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIx
MjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVNYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlTWF0aC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZU1hdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTEwM0EyNkQwQjAyNDVFQjAwODY0QUFDIC8qIFN0cmluZ0V4dHJhcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdFeHRyYXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE5NTY3OEYwOUU3Q0YxMjAwQjg5RDEzIC8qIFVuaWNvZGVJY3Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pY29kZUljdS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk1Njc5NDA5RTdDRjEyMDBCODlEMTMgLyogVW5pY29k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmljb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTU2Nzk1MDlFN0NGMTIwMEI4OUQxMyAvKiBVbmljb2Rl
Q2F0ZWdvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pY29kZUNhdGVn
b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MjIsNiArODI0LDcgQEAKIAkJ
CQk2NTgwRjc5NTA5NDA3MDU2MDA4MkMyMTkgLyogUGFzc1JlZlB0ci5oICovLAogCQkJCTY1RDZE
ODdFMDlCNUEzMkUwMDAyRTRENyAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTY1QzY0N0IzMDkzRUY4
RDYwMDIyQzM4MCAvKiBSZWZQdHIuaCAqLywKKwkJCQlFMTAzQTI2RDBCMDI0NUVCMDA4NjRBQUMg
LyogU3RyaW5nRXh0cmFzLmggKi8sCiAJCQkJNjU0MUJENkUwOEU4MEExNzAwMkNCRUU3IC8qIFRD
UGFnZU1hcC5oICovLAogCQkJCTY1NDFCRDZGMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1NwaW5Mb2Nr
LmggKi8sCiAJCQkJNjU0MUJENzAwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lzdGVtQWxsb2MuY3Bw
ICovLApAQCAtMTEyOSw2ICsxMTMyLDcgQEAKIAkJCQk2NUM3QTE3NDBBOEVBQUNCMDBGQTM3RUEg
LyogSlNXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0I2QTBERjBBQTY0REE0
MDA3NkRFMjcgLyogR2V0UHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMjEyMDIyQjBBRDQzMTBE
MDBFRDc5QjYgLyogRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMDNBMjZFMEIwMjQ1
RUIwMDg2NEFBQyAvKiBTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTc2NjEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAwNi0xMS0wOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQG55cG9w
LmNvbT4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NjczCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB3aW5kb3cuYXRvYigpIGFuZCB3aW5kb3cuYnRv
YSgpCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBm
YXN0L2RvbS9XaW5kb3cvYXRvYi1idG9hLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vV2luZG93L2F0b2ItYnRvYS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorCiAyMDA2
LTExLTA4ICBCcmFkeSBFaWRzb24gPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE1hY2llagpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2F0b2ItYnRv
YS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93
L2F0b2ItYnRvYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvYXRvYi1idG9hLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0OCBAQAorUEFTUyB3aW5kb3cuYXRvYigiWVE9PSIpIGlzICJhIgorUEFTUyB3aW5kb3cuYXRv
YigiWVdJPSIpIGlzICJhYiIKK1BBU1Mgd2luZG93LmF0b2IoIllXSmoiKSBpcyAiYWJjIgorUEFT
UyB3aW5kb3cuYXRvYigiWVdKalpBPT0iKSBpcyAiYWJjZCIKK1BBU1Mgd2luZG93LmF0b2IoIllX
SmpaR1U9IikgaXMgImFiY2RlIgorUEFTUyB3aW5kb3cuYXRvYigiWVdKalpHVm0iKSBpcyAiYWJj
ZGVmIgorUEFTUyB3aW5kb3cuYnRvYSgiYSIpIGlzICJZUT09IgorUEFTUyB3aW5kb3cuYnRvYSgi
YWIiKSBpcyAiWVdJPSIKK1BBU1Mgd2luZG93LmJ0b2EoImFiYyIpIGlzICJZV0pqIgorUEFTUyB3
aW5kb3cuYnRvYSgiYWJjZCIpIGlzICJZV0pqWkE9PSIKK1BBU1Mgd2luZG93LmJ0b2EoImFiY2Rl
IikgaXMgIllXSmpaR1U9IgorUEFTUyB3aW5kb3cuYnRvYSgiYWJjZGVmIikgaXMgIllXSmpaR1Zt
IgorUEFTUyB0eXBlb2Ygd2luZG93LmJ0b2EgaXMgImZ1bmN0aW9uIgorUEFTUyB3aW5kb3cuYnRv
YSgpIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQ
QVNTIHdpbmRvdy5idG9hKCIiKSBpcyAiIgorUEFTUyB3aW5kb3cuYnRvYShudWxsKSBpcyAiIgor
UEFTUyB3aW5kb3cuYnRvYSh3aW5kb3cpIGlzICJXMjlpYW1WamRDQlhhVzVrYjNkZCIKK1BBU1Mg
d2luZG93LmJ0b2EoIsOpw6kiKSBpcyAiNmVrPSIKK1BBU1Mgd2luZG93LmJ0b2EoIlx1MDA4MFx1
MDA4MSIpIGlzICJnSUU9IgorUEFTUyB3aW5kb3cuYnRvYSgi0YLQtdGB0YIiKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IElOVkFMSURfQ0hBUkFDVEVSX0VSUjogRE9NIEV4Y2VwdGlvbiA1LgorUEFT
UyB3aW5kb3cuYnRvYSBpcyAwCitQQVNTIHR5cGVvZiB3aW5kb3cuYnRvYSBpcyAibnVtYmVyIgor
UEFTUyB0eXBlb2Ygd2luZG93LmF0b2IgaXMgImZ1bmN0aW9uIgorUEFTUyB3aW5kb3cuYXRvYigp
IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQQVNT
IHdpbmRvdy5hdG9iKCIiKSBpcyAiIgorUEFTUyB3aW5kb3cuYXRvYihudWxsKSBpcyAiIgorUEFT
UyB3aW5kb3cuYXRvYigiIFlRPT0iKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBkZWNv
ZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigiWVE9PVx1MDAwYSIpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogQ2Fubm90IGRlY29kZSBiYXNlNjQuCitQQVNTIHdpbmRvdy5hdG9iKCI2ZWs9Iikg
aXMgIsOpw6kiCitQQVNTIHdpbmRvdy5hdG9iKCI2ZWsiKSBpcyAiw6nDqSIKK1BBU1Mgd2luZG93
LmF0b2IoImdJRT0iKSBpcyAiwoDCgSIKK1BBU1Mgd2luZG93LmF0b2IoItGC0LXRgdGCIikgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IERPTSBFeGNlcHRpb24g
NS4KK1BBU1Mgd2luZG93LmF0b2IoInoiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBk
ZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigienoiKSBpcyAiw48iCitQQVNTIHdpbmRv
dy5hdG9iKCJ6enoiKSBpcyAiw488IgorUEFTUyB3aW5kb3cuYXRvYigienp6eiIpIGlzICLDjzzD
syIKK1BBU1Mgd2luZG93LmF0b2IoInp6enp6IikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBDYW5u
b3QgZGVjb2RlIGJhc2U2NC4KK1BBU1Mgd2luZG93LmF0b2IoIj0iKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IENhbm5vdCBkZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigiPT0iKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBkZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRv
YigiPT09IikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBDYW5ub3QgZGVjb2RlIGJhc2U2NC4KK1BB
U1Mgd2luZG93LmF0b2IoIj09PT0iKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBkZWNv
ZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigiPT09PT0iKSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IENhbm5vdCBkZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYiBpcyAwCitQQVNTIHR5
cGVvZiB3aW5kb3cuYXRvYiBpcyAibnVtYmVyIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2Zhc3QvZG9tL1dpbmRvdy9hdG9iLWJ0b2EtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9hdG9iLWJ0b2EuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYXRvYi1idG9hLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYXRvYi1idG9hLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKK++7vzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitzaG91bGRCZSgnd2luZG93LmF0b2IoIllRPT0iKScsICci
YSInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigiWVdJPSIpJywgJyJhYiInKTsKK3Nob3VsZEJl
KCd3aW5kb3cuYXRvYigiWVdKaiIpJywgJyJhYmMiJyk7CitzaG91bGRCZSgnd2luZG93LmF0b2Io
IllXSmpaQT09IiknLCAnImFiY2QiJyk7CitzaG91bGRCZSgnd2luZG93LmF0b2IoIllXSmpaR1U9
IiknLCAnImFiY2RlIicpOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9iKCJZV0pqWkdWbSIpJywgJyJh
YmNkZWYiJyk7CitzaG91bGRCZSgnd2luZG93LmJ0b2EoImEiKScsICciWVE9PSInKTsKK3Nob3Vs
ZEJlKCd3aW5kb3cuYnRvYSgiYWIiKScsICciWVdJPSInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYnRv
YSgiYWJjIiknLCAnIllXSmoiJyk7CitzaG91bGRCZSgnd2luZG93LmJ0b2EoImFiY2QiKScsICci
WVdKalpBPT0iJyk7CitzaG91bGRCZSgnd2luZG93LmJ0b2EoImFiY2RlIiknLCAnIllXSmpaR1U9
IicpOworc2hvdWxkQmUoJ3dpbmRvdy5idG9hKCJhYmNkZWYiKScsICciWVdKalpHVm0iJyk7CisK
K3Nob3VsZEJlKCd0eXBlb2Ygd2luZG93LmJ0b2EnLCAnImZ1bmN0aW9uIicpOworc2hvdWxkVGhy
b3coJ3dpbmRvdy5idG9hKCknKTsKK3Nob3VsZEJlKCd3aW5kb3cuYnRvYSgiIiknLCAnIiInKTsK
K3Nob3VsZEJlKCd3aW5kb3cuYnRvYShudWxsKScsICciIicpOworc2hvdWxkQmUoJ3dpbmRvdy5i
dG9hKHdpbmRvdyknLCAnIlcyOWlhbVZqZENCWGFXNWtiM2RkIicpOyAvLyAiW29iamVjdCBXaW5k
b3ddIgorc2hvdWxkQmUoJ3dpbmRvdy5idG9hKCLDqcOpIiknLCAnIjZlaz0iJyk7CitzaG91bGRC
ZSgnd2luZG93LmJ0b2EoIlxcdTAwODBcXHUwMDgxIiknLCAnImdJRT0iJyk7CitzaG91bGRUaHJv
dygnd2luZG93LmJ0b2EoItGC0LXRgdGCIiknKTsKK3dpbmRvdy5idG9hID0gMDsKK3Nob3VsZEJl
KCd3aW5kb3cuYnRvYScsICcwJyk7CitzaG91bGRCZSgndHlwZW9mIHdpbmRvdy5idG9hJywgJyJu
dW1iZXIiJyk7CisKK3Nob3VsZEJlKCd0eXBlb2Ygd2luZG93LmF0b2InLCAnImZ1bmN0aW9uIicp
Oworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCknKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigi
IiknLCAnIiInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYihudWxsKScsICciIicpOworc2hvdWxk
VGhyb3coJ3dpbmRvdy5hdG9iKCIgWVE9PSIpJyk7CitzaG91bGRUaHJvdygnd2luZG93LmF0b2Io
IllRPT1cXHUwMDBhIiknKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigiNmVrPSIpJywgJyLDqcOp
IicpOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9iKCI2ZWsiKScsICciw6nDqSInKTsKK3Nob3VsZEJl
KCd3aW5kb3cuYXRvYigiZ0lFPSIpJywgJyJcdTAwODBcdTAwODEiJyk7CitzaG91bGRUaHJvdygn
d2luZG93LmF0b2IoItGC0LXRgdGCIiknKTsKK3Nob3VsZFRocm93KCd3aW5kb3cuYXRvYigieiIp
Jyk7CitzaG91bGRCZSgnd2luZG93LmF0b2IoInp6IiknLCAnIsOPIicpOworc2hvdWxkQmUoJ3dp
bmRvdy5hdG9iKCJ6enoiKScsICciw49cdTAwM0MiJyk7CitzaG91bGRCZSgnd2luZG93LmF0b2Io
Inp6enoiKScsICciw49cdTAwM0PDsyInKTsKK3Nob3VsZFRocm93KCd3aW5kb3cuYXRvYigienp6
enoiKScpOworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCI9IiknKTsKK3Nob3VsZFRocm93KCd3
aW5kb3cuYXRvYigiPT0iKScpOworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCI9PT0iKScpOwor
c2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCI9PT09IiknKTsKK3Nob3VsZFRocm93KCd3aW5kb3cu
YXRvYigiPT09PT0iKScpOword2luZG93LmF0b2IgPSAwOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9i
JywgJzAnKTsKK3Nob3VsZEJlKCd0eXBlb2Ygd2luZG93LmF0b2InLCAnIm51bWJlciInKTsKKwor
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2F0b2It
YnRvYS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbAoK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC5j
aGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYnRvYS1w
bmdsZXQtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEgQEAKKzQwZTY4Y2YyYjgwMmU5NzZiNDZiMTlmOTRmZjE5YTU1ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2Et
cG5nbGV0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9X
aW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZp
ZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
UmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJvZHkg
e0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgw
LDApIHNpemUgNzg0eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDIxNngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIxNjogIlNob3VsZCBz
ZWUgYSBsaWdodCBncmVlbiByZWN0YW5nbGU6IgorICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQg
KDAsMzQpIHNpemUgNzg0eDEwMAorICAgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwwKSBz
aXplIDEwMHgxMDAKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZG9tL1dp
bmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OTggQEAKKzxoZWFkPgorPHNjcmlwdD4KKy8vCisvLyBQ
TkcgZHJhd2luZyBsaWJyYXJ5IGZvciBKYXZhU2NyaXB0LgorLy8gQ29weXJpZ2h0IChDKSAxOTk5
IGJ5IFJvZ2VyIEUgQ3JpdGNobG93IEpyLAorLy8gU2FudGEgRmUsIE5ldyBNZXhpY28sIFVTQS4K
Ky8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24g
Mi4xCisvLworLy8gVGhlIGhvbWUgcGFnZSBmb3IgUG5nbGV0cyBpcyBodHRwOi8vd3d3LmVsZi5v
cmcvcG5nbGV0cywKKy8vIGEgY29weSBvZiB0aGUgQUZMIG1heSBiZSBmb3VuZCBhdCBodHRwOi8v
d3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2FmbC0yLjEucGhwLAorLy8gUG5nbGV0cyB3ZXJl
IGluc3BpcmVkIGJ5IGFuZCBjb3BpZWQgZnJvbSBnZDEuMywgaHR0cDovL3d3dy5ib3V0ZWxsLmNv
bS9nZCwKKy8vIG90aGVyIHBhcnRzIHdlcmUgaW5zcGlyZWQgYnkgb3IgY29waWVkIGZyb20gVGNs
L1RrLCBodHRwOi8vd3d3LnNjcmlwdGljcy5jb20sCisvLyBhbmQgc29tZSBhbGdvcml0aG1zIHdl
cmUgdGFrZW4gZnJvbSBGb2xleSAmIHZhbiBEYW0gMm5kIEVkaXRpb24uCisvLworLy8gVGhhbmtz
IHRvIEFsZXggVmluY2VudCBmb3IgcG9pbnRpbmcgb3V0IHRoZSBhZHZhbnRhZ2VzIG9mIGVsaW1p
bmF0aW5nIHN0cmljdAorLy8gamF2YXNjcmlwdCB3YXJuaW5ncy4KKy8vCisKKy8vIGNyZWF0ZSBh
IG5ldyBQbmdsZXQgb2Ygc3BlY2lmaWVkIHdpZHRoLCBoZWlnaHQsIGFuZCBkZXB0aAorLy8gd2lk
dGggYW5kIGhlaWdodCBhcmUgc3BlY2lmaWVkIGluIHBpeGVscworLy8gZGVwdGggaXMgcmVhbGx5
IHRoZSBudW1iZXIgb2YgcGFsZXR0ZSBlbnRyaWVzCitmdW5jdGlvbiBQbmdsZXQod2lkdGgsaGVp
Z2h0LGRlcHRoKSB7CisgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxNjsKKyAgdGhpcy5oZWlnaHQg
PSBoZWlnaHQgfHwgMTY7CisgIHRoaXMuZGVwdGggPSBNYXRoLm1pbigyNTYsIGRlcHRoIHx8IDE2
KTsKKworICAvLyBwaXhlbCBkYXRhIGFuZCByb3cgZmlsdGVyIGlkZW50aWZpZXIgc2l6ZQorICB0
aGlzLnBpeF9zaXplID0gaGVpZ2h0Kih3aWR0aCsxKTsKKworICAvLyBkZWZsYXRlIGhlYWRlciwg
cGl4X3NpemUsIGJsb2NrIGhlYWRlcnMsIGFkbGVyMzIgY2hlY2tzdW0KKyAgdGhpcy5kYXRhX3Np
emUgPSAyICsgdGhpcy5waXhfc2l6ZSArIDUqTWF0aC5mbG9vcigodGhpcy5waXhfc2l6ZSsweGZm
ZmYtMSkvMHhmZmZmKSArIDQ7CisKKyAgLy8gb2Zmc2V0cyBhbmQgc2l6ZXMgb2YgUG5nIGNodW5r
cworICB0aGlzLmloZHJfb2ZmcyA9IDA7CQkJCQkvLyBJSERSIG9mZnNldCBhbmQgc2l6ZQorICB0
aGlzLmloZHJfc2l6ZSA9IDQrNCsxMys0OworICB0aGlzLnBsdGVfb2ZmcyA9IHRoaXMuaWhkcl9v
ZmZzK3RoaXMuaWhkcl9zaXplOwkvLyBQTFRFIG9mZnNldCBhbmQgc2l6ZQorICB0aGlzLnBsdGVf
c2l6ZSA9IDQrNCszKmRlcHRoKzQ7CisgIHRoaXMudHJuc19vZmZzID0gdGhpcy5wbHRlX29mZnMr
dGhpcy5wbHRlX3NpemU7CS8vIHRSTlMgb2Zmc2V0IGFuZCBzaXplCisgIHRoaXMudHJuc19zaXpl
ID0gNCs0K2RlcHRoKzQ7CisgIHRoaXMuaWRhdF9vZmZzID0gdGhpcy50cm5zX29mZnMrdGhpcy50
cm5zX3NpemU7CS8vIElEQVQgb2Zmc2V0IGFuZCBzaXplCisgIHRoaXMuaWRhdF9zaXplID0gNCs0
K3RoaXMuZGF0YV9zaXplKzQ7CisgIHRoaXMuaWVuZF9vZmZzID0gdGhpcy5pZGF0X29mZnMrdGhp
cy5pZGF0X3NpemU7CS8vIElFTkQgb2Zmc2V0IGFuZCBzaXplCisgIHRoaXMuaWVuZF9zaXplID0g
NCs0KzQ7CisgIHRoaXMucG5nX3NpemUgPSB0aGlzLmllbmRfb2Zmcyt0aGlzLmllbmRfc2l6ZTsJ
Ly8gdG90YWwgUE5HIHNpemUKKworICAvLyBhcnJheSBvZiBvbmUgYnl0ZSBzdHJpbmdzCisgIHRo
aXMucG5nID0gbmV3IEFycmF5KHRoaXMucG5nX3NpemUpOworCisgIC8vIGZ1bmN0aW9ucyBmb3Ig
aW5pdGlhbGl6aW5nIGRhdGEKKyAgZnVuY3Rpb24gaW5pdGlhbGl6ZShwbmcsIG9mZnMsIHN0cikg
eworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAxKQorICAg
ICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0ubGVuZ3RoICE9ICJ1bmRlZmluZWQiKQorICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGogKz0gMSkKKyAgICAg
ICAgICBwbmdbb2ZmcysrXSA9IGFyZ3VtZW50c1tpXS5jaGFyQXQoaik7CisgIH07CisgIGZ1bmN0
aW9uIGJ5dGUyKHcpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKHc+PjgpJjI1NSwgdyYy
NTUpOyB9OworICBmdW5jdGlvbiBieXRlNCh3KSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2Rl
KCh3Pj4yNCkmMjU1LCAodz4+MTYpJjI1NSwgKHc+PjgpJjI1NSwgdyYyNTUpOyB9OworICBmdW5j
dGlvbiBieXRlMmxzYih3KSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHcmMjU1LCAodz4+
OCkmMjU1KTsgfTsKKworICAvLyBpbml0aWFsaXplIGV2ZXJ5dGhpbmcgdG8gemVybyBieXRlCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wbmdfc2l6ZTsgaSArPSAxKQorICAgIHRoaXMucG5n
W2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTsKKworICAvLyBpbml0aWFsaXplIG5vbi16ZXJv
IGVsZW1lbnRzCisgIGluaXRpYWxpemUodGhpcy5wbmcsIHRoaXMuaWhkcl9vZmZzLCBieXRlNCh0
aGlzLmloZHJfc2l6ZS0xMiksICdJSERSJywKKyAgICAgICAgICAgICBieXRlNCh3aWR0aCksIGJ5
dGU0KGhlaWdodCksIFN0cmluZy5mcm9tQ2hhckNvZGUoOCwgMykpOworICBpbml0aWFsaXplKHRo
aXMucG5nLCB0aGlzLnBsdGVfb2ZmcywgYnl0ZTQodGhpcy5wbHRlX3NpemUtMTIpLCAnUExURScp
OworICBpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLnRybnNfb2ZmcywgYnl0ZTQodGhpcy50cm5z
X3NpemUtMTIpLCAndFJOUycpOworICBpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLmlkYXRfb2Zm
cywgYnl0ZTQodGhpcy5pZGF0X3NpemUtMTIpLCAnSURBVCcpOworICBpbml0aWFsaXplKHRoaXMu
cG5nLCB0aGlzLmllbmRfb2ZmcywgYnl0ZTQodGhpcy5pZW5kX3NpemUtMTIpLCAnSUVORCcpOwor
CisgIC8vIGluaXRpYWxpemUgZGVmbGF0ZSBoZWFkZXIKKyAgdmFyIGhlYWRlciA9ICgoOCArICg3
PDw0KSkgPDwgOCkgfCAoMyA8PCA2KTsKKyAgaGVhZGVyICs9IDMxIC0gKGhlYWRlciAlIDMxKTsK
KyAgaW5pdGlhbGl6ZSh0aGlzLnBuZywgdGhpcy5pZGF0X29mZnMrOCwgYnl0ZTIoaGVhZGVyKSk7
CisKKyAgLy8gaW5pdGlhbGl6ZSBkZWZsYXRlIGJsb2NrIGhlYWRlcnMKKyAgZm9yIChpID0gMDsg
aSoweGZmZmYgPCB0aGlzLnBpeF9zaXplOyBpICs9IDEpIHsKKwl2YXIgc2l6ZSwgYml0czsKKwlp
ZiAoaSArIDB4ZmZmZiA8IHRoaXMucGl4X3NpemUpIHsKKyAgICAgIHNpemUgPSAweGZmZmY7Cisg
ICAgICBiaXRzID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTsKKwl9IGVsc2UgeworICAgICAgc2l6
ZSA9IHRoaXMucGl4X3NpemUgLSBpKjB4ZmZmZjsKKyAgICAgIGJpdHMgPSBTdHJpbmcuZnJvbUNo
YXJDb2RlKDEpOworCX0KKwlpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLmlkYXRfb2Zmcys4KzIr
aSooNSsweGZmZmYpLCBiaXRzLCBieXRlMmxzYihzaXplKSwgYnl0ZTJsc2IofnNpemUpKTsKKyAg
fQorCisgIC8vIGluaXRpYWxpemUgcGFsZXR0ZSBoYXNoCisgIHRoaXMucGFsZXR0ZSA9IG5ldyBP
YmplY3QoKTsKKyAgdGhpcy5waW5kZXggPSAwOworfQorCisvLyB2ZXJzaW9uIHN0cmluZy9udW1i
ZXIKK1BuZ2xldC52ZXJzaW9uID0gIjE5OTkwNDI3LjAiOworCisvLyB0ZXN0IGlmIGNvb3JkaW5h
dGVzIGFyZSB3aXRoaW4gYm91bmRzCitQbmdsZXQucHJvdG90eXBlLmluQm91bmRzID0gZnVuY3Rp
b24oeCx5KSB7IHJldHVybiB4ID49IDAgJiYgeCA8IHRoaXMud2lkdGggJiYgeSA+PSAwICYmIHkg
PCB0aGlzLmhlaWdodDsgfQorCisvLyBjbGlwIGFuIHggdmFsdWUgdG8gdGhlIHdpbmRvdyB3aWR0
aAorUG5nbGV0LnByb3RvdHlwZS5jbGlwWCA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IDwgMCkg
PyAwIDogKHggPj0gdGhpcy53aWR0aCkgPyB0aGlzLndpZHRoLTEgOiB4IDsgfQorCisvLyBjbGlw
IGEgeSB2YWx1ZSB0byB0aGUgd2luZG93IGhlaWdodAorUG5nbGV0LnByb3RvdHlwZS5jbGlwWSA9
IGZ1bmN0aW9uKHkpIHsgcmV0dXJuICh5IDwgMCkgPyAwIDogKHkgPj0gdGhpcy5oZWlnaHQpID8g
dGhpcy5oZWlnaHQtMSA6IHkgOyB9CisKKy8vIGNvbXB1dGUgdGhlIGluZGV4IGludG8gYSBwbmcg
Zm9yIGEgZ2l2ZW4gcGl4ZWwKK1BuZ2xldC5wcm90b3R5cGUuaW5kZXggPSBmdW5jdGlvbih4LHkp
IHsKKyAgdmFyIGkgPSB5Kih0aGlzLndpZHRoKzEpK3grMTsKKyAgdmFyIGogPSB0aGlzLmlkYXRf
b2Zmcys4KzIrTWF0aC5mbG9vcigoaS8weGZmZmYpKzEpKjUraTsKKyAgcmV0dXJuIGo7Cit9CisK
Ky8vIG1ha2UgYSBjb2xvciBpbiBhIFBuZ2xldAorUG5nbGV0LnByb3RvdHlwZS5jb2xvciA9IGZ1
bmN0aW9uKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSB7CisgIGFscGhhID0gYWxwaGEgPj0gMCA/
IGFscGhhIDogMjU1OworICB2YXIgcmdiYSA9ICgoKCgoYWxwaGE8PDgpK3JlZCk8PDgpK2dyZWVu
KTw8OCkrYmx1ZTsKKyAgaWYgKCB0eXBlb2YgdGhpcy5wYWxldHRlW3JnYmFdID09ICJ1bmRlZmlu
ZWQiKSB7CisJaWYgKHRoaXMucGluZGV4ID09IHRoaXMuZGVwdGgpIHJldHVybiBTdHJpbmcuZnJv
bUNoYXJDb2RlKDApOworCXRoaXMucGFsZXR0ZVtyZ2JhXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUo
dGhpcy5waW5kZXgpOworCXRoaXMucG5nW3RoaXMucGx0ZV9vZmZzKzgrdGhpcy5waW5kZXgqMysw
XSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocmVkKTsKKwl0aGlzLnBuZ1t0aGlzLnBsdGVfb2Zmcys4
K3RoaXMucGluZGV4KjMrMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdyZWVuKTsKKwl0aGlzLnBu
Z1t0aGlzLnBsdGVfb2Zmcys4K3RoaXMucGluZGV4KjMrMl0gPSBTdHJpbmcuZnJvbUNoYXJDb2Rl
KGJsdWUpOworCXRoaXMucG5nW3RoaXMudHJuc19vZmZzKzgrdGhpcy5waW5kZXhdID0gU3RyaW5n
LmZyb21DaGFyQ29kZShhbHBoYSk7CisJdGhpcy5waW5kZXggKz0gMTsKKyAgfQorICByZXR1cm4g
dGhpcy5wYWxldHRlW3JnYmFdOworfQorCisvLyByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGEgY29s
b3IKK1BuZ2xldC5wcm90b3R5cGUuaXNDb2xvciA9IGZ1bmN0aW9uKGNvbG9yKSB7CisgIHJldHVy
biB0eXBlb2YoY29sb3IpID09ICdzdHJpbmcnICYmCisJY29sb3IubGVuZ3RoID09IDEgJiYKKwlj
b2xvci5jaGFyQ29kZUF0KDApID49IDAgJiYKKwljb2xvci5jaGFyQ29kZUF0KDApIDwgdGhpcy5k
ZXB0aDsKK30KKworLy8gZmluZCB0aGUgcmVkLCBncmVlbiwgYmx1ZSwgb3IgYWxwaGEgdmFsdWUg
b2YgYSBQbmdsZXQgY29sb3IKK1BuZ2xldC5wcm90b3R5cGUucmVkID0gZnVuY3Rpb24oY29sb3Ip
IHsgcmV0dXJuIHRoaXMucG5nW3RoaXMucGx0ZV9vZmZzKzgrY29sb3IuY2hhckNvZGVBdCgwKSoz
KzBdLmNoYXJDb2RlQXQoMCk7IH0KK1BuZ2xldC5wcm90b3R5cGUuZ3JlZW4gPSBmdW5jdGlvbihj
b2xvcikgeyByZXR1cm4gdGhpcy5wbmdbdGhpcy5wbHRlX29mZnMrOCtjb2xvci5jaGFyQ29kZUF0
KDApKjMrMV0uY2hhckNvZGVBdCgwKTsgfQorUG5nbGV0LnByb3RvdHlwZS5ibHVlID0gZnVuY3Rp
b24oY29sb3IpIHsgcmV0dXJuIHRoaXMucG5nW3RoaXMucGx0ZV9vZmZzKzgrY29sb3IuY2hhckNv
ZGVBdCgwKSozKzJdLmNoYXJDb2RlQXQoMCk7IH0KK1BuZ2xldC5wcm90b3R5cGUuYWxwaGEgPSBm
dW5jdGlvbihjb2xvcikgeyByZXR1cm4gdGhpcy5wbmdbdGhpcy50cm5zX29mZnMrOCtjb2xvci5j
aGFyQ29kZUF0KDApXS5jaGFyQ29kZUF0KDApOyB9CisKKy8vIGRyYXcgYSBwb2ludCBvciBwb2lu
dHMKK1BuZ2xldC5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbihwb2ludENvbG9yLCB4MCwgeTAp
IHsKKyAgdmFyIGEgPSBhcmd1bWVudHM7CisgIHRoaXMucG9pbnROWFkocG9pbnRDb2xvciwgKGEu
bGVuZ3RoLTEpLzIsIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGFbMippKzFdOyB9LCBmdW5jdGlvbihp
KSB7IHJldHVybiBhWzIqaSsyXTsgfSk7Cit9CisKK1BuZ2xldC5wcm90b3R5cGUucG9pbnROWFkg
PSBmdW5jdGlvbihwb2ludENvbG9yLCBuLCB4LCB5KSB7CisgIGlmICggISB0aGlzLmlzQ29sb3Io
cG9pbnRDb2xvcikpCisJcmV0dXJuOworICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkgKz0gMSkg
eworCXZhciB4MSA9IHgoaSksIHkxID0geShpKTsKKwlpZiAodGhpcy5pbkJvdW5kcyh4MSx5MSkp
CisgICAgICB0aGlzLnBuZ1t0aGlzLmluZGV4KHgxLHkxKV0gPSBwb2ludENvbG9yOworICB9Cit9
CisKKy8vIHJlYWQgYSBwaXhlbCAKK1BuZ2xldC5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlv
bih4LHkpIHsgcmV0dXJuIHRoaXMuaW5Cb3VuZHMoeCx5KSA/IHRoaXMucG5nW3RoaXMuaW5kZXgo
eCx5KV0gOiBTdHJpbmcuZnJvbUNoYXJDb2RlKDApOyB9CisKKy8vIGRyYXcgYSBob3Jpem9udGFs
IGxpbmUKK1BuZ2xldC5wcm90b3R5cGUuaG9yaXpvbnRhbExpbmUgPSBmdW5jdGlvbihsaW5lQ29s
b3IsIHgxLCB4MiwgeSkgeworICBpZiAoICEgdGhpcy5pc0NvbG9yKGxpbmVDb2xvcikpCisJcmV0
dXJuOworICB4MSA9IHRoaXMuY2xpcFgoeDEpOworICB4MiA9IHRoaXMuY2xpcFgoeDIpOworICB2
YXIgeDsKKyAgaWYgKHgxIDwgeDIpCisJZm9yICh4ID0geDE7IHggPD0geDI7IHggKz0gMSkKKyAg
ICAgIHRoaXMucG5nW3RoaXMuaW5kZXgoeCx5KV0gPSBsaW5lQ29sb3I7CisgIGVsc2UKKwlmb3Ig
KHggPSB4MjsgeCA8PSB4MTsgeCArPSAxKQorICAgICAgdGhpcy5wbmdbdGhpcy5pbmRleCh4LHkp
XSA9IGxpbmVDb2xvcjsKK30KKworLy8gZHJhdyBhIHZlcnRpY2FsIGxpbmUKK1BuZ2xldC5wcm90
b3R5cGUudmVydGljYWxMaW5lID0gZnVuY3Rpb24obGluZUNvbG9yLCB4LCB5MSwgeTIpIHsKKyAg
aWYgKCAhIHRoaXMuaXNDb2xvcihsaW5lQ29sb3IpKQorCXJldHVybjsKKyAgeTEgPSB0aGlzLmNs
aXBZKHkxKTsKKyAgeTIgPSB0aGlzLmNsaXBZKHkyKTsKKyAgdmFyIHk7CisgIGlmICh5MSA8IHky
KQorCWZvciAoeSA9IHkxOyB5IDw9IHkyOyB5ICs9IDEpCisgICAgICB0aGlzLnBuZ1t0aGlzLmlu
ZGV4KHgseSldID0gbGluZUNvbG9yOworICBlbHNlCisJZm9yICh5ID0geTI7IHkgPD0geTE7IHkg
Kz0gMSkKKyAgICAgIHRoaXMucG5nW3RoaXMuaW5kZXgoeCx5KV0gPSBsaW5lQ29sb3I7Cit9CisK
Ky8vIGRyYXcgYSBnZW5lcmFsIGxpbmUKK1BuZ2xldC5wcm90b3R5cGUuZ2VuZXJhbExpbmUgPSBm
dW5jdGlvbihsaW5lQ29sb3IsIHgxLCB5MSwgeDIsIHkyKSB7CisgIGlmICggISB0aGlzLmlzQ29s
b3IobGluZUNvbG9yKSkKKwlyZXR1cm47CisgIHZhciBkeCA9IE1hdGguYWJzKHgyLXgxKSwgZHkg
PSBNYXRoLmFicyh5Mi15MSk7CisgIHZhciBpbmNyMSwgaW5jcjIsIGQsIHgsIHksIHhlbmQsIHll
bmQsIHhkaXJmbGFnLCB5ZGlyZmxhZywgeGluYywgeWluYzsKKyAgaWYgKGR5IDw9IGR4KSB7CisJ
ZCA9IDIqZHkgLSBkeDsKKwlpbmNyMSA9IDIqZHk7CisJaW5jcjIgPSAyICogKGR5IC0gZHgpOwor
CWlmICh4MSA+IHgyKSB7CisgICAgICB4ID0geDI7CisgICAgICB5ID0geTI7CisgICAgICB5ZGly
ZmxhZyA9IC0xOworICAgICAgeGVuZCA9IHgxOworCX0gZWxzZSB7CisgICAgICB4ID0geDE7Cisg
ICAgICB5ID0geTE7CisgICAgICB5ZGlyZmxhZyA9IDE7CisgICAgICB4ZW5kID0geDI7CisJfQor
CXlpbmMgPSAoKCh5MiAtIHkxKSAqIHlkaXJmbGFnKSA+IDApID8gMSA6IC0xOworCXRoaXMucG9p
bnQobGluZUNvbG9yLCB4LCB5KTsKKwl3aGlsZSAoeCsrIDwgeGVuZCkgeworICAgICAgaWYgKGQg
PCAwKSB7CisJCWQgKz0gaW5jcjE7CisgICAgICB9IGVsc2UgeworCQl5ICs9IHlpbmM7CisJCWQg
Kz0gaW5jcjI7CisgICAgICB9CisgICAgICB0aGlzLnBvaW50KGxpbmVDb2xvciwgeCwgeSk7CisJ
fQorICB9IGVsc2UgewkJCS8qIGR5ID4gZHggKi8KKwlkID0gMipkeCAtIGR5OworCWluY3IxID0g
MipkeDsKKwlpbmNyMiA9IDIgKiAoZHggLSBkeSk7CisJaWYgKHkxID4geTIpIHsKKyAgICAgIHkg
PSB5MjsKKyAgICAgIHggPSB4MjsKKyAgICAgIHllbmQgPSB5MTsKKyAgICAgIHhkaXJmbGFnID0g
LTE7CisJfSBlbHNlIHsKKyAgICAgIHkgPSB5MTsKKyAgICAgIHggPSB4MTsKKyAgICAgIHllbmQg
PSB5MjsKKyAgICAgIHhkaXJmbGFnID0gMTsKKwl9CisJeGluYyA9ICgoKHgyIC0geDEpICogeGRp
cmZsYWcpID4gMCkgPyAxIDogLTE7CisJdGhpcy5wb2ludChsaW5lQ29sb3IsIHgsIHkpOworCXdo
aWxlICh5KysgPCB5ZW5kKSB7CisgICAgICBpZiAoZCA8IDApIHsKKwkJZCArPSBpbmNyMTsKKyAg
ICAgIH0gZWxzZSB7CisJCXggKz0geGluYzsKKwkJZCArPSBpbmNyMjsKKyAgICAgIH0KKyAgICAg
IHRoaXMucG9pbnQobGluZUNvbG9yLCB4LCB5KTsKKwl9CisgIH0KK30KKworLy8gZHJhdyBhIGxp
bmUKK1BuZ2xldC5wcm90b3R5cGUubGluZSA9IGZ1bmN0aW9uKGxpbmVDb2xvciwgeDAsIHkwKSB7
CisgIHZhciBhID0gYXJndW1lbnRzOworICB0aGlzLmxpbmVOWFkobGluZUNvbG9yLCAoYS5sZW5n
dGgtMSkvMiwgZnVuY3Rpb24oaSkgeyByZXR1cm4gYVsyKmkrMV07IH0sIGZ1bmN0aW9uKGkpIHsg
cmV0dXJuIGFbMippKzJdOyB9KTsKK30KKworUG5nbGV0LnByb3RvdHlwZS5saW5lTlhZID0gZnVu
Y3Rpb24obGluZUNvbG9yLCBuLCB4LCB5KSB7CisgIGlmICggISB0aGlzLmlzQ29sb3IobGluZUNv
bG9yKSkKKwlyZXR1cm47CisgIHZhciB4MSA9IHgoMCksIHkxID0geSgwKTsKKyAgZm9yICh2YXIg
aSA9IDE7IGkgPCBuOyBpICs9IDEpIHsKKwl2YXIgeDIgPSB4KGkpLCB5MiA9IHkoaSk7CisJaWYg
KHgxID09IHgyKQorICAgICAgdGhpcy52ZXJ0aWNhbExpbmUobGluZUNvbG9yLCB4MSwgeTEsIHky
KTsKKwllbHNlIGlmICh5MSA9PSB5MikKKyAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmUobGluZUNv
bG9yLCB4MSwgeDIsIHkxKTsKKwllbHNlCisgICAgICB0aGlzLmdlbmVyYWxMaW5lKGxpbmVDb2xv
ciwgeDEsIHkxLCB4MiwgeTIpOworCXgxID0geDI7CisJeTEgPSB5MjsKKyAgfQorfQorCisvLyBk
cmF3IGEgcG9seWdvbgorUG5nbGV0LnByb3RvdHlwZS5wb2x5Z29uID0gZnVuY3Rpb24ob3V0bGlu
ZUNvbG9yLCBmaWxsQ29sb3IsIHgxLCB5MSkgeworICB2YXIgYSA9IGFyZ3VtZW50czsKKyAgdGhp
cy5wb2x5Z29uTlhZKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCAoYS5sZW5ndGgtMikvMiwgZnVu
Y3Rpb24oaSkge3JldHVybiBhWzIqaSsyXTt9LCBmdW5jdGlvbihpKSB7cmV0dXJuIGFbMippKzNd
O30pOworfQorCitQbmdsZXQucHJvdG90eXBlLnBvbHlnb25OWFkgPSBmdW5jdGlvbihvdXRsaW5l
Q29sb3IsIGZpbGxDb2xvciwgbiwgeCwgeSkgeworICBpZiAobiA8PSAwKQorCXJldHVybjsKKyAg
aWYgKHRoaXMuaXNDb2xvcihmaWxsQ29sb3IpKQorCXRoaXMuY29uY2F2ZU5YWShmaWxsQ29sb3Is
IG4sIHgsIHkpOworICBpZiAodGhpcy5pc0NvbG9yKG91dGxpbmVDb2xvcikpCisJdGhpcy5saW5l
TlhZKG91dGxpbmVDb2xvciwgbisxLCBmdW5jdGlvbihpKSB7IHJldHVybiB4KGklbik7IH0sIGZ1
bmN0aW9uKGkpIHsgcmV0dXJuIHkoaSVuKTsgfSk7Cit9CisKKy8qCisgKiBDb25jYXZlIFBvbHln
b24gU2NhbiBDb252ZXJzaW9uCisgKiBieSBQYXVsIEhlY2tiZXJ0CisgKiBmcm9tICJHcmFwaGlj
cyBHZW1zIiwgQWNhZGVtaWMgUHJlc3MsIDE5OTAKKyAqLworUG5nbGV0LnByb3RvdHlwZS5jb25j
YXZlTlhZID0gZnVuY3Rpb24oZmlsbENvbG9yLCBuLCBwdHgsIHB0eSkgeworICBmdW5jdGlvbiBF
ZGdlKGV4LCBlZHgsIGVpKSB7CS8qIGEgcG9seWdvbiBlZGdlICovCisJdGhpcy54ID0gZXg7CS8q
IHggY29vcmRpbmF0ZSBvZiBlZGdlJ3MgaW50ZXJzZWN0aW9uIHdpdGggY3VycmVudCBzY2FubGlu
ZSAqLworCXRoaXMuZHggPSBlZHg7CS8qIGNoYW5nZSBpbiB4IHdpdGggcmVzcGVjdCB0byB5ICov
CisJdGhpcy5pID0gZWk7CS8qIGVkZ2UgbnVtYmVyOiBlZGdlIGkgZ29lcyBmcm9tIHB0W2ldIHRv
IHB0W2krMV0gKi8KKyAgfTsKKyAgZnVuY3Rpb24gY2RlbGV0ZShkaSkgewkvKiByZW1vdmUgZWRn
ZSBpIGZyb20gYWN0aXZlIGxpc3QgKi8KKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFjdGl2ZS5s
ZW5ndGg7IGogKz0gMSkKKyAgICAgIGlmIChhY3RpdmVbal0uaSA9PSBkaSkKKyAgICAgICAgYWN0
aXZlLnNwbGljZShqLCAxKTsKKyAgfTsKKyAgZnVuY3Rpb24gY2luc2VydChpaSwgaXkpIHsJLyog
YXBwZW5kIGVkZ2UgaSB0byBlbmQgb2YgYWN0aXZlIGxpc3QgKi8KKyAgICB2YXIgaWogPSBpaTxu
LTEgPyBpaSsxIDogMDsKKyAgICB2YXIgcHgsIHB5LCBxeCwgcXk7CisgICAgaWYgKHB0eShpaSkg
PCBwdHkoaWopKSB7CisgICAgICBweCA9IHB0eChpaSk7IHB5ID0gcHR5KGlpKTsKKyAgICAgIHF4
ID0gcHR4KGlqKTsgcXkgPSBwdHkoaWopOworICAgIH0gZWxzZSB7CisgICAgICBweCA9IHB0eChp
aik7IHB5ID0gcHR5KGlqKTsKKyAgICAgIHF4ID0gcHR4KGlpKTsgcXkgPSBwdHkoaWkpOworICAg
IH0KKyAgICAvKiBpbml0aWFsaXplIHggcG9zaXRpb24gYXQgaW50ZXJzZWN0aW9uIG9mIGVkZ2Ug
d2l0aCBzY2FubGluZSB5ICovCisgICAgdmFyIGR4ID0gKHF4LXB4KS8ocXktcHkpOworICAgIGFj
dGl2ZS5wdXNoKG5ldyBFZGdlKGR4KihpeSsuNS1weSkrcHgsIGR4LCBpaSkpOworICB9OworCisg
IHZhciBpbmQgPSBuZXcgQXJyYXkobik7CQkvKiBsaXN0IG9mIHZlcnRleCBpbmRpY2VzLCBzb3J0
ZWQgYnkgcHRbaW5kW2pdXS55ICovCisgIHZhciBhY3RpdmUgPSBuZXcgQXJyYXkoMCk7CQkvKiBz
dGFydCB3aXRoIGFuIGVtcHR5IGFjdGl2ZSBsaXN0ICovCisKKyAgLyogY3JlYXRlIHktc29ydGVk
IGFycmF5IG9mIGluZGljZXMgaW5kW2tdIGludG8gdmVydGV4IGxpc3QgKi8KKyAgZm9yICh2YXIg
ayA9IDA7IGsgPCBuOyBrICs9IDEpIGluZFtrXSA9IGs7CisgIGluZC5zb3J0KGZ1bmN0aW9uKGkx
LCBpMikgeyByZXR1cm4gcHR5KGkxKSA8PSBwdHkoaTIpID8gLTEgOiAxOyB9KTsKKyAgayA9IDA7
ICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kW2tdIGlzIG5leHQgdmVydGV4IHRvIHByb2Nl
c3MgKi8KKyAgdmFyIHkwID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKHB0eShpbmRbMF0pKy41KSk7
CQkJLyogeW1pbiBvZiBwb2x5Z29uICovCisgIHZhciB5MSA9IE1hdGgubWluKHRoaXMuaGVpZ2h0
LCBNYXRoLmZsb29yKHB0eShpbmRbbi0xXSktLjUpKTsJLyogeW1heCBvZiBwb2x5Z29uICovCisK
KyAgZm9yICh2YXIgeSA9IHkwOyB5IDw9IHkxOyB5ICs9IDEpIHsJCS8qIHN0ZXAgdGhyb3VnaCBz
Y2FubGluZXMgKi8KKwkvKiBzY2FubGluZSB5IGlzIGF0IHkrLjUgaW4gY29udGludW91cyBjb29y
ZGluYXRlcyAqLworCisJLyogY2hlY2sgdmVydGljZXMgYmV0d2VlbiBwcmV2aW91cyBzY2FubGlu
ZSBhbmQgY3VycmVudCBvbmUsIGlmIGFueSAqLworCWZvciAoOyBrPG4gJiYgcHR5KGluZFtrXSkg
PD0geSsuNTsgayArPSAxKSB7CisgICAgICAvKiB0byBzaW1wbGlmeSwgaWYgcHQueT15Ky41LCBw
cmV0ZW5kIGl0J3MgYWJvdmUgKi8KKyAgICAgIC8qIGludmFyaWFudDogeS0uNSA8IHB0W2ldLnkg
PD0geSsuNSAqLworICAgICAgdmFyIGkgPSBpbmRba107CQorCisgICAgICAvKgorICAgICAgICog
aW5zZXJ0IG9yIGRlbGV0ZSBlZGdlcyBiZWZvcmUgYW5kIGFmdGVyIHZlcnRleCBpIChpLTEgdG8g
aSwKKyAgICAgICAqIGFuZCBpIHRvIGkrMSkgZnJvbSBhY3RpdmUgbGlzdCBpZiB0aGV5IGNyb3Nz
IHNjYW5saW5lIHkKKyAgICAgICAqLworICAgICAgdmFyIGogPSAoaS0xK24pJW47CQkvKiB2ZXJ0
ZXggcHJldmlvdXMgdG8gaSAqLworICAgICAgaWYgKHB0eShqKSA8PSB5LS41KQl7CS8qIG9sZCBl
ZGdlLCByZW1vdmUgZnJvbSBhY3RpdmUgbGlzdCAqLworCQljZGVsZXRlKGopOworICAgICAgfSBl
bHNlIGlmIChwdHkoaikgPiB5Ky41KSB7CS8qIG5ldyBlZGdlLCBhZGQgdG8gYWN0aXZlIGxpc3Qg
Ki8KKwkJY2luc2VydChqLCB5KTsKKyAgICAgIH0KKyAgICAgIGlmIChpICE9IGluZFtrXSkgewor
CQlhbGVydCgiWW91ciBicm93c2VyJ3MgaW1wbGVtZW50YXRpb24gb2YgSmF2YVNjcmlwdCBpcyBz
ZXJpb3VzbHkgYnJva2VuLFxuIisKKwkJICAgICAgImFzIGluIHZhcmlhYmxlcyBhcmUgY2hhbmdp
bmcgdmFsdWUgb2YgdGhlaXIgb3duIHZvbGl0aW9uLlxuIisKKwkJICAgICAgIllvdSBzaG91bGQg
dXBncmFkZSB0byBhIG5ld2VyIHZlcnNpb24gYnJvd3Nlci4iKTsKKwkJcmV0dXJuOworICAgICAg
fQorICAgICAgaiA9IChpKzEpJW47CQkvKiB2ZXJ0ZXggbmV4dCBhZnRlciBpICovCisgICAgICBp
ZiAocHR5KGopIDw9IHktLjUpCXsJLyogb2xkIGVkZ2UsIHJlbW92ZSBmcm9tIGFjdGl2ZSBsaXN0
ICovCisJCWNkZWxldGUoaSk7CisgICAgICB9IGVsc2UgaWYgKHB0eShqKSA+IHkrLjUpIHsJLyog
bmV3IGVkZ2UsIGFkZCB0byBhY3RpdmUgbGlzdCAqLworCQljaW5zZXJ0KGksIHkpOworICAgICAg
fQorCX0KKworCS8qIHNvcnQgYWN0aXZlIGVkZ2UgbGlzdCBieSBhY3RpdmVbal0ueCAqLworCWFj
dGl2ZS5zb3J0KGZ1bmN0aW9uKHUsdikgeyByZXR1cm4gdS54IDw9IHYueCA/IC0xIDogMTsgfSk7
CisKKwkvKiBkcmF3IGhvcml6b250YWwgc2VnbWVudHMgZm9yIHNjYW5saW5lIHkgKi8KKwlmb3Ig
KGogPSAwOyBqIDwgYWN0aXZlLmxlbmd0aDsgaiArPSAyKSB7CS8qIGRyYXcgaG9yaXpvbnRhbCBz
ZWdtZW50cyAqLworICAgICAgLyogc3BhbiAndHdlZW4gaiAmIGorMSBpcyBpbnNpZGUsIHNwYW4g
dHdlZW4gaisxICYgaisyIGlzIG91dHNpZGUgKi8KKyAgICAgIHZhciB4bCA9IE1hdGguY2VpbChh
Y3RpdmVbal0ueCsuNSk7CQkvKiBsZWZ0IGVuZCBvZiBzcGFuICovCisgICAgICBpZiAoeGw8MCkg
eGwgPSAwOworICAgICAgdmFyIHhyID0gTWF0aC5mbG9vcihhY3RpdmVbaisxXS54LS41KTsJLyog
cmlnaHQgZW5kIG9mIHNwYW4gKi8KKyAgICAgIGlmICh4cj50aGlzLndpZHRoLTEpIHhyID0gdGhp
cy53aWR0aC0xOworICAgICAgaWYgKHhsPD14cikKKwkJdGhpcy5ob3Jpem9udGFsTGluZShmaWxs
Q29sb3IsIHhsLCB4ciwgeSk7CS8qIGRyYXcgcGl4ZWxzIGluIHNwYW4gKi8KKyAgICAgIGFjdGl2
ZVtqXS54ICs9IGFjdGl2ZVtqXS5keDsJLyogaW5jcmVtZW50IGVkZ2UgY29vcmRzICovCisgICAg
ICBhY3RpdmVbaisxXS54ICs9IGFjdGl2ZVtqKzFdLmR4OworCX0KKyAgfQorfQorCisvLyBkcmF3
IGEgcmVjdGFuZ2xlCitQbmdsZXQucHJvdG90eXBlLnJlY3RhbmdsZSA9IGZ1bmN0aW9uKG91dGxp
bmVDb2xvciwgZmlsbENvbG9yLCB4MCx5MCx4MSx5MSkgeworICBpZiAodGhpcy5pc0NvbG9yKGZp
bGxDb2xvcikpCisJZm9yICh2YXIgeSA9IHkwOyB5IDwgeTE7IHkgKz0gMSkKKyAgICAgIHRoaXMu
aG9yaXpvbnRhbExpbmUoZmlsbENvbG9yLCB4MCsxLCB4MS0yLCB5KTsKKyAgaWYgKHRoaXMuaXND
b2xvcihvdXRsaW5lQ29sb3IpKSB7CisJdGhpcy5ob3Jpem9udGFsTGluZShvdXRsaW5lQ29sb3Is
IHgwLCB4MS0xLCB5MCk7CisJdGhpcy5ob3Jpem9udGFsTGluZShvdXRsaW5lQ29sb3IsIHgwLCB4
MS0xLCB5MS0xKTsKKwl0aGlzLnZlcnRpY2FsTGluZShvdXRsaW5lQ29sb3IsIHgwLCB5MCwgeTEt
MSk7CisJdGhpcy52ZXJ0aWNhbExpbmUob3V0bGluZUNvbG9yLCB4MS0xLCB5MCwgeTEtMSk7Cisg
IH0KK30KKwkKKy8vIGRyYXcgYW4gYXJjCitQbmdsZXQucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9u
KG91dGxpbmVDb2xvciwgY3gsY3ksdyxoLCBzLGUpIHsKKyAgdmFyIHAgPSB0aGlzLm1pZHBvaW50
RWxsaXBzZShjeCxjeSwgdyxoLCBzLGUpOworICBmdW5jdGlvbiB4KGkpIHsgcmV0dXJuIHBbaSoy
XTsgfTsKKyAgZnVuY3Rpb24geShpKSB7IHJldHVybiBwW2kqMisxXTsgfTsKKyAgdGhpcy5saW5l
TlhZKG91dGxpbmVDb2xvciwgcC5sZW5ndGgvMiwgeCwgeSk7Cit9CisKKy8vIGRyYXcgYW4gb3Zh
bAorUG5nbGV0LnByb3RvdHlwZS5vdmFsID0gZnVuY3Rpb24ob3V0bGluZUNvbG9yLCBmaWxsQ29s
b3IsIGN4LGN5LHcsaCkgeworICB2YXIgcCA9IHRoaXMubWlkcG9pbnRFbGxpcHNlKGN4LGN5LCB3
LGgsIDAsMzU5KTsKKyAgZnVuY3Rpb24geChpKSB7IHJldHVybiBwW2kqMl07IH07CisgIGZ1bmN0
aW9uIHkoaSkgeyByZXR1cm4gcFtpKjIrMV07IH07CisgIHRoaXMucG9seWdvbk5YWShvdXRsaW5l
Q29sb3IsIGZpbGxDb2xvciwgcC5sZW5ndGgvMiwgeCwgeSk7Cit9CisKKy8vIGRyYXcgYW4gYXJj
IHdpdGggY2hvcmQKK1BuZ2xldC5wcm90b3R5cGUuY2hvcmQgPSBmdW5jdGlvbihvdXRsaW5lQ29s
b3IsIGZpbGxDb2xvciwgY3gsY3ksdyxoLCBzLGUpIHsKKyAgdmFyIHAgPSB0aGlzLm1pZHBvaW50
RWxsaXBzZShjeCxjeSwgdyxoLCBzLGUpOworICBmdW5jdGlvbiB4KGkpIHsgcmV0dXJuIHBbaSoy
XTsgfTsKKyAgZnVuY3Rpb24geShpKSB7IHJldHVybiBwW2kqMisxXTsgfTsKKyAgdGhpcy5wb2x5
Z29uTlhZKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBwLmxlbmd0aC8yLCB4LCB5KTsKK30KKwor
Ly8gZHJhdyBhbiBhcmMgd2l0aCBwaWVzbGljZQorUG5nbGV0LnByb3RvdHlwZS5waWVzbGljZSA9
IGZ1bmN0aW9uKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBjeCxjeSx3LGgsIHMsZSkgeworICB2
YXIgcCA9IHRoaXMubWlkcG9pbnRFbGxpcHNlKGN4LGN5LCB3LGgsIHMsZSk7CisgIHBbcC5sZW5n
dGhdID0gY3g7CisgIHBbcC5sZW5ndGhdID0gY3k7CisgIGZ1bmN0aW9uIHgoaSkgeyByZXR1cm4g
cFtpKjJdOyB9OworICBmdW5jdGlvbiB5KGkpIHsgcmV0dXJuIHBbaSoyKzFdOyB9OworICB0aGlz
LnBvbHlnb25OWFkob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIHAubGVuZ3RoLzIsIHgsIHkpOwor
fQorCisvLyBvdmFsIGFyY3MKKy8vIGdlbmVyYXRlIHBvaW50cyBvZiBvdmFsIGNpcmN1bWZlcmVu
Y2UKKy8vIG1pZHBvaW50IGVsbGlwc2UsIEZvbGV5ICYgdmFuIERhbSwgMm5kIEVkaXRpb24sIHAu
IDkwLCAxOTkwCitQbmdsZXQucHJvdG90eXBlLm1pZHBvaW50RWxsaXBzZSA9IGZ1bmN0aW9uKGN4
LGN5LCB3LGgsIHMsZSkgeworICB2YXIgYSA9IE1hdGguZmxvb3Iody8yKSwgYiA9IE1hdGguZmxv
b3IoaC8yKTsKKyAgdmFyIGEyID0gYSphLCBiMiA9IGIqYiwgeCA9IDAsIHkgPSBiOworICB2YXIg
ZDEgPSBiMiAtIGEyKmIgKyBhMi80OworICBjeCA9IE1hdGguZmxvb3IoY3gpOworICBjeSA9IE1h
dGguZmxvb3IoY3kpOworICB2YXIgcCA9IG5ldyBBcnJheSgpOworCisgIC8vIHF1YWRyYW50IEks
IGFudGljbG9ja3dpc2UKKyAgcC5wdXNoKHgsLXkpOworICB3aGlsZSAoYTIqKHktMS8yKSA+IGIy
Kih4KzEpKSB7CisJaWYgKGQxIDwgMCkgeworICAgICAgZDEgKz0gYjIqKDIqeCszKTsKKwl9IGVs
c2UgeworICAgICAgZDEgKz0gYjIqKDIqeCszKSArIGEyKigtMip5ICsgMik7CisgICAgICB5IC09
IDE7CisJfQorCXggKz0gMTsKKwlwLnVuc2hpZnQoeCwteSk7CisgIH0KKyAgdmFyIGQyID0gYjIq
KHgrMS8yKSooeCsxLzIpICsgYTIqKHktMSkqKHktMSkgLSBhMipiMjsKKyAgd2hpbGUgKHkgPiAw
KSB7CisJaWYgKGQyIDwgMCkgeworICAgICAgZDIgKz0gYjIqKDIqeCsyKSArIGEyKigtMip5KzMp
OworICAgICAgeCArPSAxOworCX0gZWxzZSB7CisgICAgICBkMiArPSBhMiooLTIqeSszKTsKKwl9
CisJeSAtPSAxOworCXAudW5zaGlmdCh4LC15KTsKKyAgfQorICAvLyBxdWFkcmFudCBJSSwgYW50
aWNsb2Nrd2lzZQorICB2YXIgbjQgPSBwLmxlbmd0aDsKKyAgZm9yICh2YXIgaSA9IG40LTQ7IGkg
Pj0gMDsgaSAtPSAyKQorICAgIHAucHVzaCgtcFtpXSwgcFtpKzFdKTsKKyAgLy8gcXVhZHJhbnRz
IElJSSBhbmQgSVYsIGFudGljbG9ja3dpc2UKKyAgdmFyIG4yID0gcC5sZW5ndGg7CisgIGZvciAo
aSA9IG4yLTQ7IGkgPiAwOyBpIC09IDIpCisgICAgcC5wdXNoKHBbaV0sIC1wW2krMV0pOworCisg
IC8vIGNvbXB1dGUgc3RhcnQgYW5kIGVuZCBpbmRleGVzIGZyb20gc3RhcnQgYW5kIGV4dGVudAor
ICBlICU9IDM2MDsKKyAgaWYgKGUgPCAwKSB7CisJcyArPSBlOworCWUgPSAtZTsKKyAgfQorICBz
ICU9IDM2MDsKKyAgaWYgKHMgPCAwKQorCXMgKz0gMzYwOworICB2YXIgaXMgPSBNYXRoLmZsb29y
KHMvMzU5ICogcC5sZW5ndGgvMik7CisgIHZhciBpZSA9IE1hdGguZmxvb3IoZS8zNTkgKiBwLmxl
bmd0aC8yKSsxOworICBwID0gcC5zbGljZShpcyoyKS5jb25jYXQocC5zbGljZSgwLCBpcyoyKSku
c2xpY2UoMCwgaWUqMik7CisKKyAgLy8gZGlzcGxhY2UgdG8gY2VudGVyCisgIGZvciAoaSA9IDA7
IGkgPCBwLmxlbmd0aDsgaSArPSAyKSB7CisJcFtpXSArPSBjeDsKKwlwW2krMV0gKz0gY3k7Cisg
IH0KKyAgcmV0dXJuIHA7Cit9CisKKy8vIGZpbGwgYSByZWdpb24gCisvLyBmcm9tIGdkMS4zIHdp
dGggbW9kaWZpY2F0aW9ucworUG5nbGV0LnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24ob3V0bGlu
ZUNvbG9yLGZpbGxDb2xvcix4LHkpIHsKKyAgaWYgKG91dGxpbmVDb2xvcikgewkJCS8vIGZpbGwg
dG8gb3V0bGluZSBjb2xvcgorCS8qIFNlZWsgbGVmdCAqLworCXZhciBsZWZ0TGltaXQgPSAtMTsK
Kwlmb3IgKHZhciBpID0geDsgaSA+PSAwICYmIHRoaXMuZ2V0UG9pbnQoaSwgeSkgIT0gb3V0bGlu
ZUNvbG9yOyBpIC09IDEpCisgICAgICBsZWZ0TGltaXQgPSBpOworCQorCWlmIChsZWZ0TGltaXQg
PT0gLTEpCisgICAgICByZXR1cm47CisKKwkvKiBTZWVrIHJpZ2h0ICovCisJdmFyIHJpZ2h0TGlt
aXQgPSB4OworCWZvciAoaSA9ICh4KzEpOyBpIDwgdGhpcy53aWR0aCAmJiB0aGlzLmdldFBvaW50
KGksIHkpICE9IG91dGxpbmVDb2xvcjsgaSArPSAxKQorICAgICAgcmlnaHRMaW1pdCA9IGk7CisK
KwkvKiBmaWxsIGV4dGVudCBmb3VuZCAqLworCXRoaXMuaG9yaXpvbnRhbExpbmUoZmlsbENvbG9y
LCBsZWZ0TGltaXQsIHJpZ2h0TGltaXQsIHkpOworCisJLyogU2VlayBhYm92ZSBhbmQgYmVsb3cg
Ki8KKwlmb3IgKHZhciBkeSA9IC0xOyBkeSA8PSAxOyBkeSArPSAyKSB7CisgICAgICBpZiAodGhp
cy5pbkJvdW5kcyh4LHkrZHkpKSB7CisJCXZhciBsYXN0Qm9yZGVyID0gMTsKKwkJZm9yIChpID0g
bGVmdExpbWl0OyBpIDw9IHJpZ2h0TGltaXQ7IGkrKykgeworICAgICAgICAgIHZhciBjID0gdGhp
cy5nZXRQb2ludChpLCB5K2R5KTsKKyAgICAgICAgICBpZiAobGFzdEJvcmRlcikgeworCQkJaWYg
KChjICE9IG91dGxpbmVDb2xvcikgJiYgKGMgIT0gZmlsbENvbG9yKSkgewkKKyAgICAgICAgICAg
ICAgdGhpcy5maWxsKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBpLCB5K2R5KTsKKyAgICAgICAg
ICAgICAgbGFzdEJvcmRlciA9IDA7CisJCQl9CisgICAgICAgICAgfSBlbHNlIGlmICgoYyA9PSBv
dXRsaW5lQ29sb3IpIHx8IChjID09IGZpbGxDb2xvcikpIHsKKwkJCWxhc3RCb3JkZXIgPSAxOwor
ICAgICAgICAgIH0KKwkJfQorICAgICAgfQorCX0KKyAgICAKKyAgfSBlbHNlIHsJCQkvLyBmbG9v
ZCBmaWxsIGNvbG9yIGF0IHgsIHkgCisJLyogVGVzdCBmb3IgY29tcGxldGlvbiAqLworCXZhciBv
bGRDb2xvciA9IHRoaXMuZ2V0UG9pbnQoeCwgeSk7CisJaWYgKG9sZENvbG9yID09IGZpbGxDb2xv
cikKKyAgICAgIHJldHVybjsKKworCS8qIFNlZWsgbGVmdCAqLworCWxlZnRMaW1pdCA9ICgtMSk7
CisJZm9yIChpID0geDsgaSA+PSAwICYmIHRoaXMuZ2V0UG9pbnQoaSwgeSkgPT0gb2xkQ29sb3I7
IGktLSkKKyAgICAgIGxlZnRMaW1pdCA9IGk7CisKKwlpZiAobGVmdExpbWl0ID09IC0xKQorICAg
ICAgcmV0dXJuOworCisJLyogU2VlayByaWdodCAqLworCXJpZ2h0TGltaXQgPSB4OworCWZvciAo
aSA9ICh4KzEpOyBpIDwgdGhpcy53aWR0aCAmJiB0aGlzLmdldFBvaW50KGksIHkpID09IG9sZENv
bG9yOyBpKyspCisgICAgICByaWdodExpbWl0ID0gaTsKKworCS8qIEZpbGwgZXh0ZW50IGZvdW5k
ICovCisJdGhpcy5ob3Jpem9udGFsTGluZShmaWxsQ29sb3IsIGxlZnRMaW1pdCwgcmlnaHRMaW1p
dCwgeSk7CisKKwkvKiBTZWVrIGFib3ZlIGFuZCBiZWxvdyAqLworCWZvciAoZHkgPSAtMTsgZHkg
PD0gMTsgZHkgKz0gMikgeworICAgICAgaWYgKHRoaXMuaW5Cb3VuZHMoeCx5K2R5KSkgeworCQls
YXN0Qm9yZGVyID0gMTsKKwkJZm9yIChpID0gbGVmdExpbWl0OyBpIDw9IHJpZ2h0TGltaXQ7IGkr
KykgeworICAgICAgICAgIGMgPSB0aGlzLmdldFBvaW50KGksIHkrZHkpOworICAgICAgICAgIGlm
IChsYXN0Qm9yZGVyKSB7CisJCQlpZiAoYyA9PSBvbGRDb2xvcikgewkKKyAgICAgICAgICAgICAg
dGhpcy5maWxsKG51bGwsIGZpbGxDb2xvciwgaSwgeStkeSk7CisgICAgICAgICAgICAgIGxhc3RC
b3JkZXIgPSAwOworCQkJfQorICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPSBvbGRDb2xvcikgewor
CQkJbGFzdEJvcmRlciA9IDE7CisgICAgICAgICAgfQorCQl9CisgICAgICB9CisJfQorICB9Cit9
CisKKy8vIHNtb290aGVkIHBvaW50cworUG5nbGV0LnByb3RvdHlwZS5zbW9vdGhQb2ludCA9IGZ1
bmN0aW9uKHNtb290aFN0ZXBzLCBwb2ludENvbG9yLCB4MCwgeTApIHsKKyAgdmFyIGEgPSBhcmd1
bWVudHMsIHNlbGYgPSB0aGlzLCBuID0gKGEubGVuZ3RoLTIpLzI7CisgIHRoaXMuc21vb3RoKHNt
b290aFN0ZXBzLAorICAgICAgICAgICAgICBmdW5jdGlvbihuLCB4LCB5KSB7IHNlbGYucG9pbnRO
WFkocG9pbnRDb2xvciwgbiwgeCwgeSk7IH0sCisgICAgICAgICAgICAgIG4sCisgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGFbMippKzJdOyB9LAorICAgICAgICAgICAgICBmdW5j
dGlvbihpKSB7IHJldHVybiBhWzIqaSszXTsgfSk7Cit9CisKKy8vIHNtb290aGVkIHBvbHlsaW5l
CitQbmdsZXQucHJvdG90eXBlLnNtb290aExpbmUgPSBmdW5jdGlvbihzbW9vdGhTdGVwcywgbGlu
ZUNvbG9yLCB4MCwgeTApIHsKKyAgdmFyIGEgPSBhcmd1bWVudHMsIHNlbGYgPSB0aGlzLCBuID0g
KGEubGVuZ3RoLTIpLzI7CisgIHRoaXMuc21vb3RoKHNtb290aFN0ZXBzLAorICAgICAgICAgICAg
ICBmdW5jdGlvbihuLCB4LCB5KSB7IHNlbGYubGluZU5YWShsaW5lQ29sb3IsIG4sIHgsIHkpOyB9
LAorICAgICAgICAgICAgICBuLAorICAgICAgICAgICAgICBmdW5jdGlvbihpKSB7IHJldHVybiBh
WzIqaSsyXTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oaSkgeyByZXR1cm4gYVsyKmkrM107
IH0pOworfQorCisvLyBzbW9vdGhlZCBwb2x5Z29uCitQbmdsZXQucHJvdG90eXBlLnNtb290aFBv
bHlnb24gPSBmdW5jdGlvbihzbW9vdGhTdGVwcywgb3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIHgw
LCB5MCkgeworICB2YXIgYSA9IGFyZ3VtZW50cywgc2VsZiA9IHRoaXMsIG4gPSAoYS5sZW5ndGgt
MykvMiArIDE7CisgIHRoaXMuc21vb3RoKHNtb290aFN0ZXBzLAorICAgICAgICAgICAgICBmdW5j
dGlvbihuLCB4LCB5KSB7IHNlbGYucG9seWdvbk5YWShvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwg
biwgeCwgeSk7IH0sCisgICAgICAgICAgICAgIG4sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGkp
IHsgcmV0dXJuIGFbMiooaSUobi0xKSkrM107IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGkp
IHsgcmV0dXJuIGFbMiooaSUobi0xKSkrNF07IH0pOworfQorICAgIAorLy8gZ2VuZXJhdGUgc21v
b3RoU3RlcHMgcG9pbnRzIGZvciB0aGUgbGluZSBzZWdtZW50IGNvbm5lY3RpbmcKKy8vIGVhY2gg
Y29uc2VjdXRpdmUgcGFpciBvZiBwb2ludHMgaW4geChpKSwgeShpKS4KKy8vIGFkYXB0ZWQgZnJv
bSB0aGUgc291cmNlIGZvciB0azguMWIzLCBodHRwOi8vd3d3LnNjcmlwdGljcy5jb20KK1BuZ2xl
dC5wcm90b3R5cGUuc21vb3RoID0gZnVuY3Rpb24oc21vb3RoU3RlcHMsIGZOWFksIG4sIHgsIHkp
IHsKKyAgdmFyIGNvbnRyb2wgPSBuZXcgQXJyYXkoOCk7CisgIHZhciBvdXRwdXRQb2ludHMgPSAw
OworICB2YXIgZGJsUG9pbnRzID0gbmV3IEFycmF5KCk7CisKKyAgLy8gY29tcHV0ZSBudW1TdGVw
cyBvZiBzbW9vdGhlZCBwb2ludHMKKyAgLy8gYWNjb3JkaW5nIHRvIHRoZSBiYXNpcyBpbiBjb250
cm9sW10KKyAgLy8gcGxhY2luZyBwb2ludHMgaW50byBjb29yZFB0cltjb29yZE9mZl0KKyAgZnVu
Y3Rpb24gc21vb3RoUG9pbnRzKGNvbnRyb2wsIG51bVN0ZXBzLCBjb29yZFB0ciwgY29vcmRPZmYp
IHsKKwlmb3IgKHZhciBpID0gMTsgaSA8PSBudW1TdGVwczsgaSsrLCBjb29yZE9mZiArPSAyKSB7
CisgICAgICB2YXIgdCA9IGkvbnVtU3RlcHMsIHQyID0gdCp0LCB0MyA9IHQyKnQsCisJCXUgPSAx
LjAgLSB0LCB1MiA9IHUqdSwgdTMgPSB1Mip1OworICAgICAgY29vcmRQdHJbY29vcmRPZmYrMF0g
PSBjb250cm9sWzBdKnUzICsgMy4wICogKGNvbnRyb2xbMl0qdCp1MiArIGNvbnRyb2xbNF0qdDIq
dSkgKyBjb250cm9sWzZdKnQzOworICAgICAgY29vcmRQdHJbY29vcmRPZmYrMV0gPSBjb250cm9s
WzFdKnUzICsgMy4wICogKGNvbnRyb2xbM10qdCp1MiArIGNvbnRyb2xbNV0qdDIqdSkgKyBjb250
cm9sWzddKnQzOworCX0KKyAgfTsKKworICAvKgorICAgKiBJZiB0aGUgY3VydmUgaXMgYSBjbG9z
ZWQgb25lIHRoZW4gZ2VuZXJhdGUgYSBzcGVjaWFsIHNwbGluZQorICAgKiB0aGF0IHNwYW5zIHRo
ZSBsYXN0IHBvaW50cyBhbmQgdGhlIGZpcnN0IG9uZXMuICBPdGhlcndpc2UKKyAgICoganVzdCBw
dXQgdGhlIGZpcnN0IHBvaW50IGludG8gdGhlIG91dHB1dC4KKyAgICovCisKKyAgdmFyIGNsb3Nl
ZCA9ICh4KDApID09IHgobi0xKSkgJiYgKHkoMCkgPT0geShuLTEpKTsKKyAgaWYgKGNsb3NlZCkg
eworCWNvbnRyb2xbMF0gPSAwLjUqeChuLTIpICsgMC41KngoMCk7CisJY29udHJvbFsxXSA9IDAu
NSp5KG4tMikgKyAwLjUqeSgwKTsKKwljb250cm9sWzJdID0gMC4xNjcqeChuLTIpICsgMC44MzMq
eCgwKTsKKwljb250cm9sWzNdID0gMC4xNjcqeShuLTIpICsgMC44MzMqeSgwKTsKKwljb250cm9s
WzRdID0gMC44MzMqeCgwKSArIDAuMTY3KngoMSk7CisJY29udHJvbFs1XSA9IDAuODMzKnkoMCkg
KyAwLjE2Nyp5KDEpOworCWNvbnRyb2xbNl0gPSAwLjUqeCgwKSArIDAuNSp4KDEpOworCWNvbnRy
b2xbN10gPSAwLjUqeSgwKSArIDAuNSp5KDEpOworCWRibFBvaW50c1syKm91dHB1dFBvaW50cysw
XSA9IGNvbnRyb2xbMF07CisJZGJsUG9pbnRzWzIqb3V0cHV0UG9pbnRzKzFdID0gY29udHJvbFsx
XTsKKwlvdXRwdXRQb2ludHMgKz0gMTsKKwlzbW9vdGhQb2ludHMoY29udHJvbCwgc21vb3RoU3Rl
cHMsIGRibFBvaW50cywgMipvdXRwdXRQb2ludHMpOworCW91dHB1dFBvaW50cyArPSBzbW9vdGhT
dGVwczsKKyAgfSBlbHNlIHsKKwlkYmxQb2ludHNbMipvdXRwdXRQb2ludHMrMF0gPSB4KDApOwor
CWRibFBvaW50c1syKm91dHB1dFBvaW50cysxXSA9IHkoMCk7CisJb3V0cHV0UG9pbnRzICs9IDE7
CisgIH0KKworICBmb3IgKHZhciBpID0gMjsgaSA8IG47IGkgKz0gMSkgeworCXZhciBqID0gaSAt
IDI7CisJLyoKKwkgKiBTZXQgdXAgdGhlIGZpcnN0IHR3byBjb250cm9sIHBvaW50cy4gIFRoaXMg
aXMgZG9uZQorCSAqIGRpZmZlcmVudGx5IGZvciB0aGUgZmlyc3Qgc3BsaW5lIG9mIGFuIG9wZW4g
Y3VydmUKKwkgKiB0aGFuIGZvciBvdGhlciBjYXNlcy4KKwkgKi8KKwlpZiAoKGkgPT0gMikgJiYg
IWNsb3NlZCkgeworICAgICAgY29udHJvbFswXSA9IHgoaik7CisgICAgICBjb250cm9sWzFdID0g
eShqKTsKKyAgICAgIGNvbnRyb2xbMl0gPSAwLjMzMyp4KGopICsgMC42NjcqeChqKzEpOworICAg
ICAgY29udHJvbFszXSA9IDAuMzMzKnkoaikgKyAwLjY2Nyp5KGorMSk7CisJfSBlbHNlIHsKKyAg
ICAgIGNvbnRyb2xbMF0gPSAwLjUqeChqKSArIDAuNSp4KGorMSk7CisgICAgICBjb250cm9sWzFd
ID0gMC41KnkoaikgKyAwLjUqeShqKzEpOworICAgICAgY29udHJvbFsyXSA9IDAuMTY3Kngoaikg
KyAwLjgzMyp4KGorMSk7CisgICAgICBjb250cm9sWzNdID0gMC4xNjcqeShqKSArIDAuODMzKnko
aisxKTsKKwl9CisKKwkvKgorCSAqIFNldCB1cCB0aGUgbGFzdCB0d28gY29udHJvbCBwb2ludHMu
ICBUaGlzIGlzIGRvbmUKKwkgKiBkaWZmZXJlbnRseSBmb3IgdGhlIGxhc3Qgc3BsaW5lIG9mIGFu
IG9wZW4gY3VydmUKKwkgKiB0aGFuIGZvciBvdGhlciBjYXNlcy4KKwkgKi8KKworCWlmICgoaSA9
PSAobi0xKSkgJiYgIWNsb3NlZCkgeworICAgICAgY29udHJvbFs0XSA9IC42NjcqeChqKzEpICsg
LjMzMyp4KGorMik7CisgICAgICBjb250cm9sWzVdID0gLjY2Nyp5KGorMSkgKyAuMzMzKnkoaisy
KTsKKyAgICAgIGNvbnRyb2xbNl0gPSB4KGorMik7CisgICAgICBjb250cm9sWzddID0geShqKzIp
OworCX0gZWxzZSB7CisgICAgICBjb250cm9sWzRdID0gLjgzMyp4KGorMSkgKyAuMTY3Kngoaisy
KTsKKyAgICAgIGNvbnRyb2xbNV0gPSAuODMzKnkoaisxKSArIC4xNjcqeShqKzIpOworICAgICAg
Y29udHJvbFs2XSA9IDAuNSp4KGorMSkgKyAwLjUqeChqKzIpOworICAgICAgY29udHJvbFs3XSA9
IDAuNSp5KGorMSkgKyAwLjUqeShqKzIpOworCX0KKworCS8qCisJICogSWYgdGhlIGZpcnN0IHR3
byBwb2ludHMgY29pbmNpZGUsIG9yIGlmIHRoZSBsYXN0CisJICogdHdvIHBvaW50cyBjb2luY2lk
ZSwgdGhlbiBnZW5lcmF0ZSBhIHNpbmdsZQorCSAqIHN0cmFpZ2h0LWxpbmUgc2VnbWVudCBieSBv
dXRwdXR0aW5nIHRoZSBsYXN0IGNvbnRyb2wKKwkgKiBwb2ludC4KKwkgKi8KKworCWlmICgoKHgo
aikgPT0geChqKzEpKSAmJiAoeShqKSA9PSB5KGorMSkpKQorICAgICAgICB8fCAoKHgoaisxKSA9
PSB4KGorMikpICYmICh5KGorMSkgPT0geShqKzIpKSkpIHsKKwkgIGRibFBvaW50c1syKm91dHB1
dFBvaW50cyswXSA9IGNvbnRyb2xbNl07CisJICBkYmxQb2ludHNbMipvdXRwdXRQb2ludHMrMV0g
PSBjb250cm9sWzddOworCSAgb3V0cHV0UG9pbnRzICs9IDE7CisJICBjb250aW51ZTsKKwl9CisK
KwkvKgorCSAqIEdlbmVyYXRlIGEgQmV6aWVyIHNwbGluZSB1c2luZyB0aGUgY29udHJvbCBwb2lu
dHMuCisJICovCisJc21vb3RoUG9pbnRzKGNvbnRyb2wsIHNtb290aFN0ZXBzLCBkYmxQb2ludHMs
IDIqb3V0cHV0UG9pbnRzKTsKKwlvdXRwdXRQb2ludHMgKz0gc21vb3RoU3RlcHM7CisgIH0KKwor
ICAvLyBkcmF3IHRoZSBwb2ludHMKKyAgLy8gYW5vbnltb3VzIGZ1bmN0aW9ucyBkb24ndCB3b3Jr
IGhlcmUKKyAgLy8gdGhleSByZXN1bHQgaW4gInVuZGVmaW5lZCIgcG9pbnQgdmFsdWVzCisgIGZ1
bmN0aW9uIG15eChpKSB7IHJldHVybiBNYXRoLnJvdW5kKGRibFBvaW50c1syKmldKTsgfQorICAg
IGZ1bmN0aW9uIG15eShpKSB7IHJldHVybiBNYXRoLnJvdW5kKGRibFBvaW50c1syKmkrMV0pOyB9
CisgICAgZk5YWShvdXRwdXRQb2ludHMsIG15eCwgbXl5KTsKK30KKworLy8gb3V0cHV0IGEgUE5H
IHN0cmluZworUG5nbGV0LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5jdGlvbigpIHsKKyAgLy8gb3V0
cHV0IHRyYW5zbGF0aW9ucworICBmdW5jdGlvbiBpbml0aWFsaXplKHBuZywgb2Zmcywgc3RyKSB7
CisJZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDEpCisgICAgICBp
ZiAodHlwZW9mIGFyZ3VtZW50c1tpXS5sZW5ndGggIT0gInVuZGVmaW5lZCIpCisgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgYXJndW1lbnRzW2ldLmxlbmd0aDsgaiArPSAxKQorICAgICAgICAg
IHBuZ1tvZmZzKytdID0gYXJndW1lbnRzW2ldLmNoYXJBdChqKTsKKyAgfQorICAgIGZ1bmN0aW9u
IGJ5dGU0KHcpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKHc+PjI0KSYyNTUsICh3Pj4x
NikmMjU1LCAodz4+OCkmMjU1LCB3JjI1NSk7IH0KKworICAgIC8vIGNvbXB1dGUgYWRsZXIzMiBv
ZiBvdXRwdXQgcGl4ZWxzICsgcm93IGZpbHRlciBieXRlcworICAgIHZhciBCQVNFID0gNjU1MjE7
IC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCisgIHZhciBOTUFYID0gNTU1
MjsgIC8qIE5NQVggaXMgdGhlIGxhcmdlc3QgbiBzdWNoIHRoYXQgMjU1bihuKzEpLzIgKyAobisx
KShCQVNFLTEpIDw9IDJeMzItMSAqLworICB2YXIgczEgPSAxOworICB2YXIgczIgPSAwOworICB2
YXIgbiA9IE5NQVg7CisgIGZvciAodmFyIHkgPSAwOyB5IDwgdGhpcy5oZWlnaHQ7IHkgKz0gMSkK
Kwlmb3IgKHZhciB4ID0gLTE7IHggPCB0aGlzLndpZHRoOyB4ICs9IDEpIHsKKyAgICAgIHMxICs9
IHRoaXMucG5nW3RoaXMuaW5kZXgoeCx5KV0uY2hhckNvZGVBdCgwKTsKKyAgICAgIHMyICs9IHMx
OworICAgICAgaWYgKChuIC09IDEpID09IDApIHsKKwkJczEgJT0gQkFTRTsKKwkJczIgJT0gQkFT
RTsKKwkJbiA9IE5NQVg7CisgICAgICB9CisJfQorICBzMSAlPSBCQVNFOworICBzMiAlPSBCQVNF
OworICBpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLmlkYXRfb2Zmcyt0aGlzLmlkYXRfc2l6ZS04
LCBieXRlNCgoczIgPDwgMTYpIHwgczEpKTsKKworICAvLyBjb21wdXRlIGNyYzMyIG9mIHRoZSBQ
TkcgY2h1bmtzCisgIGZ1bmN0aW9uIGNyYzMyKHBuZywgb2Zmcywgc2l6ZSkgeworCXZhciBjcmMg
PSAtMTsJCS8vIGluaXRpYWxpemUgY3JjCisJZm9yICh2YXIgaSA9IDQ7IGkgPCBzaXplLTQ7IGkg
Kz0gMSkKKyAgICAgIGNyYyA9IFBuZ2xldC5jcmMzMl90YWJsZVsoY3JjIF4gcG5nW29mZnMraV0u
Y2hhckNvZGVBdCgwKSkgJiAweGZmXSBeICgoY3JjID4+IDgpICYgMHgwMGZmZmZmZik7CisJaW5p
dGlhbGl6ZShwbmcsIG9mZnMrc2l6ZS00LCBieXRlNChjcmMgXiAtMSkpOworICB9CisKKyAgICBj
cmMzMih0aGlzLnBuZywgdGhpcy5paGRyX29mZnMsIHRoaXMuaWhkcl9zaXplKTsKKyAgY3JjMzIo
dGhpcy5wbmcsIHRoaXMucGx0ZV9vZmZzLCB0aGlzLnBsdGVfc2l6ZSk7CisgIGNyYzMyKHRoaXMu
cG5nLCB0aGlzLnRybnNfb2ZmcywgdGhpcy50cm5zX3NpemUpOworICBjcmMzMih0aGlzLnBuZywg
dGhpcy5pZGF0X29mZnMsIHRoaXMuaWRhdF9zaXplKTsKKyAgY3JjMzIodGhpcy5wbmcsIHRoaXMu
aWVuZF9vZmZzLCB0aGlzLmllbmRfc2l6ZSk7CisKKyAgLy8gY29udmVydCBQTkcgdG8gc3RyaW5n
CisgIHJldHVybiAiXDIxMVBOR1xyXG5cMDMyXG4iK3RoaXMucG5nLmpvaW4oJycpOworfQorCisv
KiBUYWJsZSBvZiBDUkNzIG9mIGFsbCA4LWJpdCBtZXNzYWdlcy4gKi8KK1BuZ2xldC5jcmMzMl90
YWJsZSA9IG5ldyBBcnJheSgyNTYpOworZm9yICh2YXIgbiA9IDA7IG4gPCAyNTY7IG4rKykgewor
ICB2YXIgYyA9IG47CisgIGZvciAodmFyIGsgPSAwOyBrIDwgODsgaysrKSB7CisgICAgaWYgKGMg
JiAxKQorICAgICAgYyA9IC0zMDY2NzQ5MTIgXiAoKGMgPj4gMSkgJiAweDdmZmZmZmZmKTsKKyAg
ICBlbHNlCisgICAgICBjID0gKGMgPj4gMSkgJiAweDdmZmZmZmZmOworICB9CisgIFBuZ2xldC5j
cmMzMl90YWJsZVtuXSA9IGM7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8cD5T
aG91bGQgc2VlIGEgbGlnaHQgZ3JlZW4gcmVjdGFuZ2xlOjwvcD4KKzxkaXYgaWQ9cmVzdWx0Pjwv
ZGl2PgorPHNjcmlwdD4KKwlwbmdkYXRhID0gbmV3IFBuZ2xldCgxLDEsMSk7CisJcG5nZGF0YS5w
b2ludChwbmdkYXRhLmNvbG9yKDAsMjU1LDAsMTI3KSwxLDEpOworCisJcG5nID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiaW1nIik7CisJcG5nLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CisJcG5n
LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKKwkKKwlwbmcuc3JjID0gImRhdGE6aW1hZ2UvcG5nO2Jh
c2U2NCwiICsgYnRvYShwbmdkYXRhLm91dHB1dCgpKTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncmVzdWx0JykuYXBwZW5kQ2hpbGQocG5nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUt
dHlwZQogICArIHRleHQvaHRtbAoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93
aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MTc2NjEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MzUsNyArNTM1LDkgQEAgd2luZG93LlhT
TFRQcm9jZXNzb3IucHJvdG90eXBlLnRyYW5zZm9ybQogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIg
W2Z1bmN0aW9uXQogd2luZG93LmFsZXJ0IFtmdW5jdGlvbl0KIHdpbmRvdy5hcHBsZVNjcmlwdENv
bnRyb2xsZXIgW29iamVjdCBSdW50aW1lT2JqZWN0XQord2luZG93LmF0b2IgW2Z1bmN0aW9uXQog
d2luZG93LmJsdXIgW2Z1bmN0aW9uXQord2luZG93LmJ0b2EgW2Z1bmN0aW9uXQogd2luZG93LmNh
cHR1cmVFdmVudHMgW2Z1bmN0aW9uXQogd2luZG93LmNsZWFySW50ZXJ2YWwgW2Z1bmN0aW9uXQog
d2luZG93LmNsZWFyVGltZW91dCBbZnVuY3Rpb25dCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2NjEpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDA2LTExLTA4
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk2NzMKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHdpbmRvdy5hdG9iKCkg
YW5kIHdpbmRvdy5idG9hKCkKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogQWRkZWQgQmFzZTY0LntoLGNwcH0KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
d2luZG93LmNwcDoKKyAgICAgICAgKEtKUzo6V2luZG93RnVuYzo6Y2FsbEFzRnVuY3Rpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc193aW5kb3cuaDoKKyAgICAgICAgKEtKUzo6V2luZG93
OjopOgorICAgICAgICAqIHBsYXRmb3JtL0Jhc2U2NC5jcHA6IEFkZGVkLgorICAgICAgICAoc3Ry
bmNhc2VjbXApOgorICAgICAgICAoYmFzZTY0RW5jb2RlKToKKyAgICAgICAgKGJhc2U2NERlY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vQmFzZTY0Lmg6IEFkZGVkLgorCiAyMDA2LTExLTA4ICBC
cmFkeSBFaWRzb24gPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
Y2llagpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3RyaW5nRXh0cmFzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3RyaW5nRXh0cmFz
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdHJpbmdF
eHRyYXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvU3RyaW5nRXh0cmFzLmg+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9TdHJpbmdFeHRyYXMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5
bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTc2NjEpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcwMyw2ICsyNzAzLDggQEAKIAkJREIy
M0MyQ0MwQTUwOEQyOTAwMjQ4OUVCIC8qIEluZGVudE91dGRlbnRDb21tYW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQjIzQzJDQTBBNTA4RDI5MDAy
NDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCAqLzsgfTsKIAkJREQ3NjNCQjIwOTkyQzJD
OTAwNzQwQjhFIC8qIGxpYnhtbDIuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBERDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5k
eWxpYiAqLzsgfTsKIAkJREQ3Q0RGMjUwQTIzQ0Y5ODAwMDY5OTI4IC8qIENTU1Vua25vd25SdWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkND
RTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVW5rbm93blJ1bGUuaCAqLzsgfTsKKwkJRTEwM0EyMkUw
QjAyNDA1RDAwODY0QUFDIC8qIEJhc2U2NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTEwM0EyMkMwQjAyNDA1RDAwODY0QUFDIC8qIEJhc2U2NC5oICov
OyB9OworCQlFMTAzQTIyRjBCMDI0MDVEMDA4NjRBQUMgLyogQmFzZTY0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDNBMjJEMEIwMjQwNUQwMDg2
NEFBQyAvKiBCYXNlNjQuY3BwICovOyB9OwogCQlFMTQ4NDJERTBBNjc0OTM0MDA3RTREMzkgLyog
VGV4dENvZGVjSUNVLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTQ4NDJERDBBNjc0OTM0MDA3RTREMzkgLyogVGV4dENvZGVjSUNVLmggKi87IH07CiAJ
CUUxNDg0MkZGMEE2NzRBMzEwMDdFNEQzOSAvKiBUZXh0Q29kZWNJQ1UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0ODQyRkUwQTY3NEEzMTAwN0U0
RDM5IC8qIFRleHRDb2RlY0lDVS5jcHAgKi87IH07CiAJCUUxNDg0MzJGMEE2NzRGQzIwMDdFNEQz
OSAvKiBUZXh0Q29kZWNNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNDg0MzJFMEE2NzRGQzIwMDdFNEQzOSAvKiBUZXh0Q29kZWNNYWMuaCAqLzsg
fTsKQEAgLTU2ODcsNiArNTY4OSw4IEBACiAJCURCMjNDMkM5MEE1MDhEMjkwMDI0ODlFQiAvKiBJ
bmRlbnRPdXRkZW50Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlEQjIzQzJDQTBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudE91dGRlbnRDb21tYW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURENzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAv
KiBsaWJ4bWwyLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ4bWwyLmR5bGliOyBw
YXRoID0gL3Vzci9saWIvbGlieG1sMi5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+Ijsg
fTsKKwkJRTEwM0EyMkMwQjAyNDA1RDAwODY0QUFDIC8qIEJhc2U2NC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTEwM0EyMkQwQjAyNDA1RDAwODY0QUFDIC8qIEJhc2U2NC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNlNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTQ4NDJERDBBNjc0OTM0MDA3RTREMzkgLyogVGV4dENvZGVjSUNVLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDb2RlY0lDVS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTQ4NDJGRTBBNjc0QTMxMDA3RTREMzkgLyogVGV4dENvZGVjSUNV
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlY0lDVS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNDg0MzJFMEE2NzRGQzIwMDdFNEQz
OSAvKiBUZXh0Q29kZWNNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5n
ID0gMDsgbmFtZSA9IFRleHRDb2RlY01hYy5oOyBwYXRoID0gbWFjL1RleHRDb2RlY01hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODQ5OCw2ICs4NTAyLDggQEAKIAkJCQk5M0NE
NEZENzA5OTVGOUVBMDA3RUNDOTcgLyogQXRvbWljU3RyaW5nLmNwcCAqLywKIAkJCQk5M0NENEZE
ODA5OTVGOUVBMDA3RUNDOTcgLyogQXRvbWljU3RyaW5nLmggKi8sCiAJCQkJOTNDRDRGRDkwOTk1
RjlFQTAwN0VDQzk3IC8qIEF0b21pY1N0cmluZ0ltcGwuaCAqLywKKwkJCQlFMTAzQTIyQzBCMDI0
MDVEMDA4NjRBQUMgLyogQmFzZTY0LmggKi8sCisJCQkJRTEwM0EyMkQwQjAyNDA1RDAwODY0QUFD
IC8qIEJhc2U2NC5jcHAgKi8sCiAJCQkJNjVGNTM4MjAwOUIyQjU1NzAwRjNEQzRBIC8qIGNoYXJh
Y3Rlci1zZXRzLnR4dCAqLywKIAkJCQk5MzI2REMwQTA5REFENUJFMDBBRkM4NDcgLyogQ2hhcnNl
dERhdGEuaCAqLywKIAkJCQlCQ0M4Q0ZDODA5ODZDRDI0MDAxNDBCRjIgLyogQ29sb3IuY3BwICov
LApAQCAtMTA1MDMsNiArMTA1MDksNyBAQAogCQkJCTY1REFEQTAwMEFGRDg2QkYwMENFNTNFRCAv
KiBGb3JtRGF0YVN0cmVhbU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVEQURBMTgwQUZEODc4
MDAwQ0U1M0VEIC8qIEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRjY1RTBCMDA1
NjE0MDBBOTk3RkMgLyogU2NyZWVuLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTAzQTIyRTBCMDI0
MDVEMDA4NjRBQUMgLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTExNzQzLDYgKzExNzUw
LDcgQEAKIAkJCQkxNDAyNjkyRDBBRkU3MkQ4MDA1OTE5RTIgLyogU2NyZWVuTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjVEQUQ5RkMwQUZEODZCNDAwQ0U1M0VEIC8qIEZvcm1EYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTY1REFEQTAxMEFGRDg2QkYwMENFNTNFRCAvKiBGb3JtRGF0YVN0
cmVhbU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUUxMDNBMjJGMEIwMjQwNUQwMDg2NEFBQyAv
KiBCYXNlNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRv
dy5jcHAJKHJldmlzaW9uIDE3NjYxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYg
Sm9uIFNoaWVyIChqc2hpZXJAaWFzdGF0ZS5lZHUpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0yMywxMiArMjQsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJr
anNfd2luZG93LmgiCiAKKyNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgpAQCAt
MjIwLDYgKzIyMyw4IEBAIGNvbnN0IENsYXNzSW5mbyBXaW5kb3c6OmluZm8gPSB7ICJXaW5kb3cK
IAogLyoKIEBiZWdpbiBXaW5kb3dUYWJsZSAxMDMKKyAgYXRvYiAgICAgICAgICBXaW5kb3c6OkFU
b0IgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKKyAgYnRvYSAgICAgICAgICBXaW5k
b3c6OkJUb0EgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKICAgY2xvc2VkICAgICAg
ICBXaW5kb3c6OkNsb3NlZCAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5CiAgIGNyeXB0byAg
ICAgICAgV2luZG93OjpDcnlwdG8gICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQogICBkZWZh
dWx0U3RhdHVzIFdpbmRvdzo6RGVmYXVsdFN0YXR1cyAgIERvbnREZWxldGUKQEAgLTE1MzMsNiAr
MTUzOCwzMCBAQCBKU1ZhbHVlICpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjCiAgICAg
ZnJhbWUtPnJ1bkphdmFTY3JpcHRBbGVydChzdHIpOwogICAgIGV4ZWMtPmR5bmFtaWNJbnRlcnBy
ZXRlcigpLT5yZXN1bWVUaW1lb3V0Q2hlY2soKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgY2FzZSBXaW5kb3c6OkFUb0I6CisgIGNhc2UgV2luZG93OjpCVG9BOiB7CisgICAgaWYgKGFy
Z3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOworICAgIGlmICh2LT5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCk7CisgICAgaWYgKCFzLmlzOEJpdCgpKSB7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBJTlZBTElEX0NIQVJBQ1RFUl9FUlIpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPGNoYXI+IGluKHMuc2l6
ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlu
W2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4ocy5kYXRhKClbaV0udW5pY29kZSgpKTsKKyAgICBWZWN0
b3I8Y2hhcj4gb3V0OworCisgICAgaWYgKGlkID09IFdpbmRvdzo6QVRvQikgeworICAgICAgICBp
ZiAoIWJhc2U2NERlY29kZShpbiwgb3V0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIEdlbmVyYWxFcnJvciwgIkNhbm5vdCBkZWNvZGUgYmFzZTY0Iik7CisgICAgfSBlbHNl
CisgICAgICAgIGJhc2U2NEVuY29kZShpbiwgb3V0KTsKKyAgICAKKyAgICByZXR1cm4ganNTdHJp
bmcoU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXplKCkpKTsKKyAgfQogICBjYXNlIFdpbmRvdzo6
Q29uZmlybTogewogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgIGZy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX3dpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X3dpbmRvdy5oCShyZXZpc2lvbiAxNzY2MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dp
bmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNVbnByb3RlY3RlZEhUTUxFdmVudExpc3Rl
bmVyczsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgZW51
bSB7IENsb3NlZCwgQ3J5cHRvLCBEZWZhdWx0U3RhdHVzLCBTdGF0dXMsIERPTUV4Y2VwdGlvbiwg
RnJhbWVzLCBIaXN0b3J5XywgRXZlbnRfLCBJbm5lckhlaWdodCwKKyAgICBlbnVtIHsgQVRvQiwg
QlRvQSwgQ2xvc2VkLCBDcnlwdG8sIERlZmF1bHRTdGF0dXMsIFN0YXR1cywgRE9NRXhjZXB0aW9u
LCBGcmFtZXMsIEhpc3RvcnlfLCBFdmVudF8sIElubmVySGVpZ2h0LAogICAgICAgICAgICBJbm5l
cldpZHRoLCBMZW5ndGgsIExvY2F0aW9uXywgTG9jYXRpb25iYXIsIE5hbWUsIE5hdmlnYXRvcl8s
IENsaWVudEluZm9ybWF0aW9uLAogICAgICAgICAgICBNZW51YmFyLCBPZmZzY3JlZW5CdWZmZXJp
bmcsIE9wZW5lciwgT3V0ZXJIZWlnaHQsIE91dGVyV2lkdGgsIFBhZ2VYT2Zmc2V0LCBQYWdlWU9m
ZnNldCwKICAgICAgICAgICAgUGFyZW50LCBQZXJzb25hbGJhciwgU2NyZWVuWCwgU2NyZWVuWSwg
U2Nyb2xsYmFycywgU2Nyb2xsLCBTY3JvbGxCeSwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmFz
ZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTY3IEBACisvKgorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgRGF3aXQgQWxlbWF5
ZWh1IDxhZGF3aXRAa2RlLm9yZz4KKyAgIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEB3ZWJraXQub3JnPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpCisg
ICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisKKyAgIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB0aGUg
amF2YSBpbXBsZW1lbnRhdGlvbiBpbiBIVFRQQ2xpZW50CisgICBwYWNrYWdlIGJ5IFJvbmFsZCBU
c2NoYWzDpHIgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQmFzZTY0LmgiCisKKyNpbmNsdWRlIDx3dGYvcGxhdGZvcm0uaD4KKyNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVu
Y01hcFs2NF0gPQoreworICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3
LCAweDQ4LAorICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUw
LAorICAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAorICAw
eDU5LCAweDVBLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LAorICAweDY3LCAw
eDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLAorICAweDZGLCAweDcwLCAw
eDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LAorICAweDc3LCAweDc4LCAweDc5LCAw
eDdBLCAweDMwLCAweDMxLCAweDMyLCAweDMzLAorICAweDM0LCAweDM1LCAweDM2LCAweDM3LCAw
eDM4LCAweDM5LCAweDJCLCAweDJGCit9OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjREZWNN
YXBbMTI4XSA9Cit7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4M0UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0YsCisgIDB4MzQsIDB4MzUsIDB4MzYsIDB4
MzcsIDB4MzgsIDB4MzksIDB4M0EsIDB4M0IsCisgIDB4M0MsIDB4M0QsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
MDQsIDB4MDUsIDB4MDYsCisgIDB4MDcsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4
MEQsIDB4MEUsCisgIDB4MEYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4
MTYsCisgIDB4MTcsIDB4MTgsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
IDB4MDAsIDB4MUEsIDB4MUIsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYsIDB4MjAsCisgIDB4MjEs
IDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsCisgIDB4MjksIDB4MkEs
IDB4MkIsIDB4MkMsIDB4MkQsIDB4MkUsIDB4MkYsIDB4MzAsCisgIDB4MzEsIDB4MzIsIDB4MzMs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3ZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBib29sIGluc2VydExGcykK
K3sKKyAgICAvLyBjbGVhciBvdXQgdGhlIG91dHB1dCBidWZmZXIKKyAgICBvdXQuY2xlYXIoKTsK
KyAgICBpZiAoaW4uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBp
bnQgc2lkeCA9IDA7CisgICAgdW5zaWduZWQgaW50IGRpZHggPSAwOworICAgIGNvbnN0IGNoYXIq
IGRhdGEgPSBpbi5kYXRhKCk7CisgICAgY29uc3QgdW5zaWduZWQgaW50IGxlbiA9IGluLnNpemUo
KTsKKworICAgIHVuc2lnbmVkIGludCBvdXRfbGVuID0gKChsZW4gKyAyKSAvIDMpICogNDsKKwor
ICAgIC8vIERlYWwgd2l0aCB0aGUgNzYgY2hhcmFjdGVycyBvciBsZXNzIHBlcgorICAgIC8vIGxp
bmUgbGltaXQgc3BlY2lmaWVkIGluIFJGQyAyMDQ1IG9uIGEKKyAgICAvLyBwcmUgcmVxdWVzdCBi
YXNpcy4KKyAgICBpbnNlcnRMRnMgPSAoaW5zZXJ0TEZzICYmIG91dF9sZW4gPiA3Nik7CisgICAg
aWYgKGluc2VydExGcykKKyAgICAgICAgb3V0X2xlbiArPSAoKG91dF9sZW4gLSAxKSAvIDc2KTsK
KworICAgIGludCBjb3VudCA9IDA7CisgICAgb3V0LnJlc2l6ZShvdXRfbGVuKTsKKworICAgIC8v
IDMtYnl0ZSB0byA0LWJ5dGUgY29udmVyc2lvbiArIDAtNjMgdG8gYXNjaWkgcHJpbnRhYmxlIGNv
bnZlcnNpb24KKyAgICBpZiAobGVuID4gMSkgeworICAgICAgICB3aGlsZSAoc2lkeCA8IGxlbiAt
IDIpIHsKKyAgICAgICAgICAgIGlmIChpbnNlcnRMRnMpIHsKKyAgICAgICAgICAgICAgICBpZiAo
Y291bnQgJiYgKGNvdW50ICUgNzYpID09IDApCisgICAgICAgICAgICAgICAgICAgIG91dFtkaWR4
KytdID0gJ1xuJzsKKyAgICAgICAgICAgICAgICBjb3VudCArPSA0OworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBiYXNlNjRFbmNNYXBbKGRhdGFbc2lkeF0gPj4gMikg
JiAwNzddOworICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBiYXNlNjRFbmNNYXBbKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3IHwgKGRhdGFbc2lkeF0gPDwgNCkgJiAwNzddOworICAgICAgICAg
ICAgb3V0W2RpZHgrK10gPSBiYXNlNjRFbmNNYXBbKGRhdGFbc2lkeCArIDJdID4+IDYpICYgMDAz
IHwgKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3XTsKKyAgICAgICAgICAgIG91dFtkaWR4Kytd
ID0gYmFzZTY0RW5jTWFwW2RhdGFbc2lkeCArIDJdICYgMDc3XTsKKyAgICAgICAgICAgIHNpZHgg
Kz0gMzsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChzaWR4IDwgbGVuKSB7CisgICAgICAg
IGlmIChpbnNlcnRMRnMgJiYgKGNvdW50ID4gMCkgJiYgKGNvdW50ICUgNzYpID09IDApCisgICAg
ICAgICAgIG91dFtkaWR4KytdID0gJ1xuJzsKKworICAgICAgICBvdXRbZGlkeCsrXSA9IGJhc2U2
NEVuY01hcFsoZGF0YVtzaWR4XSA+PiAyKSAmIDA3N107CisgICAgICAgIGlmIChzaWR4IDwgbGVu
IC0gMSkgeworICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBiYXNlNjRFbmNNYXBbKGRhdGFbc2lk
eCArIDFdID4+IDQpICYgMDE3IHwgKGRhdGFbc2lkeF0gPDwgNCkgJiAwNzddOworICAgICAgICAg
ICAgb3V0W2RpZHgrK10gPSBiYXNlNjRFbmNNYXBbKGRhdGFbc2lkeCArIDFdIDw8IDIpICYgMDc3
XTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBvdXRbZGlkeCsrXSA9IGJhc2U2NEVuY01h
cFsoZGF0YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgfQorCisgICAgLy8gQWRkIHBhZGRpbmcK
KyAgICB3aGlsZSAoZGlkeCA8IG91dC5zaXplKCkpIHsKKyAgICAgICAgb3V0W2RpZHhdID0gJz0n
OworICAgICAgICBkaWR4Kys7CisgICAgfQorfQorCitib29sIGJhc2U2NERlY29kZShjb25zdCBW
ZWN0b3I8Y2hhcj4mIGluLCBWZWN0b3I8Y2hhcj4mIG91dCkKK3sKKyAgICBvdXQuY2xlYXIoKTsK
KyAgICBpZiAoaW4uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHVuc2ln
bmVkIGludCBsZW4gPSBpbi5zaXplKCk7CisgICAgY29uc3QgY2hhciogZGF0YSA9IGluLmRhdGEo
KTsKKworICAgIHdoaWxlIChsZW4gJiYgZGF0YVtsZW4tMV0gPT0gJz0nKQorICAgICAgICAtLWxl
bjsKKworICAgIG91dC5yZXNpemUobGVuKTsKKyAgICBmb3IgKHVuc2lnbmVkIGludCBpZHggPSAw
OyBpZHggPCBsZW47IGlkeCsrKSB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSBkYXRhW2lk
eF07CisgICAgICAgIGlmICgoY2ggPiA0NyAmJiBjaCA8IDU4KSB8fCAoY2ggPiA2NCAmJiBjaCA8
IDkxKSB8fCAoY2ggPiA5NiAmJiBjaCA8IDEyMykgfHwgY2ggPT0gJysnIHx8IGNoID09ICcvJyB8
fCBjaCA9PSAnPScpCisgICAgICAgICAgICBvdXRbaWR4XSA9IGJhc2U2NERlY01hcFtjaF07Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyA0
LWJ5dGUgdG8gMy1ieXRlIGNvbnZlcnNpb24KKyAgICB1bnNpZ25lZCBpbnQgb3V0TGVuID0gbGVu
IC0gKChsZW4gKyAzKSAvIDQpOworICAgIGlmICghb3V0TGVuIHx8ICgob3V0TGVuICsgMikgLyAz
KSAqIDQgPCBsZW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHVuc2lnbmVkIGludCBz
aWR4ID0gMDsKKyAgICB1bnNpZ25lZCBpbnQgZGlkeCA9IDA7CisgICAgaWYgKG91dExlbiA+IDEp
IHsKKyAgICAgICAgd2hpbGUgKGRpZHggPCBvdXRMZW4gLSAyKSB7CisgICAgICAgICAgICBvdXRb
ZGlkeF0gPSAoKChvdXRbc2lkeF0gPDwgMikgJiAyNTUpIHwgKChvdXRbc2lkeCArIDFdID4+IDQp
ICYgMDAzKSk7CisgICAgICAgICAgICBvdXRbZGlkeCArIDFdID0gKCgob3V0W3NpZHggKyAxXSA8
PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsKKyAgICAgICAgICAg
IG91dFtkaWR4ICsgMl0gPSAoKChvdXRbc2lkeCArIDJdIDw8IDYpICYgMjU1KSB8IChvdXRbc2lk
eCArIDNdICYgMDc3KSk7CisgICAgICAgICAgICBzaWR4ICs9IDQ7CisgICAgICAgICAgICBkaWR4
ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoZGlkeCA8IG91dExlbikKKyAgICAg
ICAgb3V0W2RpZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYgMjU1KSB8ICgob3V0W3NpZHggKyAx
XSA+PiA0KSAmIDAwMykpOworCisgICAgaWYgKCsrZGlkeCA8IG91dExlbikKKyAgICAgICAgb3V0
W2RpZHhdID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0g
Pj4gMikgJiAwMTcpKTsKKworICAgIGlmIChvdXRMZW4gPCBvdXQuc2l6ZSgpKQorICAgICAgICBv
dXQucmVzaXplKG91dExlbik7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KClByb3BlcnR5IGNoYW5n
ZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vQmFzZTY0LmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjpl
b2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQmFzZTY0LmgJKHJldmlzaW9uIDApCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDM2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5v
cmcpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgQmFzZTY0X2gKKyNkZWZpbmUgQmFzZTY0X2gKKworI2luY2x1
ZGUgPHd0Zi9WZWN0b3IuaD4KKwordm9pZCBiYXNlNjRFbmNvZGUoY29uc3QgVmVjdG9yPGNoYXI+
JiwgVmVjdG9yPGNoYXI+JiwgYm9vbCBpbnNlcnRMRnMgPSBmYWxzZSk7CisKKy8vIHRoaXMgZGVj
b2RlciBpcyBub3QgZ2VuZXJhbCBwdXJwb3NlIC0gaXQgcmV0dXJucyBhbiBlcnJvciBpZiBpdCBl
bmNvdW50ZXJzIGEgbGluZWZlZWQsIGFzIG5lZWRlZCBmb3Igd2luZG93LmF0b2IKK2Jvb2wgYmFz
ZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFZlY3RvcjxjaGFyPiYpOworCisjZW5kaWYg
Ly8gQmFzZTY0X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vQmFzZTY0
LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRleDogV2Vi
Q29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuY3BwCShyZXZpc2lvbiAxNzY2MSkKKysrIFdlYkNv
cmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDYg
KzM2LDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9TdHJpbmdFeHRyYXMuaD4KIAogI2lm
IFBMQVRGT1JNKFdJTl9PUykKICNpbmNsdWRlIDx3aW5kb3dzLmg+CkBAIC04MjIsMTMgKzgyMyw2
IEBAIGJvb2wgRGVwcmVjYXRlZFN0cmluZzo6c3RhcnRzV2l0aChjb25zdCAKICAgICB9CiB9CiAK
LSNpZiBQTEFURk9STShXSU5fT1MpCi1pbmxpbmUgaW50IHN0cm5jYXNlY21wKGNvbnN0IGNoYXIg
KmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQsIHNpemVfdCBtYXhMZW5ndGgpCi17Ci0gICAgcmV0
dXJuIF9zdHJuaWNtcChmaXJzdCwgc2Vjb25kLCBtYXhMZW5ndGgpOwotfQotI2VuZGlmCi0KIGJv
b2wgRGVwcmVjYXRlZFN0cmluZzo6c3RhcnRzV2l0aChjb25zdCBjaGFyICpwcmVmaXgsIGJvb2wg
Y2FzZVNlbnNpdGl2ZSkgY29uc3QKIHsKICAgICBpZiAoY2FzZVNlbnNpdGl2ZSkgewpJbmRleDog
TGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0LWV4cGVjdGVkLnBuZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBhcyBhIGJpbmFyeSB0eXBlLgpzdm46
bWltZS10eXBlID0gaW1hZ2UvcG5nCgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBMYXlvdXRUZXN0cy9m
YXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQucG5nCl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOm1pbWUtdHlwZQogICArIGltYWdlL3BuZwoKCmlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUF5
QUFBQUpZQ0FZQUFBQ2Fkb0p3QUFBYVZFbEVRVlI0bk8zZGY2eFhkZjNBOGRmRmUwRisKRG9VYmlP
UkZVYnM0RFIzaUQxd3BtV2FHMDJFbU05M1VoVGhjTHNxYzFhWnBSV08xVUpzRXJsWEw2UUJkQnFh
aC9GQ1VpUWlDRythbApsR25EREJBRUFZRjc0ZkwrL3VHOGNZSDdBNFNYZmVueCtPL2VjejduOHo2
djgvbmpQdS9uVjBVcHBRUUFBRUNDRHAvMkFnQUFnUDhkCkFnUUFBRWdqUUFBQWdEUUNCQUFBU0NO
QUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RUN0ZTQ2JObTJLZi83em54RVIKc1hu
ejV0aStmWHZUdGkxYnRzU3FWYXNPN3VwMlUxOWZIeSsrK0dLTDJ4c2JHMlBGaWhXSDdQNFBwajNQ
WmYzNjlmSEdHMiswKy9hSApldGJzdjdZZW53QUFmS1JkQWZLdmYvMHJycnZ1dXJqdHR0dml2dnZ1
aTZGRGg4YTU1NTRicjc3NmFrUkVQUExJSTlHblQ1OTQ2S0dICkRza2lGeTFhRkdlZWVXYU1IRGx5
bjlzWEwxNGNwNTkrZXR4MDAwMkg1UDRQcG4yZHk1MTMzaGxYWEhGRnUyNS9xR2ZOL212cjhRa0EK
d0grMEswREdqUnNYbXpkdmpnY2ZmREIrOWF0ZnhZc3Z2aGlWbFpYeHpqdnZSRVRFTmRkY0V6VTFO
WWRza1dlZmZYWmNmLzMxTFc0ZgpPblJvWEhEQkJWRlZWWFhJMW5DdzdPdGM3cm5ubnZqem4vL2Ny
dHUzWjliMTlmWHg3TFBQSHVnU0R4dFpjMmpyOFFrQXdIKzBLMEJXCnJGZ1JxMWF0aWgwN2RrUkVS
RlZWVmZ6Kzk3K1A5OTkvdjJtZnFxcXFxS2lvT0RTcmpJaU9IVHZ1OC9pN2R1MktpSWpLeXNybzBL
SHQKMHltbEhQUzE3VzduenAxdDdyUG51ZlRxMVN0T091bWt2ZlpyYWEydHpYckhqaDF4M1hYWHhR
c3Z2TkRtT2c3MUxENU5yYzJoUGRlbwpKUzNOcktYSEp3QUF6VlcyWjZkUm8wYkZqMzcwbzdqb29v
dGkyclJwMGFkUG56ampqRFBpakRQT2FMYmZybDI3NHM0Nzc0dy8vT0VQCjBhTkhqM2ppaVNmaStP
T1BqNGlQM3Jkd3h4MTNSS2RPbldMbHlwVngzSEhIeFlRSkU2Sno1ODR4YmRxMCtPNTN2eHQzM0hG
SGZQdmIKMzQ2cFU2ZkdYWGZkRmNPSEQ0L0preWZ2YzAxYnQyNk4yMjY3TGZyMjdSdnZ2dnR1L08x
dmY0c2pqenl5eFhPWU5tMWF2UC8rKzdGcAowNmFZTVdORzArdjExNnhaRXhNbVRJaFhYbmtsdG16
WkVnODg4RUNjYzg0NWJXN2IwOXk1YzJQSmtpVlJVVkVSTTJiTWlDbFRwc1NwCnA1N2E1bXovL2U5
L3gwTVBQUlNQUC81NExGeTRzT25jYnIvOTl2ak1aejRUQ3hZc2lLT1BQanJPT09PTUdEWnNXSHpo
QzE5b2RkYjMKM250dnpKdzVNOTU4ODgxWXVYSmxUSm8wS2JwMjdiclg3Rm82ZnRldVhXUEtsQ2xS
WFYwZG5UdDNqbnZ2dlRlZWZQTEpxS21wMmU4NQpQZnZzc3pGbHlwVG8zNzkvREJvMEtNYVBIeDlW
VlZYeDE3Lyt0ZWx4c2J1bFM1ZnU5MzF2MjdZdGZ2clRuMGFQSGoxaTZkS2xNWFRvCjBManR0dHYy
T1llWFhucHBuOWVvUGV0c3p6WFpYV3VQblovODVDY3hjK2JNV0x4NGNadVBEd0NBdzA1cGh3OCsr
S0JjY01FRkpTSksKNzk2OXk4eVpNL2ZhNS9PZi8zd1pQSGh3bVROblRsbTFhbFdwcmEwdDMvcld0
NXEyZi9HTFh5eC8vT01mU3ltbE5EUTBsTFBPT3F1TQpHREdpYWZ1eHh4NWJmdmF6bnpYOWZQSEZG
NWVycnJxcTZlZjc3NysvOU8zYnQrbm5yMzN0YTJYcTFLbWxsRklhR3h0THYzNzl5a1VYClhiVFA5
ZS9Zc2FPY2VlYVpUVCtQR3pldU5EWTJscDA3ZDVhdmZ2V3JaZE9tVGFXeHNiR01HVE9tVkZkWGx3
MGJOclM2YlUvMTlmWGwKMkdPUExmUG16U3VsbFBMakgvKzRYSG5sbFMzT2MvZHpXYnQyYmJuNTVw
dEw3OTY5bTdiLyt0ZS9MdC83M3ZkS0thVXNYNzY4UkVTWgpNR0ZDZWZ2dHQ5czE2d0VEQnBUeDQ4
ZTNlUCt0SFgvaHdvWGxxS09PS3FlZmZucDU3TEhIeXBneFkwcGRYZDBCelduMTZ0WGw1Sk5QCkxy
VzF0ZVdKSjU0b2I3Lzlkdm5jNXo1WFJvOGV2YzkxN2U5OWwxTEtKWmRjVWhZdVhGaEtLV1hKa2lV
bElzb3JyN3l5MXh4YXUwYnQKV1dkYjEyVDNhOXJXWStlQkJ4NG9sMTkrZVl2WEJ3RGdjTmF1bDJE
MTZORWpubm5tbWZqQkQzNFFHelpzaUN1dXVDSW1UWnEwMTM0agpSb3lJQ3krOE1QcjM3eC9EaHc5
ditsU3FXYk5teFlJRkMyTFVxRkVSOGRGTGlHNjg4Y2I0eTEvKzB2UmYvODZkT3pkN0NVdVhMbDFh
CmZFbkxTeSs5RkU4OTlWUjg1U3RmaVlpSURoMDZ4S1dYWHRyaStqZHUzQml2dnZwcVBQWFVVeEVS
TVhyMDZDaWx4UFRwMDZPVUVpKzgKOEVMTW1qVXJqam5tbUhqdnZmZmkrZWVmYjNYYm5xcXFxbUxr
eUpFeGVQRGdpUGpvSlZWMWRYVnR6alVpb3JxNk9rNDc3YlJtTCsxNQo2S0dIb2xldlhoRVJjZXFw
cDBaMWRYVkVSTFAzZnJRMDY0KzE5bktnMW81L3pqbm5SRzF0YlF3YU5DaXV2UExLbUR4NWNpeGJ0
dXlBCjV0U25UNThZT0hCZ25IYmFhVEZpeElpb3FhbUpMMzNwUy9IM3YvOTluK3ZhMy91ZU4yOWVM
RnUyTE00KysreUlpQmd5WkVoTW5qeTUKMlp3K25rTnIxNmc5NjJ6UE5mbFlXNCtkc1dQSHR2czlQ
d0FBaDV0MmZ3eHZWVlZWakI4L1B1Yk9uUnZWMWRWeHl5MjN4S09QUHRwcwpuOTMvNkQzcXFLTml5
NVl0RVJIeDhzc3ZSM1YxZGJNM2laOTExbGtSRWJGczJiTDlYdlJ6enowWHRiVzEwYk5uejZiZmRl
dldyY1UvCnVudjM3aDBqUjQ2TXl5NjdMRzY1NVpZWU1HQkFISEhFRWJGdzRjTG8xYXRYZE96WU1U
cDI3QmpublhkZXpKNDlPNFlNR2RMcXRqMVYKVkZURS9mZmZIeHMzYm93SkV5YkUvUG56WS9QbXpl
MCtuNHFLaW1acjc5NjllMU9ZUlVUMDdkdTM2WS9zM1cvenNkMW52YS90ZTJycgorSjA3ZDI3NkF6
c2lQdEdjOW5WdXUzOTg4NTcyNTc2ZmYvNzVHRFpzV0xQamp4a3pwaWtVZHA5RFc5ZW9yWFcyNTVx
MFo4MEFBUC9yCjJud1B5TnR2dngyOWV2V0s3dDI3UjBURStlZWZIMy82MDUvaXZQUE9pMGNmZlRT
dXV1cXFOdTlrNjlhdHNXN2R1dGl5WlV0MDY5WXQKSWlKT08rMjBxS3lzakE4Ly9IQy9GLzNPTysv
RXVuWHI5dnA5YTM5MFAvTElJOUd2WDcrNDc3NzdZdW5TcGZIMDAwL0h1blhyb3JLeQpNcjc4NVMv
dnRYOXIyL1pseXBRcHNXREJndmpkNzM0WHYvM3RiK1BsbDE5dS93bnRZZHk0Y1hIOTlkZkg4dVhM
bzFPblR0R2xTNWM0Ci8venpEL2g0bi9UNEIzTk8rNnUxNDY5WnN5WmVlKzIxZGgvcmsxeWovWm5a
b1o0SkFNRC9aMjArQTdKbXpacTQ3Nzc3bXYxdTJMQmgKTVdEQWdIWi9HVjV0YlcwME5qWTJlOVB0
MnJWclkrZk9uVEZvMEtDbTMzMzhpVlp0NmRldlg3ejMzbnZ4ajMvOG8xMzdyMTY5T3RhdQpYUnNU
SjA2TVdiTm14ZkxseTJQcTFLbHgvUEhIeCt6WnM1djlwN3VVRXM4OTkxeXIyL2IwK3V1dng5aXhZ
K09Ydi96bFFma280RXN2CnZUUkdqeDRkczJiTmlpVkxsaHpRUjhtMkZtUDdlL3lETmFjRDBkcnhh
MnBxNG8wMzNvaVZLMWMyMjdiN3Myb2Z6K0dUWHFQOW1kbWgKbmdrQXdQOW5iUWJJQ1NlY0VCTW5U
bXoyeC83cTFhdmpuWGZlYWZhK2k2MWJ0OGJXclZ1YmZ0NjJiVnRzMjdZdElpS3V1dXFxNk4rLwpm
OHllUGJ0cCs1SWxTNksydGpZdXVlU1NpUGpvR1pGRml4WkZRME5EdlB2dXU3Rnk1Y3BZdjM1OTAv
NE5EUTFOSHdOODlkVlhSMlZsClpiTlB5RnF4WWtXc1c3Y3VHaHNiOXpxSDlldlh4N1JwMHlJaTR1
S0xMNDdMTDc4OHVuWHJGdC84NWpkanpabzFNV2JNbU5pd1lVT3MKWGJzMjdybm5uampwcEpOYTNi
YW51cnE2MkxWclY3eisrdXZSMk5nWTgrZlBqKzNidDBjcFpaOGYyN3I3dVh3OHUyM2J0alh0ZS9m
ZApkOGZKSjU4Y3Q5NTZhMXh6elRYUnVYUG5acmR2YmRZUkVUMTc5bXo2anBZTkd6YnNkZjl0SFgv
bnpwM05qdmRKNXRUUTBOQXNMTGR1CjNiclBhM1FnOTMzMTFWZkhrVWNlR1RmY2NFUFUxZFZGWFYx
ZDNINzc3ZkhaejM1MnJ6a3NYcnk0MVd2VTFqcmJtdG51MTdTdG1iencKd2dzeGNlTEVGbWNBQUhC
WWE4ODcxV3RyYTh2dzRjUEx1SEhqeXZqeDQ4dmd3WVBMVFRmZFZCb2FHa29wcFR6MjJHT2xRNGNP
NVpSVApUaW5MbGkwclM1Y3VMWU1HRFNxVmxaVk5uNWkxZE9uU2Nzb3BwNVJmL09JWDVhbW5uaXFq
Um8wcWRYVjFUZmN4ZCs3YzBxdFhyM0xDCkNTZVU3My8vKytYbW0yOHVGMTU0WVprM2IxNVp0R2hS
R1RKa1NJbUlNbW5TcEZKZlgxOGVmdmpoMHIxNzl6Sm8wS0R5alc5OG8xeDIKMldWbDJMQmg1ZUdI
SDk1ci9hKzk5bG9aT0hCZ21USmxTcGt4WTBZWk8zWnMyYkZqUnltbGxOLzg1amVsVTZkT3BhS2lv
bFJYVjVmSApIMys4NlhhdGJkdmRoeDkrV0U0Ly9mVFNyVnUzY3NNTk41UW5uM3l5ZE9uU3BWeDc3
YldsdnI2KzJiNTduc3VDQlF2S3VlZWVXeUtpClRKdzRzZFRYMTVmdmZPYzdKU0pLUkpRampqaWk5
T25UcDR3ZE83YlUxOWUzYTlZLy9PRVBTMFZGUmJueHhodkxtalZyOWxwdmE4ZC8KK09HSFM5ZXVY
Y3N4eHh4VHBrMmIxcTVadExSdC92ejVwV2ZQbnFWZnYzNWw0Y0tGNWRWWFh5MG5ubmhpNmRTcFUz
bm1tV2YyV3RlQgozUGZqano5ZXFxdXJTMFNVbXBxYXNtREJncVp0dTgvaHJiZmVhdkVhelprenA4
MTF0amF6ZlQwK1cxdnpyYmZlV3ZyMjdWdDI3dHk1Cno4Y1RBTURocktLVXRyK043djMzMzQramp6
NDZ0bTdkR20rOTlWWWNkOXh4VGU4SjJjL1lpVGZmZkRNNmRPZ1FBd2NPM0d0N1EwTkQKTkRZMlJ1
Zk9uV1BIamgxdHZsU21zYkV4Tm16WUVMMTc5NDd0MjdlMytEMGd1M2J0aWc0ZE9zVEdqUnVqcXFw
cXIrL0ZhR2hvaUZXcgpWa1ZOVFUxVVZsYTJlOXVldG0zYjF2U2Y4ZmFzdnlVLy8vblA0K3RmLzNw
czM3NDlObS9lSEJzM2JvenAwNmZIdGRkZTIrNzNGYXhiCnR5NTY5KzU5VUk5L3NPWjBJRm83Zmlr
bDFxNWRHMzM2OU5ucmRudk80VUN2MFlITXJLVTFsMUppKy9idGV6MkxBZ0R3djZCZEFVS2UKQng5
OE1LWlBueDV6NXN4cDl2dW5uMzQ2Qmc0Y0dDZWVlT0ovOWZFUFIyWUdBSER3Q0pEL01zdVhMNCto
UTRmR1paZGRGa09HRElsdAoyN2JGbWpWcllzU0lFVEZpeElqLyt1TWZqc3dNQU9EZ0VTRC9oVDc0
NElONC92bm5ZL1hxMVRGOCtQQ0QvaC8yUTMzOHc1R1pBUUFjCkhBSUVBQUJJMCs1dlFnY0FBUGlr
QkFnQUFKQkdnQUFBQUdrRUNBQUFrRWFBQUFBQWFRUUlBQUNRUm9BQUFBQnBCQWdBQUpCR2dBQUEK
QUdrRUNBQUFrRWFBQUFBQWFRUUlBQUNRUm9BQUFBQnBCQWdBQUpCR2dBQUFBR2txMjlyaDdyZzdZ
eDIwMDExeDE2ZTlCQUFBT0dDZQpBUUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFBQkFBRFND
QkFBQUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGdnUUFBQWdqUUFCCkFBRFNDQkFBQUNDTkFBRUFB
TklJRUFBQUlJMEFBUUFBMGdnUUFBQWdqUUFCQUFEU0NCQUFBQ0NOQUFFQUFOSUlFQUFBSUkwQUFR
QUEKMGdnUUFBQWdqUUFCQUFEU0NCQUFBQ0NOQUFFQUFOSUlFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pR
QUJBQURTQ0JBQUFDQ05BQUVBQU5JSQpFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJBQURTQ0JBQUFD
Q05BQUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFBQkFBRFNDQkFBCkFDQ05BQUVBQU5JSUVB
QUFJSTBBQVFBQTBnZ1FBQUFnalFBQkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGdn
UUFBQWcKalFBQkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGdnUUFBQWdqUUFCQUFE
U0NCQUFBQ0NOQUFFQUFOSUlFQUFBSUkwQQpBUUFBMGdnUUFBQWdqUUFCQUFEU0NCQUFBQ0NOQUFF
QUFOSUlFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJBQURTQ0JBQUFDQ05BQUVBCkFOSUlFQUFBSUkw
QUFRQUEwZ2dRQUFBZ2pRQUJBQURTQ0JBQUFDQ05BQUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFn
alFBQkFBRFMKQ0JBQUFDQ05BQUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFBQkFBRFNDQkFB
QUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGdnUQpBQUFnalFBQkFBRFNDQkFBQUNDTkFBRUFBTklJ
RUFBQUlJMEFBUUFBMGxTVVVzcW52UWdBQU9CL2cyZEFBQUNBTkFJRUFBQklJMEFBCkFJQTBBZ1FB
QUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNC
QUFBU0NOQUFBQ0EKTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FO
QUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQwpCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFB
SUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBCkFFZ2pR
QUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVND
TkFBQUNBTkFJRUFBQkkKSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFB
QklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQQpBQUNBTkFJRUFBQklJMEFBQUlBMEFn
UUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBCmdE
UUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFD
QU5BSUVBQUJJSTBBQUFJQTAKQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBB
QUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRQpBQUJJSTBBQUFJQTBBZ1FBQUVn
alFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFB
ClNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlF
QUFCSUkwQUFBSUEwQWdRQUFFZ2oKUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEw
QWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQQpBSUEwQWdRQUFFZ2pRQUFB
Z0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFB
QUNBCk5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJ
MEFBQUlBMEFnUUFBRWdqUUFBQWdEUUMKQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFB
RWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQQpBRWdqUUFBQWdEUUNC
QUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5B
SUVBQUJJCkkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJ
QTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkEKQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFB
QUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQQpnRFFDQkFBQVND
TkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFC
SUkwQUFBSUEwCkFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdR
QUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUUKQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RR
Q0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQQpTQ05BQUFD
QU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFB
QUlBMEFnUUFBRWdqClFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdq
UUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUEKQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFB
U0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQQpOQUlF
QUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBB
Z1FBQUVnalFBQUFnRFFDCkJBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFn
RFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUEKQUVnalFBQUFnRFFDQkFBQVNDTkFB
QUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSQpJ
MEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFF
Z2pRQUFBZ0RRQ0JBQUFTQ05BCkFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JB
QUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUEKZ0RRQ0JBQUFTQ05BQUFDQU5B
SUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlB
MApBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFB
QWdEUUNCQUFBU0NOQUFBQ0FOQUlFCkFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NO
QUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUEKU0NOQUFBQ0FOQUlFQUFC
SUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FB
QUVnagpRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFD
QkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBCkFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNB
TkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0EKTkFJRUFBQklJMEFB
QUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pR
QUFBZ0RRQwpCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFT
Q05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBCkFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVB
QUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQkkKSTBBQUFJQTBB
Z1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdE
UUNCQUFBU0NOQQpBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFB
Q0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBCmdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkw
QUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTAKQWdRQUFF
Z2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFB
QVNDTkFBQUNBTkFJRQpBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJ
RUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBClNDTkFBQUNBTkFJRUFBQklJMEFBQUlB
MEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2oKUUFB
QWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05B
QUFDQU5QOEh2SEhlWUVLTwpOaGNBQUFBQVNVVk9SSzVDWUlJPQoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>11770</attachid>
            <date>2006-12-07 22:00:12 -0800</date>
            <delta_ts>2006-12-11 15:42:15 -0800</delta_ts>
            <desc>now with unsigned instead of unsigned int</desc>
            <filename>9673r3_patch.txt</filename>
            <type>text/plain</type>
            <size>66180</size>
            <attacher name="Alexey Proskuryakov">ap</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjYxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTIgQEAKKzIwMDYtMTEtMDggIEFsZXhleSBQ
cm9za3VyeWFrb3YgIDxhcEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTk2NzMKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHdpbmRvdy5hdG9iKCkgYW5kIHdpbmRv
dy5idG9hKCkKKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLmV4cDogRXhwb3J0IFVTdHJpbmc6
OmlzOEJpdCgpLgorCiAyMDA2LTExLTA3ICBBbmRlcnMgQ2FybHNzb24gIDxhY2FybHNzb25AYXBw
bGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEdlb2ZmLgpJbmRleDogSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLmV4cAkocmV2aXNpb24gMTc2NjEpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS5leHAJKHdvcmtpbmcgY29weSkKQEAgLTI1Miw2ICsyNTIsNyBAQCBfX1pOSzNLSlM3
SlNWYWx1ZTl0b0ludGVnZXJFUE5TXzlFeGVjU3RhCiBfX1pOSzNLSlM3VVN0cmluZzEwVVRGOFN0
cmluZ0V2CiBfX1pOSzNLSlM3VVN0cmluZzE0dG9TdHJpY3RVSW50MzJFUGIKIF9fWk5LM0tKUzdV
U3RyaW5nNWFzY2lpRXYKK19fWk5LM0tKUzdVU3RyaW5nNmlzOEJpdEV2CiBfX1pOSzNLSlM3VVN0
cmluZzh0b1VJbnQzMkVQYgogX19aTkszS0pTOEpTT2JqZWN0MTFoYXNQcm9wZXJ0eUVQTlNfOUV4
ZWNTdGF0ZUVSS05TXzEwSWRlbnRpZmllckUKIF9fWk5LM0tKUzhKU09iamVjdDEyZGVmYXVsdFZh
bHVlRVBOU185RXhlY1N0YXRlRU5TXzZKU1R5cGVFCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlz
aW9uIDE3NjYxKQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjYyLDYgKzI2Miw3IEBACiAJCUJDRjY1
NTU5MEEyMDQ5NzEwMDM4QTE5NCAvKiBNYXRoRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQ0Y2NTUzQjBBMjA0OERFMDAzOEExOTQgLyogTWF0
aEV4dHJhcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUQyMTIwMjJBMEFENDMxMEQwMEVENzlCNiAvKiBEYXRlTWF0aC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEMjEyMDIyODBBRDQzMTBDMDBFRDc5
QjYgLyogRGF0ZU1hdGguY3BwICovOyB9OwogCQlEMjEyMDIyQjBBRDQzMTBEMDBFRDc5QjYgLyog
RGF0ZU1hdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IEQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlTWF0aC5oICovOyB9OworCQlFMTAzQTI2
RTBCMDI0NUVCMDA4NjRBQUMgLyogU3RyaW5nRXh0cmFzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTAzQTI2RDBCMDI0NUVCMDA4NjRBQUMgLyogU3Ry
aW5nRXh0cmFzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJRTE5NTY3OTYwOUU3Q0YxMjAwQjg5RDEzIC8qIFVuaWNvZGVJY3UuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxOTU2NzhGMDlFN0NGMTIwMEI4
OUQxMyAvKiBVbmljb2RlSWN1LmggKi87IH07CiAJCUUxOTU2Nzk4MDlFN0NGMTIwMEI4OUQxMyAv
KiBVbmljb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFMTk1Njc5NDA5RTdDRjEyMDBCODlEMTMgLyogVW5pY29kZS5oICovOyB9OwogCQlFMTk1Njc5
OTA5RTdDRjEyMDBCODlEMTMgLyogVW5pY29kZUNhdGVnb3J5LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMTk1Njc5NTA5RTdDRjEyMDBCODlEMTMgLyog
VW5pY29kZUNhdGVnb3J5LmggKi87IH07CkBAIC01MTksNiArNTIwLDcgQEAKIAkJQkNGNjU1M0Iw
QTIwNDhERTAwMzhBMTk0IC8qIE1hdGhFeHRyYXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IE1hdGhFeHRyYXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRDIx
MjAyMjgwQUQ0MzEwQzAwRUQ3OUI2IC8qIERhdGVNYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBEYXRlTWF0aC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUQyMTIwMjI5MEFENDMxMEMwMEVENzlCNiAvKiBEYXRlTWF0aC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGF0ZU1hdGguaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJRTEwM0EyNkQwQjAyNDVFQjAwODY0QUFDIC8qIFN0cmluZ0V4dHJhcy5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTdHJpbmdFeHRyYXMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJRTE5NTY3OEYwOUU3Q0YxMjAwQjg5RDEzIC8qIFVuaWNvZGVJY3Uu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pY29kZUljdS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMTk1Njc5NDA5RTdDRjEyMDBCODlEMTMgLyogVW5pY29k
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVbmljb2RlLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxOTU2Nzk1MDlFN0NGMTIwMEI4OUQxMyAvKiBVbmljb2Rl
Q2F0ZWdvcnkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVW5pY29kZUNhdGVn
b3J5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04MjIsNiArODI0LDcgQEAKIAkJ
CQk2NTgwRjc5NTA5NDA3MDU2MDA4MkMyMTkgLyogUGFzc1JlZlB0ci5oICovLAogCQkJCTY1RDZE
ODdFMDlCNUEzMkUwMDAyRTRENyAvKiBQbGF0Zm9ybS5oICovLAogCQkJCTY1QzY0N0IzMDkzRUY4
RDYwMDIyQzM4MCAvKiBSZWZQdHIuaCAqLywKKwkJCQlFMTAzQTI2RDBCMDI0NUVCMDA4NjRBQUMg
LyogU3RyaW5nRXh0cmFzLmggKi8sCiAJCQkJNjU0MUJENkUwOEU4MEExNzAwMkNCRUU3IC8qIFRD
UGFnZU1hcC5oICovLAogCQkJCTY1NDFCRDZGMDhFODBBMTcwMDJDQkVFNyAvKiBUQ1NwaW5Mb2Nr
LmggKi8sCiAJCQkJNjU0MUJENzAwOEU4MEExNzAwMkNCRUU3IC8qIFRDU3lzdGVtQWxsb2MuY3Bw
ICovLApAQCAtMTEyOSw2ICsxMTMyLDcgQEAKIAkJCQk2NUM3QTE3NDBBOEVBQUNCMDBGQTM3RUEg
LyogSlNXcmFwcGVyT2JqZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk5M0I2QTBERjBBQTY0REE0
MDA3NkRFMjcgLyogR2V0UHRyLmggaW4gSGVhZGVycyAqLywKIAkJCQlEMjEyMDIyQjBBRDQzMTBE
MDBFRDc5QjYgLyogRGF0ZU1hdGguaCBpbiBIZWFkZXJzICovLAorCQkJCUUxMDNBMjZFMEIwMjQ1
RUIwMDg2NEFBQyAvKiBTdHJpbmdFeHRyYXMuaCBpbiBIZWFkZXJzICovLAogCQkJKTsKIAkJCXJ1
bk9ubHlGb3JEZXBsb3ltZW50UG9zdHByb2Nlc3NpbmcgPSAwOwogCQl9OwpJbmRleDogTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2
aXNpb24gMTc2NjEpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAg
LTEsMyArMSwxOCBAQAorMjAwNi0xMS0wOCAgQWxleGV5IFByb3NrdXJ5YWtvdiAgPGFwQG55cG9w
LmNvbT4KKworICAgICAgICBodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05
NjczCisgICAgICAgIEFkZCBzdXBwb3J0IGZvciB3aW5kb3cuYXRvYigpIGFuZCB3aW5kb3cuYnRv
YSgpCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBm
YXN0L2RvbS9XaW5kb3cvYXRvYi1idG9hLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICog
ZmFzdC9kb20vV2luZG93L2F0b2ItYnRvYS5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBmYXN0L2Rv
bS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQuY2hlY2tzdW06IEFkZGVkLgorICAgICAgICAq
IGZhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC5wbmc6IEFkZGVkLgorICAgICAg
ICAqIGZhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGZhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBmYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMtZXhwZWN0ZWQudHh0OgorCiAyMDA2
LTExLTA4ICBCcmFkeSBFaWRzb24gPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE1hY2llagpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2F0b2ItYnRv
YS1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93
L2F0b2ItYnRvYS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvYXRvYi1idG9hLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCAr
MSw0OCBAQAorUEFTUyB3aW5kb3cuYXRvYigiWVE9PSIpIGlzICJhIgorUEFTUyB3aW5kb3cuYXRv
YigiWVdJPSIpIGlzICJhYiIKK1BBU1Mgd2luZG93LmF0b2IoIllXSmoiKSBpcyAiYWJjIgorUEFT
UyB3aW5kb3cuYXRvYigiWVdKalpBPT0iKSBpcyAiYWJjZCIKK1BBU1Mgd2luZG93LmF0b2IoIllX
SmpaR1U9IikgaXMgImFiY2RlIgorUEFTUyB3aW5kb3cuYXRvYigiWVdKalpHVm0iKSBpcyAiYWJj
ZGVmIgorUEFTUyB3aW5kb3cuYnRvYSgiYSIpIGlzICJZUT09IgorUEFTUyB3aW5kb3cuYnRvYSgi
YWIiKSBpcyAiWVdJPSIKK1BBU1Mgd2luZG93LmJ0b2EoImFiYyIpIGlzICJZV0pqIgorUEFTUyB3
aW5kb3cuYnRvYSgiYWJjZCIpIGlzICJZV0pqWkE9PSIKK1BBU1Mgd2luZG93LmJ0b2EoImFiY2Rl
IikgaXMgIllXSmpaR1U9IgorUEFTUyB3aW5kb3cuYnRvYSgiYWJjZGVmIikgaXMgIllXSmpaR1Zt
IgorUEFTUyB0eXBlb2Ygd2luZG93LmJ0b2EgaXMgImZ1bmN0aW9uIgorUEFTUyB3aW5kb3cuYnRv
YSgpIHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQ
QVNTIHdpbmRvdy5idG9hKCIiKSBpcyAiIgorUEFTUyB3aW5kb3cuYnRvYShudWxsKSBpcyAiIgor
UEFTUyB3aW5kb3cuYnRvYSh3aW5kb3cpIGlzICJXMjlpYW1WamRDQlhhVzVrYjNkZCIKK1BBU1Mg
d2luZG93LmJ0b2EoIsOpw6kiKSBpcyAiNmVrPSIKK1BBU1Mgd2luZG93LmJ0b2EoIlx1MDA4MFx1
MDA4MSIpIGlzICJnSUU9IgorUEFTUyB3aW5kb3cuYnRvYSgi0YLQtdGB0YIiKSB0aHJldyBleGNl
cHRpb24gRXJyb3I6IElOVkFMSURfQ0hBUkFDVEVSX0VSUjogRE9NIEV4Y2VwdGlvbiA1LgorUEFT
UyB3aW5kb3cuYnRvYSBpcyAwCitQQVNTIHR5cGVvZiB3aW5kb3cuYnRvYSBpcyAibnVtYmVyIgor
UEFTUyB0eXBlb2Ygd2luZG93LmF0b2IgaXMgImZ1bmN0aW9uIgorUEFTUyB3aW5kb3cuYXRvYigp
IHRocmV3IGV4Y2VwdGlvbiBTeW50YXhFcnJvcjogTm90IGVub3VnaCBhcmd1bWVudHMuCitQQVNT
IHdpbmRvdy5hdG9iKCIiKSBpcyAiIgorUEFTUyB3aW5kb3cuYXRvYihudWxsKSBpcyAiIgorUEFT
UyB3aW5kb3cuYXRvYigiIFlRPT0iKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBkZWNv
ZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigiWVE9PVx1MDAwYSIpIHRocmV3IGV4Y2VwdGlv
biBFcnJvcjogQ2Fubm90IGRlY29kZSBiYXNlNjQuCitQQVNTIHdpbmRvdy5hdG9iKCI2ZWs9Iikg
aXMgIsOpw6kiCitQQVNTIHdpbmRvdy5hdG9iKCI2ZWsiKSBpcyAiw6nDqSIKK1BBU1Mgd2luZG93
LmF0b2IoImdJRT0iKSBpcyAiwoDCgSIKK1BBU1Mgd2luZG93LmF0b2IoItGC0LXRgdGCIikgdGhy
ZXcgZXhjZXB0aW9uIEVycm9yOiBJTlZBTElEX0NIQVJBQ1RFUl9FUlI6IERPTSBFeGNlcHRpb24g
NS4KK1BBU1Mgd2luZG93LmF0b2IoInoiKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBk
ZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigienoiKSBpcyAiw48iCitQQVNTIHdpbmRv
dy5hdG9iKCJ6enoiKSBpcyAiw488IgorUEFTUyB3aW5kb3cuYXRvYigienp6eiIpIGlzICLDjzzD
syIKK1BBU1Mgd2luZG93LmF0b2IoInp6enp6IikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBDYW5u
b3QgZGVjb2RlIGJhc2U2NC4KK1BBU1Mgd2luZG93LmF0b2IoIj0iKSB0aHJldyBleGNlcHRpb24g
RXJyb3I6IENhbm5vdCBkZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigiPT0iKSB0aHJl
dyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBkZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRv
YigiPT09IikgdGhyZXcgZXhjZXB0aW9uIEVycm9yOiBDYW5ub3QgZGVjb2RlIGJhc2U2NC4KK1BB
U1Mgd2luZG93LmF0b2IoIj09PT0iKSB0aHJldyBleGNlcHRpb24gRXJyb3I6IENhbm5vdCBkZWNv
ZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYigiPT09PT0iKSB0aHJldyBleGNlcHRpb24gRXJy
b3I6IENhbm5vdCBkZWNvZGUgYmFzZTY0LgorUEFTUyB3aW5kb3cuYXRvYiBpcyAwCitQQVNTIHR5
cGVvZiB3aW5kb3cuYXRvYiBpcyAibnVtYmVyIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMg
dHJ1ZQorCitURVNUIENPTVBMRVRFCisKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3Rz
L2Zhc3QvZG9tL1dpbmRvdy9hdG9iLWJ0b2EtZXhwZWN0ZWQudHh0Cl9fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTog
c3ZuOm1pbWUtdHlwZQogICArIHRleHQvcGxhaW4KTmFtZTogc3ZuOmVvbC1zdHlsZQogICArIG5h
dGl2ZQoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9hdG9iLWJ0b2EuaHRtbAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYXRvYi1idG9hLmh0bWwJ
KHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYXRvYi1idG9hLmh0
bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNjQgQEAKK++7vzwhRE9DVFlQRSBIVE1MIFBVQkxJ
QyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8bGluayByZWw9InN0
eWxlc2hlZXQiIGhyZWY9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyI+Cis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHAgaWQ9ImRlc2NyaXB0aW9uIj48L3A+Cis8ZGl2IGlkPSJjb25z
b2xlIj48L2Rpdj4KKzxzY3JpcHQ+CitzaG91bGRCZSgnd2luZG93LmF0b2IoIllRPT0iKScsICci
YSInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigiWVdJPSIpJywgJyJhYiInKTsKK3Nob3VsZEJl
KCd3aW5kb3cuYXRvYigiWVdKaiIpJywgJyJhYmMiJyk7CitzaG91bGRCZSgnd2luZG93LmF0b2Io
IllXSmpaQT09IiknLCAnImFiY2QiJyk7CitzaG91bGRCZSgnd2luZG93LmF0b2IoIllXSmpaR1U9
IiknLCAnImFiY2RlIicpOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9iKCJZV0pqWkdWbSIpJywgJyJh
YmNkZWYiJyk7CitzaG91bGRCZSgnd2luZG93LmJ0b2EoImEiKScsICciWVE9PSInKTsKK3Nob3Vs
ZEJlKCd3aW5kb3cuYnRvYSgiYWIiKScsICciWVdJPSInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYnRv
YSgiYWJjIiknLCAnIllXSmoiJyk7CitzaG91bGRCZSgnd2luZG93LmJ0b2EoImFiY2QiKScsICci
WVdKalpBPT0iJyk7CitzaG91bGRCZSgnd2luZG93LmJ0b2EoImFiY2RlIiknLCAnIllXSmpaR1U9
IicpOworc2hvdWxkQmUoJ3dpbmRvdy5idG9hKCJhYmNkZWYiKScsICciWVdKalpHVm0iJyk7CisK
K3Nob3VsZEJlKCd0eXBlb2Ygd2luZG93LmJ0b2EnLCAnImZ1bmN0aW9uIicpOworc2hvdWxkVGhy
b3coJ3dpbmRvdy5idG9hKCknKTsKK3Nob3VsZEJlKCd3aW5kb3cuYnRvYSgiIiknLCAnIiInKTsK
K3Nob3VsZEJlKCd3aW5kb3cuYnRvYShudWxsKScsICciIicpOworc2hvdWxkQmUoJ3dpbmRvdy5i
dG9hKHdpbmRvdyknLCAnIlcyOWlhbVZqZENCWGFXNWtiM2RkIicpOyAvLyAiW29iamVjdCBXaW5k
b3ddIgorc2hvdWxkQmUoJ3dpbmRvdy5idG9hKCLDqcOpIiknLCAnIjZlaz0iJyk7CitzaG91bGRC
ZSgnd2luZG93LmJ0b2EoIlxcdTAwODBcXHUwMDgxIiknLCAnImdJRT0iJyk7CitzaG91bGRUaHJv
dygnd2luZG93LmJ0b2EoItGC0LXRgdGCIiknKTsKK3dpbmRvdy5idG9hID0gMDsKK3Nob3VsZEJl
KCd3aW5kb3cuYnRvYScsICcwJyk7CitzaG91bGRCZSgndHlwZW9mIHdpbmRvdy5idG9hJywgJyJu
dW1iZXIiJyk7CisKK3Nob3VsZEJlKCd0eXBlb2Ygd2luZG93LmF0b2InLCAnImZ1bmN0aW9uIicp
Oworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCknKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigi
IiknLCAnIiInKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYihudWxsKScsICciIicpOworc2hvdWxk
VGhyb3coJ3dpbmRvdy5hdG9iKCIgWVE9PSIpJyk7CitzaG91bGRUaHJvdygnd2luZG93LmF0b2Io
IllRPT1cXHUwMDBhIiknKTsKK3Nob3VsZEJlKCd3aW5kb3cuYXRvYigiNmVrPSIpJywgJyLDqcOp
IicpOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9iKCI2ZWsiKScsICciw6nDqSInKTsKK3Nob3VsZEJl
KCd3aW5kb3cuYXRvYigiZ0lFPSIpJywgJyJcdTAwODBcdTAwODEiJyk7CitzaG91bGRUaHJvdygn
d2luZG93LmF0b2IoItGC0LXRgdGCIiknKTsKK3Nob3VsZFRocm93KCd3aW5kb3cuYXRvYigieiIp
Jyk7CitzaG91bGRCZSgnd2luZG93LmF0b2IoInp6IiknLCAnIsOPIicpOworc2hvdWxkQmUoJ3dp
bmRvdy5hdG9iKCJ6enoiKScsICciw49cdTAwM0MiJyk7CitzaG91bGRCZSgnd2luZG93LmF0b2Io
Inp6enoiKScsICciw49cdTAwM0PDsyInKTsKK3Nob3VsZFRocm93KCd3aW5kb3cuYXRvYigienp6
enoiKScpOworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCI9IiknKTsKK3Nob3VsZFRocm93KCd3
aW5kb3cuYXRvYigiPT0iKScpOworc2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCI9PT0iKScpOwor
c2hvdWxkVGhyb3coJ3dpbmRvdy5hdG9iKCI9PT09IiknKTsKK3Nob3VsZFRocm93KCd3aW5kb3cu
YXRvYigiPT09PT0iKScpOword2luZG93LmF0b2IgPSAwOworc2hvdWxkQmUoJ3dpbmRvdy5hdG9i
JywgJzAnKTsKK3Nob3VsZEJlKCd0eXBlb2Ygd2luZG93LmF0b2InLCAnIm51bWJlciInKTsKKwor
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKzwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1s
PgoKUHJvcGVydHkgY2hhbmdlcyBvbjogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2F0b2It
YnRvYS5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIHRleHQvaHRtbAoK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC5j
aGVja3N1bQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYnRvYS1w
bmdsZXQtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0
L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQuY2hlY2tzdW0JKHJldmlzaW9uIDApCkBA
IC0wLDAgKzEgQEAKKzQwZTY4Y2YyYjgwMmU5NzZiNDZiMTlmOTRmZjE5YTU1ClwgTm8gbmV3bGlu
ZSBhdCBlbmQgb2YgZmlsZQpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2Et
cG5nbGV0LWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2RvbS9X
aW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMCBAQAorbGF5ZXIgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCisgIFJlbmRlclZp
ZXcgYXQgKDAsMCkgc2l6ZSA4MDB4NjAwCitsYXllciBhdCAoMCwwKSBzaXplIDgwMHg2MDAKKyAg
UmVuZGVyQmxvY2sge0hUTUx9IGF0ICgwLDApIHNpemUgODAweDYwMAorICAgIFJlbmRlckJvZHkg
e0JPRFl9IGF0ICg4LDgpIHNpemUgNzg0eDU4NAorICAgICAgUmVuZGVyQmxvY2sge1B9IGF0ICgw
LDApIHNpemUgNzg0eDE4CisgICAgICAgIFJlbmRlclRleHQgeyN0ZXh0fSBhdCAoMCwwKSBzaXpl
IDIxNngxOAorICAgICAgICAgIHRleHQgcnVuIGF0ICgwLDApIHdpZHRoIDIxNjogIlNob3VsZCBz
ZWUgYSBsaWdodCBncmVlbiByZWN0YW5nbGU6IgorICAgICAgUmVuZGVyQmxvY2sge0RJVn0gYXQg
KDAsMzQpIHNpemUgNzg0eDEwMAorICAgICAgICBSZW5kZXJJbWFnZSB7SU1HfSBhdCAoMCwwKSBz
aXplIDEwMHgxMDAKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zhc3QvZG9tL1dp
bmRvdy9idG9hLXBuZ2xldC1leHBlY3RlZC50eHQKX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46bWltZS10
eXBlCiAgICsgdGV4dC9wbGFpbgpOYW1lOiBzdm46ZW9sLXN0eWxlCiAgICsgbmF0aXZlCgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0Lmh0bWwKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5nbGV0Lmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQuaHRtbAko
cmV2aXNpb24gMCkKQEAgLTAsMCArMSw3OTggQEAKKzxoZWFkPgorPHNjcmlwdD4KKy8vCisvLyBQ
TkcgZHJhd2luZyBsaWJyYXJ5IGZvciBKYXZhU2NyaXB0LgorLy8gQ29weXJpZ2h0IChDKSAxOTk5
IGJ5IFJvZ2VyIEUgQ3JpdGNobG93IEpyLAorLy8gU2FudGEgRmUsIE5ldyBNZXhpY28sIFVTQS4K
Ky8vCisvLyBMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24g
Mi4xCisvLworLy8gVGhlIGhvbWUgcGFnZSBmb3IgUG5nbGV0cyBpcyBodHRwOi8vd3d3LmVsZi5v
cmcvcG5nbGV0cywKKy8vIGEgY29weSBvZiB0aGUgQUZMIG1heSBiZSBmb3VuZCBhdCBodHRwOi8v
d3d3Lm9wZW5zb3VyY2Uub3JnL2xpY2Vuc2VzL2FmbC0yLjEucGhwLAorLy8gUG5nbGV0cyB3ZXJl
IGluc3BpcmVkIGJ5IGFuZCBjb3BpZWQgZnJvbSBnZDEuMywgaHR0cDovL3d3dy5ib3V0ZWxsLmNv
bS9nZCwKKy8vIG90aGVyIHBhcnRzIHdlcmUgaW5zcGlyZWQgYnkgb3IgY29waWVkIGZyb20gVGNs
L1RrLCBodHRwOi8vd3d3LnNjcmlwdGljcy5jb20sCisvLyBhbmQgc29tZSBhbGdvcml0aG1zIHdl
cmUgdGFrZW4gZnJvbSBGb2xleSAmIHZhbiBEYW0gMm5kIEVkaXRpb24uCisvLworLy8gVGhhbmtz
IHRvIEFsZXggVmluY2VudCBmb3IgcG9pbnRpbmcgb3V0IHRoZSBhZHZhbnRhZ2VzIG9mIGVsaW1p
bmF0aW5nIHN0cmljdAorLy8gamF2YXNjcmlwdCB3YXJuaW5ncy4KKy8vCisKKy8vIGNyZWF0ZSBh
IG5ldyBQbmdsZXQgb2Ygc3BlY2lmaWVkIHdpZHRoLCBoZWlnaHQsIGFuZCBkZXB0aAorLy8gd2lk
dGggYW5kIGhlaWdodCBhcmUgc3BlY2lmaWVkIGluIHBpeGVscworLy8gZGVwdGggaXMgcmVhbGx5
IHRoZSBudW1iZXIgb2YgcGFsZXR0ZSBlbnRyaWVzCitmdW5jdGlvbiBQbmdsZXQod2lkdGgsaGVp
Z2h0LGRlcHRoKSB7CisgIHRoaXMud2lkdGggPSB3aWR0aCB8fCAxNjsKKyAgdGhpcy5oZWlnaHQg
PSBoZWlnaHQgfHwgMTY7CisgIHRoaXMuZGVwdGggPSBNYXRoLm1pbigyNTYsIGRlcHRoIHx8IDE2
KTsKKworICAvLyBwaXhlbCBkYXRhIGFuZCByb3cgZmlsdGVyIGlkZW50aWZpZXIgc2l6ZQorICB0
aGlzLnBpeF9zaXplID0gaGVpZ2h0Kih3aWR0aCsxKTsKKworICAvLyBkZWZsYXRlIGhlYWRlciwg
cGl4X3NpemUsIGJsb2NrIGhlYWRlcnMsIGFkbGVyMzIgY2hlY2tzdW0KKyAgdGhpcy5kYXRhX3Np
emUgPSAyICsgdGhpcy5waXhfc2l6ZSArIDUqTWF0aC5mbG9vcigodGhpcy5waXhfc2l6ZSsweGZm
ZmYtMSkvMHhmZmZmKSArIDQ7CisKKyAgLy8gb2Zmc2V0cyBhbmQgc2l6ZXMgb2YgUG5nIGNodW5r
cworICB0aGlzLmloZHJfb2ZmcyA9IDA7CQkJCQkvLyBJSERSIG9mZnNldCBhbmQgc2l6ZQorICB0
aGlzLmloZHJfc2l6ZSA9IDQrNCsxMys0OworICB0aGlzLnBsdGVfb2ZmcyA9IHRoaXMuaWhkcl9v
ZmZzK3RoaXMuaWhkcl9zaXplOwkvLyBQTFRFIG9mZnNldCBhbmQgc2l6ZQorICB0aGlzLnBsdGVf
c2l6ZSA9IDQrNCszKmRlcHRoKzQ7CisgIHRoaXMudHJuc19vZmZzID0gdGhpcy5wbHRlX29mZnMr
dGhpcy5wbHRlX3NpemU7CS8vIHRSTlMgb2Zmc2V0IGFuZCBzaXplCisgIHRoaXMudHJuc19zaXpl
ID0gNCs0K2RlcHRoKzQ7CisgIHRoaXMuaWRhdF9vZmZzID0gdGhpcy50cm5zX29mZnMrdGhpcy50
cm5zX3NpemU7CS8vIElEQVQgb2Zmc2V0IGFuZCBzaXplCisgIHRoaXMuaWRhdF9zaXplID0gNCs0
K3RoaXMuZGF0YV9zaXplKzQ7CisgIHRoaXMuaWVuZF9vZmZzID0gdGhpcy5pZGF0X29mZnMrdGhp
cy5pZGF0X3NpemU7CS8vIElFTkQgb2Zmc2V0IGFuZCBzaXplCisgIHRoaXMuaWVuZF9zaXplID0g
NCs0KzQ7CisgIHRoaXMucG5nX3NpemUgPSB0aGlzLmllbmRfb2Zmcyt0aGlzLmllbmRfc2l6ZTsJ
Ly8gdG90YWwgUE5HIHNpemUKKworICAvLyBhcnJheSBvZiBvbmUgYnl0ZSBzdHJpbmdzCisgIHRo
aXMucG5nID0gbmV3IEFycmF5KHRoaXMucG5nX3NpemUpOworCisgIC8vIGZ1bmN0aW9ucyBmb3Ig
aW5pdGlhbGl6aW5nIGRhdGEKKyAgZnVuY3Rpb24gaW5pdGlhbGl6ZShwbmcsIG9mZnMsIHN0cikg
eworICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSArPSAxKQorICAg
ICAgaWYgKHR5cGVvZiBhcmd1bWVudHNbaV0ubGVuZ3RoICE9ICJ1bmRlZmluZWQiKQorICAgICAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IGFyZ3VtZW50c1tpXS5sZW5ndGg7IGogKz0gMSkKKyAgICAg
ICAgICBwbmdbb2ZmcysrXSA9IGFyZ3VtZW50c1tpXS5jaGFyQXQoaik7CisgIH07CisgIGZ1bmN0
aW9uIGJ5dGUyKHcpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKHc+PjgpJjI1NSwgdyYy
NTUpOyB9OworICBmdW5jdGlvbiBieXRlNCh3KSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2Rl
KCh3Pj4yNCkmMjU1LCAodz4+MTYpJjI1NSwgKHc+PjgpJjI1NSwgdyYyNTUpOyB9OworICBmdW5j
dGlvbiBieXRlMmxzYih3KSB7IHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHcmMjU1LCAodz4+
OCkmMjU1KTsgfTsKKworICAvLyBpbml0aWFsaXplIGV2ZXJ5dGhpbmcgdG8gemVybyBieXRlCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgdGhpcy5wbmdfc2l6ZTsgaSArPSAxKQorICAgIHRoaXMucG5n
W2ldID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTsKKworICAvLyBpbml0aWFsaXplIG5vbi16ZXJv
IGVsZW1lbnRzCisgIGluaXRpYWxpemUodGhpcy5wbmcsIHRoaXMuaWhkcl9vZmZzLCBieXRlNCh0
aGlzLmloZHJfc2l6ZS0xMiksICdJSERSJywKKyAgICAgICAgICAgICBieXRlNCh3aWR0aCksIGJ5
dGU0KGhlaWdodCksIFN0cmluZy5mcm9tQ2hhckNvZGUoOCwgMykpOworICBpbml0aWFsaXplKHRo
aXMucG5nLCB0aGlzLnBsdGVfb2ZmcywgYnl0ZTQodGhpcy5wbHRlX3NpemUtMTIpLCAnUExURScp
OworICBpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLnRybnNfb2ZmcywgYnl0ZTQodGhpcy50cm5z
X3NpemUtMTIpLCAndFJOUycpOworICBpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLmlkYXRfb2Zm
cywgYnl0ZTQodGhpcy5pZGF0X3NpemUtMTIpLCAnSURBVCcpOworICBpbml0aWFsaXplKHRoaXMu
cG5nLCB0aGlzLmllbmRfb2ZmcywgYnl0ZTQodGhpcy5pZW5kX3NpemUtMTIpLCAnSUVORCcpOwor
CisgIC8vIGluaXRpYWxpemUgZGVmbGF0ZSBoZWFkZXIKKyAgdmFyIGhlYWRlciA9ICgoOCArICg3
PDw0KSkgPDwgOCkgfCAoMyA8PCA2KTsKKyAgaGVhZGVyICs9IDMxIC0gKGhlYWRlciAlIDMxKTsK
KyAgaW5pdGlhbGl6ZSh0aGlzLnBuZywgdGhpcy5pZGF0X29mZnMrOCwgYnl0ZTIoaGVhZGVyKSk7
CisKKyAgLy8gaW5pdGlhbGl6ZSBkZWZsYXRlIGJsb2NrIGhlYWRlcnMKKyAgZm9yIChpID0gMDsg
aSoweGZmZmYgPCB0aGlzLnBpeF9zaXplOyBpICs9IDEpIHsKKwl2YXIgc2l6ZSwgYml0czsKKwlp
ZiAoaSArIDB4ZmZmZiA8IHRoaXMucGl4X3NpemUpIHsKKyAgICAgIHNpemUgPSAweGZmZmY7Cisg
ICAgICBiaXRzID0gU3RyaW5nLmZyb21DaGFyQ29kZSgwKTsKKwl9IGVsc2UgeworICAgICAgc2l6
ZSA9IHRoaXMucGl4X3NpemUgLSBpKjB4ZmZmZjsKKyAgICAgIGJpdHMgPSBTdHJpbmcuZnJvbUNo
YXJDb2RlKDEpOworCX0KKwlpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLmlkYXRfb2Zmcys4KzIr
aSooNSsweGZmZmYpLCBiaXRzLCBieXRlMmxzYihzaXplKSwgYnl0ZTJsc2IofnNpemUpKTsKKyAg
fQorCisgIC8vIGluaXRpYWxpemUgcGFsZXR0ZSBoYXNoCisgIHRoaXMucGFsZXR0ZSA9IG5ldyBP
YmplY3QoKTsKKyAgdGhpcy5waW5kZXggPSAwOworfQorCisvLyB2ZXJzaW9uIHN0cmluZy9udW1i
ZXIKK1BuZ2xldC52ZXJzaW9uID0gIjE5OTkwNDI3LjAiOworCisvLyB0ZXN0IGlmIGNvb3JkaW5h
dGVzIGFyZSB3aXRoaW4gYm91bmRzCitQbmdsZXQucHJvdG90eXBlLmluQm91bmRzID0gZnVuY3Rp
b24oeCx5KSB7IHJldHVybiB4ID49IDAgJiYgeCA8IHRoaXMud2lkdGggJiYgeSA+PSAwICYmIHkg
PCB0aGlzLmhlaWdodDsgfQorCisvLyBjbGlwIGFuIHggdmFsdWUgdG8gdGhlIHdpbmRvdyB3aWR0
aAorUG5nbGV0LnByb3RvdHlwZS5jbGlwWCA9IGZ1bmN0aW9uKHgpIHsgcmV0dXJuICh4IDwgMCkg
PyAwIDogKHggPj0gdGhpcy53aWR0aCkgPyB0aGlzLndpZHRoLTEgOiB4IDsgfQorCisvLyBjbGlw
IGEgeSB2YWx1ZSB0byB0aGUgd2luZG93IGhlaWdodAorUG5nbGV0LnByb3RvdHlwZS5jbGlwWSA9
IGZ1bmN0aW9uKHkpIHsgcmV0dXJuICh5IDwgMCkgPyAwIDogKHkgPj0gdGhpcy5oZWlnaHQpID8g
dGhpcy5oZWlnaHQtMSA6IHkgOyB9CisKKy8vIGNvbXB1dGUgdGhlIGluZGV4IGludG8gYSBwbmcg
Zm9yIGEgZ2l2ZW4gcGl4ZWwKK1BuZ2xldC5wcm90b3R5cGUuaW5kZXggPSBmdW5jdGlvbih4LHkp
IHsKKyAgdmFyIGkgPSB5Kih0aGlzLndpZHRoKzEpK3grMTsKKyAgdmFyIGogPSB0aGlzLmlkYXRf
b2Zmcys4KzIrTWF0aC5mbG9vcigoaS8weGZmZmYpKzEpKjUraTsKKyAgcmV0dXJuIGo7Cit9CisK
Ky8vIG1ha2UgYSBjb2xvciBpbiBhIFBuZ2xldAorUG5nbGV0LnByb3RvdHlwZS5jb2xvciA9IGZ1
bmN0aW9uKHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhKSB7CisgIGFscGhhID0gYWxwaGEgPj0gMCA/
IGFscGhhIDogMjU1OworICB2YXIgcmdiYSA9ICgoKCgoYWxwaGE8PDgpK3JlZCk8PDgpK2dyZWVu
KTw8OCkrYmx1ZTsKKyAgaWYgKCB0eXBlb2YgdGhpcy5wYWxldHRlW3JnYmFdID09ICJ1bmRlZmlu
ZWQiKSB7CisJaWYgKHRoaXMucGluZGV4ID09IHRoaXMuZGVwdGgpIHJldHVybiBTdHJpbmcuZnJv
bUNoYXJDb2RlKDApOworCXRoaXMucGFsZXR0ZVtyZ2JhXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUo
dGhpcy5waW5kZXgpOworCXRoaXMucG5nW3RoaXMucGx0ZV9vZmZzKzgrdGhpcy5waW5kZXgqMysw
XSA9IFN0cmluZy5mcm9tQ2hhckNvZGUocmVkKTsKKwl0aGlzLnBuZ1t0aGlzLnBsdGVfb2Zmcys4
K3RoaXMucGluZGV4KjMrMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdyZWVuKTsKKwl0aGlzLnBu
Z1t0aGlzLnBsdGVfb2Zmcys4K3RoaXMucGluZGV4KjMrMl0gPSBTdHJpbmcuZnJvbUNoYXJDb2Rl
KGJsdWUpOworCXRoaXMucG5nW3RoaXMudHJuc19vZmZzKzgrdGhpcy5waW5kZXhdID0gU3RyaW5n
LmZyb21DaGFyQ29kZShhbHBoYSk7CisJdGhpcy5waW5kZXggKz0gMTsKKyAgfQorICByZXR1cm4g
dGhpcy5wYWxldHRlW3JnYmFdOworfQorCisvLyByZXR1cm4gdHJ1ZSBpZiB0aGlzIGlzIGEgY29s
b3IKK1BuZ2xldC5wcm90b3R5cGUuaXNDb2xvciA9IGZ1bmN0aW9uKGNvbG9yKSB7CisgIHJldHVy
biB0eXBlb2YoY29sb3IpID09ICdzdHJpbmcnICYmCisJY29sb3IubGVuZ3RoID09IDEgJiYKKwlj
b2xvci5jaGFyQ29kZUF0KDApID49IDAgJiYKKwljb2xvci5jaGFyQ29kZUF0KDApIDwgdGhpcy5k
ZXB0aDsKK30KKworLy8gZmluZCB0aGUgcmVkLCBncmVlbiwgYmx1ZSwgb3IgYWxwaGEgdmFsdWUg
b2YgYSBQbmdsZXQgY29sb3IKK1BuZ2xldC5wcm90b3R5cGUucmVkID0gZnVuY3Rpb24oY29sb3Ip
IHsgcmV0dXJuIHRoaXMucG5nW3RoaXMucGx0ZV9vZmZzKzgrY29sb3IuY2hhckNvZGVBdCgwKSoz
KzBdLmNoYXJDb2RlQXQoMCk7IH0KK1BuZ2xldC5wcm90b3R5cGUuZ3JlZW4gPSBmdW5jdGlvbihj
b2xvcikgeyByZXR1cm4gdGhpcy5wbmdbdGhpcy5wbHRlX29mZnMrOCtjb2xvci5jaGFyQ29kZUF0
KDApKjMrMV0uY2hhckNvZGVBdCgwKTsgfQorUG5nbGV0LnByb3RvdHlwZS5ibHVlID0gZnVuY3Rp
b24oY29sb3IpIHsgcmV0dXJuIHRoaXMucG5nW3RoaXMucGx0ZV9vZmZzKzgrY29sb3IuY2hhckNv
ZGVBdCgwKSozKzJdLmNoYXJDb2RlQXQoMCk7IH0KK1BuZ2xldC5wcm90b3R5cGUuYWxwaGEgPSBm
dW5jdGlvbihjb2xvcikgeyByZXR1cm4gdGhpcy5wbmdbdGhpcy50cm5zX29mZnMrOCtjb2xvci5j
aGFyQ29kZUF0KDApXS5jaGFyQ29kZUF0KDApOyB9CisKKy8vIGRyYXcgYSBwb2ludCBvciBwb2lu
dHMKK1BuZ2xldC5wcm90b3R5cGUucG9pbnQgPSBmdW5jdGlvbihwb2ludENvbG9yLCB4MCwgeTAp
IHsKKyAgdmFyIGEgPSBhcmd1bWVudHM7CisgIHRoaXMucG9pbnROWFkocG9pbnRDb2xvciwgKGEu
bGVuZ3RoLTEpLzIsIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGFbMippKzFdOyB9LCBmdW5jdGlvbihp
KSB7IHJldHVybiBhWzIqaSsyXTsgfSk7Cit9CisKK1BuZ2xldC5wcm90b3R5cGUucG9pbnROWFkg
PSBmdW5jdGlvbihwb2ludENvbG9yLCBuLCB4LCB5KSB7CisgIGlmICggISB0aGlzLmlzQ29sb3Io
cG9pbnRDb2xvcikpCisJcmV0dXJuOworICBmb3IgKHZhciBpID0gMDsgaSA8IG47IGkgKz0gMSkg
eworCXZhciB4MSA9IHgoaSksIHkxID0geShpKTsKKwlpZiAodGhpcy5pbkJvdW5kcyh4MSx5MSkp
CisgICAgICB0aGlzLnBuZ1t0aGlzLmluZGV4KHgxLHkxKV0gPSBwb2ludENvbG9yOworICB9Cit9
CisKKy8vIHJlYWQgYSBwaXhlbCAKK1BuZ2xldC5wcm90b3R5cGUuZ2V0UG9pbnQgPSBmdW5jdGlv
bih4LHkpIHsgcmV0dXJuIHRoaXMuaW5Cb3VuZHMoeCx5KSA/IHRoaXMucG5nW3RoaXMuaW5kZXgo
eCx5KV0gOiBTdHJpbmcuZnJvbUNoYXJDb2RlKDApOyB9CisKKy8vIGRyYXcgYSBob3Jpem9udGFs
IGxpbmUKK1BuZ2xldC5wcm90b3R5cGUuaG9yaXpvbnRhbExpbmUgPSBmdW5jdGlvbihsaW5lQ29s
b3IsIHgxLCB4MiwgeSkgeworICBpZiAoICEgdGhpcy5pc0NvbG9yKGxpbmVDb2xvcikpCisJcmV0
dXJuOworICB4MSA9IHRoaXMuY2xpcFgoeDEpOworICB4MiA9IHRoaXMuY2xpcFgoeDIpOworICB2
YXIgeDsKKyAgaWYgKHgxIDwgeDIpCisJZm9yICh4ID0geDE7IHggPD0geDI7IHggKz0gMSkKKyAg
ICAgIHRoaXMucG5nW3RoaXMuaW5kZXgoeCx5KV0gPSBsaW5lQ29sb3I7CisgIGVsc2UKKwlmb3Ig
KHggPSB4MjsgeCA8PSB4MTsgeCArPSAxKQorICAgICAgdGhpcy5wbmdbdGhpcy5pbmRleCh4LHkp
XSA9IGxpbmVDb2xvcjsKK30KKworLy8gZHJhdyBhIHZlcnRpY2FsIGxpbmUKK1BuZ2xldC5wcm90
b3R5cGUudmVydGljYWxMaW5lID0gZnVuY3Rpb24obGluZUNvbG9yLCB4LCB5MSwgeTIpIHsKKyAg
aWYgKCAhIHRoaXMuaXNDb2xvcihsaW5lQ29sb3IpKQorCXJldHVybjsKKyAgeTEgPSB0aGlzLmNs
aXBZKHkxKTsKKyAgeTIgPSB0aGlzLmNsaXBZKHkyKTsKKyAgdmFyIHk7CisgIGlmICh5MSA8IHky
KQorCWZvciAoeSA9IHkxOyB5IDw9IHkyOyB5ICs9IDEpCisgICAgICB0aGlzLnBuZ1t0aGlzLmlu
ZGV4KHgseSldID0gbGluZUNvbG9yOworICBlbHNlCisJZm9yICh5ID0geTI7IHkgPD0geTE7IHkg
Kz0gMSkKKyAgICAgIHRoaXMucG5nW3RoaXMuaW5kZXgoeCx5KV0gPSBsaW5lQ29sb3I7Cit9CisK
Ky8vIGRyYXcgYSBnZW5lcmFsIGxpbmUKK1BuZ2xldC5wcm90b3R5cGUuZ2VuZXJhbExpbmUgPSBm
dW5jdGlvbihsaW5lQ29sb3IsIHgxLCB5MSwgeDIsIHkyKSB7CisgIGlmICggISB0aGlzLmlzQ29s
b3IobGluZUNvbG9yKSkKKwlyZXR1cm47CisgIHZhciBkeCA9IE1hdGguYWJzKHgyLXgxKSwgZHkg
PSBNYXRoLmFicyh5Mi15MSk7CisgIHZhciBpbmNyMSwgaW5jcjIsIGQsIHgsIHksIHhlbmQsIHll
bmQsIHhkaXJmbGFnLCB5ZGlyZmxhZywgeGluYywgeWluYzsKKyAgaWYgKGR5IDw9IGR4KSB7CisJ
ZCA9IDIqZHkgLSBkeDsKKwlpbmNyMSA9IDIqZHk7CisJaW5jcjIgPSAyICogKGR5IC0gZHgpOwor
CWlmICh4MSA+IHgyKSB7CisgICAgICB4ID0geDI7CisgICAgICB5ID0geTI7CisgICAgICB5ZGly
ZmxhZyA9IC0xOworICAgICAgeGVuZCA9IHgxOworCX0gZWxzZSB7CisgICAgICB4ID0geDE7Cisg
ICAgICB5ID0geTE7CisgICAgICB5ZGlyZmxhZyA9IDE7CisgICAgICB4ZW5kID0geDI7CisJfQor
CXlpbmMgPSAoKCh5MiAtIHkxKSAqIHlkaXJmbGFnKSA+IDApID8gMSA6IC0xOworCXRoaXMucG9p
bnQobGluZUNvbG9yLCB4LCB5KTsKKwl3aGlsZSAoeCsrIDwgeGVuZCkgeworICAgICAgaWYgKGQg
PCAwKSB7CisJCWQgKz0gaW5jcjE7CisgICAgICB9IGVsc2UgeworCQl5ICs9IHlpbmM7CisJCWQg
Kz0gaW5jcjI7CisgICAgICB9CisgICAgICB0aGlzLnBvaW50KGxpbmVDb2xvciwgeCwgeSk7CisJ
fQorICB9IGVsc2UgewkJCS8qIGR5ID4gZHggKi8KKwlkID0gMipkeCAtIGR5OworCWluY3IxID0g
MipkeDsKKwlpbmNyMiA9IDIgKiAoZHggLSBkeSk7CisJaWYgKHkxID4geTIpIHsKKyAgICAgIHkg
PSB5MjsKKyAgICAgIHggPSB4MjsKKyAgICAgIHllbmQgPSB5MTsKKyAgICAgIHhkaXJmbGFnID0g
LTE7CisJfSBlbHNlIHsKKyAgICAgIHkgPSB5MTsKKyAgICAgIHggPSB4MTsKKyAgICAgIHllbmQg
PSB5MjsKKyAgICAgIHhkaXJmbGFnID0gMTsKKwl9CisJeGluYyA9ICgoKHgyIC0geDEpICogeGRp
cmZsYWcpID4gMCkgPyAxIDogLTE7CisJdGhpcy5wb2ludChsaW5lQ29sb3IsIHgsIHkpOworCXdo
aWxlICh5KysgPCB5ZW5kKSB7CisgICAgICBpZiAoZCA8IDApIHsKKwkJZCArPSBpbmNyMTsKKyAg
ICAgIH0gZWxzZSB7CisJCXggKz0geGluYzsKKwkJZCArPSBpbmNyMjsKKyAgICAgIH0KKyAgICAg
IHRoaXMucG9pbnQobGluZUNvbG9yLCB4LCB5KTsKKwl9CisgIH0KK30KKworLy8gZHJhdyBhIGxp
bmUKK1BuZ2xldC5wcm90b3R5cGUubGluZSA9IGZ1bmN0aW9uKGxpbmVDb2xvciwgeDAsIHkwKSB7
CisgIHZhciBhID0gYXJndW1lbnRzOworICB0aGlzLmxpbmVOWFkobGluZUNvbG9yLCAoYS5sZW5n
dGgtMSkvMiwgZnVuY3Rpb24oaSkgeyByZXR1cm4gYVsyKmkrMV07IH0sIGZ1bmN0aW9uKGkpIHsg
cmV0dXJuIGFbMippKzJdOyB9KTsKK30KKworUG5nbGV0LnByb3RvdHlwZS5saW5lTlhZID0gZnVu
Y3Rpb24obGluZUNvbG9yLCBuLCB4LCB5KSB7CisgIGlmICggISB0aGlzLmlzQ29sb3IobGluZUNv
bG9yKSkKKwlyZXR1cm47CisgIHZhciB4MSA9IHgoMCksIHkxID0geSgwKTsKKyAgZm9yICh2YXIg
aSA9IDE7IGkgPCBuOyBpICs9IDEpIHsKKwl2YXIgeDIgPSB4KGkpLCB5MiA9IHkoaSk7CisJaWYg
KHgxID09IHgyKQorICAgICAgdGhpcy52ZXJ0aWNhbExpbmUobGluZUNvbG9yLCB4MSwgeTEsIHky
KTsKKwllbHNlIGlmICh5MSA9PSB5MikKKyAgICAgIHRoaXMuaG9yaXpvbnRhbExpbmUobGluZUNv
bG9yLCB4MSwgeDIsIHkxKTsKKwllbHNlCisgICAgICB0aGlzLmdlbmVyYWxMaW5lKGxpbmVDb2xv
ciwgeDEsIHkxLCB4MiwgeTIpOworCXgxID0geDI7CisJeTEgPSB5MjsKKyAgfQorfQorCisvLyBk
cmF3IGEgcG9seWdvbgorUG5nbGV0LnByb3RvdHlwZS5wb2x5Z29uID0gZnVuY3Rpb24ob3V0bGlu
ZUNvbG9yLCBmaWxsQ29sb3IsIHgxLCB5MSkgeworICB2YXIgYSA9IGFyZ3VtZW50czsKKyAgdGhp
cy5wb2x5Z29uTlhZKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCAoYS5sZW5ndGgtMikvMiwgZnVu
Y3Rpb24oaSkge3JldHVybiBhWzIqaSsyXTt9LCBmdW5jdGlvbihpKSB7cmV0dXJuIGFbMippKzNd
O30pOworfQorCitQbmdsZXQucHJvdG90eXBlLnBvbHlnb25OWFkgPSBmdW5jdGlvbihvdXRsaW5l
Q29sb3IsIGZpbGxDb2xvciwgbiwgeCwgeSkgeworICBpZiAobiA8PSAwKQorCXJldHVybjsKKyAg
aWYgKHRoaXMuaXNDb2xvcihmaWxsQ29sb3IpKQorCXRoaXMuY29uY2F2ZU5YWShmaWxsQ29sb3Is
IG4sIHgsIHkpOworICBpZiAodGhpcy5pc0NvbG9yKG91dGxpbmVDb2xvcikpCisJdGhpcy5saW5l
TlhZKG91dGxpbmVDb2xvciwgbisxLCBmdW5jdGlvbihpKSB7IHJldHVybiB4KGklbik7IH0sIGZ1
bmN0aW9uKGkpIHsgcmV0dXJuIHkoaSVuKTsgfSk7Cit9CisKKy8qCisgKiBDb25jYXZlIFBvbHln
b24gU2NhbiBDb252ZXJzaW9uCisgKiBieSBQYXVsIEhlY2tiZXJ0CisgKiBmcm9tICJHcmFwaGlj
cyBHZW1zIiwgQWNhZGVtaWMgUHJlc3MsIDE5OTAKKyAqLworUG5nbGV0LnByb3RvdHlwZS5jb25j
YXZlTlhZID0gZnVuY3Rpb24oZmlsbENvbG9yLCBuLCBwdHgsIHB0eSkgeworICBmdW5jdGlvbiBF
ZGdlKGV4LCBlZHgsIGVpKSB7CS8qIGEgcG9seWdvbiBlZGdlICovCisJdGhpcy54ID0gZXg7CS8q
IHggY29vcmRpbmF0ZSBvZiBlZGdlJ3MgaW50ZXJzZWN0aW9uIHdpdGggY3VycmVudCBzY2FubGlu
ZSAqLworCXRoaXMuZHggPSBlZHg7CS8qIGNoYW5nZSBpbiB4IHdpdGggcmVzcGVjdCB0byB5ICov
CisJdGhpcy5pID0gZWk7CS8qIGVkZ2UgbnVtYmVyOiBlZGdlIGkgZ29lcyBmcm9tIHB0W2ldIHRv
IHB0W2krMV0gKi8KKyAgfTsKKyAgZnVuY3Rpb24gY2RlbGV0ZShkaSkgewkvKiByZW1vdmUgZWRn
ZSBpIGZyb20gYWN0aXZlIGxpc3QgKi8KKyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGFjdGl2ZS5s
ZW5ndGg7IGogKz0gMSkKKyAgICAgIGlmIChhY3RpdmVbal0uaSA9PSBkaSkKKyAgICAgICAgYWN0
aXZlLnNwbGljZShqLCAxKTsKKyAgfTsKKyAgZnVuY3Rpb24gY2luc2VydChpaSwgaXkpIHsJLyog
YXBwZW5kIGVkZ2UgaSB0byBlbmQgb2YgYWN0aXZlIGxpc3QgKi8KKyAgICB2YXIgaWogPSBpaTxu
LTEgPyBpaSsxIDogMDsKKyAgICB2YXIgcHgsIHB5LCBxeCwgcXk7CisgICAgaWYgKHB0eShpaSkg
PCBwdHkoaWopKSB7CisgICAgICBweCA9IHB0eChpaSk7IHB5ID0gcHR5KGlpKTsKKyAgICAgIHF4
ID0gcHR4KGlqKTsgcXkgPSBwdHkoaWopOworICAgIH0gZWxzZSB7CisgICAgICBweCA9IHB0eChp
aik7IHB5ID0gcHR5KGlqKTsKKyAgICAgIHF4ID0gcHR4KGlpKTsgcXkgPSBwdHkoaWkpOworICAg
IH0KKyAgICAvKiBpbml0aWFsaXplIHggcG9zaXRpb24gYXQgaW50ZXJzZWN0aW9uIG9mIGVkZ2Ug
d2l0aCBzY2FubGluZSB5ICovCisgICAgdmFyIGR4ID0gKHF4LXB4KS8ocXktcHkpOworICAgIGFj
dGl2ZS5wdXNoKG5ldyBFZGdlKGR4KihpeSsuNS1weSkrcHgsIGR4LCBpaSkpOworICB9OworCisg
IHZhciBpbmQgPSBuZXcgQXJyYXkobik7CQkvKiBsaXN0IG9mIHZlcnRleCBpbmRpY2VzLCBzb3J0
ZWQgYnkgcHRbaW5kW2pdXS55ICovCisgIHZhciBhY3RpdmUgPSBuZXcgQXJyYXkoMCk7CQkvKiBz
dGFydCB3aXRoIGFuIGVtcHR5IGFjdGl2ZSBsaXN0ICovCisKKyAgLyogY3JlYXRlIHktc29ydGVk
IGFycmF5IG9mIGluZGljZXMgaW5kW2tdIGludG8gdmVydGV4IGxpc3QgKi8KKyAgZm9yICh2YXIg
ayA9IDA7IGsgPCBuOyBrICs9IDEpIGluZFtrXSA9IGs7CisgIGluZC5zb3J0KGZ1bmN0aW9uKGkx
LCBpMikgeyByZXR1cm4gcHR5KGkxKSA8PSBwdHkoaTIpID8gLTEgOiAxOyB9KTsKKyAgayA9IDA7
ICAgICAgICAgICAgICAgICAgICAgICAgLyogaW5kW2tdIGlzIG5leHQgdmVydGV4IHRvIHByb2Nl
c3MgKi8KKyAgdmFyIHkwID0gTWF0aC5tYXgoMCwgTWF0aC5jZWlsKHB0eShpbmRbMF0pKy41KSk7
CQkJLyogeW1pbiBvZiBwb2x5Z29uICovCisgIHZhciB5MSA9IE1hdGgubWluKHRoaXMuaGVpZ2h0
LCBNYXRoLmZsb29yKHB0eShpbmRbbi0xXSktLjUpKTsJLyogeW1heCBvZiBwb2x5Z29uICovCisK
KyAgZm9yICh2YXIgeSA9IHkwOyB5IDw9IHkxOyB5ICs9IDEpIHsJCS8qIHN0ZXAgdGhyb3VnaCBz
Y2FubGluZXMgKi8KKwkvKiBzY2FubGluZSB5IGlzIGF0IHkrLjUgaW4gY29udGludW91cyBjb29y
ZGluYXRlcyAqLworCisJLyogY2hlY2sgdmVydGljZXMgYmV0d2VlbiBwcmV2aW91cyBzY2FubGlu
ZSBhbmQgY3VycmVudCBvbmUsIGlmIGFueSAqLworCWZvciAoOyBrPG4gJiYgcHR5KGluZFtrXSkg
PD0geSsuNTsgayArPSAxKSB7CisgICAgICAvKiB0byBzaW1wbGlmeSwgaWYgcHQueT15Ky41LCBw
cmV0ZW5kIGl0J3MgYWJvdmUgKi8KKyAgICAgIC8qIGludmFyaWFudDogeS0uNSA8IHB0W2ldLnkg
PD0geSsuNSAqLworICAgICAgdmFyIGkgPSBpbmRba107CQorCisgICAgICAvKgorICAgICAgICog
aW5zZXJ0IG9yIGRlbGV0ZSBlZGdlcyBiZWZvcmUgYW5kIGFmdGVyIHZlcnRleCBpIChpLTEgdG8g
aSwKKyAgICAgICAqIGFuZCBpIHRvIGkrMSkgZnJvbSBhY3RpdmUgbGlzdCBpZiB0aGV5IGNyb3Nz
IHNjYW5saW5lIHkKKyAgICAgICAqLworICAgICAgdmFyIGogPSAoaS0xK24pJW47CQkvKiB2ZXJ0
ZXggcHJldmlvdXMgdG8gaSAqLworICAgICAgaWYgKHB0eShqKSA8PSB5LS41KQl7CS8qIG9sZCBl
ZGdlLCByZW1vdmUgZnJvbSBhY3RpdmUgbGlzdCAqLworCQljZGVsZXRlKGopOworICAgICAgfSBl
bHNlIGlmIChwdHkoaikgPiB5Ky41KSB7CS8qIG5ldyBlZGdlLCBhZGQgdG8gYWN0aXZlIGxpc3Qg
Ki8KKwkJY2luc2VydChqLCB5KTsKKyAgICAgIH0KKyAgICAgIGlmIChpICE9IGluZFtrXSkgewor
CQlhbGVydCgiWW91ciBicm93c2VyJ3MgaW1wbGVtZW50YXRpb24gb2YgSmF2YVNjcmlwdCBpcyBz
ZXJpb3VzbHkgYnJva2VuLFxuIisKKwkJICAgICAgImFzIGluIHZhcmlhYmxlcyBhcmUgY2hhbmdp
bmcgdmFsdWUgb2YgdGhlaXIgb3duIHZvbGl0aW9uLlxuIisKKwkJICAgICAgIllvdSBzaG91bGQg
dXBncmFkZSB0byBhIG5ld2VyIHZlcnNpb24gYnJvd3Nlci4iKTsKKwkJcmV0dXJuOworICAgICAg
fQorICAgICAgaiA9IChpKzEpJW47CQkvKiB2ZXJ0ZXggbmV4dCBhZnRlciBpICovCisgICAgICBp
ZiAocHR5KGopIDw9IHktLjUpCXsJLyogb2xkIGVkZ2UsIHJlbW92ZSBmcm9tIGFjdGl2ZSBsaXN0
ICovCisJCWNkZWxldGUoaSk7CisgICAgICB9IGVsc2UgaWYgKHB0eShqKSA+IHkrLjUpIHsJLyog
bmV3IGVkZ2UsIGFkZCB0byBhY3RpdmUgbGlzdCAqLworCQljaW5zZXJ0KGksIHkpOworICAgICAg
fQorCX0KKworCS8qIHNvcnQgYWN0aXZlIGVkZ2UgbGlzdCBieSBhY3RpdmVbal0ueCAqLworCWFj
dGl2ZS5zb3J0KGZ1bmN0aW9uKHUsdikgeyByZXR1cm4gdS54IDw9IHYueCA/IC0xIDogMTsgfSk7
CisKKwkvKiBkcmF3IGhvcml6b250YWwgc2VnbWVudHMgZm9yIHNjYW5saW5lIHkgKi8KKwlmb3Ig
KGogPSAwOyBqIDwgYWN0aXZlLmxlbmd0aDsgaiArPSAyKSB7CS8qIGRyYXcgaG9yaXpvbnRhbCBz
ZWdtZW50cyAqLworICAgICAgLyogc3BhbiAndHdlZW4gaiAmIGorMSBpcyBpbnNpZGUsIHNwYW4g
dHdlZW4gaisxICYgaisyIGlzIG91dHNpZGUgKi8KKyAgICAgIHZhciB4bCA9IE1hdGguY2VpbChh
Y3RpdmVbal0ueCsuNSk7CQkvKiBsZWZ0IGVuZCBvZiBzcGFuICovCisgICAgICBpZiAoeGw8MCkg
eGwgPSAwOworICAgICAgdmFyIHhyID0gTWF0aC5mbG9vcihhY3RpdmVbaisxXS54LS41KTsJLyog
cmlnaHQgZW5kIG9mIHNwYW4gKi8KKyAgICAgIGlmICh4cj50aGlzLndpZHRoLTEpIHhyID0gdGhp
cy53aWR0aC0xOworICAgICAgaWYgKHhsPD14cikKKwkJdGhpcy5ob3Jpem9udGFsTGluZShmaWxs
Q29sb3IsIHhsLCB4ciwgeSk7CS8qIGRyYXcgcGl4ZWxzIGluIHNwYW4gKi8KKyAgICAgIGFjdGl2
ZVtqXS54ICs9IGFjdGl2ZVtqXS5keDsJLyogaW5jcmVtZW50IGVkZ2UgY29vcmRzICovCisgICAg
ICBhY3RpdmVbaisxXS54ICs9IGFjdGl2ZVtqKzFdLmR4OworCX0KKyAgfQorfQorCisvLyBkcmF3
IGEgcmVjdGFuZ2xlCitQbmdsZXQucHJvdG90eXBlLnJlY3RhbmdsZSA9IGZ1bmN0aW9uKG91dGxp
bmVDb2xvciwgZmlsbENvbG9yLCB4MCx5MCx4MSx5MSkgeworICBpZiAodGhpcy5pc0NvbG9yKGZp
bGxDb2xvcikpCisJZm9yICh2YXIgeSA9IHkwOyB5IDwgeTE7IHkgKz0gMSkKKyAgICAgIHRoaXMu
aG9yaXpvbnRhbExpbmUoZmlsbENvbG9yLCB4MCsxLCB4MS0yLCB5KTsKKyAgaWYgKHRoaXMuaXND
b2xvcihvdXRsaW5lQ29sb3IpKSB7CisJdGhpcy5ob3Jpem9udGFsTGluZShvdXRsaW5lQ29sb3Is
IHgwLCB4MS0xLCB5MCk7CisJdGhpcy5ob3Jpem9udGFsTGluZShvdXRsaW5lQ29sb3IsIHgwLCB4
MS0xLCB5MS0xKTsKKwl0aGlzLnZlcnRpY2FsTGluZShvdXRsaW5lQ29sb3IsIHgwLCB5MCwgeTEt
MSk7CisJdGhpcy52ZXJ0aWNhbExpbmUob3V0bGluZUNvbG9yLCB4MS0xLCB5MCwgeTEtMSk7Cisg
IH0KK30KKwkKKy8vIGRyYXcgYW4gYXJjCitQbmdsZXQucHJvdG90eXBlLmFyYyA9IGZ1bmN0aW9u
KG91dGxpbmVDb2xvciwgY3gsY3ksdyxoLCBzLGUpIHsKKyAgdmFyIHAgPSB0aGlzLm1pZHBvaW50
RWxsaXBzZShjeCxjeSwgdyxoLCBzLGUpOworICBmdW5jdGlvbiB4KGkpIHsgcmV0dXJuIHBbaSoy
XTsgfTsKKyAgZnVuY3Rpb24geShpKSB7IHJldHVybiBwW2kqMisxXTsgfTsKKyAgdGhpcy5saW5l
TlhZKG91dGxpbmVDb2xvciwgcC5sZW5ndGgvMiwgeCwgeSk7Cit9CisKKy8vIGRyYXcgYW4gb3Zh
bAorUG5nbGV0LnByb3RvdHlwZS5vdmFsID0gZnVuY3Rpb24ob3V0bGluZUNvbG9yLCBmaWxsQ29s
b3IsIGN4LGN5LHcsaCkgeworICB2YXIgcCA9IHRoaXMubWlkcG9pbnRFbGxpcHNlKGN4LGN5LCB3
LGgsIDAsMzU5KTsKKyAgZnVuY3Rpb24geChpKSB7IHJldHVybiBwW2kqMl07IH07CisgIGZ1bmN0
aW9uIHkoaSkgeyByZXR1cm4gcFtpKjIrMV07IH07CisgIHRoaXMucG9seWdvbk5YWShvdXRsaW5l
Q29sb3IsIGZpbGxDb2xvciwgcC5sZW5ndGgvMiwgeCwgeSk7Cit9CisKKy8vIGRyYXcgYW4gYXJj
IHdpdGggY2hvcmQKK1BuZ2xldC5wcm90b3R5cGUuY2hvcmQgPSBmdW5jdGlvbihvdXRsaW5lQ29s
b3IsIGZpbGxDb2xvciwgY3gsY3ksdyxoLCBzLGUpIHsKKyAgdmFyIHAgPSB0aGlzLm1pZHBvaW50
RWxsaXBzZShjeCxjeSwgdyxoLCBzLGUpOworICBmdW5jdGlvbiB4KGkpIHsgcmV0dXJuIHBbaSoy
XTsgfTsKKyAgZnVuY3Rpb24geShpKSB7IHJldHVybiBwW2kqMisxXTsgfTsKKyAgdGhpcy5wb2x5
Z29uTlhZKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBwLmxlbmd0aC8yLCB4LCB5KTsKK30KKwor
Ly8gZHJhdyBhbiBhcmMgd2l0aCBwaWVzbGljZQorUG5nbGV0LnByb3RvdHlwZS5waWVzbGljZSA9
IGZ1bmN0aW9uKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBjeCxjeSx3LGgsIHMsZSkgeworICB2
YXIgcCA9IHRoaXMubWlkcG9pbnRFbGxpcHNlKGN4LGN5LCB3LGgsIHMsZSk7CisgIHBbcC5sZW5n
dGhdID0gY3g7CisgIHBbcC5sZW5ndGhdID0gY3k7CisgIGZ1bmN0aW9uIHgoaSkgeyByZXR1cm4g
cFtpKjJdOyB9OworICBmdW5jdGlvbiB5KGkpIHsgcmV0dXJuIHBbaSoyKzFdOyB9OworICB0aGlz
LnBvbHlnb25OWFkob3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIHAubGVuZ3RoLzIsIHgsIHkpOwor
fQorCisvLyBvdmFsIGFyY3MKKy8vIGdlbmVyYXRlIHBvaW50cyBvZiBvdmFsIGNpcmN1bWZlcmVu
Y2UKKy8vIG1pZHBvaW50IGVsbGlwc2UsIEZvbGV5ICYgdmFuIERhbSwgMm5kIEVkaXRpb24sIHAu
IDkwLCAxOTkwCitQbmdsZXQucHJvdG90eXBlLm1pZHBvaW50RWxsaXBzZSA9IGZ1bmN0aW9uKGN4
LGN5LCB3LGgsIHMsZSkgeworICB2YXIgYSA9IE1hdGguZmxvb3Iody8yKSwgYiA9IE1hdGguZmxv
b3IoaC8yKTsKKyAgdmFyIGEyID0gYSphLCBiMiA9IGIqYiwgeCA9IDAsIHkgPSBiOworICB2YXIg
ZDEgPSBiMiAtIGEyKmIgKyBhMi80OworICBjeCA9IE1hdGguZmxvb3IoY3gpOworICBjeSA9IE1h
dGguZmxvb3IoY3kpOworICB2YXIgcCA9IG5ldyBBcnJheSgpOworCisgIC8vIHF1YWRyYW50IEks
IGFudGljbG9ja3dpc2UKKyAgcC5wdXNoKHgsLXkpOworICB3aGlsZSAoYTIqKHktMS8yKSA+IGIy
Kih4KzEpKSB7CisJaWYgKGQxIDwgMCkgeworICAgICAgZDEgKz0gYjIqKDIqeCszKTsKKwl9IGVs
c2UgeworICAgICAgZDEgKz0gYjIqKDIqeCszKSArIGEyKigtMip5ICsgMik7CisgICAgICB5IC09
IDE7CisJfQorCXggKz0gMTsKKwlwLnVuc2hpZnQoeCwteSk7CisgIH0KKyAgdmFyIGQyID0gYjIq
KHgrMS8yKSooeCsxLzIpICsgYTIqKHktMSkqKHktMSkgLSBhMipiMjsKKyAgd2hpbGUgKHkgPiAw
KSB7CisJaWYgKGQyIDwgMCkgeworICAgICAgZDIgKz0gYjIqKDIqeCsyKSArIGEyKigtMip5KzMp
OworICAgICAgeCArPSAxOworCX0gZWxzZSB7CisgICAgICBkMiArPSBhMiooLTIqeSszKTsKKwl9
CisJeSAtPSAxOworCXAudW5zaGlmdCh4LC15KTsKKyAgfQorICAvLyBxdWFkcmFudCBJSSwgYW50
aWNsb2Nrd2lzZQorICB2YXIgbjQgPSBwLmxlbmd0aDsKKyAgZm9yICh2YXIgaSA9IG40LTQ7IGkg
Pj0gMDsgaSAtPSAyKQorICAgIHAucHVzaCgtcFtpXSwgcFtpKzFdKTsKKyAgLy8gcXVhZHJhbnRz
IElJSSBhbmQgSVYsIGFudGljbG9ja3dpc2UKKyAgdmFyIG4yID0gcC5sZW5ndGg7CisgIGZvciAo
aSA9IG4yLTQ7IGkgPiAwOyBpIC09IDIpCisgICAgcC5wdXNoKHBbaV0sIC1wW2krMV0pOworCisg
IC8vIGNvbXB1dGUgc3RhcnQgYW5kIGVuZCBpbmRleGVzIGZyb20gc3RhcnQgYW5kIGV4dGVudAor
ICBlICU9IDM2MDsKKyAgaWYgKGUgPCAwKSB7CisJcyArPSBlOworCWUgPSAtZTsKKyAgfQorICBz
ICU9IDM2MDsKKyAgaWYgKHMgPCAwKQorCXMgKz0gMzYwOworICB2YXIgaXMgPSBNYXRoLmZsb29y
KHMvMzU5ICogcC5sZW5ndGgvMik7CisgIHZhciBpZSA9IE1hdGguZmxvb3IoZS8zNTkgKiBwLmxl
bmd0aC8yKSsxOworICBwID0gcC5zbGljZShpcyoyKS5jb25jYXQocC5zbGljZSgwLCBpcyoyKSku
c2xpY2UoMCwgaWUqMik7CisKKyAgLy8gZGlzcGxhY2UgdG8gY2VudGVyCisgIGZvciAoaSA9IDA7
IGkgPCBwLmxlbmd0aDsgaSArPSAyKSB7CisJcFtpXSArPSBjeDsKKwlwW2krMV0gKz0gY3k7Cisg
IH0KKyAgcmV0dXJuIHA7Cit9CisKKy8vIGZpbGwgYSByZWdpb24gCisvLyBmcm9tIGdkMS4zIHdp
dGggbW9kaWZpY2F0aW9ucworUG5nbGV0LnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24ob3V0bGlu
ZUNvbG9yLGZpbGxDb2xvcix4LHkpIHsKKyAgaWYgKG91dGxpbmVDb2xvcikgewkJCS8vIGZpbGwg
dG8gb3V0bGluZSBjb2xvcgorCS8qIFNlZWsgbGVmdCAqLworCXZhciBsZWZ0TGltaXQgPSAtMTsK
Kwlmb3IgKHZhciBpID0geDsgaSA+PSAwICYmIHRoaXMuZ2V0UG9pbnQoaSwgeSkgIT0gb3V0bGlu
ZUNvbG9yOyBpIC09IDEpCisgICAgICBsZWZ0TGltaXQgPSBpOworCQorCWlmIChsZWZ0TGltaXQg
PT0gLTEpCisgICAgICByZXR1cm47CisKKwkvKiBTZWVrIHJpZ2h0ICovCisJdmFyIHJpZ2h0TGlt
aXQgPSB4OworCWZvciAoaSA9ICh4KzEpOyBpIDwgdGhpcy53aWR0aCAmJiB0aGlzLmdldFBvaW50
KGksIHkpICE9IG91dGxpbmVDb2xvcjsgaSArPSAxKQorICAgICAgcmlnaHRMaW1pdCA9IGk7CisK
KwkvKiBmaWxsIGV4dGVudCBmb3VuZCAqLworCXRoaXMuaG9yaXpvbnRhbExpbmUoZmlsbENvbG9y
LCBsZWZ0TGltaXQsIHJpZ2h0TGltaXQsIHkpOworCisJLyogU2VlayBhYm92ZSBhbmQgYmVsb3cg
Ki8KKwlmb3IgKHZhciBkeSA9IC0xOyBkeSA8PSAxOyBkeSArPSAyKSB7CisgICAgICBpZiAodGhp
cy5pbkJvdW5kcyh4LHkrZHkpKSB7CisJCXZhciBsYXN0Qm9yZGVyID0gMTsKKwkJZm9yIChpID0g
bGVmdExpbWl0OyBpIDw9IHJpZ2h0TGltaXQ7IGkrKykgeworICAgICAgICAgIHZhciBjID0gdGhp
cy5nZXRQb2ludChpLCB5K2R5KTsKKyAgICAgICAgICBpZiAobGFzdEJvcmRlcikgeworCQkJaWYg
KChjICE9IG91dGxpbmVDb2xvcikgJiYgKGMgIT0gZmlsbENvbG9yKSkgewkKKyAgICAgICAgICAg
ICAgdGhpcy5maWxsKG91dGxpbmVDb2xvciwgZmlsbENvbG9yLCBpLCB5K2R5KTsKKyAgICAgICAg
ICAgICAgbGFzdEJvcmRlciA9IDA7CisJCQl9CisgICAgICAgICAgfSBlbHNlIGlmICgoYyA9PSBv
dXRsaW5lQ29sb3IpIHx8IChjID09IGZpbGxDb2xvcikpIHsKKwkJCWxhc3RCb3JkZXIgPSAxOwor
ICAgICAgICAgIH0KKwkJfQorICAgICAgfQorCX0KKyAgICAKKyAgfSBlbHNlIHsJCQkvLyBmbG9v
ZCBmaWxsIGNvbG9yIGF0IHgsIHkgCisJLyogVGVzdCBmb3IgY29tcGxldGlvbiAqLworCXZhciBv
bGRDb2xvciA9IHRoaXMuZ2V0UG9pbnQoeCwgeSk7CisJaWYgKG9sZENvbG9yID09IGZpbGxDb2xv
cikKKyAgICAgIHJldHVybjsKKworCS8qIFNlZWsgbGVmdCAqLworCWxlZnRMaW1pdCA9ICgtMSk7
CisJZm9yIChpID0geDsgaSA+PSAwICYmIHRoaXMuZ2V0UG9pbnQoaSwgeSkgPT0gb2xkQ29sb3I7
IGktLSkKKyAgICAgIGxlZnRMaW1pdCA9IGk7CisKKwlpZiAobGVmdExpbWl0ID09IC0xKQorICAg
ICAgcmV0dXJuOworCisJLyogU2VlayByaWdodCAqLworCXJpZ2h0TGltaXQgPSB4OworCWZvciAo
aSA9ICh4KzEpOyBpIDwgdGhpcy53aWR0aCAmJiB0aGlzLmdldFBvaW50KGksIHkpID09IG9sZENv
bG9yOyBpKyspCisgICAgICByaWdodExpbWl0ID0gaTsKKworCS8qIEZpbGwgZXh0ZW50IGZvdW5k
ICovCisJdGhpcy5ob3Jpem9udGFsTGluZShmaWxsQ29sb3IsIGxlZnRMaW1pdCwgcmlnaHRMaW1p
dCwgeSk7CisKKwkvKiBTZWVrIGFib3ZlIGFuZCBiZWxvdyAqLworCWZvciAoZHkgPSAtMTsgZHkg
PD0gMTsgZHkgKz0gMikgeworICAgICAgaWYgKHRoaXMuaW5Cb3VuZHMoeCx5K2R5KSkgeworCQls
YXN0Qm9yZGVyID0gMTsKKwkJZm9yIChpID0gbGVmdExpbWl0OyBpIDw9IHJpZ2h0TGltaXQ7IGkr
KykgeworICAgICAgICAgIGMgPSB0aGlzLmdldFBvaW50KGksIHkrZHkpOworICAgICAgICAgIGlm
IChsYXN0Qm9yZGVyKSB7CisJCQlpZiAoYyA9PSBvbGRDb2xvcikgewkKKyAgICAgICAgICAgICAg
dGhpcy5maWxsKG51bGwsIGZpbGxDb2xvciwgaSwgeStkeSk7CisgICAgICAgICAgICAgIGxhc3RC
b3JkZXIgPSAwOworCQkJfQorICAgICAgICAgIH0gZWxzZSBpZiAoYyAhPSBvbGRDb2xvcikgewor
CQkJbGFzdEJvcmRlciA9IDE7CisgICAgICAgICAgfQorCQl9CisgICAgICB9CisJfQorICB9Cit9
CisKKy8vIHNtb290aGVkIHBvaW50cworUG5nbGV0LnByb3RvdHlwZS5zbW9vdGhQb2ludCA9IGZ1
bmN0aW9uKHNtb290aFN0ZXBzLCBwb2ludENvbG9yLCB4MCwgeTApIHsKKyAgdmFyIGEgPSBhcmd1
bWVudHMsIHNlbGYgPSB0aGlzLCBuID0gKGEubGVuZ3RoLTIpLzI7CisgIHRoaXMuc21vb3RoKHNt
b290aFN0ZXBzLAorICAgICAgICAgICAgICBmdW5jdGlvbihuLCB4LCB5KSB7IHNlbGYucG9pbnRO
WFkocG9pbnRDb2xvciwgbiwgeCwgeSk7IH0sCisgICAgICAgICAgICAgIG4sCisgICAgICAgICAg
ICAgIGZ1bmN0aW9uKGkpIHsgcmV0dXJuIGFbMippKzJdOyB9LAorICAgICAgICAgICAgICBmdW5j
dGlvbihpKSB7IHJldHVybiBhWzIqaSszXTsgfSk7Cit9CisKKy8vIHNtb290aGVkIHBvbHlsaW5l
CitQbmdsZXQucHJvdG90eXBlLnNtb290aExpbmUgPSBmdW5jdGlvbihzbW9vdGhTdGVwcywgbGlu
ZUNvbG9yLCB4MCwgeTApIHsKKyAgdmFyIGEgPSBhcmd1bWVudHMsIHNlbGYgPSB0aGlzLCBuID0g
KGEubGVuZ3RoLTIpLzI7CisgIHRoaXMuc21vb3RoKHNtb290aFN0ZXBzLAorICAgICAgICAgICAg
ICBmdW5jdGlvbihuLCB4LCB5KSB7IHNlbGYubGluZU5YWShsaW5lQ29sb3IsIG4sIHgsIHkpOyB9
LAorICAgICAgICAgICAgICBuLAorICAgICAgICAgICAgICBmdW5jdGlvbihpKSB7IHJldHVybiBh
WzIqaSsyXTsgfSwKKyAgICAgICAgICAgICAgZnVuY3Rpb24oaSkgeyByZXR1cm4gYVsyKmkrM107
IH0pOworfQorCisvLyBzbW9vdGhlZCBwb2x5Z29uCitQbmdsZXQucHJvdG90eXBlLnNtb290aFBv
bHlnb24gPSBmdW5jdGlvbihzbW9vdGhTdGVwcywgb3V0bGluZUNvbG9yLCBmaWxsQ29sb3IsIHgw
LCB5MCkgeworICB2YXIgYSA9IGFyZ3VtZW50cywgc2VsZiA9IHRoaXMsIG4gPSAoYS5sZW5ndGgt
MykvMiArIDE7CisgIHRoaXMuc21vb3RoKHNtb290aFN0ZXBzLAorICAgICAgICAgICAgICBmdW5j
dGlvbihuLCB4LCB5KSB7IHNlbGYucG9seWdvbk5YWShvdXRsaW5lQ29sb3IsIGZpbGxDb2xvciwg
biwgeCwgeSk7IH0sCisgICAgICAgICAgICAgIG4sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGkp
IHsgcmV0dXJuIGFbMiooaSUobi0xKSkrM107IH0sCisgICAgICAgICAgICAgIGZ1bmN0aW9uKGkp
IHsgcmV0dXJuIGFbMiooaSUobi0xKSkrNF07IH0pOworfQorICAgIAorLy8gZ2VuZXJhdGUgc21v
b3RoU3RlcHMgcG9pbnRzIGZvciB0aGUgbGluZSBzZWdtZW50IGNvbm5lY3RpbmcKKy8vIGVhY2gg
Y29uc2VjdXRpdmUgcGFpciBvZiBwb2ludHMgaW4geChpKSwgeShpKS4KKy8vIGFkYXB0ZWQgZnJv
bSB0aGUgc291cmNlIGZvciB0azguMWIzLCBodHRwOi8vd3d3LnNjcmlwdGljcy5jb20KK1BuZ2xl
dC5wcm90b3R5cGUuc21vb3RoID0gZnVuY3Rpb24oc21vb3RoU3RlcHMsIGZOWFksIG4sIHgsIHkp
IHsKKyAgdmFyIGNvbnRyb2wgPSBuZXcgQXJyYXkoOCk7CisgIHZhciBvdXRwdXRQb2ludHMgPSAw
OworICB2YXIgZGJsUG9pbnRzID0gbmV3IEFycmF5KCk7CisKKyAgLy8gY29tcHV0ZSBudW1TdGVw
cyBvZiBzbW9vdGhlZCBwb2ludHMKKyAgLy8gYWNjb3JkaW5nIHRvIHRoZSBiYXNpcyBpbiBjb250
cm9sW10KKyAgLy8gcGxhY2luZyBwb2ludHMgaW50byBjb29yZFB0cltjb29yZE9mZl0KKyAgZnVu
Y3Rpb24gc21vb3RoUG9pbnRzKGNvbnRyb2wsIG51bVN0ZXBzLCBjb29yZFB0ciwgY29vcmRPZmYp
IHsKKwlmb3IgKHZhciBpID0gMTsgaSA8PSBudW1TdGVwczsgaSsrLCBjb29yZE9mZiArPSAyKSB7
CisgICAgICB2YXIgdCA9IGkvbnVtU3RlcHMsIHQyID0gdCp0LCB0MyA9IHQyKnQsCisJCXUgPSAx
LjAgLSB0LCB1MiA9IHUqdSwgdTMgPSB1Mip1OworICAgICAgY29vcmRQdHJbY29vcmRPZmYrMF0g
PSBjb250cm9sWzBdKnUzICsgMy4wICogKGNvbnRyb2xbMl0qdCp1MiArIGNvbnRyb2xbNF0qdDIq
dSkgKyBjb250cm9sWzZdKnQzOworICAgICAgY29vcmRQdHJbY29vcmRPZmYrMV0gPSBjb250cm9s
WzFdKnUzICsgMy4wICogKGNvbnRyb2xbM10qdCp1MiArIGNvbnRyb2xbNV0qdDIqdSkgKyBjb250
cm9sWzddKnQzOworCX0KKyAgfTsKKworICAvKgorICAgKiBJZiB0aGUgY3VydmUgaXMgYSBjbG9z
ZWQgb25lIHRoZW4gZ2VuZXJhdGUgYSBzcGVjaWFsIHNwbGluZQorICAgKiB0aGF0IHNwYW5zIHRo
ZSBsYXN0IHBvaW50cyBhbmQgdGhlIGZpcnN0IG9uZXMuICBPdGhlcndpc2UKKyAgICoganVzdCBw
dXQgdGhlIGZpcnN0IHBvaW50IGludG8gdGhlIG91dHB1dC4KKyAgICovCisKKyAgdmFyIGNsb3Nl
ZCA9ICh4KDApID09IHgobi0xKSkgJiYgKHkoMCkgPT0geShuLTEpKTsKKyAgaWYgKGNsb3NlZCkg
eworCWNvbnRyb2xbMF0gPSAwLjUqeChuLTIpICsgMC41KngoMCk7CisJY29udHJvbFsxXSA9IDAu
NSp5KG4tMikgKyAwLjUqeSgwKTsKKwljb250cm9sWzJdID0gMC4xNjcqeChuLTIpICsgMC44MzMq
eCgwKTsKKwljb250cm9sWzNdID0gMC4xNjcqeShuLTIpICsgMC44MzMqeSgwKTsKKwljb250cm9s
WzRdID0gMC44MzMqeCgwKSArIDAuMTY3KngoMSk7CisJY29udHJvbFs1XSA9IDAuODMzKnkoMCkg
KyAwLjE2Nyp5KDEpOworCWNvbnRyb2xbNl0gPSAwLjUqeCgwKSArIDAuNSp4KDEpOworCWNvbnRy
b2xbN10gPSAwLjUqeSgwKSArIDAuNSp5KDEpOworCWRibFBvaW50c1syKm91dHB1dFBvaW50cysw
XSA9IGNvbnRyb2xbMF07CisJZGJsUG9pbnRzWzIqb3V0cHV0UG9pbnRzKzFdID0gY29udHJvbFsx
XTsKKwlvdXRwdXRQb2ludHMgKz0gMTsKKwlzbW9vdGhQb2ludHMoY29udHJvbCwgc21vb3RoU3Rl
cHMsIGRibFBvaW50cywgMipvdXRwdXRQb2ludHMpOworCW91dHB1dFBvaW50cyArPSBzbW9vdGhT
dGVwczsKKyAgfSBlbHNlIHsKKwlkYmxQb2ludHNbMipvdXRwdXRQb2ludHMrMF0gPSB4KDApOwor
CWRibFBvaW50c1syKm91dHB1dFBvaW50cysxXSA9IHkoMCk7CisJb3V0cHV0UG9pbnRzICs9IDE7
CisgIH0KKworICBmb3IgKHZhciBpID0gMjsgaSA8IG47IGkgKz0gMSkgeworCXZhciBqID0gaSAt
IDI7CisJLyoKKwkgKiBTZXQgdXAgdGhlIGZpcnN0IHR3byBjb250cm9sIHBvaW50cy4gIFRoaXMg
aXMgZG9uZQorCSAqIGRpZmZlcmVudGx5IGZvciB0aGUgZmlyc3Qgc3BsaW5lIG9mIGFuIG9wZW4g
Y3VydmUKKwkgKiB0aGFuIGZvciBvdGhlciBjYXNlcy4KKwkgKi8KKwlpZiAoKGkgPT0gMikgJiYg
IWNsb3NlZCkgeworICAgICAgY29udHJvbFswXSA9IHgoaik7CisgICAgICBjb250cm9sWzFdID0g
eShqKTsKKyAgICAgIGNvbnRyb2xbMl0gPSAwLjMzMyp4KGopICsgMC42NjcqeChqKzEpOworICAg
ICAgY29udHJvbFszXSA9IDAuMzMzKnkoaikgKyAwLjY2Nyp5KGorMSk7CisJfSBlbHNlIHsKKyAg
ICAgIGNvbnRyb2xbMF0gPSAwLjUqeChqKSArIDAuNSp4KGorMSk7CisgICAgICBjb250cm9sWzFd
ID0gMC41KnkoaikgKyAwLjUqeShqKzEpOworICAgICAgY29udHJvbFsyXSA9IDAuMTY3Kngoaikg
KyAwLjgzMyp4KGorMSk7CisgICAgICBjb250cm9sWzNdID0gMC4xNjcqeShqKSArIDAuODMzKnko
aisxKTsKKwl9CisKKwkvKgorCSAqIFNldCB1cCB0aGUgbGFzdCB0d28gY29udHJvbCBwb2ludHMu
ICBUaGlzIGlzIGRvbmUKKwkgKiBkaWZmZXJlbnRseSBmb3IgdGhlIGxhc3Qgc3BsaW5lIG9mIGFu
IG9wZW4gY3VydmUKKwkgKiB0aGFuIGZvciBvdGhlciBjYXNlcy4KKwkgKi8KKworCWlmICgoaSA9
PSAobi0xKSkgJiYgIWNsb3NlZCkgeworICAgICAgY29udHJvbFs0XSA9IC42NjcqeChqKzEpICsg
LjMzMyp4KGorMik7CisgICAgICBjb250cm9sWzVdID0gLjY2Nyp5KGorMSkgKyAuMzMzKnkoaisy
KTsKKyAgICAgIGNvbnRyb2xbNl0gPSB4KGorMik7CisgICAgICBjb250cm9sWzddID0geShqKzIp
OworCX0gZWxzZSB7CisgICAgICBjb250cm9sWzRdID0gLjgzMyp4KGorMSkgKyAuMTY3Kngoaisy
KTsKKyAgICAgIGNvbnRyb2xbNV0gPSAuODMzKnkoaisxKSArIC4xNjcqeShqKzIpOworICAgICAg
Y29udHJvbFs2XSA9IDAuNSp4KGorMSkgKyAwLjUqeChqKzIpOworICAgICAgY29udHJvbFs3XSA9
IDAuNSp5KGorMSkgKyAwLjUqeShqKzIpOworCX0KKworCS8qCisJICogSWYgdGhlIGZpcnN0IHR3
byBwb2ludHMgY29pbmNpZGUsIG9yIGlmIHRoZSBsYXN0CisJICogdHdvIHBvaW50cyBjb2luY2lk
ZSwgdGhlbiBnZW5lcmF0ZSBhIHNpbmdsZQorCSAqIHN0cmFpZ2h0LWxpbmUgc2VnbWVudCBieSBv
dXRwdXR0aW5nIHRoZSBsYXN0IGNvbnRyb2wKKwkgKiBwb2ludC4KKwkgKi8KKworCWlmICgoKHgo
aikgPT0geChqKzEpKSAmJiAoeShqKSA9PSB5KGorMSkpKQorICAgICAgICB8fCAoKHgoaisxKSA9
PSB4KGorMikpICYmICh5KGorMSkgPT0geShqKzIpKSkpIHsKKwkgIGRibFBvaW50c1syKm91dHB1
dFBvaW50cyswXSA9IGNvbnRyb2xbNl07CisJICBkYmxQb2ludHNbMipvdXRwdXRQb2ludHMrMV0g
PSBjb250cm9sWzddOworCSAgb3V0cHV0UG9pbnRzICs9IDE7CisJICBjb250aW51ZTsKKwl9CisK
KwkvKgorCSAqIEdlbmVyYXRlIGEgQmV6aWVyIHNwbGluZSB1c2luZyB0aGUgY29udHJvbCBwb2lu
dHMuCisJICovCisJc21vb3RoUG9pbnRzKGNvbnRyb2wsIHNtb290aFN0ZXBzLCBkYmxQb2ludHMs
IDIqb3V0cHV0UG9pbnRzKTsKKwlvdXRwdXRQb2ludHMgKz0gc21vb3RoU3RlcHM7CisgIH0KKwor
ICAvLyBkcmF3IHRoZSBwb2ludHMKKyAgLy8gYW5vbnltb3VzIGZ1bmN0aW9ucyBkb24ndCB3b3Jr
IGhlcmUKKyAgLy8gdGhleSByZXN1bHQgaW4gInVuZGVmaW5lZCIgcG9pbnQgdmFsdWVzCisgIGZ1
bmN0aW9uIG15eChpKSB7IHJldHVybiBNYXRoLnJvdW5kKGRibFBvaW50c1syKmldKTsgfQorICAg
IGZ1bmN0aW9uIG15eShpKSB7IHJldHVybiBNYXRoLnJvdW5kKGRibFBvaW50c1syKmkrMV0pOyB9
CisgICAgZk5YWShvdXRwdXRQb2ludHMsIG15eCwgbXl5KTsKK30KKworLy8gb3V0cHV0IGEgUE5H
IHN0cmluZworUG5nbGV0LnByb3RvdHlwZS5vdXRwdXQgPSBmdW5jdGlvbigpIHsKKyAgLy8gb3V0
cHV0IHRyYW5zbGF0aW9ucworICBmdW5jdGlvbiBpbml0aWFsaXplKHBuZywgb2Zmcywgc3RyKSB7
CisJZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpICs9IDEpCisgICAgICBp
ZiAodHlwZW9mIGFyZ3VtZW50c1tpXS5sZW5ndGggIT0gInVuZGVmaW5lZCIpCisgICAgICAgIGZv
ciAodmFyIGogPSAwOyBqIDwgYXJndW1lbnRzW2ldLmxlbmd0aDsgaiArPSAxKQorICAgICAgICAg
IHBuZ1tvZmZzKytdID0gYXJndW1lbnRzW2ldLmNoYXJBdChqKTsKKyAgfQorICAgIGZ1bmN0aW9u
IGJ5dGU0KHcpIHsgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKHc+PjI0KSYyNTUsICh3Pj4x
NikmMjU1LCAodz4+OCkmMjU1LCB3JjI1NSk7IH0KKworICAgIC8vIGNvbXB1dGUgYWRsZXIzMiBv
ZiBvdXRwdXQgcGl4ZWxzICsgcm93IGZpbHRlciBieXRlcworICAgIHZhciBCQVNFID0gNjU1MjE7
IC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCisgIHZhciBOTUFYID0gNTU1
MjsgIC8qIE5NQVggaXMgdGhlIGxhcmdlc3QgbiBzdWNoIHRoYXQgMjU1bihuKzEpLzIgKyAobisx
KShCQVNFLTEpIDw9IDJeMzItMSAqLworICB2YXIgczEgPSAxOworICB2YXIgczIgPSAwOworICB2
YXIgbiA9IE5NQVg7CisgIGZvciAodmFyIHkgPSAwOyB5IDwgdGhpcy5oZWlnaHQ7IHkgKz0gMSkK
Kwlmb3IgKHZhciB4ID0gLTE7IHggPCB0aGlzLndpZHRoOyB4ICs9IDEpIHsKKyAgICAgIHMxICs9
IHRoaXMucG5nW3RoaXMuaW5kZXgoeCx5KV0uY2hhckNvZGVBdCgwKTsKKyAgICAgIHMyICs9IHMx
OworICAgICAgaWYgKChuIC09IDEpID09IDApIHsKKwkJczEgJT0gQkFTRTsKKwkJczIgJT0gQkFT
RTsKKwkJbiA9IE5NQVg7CisgICAgICB9CisJfQorICBzMSAlPSBCQVNFOworICBzMiAlPSBCQVNF
OworICBpbml0aWFsaXplKHRoaXMucG5nLCB0aGlzLmlkYXRfb2Zmcyt0aGlzLmlkYXRfc2l6ZS04
LCBieXRlNCgoczIgPDwgMTYpIHwgczEpKTsKKworICAvLyBjb21wdXRlIGNyYzMyIG9mIHRoZSBQ
TkcgY2h1bmtzCisgIGZ1bmN0aW9uIGNyYzMyKHBuZywgb2Zmcywgc2l6ZSkgeworCXZhciBjcmMg
PSAtMTsJCS8vIGluaXRpYWxpemUgY3JjCisJZm9yICh2YXIgaSA9IDQ7IGkgPCBzaXplLTQ7IGkg
Kz0gMSkKKyAgICAgIGNyYyA9IFBuZ2xldC5jcmMzMl90YWJsZVsoY3JjIF4gcG5nW29mZnMraV0u
Y2hhckNvZGVBdCgwKSkgJiAweGZmXSBeICgoY3JjID4+IDgpICYgMHgwMGZmZmZmZik7CisJaW5p
dGlhbGl6ZShwbmcsIG9mZnMrc2l6ZS00LCBieXRlNChjcmMgXiAtMSkpOworICB9CisKKyAgICBj
cmMzMih0aGlzLnBuZywgdGhpcy5paGRyX29mZnMsIHRoaXMuaWhkcl9zaXplKTsKKyAgY3JjMzIo
dGhpcy5wbmcsIHRoaXMucGx0ZV9vZmZzLCB0aGlzLnBsdGVfc2l6ZSk7CisgIGNyYzMyKHRoaXMu
cG5nLCB0aGlzLnRybnNfb2ZmcywgdGhpcy50cm5zX3NpemUpOworICBjcmMzMih0aGlzLnBuZywg
dGhpcy5pZGF0X29mZnMsIHRoaXMuaWRhdF9zaXplKTsKKyAgY3JjMzIodGhpcy5wbmcsIHRoaXMu
aWVuZF9vZmZzLCB0aGlzLmllbmRfc2l6ZSk7CisKKyAgLy8gY29udmVydCBQTkcgdG8gc3RyaW5n
CisgIHJldHVybiAiXDIxMVBOR1xyXG5cMDMyXG4iK3RoaXMucG5nLmpvaW4oJycpOworfQorCisv
KiBUYWJsZSBvZiBDUkNzIG9mIGFsbCA4LWJpdCBtZXNzYWdlcy4gKi8KK1BuZ2xldC5jcmMzMl90
YWJsZSA9IG5ldyBBcnJheSgyNTYpOworZm9yICh2YXIgbiA9IDA7IG4gPCAyNTY7IG4rKykgewor
ICB2YXIgYyA9IG47CisgIGZvciAodmFyIGsgPSAwOyBrIDwgODsgaysrKSB7CisgICAgaWYgKGMg
JiAxKQorICAgICAgYyA9IC0zMDY2NzQ5MTIgXiAoKGMgPj4gMSkgJiAweDdmZmZmZmZmKTsKKyAg
ICBlbHNlCisgICAgICBjID0gKGMgPj4gMSkgJiAweDdmZmZmZmZmOworICB9CisgIFBuZ2xldC5j
cmMzMl90YWJsZVtuXSA9IGM7Cit9Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHk+Cis8cD5T
aG91bGQgc2VlIGEgbGlnaHQgZ3JlZW4gcmVjdGFuZ2xlOjwvcD4KKzxkaXYgaWQ9cmVzdWx0Pjwv
ZGl2PgorPHNjcmlwdD4KKwlwbmdkYXRhID0gbmV3IFBuZ2xldCgxLDEsMSk7CisJcG5nZGF0YS5w
b2ludChwbmdkYXRhLmNvbG9yKDAsMjU1LDAsMTI3KSwxLDEpOworCisJcG5nID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiaW1nIik7CisJcG5nLnN0eWxlLmhlaWdodCA9ICIxMDBweCI7CisJcG5n
LnN0eWxlLndpZHRoID0gIjEwMHB4IjsKKwkKKwlwbmcuc3JjID0gImRhdGE6aW1hZ2UvcG5nO2Jh
c2U2NCwiICsgYnRvYShwbmdkYXRhLm91dHB1dCgpKTsKKwlkb2N1bWVudC5nZXRFbGVtZW50QnlJ
ZCgncmVzdWx0JykuYXBwZW5kQ2hpbGQocG5nKTsKKzwvc2NyaXB0PgorPC9ib2R5PgpcIE5vIG5l
d2xpbmUgYXQgZW5kIG9mIGZpbGUKClByb3BlcnR5IGNoYW5nZXMgb246IExheW91dFRlc3RzL2Zh
c3QvZG9tL1dpbmRvdy9idG9hLXBuZ2xldC5odG1sCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUt
dHlwZQogICArIHRleHQvaHRtbAoKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvZG9tL1dpbmRvdy93
aW5kb3ctcHJvcGVydGllcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
ZmFzdC9kb20vV2luZG93L3dpbmRvdy1wcm9wZXJ0aWVzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MTc2NjEpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvd2luZG93LXByb3BlcnRpZXMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC01MzUsNyArNTM1LDkgQEAgd2luZG93LlhT
TFRQcm9jZXNzb3IucHJvdG90eXBlLnRyYW5zZm9ybQogd2luZG93LmFkZEV2ZW50TGlzdGVuZXIg
W2Z1bmN0aW9uXQogd2luZG93LmFsZXJ0IFtmdW5jdGlvbl0KIHdpbmRvdy5hcHBsZVNjcmlwdENv
bnRyb2xsZXIgW29iamVjdCBSdW50aW1lT2JqZWN0XQord2luZG93LmF0b2IgW2Z1bmN0aW9uXQog
d2luZG93LmJsdXIgW2Z1bmN0aW9uXQord2luZG93LmJ0b2EgW2Z1bmN0aW9uXQogd2luZG93LmNh
cHR1cmVFdmVudHMgW2Z1bmN0aW9uXQogd2luZG93LmNsZWFySW50ZXJ2YWwgW2Z1bmN0aW9uXQog
d2luZG93LmNsZWFyVGltZW91dCBbZnVuY3Rpb25dCkluZGV4OiBXZWJDb3JlL0NoYW5nZUxvZwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTc2NjEpCisrKyBXZWJD
b3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDIxIEBACisyMDA2LTExLTA4
ICBBbGV4ZXkgUHJvc2t1cnlha292ICA8YXBAbnlwb3AuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGh0dHA6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk2NzMKKyAgICAgICAgQWRkIHN1cHBvcnQgZm9yIHdpbmRvdy5hdG9iKCkg
YW5kIHdpbmRvdy5idG9hKCkKKworICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogQWRkZWQgQmFzZTY0LntoLGNwcH0KKyAgICAgICAgKiBiaW5kaW5ncy9qcy9ranNf
d2luZG93LmNwcDoKKyAgICAgICAgKEtKUzo6V2luZG93RnVuYzo6Y2FsbEFzRnVuY3Rpb24pOgor
ICAgICAgICAqIGJpbmRpbmdzL2pzL2tqc193aW5kb3cuaDoKKyAgICAgICAgKEtKUzo6V2luZG93
OjopOgorICAgICAgICAqIHBsYXRmb3JtL0Jhc2U2NC5jcHA6IEFkZGVkLgorICAgICAgICAoc3Ry
bmNhc2VjbXApOgorICAgICAgICAoYmFzZTY0RW5jb2RlKToKKyAgICAgICAgKGJhc2U2NERlY29k
ZSk6CisgICAgICAgICogcGxhdGZvcm0vQmFzZTY0Lmg6IEFkZGVkLgorCiAyMDA2LTExLTA4ICBC
cmFkeSBFaWRzb24gPGJlaWRzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1h
Y2llagpJbmRleDogV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3RyaW5nRXh0cmFzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9Gb3J3YXJkaW5nSGVhZGVycy93dGYvU3RyaW5nRXh0cmFz
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL0ZvcndhcmRpbmdIZWFkZXJzL3d0Zi9TdHJpbmdF
eHRyYXMuaAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSBAQAorI2ltcG9ydCA8SmF2YVNjcmlwdENv
cmUvU3RyaW5nRXh0cmFzLmg+CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBXZWJDb3JlL0ZvcndhcmRp
bmdIZWFkZXJzL3d0Zi9TdHJpbmdFeHRyYXMuaApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5
bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagkocmV2aXNpb24gMTc2NjEpCisrKyBXZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMjcwMyw2ICsyNzAzLDggQEAKIAkJREIy
M0MyQ0MwQTUwOEQyOTAwMjQ4OUVCIC8qIEluZGVudE91dGRlbnRDb21tYW5kLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBEQjIzQzJDQTBBNTA4RDI5MDAy
NDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCAqLzsgfTsKIAkJREQ3NjNCQjIwOTkyQzJD
OTAwNzQwQjhFIC8qIGxpYnhtbDIuZHlsaWIgaW4gRnJhbWV3b3JrcyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBERDc2M0JCMTA5OTJDMkM5MDA3NDBCOEUgLyogbGlieG1sMi5k
eWxpYiAqLzsgfTsKIAkJREQ3Q0RGMjUwQTIzQ0Y5ODAwMDY5OTI4IC8qIENTU1Vua25vd25SdWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBODBFNkND
RTBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTVW5rbm93blJ1bGUuaCAqLzsgfTsKKwkJRTEwM0EyMkUw
QjAyNDA1RDAwODY0QUFDIC8qIEJhc2U2NC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gRTEwM0EyMkMwQjAyNDA1RDAwODY0QUFDIC8qIEJhc2U2NC5oICov
OyB9OworCQlFMTAzQTIyRjBCMDI0MDVEMDA4NjRBQUMgLyogQmFzZTY0LmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUxMDNBMjJEMEIwMjQwNUQwMDg2
NEFBQyAvKiBCYXNlNjQuY3BwICovOyB9OwogCQlFMTQ4NDJERTBBNjc0OTM0MDA3RTREMzkgLyog
VGV4dENvZGVjSUNVLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSBFMTQ4NDJERDBBNjc0OTM0MDA3RTREMzkgLyogVGV4dENvZGVjSUNVLmggKi87IH07CiAJ
CUUxNDg0MkZGMEE2NzRBMzEwMDdFNEQzOSAvKiBUZXh0Q29kZWNJQ1UuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTE0ODQyRkUwQTY3NEEzMTAwN0U0
RDM5IC8qIFRleHRDb2RlY0lDVS5jcHAgKi87IH07CiAJCUUxNDg0MzJGMEE2NzRGQzIwMDdFNEQz
OSAvKiBUZXh0Q29kZWNNYWMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEUxNDg0MzJFMEE2NzRGQzIwMDdFNEQzOSAvKiBUZXh0Q29kZWNNYWMuaCAqLzsg
fTsKQEAgLTU2ODcsNiArNTY4OSw4IEBACiAJCURCMjNDMkM5MEE1MDhEMjkwMDI0ODlFQiAvKiBJ
bmRlbnRPdXRkZW50Q29tbWFuZC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW5kZW50T3V0ZGVudENvbW1hbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlEQjIzQzJDQTBBNTA4RDI5MDAyNDg5RUIgLyogSW5kZW50T3V0ZGVudENvbW1hbmQuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluZGVudE91dGRlbnRDb21tYW5kLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCURENzYzQkIxMDk5MkMyQzkwMDc0MEI4RSAv
KiBsaWJ4bWwyLmR5bGliICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZp
bGVUeXBlID0gImNvbXBpbGVkLm1hY2gtby5keWxpYiI7IG5hbWUgPSBsaWJ4bWwyLmR5bGliOyBw
YXRoID0gL3Vzci9saWIvbGlieG1sMi5keWxpYjsgc291cmNlVHJlZSA9ICI8YWJzb2x1dGU+Ijsg
fTsKKwkJRTEwM0EyMkMwQjAyNDA1RDAwODY0QUFDIC8qIEJhc2U2NC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBCYXNlNjQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
KwkJRTEwM0EyMkQwQjAyNDA1RDAwODY0QUFDIC8qIEJhc2U2NC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBCYXNlNjQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQlFMTQ4NDJERDBBNjc0OTM0MDA3RTREMzkgLyogVGV4dENvZGVjSUNVLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFRleHRDb2RlY0lDVS5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQlFMTQ4NDJGRTBBNjc0QTMxMDA3RTREMzkgLyogVGV4dENvZGVjSUNV
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFRleHRDb2RlY0lDVS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUUxNDg0MzJFMEE2NzRGQzIwMDdFNEQz
OSAvKiBUZXh0Q29kZWNNYWMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBsaW5lRW5kaW5n
ID0gMDsgbmFtZSA9IFRleHRDb2RlY01hYy5oOyBwYXRoID0gbWFjL1RleHRDb2RlY01hYy5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtODQ5OCw2ICs4NTAyLDggQEAKIAkJCQk5M0NE
NEZENzA5OTVGOUVBMDA3RUNDOTcgLyogQXRvbWljU3RyaW5nLmNwcCAqLywKIAkJCQk5M0NENEZE
ODA5OTVGOUVBMDA3RUNDOTcgLyogQXRvbWljU3RyaW5nLmggKi8sCiAJCQkJOTNDRDRGRDkwOTk1
RjlFQTAwN0VDQzk3IC8qIEF0b21pY1N0cmluZ0ltcGwuaCAqLywKKwkJCQlFMTAzQTIyQzBCMDI0
MDVEMDA4NjRBQUMgLyogQmFzZTY0LmggKi8sCisJCQkJRTEwM0EyMkQwQjAyNDA1RDAwODY0QUFD
IC8qIEJhc2U2NC5jcHAgKi8sCiAJCQkJNjVGNTM4MjAwOUIyQjU1NzAwRjNEQzRBIC8qIGNoYXJh
Y3Rlci1zZXRzLnR4dCAqLywKIAkJCQk5MzI2REMwQTA5REFENUJFMDBBRkM4NDcgLyogQ2hhcnNl
dERhdGEuaCAqLywKIAkJCQlCQ0M4Q0ZDODA5ODZDRDI0MDAxNDBCRjIgLyogQ29sb3IuY3BwICov
LApAQCAtMTA1MDMsNiArMTA1MDksNyBAQAogCQkJCTY1REFEQTAwMEFGRDg2QkYwMENFNTNFRCAv
KiBGb3JtRGF0YVN0cmVhbU1hYy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjVEQURBMTgwQUZEODc4
MDAwQ0U1M0VEIC8qIEZvcm1EYXRhLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNDhDRjY1RTBCMDA1
NjE0MDBBOTk3RkMgLyogU2NyZWVuLmggaW4gSGVhZGVycyAqLywKKwkJCQlFMTAzQTIyRTBCMDI0
MDVEMDA4NjRBQUMgLyogQmFzZTY0LmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5
Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKQEAgLTExNzQzLDYgKzExNzUw
LDcgQEAKIAkJCQkxNDAyNjkyRDBBRkU3MkQ4MDA1OTE5RTIgLyogU2NyZWVuTWFjLm1tIGluIFNv
dXJjZXMgKi8sCiAJCQkJNjVEQUQ5RkMwQUZEODZCNDAwQ0U1M0VEIC8qIEZvcm1EYXRhLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTY1REFEQTAxMEFGRDg2QkYwMENFNTNFRCAvKiBGb3JtRGF0YVN0
cmVhbU1hYy5tbSBpbiBTb3VyY2VzICovLAorCQkJCUUxMDNBMjJGMEIwMjQwNUQwMDg2NEFBQyAv
KiBCYXNlNjQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1l
bnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL2pzL2tq
c193aW5kb3cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dpbmRv
dy5jcHAJKHJldmlzaW9uIDE3NjYxKQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9ranNfd2luZG93
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNCw2ICs0LDcgQEAKICAqICBDb3B5cmlnaHQgKEMpIDIw
MDAgSGFycmkgUG9ydGVuIChwb3J0ZW5Aa2RlLm9yZykKICAqICBDb3B5cmlnaHQgKEMpIDIwMDYg
Sm9uIFNoaWVyIChqc2hpZXJAaWFzdGF0ZS5lZHUpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDA2IEFsZXhleSBQcm9za3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCiAgKgogICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCkBAIC0yMywxMiArMjQsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJr
anNfd2luZG93LmgiCiAKKyNpbmNsdWRlICJCYXNlNjQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIK
ICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAi
RWxlbWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TGlzdGVuZXIuaCIKICNpbmNsdWRlICJFdmVudE5h
bWVzLmgiCisjaW5jbHVkZSAiRXhjZXB0aW9uQ29kZS5oIgogI2luY2x1ZGUgIkZsb2F0UmVjdC5o
IgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiRnJhbWVMb2FkUmVxdWVzdC5oIgpAQCAt
MjIwLDYgKzIyMyw4IEBAIGNvbnN0IENsYXNzSW5mbyBXaW5kb3c6OmluZm8gPSB7ICJXaW5kb3cK
IAogLyoKIEBiZWdpbiBXaW5kb3dUYWJsZSAxMDMKKyAgYXRvYiAgICAgICAgICBXaW5kb3c6OkFU
b0IgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKKyAgYnRvYSAgICAgICAgICBXaW5k
b3c6OkJUb0EgICAgICAgICAgICBEb250RGVsZXRlfEZ1bmN0aW9uIDEKICAgY2xvc2VkICAgICAg
ICBXaW5kb3c6OkNsb3NlZCAgICAgICAgICBEb250RGVsZXRlfFJlYWRPbmx5CiAgIGNyeXB0byAg
ICAgICAgV2luZG93OjpDcnlwdG8gICAgICAgICAgRG9udERlbGV0ZXxSZWFkT25seQogICBkZWZh
dWx0U3RhdHVzIFdpbmRvdzo6RGVmYXVsdFN0YXR1cyAgIERvbnREZWxldGUKQEAgLTE1MzMsNiAr
MTUzOCwzMCBAQCBKU1ZhbHVlICpXaW5kb3dGdW5jOjpjYWxsQXNGdW5jdGlvbihFeGVjCiAgICAg
ZnJhbWUtPnJ1bkphdmFTY3JpcHRBbGVydChzdHIpOwogICAgIGV4ZWMtPmR5bmFtaWNJbnRlcnBy
ZXRlcigpLT5yZXN1bWVUaW1lb3V0Q2hlY2soKTsKICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
KyAgY2FzZSBXaW5kb3c6OkFUb0I6CisgIGNhc2UgV2luZG93OjpCVG9BOiB7CisgICAgaWYgKGFy
Z3Muc2l6ZSgpIDwgMSkKKyAgICAgICAgcmV0dXJuIHRocm93RXJyb3IoZXhlYywgU3ludGF4RXJy
b3IsICJOb3QgZW5vdWdoIGFyZ3VtZW50cyIpOworICAgIGlmICh2LT5pc051bGwoKSkKKyAgICAg
ICAgcmV0dXJuIGpzU3RyaW5nKCk7CisgICAgaWYgKCFzLmlzOEJpdCgpKSB7CisgICAgICAgIHNl
dERPTUV4Y2VwdGlvbihleGVjLCBJTlZBTElEX0NIQVJBQ1RFUl9FUlIpOworICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICB9CisgICAgCisgICAgVmVjdG9yPGNoYXI+IGluKHMuc2l6
ZSgpKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHMuc2l6ZSgpOyArK2kpCisgICAgICAgIGlu
W2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4ocy5kYXRhKClbaV0udW5pY29kZSgpKTsKKyAgICBWZWN0
b3I8Y2hhcj4gb3V0OworCisgICAgaWYgKGlkID09IFdpbmRvdzo6QVRvQikgeworICAgICAgICBp
ZiAoIWJhc2U2NERlY29kZShpbiwgb3V0KSkKKyAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9y
KGV4ZWMsIEdlbmVyYWxFcnJvciwgIkNhbm5vdCBkZWNvZGUgYmFzZTY0Iik7CisgICAgfSBlbHNl
CisgICAgICAgIGJhc2U2NEVuY29kZShpbiwgb3V0KTsKKyAgICAKKyAgICByZXR1cm4ganNTdHJp
bmcoU3RyaW5nKG91dC5kYXRhKCksIG91dC5zaXplKCkpKTsKKyAgfQogICBjYXNlIFdpbmRvdzo6
Q29uZmlybTogewogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgIGZy
YW1lLT5kb2N1bWVudCgpLT51cGRhdGVSZW5kZXJpbmcoKTsKSW5kZXg6IFdlYkNvcmUvYmluZGlu
Z3MvanMva2pzX3dpbmRvdy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvanMva2pz
X3dpbmRvdy5oCShyZXZpc2lvbiAxNzY2MSkKKysrIFdlYkNvcmUvYmluZGluZ3MvanMva2pzX3dp
bmRvdy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNyArMTU1LDcgQEAgbmFtZXNwYWNlIEtKUyB7
CiAgICAgVW5wcm90ZWN0ZWRMaXN0ZW5lcnNNYXAganNVbnByb3RlY3RlZEhUTUxFdmVudExpc3Rl
bmVyczsKICAgICB2aXJ0dWFsIGNvbnN0IENsYXNzSW5mbyogY2xhc3NJbmZvKCkgY29uc3QgeyBy
ZXR1cm4gJmluZm87IH0KICAgICBzdGF0aWMgY29uc3QgQ2xhc3NJbmZvIGluZm87Ci0gICAgZW51
bSB7IENsb3NlZCwgQ3J5cHRvLCBEZWZhdWx0U3RhdHVzLCBTdGF0dXMsIERPTUV4Y2VwdGlvbiwg
RnJhbWVzLCBIaXN0b3J5XywgRXZlbnRfLCBJbm5lckhlaWdodCwKKyAgICBlbnVtIHsgQVRvQiwg
QlRvQSwgQ2xvc2VkLCBDcnlwdG8sIERlZmF1bHRTdGF0dXMsIFN0YXR1cywgRE9NRXhjZXB0aW9u
LCBGcmFtZXMsIEhpc3RvcnlfLCBFdmVudF8sIElubmVySGVpZ2h0LAogICAgICAgICAgICBJbm5l
cldpZHRoLCBMZW5ndGgsIExvY2F0aW9uXywgTG9jYXRpb25iYXIsIE5hbWUsIE5hdmlnYXRvcl8s
IENsaWVudEluZm9ybWF0aW9uLAogICAgICAgICAgICBNZW51YmFyLCBPZmZzY3JlZW5CdWZmZXJp
bmcsIE9wZW5lciwgT3V0ZXJIZWlnaHQsIE91dGVyV2lkdGgsIFBhZ2VYT2Zmc2V0LCBQYWdlWU9m
ZnNldCwKICAgICAgICAgICAgUGFyZW50LCBQZXJzb25hbGJhciwgU2NyZWVuWCwgU2NyZWVuWSwg
U2Nyb2xsYmFycywgU2Nyb2xsLCBTY3JvbGxCeSwKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vQmFz
ZTY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5jcHAJKHJldmlz
aW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5jcHAJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTY3IEBACisvKgorICAgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDEgRGF3aXQgQWxlbWF5
ZWh1IDxhZGF3aXRAa2RlLm9yZz4KKyAgIENvcHlyaWdodCAoQykgMjAwNiBBbGV4ZXkgUHJvc2t1
cnlha292IDxhcEB3ZWJraXQub3JnPgorCisgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpCisg
ICB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24u
CisKKyAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgIEdOVSBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxLCBVU0EuCisKKyAgIFRoaXMgY29kZSBpcyBiYXNlZCBvbiB0aGUg
amF2YSBpbXBsZW1lbnRhdGlvbiBpbiBIVFRQQ2xpZW50CisgICBwYWNrYWdlIGJ5IFJvbmFsZCBU
c2NoYWzDpHIgQ29weXJpZ2h0IChDKSAxOTk2LTE5OTkuCisqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiQmFzZTY0LmgiCisKKyNpbmNsdWRlIDx3dGYvcGxhdGZvcm0uaD4KKyNp
bmNsdWRlIDx3dGYvU3RyaW5nRXh0cmFzLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyIGJhc2U2NEVu
Y01hcFs2NF0gPQoreworICAweDQxLCAweDQyLCAweDQzLCAweDQ0LCAweDQ1LCAweDQ2LCAweDQ3
LCAweDQ4LAorICAweDQ5LCAweDRBLCAweDRCLCAweDRDLCAweDRELCAweDRFLCAweDRGLCAweDUw
LAorICAweDUxLCAweDUyLCAweDUzLCAweDU0LCAweDU1LCAweDU2LCAweDU3LCAweDU4LAorICAw
eDU5LCAweDVBLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LAorICAweDY3LCAw
eDY4LCAweDY5LCAweDZBLCAweDZCLCAweDZDLCAweDZELCAweDZFLAorICAweDZGLCAweDcwLCAw
eDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LAorICAweDc3LCAweDc4LCAweDc5LCAw
eDdBLCAweDMwLCAweDMxLCAweDMyLCAweDMzLAorICAweDM0LCAweDM1LCAweDM2LCAweDM3LCAw
eDM4LCAweDM5LCAweDJCLCAweDJGCit9OworCitzdGF0aWMgY29uc3QgY2hhciBiYXNlNjREZWNN
YXBbMTI4XSA9Cit7CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
IDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAs
CisgIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4
MDAsIDB4M0UsIDB4MDAsIDB4MDAsIDB4MDAsIDB4M0YsCisgIDB4MzQsIDB4MzUsIDB4MzYsIDB4
MzcsIDB4MzgsIDB4MzksIDB4M0EsIDB4M0IsCisgIDB4M0MsIDB4M0QsIDB4MDAsIDB4MDAsIDB4
MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisgIDB4MDAsIDB4MDAsIDB4MDEsIDB4MDIsIDB4MDMsIDB4
MDQsIDB4MDUsIDB4MDYsCisgIDB4MDcsIDB4MDgsIDB4MDksIDB4MEEsIDB4MEIsIDB4MEMsIDB4
MEQsIDB4MEUsCisgIDB4MEYsIDB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4
MTYsCisgIDB4MTcsIDB4MTgsIDB4MTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsCisg
IDB4MDAsIDB4MUEsIDB4MUIsIDB4MUMsIDB4MUQsIDB4MUUsIDB4MUYsIDB4MjAsCisgIDB4MjEs
IDB4MjIsIDB4MjMsIDB4MjQsIDB4MjUsIDB4MjYsIDB4MjcsIDB4MjgsCisgIDB4MjksIDB4MkEs
IDB4MkIsIDB4MkMsIDB4MkQsIDB4MkUsIDB4MkYsIDB4MzAsCisgIDB4MzEsIDB4MzIsIDB4MzMs
IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAKK307CisKK3ZvaWQgYmFzZTY0RW5jb2RlKGNv
bnN0IFZlY3RvcjxjaGFyPiYgaW4sIFZlY3RvcjxjaGFyPiYgb3V0LCBib29sIGluc2VydExGcykK
K3sKKyAgICAvLyBjbGVhciBvdXQgdGhlIG91dHB1dCBidWZmZXIKKyAgICBvdXQuY2xlYXIoKTsK
KyAgICBpZiAoaW4uaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICB1bnNpZ25lZCBz
aWR4ID0gMDsKKyAgICB1bnNpZ25lZCBkaWR4ID0gMDsKKyAgICBjb25zdCBjaGFyKiBkYXRhID0g
aW4uZGF0YSgpOworICAgIGNvbnN0IHVuc2lnbmVkIGxlbiA9IGluLnNpemUoKTsKKworICAgIHVu
c2lnbmVkIG91dF9sZW4gPSAoKGxlbiArIDIpIC8gMykgKiA0OworCisgICAgLy8gRGVhbCB3aXRo
IHRoZSA3NiBjaGFyYWN0ZXJzIG9yIGxlc3MgcGVyCisgICAgLy8gbGluZSBsaW1pdCBzcGVjaWZp
ZWQgaW4gUkZDIDIwNDUgb24gYQorICAgIC8vIHByZSByZXF1ZXN0IGJhc2lzLgorICAgIGluc2Vy
dExGcyA9IChpbnNlcnRMRnMgJiYgb3V0X2xlbiA+IDc2KTsKKyAgICBpZiAoaW5zZXJ0TEZzKQor
ICAgICAgICBvdXRfbGVuICs9ICgob3V0X2xlbiAtIDEpIC8gNzYpOworCisgICAgaW50IGNvdW50
ID0gMDsKKyAgICBvdXQucmVzaXplKG91dF9sZW4pOworCisgICAgLy8gMy1ieXRlIHRvIDQtYnl0
ZSBjb252ZXJzaW9uICsgMC02MyB0byBhc2NpaSBwcmludGFibGUgY29udmVyc2lvbgorICAgIGlm
IChsZW4gPiAxKSB7CisgICAgICAgIHdoaWxlIChzaWR4IDwgbGVuIC0gMikgeworICAgICAgICAg
ICAgaWYgKGluc2VydExGcykgeworICAgICAgICAgICAgICAgIGlmIChjb3VudCAmJiAoY291bnQg
JSA3NikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgb3V0W2RpZHgrK10gPSAnXG4nOworICAg
ICAgICAgICAgICAgIGNvdW50ICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBvdXRb
ZGlkeCsrXSA9IGJhc2U2NEVuY01hcFsoZGF0YVtzaWR4XSA+PiAyKSAmIDA3N107CisgICAgICAg
ICAgICBvdXRbZGlkeCsrXSA9IGJhc2U2NEVuY01hcFsoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAw
MTcgfCAoZGF0YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAgICBvdXRbZGlkeCsrXSA9
IGJhc2U2NEVuY01hcFsoZGF0YVtzaWR4ICsgMl0gPj4gNikgJiAwMDMgfCAoZGF0YVtzaWR4ICsg
MV0gPDwgMikgJiAwNzddOworICAgICAgICAgICAgb3V0W2RpZHgrK10gPSBiYXNlNjRFbmNNYXBb
ZGF0YVtzaWR4ICsgMl0gJiAwNzddOworICAgICAgICAgICAgc2lkeCArPSAzOworICAgICAgICB9
CisgICAgfQorCisgICAgaWYgKHNpZHggPCBsZW4pIHsKKyAgICAgICAgaWYgKGluc2VydExGcyAm
JiAoY291bnQgPiAwKSAmJiAoY291bnQgJSA3NikgPT0gMCkKKyAgICAgICAgICAgb3V0W2RpZHgr
K10gPSAnXG4nOworCisgICAgICAgIG91dFtkaWR4KytdID0gYmFzZTY0RW5jTWFwWyhkYXRhW3Np
ZHhdID4+IDIpICYgMDc3XTsKKyAgICAgICAgaWYgKHNpZHggPCBsZW4gLSAxKSB7CisgICAgICAg
ICAgICBvdXRbZGlkeCsrXSA9IGJhc2U2NEVuY01hcFsoZGF0YVtzaWR4ICsgMV0gPj4gNCkgJiAw
MTcgfCAoZGF0YVtzaWR4XSA8PCA0KSAmIDA3N107CisgICAgICAgICAgICBvdXRbZGlkeCsrXSA9
IGJhc2U2NEVuY01hcFsoZGF0YVtzaWR4ICsgMV0gPDwgMikgJiAwNzddOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIG91dFtkaWR4KytdID0gYmFzZTY0RW5jTWFwWyhkYXRhW3NpZHhdIDw8
IDQpICYgMDc3XTsKKyAgICB9CisKKyAgICAvLyBBZGQgcGFkZGluZworICAgIHdoaWxlIChkaWR4
IDwgb3V0LnNpemUoKSkgeworICAgICAgICBvdXRbZGlkeF0gPSAnPSc7CisgICAgICAgIGRpZHgr
KzsKKyAgICB9Cit9CisKK2Jvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYgaW4s
IFZlY3RvcjxjaGFyPiYgb3V0KQoreworICAgIG91dC5jbGVhcigpOworICAgIGlmIChpbi5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgdW5zaWduZWQgbGVuID0gaW4uc2l6
ZSgpOworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBpbi5kYXRhKCk7CisKKyAgICB3aGlsZSAobGVu
ICYmIGRhdGFbbGVuLTFdID09ICc9JykKKyAgICAgICAgLS1sZW47CisKKyAgICBvdXQucmVzaXpl
KGxlbik7CisgICAgZm9yICh1bnNpZ25lZCBpZHggPSAwOyBpZHggPCBsZW47IGlkeCsrKSB7Cisg
ICAgICAgIHVuc2lnbmVkIGNoYXIgY2ggPSBkYXRhW2lkeF07CisgICAgICAgIGlmICgoY2ggPiA0
NyAmJiBjaCA8IDU4KSB8fCAoY2ggPiA2NCAmJiBjaCA8IDkxKSB8fCAoY2ggPiA5NiAmJiBjaCA8
IDEyMykgfHwgY2ggPT0gJysnIHx8IGNoID09ICcvJyB8fCBjaCA9PSAnPScpCisgICAgICAgICAg
ICBvdXRbaWR4XSA9IGJhc2U2NERlY01hcFtjaF07CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICAvLyA0LWJ5dGUgdG8gMy1ieXRlIGNvbnZlcnNp
b24KKyAgICB1bnNpZ25lZCBvdXRMZW4gPSBsZW4gLSAoKGxlbiArIDMpIC8gNCk7CisgICAgaWYg
KCFvdXRMZW4gfHwgKChvdXRMZW4gKyAyKSAvIDMpICogNCA8IGxlbikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgdW5zaWduZWQgc2lkeCA9IDA7CisgICAgdW5zaWduZWQgZGlkeCA9IDA7
CisgICAgaWYgKG91dExlbiA+IDEpIHsKKyAgICAgICAgd2hpbGUgKGRpZHggPCBvdXRMZW4gLSAy
KSB7CisgICAgICAgICAgICBvdXRbZGlkeF0gPSAoKChvdXRbc2lkeF0gPDwgMikgJiAyNTUpIHwg
KChvdXRbc2lkeCArIDFdID4+IDQpICYgMDAzKSk7CisgICAgICAgICAgICBvdXRbZGlkeCArIDFd
ID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikg
JiAwMTcpKTsKKyAgICAgICAgICAgIG91dFtkaWR4ICsgMl0gPSAoKChvdXRbc2lkeCArIDJdIDw8
IDYpICYgMjU1KSB8IChvdXRbc2lkeCArIDNdICYgMDc3KSk7CisgICAgICAgICAgICBzaWR4ICs9
IDQ7CisgICAgICAgICAgICBkaWR4ICs9IDM7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
ZGlkeCA8IG91dExlbikKKyAgICAgICAgb3V0W2RpZHhdID0gKCgob3V0W3NpZHhdIDw8IDIpICYg
MjU1KSB8ICgob3V0W3NpZHggKyAxXSA+PiA0KSAmIDAwMykpOworCisgICAgaWYgKCsrZGlkeCA8
IG91dExlbikKKyAgICAgICAgb3V0W2RpZHhdID0gKCgob3V0W3NpZHggKyAxXSA8PCA0KSAmIDI1
NSkgfCAoKG91dFtzaWR4ICsgMl0gPj4gMikgJiAwMTcpKTsKKworICAgIGlmIChvdXRMZW4gPCBv
dXQuc2l6ZSgpKQorICAgICAgICBvdXQucmVzaXplKG91dExlbik7CisKKyAgICByZXR1cm4gdHJ1
ZTsKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFdlYkNvcmUvcGxhdGZvcm0vQmFzZTY0LmNwcApf
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fCk5hbWU6IHN2bjplb2wtc3R5bGUKICAgKyBuYXRpdmUKCkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL0Jhc2U2NC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0vQmFzZTY0
LmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3BsYXRmb3JtL0Jhc2U2NC5oCShyZXZpc2lvbiAw
KQpAQCAtMCwwICsxLDM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IEFsZXhleSBQcm9z
a3VyeWFrb3YgKGFwQHdlYmtpdC5vcmcpCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQmFzZTY0X2gKKyNkZWZp
bmUgQmFzZTY0X2gKKworI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordm9pZCBiYXNlNjRFbmNv
ZGUoY29uc3QgVmVjdG9yPGNoYXI+JiwgVmVjdG9yPGNoYXI+JiwgYm9vbCBpbnNlcnRMRnMgPSBm
YWxzZSk7CisKKy8vIHRoaXMgZGVjb2RlciBpcyBub3QgZ2VuZXJhbCBwdXJwb3NlIC0gaXQgcmV0
dXJucyBhbiBlcnJvciBpZiBpdCBlbmNvdW50ZXJzIGEgbGluZWZlZWQsIGFzIG5lZWRlZCBmb3Ig
d2luZG93LmF0b2IKK2Jvb2wgYmFzZTY0RGVjb2RlKGNvbnN0IFZlY3RvcjxjaGFyPiYsIFZlY3Rv
cjxjaGFyPiYpOworCisjZW5kaWYgLy8gQmFzZTY0X2gKClByb3BlcnR5IGNoYW5nZXMgb246IFdl
YkNvcmUvcGxhdGZvcm0vQmFzZTY0LmgKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpOYW1lOiBzdm46ZW9sLXN0eWxlCiAg
ICsgbmF0aXZlCgpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9EZXByZWNhdGVkU3RyaW5nLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL0RlcHJlY2F0ZWRTdHJpbmcuY3BwCShyZXZp
c2lvbiAxNzY2MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vRGVwcmVjYXRlZFN0cmluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM2LDYgKzM2LDcgQEAKICNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNs
dWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9T
dHJpbmdFeHRyYXMuaD4KIAogI2lmIFBMQVRGT1JNKFdJTl9PUykKICNpbmNsdWRlIDx3aW5kb3dz
Lmg+CkBAIC04MjIsMTMgKzgyMyw2IEBAIGJvb2wgRGVwcmVjYXRlZFN0cmluZzo6c3RhcnRzV2l0
aChjb25zdCAKICAgICB9CiB9CiAKLSNpZiBQTEFURk9STShXSU5fT1MpCi1pbmxpbmUgaW50IHN0
cm5jYXNlY21wKGNvbnN0IGNoYXIgKmZpcnN0LCBjb25zdCBjaGFyICpzZWNvbmQsIHNpemVfdCBt
YXhMZW5ndGgpCi17Ci0gICAgcmV0dXJuIF9zdHJuaWNtcChmaXJzdCwgc2Vjb25kLCBtYXhMZW5n
dGgpOwotfQotI2VuZGlmCi0KIGJvb2wgRGVwcmVjYXRlZFN0cmluZzo6c3RhcnRzV2l0aChjb25z
dCBjaGFyICpwcmVmaXgsIGJvb2wgY2FzZVNlbnNpdGl2ZSkgY29uc3QKIHsKICAgICBpZiAoY2Fz
ZVNlbnNpdGl2ZSkgewpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9kb20vV2luZG93L2J0b2EtcG5n
bGV0LWV4cGVjdGVkLnBuZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09CkNhbm5vdCBkaXNwbGF5OiBmaWxlIG1hcmtlZCBh
cyBhIGJpbmFyeSB0eXBlLgpzdm46bWltZS10eXBlID0gaW1hZ2UvcG5nCgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBMYXlvdXRUZXN0cy9mYXN0L2RvbS9XaW5kb3cvYnRvYS1wbmdsZXQtZXhwZWN0ZWQu
cG5nCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KTmFtZTogc3ZuOm1pbWUtdHlwZQogICArIGltYWdlL3BuZwoKCmlWQk9S
dzBLR2dvQUFBQU5TVWhFVWdBQUF5QUFBQUpZQ0FZQUFBQ2Fkb0p3QUFBYVZFbEVRVlI0bk8zZGY2
eFhkZjNBOGRmRmUwRisKRG9VYmlPUkZVYnM0RFIzaUQxd3BtV2FHMDJFbU05M1VoVGhjTHNxYzFh
WnBSV08xVUpzRXJsWEw2UUJkQnFhaC9GQ1VpUWlDRythbApsR25EREJBRUFZRjc0ZkwrL3VHOGNZ
SDdBNFNYZmVueCtPL2VjejduOHo2djgvbmpQdS9uVjBVcHBRUUFBRUNDRHAvMkFnQUFnUDhkCkFn
UUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RU
N0ZTQ2JObTJLZi83em54RVIKc1huejV0aStmWHZUdGkxYnRzU3FWYXNPN3VwMlUxOWZIeSsrK0dL
TDJ4c2JHMlBGaWhXSDdQNFBwajNQWmYzNjlmSEdHMiswKy9hSApldGJzdjdZZW53QUFmS1JkQWZL
dmYvMHJycnZ1dXJqdHR0dml2dnZ1aTZGRGg4YTU1NTRicjc3NmFrUkVQUExJSTlHblQ1OTQ2S0dI
CkRza2lGeTFhRkdlZWVXYU1IRGx5bjlzWEwxNGNwNTkrZXR4MDAwMkg1UDRQcG4yZHk1MTMzaGxY
WEhGRnUyNS9xR2ZOL212cjhRa0EKd0grMEswREdqUnNYbXpkdmpnY2ZmREIrOWF0ZnhZc3Z2aGlW
bFpYeHpqdnZSRVRFTmRkY0V6VTFOWWRza1dlZmZYWmNmLzMxTFc0ZgpPblJvWEhEQkJWRlZWWFhJ
MW5DdzdPdGM3cm5ubnZqem4vL2NydHUzWjliMTlmWHg3TFBQSHVnU0R4dFpjMmpyOFFrQXdIKzBL
MEJXCnJGZ1JxMWF0aWgwN2RrUkVSRlZWVmZ6Kzk3K1A5OTkvdjJtZnFxcXFxS2lvT0RTcmpJaU9I
VHZ1OC9pN2R1MktpSWpLeXNybzBLSHQKMHltbEhQUzE3VzduenAxdDdyUG51ZlRxMVN0T091bWt2
ZlpyYWEydHpYckhqaDF4M1hYWHhRc3Z2TkRtT2c3MUxENU5yYzJoUGRlbwpKUzNOcktYSEp3QUF6
VlcyWjZkUm8wYkZqMzcwbzdqb29vdGkyclJwMGFkUG56ampqRFBpakRQT2FMYmZybDI3NHM0Nzc0
dy8vT0VQCjBhTkhqM2ppaVNmaStPT1BqNGlQM3Jkd3h4MTNSS2RPbldMbHlwVngzSEhIeFlRSkU2
Sno1ODR4YmRxMCtPNTN2eHQzM0hGSGZQdmIKMzQ2cFU2ZkdYWGZkRmNPSEQ0L0preWZ2YzAxYnQy
Nk4yMjY3TGZyMjdSdnZ2dnR1L08xdmY0c2pqenl5eFhPWU5tMWF2UC8rKzdGcAowNmFZTVdORzAr
djExNnhaRXhNbVRJaFhYbmtsdG16WkVnODg4RUNjYzg0NWJXN2IwOXk1YzJQSmtpVlJVVkVSTTJi
TWlDbFRwc1NwCnA1N2E1bXovL2U5L3gwTVBQUlNQUC81NExGeTRzT25jYnIvOTl2ak1aejRUQ3hZ
c2lLT1BQanJPT09PTUdEWnNXSHpoQzE5b2RkYjMKM250dnpKdzVNOTU4ODgxWXVYSmxUSm8wS2Jw
Mjdiclg3Rm82ZnRldVhXUEtsQ2xSWFYwZG5UdDNqbnZ2dlRlZWZQTEpxS21wMmU4NQpQZnZzc3pG
bHlwVG8zNzkvREJvMEtNYVBIeDlWVlZYeDE3Lyt0ZWx4c2J1bFM1ZnU5MzF2MjdZdGZ2clRuMGFQ
SGoxaTZkS2xNWFRvCjBManR0dHYyT1llWFhucHBuOWVvUGV0c3p6WFpYV3VQblovODVDY3hjK2JN
V0x4NGNadVBEd0NBdzA1cGh3OCsrS0JjY01FRkpTSksKNzk2OXk4eVpNL2ZhNS9PZi8zd1pQSGh3
bVROblRsbTFhbFdwcmEwdDMvcld0NXEyZi9HTFh5eC8vT01mU3ltbE5EUTBsTFBPT3F1TQpHREdp
YWZ1eHh4NWJmdmF6bnpYOWZQSEZGNWVycnJxcTZlZjc3NysvOU8zYnQrbm5yMzN0YTJYcTFLbWxs
RklhR3h0THYzNzl5a1VYClhiVFA5ZS9Zc2FPY2VlYVpUVCtQR3pldU5EWTJscDA3ZDVhdmZ2V3Ja
ZE9tVGFXeHNiR01HVE9tVkZkWGx3MGJOclM2YlUvMTlmWGwKMkdPUExmUG16U3VsbFBMakgvKzRY
SG5sbFMzT2MvZHpXYnQyYmJuNTVwdEw3OTY5bTdiLyt0ZS9MdC83M3ZkS0thVXNYNzY4UkVTWgpN
R0ZDZWZ2dHQ5czE2d0VEQnBUeDQ4ZTNlUCt0SFgvaHdvWGxxS09PS3FlZmZucDU3TEhIeXBneFkw
cGRYZDBCelduMTZ0WGw1Sk5QCkxyVzF0ZVdKSjU0b2I3Lzlkdm5jNXo1WFJvOGV2YzkxN2U5OWwx
TEtKWmRjVWhZdVhGaEtLV1hKa2lVbElzb3JyN3l5MXh4YXUwYnQKV1dkYjEyVDNhOXJXWStlQkJ4
NG9sMTkrZVl2WEJ3RGdjTmF1bDJEMTZORWpubm5tbWZqQkQzNFFHelpzaUN1dXVDSW1UWnEwMTM0
agpSb3lJQ3krOE1QcjM3eC9EaHc5ditsU3FXYk5teFlJRkMyTFVxRkVSOGRGTGlHNjg4Y2I0eTEv
KzB2UmYvODZkT3pkN0NVdVhMbDFhCmZFbkxTeSs5RkU4OTlWUjg1U3RmaVlpSURoMDZ4S1dYWHRy
aStqZHUzQml2dnZwcVBQWFVVeEVSTVhyMDZDaWx4UFRwMDZPVUVpKzgKOEVMTW1qVXJqam5tbUhq
dnZmZmkrZWVmYjNYYm5xcXFxbUxreUpFeGVQRGdpUGpvSlZWMWRYVnR6alVpb3JxNk9rNDc3YlJt
TCsxNQo2S0dIb2xldlhoRVJjZXFwcDBaMWRYVkVSTFAzZnJRMDY0KzE5bktnMW81L3pqbm5SRzF0
YlF3YU5DaXV2UExLbUR4NWNpeGJ0dXlBCjV0U25UNThZT0hCZ25IYmFhVEZpeElpb3FhbUpMMzNw
Uy9IM3YvOTluK3ZhMy91ZU4yOWVMRnUyTE00KysreUlpQmd5WkVoTW5qeTUKMlp3K25rTnIxNmc5
NjJ6UE5mbFlXNCtkc1dQSHR2czlQd0FBaDV0MmZ3eHZWVlZWakI4L1B1Yk9uUnZWMWRWeHl5MjN4
S09QUHRwcwpuOTMvNkQzcXFLTml5NVl0RVJIeDhzc3ZSM1YxZGJNM2laOTExbGtSRWJGczJiTDlY
dlJ6enowWHRiVzEwYk5uejZiZmRldldyY1UvCnVudjM3aDBqUjQ2TXl5NjdMRzY1NVpZWU1HQkFI
SEhFRWJGdzRjTG8xYXRYZE96WU1UcDI3QmpublhkZXpKNDlPNFlNR2RMcXRqMVYKVkZURS9mZmZI
eHMzYm93SkV5YkUvUG56WS9QbXplMCtuNHFLaW1acjc5NjllMU9ZUlVUMDdkdTM2WS9zM1cvenNk
MW52YS90ZTJycgorSjA3ZDI3NkF6c2lQdEdjOW5WdXUzOTg4NTcyNTc2ZmYvNzVHRFpzV0xQamp4
a3pwaWtVZHA5RFc5ZW9yWFcyNTVxMFo4MEFBUC9yCjJud1B5TnR2dngyOWV2V0s3dDI3UjBURStl
ZWZIMy82MDUvaXZQUE9pMGNmZlRTdXV1cXFOdTlrNjlhdHNXN2R1dGl5WlV0MDY5WXQKSWlKT08r
MjBxS3lzakE4Ly9IQy9GLzNPTysvRXVuWHI5dnA5YTM5MFAvTElJOUd2WDcrNDc3NzdZdW5TcGZI
MDAwL0h1blhyb3JLeQpNcjc4NVMvdnRYOXIyL1pseXBRcHNXREJndmpkNzM0WHYvM3RiK1BsbDE5
dS93bnRZZHk0Y1hIOTlkZkg4dVhMbzFPblR0R2xTNWM0Ci8venpEL2g0bi9UNEIzTk8rNnUxNDY5
WnN5WmVlKzIxZGgvcmsxeWovWm5ab1o0SkFNRC9aMjArQTdKbXpacTQ3Nzc3bXYxdTJMQmgKTVdE
QWdIWi9HVjV0YlcwME5qWTJlOVB0MnJWclkrZk9uVEZvMEtDbTMzMzhpVlp0NmRldlg3ejMzbnZ4
ajMvOG8xMzdyMTY5T3RhdQpYUnNUSjA2TVdiTm14ZkxseTJQcTFLbHgvUEhIeCt6WnM1djlwN3VV
RXM4OTkxeXIyL2IwK3V1dng5aXhZK09Ydi96bFFma280RXN2CnZUUkdqeDRkczJiTmlpVkxsaHpR
UjhtMkZtUDdlL3lETmFjRDBkcnhhMnBxNG8wMzNvaVZLMWMyMjdiN3Myb2Z6K0dUWHFQOW1kbWgK
bmdrQXdQOW5iUWJJQ1NlY0VCTW5UbXoyeC83cTFhdmpuWGZlYWZhK2k2MWJ0OGJXclZ1YmZ0NjJi
VnRzMjdZdElpS3V1dXFxNk4rLwpmOHllUGJ0cCs1SWxTNksydGpZdXVlU1NpUGpvR1pGRml4WkZR
ME5EdlB2dXU3Rnk1Y3BZdjM1OTAvNE5EUTFOSHdOODlkVlhSMlZsClpiTlB5RnF4WWtXc1c3Y3VH
aHNiOXpxSDlldlh4N1JwMHlJaTR1S0xMNDdMTDc4OHVuWHJGdC84NWpkanpabzFNV2JNbU5pd1lV
T3MKWGJzMjdybm5uampwcEpOYTNiYW51cnE2MkxWclY3eisrdXZSMk5nWTgrZlBqKzNidDBjcFpa
OGYyN3I3dVh3OHUyM2J0alh0ZS9mZApkOGZKSjU4Y3Q5NTZhMXh6elRYUnVYUG5acmR2YmRZUkVU
MTc5bXo2anBZTkd6YnNkZjl0SFgvbnpwM05qdmRKNXRUUTBOQXNMTGR1CjNiclBhM1FnOTMzMTFW
ZkhrVWNlR1RmY2NFUFUxZFZGWFYxZDNINzc3ZkhaejM1MnJ6a3NYcnk0MVd2VTFqcmJtdG51MTdT
dG1iencKd2dzeGNlTEVGbWNBQUhCWWE4ODcxV3RyYTh2dzRjUEx1SEhqeXZqeDQ4dmd3WVBMVFRm
ZFZCb2FHa29wcFR6MjJHT2xRNGNPNVpSVApUaW5MbGkwclM1Y3VMWU1HRFNxVmxaVk5uNWkxZE9u
U2Nzb3BwNVJmL09JWDVhbW5uaXFqUm8wcWRYVjFUZmN4ZCs3YzBxdFhyM0xDCkNTZVU3My8vKytY
bW0yOHVGMTU0WVprM2IxNVp0R2hSR1RKa1NJbUlNbW5TcEZKZlgxOGVmdmpoMHIxNzl6Sm8wS0R5
alc5OG8xeDIKMldWbDJMQmg1ZUdISDk1ci9hKzk5bG9aT0hCZ21USmxTcGt4WTBZWk8zWnMyYkZq
UnltbGxOLzg1amVsVTZkT3BhS2lvbFJYVjVmSApIMys4NlhhdGJkdmRoeDkrV0U0Ly9mVFNyVnUz
Y3NNTk41UW5uM3l5ZE9uU3BWeDc3YldsdnI2KzJiNTduc3VDQlF2S3VlZWVXeUtpClRKdzRzZFRY
MTVmdmZPYzdKU0pLUkpRampqaWk5T25UcDR3ZE83YlUxOWUzYTlZLy9PRVBTMFZGUmJueHhodkxt
alZyOWxwdmE4ZC8KK09HSFM5ZXVYY3N4eHh4VHBrMmIxcTVadExSdC92ejVwV2ZQbnFWZnYzNWw0
Y0tGNWRWWFh5MG5ubmhpNmRTcFUzbm1tV2YyV3RlQgozUGZqano5ZXFxdXJTMFNVbXBxYXNtREJn
cVp0dTgvaHJiZmVhdkVhelprenA4MTF0amF6ZlQwK1cxdnpyYmZlV3ZyMjdWdDI3dHk1Cno4Y1RB
TURocktLVXRyK043djMzMzQramp6NDZ0bTdkR20rOTlWWWNkOXh4VGU4SjJjL1lpVGZmZkRNNmRP
Z1FBd2NPM0d0N1EwTkQKTkRZMlJ1Zk9uV1BIamgxdHZsU21zYkV4Tm16WUVMMTc5NDd0MjdlMytE
MGd1M2J0aWc0ZE9zVEdqUnVqcXFwcXIrL0ZhR2hvaUZXcgpWa1ZOVFUxVVZsYTJlOXVldG0zYjF2
U2Y4ZmFzdnlVLy8vblA0K3RmLzNwczM3NDlObS9lSEJzM2JvenAwNmZIdGRkZTIrNzNGYXhiCnR5
NTY5KzU5VUk5L3NPWjBJRm83ZmlrbDFxNWRHMzM2OU5ucmRudk80VUN2MFlITXJLVTFsMUppKy9i
dGV6MkxBZ0R3djZCZEFVS2UKQng5OE1LWlBueDV6NXN4cDl2dW5uMzQ2Qmc0Y0dDZWVlT0ovOWZF
UFIyWUdBSER3Q0pEL01zdVhMNCtoUTRmR1paZGRGa09HRElsdAoyN2JGbWpWcllzU0lFVEZpeElq
Lyt1TWZqc3dNQU9EZ0VTRC9oVDc0NElONC92bm5ZL1hxMVRGOCtQQ0QvaC8yUTMzOHc1R1pBUUFj
CkhBSUVBQUJJMCs1dlFnY0FBUGlrQkFnQUFKQkdnQUFBQUdrRUNBQUFrRWFBQUFBQWFRUUlBQUNR
Um9BQUFBQnBCQWdBQUpCR2dBQUEKQUdrRUNBQUFrRWFBQUFBQWFRUUlBQUNRUm9BQUFBQnBCQWdB
QUpCR2dBQUFBR2txMjlyaDdyZzdZeDIwMDExeDE2ZTlCQUFBT0dDZQpBUUVBQU5JSUVBQUFJSTBB
QVFBQTBnZ1FBQUFnalFBQkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGdnUUFBQWdq
UUFCCkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGdnUUFBQWdqUUFCQUFEU0NCQUFB
Q0NOQUFFQUFOSUlFQUFBSUkwQUFRQUEKMGdnUUFBQWdqUUFCQUFEU0NCQUFBQ0NOQUFFQUFOSUlF
QUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJBQURTQ0JBQUFDQ05BQUVBQU5JSQpFQUFBSUkwQUFRQUEw
Z2dRQUFBZ2pRQUJBQURTQ0JBQUFDQ05BQUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFBQkFB
RFNDQkFBCkFDQ05BQUVBQU5JSUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFBQkFBRFNDQkFBQUNDTkFB
RUFBTklJRUFBQUlJMEFBUUFBMGdnUUFBQWcKalFBQkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJ
MEFBUUFBMGdnUUFBQWdqUUFCQUFEU0NCQUFBQ0NOQUFFQUFOSUlFQUFBSUkwQQpBUUFBMGdnUUFB
QWdqUUFCQUFEU0NCQUFBQ0NOQUFFQUFOSUlFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJBQURTQ0JB
QUFDQ05BQUVBCkFOSUlFQUFBSUkwQUFRQUEwZ2dRQUFBZ2pRQUJBQURTQ0JBQUFDQ05BQUVBQU5J
SUVBQUFJSTBBQVFBQTBnZ1FBQUFnalFBQkFBRFMKQ0JBQUFDQ05BQUVBQU5JSUVBQUFJSTBBQVFB
QTBnZ1FBQUFnalFBQkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGdnUQpBQUFnalFB
QkFBRFNDQkFBQUNDTkFBRUFBTklJRUFBQUlJMEFBUUFBMGxTVVVzcW52UWdBQU9CL2cyZEFBQUNB
TkFJRUFBQklJMEFBCkFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFB
QUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0EKTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdq
UUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQwpCQUFB
U0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVB
QUJJSTBBQUFJQTBBZ1FBCkFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBB
Z1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQkkKSTBBQUFJQTBBZ1FBQUVnalFBQUFn
RFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQQpB
QUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkw
QUFBSUEwQWdRQUFFZ2pRQUFBCmdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFF
Z2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTAKQWdRQUFFZ2pRQUFBZ0RRQ0JB
QUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJ
RQpBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlB
MEFnUUFBRWdqUUFBQWdEUUNCQUFBClNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFB
QWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2oKUUFBQWdEUUNCQUFBU0NO
QUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJ
STBBQQpBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FB
QUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBCk5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFD
QkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUMKQkFBQVNDTkFBQUNB
TkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFB
SUEwQWdRQQpBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pR
QUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJCkkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFT
Q05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkEKQUFDQU5BSUVB
QUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFn
UUFBRWdqUUFBQQpnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdE
UUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwCkFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFB
Q0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUUKQUFCSUkw
QUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVn
alFBQUFnRFFDQkFBQQpTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFB
QVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqClFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJ
RUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUEKQUlB
MEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFB
Z0RRQ0JBQUFTQ05BQUFDQQpOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05B
QUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDCkJBQUFTQ05BQUFDQU5BSUVBQUJJ
STBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUEK
QUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNC
QUFBU0NOQUFBQ0FOQUlFQUFCSQpJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FO
QUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BCkFBQ0FOQUlFQUFCSUkwQUFB
SUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFB
QUEKZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVND
TkFBQUNBTkFJRUFBQklJMEFBQUlBMApBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFB
QklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFCkFBQklJMEFBQUlBMEFn
UUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RR
Q0JBQUEKU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFD
QU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnagpRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBB
QUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBCkFJQTBBZ1FBQUVn
alFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFB
U0NOQUFBQ0EKTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlF
QUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQwpCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEw
QWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBCkFFZ2pRQUFB
Z0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFB
QUNBTkFJRUFBQkkKSTBBQUFJQTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJ
MEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQQpBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFB
RWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBCmdEUUNC
QUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5B
SUVBQUJJSTBBQUFJQTAKQWdRQUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5BSUVBQUJJSTBBQUFJ
QTBBZ1FBQUVnalFBQUFnRFFDQkFBQVNDTkFBQUNBTkFJRQpBQUJJSTBBQUFJQTBBZ1FBQUVnalFB
QUFnRFFDQkFBQVNDTkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBClND
TkFBQUNBTkFJRUFBQklJMEFBQUlBMEFnUUFBRWdqUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFC
SUkwQUFBSUEwQWdRQUFFZ2oKUUFBQWdEUUNCQUFBU0NOQUFBQ0FOQUlFQUFCSUkwQUFBSUEwQWdR
QUFFZ2pRQUFBZ0RRQ0JBQUFTQ05BQUFDQU5QOEh2SEhlWUVLTwpOaGNBQUFBQVNVVk9SSzVDWUlJ
PQoK
</data>
<flag name="review"
          id="4262"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>