<?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>35612</bug_id>
          
          <creation_ts>2010-03-02 15:06:35 -0800</creation_ts>
          <short_desc>Update WebGLArray.slice() to new spec</short_desc>
          <delta_ts>2010-03-25 10:20:37 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>195262</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-02 15:06:35 -0800</bug_when>
    <thetext>The implementation of WebGLArray.slice() needs to be updated for the revised spec, in particular to treat its arguments as (start, end) instead of (offset, length).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201103</commentid>
    <comment_count>1</comment_count>
      <attachid>50987</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-17 18:22:25 -0700</bug_when>
    <thetext>Created attachment 50987
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201106</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-17 18:27:38 -0700</bug_when>
    <thetext>Attachment 50987 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/html/canvas/WebGLIntArray.cpp:75:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/html/canvas/WebGLUnsignedShortArray.cpp:77:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/html/canvas/WebGLShortArray.cpp:74:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/html/canvas/WebGLFloatArray.cpp:72:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/html/canvas/WebGLUnsignedIntArray.cpp:75:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/html/canvas/WebGLByteArray.cpp:73:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
WebCore/html/canvas/WebGLUnsignedByteArray.cpp:75:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 7 in 25 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201117</commentid>
    <comment_count>3</comment_count>
      <attachid>50991</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-17 18:35:53 -0700</bug_when>
    <thetext>Created attachment 50991
revised patch: fix style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201694</commentid>
    <comment_count>4</comment_count>
      <attachid>50991</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-18 21:44:15 -0700</bug_when>
    <thetext>Comment on attachment 50991
revised patch: fix style issues

&gt; +JSValue JSWebGLArray::slice(ExecState* exec, const ArgList&amp; args)
&gt; +{
&gt; +    WebGLArray* array = reinterpret_cast&lt;WebGLArray*&gt;(impl());
&gt; +
&gt; +    long start, end;
&gt; +    switch (args.size()) {
&gt; +    case 0:
...
&gt; +    case 2:
remove case 2 -- the default case will do fine.  The same issue exists in the V8 binding.
&gt; +    default:
&gt; +        start = args.at(0).toInt32(exec);
&gt; +        end = args.at(1).toInt32(exec);
&gt; +    }
&gt; +    return toJS(exec, globalObject(), array-&gt;slice(start, end));
&gt; +}
&gt; +


&gt; Index: WebCore/html/canvas/WebGLArray.cpp
&gt; ===================================================================
&gt; --- WebCore/html/canvas/WebGLArray.cpp	(revision 56135)
&gt; +++ WebCore/html/canvas/WebGLArray.cpp	(working copy)
&gt; @@ -58,6 +58,23 @@ void WebGLArray::setImpl(WebGLArray* arr
&gt;      memcpy(base + byteOffset, array-&gt;baseAddress(), array-&gt;byteLength());
&gt;  }
&gt;  
&gt; +void WebGLArray::calculateOffsetAndLength(long start, long end, unsigned arraySize,
&gt; +                                          unsigned* offset, unsigned* length)
&gt; +{
&gt; +    if (start &lt; 0)
&gt; +        start += arraySize;
&gt; +    if (start &lt; 0)
&gt; +        start = 0;
&gt; +    if (end &lt; 0)
&gt; +        end += arraySize;
&gt; +    if (end &lt; 0)
&gt; +        end = 0;
&gt; +    if (end &lt; start)
&gt; +        end = start;
&gt; +    *offset = static_cast&lt;unsigned&gt;(start);
&gt; +    *length = static_cast&lt;unsigned&gt;(end - start);
What is the size of long vs size of unsigned?  I don&apos;t like this mismatch of types with potentially different sizes and signedness.

Also there doesn&apos;t appear to be any attempt to ensure that end of the slice is not off the end of the array</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>201934</commentid>
    <comment_count>5</comment_count>
      <attachid>51168</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-19 10:59:38 -0700</bug_when>
    <thetext>Created attachment 51168
revised patch : responding to Oliver Hunt&apos;s review

The boundary check for offset/length happens in slice() implementation of each WebGL*Array class, so there is no need to do it in calculateOffsetAndLength().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202048</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-03-19 14:58:05 -0700</bug_when>
    <thetext>Latest patch looks good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202083</commentid>
    <comment_count>7</comment_count>
      <attachid>51168</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2010-03-19 16:19:14 -0700</bug_when>
    <thetext>Comment on attachment 51168
revised patch : responding to Oliver Hunt&apos;s review

r=me, but i&apos;ve noticed that
unsigned fullOffset = m_byteOffset + offset * sizeof(/*whatever type*/);
can overflow and therefore lead to incorrect _behaviour_ as clampOffsetAndNumElements is unaware of the initial byteoffset so you can trigger an overflow that will produce fullOffset &lt; m_byteOffset</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202139</commentid>
    <comment_count>8</comment_count>
      <attachid>51168</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-19 18:58:18 -0700</bug_when>
    <thetext>Comment on attachment 51168
revised patch : responding to Oliver Hunt&apos;s review

Clearing flags on attachment: 51168

Committed r56291: &lt;http://trac.webkit.org/changeset/56291&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>202140</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-03-19 18:58:23 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204120</commentid>
    <comment_count>10</comment_count>
      <attachid>51654</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-25 10:18:53 -0700</bug_when>
    <thetext>Created attachment 51654
revised patch: add explanation in the changeLog.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204121</commentid>
    <comment_count>11</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-03-25 10:20:37 -0700</bug_when>
    <thetext>ignore the last patch.  it belongs to another bug.  sorry about the confusion.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50987</attachid>
            <date>2010-03-17 18:22:25 -0700</date>
            <delta_ts>2010-03-17 18:35:53 -0700</delta_ts>
            <desc>patch</desc>
            <filename>slice.patch</filename>
            <type>text/plain</type>
            <size>31041</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDMtMTcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUg
V2ViR0xBcnJheS5zbGljZSgpIHRvIG5ldyBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZC0zNTYxMgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNX
ZWJHTEFycmF5Q3VzdG9tLmNwcDogQWRkaW5nIHN1cHBvcnQgZm9yIGRlZmF1bHQgaW5wdXRzLgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTEFycmF5OjpzbGljZSk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5jcHA6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VjhXZWJHTEFycmF5OjpzbGljZUNhbGxiYWNrKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTEFycmF5LmNwcDogTWFwIHN0YXJ0L2VuZCB0byBvZmZzZXQvbGVuZ3RoLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xBcnJheTo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTEFycmF5Lmg6IE1vZGlmaWVkIHNsaWNlIHBhcmFtZXRlcnMu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBcnJheS5pZGw6IERlZmluZSBjdXN0b20gYmlu
ZGluZyBmb3Igc2xpY2UoKS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5j
cHA6IE1vZGlmaWVkIHNsaWNlIHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ5
dGVBcnJheTo6c2xpY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5Lmg6
IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5jcHA6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpzbGljZSk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMSW50QXJyYXkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMSW50
QXJyYXk6OnNsaWNlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEludEFycmF5Lmg6IERp
dHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaG9ydEFycmF5OjpzbGljZSk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xTaG9ydEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMVW5zaWduZWRCeXRlQXJyYXk6OnNsaWNlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkQnl0ZUFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
VW5zaWduZWRJbnRBcnJheS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNp
Z25lZEludEFycmF5OjpzbGljZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEludEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRT
aG9ydEFycmF5LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheTo6c2xpY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5Lmg6IERpdHRvLgorCiAyMDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU2
MTM1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2ICs2NywyOCBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKK0pTVmFsdWUgSlNX
ZWJHTEFycmF5OjpzbGljZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
CisgICAgV2ViR0xBcnJheSogYXJyYXkgPSByZWludGVycHJldF9jYXN0PFdlYkdMQXJyYXkqPihp
bXBsKCkpOworCisgICAgbG9uZyBzdGFydCwgZW5kOworICAgIHN3aXRjaCAoYXJncy5zaXplKCkp
IHsKKyAgICBjYXNlIDA6CisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgZW5kID0gYXJyYXkt
Pmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHN0YXJ0ID0g
YXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgICAgICBlbmQgPSBhcnJheS0+bGVuZ3RoKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICBkZWZhdWx0OgorICAgICAgICBzdGFy
dCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICAgICAgZW5kID0gYXJncy5hdCgxKS50
b0ludDMyKGV4ZWMpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgYXJyYXktPnNsaWNlKHN0YXJ0LCBlbmQpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTYxMzUp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKICNp
bmNsdWRlICJWOFdlYkdMQXJyYXkuaCIKIAorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1
ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFdlYkdMQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAi
VjhXZWJHTEZsb2F0QXJyYXkuaCIKICNpbmNsdWRlICJWOFdlYkdMSW50QXJyYXkuaCIKQEAgLTY0
LDYgKzY2LDMyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMQXJyYXkqIGkKICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFdlYkdMQXJyYXk6OnNsaWNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEFycmF5LnNsaWNlKCkiKTsKKworICAgIC8v
IEZvcm1zOgorICAgIC8vICogc2xpY2UobG9uZyBzdGFydCwgbG9uZyBlbmQpOworCisgICAgV2Vi
R0xBcnJheSogaW1wID0gVjhXZWJHTEFycmF5Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAg
ICBsb25nIHN0YXJ0LCBlbmQ7CisgICAgc3dpdGNoIChhcmdzLkxlbmd0aCgpKSB7CisgICAgY2Fz
ZSAwOgorICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIGVuZCA9IGltcC0+bGVuZ3RoKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgc3RhcnQgPSB0b0ludDMyKGFyZ3Nb
MF0pOworICAgICAgICBlbmQgPSBpbXAtPmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDI6CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3RhcnQgPSB0b0ludDMyKGFyZ3NbMF0pOwor
ICAgICAgICBlbmQgPSB0b0ludDMyKGFyZ3NbMV0pOworICAgIH0KKyAgICByZXR1cm4gdG9WOChp
bXAtPnNsaWNlKHN0YXJ0LCBlbmQpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5
LmNwcAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwyMyBAQCB2b2lkIFdlYkdMQXJyYXk6OnNl
dEltcGwoV2ViR0xBcnJheSogYXJyCiAgICAgbWVtY3B5KGJhc2UgKyBieXRlT2Zmc2V0LCBhcnJh
eS0+YmFzZUFkZHJlc3MoKSwgYXJyYXktPmJ5dGVMZW5ndGgoKSk7CiB9CiAKK3ZvaWQgV2ViR0xB
cnJheTo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCB1bnNp
Z25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8
IDApCisgICAgICAgIHN0YXJ0ICs9IGFycmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAg
ICAgICBzdGFydCA9IDA7CisgICAgaWYgKGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNp
emU7CisgICAgaWYgKGVuZCA8IDApCisgICAgICAgIGVuZCA9IDA7CisgICAgaWYgKGVuZCA8IHN0
YXJ0KQorICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAt
IHN0YXJ0KTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xBcnJheS5oCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGNsYXNz
IFdlYkdMQXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWIKIAogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViR0xBcnJheT4gc2xpY2UobG9uZyBzdGFydCwgbG9uZyBlbmQpID0gMDsKIAogICAgIHZp
cnR1YWwgfldlYkdMQXJyYXkoKTsKIApAQCAtNjgsNiArNjgsOSBAQCBjbGFzcyBXZWJHTEFycmF5
IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViCiAKICAgICB2b2lkIHNldEltcGwoV2ViR0xBcnJheSog
YXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAorICAgIHZv
aWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCB1bnNpZ25l
ZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQq
IG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKICAgICAvLyBIZWxwZXIgdG8gdmVyaWZ5IHRo
YXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZmZXIgaXMKICAgICAvLyB3aXRoaW4g
cmFuZ2UuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xBcnJheS5pZGwJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNiBAQCBtb2R1bGUgaHRtbCB7
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7CiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKIAotICAgICAg
ICBXZWJHTEFycmF5IHNsaWNlKGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbiB1bnNpZ25lZCBs
b25nIGxlbmd0aCk7CisgICAgICAgIFtDdXN0b21dIFdlYkdMQXJyYXkgc2xpY2UoaW4gbG9uZyBz
dGFydCwgaW4gbG9uZyBlbmQpOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQnl0ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQnl0ZUFycmF5LmNwcAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQnl0ZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsOSBAQCB1bnNp
Z25lZCBXZWJHTEJ5dGVBcnJheTo6Ynl0ZUxlbmd0aCgpIGNvCiAgICAgcmV0dXJuIG1fc2l6ZSAq
IHNpemVvZihzaWduZWQgY2hhcik7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xC
eXRlQXJyYXk6OnNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7CitQYXNz
UmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMQnl0ZUFycmF5OjpzbGljZShsb25nIHN0YXJ0LCBsb25n
IGVuZCkgeworICAgIHVuc2lnbmVkIG9mZnNldCwgbGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNl
dEFuZExlbmd0aChzdGFydCwgZW5kLCBtX3NpemUsICZvZmZzZXQsICZsZW5ndGgpOwogICAgIHVu
c2lnbmVkIGZ1bGxPZmZzZXQgPSBtX2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2Yoc2lnbmVk
IGNoYXIpOwogICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8c2lnbmVkIGNoYXI+KGJ1ZmZl
cigpLmdldCgpLCAmZnVsbE9mZnNldCwgJmxlbmd0aCk7CiAgICAgcmV0dXJuIGNyZWF0ZShidWZm
ZXIoKSwgZnVsbE9mZnNldCwgbGVuZ3RoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xCeXRlQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQnl0
ZUFycmF5LmgJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5
dGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3IEBAIGNsYXNzIFdlYkdMQnl0
ZUFycmF5IDogcHVibGljIFdlYkdMQXJyYXkKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2Uo
bG9uZyBzdGFydCwgbG9uZyBlbmQpOwogCiAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRv
dWJsZSB2YWx1ZSkKICAgICB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRB
cnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJy
YXkuY3BwCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9h
dEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjksNyArNjksOSBAQCB1bnNpZ25lZCBXZWJH
TEZsb2F0QXJyYXk6OmJ5dGVMZW5ndGgoKSBjCiAgICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVvZihm
bG9hdCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xGbG9hdEFycmF5OjpzbGlj
ZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeworUGFzc1JlZlB0cjxXZWJHTEFy
cmF5PiBXZWJHTEZsb2F0QXJyYXk6OnNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKSB7CisgICAg
dW5zaWduZWQgb2Zmc2V0LCBsZW5ndGg7CisgICAgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKHN0
YXJ0LCBlbmQsIG1fc2l6ZSwgJm9mZnNldCwgJmxlbmd0aCk7CiAgICAgdW5zaWduZWQgZnVsbE9m
ZnNldCA9IG1fYnl0ZU9mZnNldCArIG9mZnNldCAqIHNpemVvZihmbG9hdCk7CiAgICAgY2xhbXBP
ZmZzZXRBbmROdW1FbGVtZW50czxmbG9hdD4oYnVmZmVyKCksICZmdWxsT2Zmc2V0LCAmbGVuZ3Ro
KTsKICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBmdWxsT2Zmc2V0LCBsZW5ndGgpOwpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5oCShyZXZpc2lvbiA1NjEzNSkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTQ2LDcgKzQ2LDcgQEAgY2xhc3MgV2ViR0xGbG9hdEFycmF5IDogcHVibGljIFdlYkdMQXJyYQog
CiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2ln
bmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJh
eT4gc2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShsb25nIHN0YXJ0LCBsb25nIGVuZCk7CiAKICAg
ICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQogICAgIHsKSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Miw3
ICs3Miw5IEBAIHVuc2lnbmVkIFdlYkdMSW50QXJyYXk6OmJ5dGVMZW5ndGgoKSBjb24KICAgICBy
ZXR1cm4gbV9zaXplICogc2l6ZW9mKGludCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xBcnJheT4g
V2ViR0xJbnRBcnJheTo6c2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsK
K1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xJbnRBcnJheTo6c2xpY2UobG9uZyBzdGFydCwg
bG9uZyBlbmQpIHsKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVP
ZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbV9zaXplLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKICAg
ICB1bnNpZ25lZCBmdWxsT2Zmc2V0ID0gbV9ieXRlT2Zmc2V0ICsgb2Zmc2V0ICogc2l6ZW9mKGlu
dCk7CiAgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czxpbnQ+KGJ1ZmZlcigpLCAmZnVsbE9m
ZnNldCwgJmxlbmd0aCk7CiAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgZnVsbE9mZnNldCwg
bGVuZ3RoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5oCShyZXZpc2lvbiA1
NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFdlYkdMSW50QXJyYXkgOiBwdWJsaWMgV2ViR0xB
cnJheSAKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgdmlydHVh
bCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdl
YkdMQXJyYXk+IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UobG9uZyBzdGFydCwgbG9uZyBlbmQp
OwogCiAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKICAgICB7Cklu
ZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuY3BwCShyZXZpc2lvbiA1NjEz
NSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzEsNyArNzEsOSBAQCB1bnNpZ25lZCBXZWJHTFNob3J0QXJyYXk6OmJ5dGVMZW5n
dGgoKSBjCiAgICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVvZihzaG9ydCk7CiB9CiAKLVBhc3NSZWZQ
dHI8V2ViR0xBcnJheT4gV2ViR0xTaG9ydEFycmF5OjpzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkgeworUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTFNob3J0QXJyYXk6
OnNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKSB7CisgICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5n
dGg7CisgICAgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKHN0YXJ0LCBlbmQsIG1fc2l6ZSwgJm9m
ZnNldCwgJmxlbmd0aCk7CiAgICAgdW5zaWduZWQgZnVsbE9mZnNldCA9IG1fYnl0ZU9mZnNldCAr
IG9mZnNldCAqIHNpemVvZihzaG9ydCk7CiAgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czxz
aG9ydD4oYnVmZmVyKCksICZmdWxsT2Zmc2V0LCAmbGVuZ3RoKTsKICAgICByZXR1cm4gY3JlYXRl
KGJ1ZmZlcigpLCBmdWxsT2Zmc2V0LCBsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFNob3J0QXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMU2hvcnRBcnJheS5oCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xTaG9ydEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgY2xhc3Mg
V2ViR0xTaG9ydEFycmF5IDogcHVibGljIFdlYkdMQXJyYQogCiAgICAgdmlydHVhbCB1bnNpZ25l
ZCBsZW5ndGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25z
dDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5
PiBzbGljZShsb25nIHN0YXJ0LCBsb25nIGVuZCk7CiAKICAgICB2b2lkIHNldCh1bnNpZ25lZCBp
bmRleCwgZG91YmxlIHZhbHVlKQogICAgIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC03Miw3ICs3Miw5IEBAIHVuc2lnbmVkIFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OmJ5dGVMZW4K
ICAgICByZXR1cm4gbV9zaXplICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwogfQogCi1QYXNzUmVm
UHRyPFdlYkdMQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OnNsaWNlKHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7CitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMVW5z
aWduZWRCeXRlQXJyYXk6OnNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKSB7CisgICAgdW5zaWdu
ZWQgb2Zmc2V0LCBsZW5ndGg7CisgICAgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKHN0YXJ0LCBl
bmQsIG1fc2l6ZSwgJm9mZnNldCwgJmxlbmd0aCk7CiAgICAgdW5zaWduZWQgZnVsbE9mZnNldCA9
IG1fYnl0ZU9mZnNldCArIG9mZnNldCAqIHNpemVvZih1bnNpZ25lZCBjaGFyKTsKICAgICBjbGFt
cE9mZnNldEFuZE51bUVsZW1lbnRzPHVuc2lnbmVkIGNoYXI+KGJ1ZmZlcigpLCAmZnVsbE9mZnNl
dCwgJmxlbmd0aCk7CiAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgZnVsbE9mZnNldCwgbGVu
Z3RoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJh
eS5oCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFdlYkdM
VW5zaWduZWRCeXRlQXJyYXkgOiBwdWJsaWMgV2UKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0g
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwg
dW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xp
Y2UobG9uZyBzdGFydCwgbG9uZyBlbmQpOwogCiAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgs
IGRvdWJsZSB2YWx1ZSkKICAgICB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5z
aWduZWRJbnRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkSW50QXJyYXkuY3BwCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzIsNyAr
NzIsOSBAQCB1bnNpZ25lZCBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OmJ5dGVMZW5nCiAgICAgcmV0
dXJuIG1fc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBpbnQpOwogfQogCi1QYXNzUmVmUHRyPFdlYkdM
QXJyYXk+IFdlYkdMVW5zaWduZWRJbnRBcnJheTo6c2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpIHsKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xVbnNpZ25lZEludEFy
cmF5OjpzbGljZShsb25nIHN0YXJ0LCBsb25nIGVuZCkgeworICAgIHVuc2lnbmVkIG9mZnNldCwg
bGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwgZW5kLCBtX3NpemUs
ICZvZmZzZXQsICZsZW5ndGgpOwogICAgIHVuc2lnbmVkIGZ1bGxPZmZzZXQgPSBtX2J5dGVPZmZz
ZXQgKyBvZmZzZXQgKiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICBjbGFtcE9mZnNldEFuZE51
bUVsZW1lbnRzPHVuc2lnbmVkIGludD4oYnVmZmVyKCksICZmdWxsT2Zmc2V0LCAmbGVuZ3RoKTsK
ICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBmdWxsT2Zmc2V0LCBsZW5ndGgpOwpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5oCShyZXZpc2lvbiA1
NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgV2ViR0xVbnNpZ25lZEludEFycmF5
IDogcHVibGljIFdlYgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAg
ICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NS
ZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgp
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShsb25nIHN0YXJ0LCBs
b25nIGVuZCk7CiAKICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQog
ICAgIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXku
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0
QXJyYXkuY3BwCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZFNob3J0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw5IEBAIHVu
c2lnbmVkIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpieXRlTGUKICAgICByZXR1cm4gbV9zaXpl
ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKIH0KIAotUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBX
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6c2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpIHsKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6
OnNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKSB7CisgICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5n
dGg7CisgICAgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKHN0YXJ0LCBlbmQsIG1fc2l6ZSwgJm9m
ZnNldCwgJmxlbmd0aCk7CiAgICAgdW5zaWduZWQgZnVsbE9mZnNldCA9IG1fYnl0ZU9mZnNldCAr
IG9mZnNldCAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CiAgICAgY2xhbXBPZmZzZXRBbmROdW1F
bGVtZW50czx1bnNpZ25lZCBzaG9ydD4oYnVmZmVyKCksICZmdWxsT2Zmc2V0LCAmbGVuZ3RoKTsK
ICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBmdWxsT2Zmc2V0LCBsZW5ndGgpOwpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRBcnJheS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaAkocmV2aXNp
b24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgV2ViR0xVbnNpZ25lZFNo
b3J0QXJyYXkgOiBwdWJsaWMgVwogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25z
dDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0dWFs
IFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShsb25nIHN0
YXJ0LCBsb25nIGVuZCk7CiAKICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZh
bHVlKQogICAgIHsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU2MTM3KQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTAtMDMtMTcgIFpoZW55
YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBVcGRhdGUgV2ViR0xBcnJheS5zbGljZSgpIHRvIG5ldyBzcGVjCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZC0zNTYxMgorCisg
ICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQ6
IENoYW5nZWQgdGVzdHMgdG8gcmVmbGVjdCB0aGUgbmV3IHNsaWNlIHBhcmFtZXRlcnM7IGFkZCBu
ZXcgdGVzdCBjYXNlcyBmb3IgZGVmYXVsdCBpbnB1dHMgZm9yIHNsaWNlLgorICAgICAgICAqIGZh
c3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbDogRGl0dG8uCisgICAgICAgICog
ZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxpZC1yYW5nZXMtZXhwZWN0ZWQudHh0
OiBDaGFuZ2VkIHRlc3RzIHRvIHJlZmxlY3QgdGhlIG5ldyBzbGljZSBwYXJhbWV0ZXJzLgorICAg
ICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3dlYmdsLWFycmF5LWludmFsaWQtcmFuZ2VzLmh0bWw6
IERpdHRvLgorCiAyMDEwLTAzLTE3ICBEcmV3IFdpbHNvbiAgPGF0d2lsc29uQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXZpZCBMZXZpbi4KSW5kZXg6IExheW91dFRlc3Rz
L2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0Cj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMtZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiA1NjEzNSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dl
YmdsL2FycmF5LXVuaXQtdGVzdHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0yMCw3
ICsyMCwxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBvZiBXZWJHTEJ5dGVBcnJheSB3aXRoCiBUZXN0
aW5nIHNsaWNpbmcgb2YgV2ViR0xCeXRlQXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8g
dHlwZVNpemUKIFBBU1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAv
IHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBp
cyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5s
ZW5ndGggaXMgMAorVGVzdGluZyBzbGljaW5nIHdpdGggZGVmYXVsdCBpbnB1dHMgb2YgV2ViR0xC
eXRlQXJyYXkKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKK1BBU1MgYXJyYXku
c2xpY2UoKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCitQQVNTIGFycmF5LnNsaWNlKDIpLmxl
bmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSAyCitQQVNTIGFycmF5LnNsaWNlKC0yKS5sZW5ndGgg
aXMgMgorUEFTUyBhcnJheS5zbGljZSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVT
aXplKQogUEFTUyBTZXR0aW5nIFdlYkdMQnl0ZUFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2Yt
cmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTEJ5dGVBcnJheSBmcm9t
IGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcg
V2ViR0xCeXRlQXJyYXkgZnJvbSBXZWJHTEJ5dGVBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZz
ZXQgd2FzIGNhdWdodApAQCAtNDMsNyArNDksMTMgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVn
ZSBXZWJHTEZsb2F0QXJyYQogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMRmxvYXRBcnJheQogUEFT
UyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNG
RkZGRkZGKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0
LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXku
c2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAwCitUZXN0aW5nIHNsaWNpbmcgd2l0aCBk
ZWZhdWx0IGlucHV0cyBvZiBXZWJHTEZsb2F0QXJyYXkKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIDMy
IC8gdHlwZVNpemUKK1BBU1MgYXJyYXkuc2xpY2UoKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUp
CitQQVNTIGFycmF5LnNsaWNlKDIpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSAyCitQQVNT
IGFycmF5LnNsaWNlKC0yKS5sZW5ndGggaXMgMgorUEFTUyBhcnJheS5zbGljZSgtMjE0NzQ4MzY0
OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQogUEFTUyBTZXR0aW5nIFdlYkdMRmxvYXRBcnJh
eSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNl
dHRpbmcgV2ViR0xGbG9hdEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3Ro
IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTEZsb2F0QXJyYXkgZnJvbSBXZWJHTEZsb2F0
QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKQEAgLTY2LDcgKzc4LDEz
IEBAIFBBU1MgQ29uc3RydWN0aW9uIG9mIGh1Z2UgV2ViR0xJbnRBcnJheSAKIFRlc3Rpbmcgc2xp
Y2luZyBvZiBXZWJHTEludEFycmF5CiBQQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXpl
CiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6
ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8g
dHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlz
IDAKK1Rlc3Rpbmcgc2xpY2luZyB3aXRoIGRlZmF1bHQgaW5wdXRzIG9mIFdlYkdMSW50QXJyYXkK
K1BBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKK1BBU1MgYXJyYXkuc2xpY2UoKS5s
ZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCitQQVNTIGFycmF5LnNsaWNlKDIpLmxlbmd0aCBpcyAo
MzIgLyB0eXBlU2l6ZSkgLSAyCitQQVNTIGFycmF5LnNsaWNlKC0yKS5sZW5ndGggaXMgMgorUEFT
UyBhcnJheS5zbGljZSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQogUEFT
UyBTZXR0aW5nIFdlYkdMSW50QXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZz
ZXQgd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMSW50QXJyYXkgZnJvbSBmYWtlIGFycmF5
IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMSW50QXJy
YXkgZnJvbSBXZWJHTEludEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0
CkBAIC04OSw3ICsxMDcsMTMgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJHTFNob3J0
QXJyYQogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMU2hvcnRBcnJheQogUEFTUyBhcnJheS5sZW5n
dGggaXMgMzIgLyB0eXBlU2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5n
dGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0
OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIx
NDc0ODM2NDgpLmxlbmd0aCBpcyAwCitUZXN0aW5nIHNsaWNpbmcgd2l0aCBkZWZhdWx0IGlucHV0
cyBvZiBXZWJHTFNob3J0QXJyYXkKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUK
K1BBU1MgYXJyYXkuc2xpY2UoKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCitQQVNTIGFycmF5
LnNsaWNlKDIpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSAyCitQQVNTIGFycmF5LnNsaWNl
KC0yKS5sZW5ndGggaXMgMgorUEFTUyBhcnJheS5zbGljZSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlz
ICgzMiAvIHR5cGVTaXplKQogUEFTUyBTZXR0aW5nIFdlYkdMU2hvcnRBcnJheSBmcm9tIGFycmF5
IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xT
aG9ydEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQK
IFBBU1MgU2V0dGluZyBXZWJHTFNob3J0QXJyYXkgZnJvbSBXZWJHTFNob3J0QXJyYXkgd2l0aCBv
dXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKQEAgLTExMSw3ICsxMzUsMTMgQEAgUEFTUyBD
b25zdHJ1Y3Rpb24gb2YgV2ViR0xVbnNpZ25lZEJ5dGVBcgogVGVzdGluZyBzbGljaW5nIG9mIFdl
YkdMVW5zaWduZWRCeXRlQXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUK
IFBBU1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXpl
KSAtIDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0
eXBlU2l6ZSkgLSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMg
MAorVGVzdGluZyBzbGljaW5nIHdpdGggZGVmYXVsdCBpbnB1dHMgb2YgV2ViR0xVbnNpZ25lZEJ5
dGVBcnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQorUEFTUyBhcnJheS5z
bGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKK1BBU1MgYXJyYXkuc2xpY2UoMikubGVu
Z3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BBU1MgYXJyYXkuc2xpY2UoLTIpLmxlbmd0aCBp
cyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNp
emUpCiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBmcm9tIGFycmF5IHdpdGgg
b3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25l
ZEJ5dGVBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0
CiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSBmcm9tIFdlYkdMVW5zaWduZWRC
eXRlQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKQEAgLTEzNCw3ICsx
NjQsMTMgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJHTFVuc2lnbmVkSQogVGVzdGlu
ZyBzbGljaW5nIG9mIFdlYkdMVW5zaWduZWRJbnRBcnJheQogUEFTUyBhcnJheS5sZW5ndGggaXMg
MzIgLyB0eXBlU2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGggaXMg
KDMyIC8gdHlwZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVu
Z3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2
NDgpLmxlbmd0aCBpcyAwCitUZXN0aW5nIHNsaWNpbmcgd2l0aCBkZWZhdWx0IGlucHV0cyBvZiBX
ZWJHTFVuc2lnbmVkSW50QXJyYXkKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUK
K1BBU1MgYXJyYXkuc2xpY2UoKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCitQQVNTIGFycmF5
LnNsaWNlKDIpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSAyCitQQVNTIGFycmF5LnNsaWNl
KC0yKS5sZW5ndGggaXMgMgorUEFTUyBhcnJheS5zbGljZSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlz
ICgzMiAvIHR5cGVTaXplKQogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRJbnRBcnJheSBmcm9t
IGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcg
V2ViR0xVbnNpZ25lZEludEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3Ro
IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkSW50QXJyYXkgZnJvbSBXZWJH
TFVuc2lnbmVkSW50QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKQEAg
LTE1Nyw3ICsxOTMsMTMgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJHTFVuc2lnbmVk
UwogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5CiBQQVNTIGFycmF5
Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYp
Lmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3
NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0
LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKK1Rlc3Rpbmcgc2xpY2luZyB3aXRoIGRlZmF1bHQg
aW5wdXRzIG9mIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5CitQQVNTIGFycmF5Lmxlbmd0aCBpcyAz
MiAvIHR5cGVTaXplCitQQVNTIGFycmF5LnNsaWNlKCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXpl
KQorUEFTUyBhcnJheS5zbGljZSgyKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gMgorUEFT
UyBhcnJheS5zbGljZSgtMikubGVuZ3RoIGlzIDIKK1BBU1MgYXJyYXkuc2xpY2UoLTIxNDc0ODM2
NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVk
U2hvcnRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0
CiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdp
dGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRT
aG9ydEFycmF5IGZyb20gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ug
b2Zmc2V0IHdhcyBjYXVnaHQKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2Fy
cmF5LXVuaXQtdGVzdHMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwJKHJldmlzaW9uIDU2MTM1KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sCSh3b3JraW5nIGNv
cHkpCkBAIC0zMTUsNyArMzE1LDcgQEAgZnVuY3Rpb24gdGVzdFNsaWNlKHR5cGUsIG5hbWUpIHsK
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDU7IGkrKykgewogICAgICAgYXNzZXJ0RXEoJ0VsZW1l
bnQgJyArIGksIGksIHNsaWNlW2ldKTsKICAgICB9Ci0gICAgc2xpY2UgPSBhcnJheS5zbGljZSg0
LCA2KTsKKyAgICBzbGljZSA9IGFycmF5LnNsaWNlKDQsIDEwKTsKICAgICBhc3NlcnRFcSgnc2xp
Y2UubGVuZ3RoJywgNiwgc2xpY2UubGVuZ3RoKTsKICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDY7
IGkrKykgewogICAgICAgYXNzZXJ0RXEoJ0VsZW1lbnQgJyArIGksIDQgKyBpLCBzbGljZVtpXSk7
CkBAIC0zMzAsMTIgKzMzMCwxMiBAQCBmdW5jdGlvbiBuZWdhdGl2ZVRlc3RTbGljZSh0eXBlLCBu
YW1lKSB7CiAgIHJ1bm5pbmcoJ25lZ2F0aXZlVGVzdCAnICsgbmFtZSArICcgU2xpY2UnKTsKICAg
dHJ5IHsKICAgICB2YXIgYXJyYXkgPSBuZXcgdHlwZShbMCwgMSwgMiwgMywgNCwgNSwgNiwgNywg
OCwgOV0pOwotICAgIHNsaWNlID0gYXJyYXkuc2xpY2UoNSwgNik7CisgICAgc2xpY2UgPSBhcnJh
eS5zbGljZSg1LCAxMSk7CiAgICAgaWYgKHNsaWNlLmxlbmd0aCAhPSA1KSB7CiAgICAgICBmYWls
KCk7CiAgICAgICByZXR1cm47CiAgICAgfQotICAgIHNsaWNlID0gYXJyYXkuc2xpY2UoMTAsIDAp
OworICAgIHNsaWNlID0gYXJyYXkuc2xpY2UoMTAsIDEwKTsKICAgICBpZiAoc2xpY2UubGVuZ3Ro
ICE9IDApIHsKICAgICAgIGZhaWwoKTsKICAgICAgIHJldHVybjsKQEAgLTQyNyw3ICs0MjcsMjcg
QEAgZnVuY3Rpb24gdGVzdFNsaWNpbmdXaXRoT3V0T2ZSYW5nZVZhbHVlcwogICAgICAgICBzaG91
bGRCZSgiYXJyYXkubGVuZ3RoIiwgIjMyIC8gdHlwZVNpemUiKTsKICAgICAgICAgdHJ5IHsKICAg
ICAgICAgICAgIHNob3VsZEJlKCJhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGgiLCAi
KDMyIC8gdHlwZVNpemUpIC0gNCIpOwotICAgICAgICAgICAgc2hvdWxkQmUoImFycmF5LnNsaWNl
KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGgiLCAiKDMyIC8gdHlwZVNpemUpIC0gNCIpOworICAgICAg
ICAgICAgc2hvdWxkQmUoImFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGgiLCAiMCIp
OworICAgICAgICB9IGNhdGNoIChlKSB7CisgICAgICAgICAgICB0ZXN0RmFpbGVkKCJTbGljaW5n
IG9mICIgKyBuYW1lICsgIiB0aHJldyBleGNlcHRpb24iKTsKKyAgICAgICAgfQorICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgdGVzdEZhaWxlZCgiRXhjZXB0aW9uOiAiICsgZSk7CisgICAgfQor
fQorCitmdW5jdGlvbiB0ZXN0U2xpY2luZ1dpdGhEZWZhdWx0VmFsdWVzKHR5cGUsIG5hbWUsIHN6
KSB7CisgICAgZGVidWcoIlRlc3Rpbmcgc2xpY2luZyB3aXRoIGRlZmF1bHQgaW5wdXRzIG9mICIg
KyBuYW1lKTsKKyAgICB0cnkgeworICAgICAgICB2YXIgYnVmZmVyID0gbmV3IFdlYkdMQXJyYXlC
dWZmZXIoMzIpOworICAgICAgICBhcnJheSA9IG5ldyB0eXBlKGJ1ZmZlcik7CisgICAgICAgIHR5
cGVTaXplID0gc3o7CisgICAgICAgIHNob3VsZEJlKCJhcnJheS5sZW5ndGgiLCAiMzIgLyB0eXBl
U2l6ZSIpOworICAgICAgICB0cnkgeworICAgICAgICAgICAgc2hvdWxkQmUoImFycmF5LnNsaWNl
KCkubGVuZ3RoIiwgIigzMiAvIHR5cGVTaXplKSIpOworICAgICAgICAgICAgc2hvdWxkQmUoImFy
cmF5LnNsaWNlKDIpLmxlbmd0aCIsICIoMzIgLyB0eXBlU2l6ZSkgLSAyIik7CisgICAgICAgICAg
ICBzaG91bGRCZSgiYXJyYXkuc2xpY2UoLTIpLmxlbmd0aCIsICIyIik7CisgICAgICAgICAgICBz
aG91bGRCZSgiYXJyYXkuc2xpY2UoLTIxNDc0ODM2NDgpLmxlbmd0aCIsICIoMzIgLyB0eXBlU2l6
ZSkiKTsKICAgICAgICAgfSBjYXRjaCAoZSkgewogICAgICAgICAgICAgdGVzdEZhaWxlZCgiU2xp
Y2luZyBvZiAiICsgbmFtZSArICIgdGhyZXcgZXhjZXB0aW9uIik7CiAgICAgICAgIH0KQEAgLTU3
NCw2ICs1OTQsNyBAQCBmdW5jdGlvbiBydW5UZXN0cygpIHsKICAgICB0ZXN0Q29uc3RydWN0aW9u
V2l0aE5lZ2F0aXZlT3V0T2ZSYW5nZVZhbHVlcyh0eXBlLCBuYW1lKTsKICAgICB0ZXN0Q29uc3Ry
dWN0aW9uT2ZIdWdlQXJyYXkodHlwZSwgbmFtZSwgdGVzdENhc2UuZWxlbWVudFNpemVJbkJ5dGVz
KTsKICAgICB0ZXN0U2xpY2luZ1dpdGhPdXRPZlJhbmdlVmFsdWVzKHR5cGUsIG5hbWUsIHRlc3RD
YXNlLmVsZW1lbnRTaXplSW5CeXRlcyk7CisgICAgdGVzdFNsaWNpbmdXaXRoRGVmYXVsdFZhbHVl
cyh0eXBlLCBuYW1lLCB0ZXN0Q2FzZS5lbGVtZW50U2l6ZUluQnl0ZXMpOwogICAgIHRlc3RTZXR0
aW5nRnJvbUFycmF5V2l0aE91dE9mUmFuZ2VPZmZzZXQodHlwZSwgbmFtZSk7CiAgICAgdGVzdFNl
dHRpbmdGcm9tRmFrZUFycmF5V2l0aE91dE9mUmFuZ2VMZW5ndGgodHlwZSwgbmFtZSk7CiAgICAg
dGVzdFNldHRpbmdGcm9tV2ViR0xBcnJheVdpdGhPdXRPZlJhbmdlT2Zmc2V0KHR5cGUsIG5hbWUp
OwpJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxp
ZC1yYW5nZXMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3dlYmdsLWFycmF5LWludmFsaWQtcmFuZ2VzLWV4cGVjdGVkLnR4dAkocmV2aXNp
b24gNTYxMzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1hcnJheS1p
bnZhbGlkLXJhbmdlcy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTgsNyArOCw3IEBA
IFBBU1MgQ29uc3RydWN0aW9uIG9mIFdlYkdMQnl0ZUFycmF5IHdpdGgKIFRlc3Rpbmcgc2xpY2lu
ZyBvZiBXZWJHTEJ5dGVBcnJheQogUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQog
UEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUp
IC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5
cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAw
CiBQQVNTIFNldHRpbmcgV2ViR0xCeXRlQXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5n
ZSBvZmZzZXQgd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMQnl0ZUFycmF5IGZyb20gZmFr
ZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJH
TEJ5dGVBcnJheSBmcm9tIFdlYkdMQnl0ZUFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3
YXMgY2F1Z2h0CkBAIC0xOCw3ICsxOCw3IEBAIFBBU1MgQ29uc3RydWN0aW9uIG9mIFdlYkdMVW5z
aWduZWRCeXRlQXIKIFRlc3Rpbmcgc2xpY2luZyBvZiBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5CiBQ
QVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4
M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNl
KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJh
eS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKIFBBU1MgU2V0dGluZyBXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBj
YXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IGZyb20gZmFrZSBhcnJh
eSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5IGZyb20gV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSB3aXRoIG91dC1vZi1yYW5n
ZSBvZmZzZXQgd2FzIGNhdWdodApAQCAtMjksNyArMjksNyBAQCBQQVNTIENvbnN0cnVjdGlvbiBv
ZiBodWdlIFdlYkdMU2hvcnRBcnJhCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xTaG9ydEFycmF5
CiBQQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQs
IDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNs
aWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBh
cnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKIFBBU1MgU2V0dGluZyBXZWJH
TFNob3J0QXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdo
dAogUEFTUyBTZXR0aW5nIFdlYkdMU2hvcnRBcnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBpbnZh
bGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xTaG9ydEFycmF5IGZyb20g
V2ViR0xTaG9ydEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CkBAIC00
MCw3ICs0MCw3IEBAIFBBU1MgQ29uc3RydWN0aW9uIG9mIGh1Z2UgV2ViR0xVbnNpZ25lZFMKIFRl
c3Rpbmcgc2xpY2luZyBvZiBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheQogUEFTUyBhcnJheS5sZW5n
dGggaXMgMzIgLyB0eXBlU2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5n
dGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0
OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIx
NDc0ODM2NDgpLmxlbmd0aCBpcyAwCiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25lZFNob3J0QXJy
YXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAogUEFTUyBT
ZXR0aW5nIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFs
aWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkU2hvcnRBcnJh
eSBmcm9tIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3
YXMgY2F1Z2h0CkBAIC01MSw3ICs1MSw3IEBAIFBBU1MgQ29uc3RydWN0aW9uIG9mIGh1Z2UgV2Vi
R0xJbnRBcnJheSAKIFRlc3Rpbmcgc2xpY2luZyBvZiBXZWJHTEludEFycmF5CiBQQVNTIGFycmF5
Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYp
Lmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3
NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0
LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKIFBBU1MgU2V0dGluZyBXZWJHTEludEFycmF5IGZy
b20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGlu
ZyBXZWJHTEludEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBj
YXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTEludEFycmF5IGZyb20gV2ViR0xJbnRBcnJheSB3aXRo
IG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodApAQCAtNjIsNyArNjIsNyBAQCBQQVNTIENv
bnN0cnVjdGlvbiBvZiBodWdlIFdlYkdMVW5zaWduZWRJCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2Vi
R0xVbnNpZ25lZEludEFycmF5CiBQQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQ
QVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkg
LSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlw
ZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAK
IFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkSW50QXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1v
Zi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRJbnRB
cnJheSBmcm9tIGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNT
IFNldHRpbmcgV2ViR0xVbnNpZ25lZEludEFycmF5IGZyb20gV2ViR0xVbnNpZ25lZEludEFycmF5
IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CkBAIC03Myw3ICs3Myw3IEBAIFBB
U1MgQ29uc3RydWN0aW9uIG9mIGh1Z2UgV2ViR0xGbG9hdEFycmEKIFRlc3Rpbmcgc2xpY2luZyBv
ZiBXZWJHTEZsb2F0QXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBB
U1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAt
IDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBl
U2l6ZSkgLSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAog
UEFTUyBTZXR0aW5nIFdlYkdMRmxvYXRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdl
IG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xGbG9hdEFycmF5IGZyb20gZmFr
ZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJH
TEZsb2F0QXJyYXkgZnJvbSBXZWJHTEZsb2F0QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0
IHdhcyBjYXVnaHQKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3dlYmdsLWFy
cmF5LWludmFsaWQtcmFuZ2VzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxpZC1yYW5nZXMuaHRtbAkocmV2aXNpb24gNTYx
MzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1hcnJheS1pbnZhbGlk
LXJhbmdlcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC03MSw3ICs3MSw3IEBAIGZ1bmN0aW9uIHRl
c3RTbGljaW5nV2l0aE91dE9mUmFuZ2VWYWx1ZXMKICAgICAgICAgc2hvdWxkQmUoImFycmF5Lmxl
bmd0aCIsICIzMiAvIHR5cGVTaXplIik7CiAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICBzaG91
bGRCZSgiYXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIiwgIigzMiAvIHR5cGVTaXpl
KSAtIDQiKTsKLSAgICAgICAgICAgIHNob3VsZEJlKCJhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0
OCkubGVuZ3RoIiwgIigzMiAvIHR5cGVTaXplKSAtIDQiKTsKKyAgICAgICAgICAgIHNob3VsZEJl
KCJhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIiwgIjAiKTsKICAgICAgICAgfSBj
YXRjaCAoZSkgewogICAgICAgICAgICAgdGVzdEZhaWxlZCgiU2xpY2luZyBvZiAiICsgbmFtZSAr
ICIgdGhyZXcgZXhjZXB0aW9uIik7CiAgICAgICAgIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50991</attachid>
            <date>2010-03-17 18:35:53 -0700</date>
            <delta_ts>2010-03-19 10:59:38 -0700</delta_ts>
            <desc>revised patch: fix style issues</desc>
            <filename>slice.patch</filename>
            <type>text/plain</type>
            <size>31055</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDMtMTcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUg
V2ViR0xBcnJheS5zbGljZSgpIHRvIG5ldyBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZC0zNTYxMgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNX
ZWJHTEFycmF5Q3VzdG9tLmNwcDogQWRkaW5nIHN1cHBvcnQgZm9yIGRlZmF1bHQgaW5wdXRzLgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTEFycmF5OjpzbGljZSk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5jcHA6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VjhXZWJHTEFycmF5OjpzbGljZUNhbGxiYWNrKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTEFycmF5LmNwcDogTWFwIHN0YXJ0L2VuZCB0byBvZmZzZXQvbGVuZ3RoLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xBcnJheTo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTEFycmF5Lmg6IE1vZGlmaWVkIHNsaWNlIHBhcmFtZXRlcnMu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBcnJheS5pZGw6IERlZmluZSBjdXN0b20gYmlu
ZGluZyBmb3Igc2xpY2UoKS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5j
cHA6IE1vZGlmaWVkIHNsaWNlIHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ5
dGVBcnJheTo6c2xpY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5Lmg6
IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5jcHA6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpzbGljZSk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMSW50QXJyYXkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMSW50
QXJyYXk6OnNsaWNlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEludEFycmF5Lmg6IERp
dHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaG9ydEFycmF5OjpzbGljZSk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xTaG9ydEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMVW5zaWduZWRCeXRlQXJyYXk6OnNsaWNlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkQnl0ZUFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
VW5zaWduZWRJbnRBcnJheS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNp
Z25lZEludEFycmF5OjpzbGljZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEludEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRT
aG9ydEFycmF5LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheTo6c2xpY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5Lmg6IERpdHRvLgorCiAyMDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU2
MTM1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2ICs2NywyOCBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKK0pTVmFsdWUgSlNX
ZWJHTEFycmF5OjpzbGljZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
CisgICAgV2ViR0xBcnJheSogYXJyYXkgPSByZWludGVycHJldF9jYXN0PFdlYkdMQXJyYXkqPihp
bXBsKCkpOworCisgICAgbG9uZyBzdGFydCwgZW5kOworICAgIHN3aXRjaCAoYXJncy5zaXplKCkp
IHsKKyAgICBjYXNlIDA6CisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICAgICAgZW5kID0gYXJyYXkt
Pmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHN0YXJ0ID0g
YXJncy5hdCgwKS50b0ludDMyKGV4ZWMpOworICAgICAgICBlbmQgPSBhcnJheS0+bGVuZ3RoKCk7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICBkZWZhdWx0OgorICAgICAgICBzdGFy
dCA9IGFyZ3MuYXQoMCkudG9JbnQzMihleGVjKTsKKyAgICAgICAgZW5kID0gYXJncy5hdCgxKS50
b0ludDMyKGV4ZWMpOworICAgIH0KKyAgICByZXR1cm4gdG9KUyhleGVjLCBnbG9iYWxPYmplY3Qo
KSwgYXJyYXktPnNsaWNlKHN0YXJ0LCBlbmQpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvYmluZGluZ3Mv
djgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNwcAkocmV2aXNpb24gNTYxMzUp
CisrKyBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdlYkdMQXJyYXlDdXN0b20uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAjaWYgRU5BQkxFKDNEX0NBTlZBUykKICNp
bmNsdWRlICJWOFdlYkdMQXJyYXkuaCIKIAorI2luY2x1ZGUgIlY4QmluZGluZy5oIgorI2luY2x1
ZGUgIlY4UHJveHkuaCIKICNpbmNsdWRlICJWOFdlYkdMQnl0ZUFycmF5LmgiCiAjaW5jbHVkZSAi
VjhXZWJHTEZsb2F0QXJyYXkuaCIKICNpbmNsdWRlICJWOFdlYkdMSW50QXJyYXkuaCIKQEAgLTY0
LDYgKzY2LDMyIEBAIHY4OjpIYW5kbGU8djg6OlZhbHVlPiB0b1Y4KFdlYkdMQXJyYXkqIGkKICAg
ICByZXR1cm4gdjg6OkhhbmRsZTx2ODo6VmFsdWU+KCk7CiB9CiAKK3Y4OjpIYW5kbGU8djg6OlZh
bHVlPiBWOFdlYkdMQXJyYXk6OnNsaWNlQ2FsbGJhY2soY29uc3Qgdjg6OkFyZ3VtZW50cyYgYXJn
cykKK3sKKyAgICBJTkNfU1RBVFMoIkRPTS5XZWJHTEFycmF5LnNsaWNlKCkiKTsKKworICAgIC8v
IEZvcm1zOgorICAgIC8vICogc2xpY2UobG9uZyBzdGFydCwgbG9uZyBlbmQpOworCisgICAgV2Vi
R0xBcnJheSogaW1wID0gVjhXZWJHTEFycmF5Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAg
ICBsb25nIHN0YXJ0LCBlbmQ7CisgICAgc3dpdGNoIChhcmdzLkxlbmd0aCgpKSB7CisgICAgY2Fz
ZSAwOgorICAgICAgICBzdGFydCA9IDA7CisgICAgICAgIGVuZCA9IGltcC0+bGVuZ3RoKCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgc3RhcnQgPSB0b0ludDMyKGFyZ3Nb
MF0pOworICAgICAgICBlbmQgPSBpbXAtPmxlbmd0aCgpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIDI6CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3RhcnQgPSB0b0ludDMyKGFyZ3NbMF0pOwor
ICAgICAgICBlbmQgPSB0b0ludDMyKGFyZ3NbMV0pOworICAgIH0KKyAgICByZXR1cm4gdG9WOChp
bXAtPnNsaWNlKHN0YXJ0LCBlbmQpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCiAj
ZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5
LmNwcAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXku
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCwyMyBAQCB2b2lkIFdlYkdMQXJyYXk6OnNl
dEltcGwoV2ViR0xBcnJheSogYXJyCiAgICAgbWVtY3B5KGJhc2UgKyBieXRlT2Zmc2V0LCBhcnJh
eS0+YmFzZUFkZHJlc3MoKSwgYXJyYXktPmJ5dGVMZW5ndGgoKSk7CiB9CiAKK3ZvaWQgV2ViR0xB
cnJheTo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCB1bnNp
Z25lZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB1bnNpZ25lZCogb2Zmc2V0LCB1bnNpZ25lZCogbGVuZ3RoKQoreworICAgIGlmIChzdGFydCA8
IDApCisgICAgICAgIHN0YXJ0ICs9IGFycmF5U2l6ZTsKKyAgICBpZiAoc3RhcnQgPCAwKQorICAg
ICAgICBzdGFydCA9IDA7CisgICAgaWYgKGVuZCA8IDApCisgICAgICAgIGVuZCArPSBhcnJheVNp
emU7CisgICAgaWYgKGVuZCA8IDApCisgICAgICAgIGVuZCA9IDA7CisgICAgaWYgKGVuZCA8IHN0
YXJ0KQorICAgICAgICBlbmQgPSBzdGFydDsKKyAgICAqb2Zmc2V0ID0gc3RhdGljX2Nhc3Q8dW5z
aWduZWQ+KHN0YXJ0KTsKKyAgICAqbGVuZ3RoID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGVuZCAt
IHN0YXJ0KTsKK30KKwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKDNEX0NBTlZBUykKSW5kZXg6IFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRt
bC9jYW52YXMvV2ViR0xBcnJheS5oCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIGNsYXNz
IFdlYkdMQXJyYXkgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWIKIAogICAgIHZpcnR1YWwgdW5zaWdu
ZWQgbGVuZ3RoKCkgY29uc3QgPSAwOwogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5z
aWduZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpID0gMDsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViR0xBcnJheT4gc2xpY2UobG9uZyBzdGFydCwgbG9uZyBlbmQpID0gMDsKIAogICAgIHZp
cnR1YWwgfldlYkdMQXJyYXkoKTsKIApAQCAtNjgsNiArNjgsOSBAQCBjbGFzcyBXZWJHTEFycmF5
IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViCiAKICAgICB2b2lkIHNldEltcGwoV2ViR0xBcnJheSog
YXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlvbkNvZGUmIGVjKTsKIAorICAgIHZv
aWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCB1bnNpZ25l
ZCBhcnJheVNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQq
IG9mZnNldCwgdW5zaWduZWQqIGxlbmd0aCk7CisKICAgICAvLyBIZWxwZXIgdG8gdmVyaWZ5IHRo
YXQgYSBnaXZlbiBzdWItcmFuZ2Ugb2YgYW4gQXJyYXlCdWZmZXIgaXMKICAgICAvLyB3aXRoaW4g
cmFuZ2UuCiAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CkluZGV4OiBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMQXJyYXkuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xBcnJheS5pZGwJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TEFycmF5LmlkbAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNiBAQCBtb2R1bGUgaHRtbCB7
CiAgICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGJ5dGVMZW5ndGg7CiAg
ICAgICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSB1bnNpZ25lZCBsb25nIGxlbmd0aDsKIAotICAgICAg
ICBXZWJHTEFycmF5IHNsaWNlKGluIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBpbiB1bnNpZ25lZCBs
b25nIGxlbmd0aCk7CisgICAgICAgIFtDdXN0b21dIFdlYkdMQXJyYXkgc2xpY2UoaW4gbG9uZyBz
dGFydCwgaW4gbG9uZyBlbmQpOwogICAgIH07CiB9CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQnl0ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQnl0ZUFycmF5LmNwcAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMQnl0ZUFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsMTAgQEAgdW5z
aWduZWQgV2ViR0xCeXRlQXJyYXk6OmJ5dGVMZW5ndGgoKSBjbwogICAgIHJldHVybiBtX3NpemUg
KiBzaXplb2Yoc2lnbmVkIGNoYXIpOwogfQogCi1QYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdM
Qnl0ZUFycmF5OjpzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeworUGFz
c1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTEJ5dGVBcnJheTo6c2xpY2UobG9uZyBzdGFydCwgbG9u
ZyBlbmQpCit7CisgICAgdW5zaWduZWQgb2Zmc2V0LCBsZW5ndGg7CisgICAgY2FsY3VsYXRlT2Zm
c2V0QW5kTGVuZ3RoKHN0YXJ0LCBlbmQsIG1fc2l6ZSwgJm9mZnNldCwgJmxlbmd0aCk7CiAgICAg
dW5zaWduZWQgZnVsbE9mZnNldCA9IG1fYnl0ZU9mZnNldCArIG9mZnNldCAqIHNpemVvZihzaWdu
ZWQgY2hhcik7CiAgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czxzaWduZWQgY2hhcj4oYnVm
ZmVyKCkuZ2V0KCksICZmdWxsT2Zmc2V0LCAmbGVuZ3RoKTsKICAgICByZXR1cm4gY3JlYXRlKGJ1
ZmZlcigpLCBmdWxsT2Zmc2V0LCBsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEJ5dGVBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xC
eXRlQXJyYXkuaAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
Qnl0ZUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDcgKzQ5LDcgQEAgY2xhc3MgV2ViR0xC
eXRlQXJyYXkgOiBwdWJsaWMgV2ViR0xBcnJheQogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5n
dGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAg
ICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1
bnNpZ25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGlj
ZShsb25nIHN0YXJ0LCBsb25nIGVuZCk7CiAKICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwg
ZG91YmxlIHZhbHVlKQogICAgIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9h
dEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRB
cnJheS5jcHAJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZs
b2F0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSwxMCBAQCB1bnNpZ25lZCBX
ZWJHTEZsb2F0QXJyYXk6OmJ5dGVMZW5ndGgoKSBjCiAgICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVv
ZihmbG9hdCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xGbG9hdEFycmF5Ojpz
bGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeworUGFzc1JlZlB0cjxXZWJH
TEFycmF5PiBXZWJHTEZsb2F0QXJyYXk6OnNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKQorewor
ICAgIHVuc2lnbmVkIG9mZnNldCwgbGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0
aChzdGFydCwgZW5kLCBtX3NpemUsICZvZmZzZXQsICZsZW5ndGgpOwogICAgIHVuc2lnbmVkIGZ1
bGxPZmZzZXQgPSBtX2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2YoZmxvYXQpOwogICAgIGNs
YW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8ZmxvYXQ+KGJ1ZmZlcigpLCAmZnVsbE9mZnNldCwgJmxl
bmd0aCk7CiAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgZnVsbE9mZnNldCwgbGVuZ3RoKTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaAkocmV2aXNpb24gNTYxMzUp
CisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIGNsYXNzIFdlYkdMRmxvYXRBcnJheSA6IHB1YmxpYyBXZWJHTEFy
cmEKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1
bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdM
QXJyYXk+IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UobG9uZyBzdGFydCwgbG9uZyBlbmQpOwog
CiAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKICAgICB7CkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5jcHAJKHJldmlzaW9uIDU2MTM1KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NzIsNyArNzIsMTAgQEAgdW5zaWduZWQgV2ViR0xJbnRBcnJheTo6Ynl0ZUxlbmd0aCgpIGNvbgog
ICAgIHJldHVybiBtX3NpemUgKiBzaXplb2YoaW50KTsKIH0KIAotUGFzc1JlZlB0cjxXZWJHTEFy
cmF5PiBXZWJHTEludEFycmF5OjpzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCkgeworUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTEludEFycmF5OjpzbGljZShsb25nIHN0
YXJ0LCBsb25nIGVuZCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxj
dWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbV9zaXplLCAmb2Zmc2V0LCAmbGVuZ3Ro
KTsKICAgICB1bnNpZ25lZCBmdWxsT2Zmc2V0ID0gbV9ieXRlT2Zmc2V0ICsgb2Zmc2V0ICogc2l6
ZW9mKGludCk7CiAgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czxpbnQ+KGJ1ZmZlcigpLCAm
ZnVsbE9mZnNldCwgJmxlbmd0aCk7CiAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgZnVsbE9m
ZnNldCwgbGVuZ3RoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5oCShyZXZp
c2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFdlYkdMSW50QXJyYXkgOiBwdWJsaWMg
V2ViR0xBcnJheSAKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAg
dmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdlYkdMQXJyYXk+IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsK
KyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UobG9uZyBzdGFydCwgbG9u
ZyBlbmQpOwogCiAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKICAg
ICB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuY3BwCShyZXZpc2lv
biA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzEsNyArNzEsMTAgQEAgdW5zaWduZWQgV2ViR0xTaG9ydEFycmF5Ojpi
eXRlTGVuZ3RoKCkgYwogICAgIHJldHVybiBtX3NpemUgKiBzaXplb2Yoc2hvcnQpOwogfQogCi1Q
YXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMU2hvcnRBcnJheTo6c2xpY2UodW5zaWduZWQgb2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpIHsKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xTaG9y
dEFycmF5OjpzbGljZShsb25nIHN0YXJ0LCBsb25nIGVuZCkKK3sKKyAgICB1bnNpZ25lZCBvZmZz
ZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbV9z
aXplLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKICAgICB1bnNpZ25lZCBmdWxsT2Zmc2V0ID0gbV9ieXRl
T2Zmc2V0ICsgb2Zmc2V0ICogc2l6ZW9mKHNob3J0KTsKICAgICBjbGFtcE9mZnNldEFuZE51bUVs
ZW1lbnRzPHNob3J0PihidWZmZXIoKSwgJmZ1bGxPZmZzZXQsICZsZW5ndGgpOwogICAgIHJldHVy
biBjcmVhdGUoYnVmZmVyKCksIGZ1bGxPZmZzZXQsIGxlbmd0aCk7CkluZGV4OiBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xTaG9ydEFycmF5LmgJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBA
QCBjbGFzcyBXZWJHTFNob3J0QXJyYXkgOiBwdWJsaWMgV2ViR0xBcnJhCiAKICAgICB2aXJ0dWFs
IHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0
aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZSh1bnNp
Z25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdl
YkdMQXJyYXk+IHNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKTsKIAogICAgIHZvaWQgc2V0KHVu
c2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCiAgICAgewpJbmRleDogV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0
bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwCShyZXZpc2lvbiA1NjEzNSkKKysr
IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTcyLDcgKzcyLDEwIEBAIHVuc2lnbmVkIFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6
OmJ5dGVMZW4KICAgICByZXR1cm4gbV9zaXplICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwogfQog
Ci1QYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OnNsaWNlKHVu
c2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7CitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+
IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OnNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKQorewor
ICAgIHVuc2lnbmVkIG9mZnNldCwgbGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0
aChzdGFydCwgZW5kLCBtX3NpemUsICZvZmZzZXQsICZsZW5ndGgpOwogICAgIHVuc2lnbmVkIGZ1
bGxPZmZzZXQgPSBtX2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2YodW5zaWduZWQgY2hhcik7
CiAgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czx1bnNpZ25lZCBjaGFyPihidWZmZXIoKSwg
JmZ1bGxPZmZzZXQsICZsZW5ndGgpOwogICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIGZ1bGxP
ZmZzZXQsIGxlbmd0aCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRC
eXRlQXJyYXkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWdu
ZWRCeXRlQXJyYXkuaAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMVW5zaWduZWRCeXRlQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBj
bGFzcyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IDogcHVibGljIFdlCiAKICAgICB2aXJ0dWFsIHVu
c2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgp
IGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZSh1bnNpZ25l
ZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdM
QXJyYXk+IHNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKTsKIAogICAgIHZvaWQgc2V0KHVuc2ln
bmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCiAgICAgewpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcyLDcgKzcyLDEwIEBAIHVuc2lnbmVkIFdlYkdMVW5zaWduZWRJbnRBcnJheTo6Ynl0ZUxl
bmcKICAgICByZXR1cm4gbV9zaXplICogc2l6ZW9mKHVuc2lnbmVkIGludCk7CiB9CiAKLVBhc3NS
ZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xVbnNpZ25lZEludEFycmF5OjpzbGljZSh1bnNpZ25lZCBv
ZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgeworUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTFVu
c2lnbmVkSW50QXJyYXk6OnNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKQoreworICAgIHVuc2ln
bmVkIG9mZnNldCwgbGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwg
ZW5kLCBtX3NpemUsICZvZmZzZXQsICZsZW5ndGgpOwogICAgIHVuc2lnbmVkIGZ1bGxPZmZzZXQg
PSBtX2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICBjbGFt
cE9mZnNldEFuZE51bUVsZW1lbnRzPHVuc2lnbmVkIGludD4oYnVmZmVyKCksICZmdWxsT2Zmc2V0
LCAmbGVuZ3RoKTsKICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBmdWxsT2Zmc2V0LCBsZW5n
dGgpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5o
CShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZElu
dEFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgV2ViR0xVbnNp
Z25lZEludEFycmF5IDogcHVibGljIFdlYgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgo
KSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAgICB2
aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShs
b25nIHN0YXJ0LCBsb25nIGVuZCk7CiAKICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91
YmxlIHZhbHVlKQogICAgIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZFNob3J0QXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xV
bnNpZ25lZFNob3J0QXJyYXkuY3BwCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3
ICs3NCwxMCBAQCB1bnNpZ25lZCBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheTo6Ynl0ZUxlCiAgICAg
cmV0dXJuIG1fc2l6ZSAqIHNpemVvZih1bnNpZ25lZCBzaG9ydCk7CiB9CiAKLVBhc3NSZWZQdHI8
V2ViR0xBcnJheT4gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OnNsaWNlKHVuc2lnbmVkIG9mZnNl
dCwgdW5zaWduZWQgbGVuZ3RoKSB7CitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMVW5zaWdu
ZWRTaG9ydEFycmF5OjpzbGljZShsb25nIHN0YXJ0LCBsb25nIGVuZCkKK3sKKyAgICB1bnNpZ25l
ZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVu
ZCwgbV9zaXplLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKICAgICB1bnNpZ25lZCBmdWxsT2Zmc2V0ID0g
bV9ieXRlT2Zmc2V0ICsgb2Zmc2V0ICogc2l6ZW9mKHVuc2lnbmVkIHNob3J0KTsKICAgICBjbGFt
cE9mZnNldEFuZE51bUVsZW1lbnRzPHVuc2lnbmVkIHNob3J0PihidWZmZXIoKSwgJmZ1bGxPZmZz
ZXQsICZsZW5ndGgpOwogICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIGZ1bGxPZmZzZXQsIGxl
bmd0aCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hvcnRB
cnJheS5oCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCBjbGFzcyBX
ZWJHTFVuc2lnbmVkU2hvcnRBcnJheSA6IHB1YmxpYyBXCiAKICAgICB2aXJ0dWFsIHVuc2lnbmVk
IGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0
OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZSh1bnNpZ25lZCBvZmZz
ZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+
IHNsaWNlKGxvbmcgc3RhcnQsIGxvbmcgZW5kKTsKIAogICAgIHZvaWQgc2V0KHVuc2lnbmVkIGlu
ZGV4LCBkb3VibGUgdmFsdWUpCiAgICAgewpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTYxMzcpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAx
MC0wMy0xNyAgWmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBXZWJHTEFycmF5LnNsaWNlKCkg
dG8gbmV3IHNwZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkLTM1NjEyCisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3Rz
LWV4cGVjdGVkLnR4dDogQ2hhbmdlZCB0ZXN0cyB0byByZWZsZWN0IHRoZSBuZXcgc2xpY2UgcGFy
YW1ldGVyczsgYWRkIG5ldyB0ZXN0IGNhc2VzIGZvciBkZWZhdWx0IGlucHV0cyBmb3Igc2xpY2Uu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sOiBEaXR0
by4KKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1hcnJheS1pbnZhbGlkLXJhbmdl
cy1leHBlY3RlZC50eHQ6IENoYW5nZWQgdGVzdHMgdG8gcmVmbGVjdCB0aGUgbmV3IHNsaWNlIHBh
cmFtZXRlcnMuCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxp
ZC1yYW5nZXMuaHRtbDogRGl0dG8uCisKIDIwMTAtMDMtMTcgIERyZXcgV2lsc29uICA8YXR3aWxz
b25AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRl
eDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXkt
dW5pdC10ZXN0cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU2MTM1KQorKysgTGF5b3V0VGVzdHMv
ZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTIwLDcgKzIwLDEzIEBAIFBBU1MgQ29uc3RydWN0aW9uIG9mIFdlYkdMQnl0ZUFy
cmF5IHdpdGgKIFRlc3Rpbmcgc2xpY2luZyBvZiBXZWJHTEJ5dGVBcnJheQogUEFTUyBhcnJheS5s
ZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5s
ZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4
MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwg
LTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAwCitUZXN0aW5nIHNsaWNpbmcgd2l0aCBkZWZhdWx0IGlu
cHV0cyBvZiBXZWJHTEJ5dGVBcnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6
ZQorUEFTUyBhcnJheS5zbGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKK1BBU1MgYXJy
YXkuc2xpY2UoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BBU1MgYXJyYXkuc2xp
Y2UoLTIpLmxlbmd0aCBpcyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgzNjQ4KS5sZW5ndGgg
aXMgKDMyIC8gdHlwZVNpemUpCiBQQVNTIFNldHRpbmcgV2ViR0xCeXRlQXJyYXkgZnJvbSBhcnJh
eSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdM
Qnl0ZUFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQK
IFBBU1MgU2V0dGluZyBXZWJHTEJ5dGVBcnJheSBmcm9tIFdlYkdMQnl0ZUFycmF5IHdpdGggb3V0
LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CkBAIC00Myw3ICs0OSwxMyBAQCBQQVNTIENvbnN0
cnVjdGlvbiBvZiBodWdlIFdlYkdMRmxvYXRBcnJhCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xG
bG9hdEFycmF5CiBQQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5
LnNsaWNlKDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNT
IGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0g
NAorUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKK1Rlc3Rpbmcg
c2xpY2luZyB3aXRoIGRlZmF1bHQgaW5wdXRzIG9mIFdlYkdMRmxvYXRBcnJheQorUEFTUyBhcnJh
eS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQorUEFTUyBhcnJheS5zbGljZSgpLmxlbmd0aCBpcyAo
MzIgLyB0eXBlU2l6ZSkKK1BBU1MgYXJyYXkuc2xpY2UoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVT
aXplKSAtIDIKK1BBU1MgYXJyYXkuc2xpY2UoLTIpLmxlbmd0aCBpcyAyCitQQVNTIGFycmF5LnNs
aWNlKC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCiBQQVNTIFNldHRpbmcg
V2ViR0xGbG9hdEFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBj
YXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTEZsb2F0QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGgg
aW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMRmxvYXRBcnJheSBm
cm9tIFdlYkdMRmxvYXRBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodApA
QCAtNjYsNyArNzgsMTMgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJHTEludEFycmF5
IAogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMSW50QXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlz
IDMyIC8gdHlwZVNpemUKIFBBU1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlz
ICgzMiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxl
bmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgz
NjQ4KS5sZW5ndGggaXMgMAorVGVzdGluZyBzbGljaW5nIHdpdGggZGVmYXVsdCBpbnB1dHMgb2Yg
V2ViR0xJbnRBcnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQorUEFTUyBh
cnJheS5zbGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKK1BBU1MgYXJyYXkuc2xpY2Uo
MikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BBU1MgYXJyYXkuc2xpY2UoLTIpLmxl
bmd0aCBpcyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8g
dHlwZVNpemUpCiBQQVNTIFNldHRpbmcgV2ViR0xJbnRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0
LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xJbnRBcnJheSBm
cm9tIGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRp
bmcgV2ViR0xJbnRBcnJheSBmcm9tIFdlYkdMSW50QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zm
c2V0IHdhcyBjYXVnaHQKQEAgLTg5LDcgKzEwNywxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBvZiBo
dWdlIFdlYkdMU2hvcnRBcnJhCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xTaG9ydEFycmF5CiBQ
QVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4
M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNl
KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJh
eS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKK1Rlc3Rpbmcgc2xpY2luZyB3aXRo
IGRlZmF1bHQgaW5wdXRzIG9mIFdlYkdMU2hvcnRBcnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMg
MzIgLyB0eXBlU2l6ZQorUEFTUyBhcnJheS5zbGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6
ZSkKK1BBU1MgYXJyYXkuc2xpY2UoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BB
U1MgYXJyYXkuc2xpY2UoLTIpLmxlbmd0aCBpcyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgz
NjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCiBQQVNTIFNldHRpbmcgV2ViR0xTaG9ydEFy
cmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1Mg
U2V0dGluZyBXZWJHTFNob3J0QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5n
dGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMU2hvcnRBcnJheSBmcm9tIFdlYkdMU2hv
cnRBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodApAQCAtMTExLDcgKzEz
NSwxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBvZiBXZWJHTFVuc2lnbmVkQnl0ZUFyCiBUZXN0aW5n
IHNsaWNpbmcgb2YgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheQogUEFTUyBhcnJheS5sZW5ndGggaXMg
MzIgLyB0eXBlU2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGggaXMg
KDMyIC8gdHlwZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVu
Z3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2
NDgpLmxlbmd0aCBpcyAwCitUZXN0aW5nIHNsaWNpbmcgd2l0aCBkZWZhdWx0IGlucHV0cyBvZiBX
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5CitQQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXpl
CitQQVNTIGFycmF5LnNsaWNlKCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQorUEFTUyBhcnJh
eS5zbGljZSgyKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gMgorUEFTUyBhcnJheS5zbGlj
ZSgtMikubGVuZ3RoIGlzIDIKK1BBU1MgYXJyYXkuc2xpY2UoLTIxNDc0ODM2NDgpLmxlbmd0aCBp
cyAoMzIgLyB0eXBlU2l6ZSkKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IGZy
b20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGlu
ZyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVu
Z3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IGZyb20g
V2ViR0xVbnNpZ25lZEJ5dGVBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdo
dApAQCAtMTM0LDcgKzE2NCwxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBvZiBodWdlIFdlYkdMVW5z
aWduZWRJCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xVbnNpZ25lZEludEFycmF5CiBQQVNTIGFy
cmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZG
RkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0y
MTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGlj
ZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKK1Rlc3Rpbmcgc2xpY2luZyB3aXRoIGRlZmF1
bHQgaW5wdXRzIG9mIFdlYkdMVW5zaWduZWRJbnRBcnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMg
MzIgLyB0eXBlU2l6ZQorUEFTUyBhcnJheS5zbGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6
ZSkKK1BBU1MgYXJyYXkuc2xpY2UoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BB
U1MgYXJyYXkuc2xpY2UoLTIpLmxlbmd0aCBpcyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgz
NjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25l
ZEludEFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQK
IFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkSW50QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGgg
aW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRJbnRB
cnJheSBmcm9tIFdlYkdMVW5zaWduZWRJbnRBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQg
d2FzIGNhdWdodApAQCAtMTU3LDcgKzE5MywxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBvZiBodWdl
IFdlYkdMVW5zaWduZWRTCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xVbnNpZ25lZFNob3J0QXJy
YXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBBU1MgYXJyYXkuc2xpY2Uo
NCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXku
c2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNT
IGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAorVGVzdGluZyBzbGljaW5n
IHdpdGggZGVmYXVsdCBpbnB1dHMgb2YgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkKK1BBU1MgYXJy
YXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKK1BBU1MgYXJyYXkuc2xpY2UoKS5sZW5ndGggaXMg
KDMyIC8gdHlwZVNpemUpCitQQVNTIGFycmF5LnNsaWNlKDIpLmxlbmd0aCBpcyAoMzIgLyB0eXBl
U2l6ZSkgLSAyCitQQVNTIGFycmF5LnNsaWNlKC0yKS5sZW5ndGggaXMgMgorUEFTUyBhcnJheS5z
bGljZSgtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQogUEFTUyBTZXR0aW5n
IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zm
c2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBmcm9t
IGZha2UgYXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcg
V2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgZnJvbSBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSB3aXRo
IG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbAkocmV2aXNpb24gNTYx
MzUpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0
bWwJKHdvcmtpbmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBAQCBmdW5jdGlvbiB0ZXN0U2xpY2Uo
dHlwZSwgbmFtZSkgewogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAgICAgICBh
c3NlcnRFcSgnRWxlbWVudCAnICsgaSwgaSwgc2xpY2VbaV0pOwogICAgIH0KLSAgICBzbGljZSA9
IGFycmF5LnNsaWNlKDQsIDYpOworICAgIHNsaWNlID0gYXJyYXkuc2xpY2UoNCwgMTApOwogICAg
IGFzc2VydEVxKCdzbGljZS5sZW5ndGgnLCA2LCBzbGljZS5sZW5ndGgpOwogICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAgICAgICBhc3NlcnRFcSgnRWxlbWVudCAnICsgaSwgNCAr
IGksIHNsaWNlW2ldKTsKQEAgLTMzMCwxMiArMzMwLDEyIEBAIGZ1bmN0aW9uIG5lZ2F0aXZlVGVz
dFNsaWNlKHR5cGUsIG5hbWUpIHsKICAgcnVubmluZygnbmVnYXRpdmVUZXN0ICcgKyBuYW1lICsg
JyBTbGljZScpOwogICB0cnkgewogICAgIHZhciBhcnJheSA9IG5ldyB0eXBlKFswLCAxLCAyLCAz
LCA0LCA1LCA2LCA3LCA4LCA5XSk7Ci0gICAgc2xpY2UgPSBhcnJheS5zbGljZSg1LCA2KTsKKyAg
ICBzbGljZSA9IGFycmF5LnNsaWNlKDUsIDExKTsKICAgICBpZiAoc2xpY2UubGVuZ3RoICE9IDUp
IHsKICAgICAgIGZhaWwoKTsKICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2xpY2UgPSBhcnJh
eS5zbGljZSgxMCwgMCk7CisgICAgc2xpY2UgPSBhcnJheS5zbGljZSgxMCwgMTApOwogICAgIGlm
IChzbGljZS5sZW5ndGggIT0gMCkgewogICAgICAgZmFpbCgpOwogICAgICAgcmV0dXJuOwpAQCAt
NDI3LDcgKzQyNywyNyBAQCBmdW5jdGlvbiB0ZXN0U2xpY2luZ1dpdGhPdXRPZlJhbmdlVmFsdWVz
CiAgICAgICAgIHNob3VsZEJlKCJhcnJheS5sZW5ndGgiLCAiMzIgLyB0eXBlU2l6ZSIpOwogICAg
ICAgICB0cnkgewogICAgICAgICAgICAgc2hvdWxkQmUoImFycmF5LnNsaWNlKDQsIDB4M0ZGRkZG
RkYpLmxlbmd0aCIsICIoMzIgLyB0eXBlU2l6ZSkgLSA0Iik7Ci0gICAgICAgICAgICBzaG91bGRC
ZSgiYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCIsICIoMzIgLyB0eXBlU2l6ZSkg
LSA0Iik7CisgICAgICAgICAgICBzaG91bGRCZSgiYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgp
Lmxlbmd0aCIsICIwIik7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRlc3RG
YWlsZWQoIlNsaWNpbmcgb2YgIiArIG5hbWUgKyAiIHRocmV3IGV4Y2VwdGlvbiIpOworICAgICAg
ICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJFeGNlcHRpb246ICIg
KyBlKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RTbGljaW5nV2l0aERlZmF1bHRWYWx1ZXMo
dHlwZSwgbmFtZSwgc3opIHsKKyAgICBkZWJ1ZygiVGVzdGluZyBzbGljaW5nIHdpdGggZGVmYXVs
dCBpbnB1dHMgb2YgIiArIG5hbWUpOworICAgIHRyeSB7CisgICAgICAgIHZhciBidWZmZXIgPSBu
ZXcgV2ViR0xBcnJheUJ1ZmZlcigzMik7CisgICAgICAgIGFycmF5ID0gbmV3IHR5cGUoYnVmZmVy
KTsKKyAgICAgICAgdHlwZVNpemUgPSBzejsKKyAgICAgICAgc2hvdWxkQmUoImFycmF5Lmxlbmd0
aCIsICIzMiAvIHR5cGVTaXplIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzaG91bGRC
ZSgiYXJyYXkuc2xpY2UoKS5sZW5ndGgiLCAiKDMyIC8gdHlwZVNpemUpIik7CisgICAgICAgICAg
ICBzaG91bGRCZSgiYXJyYXkuc2xpY2UoMikubGVuZ3RoIiwgIigzMiAvIHR5cGVTaXplKSAtIDIi
KTsKKyAgICAgICAgICAgIHNob3VsZEJlKCJhcnJheS5zbGljZSgtMikubGVuZ3RoIiwgIjIiKTsK
KyAgICAgICAgICAgIHNob3VsZEJlKCJhcnJheS5zbGljZSgtMjE0NzQ4MzY0OCkubGVuZ3RoIiwg
IigzMiAvIHR5cGVTaXplKSIpOwogICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICB0
ZXN0RmFpbGVkKCJTbGljaW5nIG9mICIgKyBuYW1lICsgIiB0aHJldyBleGNlcHRpb24iKTsKICAg
ICAgICAgfQpAQCAtNTc0LDYgKzU5NCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3RzKCkgewogICAgIHRl
c3RDb25zdHJ1Y3Rpb25XaXRoTmVnYXRpdmVPdXRPZlJhbmdlVmFsdWVzKHR5cGUsIG5hbWUpOwog
ICAgIHRlc3RDb25zdHJ1Y3Rpb25PZkh1Z2VBcnJheSh0eXBlLCBuYW1lLCB0ZXN0Q2FzZS5lbGVt
ZW50U2l6ZUluQnl0ZXMpOwogICAgIHRlc3RTbGljaW5nV2l0aE91dE9mUmFuZ2VWYWx1ZXModHlw
ZSwgbmFtZSwgdGVzdENhc2UuZWxlbWVudFNpemVJbkJ5dGVzKTsKKyAgICB0ZXN0U2xpY2luZ1dp
dGhEZWZhdWx0VmFsdWVzKHR5cGUsIG5hbWUsIHRlc3RDYXNlLmVsZW1lbnRTaXplSW5CeXRlcyk7
CiAgICAgdGVzdFNldHRpbmdGcm9tQXJyYXlXaXRoT3V0T2ZSYW5nZU9mZnNldCh0eXBlLCBuYW1l
KTsKICAgICB0ZXN0U2V0dGluZ0Zyb21GYWtlQXJyYXlXaXRoT3V0T2ZSYW5nZUxlbmd0aCh0eXBl
LCBuYW1lKTsKICAgICB0ZXN0U2V0dGluZ0Zyb21XZWJHTEFycmF5V2l0aE91dE9mUmFuZ2VPZmZz
ZXQodHlwZSwgbmFtZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC93ZWJn
bC1hcnJheS1pbnZhbGlkLXJhbmdlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxpZC1yYW5nZXMtZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiA1NjEzNSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L3dlYmdsLWFycmF5LWludmFsaWQtcmFuZ2VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOCw3ICs4LDcgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgV2ViR0xCeXRlQXJyYXkgd2l0aAog
VGVzdGluZyBzbGljaW5nIG9mIFdlYkdMQnl0ZUFycmF5CiBQQVNTIGFycmF5Lmxlbmd0aCBpcyAz
MiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAo
MzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5n
dGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0
OCkubGVuZ3RoIGlzIDAKIFBBU1MgU2V0dGluZyBXZWJHTEJ5dGVBcnJheSBmcm9tIGFycmF5IHdp
dGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xCeXRl
QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFT
UyBTZXR0aW5nIFdlYkdMQnl0ZUFycmF5IGZyb20gV2ViR0xCeXRlQXJyYXkgd2l0aCBvdXQtb2Yt
cmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKQEAgLTE4LDcgKzE4LDcgQEAgUEFTUyBDb25zdHJ1Y3Rp
b24gb2YgV2ViR0xVbnNpZ25lZEJ5dGVBcgogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMVW5zaWdu
ZWRCeXRlQXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBBU1MgYXJy
YXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKLVBB
U1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkg
LSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAogUEFTUyBT
ZXR0aW5nIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5n
ZSBvZmZzZXQgd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkg
ZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0
aW5nIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkgZnJvbSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IHdp
dGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CkBAIC0yOSw3ICsyOSw3IEBAIFBBU1Mg
Q29uc3RydWN0aW9uIG9mIGh1Z2UgV2ViR0xTaG9ydEFycmEKIFRlc3Rpbmcgc2xpY2luZyBvZiBX
ZWJHTFNob3J0QXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBBU1Mg
YXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQK
LVBBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6
ZSkgLSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAogUEFT
UyBTZXR0aW5nIFdlYkdMU2hvcnRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9m
ZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xTaG9ydEFycmF5IGZyb20gZmFrZSBh
cnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFNo
b3J0QXJyYXkgZnJvbSBXZWJHTFNob3J0QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdh
cyBjYXVnaHQKQEAgLTQwLDcgKzQwLDcgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJH
TFVuc2lnbmVkUwogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5CiBQ
QVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4
M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNl
KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJh
eS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKIFBBU1MgU2V0dGluZyBXZWJHTFVu
c2lnbmVkU2hvcnRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMg
Y2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgZnJvbSBmYWtlIGFy
cmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMVW5z
aWduZWRTaG9ydEFycmF5IGZyb20gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgd2l0aCBvdXQtb2Yt
cmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKQEAgLTUxLDcgKzUxLDcgQEAgUEFTUyBDb25zdHJ1Y3Rp
b24gb2YgaHVnZSBXZWJHTEludEFycmF5IAogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMSW50QXJy
YXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBBU1MgYXJyYXkuc2xpY2Uo
NCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXku
c2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNT
IGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAogUEFTUyBTZXR0aW5nIFdl
YkdMSW50QXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdo
dAogUEFTUyBTZXR0aW5nIFdlYkdMSW50QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxp
ZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMSW50QXJyYXkgZnJvbSBXZWJH
TEludEFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CkBAIC02Miw3ICs2
Miw3IEBAIFBBU1MgQ29uc3RydWN0aW9uIG9mIGh1Z2UgV2ViR0xVbnNpZ25lZEkKIFRlc3Rpbmcg
c2xpY2luZyBvZiBXZWJHTFVuc2lnbmVkSW50QXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMy
IC8gdHlwZVNpemUKIFBBU1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgz
MiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0
aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4
KS5sZW5ndGggaXMgMAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRJbnRBcnJheSBmcm9tIGFy
cmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2Vi
R0xVbnNpZ25lZEludEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdh
cyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkSW50QXJyYXkgZnJvbSBXZWJHTFVu
c2lnbmVkSW50QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKQEAgLTcz
LDcgKzczLDcgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJHTEZsb2F0QXJyYQogVGVz
dGluZyBzbGljaW5nIG9mIFdlYkdMRmxvYXRBcnJheQogUEFTUyBhcnJheS5sZW5ndGggaXMgMzIg
LyB0eXBlU2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGggaXMgKDMy
IC8gdHlwZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3Ro
IGlzICgzMiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgp
Lmxlbmd0aCBpcyAwCiBQQVNTIFNldHRpbmcgV2ViR0xGbG9hdEFycmF5IGZyb20gYXJyYXkgd2l0
aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTEZsb2F0
QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFT
UyBTZXR0aW5nIFdlYkdMRmxvYXRBcnJheSBmcm9tIFdlYkdMRmxvYXRBcnJheSB3aXRoIG91dC1v
Zi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMv
d2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxpZC1yYW5nZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1hcnJheS1pbnZhbGlkLXJhbmdlcy5odG1s
CShyZXZpc2lvbiA1NjEzNSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3dlYmds
LWFycmF5LWludmFsaWQtcmFuZ2VzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcg
QEAgZnVuY3Rpb24gdGVzdFNsaWNpbmdXaXRoT3V0T2ZSYW5nZVZhbHVlcwogICAgICAgICBzaG91
bGRCZSgiYXJyYXkubGVuZ3RoIiwgIjMyIC8gdHlwZVNpemUiKTsKICAgICAgICAgdHJ5IHsKICAg
ICAgICAgICAgIHNob3VsZEJlKCJhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGgiLCAi
KDMyIC8gdHlwZVNpemUpIC0gNCIpOwotICAgICAgICAgICAgc2hvdWxkQmUoImFycmF5LnNsaWNl
KDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGgiLCAiKDMyIC8gdHlwZVNpemUpIC0gNCIpOworICAgICAg
ICAgICAgc2hvdWxkQmUoImFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGgiLCAiMCIp
OwogICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJTbGljaW5n
IG9mICIgKyBuYW1lICsgIiB0aHJldyBleGNlcHRpb24iKTsKICAgICAgICAgfQo=
</data>
<flag name="review"
          id="34180"
          type_id="1"
          status="-"
          setter="oliver"
    />
    <flag name="commit-queue"
          id="34181"
          type_id="3"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51168</attachid>
            <date>2010-03-19 10:59:38 -0700</date>
            <delta_ts>2010-03-25 10:18:53 -0700</delta_ts>
            <desc>revised patch : responding to Oliver Hunt&apos;s review</desc>
            <filename>slice.patch</filename>
            <type>text/plain</type>
            <size>30989</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjEzNykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNDAgQEAKKzIwMTAtMDMtMTcgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBVcGRhdGUg
V2ViR0xBcnJheS5zbGljZSgpIHRvIG5ldyBzcGVjCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZC0zNTYxMgorCisgICAgICAgICogYmluZGluZ3MvanMvSlNX
ZWJHTEFycmF5Q3VzdG9tLmNwcDogQWRkaW5nIHN1cHBvcnQgZm9yIGRlZmF1bHQgaW5wdXRzLgor
ICAgICAgICAoV2ViQ29yZTo6SlNXZWJHTEFycmF5OjpzbGljZSk6CisgICAgICAgICogYmluZGlu
Z3MvdjgvY3VzdG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5jcHA6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6VjhXZWJHTEFycmF5OjpzbGljZUNhbGxiYWNrKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9XZWJHTEFycmF5LmNwcDogTWFwIHN0YXJ0L2VuZCB0byBvZmZzZXQvbGVuZ3RoLgorICAgICAg
ICAoV2ViQ29yZTo6V2ViR0xBcnJheTo6Y2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKToKKyAgICAg
ICAgKiBodG1sL2NhbnZhcy9XZWJHTEFycmF5Lmg6IE1vZGlmaWVkIHNsaWNlIHBhcmFtZXRlcnMu
CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBcnJheS5pZGw6IERlZmluZSBjdXN0b20gYmlu
ZGluZyBmb3Igc2xpY2UoKS4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5j
cHA6IE1vZGlmaWVkIHNsaWNlIHBhcmFtZXRlcnMuCisgICAgICAgIChXZWJDb3JlOjpXZWJHTEJ5
dGVBcnJheTo6c2xpY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5Lmg6
IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5jcHA6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xGbG9hdEFycmF5OjpzbGljZSk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2Fu
dmFzL1dlYkdMSW50QXJyYXkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMSW50
QXJyYXk6OnNsaWNlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTEludEFycmF5Lmg6IERp
dHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5jcHA6IERpdHRvLgor
ICAgICAgICAoV2ViQ29yZTo6V2ViR0xTaG9ydEFycmF5OjpzbGljZSk6CisgICAgICAgICogaHRt
bC9jYW52YXMvV2ViR0xTaG9ydEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6Oldl
YkdMVW5zaWduZWRCeXRlQXJyYXk6OnNsaWNlKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFVuc2lnbmVkQnl0ZUFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdM
VW5zaWduZWRJbnRBcnJheS5jcHA6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xVbnNp
Z25lZEludEFycmF5OjpzbGljZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25l
ZEludEFycmF5Lmg6IERpdHRvLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRT
aG9ydEFycmF5LmNwcDogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheTo6c2xpY2UpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5Lmg6IERpdHRvLgorCiAyMDEwLTAzLTE3ICBEbWl0cnkgVGl0b3YgIDxkaW1pY2hAY2hy
b21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpbWl0cmkgR2xhemtvdi4KSW5kZXg6
IFdlYkNvcmUvYmluZGluZ3MvanMvSlNXZWJHTEFycmF5Q3VzdG9tLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2JpbmRpbmdzL2pzL0pTV2ViR0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU2
MTM1KQorKysgV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dlYkdMQXJyYXlDdXN0b20uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC02Nyw2ICs2NywyNyBAQCBKU0M6OkpTVmFsdWUgdG9KUyhKU0M6OkV4ZWNT
dGF0ZSogZXhlYywgCiAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiB9CiAKK0pTVmFsdWUgSlNX
ZWJHTEFycmF5OjpzbGljZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCit7
CisgICAgV2ViR0xBcnJheSogYXJyYXkgPSByZWludGVycHJldF9jYXN0PFdlYkdMQXJyYXkqPihp
bXBsKCkpOworCisgICAgaW50IHN0YXJ0LCBlbmQ7CisgICAgc3dpdGNoIChhcmdzLnNpemUoKSkg
eworICAgIGNhc2UgMDoKKyAgICAgICAgc3RhcnQgPSAwOworICAgICAgICBlbmQgPSBhcnJheS0+
bGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMToKKyAgICAgICAgc3RhcnQgPSBh
cmdzLmF0KDApLnRvSW50MzIoZXhlYyk7CisgICAgICAgIGVuZCA9IGFycmF5LT5sZW5ndGgoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgc3RhcnQgPSBhcmdzLmF0KDAp
LnRvSW50MzIoZXhlYyk7CisgICAgICAgIGVuZCA9IGFyZ3MuYXQoMSkudG9JbnQzMihleGVjKTsK
KyAgICB9CisgICAgcmV0dXJuIHRvSlMoZXhlYywgZ2xvYmFsT2JqZWN0KCksIGFycmF5LT5zbGlj
ZShzdGFydCwgZW5kKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8v
IEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4OiBXZWJDb3JlL2JpbmRpbmdzL3Y4L2N1c3RvbS9WOFdl
YkdMQXJyYXlDdXN0b20uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvYmluZGluZ3MvdjgvY3Vz
dG9tL1Y4V2ViR0xBcnJheUN1c3RvbS5jcHAJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9i
aW5kaW5ncy92OC9jdXN0b20vVjhXZWJHTEFycmF5Q3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzMsNiArMzMsOCBAQAogI2lmIEVOQUJMRSgzRF9DQU5WQVMpCiAjaW5jbHVkZSAiVjhXZWJH
TEFycmF5LmgiCiAKKyNpbmNsdWRlICJWOEJpbmRpbmcuaCIKKyNpbmNsdWRlICJWOFByb3h5Lmgi
CiAjaW5jbHVkZSAiVjhXZWJHTEJ5dGVBcnJheS5oIgogI2luY2x1ZGUgIlY4V2ViR0xGbG9hdEFy
cmF5LmgiCiAjaW5jbHVkZSAiVjhXZWJHTEludEFycmF5LmgiCkBAIC02NCw2ICs2NiwzMCBAQCB2
ODo6SGFuZGxlPHY4OjpWYWx1ZT4gdG9WOChXZWJHTEFycmF5KiBpCiAgICAgcmV0dXJuIHY4OjpI
YW5kbGU8djg6OlZhbHVlPigpOwogfQogCit2ODo6SGFuZGxlPHY4OjpWYWx1ZT4gVjhXZWJHTEFy
cmF5OjpzbGljZUNhbGxiYWNrKGNvbnN0IHY4OjpBcmd1bWVudHMmIGFyZ3MpCit7CisgICAgSU5D
X1NUQVRTKCJET00uV2ViR0xBcnJheS5zbGljZSIpOworICAgIC8vIEZvcm1zOgorICAgIC8vICog
c2xpY2UobG9uZyBzdGFydCwgbG9uZyBlbmQpOworCisgICAgV2ViR0xBcnJheSogaW1wID0gVjhX
ZWJHTEFycmF5Ojp0b05hdGl2ZShhcmdzLkhvbGRlcigpKTsKKyAgICBpbnQgc3RhcnQsIGVuZDsK
KyAgICBzd2l0Y2ggKGFyZ3MuTGVuZ3RoKCkpIHsKKyAgICBjYXNlIDA6CisgICAgICAgIHN0YXJ0
ID0gMDsKKyAgICAgICAgZW5kID0gaW1wLT5sZW5ndGgoKTsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSAxOgorICAgICAgICBzdGFydCA9IHRvSW50MzIoYXJnc1swXSk7CisgICAgICAgIGVuZCA9
IGltcC0+bGVuZ3RoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHN0
YXJ0ID0gdG9JbnQzMihhcmdzWzBdKTsKKyAgICAgICAgZW5kID0gdG9JbnQzMihhcmdzWzFdKTsK
KyAgICB9CisgICAgcmV0dXJuIHRvVjgoaW1wLT5zbGljZShzdGFydCwgZW5kKSk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKIAogI2VuZGlmIC8vIEVOQUJMRSgzRF9DQU5WQVMpCkluZGV4
OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHAJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29y
ZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNiArNTgs
MjMgQEAgdm9pZCBXZWJHTEFycmF5OjpzZXRJbXBsKFdlYkdMQXJyYXkqIGFycgogICAgIG1lbWNw
eShiYXNlICsgYnl0ZU9mZnNldCwgYXJyYXktPmJhc2VBZGRyZXNzKCksIGFycmF5LT5ieXRlTGVu
Z3RoKCkpOwogfQogCit2b2lkIFdlYkdMQXJyYXk6OmNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChp
bnQgc3RhcnQsIGludCBlbmQsIHVuc2lnbmVkIGFycmF5U2l6ZSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5n
dGgpCit7CisgICAgaWYgKHN0YXJ0IDwgMCkKKyAgICAgICAgc3RhcnQgKz0gYXJyYXlTaXplOwor
ICAgIGlmIChzdGFydCA8IDApCisgICAgICAgIHN0YXJ0ID0gMDsKKyAgICBpZiAoZW5kIDwgMCkK
KyAgICAgICAgZW5kICs9IGFycmF5U2l6ZTsKKyAgICBpZiAoZW5kIDwgMCkKKyAgICAgICAgZW5k
ID0gMDsKKyAgICBpZiAoZW5kIDwgc3RhcnQpCisgICAgICAgIGVuZCA9IHN0YXJ0OworICAgICpv
ZmZzZXQgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oc3RhcnQpOworICAgICpsZW5ndGggPSBzdGF0
aWNfY2FzdDx1bnNpZ25lZD4oZW5kIC0gc3RhcnQpOworfQorCiB9CiAKICNlbmRpZiAvLyBFTkFC
TEUoM0RfQ0FOVkFTKQpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgJKHJldmlzaW9uIDU2
MTM1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmgJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDcgKzU5LDcgQEAgY2xhc3MgV2ViR0xBcnJheSA6IHB1YmxpYyBSZWZDb3VudGVkPFdl
YgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdCA9IDA7CiAgICAgdmlydHVh
bCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxXZWJHTEFycmF5PiBzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgPSAw
OworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShpbnQgc3RhcnQsIGlu
dCBlbmQpID0gMDsKIAogICAgIHZpcnR1YWwgfldlYkdMQXJyYXkoKTsKIApAQCAtNjgsNiArNjgs
OSBAQCBjbGFzcyBXZWJHTEFycmF5IDogcHVibGljIFJlZkNvdW50ZWQ8V2ViCiAKICAgICB2b2lk
IHNldEltcGwoV2ViR0xBcnJheSogYXJyYXksIHVuc2lnbmVkIGJ5dGVPZmZzZXQsIEV4Y2VwdGlv
bkNvZGUmIGVjKTsKIAorICAgIHZvaWQgY2FsY3VsYXRlT2Zmc2V0QW5kTGVuZ3RoKGludCBzdGFy
dCwgaW50IGVuZCwgdW5zaWduZWQgYXJyYXlTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHVuc2lnbmVkKiBvZmZzZXQsIHVuc2lnbmVkKiBsZW5ndGgpOworCiAgICAgLy8g
SGVscGVyIHRvIHZlcmlmeSB0aGF0IGEgZ2l2ZW4gc3ViLXJhbmdlIG9mIGFuIEFycmF5QnVmZmVy
IGlzCiAgICAgLy8gd2l0aGluIHJhbmdlLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgpJbmRl
eDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEFycmF5LmlkbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQXJyYXkuaWRsCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xBcnJheS5pZGwJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDYgQEAgbW9kdWxlIGh0bWwgewogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQg
bG9uZyBieXRlTGVuZ3RoOwogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgdW5zaWduZWQgbG9u
ZyBsZW5ndGg7CiAKLSAgICAgICAgV2ViR0xBcnJheSBzbGljZShpbiB1bnNpZ25lZCBsb25nIG9m
ZnNldCwgaW4gdW5zaWduZWQgbG9uZyBsZW5ndGgpOworICAgICAgICBbQ3VzdG9tXSBXZWJHTEFy
cmF5IHNsaWNlKGluIGxvbmcgc3RhcnQsIGluIGxvbmcgZW5kKTsKICAgICB9OwogfQpJbmRleDog
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5jcHAJKHJldmlzaW9uIDU2MTM1KQorKysg
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcwLDcgKzcwLDEwIEBAIHVuc2lnbmVkIFdlYkdMQnl0ZUFycmF5OjpieXRlTGVuZ3RoKCkgY28K
ICAgICByZXR1cm4gbV9zaXplICogc2l6ZW9mKHNpZ25lZCBjaGFyKTsKIH0KIAotUGFzc1JlZlB0
cjxXZWJHTEFycmF5PiBXZWJHTEJ5dGVBcnJheTo6c2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNp
Z25lZCBsZW5ndGgpIHsKK1Bhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2ViR0xCeXRlQXJyYXk6OnNs
aWNlKGludCBzdGFydCwgaW50IGVuZCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbV9zaXplLCAmb2Zmc2V0
LCAmbGVuZ3RoKTsKICAgICB1bnNpZ25lZCBmdWxsT2Zmc2V0ID0gbV9ieXRlT2Zmc2V0ICsgb2Zm
c2V0ICogc2l6ZW9mKHNpZ25lZCBjaGFyKTsKICAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRz
PHNpZ25lZCBjaGFyPihidWZmZXIoKS5nZXQoKSwgJmZ1bGxPZmZzZXQsICZsZW5ndGgpOwogICAg
IHJldHVybiBjcmVhdGUoYnVmZmVyKCksIGZ1bGxPZmZzZXQsIGxlbmd0aCk7CkluZGV4OiBXZWJD
b3JlL2h0bWwvY2FudmFzL1dlYkdMQnl0ZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTEJ5dGVBcnJheS5oCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xCeXRlQXJyYXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNyArNDks
NyBAQCBjbGFzcyBXZWJHTEJ5dGVBcnJheSA6IHB1YmxpYyBXZWJHTEFycmF5CiAKICAgICB2aXJ0
dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxl
bmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZSh1
bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRy
PFdlYkdMQXJyYXk+IHNsaWNlKGludCBzdGFydCwgaW50IGVuZCk7CiAKICAgICB2b2lkIHNldCh1
bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQogICAgIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xGbG9hdEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMRmxvYXRBcnJheS5jcHAJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OSw3ICs2OSwx
MCBAQCB1bnNpZ25lZCBXZWJHTEZsb2F0QXJyYXk6OmJ5dGVMZW5ndGgoKSBjCiAgICAgcmV0dXJu
IG1fc2l6ZSAqIHNpemVvZihmbG9hdCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViR0xBcnJheT4gV2Vi
R0xGbG9hdEFycmF5OjpzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0aCkgewor
UGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTEZsb2F0QXJyYXk6OnNsaWNlKGludCBzdGFydCwg
aW50IGVuZCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVP
ZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbV9zaXplLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKICAg
ICB1bnNpZ25lZCBmdWxsT2Zmc2V0ID0gbV9ieXRlT2Zmc2V0ICsgb2Zmc2V0ICogc2l6ZW9mKGZs
b2F0KTsKICAgICBjbGFtcE9mZnNldEFuZE51bUVsZW1lbnRzPGZsb2F0PihidWZmZXIoKSwgJmZ1
bGxPZmZzZXQsICZsZW5ndGgpOwogICAgIHJldHVybiBjcmVhdGUoYnVmZmVyKCksIGZ1bGxPZmZz
ZXQsIGxlbmd0aCk7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRmxvYXRBcnJheS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xGbG9hdEFycmF5LmgJKHJl
dmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEZsb2F0QXJyYXkuaAko
d29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBjbGFzcyBXZWJHTEZsb2F0QXJyYXkgOiBw
dWJsaWMgV2ViR0xBcnJhCiAKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0Owog
ICAgIHZpcnR1YWwgdW5zaWduZWQgYnl0ZUxlbmd0aCgpIGNvbnN0OwotICAgIHZpcnR1YWwgUGFz
c1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVuc2lnbmVkIGxlbmd0
aCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKGludCBzdGFydCwg
aW50IGVuZCk7CiAKICAgICB2b2lkIHNldCh1bnNpZ25lZCBpbmRleCwgZG91YmxlIHZhbHVlKQog
ICAgIHsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJheS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEludEFycmF5LmNwcAkocmV2aXNpb24g
NTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMSW50QXJyYXkuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Miw3ICs3MiwxMCBAQCB1bnNpZ25lZCBXZWJHTEludEFycmF5OjpieXRlTGVu
Z3RoKCkgY29uCiAgICAgcmV0dXJuIG1fc2l6ZSAqIHNpemVvZihpbnQpOwogfQogCi1QYXNzUmVm
UHRyPFdlYkdMQXJyYXk+IFdlYkdMSW50QXJyYXk6OnNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKSB7CitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMSW50QXJyYXk6OnNs
aWNlKGludCBzdGFydCwgaW50IGVuZCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsK
KyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5ndGgoc3RhcnQsIGVuZCwgbV9zaXplLCAmb2Zmc2V0
LCAmbGVuZ3RoKTsKICAgICB1bnNpZ25lZCBmdWxsT2Zmc2V0ID0gbV9ieXRlT2Zmc2V0ICsgb2Zm
c2V0ICogc2l6ZW9mKGludCk7CiAgICAgY2xhbXBPZmZzZXRBbmROdW1FbGVtZW50czxpbnQ+KGJ1
ZmZlcigpLCAmZnVsbE9mZnNldCwgJmxlbmd0aCk7CiAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIo
KSwgZnVsbE9mZnNldCwgbGVuZ3RoKTsKSW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJ
bnRBcnJheS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJh
eS5oCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xJbnRBcnJh
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFdlYkdMSW50QXJyYXkg
OiBwdWJsaWMgV2ViR0xBcnJheSAKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29u
c3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVh
bCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQg
bGVuZ3RoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UoaW50IHN0
YXJ0LCBpbnQgZW5kKTsKIAogICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFs
dWUpCiAgICAgewpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmNwcAko
cmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDEwIEBAIHVuc2lnbmVkIFdlYkdMU2hvcnRB
cnJheTo6Ynl0ZUxlbmd0aCgpIGMKICAgICByZXR1cm4gbV9zaXplICogc2l6ZW9mKHNob3J0KTsK
IH0KIAotUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTFNob3J0QXJyYXk6OnNsaWNlKHVuc2ln
bmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7CitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdl
YkdMU2hvcnRBcnJheTo6c2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIHVuc2lnbmVk
IG9mZnNldCwgbGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwgZW5k
LCBtX3NpemUsICZvZmZzZXQsICZsZW5ndGgpOwogICAgIHVuc2lnbmVkIGZ1bGxPZmZzZXQgPSBt
X2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2Yoc2hvcnQpOwogICAgIGNsYW1wT2Zmc2V0QW5k
TnVtRWxlbWVudHM8c2hvcnQ+KGJ1ZmZlcigpLCAmZnVsbE9mZnNldCwgJmxlbmd0aCk7CiAgICAg
cmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgZnVsbE9mZnNldCwgbGVuZ3RoKTsKSW5kZXg6IFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xTaG9ydEFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9o
dG1sL2NhbnZhcy9XZWJHTFNob3J0QXJyYXkuaAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMU2hvcnRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0
Niw3IEBAIGNsYXNzIFdlYkdMU2hvcnRBcnJheSA6IHB1YmxpYyBXZWJHTEFycmEKIAogICAgIHZp
cnR1YWwgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRl
TGVuZ3RoKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNl
KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQ
dHI8V2ViR0xBcnJheT4gc2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKTsKIAogICAgIHZvaWQgc2V0
KHVuc2lnbmVkIGluZGV4LCBkb3VibGUgdmFsdWUpCiAgICAgewpJbmRleDogV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRCeXRlQXJyYXkuY3BwCShyZXZpc2lvbiA1NjEzNSkK
KysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEJ5dGVBcnJheS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTcyLDcgKzcyLDEwIEBAIHVuc2lnbmVkIFdlYkdMVW5zaWduZWRCeXRlQXJy
YXk6OmJ5dGVMZW4KICAgICByZXR1cm4gbV9zaXplICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIpOwog
fQogCi1QYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OnNsaWNl
KHVuc2lnbmVkIG9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7CitQYXNzUmVmUHRyPFdlYkdMQXJy
YXk+IFdlYkdMVW5zaWduZWRCeXRlQXJyYXk6OnNsaWNlKGludCBzdGFydCwgaW50IGVuZCkKK3sK
KyAgICB1bnNpZ25lZCBvZmZzZXQsIGxlbmd0aDsKKyAgICBjYWxjdWxhdGVPZmZzZXRBbmRMZW5n
dGgoc3RhcnQsIGVuZCwgbV9zaXplLCAmb2Zmc2V0LCAmbGVuZ3RoKTsKICAgICB1bnNpZ25lZCBm
dWxsT2Zmc2V0ID0gbV9ieXRlT2Zmc2V0ICsgb2Zmc2V0ICogc2l6ZW9mKHVuc2lnbmVkIGNoYXIp
OwogICAgIGNsYW1wT2Zmc2V0QW5kTnVtRWxlbWVudHM8dW5zaWduZWQgY2hhcj4oYnVmZmVyKCks
ICZmdWxsT2Zmc2V0LCAmbGVuZ3RoKTsKICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBmdWxs
T2Zmc2V0LCBsZW5ndGgpOwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVk
Qnl0ZUFycmF5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2ln
bmVkQnl0ZUFycmF5LmgJKHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFVuc2lnbmVkQnl0ZUFycmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAg
Y2xhc3MgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheSA6IHB1YmxpYyBXZQogCiAgICAgdmlydHVhbCB1
bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgo
KSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5zaWdu
ZWQgb2Zmc2V0LCB1bnNpZ25lZCBsZW5ndGgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJH
TEFycmF5PiBzbGljZShpbnQgc3RhcnQsIGludCBlbmQpOwogCiAgICAgdm9pZCBzZXQodW5zaWdu
ZWQgaW5kZXgsIGRvdWJsZSB2YWx1ZSkKICAgICB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRJbnRBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2Nh
bnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuY3BwCShyZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNzIsNyArNzIsMTAgQEAgdW5zaWduZWQgV2ViR0xVbnNpZ25lZEludEFycmF5OjpieXRlTGVu
ZwogICAgIHJldHVybiBtX3NpemUgKiBzaXplb2YodW5zaWduZWQgaW50KTsKIH0KIAotUGFzc1Jl
ZlB0cjxXZWJHTEFycmF5PiBXZWJHTFVuc2lnbmVkSW50QXJyYXk6OnNsaWNlKHVuc2lnbmVkIG9m
ZnNldCwgdW5zaWduZWQgbGVuZ3RoKSB7CitQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMVW5z
aWduZWRJbnRBcnJheTo6c2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIHVuc2lnbmVk
IG9mZnNldCwgbGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwgZW5k
LCBtX3NpemUsICZvZmZzZXQsICZsZW5ndGgpOwogICAgIHVuc2lnbmVkIGZ1bGxPZmZzZXQgPSBt
X2J5dGVPZmZzZXQgKyBvZmZzZXQgKiBzaXplb2YodW5zaWduZWQgaW50KTsKICAgICBjbGFtcE9m
ZnNldEFuZE51bUVsZW1lbnRzPHVuc2lnbmVkIGludD4oYnVmZmVyKCksICZmdWxsT2Zmc2V0LCAm
bGVuZ3RoKTsKICAgICByZXR1cm4gY3JlYXRlKGJ1ZmZlcigpLCBmdWxsT2Zmc2V0LCBsZW5ndGgp
OwpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkSW50QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRJbnRBcnJheS5oCShy
ZXZpc2lvbiA1NjEzNSkKKysrIFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZEludEFy
cmF5LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ3LDcgKzQ3LDcgQEAgY2xhc3MgV2ViR0xVbnNpZ25l
ZEludEFycmF5IDogcHVibGljIFdlYgogCiAgICAgdmlydHVhbCB1bnNpZ25lZCBsZW5ndGgoKSBj
b25zdDsKICAgICB2aXJ0dWFsIHVuc2lnbmVkIGJ5dGVMZW5ndGgoKSBjb25zdDsKLSAgICB2aXJ0
dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2UodW5zaWduZWQgb2Zmc2V0LCB1bnNpZ25l
ZCBsZW5ndGgpOworICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBzbGljZShpbnQg
c3RhcnQsIGludCBlbmQpOwogCiAgICAgdm9pZCBzZXQodW5zaWduZWQgaW5kZXgsIGRvdWJsZSB2
YWx1ZSkKICAgICB7CkluZGV4OiBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9y
dEFycmF5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWdu
ZWRTaG9ydEFycmF5LmNwcAkocmV2aXNpb24gNTYxMzUpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFz
L1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzQsNyArNzQs
MTAgQEAgdW5zaWduZWQgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXk6OmJ5dGVMZQogICAgIHJldHVy
biBtX3NpemUgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwogfQogCi1QYXNzUmVmUHRyPFdlYkdM
QXJyYXk+IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpzbGljZSh1bnNpZ25lZCBvZmZzZXQsIHVu
c2lnbmVkIGxlbmd0aCkgeworUGFzc1JlZlB0cjxXZWJHTEFycmF5PiBXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheTo6c2xpY2UoaW50IHN0YXJ0LCBpbnQgZW5kKQoreworICAgIHVuc2lnbmVkIG9mZnNl
dCwgbGVuZ3RoOworICAgIGNhbGN1bGF0ZU9mZnNldEFuZExlbmd0aChzdGFydCwgZW5kLCBtX3Np
emUsICZvZmZzZXQsICZsZW5ndGgpOwogICAgIHVuc2lnbmVkIGZ1bGxPZmZzZXQgPSBtX2J5dGVP
ZmZzZXQgKyBvZmZzZXQgKiBzaXplb2YodW5zaWduZWQgc2hvcnQpOwogICAgIGNsYW1wT2Zmc2V0
QW5kTnVtRWxlbWVudHM8dW5zaWduZWQgc2hvcnQ+KGJ1ZmZlcigpLCAmZnVsbE9mZnNldCwgJmxl
bmd0aCk7CiAgICAgcmV0dXJuIGNyZWF0ZShidWZmZXIoKSwgZnVsbE9mZnNldCwgbGVuZ3RoKTsK
SW5kZXg6IFdlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBXZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMVW5zaWduZWRTaG9ydEFycmF5LmgJ
KHJldmlzaW9uIDU2MTM1KQorKysgV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFVuc2lnbmVkU2hv
cnRBcnJheS5oCSh3b3JraW5nIGNvcHkpCkBAIC00Nyw3ICs0Nyw3IEBAIGNsYXNzIFdlYkdMVW5z
aWduZWRTaG9ydEFycmF5IDogcHVibGljIFcKIAogICAgIHZpcnR1YWwgdW5zaWduZWQgbGVuZ3Ro
KCkgY29uc3Q7CiAgICAgdmlydHVhbCB1bnNpZ25lZCBieXRlTGVuZ3RoKCkgY29uc3Q7Ci0gICAg
dmlydHVhbCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IHNsaWNlKHVuc2lnbmVkIG9mZnNldCwgdW5z
aWduZWQgbGVuZ3RoKTsKKyAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8V2ViR0xBcnJheT4gc2xpY2Uo
aW50IHN0YXJ0LCBpbnQgZW5kKTsKIAogICAgIHZvaWQgc2V0KHVuc2lnbmVkIGluZGV4LCBkb3Vi
bGUgdmFsdWUpCiAgICAgewpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gNTYxMzcpCisrKyBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxMC0wMy0xNyAg
WmhlbnlhbyBNbyAgPHptb0Bnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIFVwZGF0ZSBXZWJHTEFycmF5LnNsaWNlKCkgdG8gbmV3IHNw
ZWMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkLTM1NjEy
CisKKyAgICAgICAgKiBmYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLWV4cGVjdGVk
LnR4dDogQ2hhbmdlZCB0ZXN0cyB0byByZWZsZWN0IHRoZSBuZXcgc2xpY2UgcGFyYW1ldGVyczsg
YWRkIG5ldyB0ZXN0IGNhc2VzIGZvciBkZWZhdWx0IGlucHV0cyBmb3Igc2xpY2UuCisgICAgICAg
ICogZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy5odG1sOiBEaXR0by4KKyAgICAg
ICAgKiBmYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1hcnJheS1pbnZhbGlkLXJhbmdlcy1leHBlY3Rl
ZC50eHQ6IENoYW5nZWQgdGVzdHMgdG8gcmVmbGVjdCB0aGUgbmV3IHNsaWNlIHBhcmFtZXRlcnMu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxpZC1yYW5nZXMu
aHRtbDogRGl0dG8uCisKIDIwMTAtMDMtMTcgIERyZXcgV2lsc29uICA8YXR3aWxzb25AY2hyb21p
dW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0
cy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU2MTM1KQorKysgTGF5b3V0VGVzdHMvZmFzdC9jYW52
YXMvd2ViZ2wvYXJyYXktdW5pdC10ZXN0cy1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTIwLDcgKzIwLDEzIEBAIFBBU1MgQ29uc3RydWN0aW9uIG9mIFdlYkdMQnl0ZUFycmF5IHdpdGgK
IFRlc3Rpbmcgc2xpY2luZyBvZiBXZWJHTEJ5dGVBcnJheQogUEFTUyBhcnJheS5sZW5ndGggaXMg
MzIgLyB0eXBlU2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGggaXMg
KDMyIC8gdHlwZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVu
Z3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2
NDgpLmxlbmd0aCBpcyAwCitUZXN0aW5nIHNsaWNpbmcgd2l0aCBkZWZhdWx0IGlucHV0cyBvZiBX
ZWJHTEJ5dGVBcnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQorUEFTUyBh
cnJheS5zbGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKK1BBU1MgYXJyYXkuc2xpY2Uo
MikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BBU1MgYXJyYXkuc2xpY2UoLTIpLmxl
bmd0aCBpcyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8g
dHlwZVNpemUpCiBQQVNTIFNldHRpbmcgV2ViR0xCeXRlQXJyYXkgZnJvbSBhcnJheSB3aXRoIG91
dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMQnl0ZUFycmF5
IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0
dGluZyBXZWJHTEJ5dGVBcnJheSBmcm9tIFdlYkdMQnl0ZUFycmF5IHdpdGggb3V0LW9mLXJhbmdl
IG9mZnNldCB3YXMgY2F1Z2h0CkBAIC00Myw3ICs0OSwxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBv
ZiBodWdlIFdlYkdMRmxvYXRBcnJhCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xGbG9hdEFycmF5
CiBQQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQs
IDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNs
aWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBh
cnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKK1Rlc3Rpbmcgc2xpY2luZyB3
aXRoIGRlZmF1bHQgaW5wdXRzIG9mIFdlYkdMRmxvYXRBcnJheQorUEFTUyBhcnJheS5sZW5ndGgg
aXMgMzIgLyB0eXBlU2l6ZQorUEFTUyBhcnJheS5zbGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBl
U2l6ZSkKK1BBU1MgYXJyYXkuc2xpY2UoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIK
K1BBU1MgYXJyYXkuc2xpY2UoLTIpLmxlbmd0aCBpcyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3
NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpCiBQQVNTIFNldHRpbmcgV2ViR0xGbG9h
dEFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBB
U1MgU2V0dGluZyBXZWJHTEZsb2F0QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBs
ZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMRmxvYXRBcnJheSBmcm9tIFdlYkdM
RmxvYXRBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodApAQCAtNjYsNyAr
NzgsMTMgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJHTEludEFycmF5IAogVGVzdGlu
ZyBzbGljaW5nIG9mIFdlYkdMSW50QXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlw
ZVNpemUKIFBBU1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5
cGVTaXplKSAtIDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAo
MzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5n
dGggaXMgMAorVGVzdGluZyBzbGljaW5nIHdpdGggZGVmYXVsdCBpbnB1dHMgb2YgV2ViR0xJbnRB
cnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6ZQorUEFTUyBhcnJheS5zbGlj
ZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKK1BBU1MgYXJyYXkuc2xpY2UoMikubGVuZ3Ro
IGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BBU1MgYXJyYXkuc2xpY2UoLTIpLmxlbmd0aCBpcyAy
CitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUp
CiBQQVNTIFNldHRpbmcgV2ViR0xJbnRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdl
IG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xJbnRBcnJheSBmcm9tIGZha2Ug
YXJyYXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xJ
bnRBcnJheSBmcm9tIFdlYkdMSW50QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBj
YXVnaHQKQEAgLTg5LDcgKzEwNywxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBvZiBodWdlIFdlYkdM
U2hvcnRBcnJhCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xTaG9ydEFycmF5CiBQQVNTIGFycmF5
Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYp
Lmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3
NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0
LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKK1Rlc3Rpbmcgc2xpY2luZyB3aXRoIGRlZmF1bHQg
aW5wdXRzIG9mIFdlYkdMU2hvcnRBcnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBl
U2l6ZQorUEFTUyBhcnJheS5zbGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKK1BBU1Mg
YXJyYXkuc2xpY2UoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BBU1MgYXJyYXku
c2xpY2UoLTIpLmxlbmd0aCBpcyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgzNjQ4KS5sZW5n
dGggaXMgKDMyIC8gdHlwZVNpemUpCiBQQVNTIFNldHRpbmcgV2ViR0xTaG9ydEFycmF5IGZyb20g
YXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBX
ZWJHTFNob3J0QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNh
dWdodAogUEFTUyBTZXR0aW5nIFdlYkdMU2hvcnRBcnJheSBmcm9tIFdlYkdMU2hvcnRBcnJheSB3
aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodApAQCAtMTExLDcgKzEzNSwxMyBAQCBQ
QVNTIENvbnN0cnVjdGlvbiBvZiBXZWJHTFVuc2lnbmVkQnl0ZUFyCiBUZXN0aW5nIHNsaWNpbmcg
b2YgV2ViR0xVbnNpZ25lZEJ5dGVBcnJheQogUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBl
U2l6ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGggaXMgKDMyIC8gdHlw
ZVNpemUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgz
MiAvIHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0
aCBpcyAwCitUZXN0aW5nIHNsaWNpbmcgd2l0aCBkZWZhdWx0IGlucHV0cyBvZiBXZWJHTFVuc2ln
bmVkQnl0ZUFycmF5CitQQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCitQQVNTIGFy
cmF5LnNsaWNlKCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQorUEFTUyBhcnJheS5zbGljZSgy
KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gMgorUEFTUyBhcnJheS5zbGljZSgtMikubGVu
Z3RoIGlzIDIKK1BBU1MgYXJyYXkuc2xpY2UoLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0
eXBlU2l6ZSkKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IGZyb20gYXJyYXkg
d2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVu
c2lnbmVkQnl0ZUFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBj
YXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IGZyb20gV2ViR0xVbnNp
Z25lZEJ5dGVBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodApAQCAtMTM0
LDcgKzE2NCwxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBvZiBodWdlIFdlYkdMVW5zaWduZWRJCiBU
ZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xVbnNpZ25lZEludEFycmF5CiBQQVNTIGFycmF5Lmxlbmd0
aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYpLmxlbmd0
aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4
KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0
NzQ4MzY0OCkubGVuZ3RoIGlzIDAKK1Rlc3Rpbmcgc2xpY2luZyB3aXRoIGRlZmF1bHQgaW5wdXRz
IG9mIFdlYkdMVW5zaWduZWRJbnRBcnJheQorUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBl
U2l6ZQorUEFTUyBhcnJheS5zbGljZSgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkKK1BBU1Mg
YXJyYXkuc2xpY2UoMikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDIKK1BBU1MgYXJyYXku
c2xpY2UoLTIpLmxlbmd0aCBpcyAyCitQQVNTIGFycmF5LnNsaWNlKC0yMTQ3NDgzNjQ4KS5sZW5n
dGggaXMgKDMyIC8gdHlwZVNpemUpCiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25lZEludEFycmF5
IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0
dGluZyBXZWJHTFVuc2lnbmVkSW50QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBs
ZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRJbnRBcnJheSBmcm9t
IFdlYkdMVW5zaWduZWRJbnRBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdo
dApAQCAtMTU3LDcgKzE5MywxMyBAQCBQQVNTIENvbnN0cnVjdGlvbiBvZiBodWdlIFdlYkdMVW5z
aWduZWRTCiBUZXN0aW5nIHNsaWNpbmcgb2YgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkKIFBBU1Mg
YXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBBU1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZG
RkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwg
LTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNTIGFycmF5LnNs
aWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAorVGVzdGluZyBzbGljaW5nIHdpdGggZGVm
YXVsdCBpbnB1dHMgb2YgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkKK1BBU1MgYXJyYXkubGVuZ3Ro
IGlzIDMyIC8gdHlwZVNpemUKK1BBU1MgYXJyYXkuc2xpY2UoKS5sZW5ndGggaXMgKDMyIC8gdHlw
ZVNpemUpCitQQVNTIGFycmF5LnNsaWNlKDIpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSAy
CitQQVNTIGFycmF5LnNsaWNlKC0yKS5sZW5ndGggaXMgMgorUEFTUyBhcnJheS5zbGljZSgtMjE0
NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKQogUEFTUyBTZXR0aW5nIFdlYkdMVW5z
aWduZWRTaG9ydEFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBj
YXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSBmcm9tIGZha2UgYXJy
YXkgd2l0aCBpbnZhbGlkIGxlbmd0aCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xVbnNp
Z25lZFNob3J0QXJyYXkgZnJvbSBXZWJHTFVuc2lnbmVkU2hvcnRBcnJheSB3aXRoIG91dC1vZi1y
YW5nZSBvZmZzZXQgd2FzIGNhdWdodApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2Vi
Z2wvYXJyYXktdW5pdC10ZXN0cy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL2FycmF5LXVuaXQtdGVzdHMuaHRtbAkocmV2aXNpb24gNTYxMzUpCisrKyBM
YXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9hcnJheS11bml0LXRlc3RzLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTMxNSw3ICszMTUsNyBAQCBmdW5jdGlvbiB0ZXN0U2xpY2UodHlwZSwgbmFt
ZSkgewogICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTsgaSsrKSB7CiAgICAgICBhc3NlcnRFcSgn
RWxlbWVudCAnICsgaSwgaSwgc2xpY2VbaV0pOwogICAgIH0KLSAgICBzbGljZSA9IGFycmF5LnNs
aWNlKDQsIDYpOworICAgIHNsaWNlID0gYXJyYXkuc2xpY2UoNCwgMTApOwogICAgIGFzc2VydEVx
KCdzbGljZS5sZW5ndGgnLCA2LCBzbGljZS5sZW5ndGgpOwogICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgNjsgaSsrKSB7CiAgICAgICBhc3NlcnRFcSgnRWxlbWVudCAnICsgaSwgNCArIGksIHNsaWNl
W2ldKTsKQEAgLTMzMCwxMiArMzMwLDEyIEBAIGZ1bmN0aW9uIG5lZ2F0aXZlVGVzdFNsaWNlKHR5
cGUsIG5hbWUpIHsKICAgcnVubmluZygnbmVnYXRpdmVUZXN0ICcgKyBuYW1lICsgJyBTbGljZScp
OwogICB0cnkgewogICAgIHZhciBhcnJheSA9IG5ldyB0eXBlKFswLCAxLCAyLCAzLCA0LCA1LCA2
LCA3LCA4LCA5XSk7Ci0gICAgc2xpY2UgPSBhcnJheS5zbGljZSg1LCA2KTsKKyAgICBzbGljZSA9
IGFycmF5LnNsaWNlKDUsIDExKTsKICAgICBpZiAoc2xpY2UubGVuZ3RoICE9IDUpIHsKICAgICAg
IGZhaWwoKTsKICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgc2xpY2UgPSBhcnJheS5zbGljZSgx
MCwgMCk7CisgICAgc2xpY2UgPSBhcnJheS5zbGljZSgxMCwgMTApOwogICAgIGlmIChzbGljZS5s
ZW5ndGggIT0gMCkgewogICAgICAgZmFpbCgpOwogICAgICAgcmV0dXJuOwpAQCAtNDI3LDcgKzQy
NywyNyBAQCBmdW5jdGlvbiB0ZXN0U2xpY2luZ1dpdGhPdXRPZlJhbmdlVmFsdWVzCiAgICAgICAg
IHNob3VsZEJlKCJhcnJheS5sZW5ndGgiLCAiMzIgLyB0eXBlU2l6ZSIpOwogICAgICAgICB0cnkg
ewogICAgICAgICAgICAgc2hvdWxkQmUoImFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYpLmxlbmd0
aCIsICIoMzIgLyB0eXBlU2l6ZSkgLSA0Iik7Ci0gICAgICAgICAgICBzaG91bGRCZSgiYXJyYXku
c2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCIsICIoMzIgLyB0eXBlU2l6ZSkgLSA0Iik7Cisg
ICAgICAgICAgICBzaG91bGRCZSgiYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCIs
ICIwIik7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoIlNs
aWNpbmcgb2YgIiArIG5hbWUgKyAiIHRocmV3IGV4Y2VwdGlvbiIpOworICAgICAgICB9CisgICAg
fSBjYXRjaCAoZSkgeworICAgICAgICB0ZXN0RmFpbGVkKCJFeGNlcHRpb246ICIgKyBlKTsKKyAg
ICB9Cit9CisKK2Z1bmN0aW9uIHRlc3RTbGljaW5nV2l0aERlZmF1bHRWYWx1ZXModHlwZSwgbmFt
ZSwgc3opIHsKKyAgICBkZWJ1ZygiVGVzdGluZyBzbGljaW5nIHdpdGggZGVmYXVsdCBpbnB1dHMg
b2YgIiArIG5hbWUpOworICAgIHRyeSB7CisgICAgICAgIHZhciBidWZmZXIgPSBuZXcgV2ViR0xB
cnJheUJ1ZmZlcigzMik7CisgICAgICAgIGFycmF5ID0gbmV3IHR5cGUoYnVmZmVyKTsKKyAgICAg
ICAgdHlwZVNpemUgPSBzejsKKyAgICAgICAgc2hvdWxkQmUoImFycmF5Lmxlbmd0aCIsICIzMiAv
IHR5cGVTaXplIik7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICBzaG91bGRCZSgiYXJyYXku
c2xpY2UoKS5sZW5ndGgiLCAiKDMyIC8gdHlwZVNpemUpIik7CisgICAgICAgICAgICBzaG91bGRC
ZSgiYXJyYXkuc2xpY2UoMikubGVuZ3RoIiwgIigzMiAvIHR5cGVTaXplKSAtIDIiKTsKKyAgICAg
ICAgICAgIHNob3VsZEJlKCJhcnJheS5zbGljZSgtMikubGVuZ3RoIiwgIjIiKTsKKyAgICAgICAg
ICAgIHNob3VsZEJlKCJhcnJheS5zbGljZSgtMjE0NzQ4MzY0OCkubGVuZ3RoIiwgIigzMiAvIHR5
cGVTaXplKSIpOwogICAgICAgICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICB0ZXN0RmFpbGVk
KCJTbGljaW5nIG9mICIgKyBuYW1lICsgIiB0aHJldyBleGNlcHRpb24iKTsKICAgICAgICAgfQpA
QCAtNTc0LDYgKzU5NCw3IEBAIGZ1bmN0aW9uIHJ1blRlc3RzKCkgewogICAgIHRlc3RDb25zdHJ1
Y3Rpb25XaXRoTmVnYXRpdmVPdXRPZlJhbmdlVmFsdWVzKHR5cGUsIG5hbWUpOwogICAgIHRlc3RD
b25zdHJ1Y3Rpb25PZkh1Z2VBcnJheSh0eXBlLCBuYW1lLCB0ZXN0Q2FzZS5lbGVtZW50U2l6ZUlu
Qnl0ZXMpOwogICAgIHRlc3RTbGljaW5nV2l0aE91dE9mUmFuZ2VWYWx1ZXModHlwZSwgbmFtZSwg
dGVzdENhc2UuZWxlbWVudFNpemVJbkJ5dGVzKTsKKyAgICB0ZXN0U2xpY2luZ1dpdGhEZWZhdWx0
VmFsdWVzKHR5cGUsIG5hbWUsIHRlc3RDYXNlLmVsZW1lbnRTaXplSW5CeXRlcyk7CiAgICAgdGVz
dFNldHRpbmdGcm9tQXJyYXlXaXRoT3V0T2ZSYW5nZU9mZnNldCh0eXBlLCBuYW1lKTsKICAgICB0
ZXN0U2V0dGluZ0Zyb21GYWtlQXJyYXlXaXRoT3V0T2ZSYW5nZUxlbmd0aCh0eXBlLCBuYW1lKTsK
ICAgICB0ZXN0U2V0dGluZ0Zyb21XZWJHTEFycmF5V2l0aE91dE9mUmFuZ2VPZmZzZXQodHlwZSwg
bmFtZSk7CkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1hcnJheS1p
bnZhbGlkLXJhbmdlcy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFz
dC9jYW52YXMvd2ViZ2wvd2ViZ2wtYXJyYXktaW52YWxpZC1yYW5nZXMtZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiA1NjEzNSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3dlYmdsLWFy
cmF5LWludmFsaWQtcmFuZ2VzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOCw3ICs4
LDcgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgV2ViR0xCeXRlQXJyYXkgd2l0aAogVGVzdGluZyBz
bGljaW5nIG9mIFdlYkdMQnl0ZUFycmF5CiBQQVNTIGFycmF5Lmxlbmd0aCBpcyAzMiAvIHR5cGVT
aXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYpLmxlbmd0aCBpcyAoMzIgLyB0eXBl
U2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgKDMy
IC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3Ro
IGlzIDAKIFBBU1MgU2V0dGluZyBXZWJHTEJ5dGVBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9m
LXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xCeXRlQXJyYXkgZnJv
bSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5n
IFdlYkdMQnl0ZUFycmF5IGZyb20gV2ViR0xCeXRlQXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zm
c2V0IHdhcyBjYXVnaHQKQEAgLTE4LDcgKzE4LDcgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgV2Vi
R0xVbnNpZ25lZEJ5dGVBcgogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMVW5zaWduZWRCeXRlQXJy
YXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBBU1MgYXJyYXkuc2xpY2Uo
NCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXku
c2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNT
IGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAogUEFTUyBTZXR0aW5nIFdl
YkdMVW5zaWduZWRCeXRlQXJyYXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQg
d2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRCeXRlQXJyYXkgZnJvbSBmYWtl
IGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdM
VW5zaWduZWRCeXRlQXJyYXkgZnJvbSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5IHdpdGggb3V0LW9m
LXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CkBAIC0yOSw3ICsyOSw3IEBAIFBBU1MgQ29uc3RydWN0
aW9uIG9mIGh1Z2UgV2ViR0xTaG9ydEFycmEKIFRlc3Rpbmcgc2xpY2luZyBvZiBXZWJHTFNob3J0
QXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBBU1MgYXJyYXkuc2xp
Y2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJy
YXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQ
QVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAogUEFTUyBTZXR0aW5n
IFdlYkdMU2hvcnRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMg
Y2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xTaG9ydEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRo
IGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTFNob3J0QXJyYXkg
ZnJvbSBXZWJHTFNob3J0QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQK
QEAgLTQwLDcgKzQwLDcgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJHTFVuc2lnbmVk
UwogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMVW5zaWduZWRTaG9ydEFycmF5CiBQQVNTIGFycmF5
Lmxlbmd0aCBpcyAzMiAvIHR5cGVTaXplCiBQQVNTIGFycmF5LnNsaWNlKDQsIDB4M0ZGRkZGRkYp
Lmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0Ci1QQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3
NDgzNjQ4KS5sZW5ndGggaXMgKDMyIC8gdHlwZVNpemUpIC0gNAorUEFTUyBhcnJheS5zbGljZSg0
LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzIDAKIFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkU2hv
cnRBcnJheSBmcm9tIGFycmF5IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQ
QVNTIFNldHRpbmcgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGgg
aW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRTaG9y
dEFycmF5IGZyb20gV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zm
c2V0IHdhcyBjYXVnaHQKQEAgLTUxLDcgKzUxLDcgQEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVn
ZSBXZWJHTEludEFycmF5IAogVGVzdGluZyBzbGljaW5nIG9mIFdlYkdMSW50QXJyYXkKIFBBU1Mg
YXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNpemUKIFBBU1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZG
RkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVTaXplKSAtIDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwg
LTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIgLyB0eXBlU2l6ZSkgLSA0CitQQVNTIGFycmF5LnNs
aWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGggaXMgMAogUEFTUyBTZXR0aW5nIFdlYkdMSW50QXJy
YXkgZnJvbSBhcnJheSB3aXRoIG91dC1vZi1yYW5nZSBvZmZzZXQgd2FzIGNhdWdodAogUEFTUyBT
ZXR0aW5nIFdlYkdMSW50QXJyYXkgZnJvbSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGgg
d2FzIGNhdWdodAogUEFTUyBTZXR0aW5nIFdlYkdMSW50QXJyYXkgZnJvbSBXZWJHTEludEFycmF5
IHdpdGggb3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CkBAIC02Miw3ICs2Miw3IEBAIFBB
U1MgQ29uc3RydWN0aW9uIG9mIGh1Z2UgV2ViR0xVbnNpZ25lZEkKIFRlc3Rpbmcgc2xpY2luZyBv
ZiBXZWJHTFVuc2lnbmVkSW50QXJyYXkKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIDMyIC8gdHlwZVNp
emUKIFBBU1MgYXJyYXkuc2xpY2UoNCwgMHgzRkZGRkZGRikubGVuZ3RoIGlzICgzMiAvIHR5cGVT
aXplKSAtIDQKLVBBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBpcyAoMzIg
LyB0eXBlU2l6ZSkgLSA0CitQQVNTIGFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGgg
aXMgMAogUEFTUyBTZXR0aW5nIFdlYkdMVW5zaWduZWRJbnRBcnJheSBmcm9tIGFycmF5IHdpdGgg
b3V0LW9mLXJhbmdlIG9mZnNldCB3YXMgY2F1Z2h0CiBQQVNTIFNldHRpbmcgV2ViR0xVbnNpZ25l
ZEludEFycmF5IGZyb20gZmFrZSBhcnJheSB3aXRoIGludmFsaWQgbGVuZ3RoIHdhcyBjYXVnaHQK
IFBBU1MgU2V0dGluZyBXZWJHTFVuc2lnbmVkSW50QXJyYXkgZnJvbSBXZWJHTFVuc2lnbmVkSW50
QXJyYXkgd2l0aCBvdXQtb2YtcmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKQEAgLTczLDcgKzczLDcg
QEAgUEFTUyBDb25zdHJ1Y3Rpb24gb2YgaHVnZSBXZWJHTEZsb2F0QXJyYQogVGVzdGluZyBzbGlj
aW5nIG9mIFdlYkdMRmxvYXRBcnJheQogUEFTUyBhcnJheS5sZW5ndGggaXMgMzIgLyB0eXBlU2l6
ZQogUEFTUyBhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGggaXMgKDMyIC8gdHlwZVNp
emUpIC0gNAotUEFTUyBhcnJheS5zbGljZSg0LCAtMjE0NzQ4MzY0OCkubGVuZ3RoIGlzICgzMiAv
IHR5cGVTaXplKSAtIDQKK1BBU1MgYXJyYXkuc2xpY2UoNCwgLTIxNDc0ODM2NDgpLmxlbmd0aCBp
cyAwCiBQQVNTIFNldHRpbmcgV2ViR0xGbG9hdEFycmF5IGZyb20gYXJyYXkgd2l0aCBvdXQtb2Yt
cmFuZ2Ugb2Zmc2V0IHdhcyBjYXVnaHQKIFBBU1MgU2V0dGluZyBXZWJHTEZsb2F0QXJyYXkgZnJv
bSBmYWtlIGFycmF5IHdpdGggaW52YWxpZCBsZW5ndGggd2FzIGNhdWdodAogUEFTUyBTZXR0aW5n
IFdlYkdMRmxvYXRBcnJheSBmcm9tIFdlYkdMRmxvYXRBcnJheSB3aXRoIG91dC1vZi1yYW5nZSBv
ZmZzZXQgd2FzIGNhdWdodApJbmRleDogTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvd2Vi
Z2wtYXJyYXktaW52YWxpZC1yYW5nZXMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC93ZWJnbC1hcnJheS1pbnZhbGlkLXJhbmdlcy5odG1sCShyZXZpc2lv
biA1NjEzNSkKKysrIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3dlYmdsLWFycmF5LWlu
dmFsaWQtcmFuZ2VzLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTcxLDcgKzcxLDcgQEAgZnVuY3Rp
b24gdGVzdFNsaWNpbmdXaXRoT3V0T2ZSYW5nZVZhbHVlcwogICAgICAgICBzaG91bGRCZSgiYXJy
YXkubGVuZ3RoIiwgIjMyIC8gdHlwZVNpemUiKTsKICAgICAgICAgdHJ5IHsKICAgICAgICAgICAg
IHNob3VsZEJlKCJhcnJheS5zbGljZSg0LCAweDNGRkZGRkZGKS5sZW5ndGgiLCAiKDMyIC8gdHlw
ZVNpemUpIC0gNCIpOwotICAgICAgICAgICAgc2hvdWxkQmUoImFycmF5LnNsaWNlKDQsIC0yMTQ3
NDgzNjQ4KS5sZW5ndGgiLCAiKDMyIC8gdHlwZVNpemUpIC0gNCIpOworICAgICAgICAgICAgc2hv
dWxkQmUoImFycmF5LnNsaWNlKDQsIC0yMTQ3NDgzNjQ4KS5sZW5ndGgiLCAiMCIpOwogICAgICAg
ICB9IGNhdGNoIChlKSB7CiAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJTbGljaW5nIG9mICIgKyBu
YW1lICsgIiB0aHJldyBleGNlcHRpb24iKTsKICAgICAgICAgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>51654</attachid>
            <date>2010-03-25 10:18:53 -0700</date>
            <delta_ts>2010-03-30 16:13:57 -0700</delta_ts>
            <desc>revised patch: add explanation in the changeLog.</desc>
            <filename>arraySet.patch</filename>
            <type>text/plain</type>
            <size>6837</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NjQ2MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDMtMjQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbXBsZW1l
bnQgbWVtbW92ZSBiZWhhdmlvciBmb3IgV2ViR0xBcnJheSBzZXQoKQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzU2MTkKKworICAgICAgICBOZXcgdGVz
dCBjYXNlcyBhcmUgYWRkZWQgdG8gZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0dGVycy5odG1s
LgorCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xBcnJheS5jcHA6IFVzZSBtZW1tb3ZlIGlu
c3RlYWQgb2YgbWVtY3B5OyB3aXRoIG1lbW1vdmUsIGNvcHlpbmcgdGFrZXMgcGxhY2UgYXMgaWYg
YW4gaW50ZXJtZWRpYXRlIGJ1ZmZlciB3YXMgdXNlZCwgYWxsb3dpbmcgdGhlIGRlc3RpbmF0aW9u
IGFuZCBzb3VyY2UgdG8gb3ZlcmxhcC4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMQXJyYXk6OnNl
dEltcGwpOgorCiAyMDEwLTAzLTIzICBFdmFuIE1hcnRpbiAgPGV2YW5AY2hyb21pdW0ub3JnPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IERtaXRyeSBUaXRvdi4KSW5kZXg6IFdlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xBcnJheS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTEFycmF5LmNwcAkocmV2aXNpb24gNTY0NDYpCisrKyBXZWJDb3JlL2h0bWwvY2FudmFzL1dl
YkdMQXJyYXkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3ICs1NSw3IEBAIHZvaWQgV2ViR0xB
cnJheTo6c2V0SW1wbChXZWJHTEFycmF5KiBhcnIKICAgICB9CiAKICAgICBjaGFyKiBiYXNlID0g
c3RhdGljX2Nhc3Q8Y2hhcio+KGJhc2VBZGRyZXNzKCkpOwotICAgIG1lbWNweShiYXNlICsgYnl0
ZU9mZnNldCwgYXJyYXktPmJhc2VBZGRyZXNzKCksIGFycmF5LT5ieXRlTGVuZ3RoKCkpOworICAg
IG1lbW1vdmUoYmFzZSArIGJ5dGVPZmZzZXQsIGFycmF5LT5iYXNlQWRkcmVzcygpLCBhcnJheS0+
Ynl0ZUxlbmd0aCgpKTsKIH0KIAogdm9pZCBXZWJHTEFycmF5OjpjYWxjdWxhdGVPZmZzZXRBbmRM
ZW5ndGgoaW50IHN0YXJ0LCBpbnQgZW5kLCB1bnNpZ25lZCBhcnJheVNpemUsCkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiA1NjQ2MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDEzIEBACisyMDEwLTAzLTI0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVt
ZW50IG1lbW1vdmUgYmVoYXZpb3IgZm9yIFdlYkdMQXJyYXkgc2V0KCkKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM1NjE5CisKKyAgICAgICAgKiBmYXN0
L2NhbnZhcy93ZWJnbC9hcnJheS1zZXR0ZXJzLWV4cGVjdGVkLnR4dDogVGVzdGluZyBzaGFyZWQg
b3ZlcmxhcHBpbmcgYnVmZmVyIHNldCgpIGJlaGF2aW9ycy4KKyAgICAgICAgKiBmYXN0L2NhbnZh
cy93ZWJnbC9hcnJheS1zZXR0ZXJzLmh0bWw6IERpdHRvLgorCiAyMDEwLTAzLTIzICBFdmFuIE1h
cnRpbiAgPGV2YW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERtaXRyeSBU
aXRvdi4KSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldHRlcnMt
ZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmds
L2FycmF5LXNldHRlcnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NjQ0NikKKysrIExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL2FycmF5LXNldHRlcnMtZXhwZWN0ZWQudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC0xNyw2ICsxNywxNiBAQCBQQVNTIHdlYkdMQXJyYXlbMF0gaXMgYXJyYXlbMF0K
IFBBU1Mgd2ViR0xBcnJheS5nZXQoMCkgaXMgYXJyYXlbMF0KIFBBU1Mgd2ViR0xBcnJheVsxXSBp
cyBhcnJheVsxXQogUEFTUyB3ZWJHTEFycmF5LmdldCgxKSBpcyBhcnJheVsxXQorUEFTUyB3ZWJH
TEFycmF5WzJdIGlzIDg4CitQQVNTIHdlYkdMQXJyYXlbM10gaXMgOTkKK1BBU1Mgd2ViR0xBcnJh
eVsxXSBpcyA4OAorUEFTUyB3ZWJHTEFycmF5WzJdIGlzIDk5CitQQVNTIGFycmF5WzBdIGlzIDk5
CitQQVNTIGFycmF5WzFdIGlzIDk5CitQQVNTIHdlYkdMQXJyYXlbM10gaXMgOTkKK1BBU1Mgd2Vi
R0xBcnJheVs0XSBpcyA3NworUEFTUyBhcnJheVswXSBpcyA5OQorUEFTUyBhcnJheVswXSBpcyA5
OQogVGVzdGluZyBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5CiBQQVNTIHdlYkdMQXJyYXkgaXMgYXJy
YXkKIFBBU1Mgd2ViR0xBcnJheVswXSBpcyBhcnJheVswXQpAQCAtMzEsNiArNDEsMTYgQEAgUEFT
UyB3ZWJHTEFycmF5WzBdIGlzIGFycmF5WzBdCiBQQVNTIHdlYkdMQXJyYXkuZ2V0KDApIGlzIGFy
cmF5WzBdCiBQQVNTIHdlYkdMQXJyYXlbMV0gaXMgYXJyYXlbMV0KIFBBU1Mgd2ViR0xBcnJheS5n
ZXQoMSkgaXMgYXJyYXlbMV0KK1BBU1Mgd2ViR0xBcnJheVsyXSBpcyA4OAorUEFTUyB3ZWJHTEFy
cmF5WzNdIGlzIDk5CitQQVNTIHdlYkdMQXJyYXlbMV0gaXMgODgKK1BBU1Mgd2ViR0xBcnJheVsy
XSBpcyA5OQorUEFTUyBhcnJheVswXSBpcyA5OQorUEFTUyBhcnJheVsxXSBpcyA5OQorUEFTUyB3
ZWJHTEFycmF5WzNdIGlzIDk5CitQQVNTIHdlYkdMQXJyYXlbNF0gaXMgNzcKK1BBU1MgYXJyYXlb
MF0gaXMgOTkKK1BBU1MgYXJyYXlbMF0gaXMgOTkKIFRlc3RpbmcgV2ViR0xTaG9ydEFycmF5CiBQ
QVNTIHdlYkdMQXJyYXkgaXMgYXJyYXkKIFBBU1Mgd2ViR0xBcnJheVswXSBpcyBhcnJheVswXQpA
QCAtNDUsNiArNjUsMTYgQEAgUEFTUyB3ZWJHTEFycmF5WzBdIGlzIGFycmF5WzBdCiBQQVNTIHdl
YkdMQXJyYXkuZ2V0KDApIGlzIGFycmF5WzBdCiBQQVNTIHdlYkdMQXJyYXlbMV0gaXMgYXJyYXlb
MV0KIFBBU1Mgd2ViR0xBcnJheS5nZXQoMSkgaXMgYXJyYXlbMV0KK1BBU1Mgd2ViR0xBcnJheVsy
XSBpcyA4OAorUEFTUyB3ZWJHTEFycmF5WzNdIGlzIDk5CitQQVNTIHdlYkdMQXJyYXlbMV0gaXMg
ODgKK1BBU1Mgd2ViR0xBcnJheVsyXSBpcyA5OQorUEFTUyBhcnJheVswXSBpcyA5OQorUEFTUyBh
cnJheVsxXSBpcyA5OQorUEFTUyB3ZWJHTEFycmF5WzNdIGlzIDk5CitQQVNTIHdlYkdMQXJyYXlb
NF0gaXMgNzcKK1BBU1MgYXJyYXlbMF0gaXMgOTkKK1BBU1MgYXJyYXlbMF0gaXMgOTkKIFRlc3Rp
bmcgV2ViR0xVbnNpZ25lZFNob3J0QXJyYXkKIFBBU1Mgd2ViR0xBcnJheSBpcyBhcnJheQogUEFT
UyB3ZWJHTEFycmF5WzBdIGlzIGFycmF5WzBdCkBAIC01OSw2ICs4OSwxNiBAQCBQQVNTIHdlYkdM
QXJyYXlbMF0gaXMgYXJyYXlbMF0KIFBBU1Mgd2ViR0xBcnJheS5nZXQoMCkgaXMgYXJyYXlbMF0K
IFBBU1Mgd2ViR0xBcnJheVsxXSBpcyBhcnJheVsxXQogUEFTUyB3ZWJHTEFycmF5LmdldCgxKSBp
cyBhcnJheVsxXQorUEFTUyB3ZWJHTEFycmF5WzJdIGlzIDg4CitQQVNTIHdlYkdMQXJyYXlbM10g
aXMgOTkKK1BBU1Mgd2ViR0xBcnJheVsxXSBpcyA4OAorUEFTUyB3ZWJHTEFycmF5WzJdIGlzIDk5
CitQQVNTIGFycmF5WzBdIGlzIDk5CitQQVNTIGFycmF5WzFdIGlzIDk5CitQQVNTIHdlYkdMQXJy
YXlbM10gaXMgOTkKK1BBU1Mgd2ViR0xBcnJheVs0XSBpcyA3NworUEFTUyBhcnJheVswXSBpcyA5
OQorUEFTUyBhcnJheVswXSBpcyA5OQogVGVzdGluZyBXZWJHTEludEFycmF5CiBQQVNTIHdlYkdM
QXJyYXkgaXMgYXJyYXkKIFBBU1Mgd2ViR0xBcnJheVswXSBpcyBhcnJheVswXQpAQCAtNzMsNiAr
MTEzLDE2IEBAIFBBU1Mgd2ViR0xBcnJheVswXSBpcyBhcnJheVswXQogUEFTUyB3ZWJHTEFycmF5
LmdldCgwKSBpcyBhcnJheVswXQogUEFTUyB3ZWJHTEFycmF5WzFdIGlzIGFycmF5WzFdCiBQQVNT
IHdlYkdMQXJyYXkuZ2V0KDEpIGlzIGFycmF5WzFdCitQQVNTIHdlYkdMQXJyYXlbMl0gaXMgODgK
K1BBU1Mgd2ViR0xBcnJheVszXSBpcyA5OQorUEFTUyB3ZWJHTEFycmF5WzFdIGlzIDg4CitQQVNT
IHdlYkdMQXJyYXlbMl0gaXMgOTkKK1BBU1MgYXJyYXlbMF0gaXMgOTkKK1BBU1MgYXJyYXlbMV0g
aXMgOTkKK1BBU1Mgd2ViR0xBcnJheVszXSBpcyA5OQorUEFTUyB3ZWJHTEFycmF5WzRdIGlzIDc3
CitQQVNTIGFycmF5WzBdIGlzIDk5CitQQVNTIGFycmF5WzBdIGlzIDk5CiBUZXN0aW5nIFdlYkdM
VW5zaWduZWRJbnRBcnJheQogUEFTUyB3ZWJHTEFycmF5IGlzIGFycmF5CiBQQVNTIHdlYkdMQXJy
YXlbMF0gaXMgYXJyYXlbMF0KQEAgLTg3LDYgKzEzNywxNiBAQCBQQVNTIHdlYkdMQXJyYXlbMF0g
aXMgYXJyYXlbMF0KIFBBU1Mgd2ViR0xBcnJheS5nZXQoMCkgaXMgYXJyYXlbMF0KIFBBU1Mgd2Vi
R0xBcnJheVsxXSBpcyBhcnJheVsxXQogUEFTUyB3ZWJHTEFycmF5LmdldCgxKSBpcyBhcnJheVsx
XQorUEFTUyB3ZWJHTEFycmF5WzJdIGlzIDg4CitQQVNTIHdlYkdMQXJyYXlbM10gaXMgOTkKK1BB
U1Mgd2ViR0xBcnJheVsxXSBpcyA4OAorUEFTUyB3ZWJHTEFycmF5WzJdIGlzIDk5CitQQVNTIGFy
cmF5WzBdIGlzIDk5CitQQVNTIGFycmF5WzFdIGlzIDk5CitQQVNTIHdlYkdMQXJyYXlbM10gaXMg
OTkKK1BBU1Mgd2ViR0xBcnJheVs0XSBpcyA3NworUEFTUyBhcnJheVswXSBpcyA5OQorUEFTUyBh
cnJheVswXSBpcyA5OQogVGVzdGluZyBXZWJHTEZsb2F0QXJyYXkKIFBBU1Mgd2ViR0xBcnJheSBp
cyBhcnJheQogUEFTUyB3ZWJHTEFycmF5WzBdIGlzIGFycmF5WzBdCkBAIC0xMDEsNiArMTYxLDE2
IEBAIFBBU1Mgd2ViR0xBcnJheVswXSBpcyBhcnJheVswXQogUEFTUyB3ZWJHTEFycmF5LmdldCgw
KSBpcyBhcnJheVswXQogUEFTUyB3ZWJHTEFycmF5WzFdIGlzIGFycmF5WzFdCiBQQVNTIHdlYkdM
QXJyYXkuZ2V0KDEpIGlzIGFycmF5WzFdCitQQVNTIHdlYkdMQXJyYXlbMl0gaXMgODgKK1BBU1Mg
d2ViR0xBcnJheVszXSBpcyA5OQorUEFTUyB3ZWJHTEFycmF5WzFdIGlzIDg4CitQQVNTIHdlYkdM
QXJyYXlbMl0gaXMgOTkKK1BBU1MgYXJyYXlbMF0gaXMgOTkKK1BBU1MgYXJyYXlbMV0gaXMgOTkK
K1BBU1Mgd2ViR0xBcnJheVszXSBpcyA5OQorUEFTUyB3ZWJHTEFycmF5WzRdIGlzIDc3CitQQVNT
IGFycmF5WzBdIGlzIDk5CitQQVNTIGFycmF5WzBdIGlzIDk5CiBQQVNTIHN1Y2Nlc3NmdWxseVBh
cnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL2FycmF5LXNldHRlcnMuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9m
YXN0L2NhbnZhcy93ZWJnbC9hcnJheS1zZXR0ZXJzLmh0bWwJKHJldmlzaW9uIDU2NDQ2KQorKysg
TGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvYXJyYXktc2V0dGVycy5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0zOSw2ICszOSwyOSBAQCBmdW5jdGlvbiB0ZXN0U2V0dGVycyh0eXBlTmFtZSwg
bG93LCBoaWdoCiAgICAgd2ViR0xBcnJheS5zZXQoMSwgYXJyYXlbMV0pOwogICAgIHNob3VsZEJl
KCJ3ZWJHTEFycmF5WzFdIiwgImFycmF5WzFdIik7CiAgICAgc2hvdWxkQmUoIndlYkdMQXJyYXku
Z2V0KDEpIiwgImFycmF5WzFdIik7CisKKyAgICAvLyBWZXJpZnkgc2V0KCkgYmVoYXZlcyBjb3Jy
ZWN0bHkgd2l0aCBzaGFyZWQgdW5kZXJseWluZyBidWZmZXIuIAorICAgIGFycmF5ID0gWzAsIDEs
IDIsIDMsIDQsIDVdOworICAgIHdlYkdMQXJyYXkgPSBuZXcgdHlwZSg2KTsKKyAgICB3ZWJHTEFy
cmF5LnNldChhcnJheSk7CisgICAgYXJyYXkgPSB3ZWJHTEFycmF5LnNsaWNlKDIsIDQpOworICAg
IGFycmF5WzBdID0gODg7CisgICAgYXJyYXlbMV0gPSA5OTsKKyAgICBzaG91bGRCZSgid2ViR0xB
cnJheVsyXSIsICI4OCIpOworICAgIHNob3VsZEJlKCJ3ZWJHTEFycmF5WzNdIiwgIjk5Iik7Cisg
ICAgLy8gcHJlLW92ZXJsYXAKKyAgICB3ZWJHTEFycmF5LnNldChhcnJheSwgMSk7CisgICAgc2hv
dWxkQmUoIndlYkdMQXJyYXlbMV0iLCAiODgiKTsKKyAgICBzaG91bGRCZSgid2ViR0xBcnJheVsy
XSIsICI5OSIpOworICAgIHNob3VsZEJlKCJhcnJheVswXSIsICI5OSIpOworICAgIHNob3VsZEJl
KCJhcnJheVsxXSIsICI5OSIpOworICAgIGFycmF5WzFdID0gNzc7CisgICAgLy8gcG9zdC1vdmVy
bGFwCisgICAgd2ViR0xBcnJheS5zZXQoYXJyYXksIDMpOworICAgIHNob3VsZEJlKCJ3ZWJHTEFy
cmF5WzNdIiwgIjk5Iik7CisgICAgc2hvdWxkQmUoIndlYkdMQXJyYXlbNF0iLCAiNzciKTsKKyAg
ICBzaG91bGRCZSgiYXJyYXlbMF0iLCAiOTkiKTsKKyAgICBzaG91bGRCZSgiYXJyYXlbMF0iLCAi
OTkiKTsKIH0KIAogdGVzdFNldHRlcnMoIldlYkdMQnl0ZUFycmF5IiwgLTEyOCwgMTI3KTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>