<?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>37281</bug_id>
          
          <creation_ts>2010-04-08 11:03:49 -0700</creation_ts>
          <short_desc>Emulate GL_IMPLEMENTATION_COLOR_READ_FORMAT/TYPE for glGet</short_desc>
          <delta_ts>2010-04-22 09:54:17 -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>PC</rep_platform>
          <op_sys>OS X 10.5</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="Zhenyao Mo">zmo</reporter>
          <assigned_to name="Zhenyao Mo">zmo</assigned_to>
          <cc>cmarrin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>kbr</cc>
    
    <cc>oliver</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>210274</commentid>
    <comment_count>0</comment_count>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-08 11:03:49 -0700</bug_when>
    <thetext>GL_IMPLEMENTATION_COLOR_READ_FORMAT and GL_IMPLEMENTATION_COLOR_READ_TYPE are part of ES but not GL.  Need to emulate them in GraphicsContext3DMac and WebGraphicsContext3DDefaultImpl.  Could just return any of the supported pair, but for desktop users, GL_RGB/GL_UNSIGNED_BYTE might be the most useful format.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212692</commentid>
    <comment_count>1</comment_count>
      <attachid>53396</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-14 18:42:07 -0700</bug_when>
    <thetext>Created attachment 53396
patch

Although currently we return RGB/UNSIGNED_BYTE as the other supported combination for readPixels(), all possible valid combinations have been tested.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212693</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-04-14 18:45:23 -0700</bug_when>
    <thetext>Attachment 53396 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1059:  One space before end of line comments  [whitespace/comments] [5]
WebKit/chromium/src/WebGraphicsContext3DDefaultImpl.cpp:1062:  One space before end of line comments  [whitespace/comments] [5]
Total errors found: 2 in 8 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>212695</commentid>
    <comment_count>3</comment_count>
      <attachid>53397</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-14 18:49:46 -0700</bug_when>
    <thetext>Created attachment 53397
revised patch: remove two extra whitespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212958</commentid>
    <comment_count>4</comment_count>
      <attachid>53397</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-04-15 11:51:51 -0700</bug_when>
    <thetext>Comment on attachment 53397
revised patch: remove two extra whitespace

Generally looks good; a few comments.

&gt; Index: WebCore/html/canvas/WebGLRenderingContext.cpp
&gt; ===================================================================
&gt; --- WebCore/html/canvas/WebGLRenderingContext.cpp	(revision 57587)
&gt; +++ WebCore/html/canvas/WebGLRenderingContext.cpp	(working copy)
&gt; @@ -1646,7 +1648,7 @@ PassRefPtr&lt;WebGLArray&gt; WebGLRenderingCon
&gt;      if (type == GraphicsContext3D::UNSIGNED_BYTE)
&gt;          array = WebGLUnsignedByteArray::create(num);
&gt;      else
&gt; -        array = WebGLUnsignedShortArray::create(num);
&gt; +        array = WebGLUnsignedByteArray::create(num * sizeof(unsigned short));

This change is incorrect. readPixels is supposed to return a WebGLUnsignedShortArray when the type is UNSIGNED_SHORT.

&gt; Index: LayoutTests/fast/canvas/webgl/read-pixels.html
&gt; ===================================================================
&gt; --- LayoutTests/fast/canvas/webgl/read-pixels.html	(revision 57587)
&gt; +++ LayoutTests/fast/canvas/webgl/read-pixels.html	(working copy)
&gt; @@ -24,90 +24,250 @@ void main()
&gt;      gl_FragColor = color;
&gt;  }
&gt;  &lt;/script&gt;
&gt; -
&gt; +&lt;/head&gt;
&gt; +&lt;body&gt;
&gt; +&lt;canvas id=&quot;example&quot; width=&quot;32px&quot; height=&quot;32px&quot;&gt;&lt;/canvas&gt;
&gt; +&lt;div id=&quot;description&quot;&gt;&lt;/div&gt;
&gt; +&lt;div id=&quot;console&quot;&gt;&lt;/div&gt;
&gt;  &lt;script&gt;
&gt;  var successfullyParsed = false;
&gt;  
&gt; -// These four declarations need to be global for &quot;shouldBe&quot; to see them
&gt; +// The below declarations need to be global for &quot;shouldBe&quot; to see them
&gt;  var gl = null;
&gt;  var array = null;
&gt;  var expectedSize = 0;
&gt; -var pixel = [ 0, 0, 0, 1 ];
&gt; +var pixel = [ 0, 0, 0, 0 ];
&gt; +var expectedColor = [ 0, 0, 0, 0 ];
&gt; +var pixelFormat = 0;
&gt; +var pixelType = 0;
&gt; +
&gt; +function getPixelFormatText(format)
&gt; +{
&gt; +    switch (format) {
&gt; +    case gl.ALPHA:
&gt; +        return &quot;ALPHA&quot;;
&gt; +    case gl.RGB:
&gt; +        return &quot;RGB&quot;;
&gt; +    case gl.RGBA:
&gt; +        return &quot;RGBA&quot;;
&gt; +    default:
&gt; +        return &quot;UNKNOWN&quot;;
&gt; +    }
&gt; +}
&gt;  
&gt; -function init()
&gt; +function getPixelTypeText(type)
&gt;  {
&gt; -    if (window.layoutTestController) {
&gt; -        layoutTestController.overridePreference(&quot;WebKitWebGLEnabled&quot;, &quot;1&quot;);
&gt; -        layoutTestController.dumpAsText();
&gt; -        layoutTestController.waitUntilDone();
&gt; +    switch (type) {
&gt; +    case gl.UNSIGNED_BYTE:
&gt; +        return &quot;UNSIGNED_BYTE&quot;;
&gt; +    case gl.UNSIGNED_SHORT_5_6_5:
&gt; +        return &quot;UNSIGNED_SHORT_5_6_5&quot;;
&gt; +    case gl.UNSIGNED_SHORT_4_4_4_4:
&gt; +        return &quot;UNSIGNED_SHORT_4_4_4_4&quot;;
&gt; +    case gl.UNSIGNED_SHORT_5_5_5_1:
&gt; +        return &quot;UNSIGNED_SHORT_5_5_5_1&quot;;
&gt; +    default:
&gt; +        return &quot;UNKNOWN&quot;;
&gt;      }
&gt; +}
&gt;  
&gt; -    description(&apos;Verify readPixels() works fine with various PACK_ALIGNMENT values.&apos;);
&gt; +function calculatePixelBytes(format, type)
&gt; +{
&gt; +    var size = 0;
&gt; +    switch (format) {
&gt; +    case gl.ALPHA:
&gt; +        size = 1;
&gt; +        break;
&gt; +    case gl.RGB:
&gt; +        size = 3;
&gt; +        break;
&gt; +    case gl.RGBA:
&gt; +        size = 4;
&gt; +        break;
&gt; +    default:
&gt; +        return -1;
&gt; +    }
&gt; +    switch (type) {
&gt; +    case gl.UNSIGNED_BYTE:
&gt; +        break;
&gt; +    case gl.UNSIGNED_SHORT_5_6_5:
&gt; +        if (format != gl.RGB)
&gt; +            return -1;
&gt; +        size = 2;
&gt; +        break;
&gt; +    case gl.UNSIGNED_SHORT_4_4_4_4:
&gt; +    case gl.UNSIGNED_SHORT_5_5_5_1:
&gt; +        if (format != gl.RGBA)
&gt; +            return -1;
&gt; +        size = 2;
&gt; +        break;
&gt; +    default:
&gt; +        return -1;
&gt; +    }
&gt; +    return size;
&gt; +}
&gt;  
&gt; -    runTest();
&gt; +function calculatePaddingBytes(bytesPerPixel, packAlignment, width)
&gt; +{
&gt; +    var padding = 0;
&gt; +    switch (packAlignment) {
&gt; +    case 1:
&gt; +    case 2:
&gt; +    case 4:
&gt; +    case 8:
&gt; +        padding = (bytesPerPixel * width) % packAlignment;
&gt; +        if (padding &gt; 0)
&gt; +            padding = packAlignment - padding;
&gt; +        break;
&gt; +    default:
&gt; +        return -1;
&gt; +    }
&gt; +    return padding;
&gt;  }
&gt;  
&gt; -function runTestIteration(packAlignment, width, height, size)
&gt; +function packColor(format, type, r, g, b, a)
&gt;  {
&gt; -    debug(&quot;Testing PACK_ALIGNMENT = &quot; + packAlignment + &quot;, width = &quot; + width + &quot;, height = &quot; + height);
&gt; -    gl.clearColor(1, 1, 0, 1);
&gt; +    // FIXME: not sure if the color packing is correct for UNSIGNED_SHORT_*.

The packing below is in fact incorrect. See below.

&gt; +    var color = [ 0, 0, 0, 0 ];
&gt; +    var short = 0;
&gt; +    switch (type) {
&gt; +    case gl.UNSIGNED_BYTE:
&gt; +        switch (format) {
&gt; +        case gl.ALPHA:
&gt; +            color[0] = a;
&gt; +            break;
&gt; +        case gl.RGB:
&gt; +            color[0] = r;
&gt; +            color[1] = g;
&gt; +            color[2] = b;
&gt; +            break;
&gt; +        case gl.RGBA:
&gt; +            color[0] = r;
&gt; +            color[1] = g;
&gt; +            color[2] = b;
&gt; +            color[3] = a;
&gt; +            break;
&gt; +        default:
&gt; +            return null;
&gt; +        }
&gt; +        break;
&gt; +    case gl.UNSIGNED_SHORT_5_6_5:
&gt; +        if (format != gl.RGB)
&gt; +            return null;
&gt; +        r &gt;&gt;= 3;
&gt; +        g &gt;&gt;= 2;
&gt; +        b &gt;&gt;= 3;
&gt; +        short = (r &lt;&lt; 11) + (g &lt;&lt; 5) + b;
&gt; +        color[0] = short % 256;
&gt; +        color[1] = short &gt;&gt; 8;

If the colors were treated as unsigned bytes, then this splitting would need to be dependent on the host platform&apos;s byte order. The splitting here would work for little-endian architectures, but not big-endian ones.

However, per above, readPixels is supposed to return a WebGLUnsignedShortArray in this case. Therefore you can just compare the short value from the WebGLUnsignedShortArray with the value you assembled here, without worrying about splitting it across two unsigned bytes. That should simplify the tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213092</commentid>
    <comment_count>5</comment_count>
      <attachid>53484</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-15 15:38:23 -0700</bug_when>
    <thetext>Created attachment 53484
revised patch : responding to Ken Russell&apos;s review</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213093</commentid>
    <comment_count>6</comment_count>
      <attachid>53485</attachid>
    <who name="Zhenyao Mo">zmo</who>
    <bug_when>2010-04-15 15:45:37 -0700</bug_when>
    <thetext>Created attachment 53485
revised patch: no longer print out the other supported format/type in the test - they are not constant for ES ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215643</commentid>
    <comment_count>7</comment_count>
      <attachid>53485</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2010-04-21 18:59:32 -0700</bug_when>
    <thetext>Comment on attachment 53485
revised patch: no longer print out the other supported format/type in the test - they are not constant for ES ports.

Looks good.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215909</commentid>
    <comment_count>8</comment_count>
      <attachid>53485</attachid>
    <who name="Dimitri Glazkov (Google)">dglazkov</who>
    <bug_when>2010-04-22 09:24:22 -0700</bug_when>
    <thetext>Comment on attachment 53485
revised patch: no longer print out the other supported format/type in the test - they are not constant for ES ports.

rs=me. I even somewhat understand what it does! :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215930</commentid>
    <comment_count>9</comment_count>
      <attachid>53485</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-22 09:54:12 -0700</bug_when>
    <thetext>Comment on attachment 53485
revised patch: no longer print out the other supported format/type in the test - they are not constant for ES ports.

Clearing flags on attachment: 53485

Committed r58102: &lt;http://trac.webkit.org/changeset/58102&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>215931</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-22 09:54:17 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53396</attachid>
            <date>2010-04-14 18:42:07 -0700</date>
            <delta_ts>2010-04-14 18:49:46 -0700</delta_ts>
            <desc>patch</desc>
            <filename>pixels.patch</filename>
            <type>text/plain</type>
            <size>28210</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzYyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQtMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbXVsYXRl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIGdsR2V0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzI4MQorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KTogUmVt
b3ZlIGVycm9yIGNoZWNrIGJlY2F1c2UgdHdvIGVudW1zIGFyZSBzdXBwb3J0ZWQgbm93LiAKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKTogQWRk
IHR3byBlbnVtcy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVh
ZFBpeGVscyk6IEZpeCBhIHRpbnkgYnVnLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYpOiBFbXVsYXRlIHR3byBlbnVtcy4KKwogMjAxMC0wNC0xNCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU3NjA5LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTc1ODcpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4LDggKzk4LDYgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0Nvbgog
ICAgIG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3JtYXQgPSBpbXBsZW1lbnRhdGlvbkNvbG9y
UmVhZEZvcm1hdDsKICAgICBpbnQgaW1wbGVtZW50YXRpb25Db2xvclJlYWRUeXBlID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFLCAmaW1wbGVt
ZW50YXRpb25Db2xvclJlYWRUeXBlKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSBnZXRFcnJv
cigpIHdoZW4gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQvVFlQRSBhcmUgc3VwcG9y
dGVkLgotICAgIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKICAgICBtX2ltcGxlbWVudGF0aW9uQ29s
b3JSZWFkVHlwZSA9IGltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZTsKICAgICBtX2NvbnRleHQt
PnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAgICAgbV9j
b250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdo
dCgpKTsKQEAgLTEwNTksNiArMTA1NywxMCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQCiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZExvbmdQYXJhbWV0ZXIocG5h
bWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CiAgICAgICAgIHJl
dHVybiBnZXRMb25nUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKKyAgICAgICAgcmV0dXJuIGdldExv
bmdQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfVFlQRToKKyAgICAgICAgcmV0dXJuIGdldExvbmdQYXJhbWV0ZXIo
cG5hbWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6CiAgICAgICAg
IHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CkBAIC0xNjI3LDcgKzE2Mjks
NyBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIShmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSB8fCBmb3JtYXQgPT0gbV9pbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCAmJiB0eXBl
ID09IG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3JtYXQpKSB7CisgICAgaWYgKCEoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ID09IG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3Jt
YXQgJiYgdHlwZSA9PSBtX2ltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNjQ2LDcgKzE2NDgsNyBA
QCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29uCiAgICAgaWYgKHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpCiAgICAgICAgIGFycmF5ID0gV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKG51bSk7CiAgICAgZWxzZQotICAgICAgICBhcnJh
eSA9IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpjcmVhdGUobnVtKTsKKyAgICAgICAgYXJyYXkg
PSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUobnVtICogc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KSk7CiAgICAgdm9pZCogZGF0YSA9IGFycmF5LT5iYXNlQWRkcmVzcygpOwogICAgIG1fY29u
dGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OwogI2lmIFBMQVRGT1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkocmV2aXNpb24gNTc1ODcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMzUsOCArMTEzNSwyMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRGcmFtZWJ1ZmZlckF0CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCiB7Ci0gICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAg
IC8vIE5lZWQgdG8gZW11bGF0ZSBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVC9UWVBF
IGZvciBHTC4gIEFueSB2YWxpZAorICAgIC8vIGNvbWJpbmF0aW9uIHNob3VsZCB3b3JrLCBidXQg
R0xfUkdCL0dMX1VOU0lHTkVEX0JZVEUgbWlnaHQgYmUgdGhlIG1vc3QKKyAgICAvLyB1c2VmdWwg
Zm9yIGRlc2t0b3AgV2ViR0wgdXNlcnMuCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmop
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIElNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfRk9STUFUOgorICAgICAgICAqdmFsdWUgPSBHTF9SR0I7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAgICAgICAqdmFsdWUgPSBH
TF9VTlNJR05FRF9CWVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICA6
OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFByb2dyYW1pdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGludCogdmFsdWUpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3NjIzKQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDEwLTA0LTE0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW11bGF0ZSBHTF9JTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVC9UWVBFIGZvciBnbEdldAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcyODEKKworICAgICAgICAqIHNyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0SW50ZWdlcnYpOiBFbXVsYXRlIHR3byAg
ZW51bXMuCisKIDIwMTAtMDQtMTIgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJl
dmlzaW9uIDU3NTg3KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0OSw3ICsxMDQ5LDIzIEBAIHZv
aWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2UKICAgICBnbEdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZh
bHVlKTsKIH0KIAotREVMRUdBVEVfVE9fR0xfMihnZXRJbnRlZ2VydiwgR2V0SW50ZWdlcnYsIHVu
c2lnbmVkIGxvbmcsIGludCopCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgLy8g
TmVlZCB0byBlbXVsYXRlIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9y
IEdMLiAgQW55IHZhbGlkCisgICAgLy8gY29tYmluYXRpb24gc2hvdWxkIHdvcmssIGJ1dCBHTF9S
R0IvR0xfVU5TSUdORURfQllURSBtaWdodCBiZSB0aGUgbW9zdAorICAgIC8vIHVzZWZ1bCBmb3Ig
ZGVza3RvcCBXZWJHTCB1c2Vycy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBzd2l0
Y2ggKHBuYW1lKSB7CisgICAgY2FzZSAweDhCOUI6ICAvLyBJTVBMRU1FTlRBVElPTl9DT0xPUl9S
RUFEX0ZPUk1BVAorICAgICAgICAqdmFsdWUgPSBHTF9SR0I7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgMHg4QjlBOiAgLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFCisgICAgICAg
ICp2YWx1ZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB9Cit9CiAKIERFTEVH
QVRFX1RPX0dMXzMoZ2V0UHJvZ3JhbWl2LCBHZXRQcm9ncmFtaXYsIFdlYkdMSWQsIHVuc2lnbmVk
IGxvbmcsIGludCopCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3NjIzKQorKysgTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMTQgIFpo
ZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBFbXVsYXRlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURf
Rk9STUFUL1RZUEUgZm9yIGdsR2V0CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0zNzI4MQorCisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1w
aXhlbHMtZXhwZWN0ZWQudHh0OiBBZGQgdGVzdCBjYXNlIGZvciB0aGUgb3RoZXIgc3VwcG9ydGVk
IGZvcm1hdC90eXBlIGluIHJlYWRQaXhlbHMgKGJlc2lkZXMgUkdCQS9VTlNJR05FRF9CWVRFKTsg
YWxzbywgY2hhbmdlZCB0byBhIHNpbXBsZXIgdGVzdCBmcmFtZXdvcmsuCisgICAgICAgICogZmFz
dC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbDogRGl0dG8uCisKIDIwMTAtMDQtMTQgIFhh
biBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdIHNjcm9sbGJhcnMv
c2Nyb2xsYmFyLWNyYXNoLW9uLXJlZnJlc2guaHRtbCBpcyBmbGFrZXkgb24gZGVidWcgYm90cyAK
SW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBp
eGVscy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3NTg3KQorKysgTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0z
LDU0ICszLDIwMiBAQCBWZXJpZnkgcmVhZFBpeGVscygpIHdvcmtzIGZpbmUgd2l0aCB2YXJpCiBP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIFBBU1MgZ2wgPSBpbml0V2ViR0woJ2V4YW1wbGUn
LCAndnNoYWRlcicsICdmc2hhZGVyJywgWyAncG9zJywgJ2NvbG9ySW4nIF0sIFsgMCwgMCwgMCwg
MSBdLCAxKSBpcyBub24tbnVsbC4KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSAxLCB3aWR0aCA9
IDEsIGhlaWdodCA9IDIKK0NoZWNrIHN1cHBvcnRlZCBwaXhlbCBmb3JtYXQvdHlwZSBiZXNpZGVz
IFJHQkEvVU5TSUdORURfQllURQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQ
QVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgcGl4ZWxGb3JtYXQgPT0gZ2wu
UkdCQSAmJiBwaXhlbFR5cGUgPT0gZ2wuVU5TSUdORURfQllURSBpcyBmYWxzZQorVGVzdGluZyBm
b3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSAxLCB3
aWR0aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBl
eHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwg
aXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURf
QllURSwgUEFDS19BTElHTk1FTlQgPSAyLCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VS
Uk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1
NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3Jt
YXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0
aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBl
Y3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMg
ZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllU
RSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBp
cyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQg
PSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9
IDIsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3Rl
ZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhw
ZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwg
UEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDIsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQ
QVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBu
b24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBS
R0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDMs
IGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNp
emUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0
ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFD
S19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDMsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNT
IGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24t
bnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JB
LCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDQsIGhl
aWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUK
K1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRD
b2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19B
TElHTk1FTlQgPSA4LCB3aWR0aCA9IDQsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBp
cyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFy
cmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVs
bC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0
eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDUsIGhlaWdo
dCA9IDEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BB
U1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xv
cgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElH
Tk1FTlQgPSA0LCB3aWR0aCA9IDUsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBn
bC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5
Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4K
K1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBl
ID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDUsIGhlaWdodCA9
IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1Mg
MjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgor
VGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1F
TlQgPSA4LCB3aWR0aCA9IDYsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5O
T19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxl
bmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BB
U1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0g
VU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDcsIGhlaWdodCA9IDIK
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1
LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVz
dGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQg
PSA4LCB3aWR0aCA9IDgsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19F
UlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0
aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1Mg
cGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJ
R05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDEsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAy
LDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBm
b3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDIsIHdp
ZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQ
QVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4
cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMg
ZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRF
LCBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IK
K1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBu
b24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBS
R0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gMSwg
aGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6
ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRD
b2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FM
SUdOTUVOVCA9IDQsIHdpZHRoID0gMiwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJy
YXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4K
K1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUg
PSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gMiwgaGVpZ2h0ID0g
MgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkg
aXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAy
NTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVz
dGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9
IDQsIHdpZHRoID0gMywgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VS
Uk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3Ro
IGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4
ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05F
RF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gMywgaGVpZ2h0ID0gMgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9f
RVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAs
MCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3Jt
YXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRo
ID0gNCwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNT
IGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVj
dGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhw
ZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQ
QUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNCwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BB
U1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24t
bnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0Is
IHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNSwgaGVp
Z2h0ID0gMQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQor
UEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xv
cgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdO
TUVOVCA9IDQsIHdpZHRoID0gNSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXku
bGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BB
U1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBV
TlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNSwgaGVpZ2h0ID0gMgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUs
MTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGlu
ZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgs
IHdpZHRoID0gNiwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlz
IGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwg
aXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9C
WVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNywgaGVpZ2h0ID0gMgorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBp
cyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQg
PSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0g
OCwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVk
U2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJ
R05NRU5UID0gMiwgd2lkdGggPSAxLCBoZWlnaHQgPSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBl
eHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQ
QUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgotUEFTUyBhcnJheS5sZW5n
dGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRl
c3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKLVBBU1MgYXJy
YXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAy
NTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSAyLCBoZWlnaHQgPSAyCi1Q
QVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1
NSwgMCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gMiwgaGVpZ2h0
ID0gMgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsg
MjU1LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDMs
IGhlaWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhl
bCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lk
dGggPSAzLCBoZWlnaHQgPSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBB
U1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9
IDQsIHdpZHRoID0gNCwgaGVpZ2h0ID0gMgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRT
aXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElH
Tk1FTlQgPSA4LCB3aWR0aCA9IDQsIGhlaWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4
cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBB
Q0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSA1LCBoZWlnaHQgPSAxCi1QQVNTIGFycmF5Lmxlbmd0
aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVz
dGluZyBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gNSwgaGVpZ2h0ID0gMgotUEFTUyBhcnJh
eS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1
NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDUsIGhlaWdodCA9IDIKLVBB
U1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1
LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSA2LCBoZWlnaHQg
PSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAy
NTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNywg
aGVpZ2h0ID0gMgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVs
IGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0
aCA9IDgsIGhlaWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFT
UyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCitQQVNTIDI1NSwxMDIsMCwwIGlzIG5vbi1u
dWxsLgorUEFTUyBwaXhlbCBpcyBleHBlY3RlZENvbG9yCiBQQVNTIHN1Y2Nlc3NmdWxseVBhcnNl
ZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFz
L3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9j
YW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbAkocmV2aXNpb24gNTc1ODcpCisrKyBMYXlvdXRU
ZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0yNCw5MCArMjQsMjUwIEBAIHZvaWQgbWFpbigpCiAgICAgZ2xfRnJhZ0NvbG9yID0gY29sb3I7
CiB9CiA8L3NjcmlwdD4KLQorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFzIGlkPSJleGFtcGxlIiB3
aWR0aD0iMzJweCIgaGVpZ2h0PSIzMnB4Ij48L2NhbnZhcz4KKzxkaXYgaWQ9ImRlc2NyaXB0aW9u
Ij48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogPHNjcmlwdD4KIHZhciBzdWNjZXNz
ZnVsbHlQYXJzZWQgPSBmYWxzZTsKIAotLy8gVGhlc2UgZm91ciBkZWNsYXJhdGlvbnMgbmVlZCB0
byBiZSBnbG9iYWwgZm9yICJzaG91bGRCZSIgdG8gc2VlIHRoZW0KKy8vIFRoZSBiZWxvdyBkZWNs
YXJhdGlvbnMgbmVlZCB0byBiZSBnbG9iYWwgZm9yICJzaG91bGRCZSIgdG8gc2VlIHRoZW0KIHZh
ciBnbCA9IG51bGw7CiB2YXIgYXJyYXkgPSBudWxsOwogdmFyIGV4cGVjdGVkU2l6ZSA9IDA7Ci12
YXIgcGl4ZWwgPSBbIDAsIDAsIDAsIDEgXTsKK3ZhciBwaXhlbCA9IFsgMCwgMCwgMCwgMCBdOwor
dmFyIGV4cGVjdGVkQ29sb3IgPSBbIDAsIDAsIDAsIDAgXTsKK3ZhciBwaXhlbEZvcm1hdCA9IDA7
Cit2YXIgcGl4ZWxUeXBlID0gMDsKKworZnVuY3Rpb24gZ2V0UGl4ZWxGb3JtYXRUZXh0KGZvcm1h
dCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgZ2wuQUxQSEE6CisgICAgICAg
IHJldHVybiAiQUxQSEEiOworICAgIGNhc2UgZ2wuUkdCOgorICAgICAgICByZXR1cm4gIlJHQiI7
CisgICAgY2FzZSBnbC5SR0JBOgorICAgICAgICByZXR1cm4gIlJHQkEiOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiAiVU5LTk9XTiI7CisgICAgfQorfQogCi1mdW5jdGlvbiBpbml0KCkK
K2Z1bmN0aW9uIGdldFBpeGVsVHlwZVRleHQodHlwZSkKIHsKLSAgICBpZiAod2luZG93LmxheW91
dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgIGxheW91dFRlc3RDb250cm9sbGVyLm92ZXJyaWRl
UHJlZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKLSAgICAgICAgbGF5b3V0VGVz
dENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBnbC5VTlNJR05F
RF9CWVRFOgorICAgICAgICByZXR1cm4gIlVOU0lHTkVEX0JZVEUiOworICAgIGNhc2UgZ2wuVU5T
SUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHJldHVybiAiVU5TSUdORURfU0hPUlRfNV82XzUi
OworICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgcmV0dXJuICJV
TlNJR05FRF9TSE9SVF80XzRfNF80IjsKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81
XzE6CisgICAgICAgIHJldHVybiAiVU5TSUdORURfU0hPUlRfNV81XzVfMSI7CisgICAgZGVmYXVs
dDoKKyAgICAgICAgcmV0dXJuICJVTktOT1dOIjsKICAgICB9Cit9CiAKLSAgICBkZXNjcmlwdGlv
bignVmVyaWZ5IHJlYWRQaXhlbHMoKSB3b3JrcyBmaW5lIHdpdGggdmFyaW91cyBQQUNLX0FMSUdO
TUVOVCB2YWx1ZXMuJyk7CitmdW5jdGlvbiBjYWxjdWxhdGVQaXhlbEJ5dGVzKGZvcm1hdCwgdHlw
ZSkKK3sKKyAgICB2YXIgc2l6ZSA9IDA7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNl
IGdsLkFMUEhBOgorICAgICAgICBzaXplID0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBn
bC5SR0I6CisgICAgICAgIHNpemUgPSAzOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGdsLlJH
QkE6CisgICAgICAgIHNpemUgPSA0OworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAg
ICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgZ2wu
VU5TSUdORURfQllURToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9S
VF81XzZfNToKKyAgICAgICAgaWYgKGZvcm1hdCAhPSBnbC5SR0IpCisgICAgICAgICAgICByZXR1
cm4gLTE7CisgICAgICAgIHNpemUgPSAyOworICAgICAgICBicmVhazsKKyAgICBjYXNlIGdsLlVO
U0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICBpZiAoZm9ybWF0ICE9IGdsLlJHQkEpCisgICAgICAgICAgICByZXR1cm4gLTE7
CisgICAgICAgIHNpemUgPSAyOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAg
ICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBzaXplOworfQogCi0gICAgcnVuVGVzdCgp
OworZnVuY3Rpb24gY2FsY3VsYXRlUGFkZGluZ0J5dGVzKGJ5dGVzUGVyUGl4ZWwsIHBhY2tBbGln
bm1lbnQsIHdpZHRoKQoreworICAgIHZhciBwYWRkaW5nID0gMDsKKyAgICBzd2l0Y2ggKHBhY2tB
bGlnbm1lbnQpIHsKKyAgICBjYXNlIDE6CisgICAgY2FzZSAyOgorICAgIGNhc2UgNDoKKyAgICBj
YXNlIDg6CisgICAgICAgIHBhZGRpbmcgPSAoYnl0ZXNQZXJQaXhlbCAqIHdpZHRoKSAlIHBhY2tB
bGlnbm1lbnQ7CisgICAgICAgIGlmIChwYWRkaW5nID4gMCkKKyAgICAgICAgICAgIHBhZGRpbmcg
PSBwYWNrQWxpZ25tZW50IC0gcGFkZGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gcGFkZGluZzsKIH0KIAotZnVu
Y3Rpb24gcnVuVGVzdEl0ZXJhdGlvbihwYWNrQWxpZ25tZW50LCB3aWR0aCwgaGVpZ2h0LCBzaXpl
KQorZnVuY3Rpb24gcGFja0NvbG9yKGZvcm1hdCwgdHlwZSwgciwgZywgYiwgYSkKIHsKLSAgICBk
ZWJ1ZygiVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9ICIgKyBwYWNrQWxpZ25tZW50ICsgIiwgd2lk
dGggPSAiICsgd2lkdGggKyAiLCBoZWlnaHQgPSAiICsgaGVpZ2h0KTsKLSAgICBnbC5jbGVhckNv
bG9yKDEsIDEsIDAsIDEpOworICAgIC8vIEZJWE1FOiBub3Qgc3VyZSBpZiB0aGUgY29sb3IgcGFj
a2luZyBpcyBjb3JyZWN0IGZvciBVTlNJR05FRF9TSE9SVF8qLgorICAgIHZhciBjb2xvciA9IFsg
MCwgMCwgMCwgMCBdOworICAgIHZhciBzaG9ydCA9IDA7CisgICAgc3dpdGNoICh0eXBlKSB7Cisg
ICAgY2FzZSBnbC5VTlNJR05FRF9CWVRFOgorICAgICAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
ICAgICBjYXNlIGdsLkFMUEhBOgorICAgICAgICAgICAgY29sb3JbMF0gPSBhOworICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2wuUkdCOgorICAgICAgICAgICAgY29sb3JbMF0gPSBy
OworICAgICAgICAgICAgY29sb3JbMV0gPSBnOworICAgICAgICAgICAgY29sb3JbMl0gPSBiOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgZ2wuUkdCQToKKyAgICAgICAgICAgIGNv
bG9yWzBdID0gcjsKKyAgICAgICAgICAgIGNvbG9yWzFdID0gZzsKKyAgICAgICAgICAgIGNvbG9y
WzJdID0gYjsKKyAgICAgICAgICAgIGNvbG9yWzNdID0gYTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAg
aWYgKGZvcm1hdCAhPSBnbC5SR0IpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAg
ciA+Pj0gMzsKKyAgICAgICAgZyA+Pj0gMjsKKyAgICAgICAgYiA+Pj0gMzsKKyAgICAgICAgc2hv
cnQgPSAociA8PCAxMSkgKyAoZyA8PCA1KSArIGI7CisgICAgICAgIGNvbG9yWzBdID0gc2hvcnQg
JSAyNTY7CisgICAgICAgIGNvbG9yWzFdID0gc2hvcnQgPj4gODsKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgICAgICBpZiAoZm9ybWF0ICE9
IGdsLlJHQkEpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgciA+Pj0gNDsKKyAg
ICAgICAgZyA+Pj0gNDsKKyAgICAgICAgYiA+Pj0gNDsKKyAgICAgICAgYSA+Pj0gNDsKKyAgICAg
ICAgc2hvcnQgPSAociA8PCAxMikgKyAoZyA8PCA4KSArIChiIDw8IDQpICsgYTsKKyAgICAgICAg
Y29sb3JbMF0gPSBzaG9ydCAlIDI1NjsKKyAgICAgICAgY29sb3JbMV0gPSBzaG9ydCA+PiA4Owor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNV81XzE6CisgICAg
ICAgIGlmIChmb3JtYXQgIT0gZ2wuUkdCQSkKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAg
ICAgICByID4+PSAzOworICAgICAgICBnID4+PSAzOworICAgICAgICBiID4+PSAzOworICAgICAg
ICBhID4+PSA3OworICAgICAgICBzaG9ydCA9IChyIDw8IDExKSArIChnIDw8IDYpICsgKGIgPDwg
MSkgKyBhOworICAgICAgICBjb2xvclswXSA9IHNob3J0ICUgMjU2OworICAgICAgICBjb2xvclsx
XSA9IHNob3J0ID4+IDg7CisgICAgICAgIGJyZWFrOworICAgIERlZmF1bHQ6CisgICAgICAgIHJl
dHVybiBudWxsOworICAgIH0KKyAgICByZXR1cm4gY29sb3I7Cit9CisKK2Z1bmN0aW9uIHJ1blRl
c3RJdGVyYXRpb24oZm9ybWF0LCB0eXBlLCBwYWNrQWxpZ25tZW50LCB3aWR0aCwgaGVpZ2h0KQor
eworICAgIGRlYnVnKCJUZXN0aW5nIGZvcm1hdCA9ICIgKyBnZXRQaXhlbEZvcm1hdFRleHQoZm9y
bWF0KSArICIsIHR5cGUgPSAiICsgZ2V0UGl4ZWxUeXBlVGV4dCh0eXBlKQorICAgICAgICAgICsg
IiwgUEFDS19BTElHTk1FTlQgPSAiICsgcGFja0FsaWdubWVudCArICIsIHdpZHRoID0gIiArIHdp
ZHRoICsgIiwgaGVpZ2h0ID0gIiArIGhlaWdodCk7CisgICAgZ2wuY2xlYXJDb2xvcigxLCAwLjQs
IDAsIDEpOwogICAgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9CSVQpOwogICAgIGdsLnBpeGVs
U3RvcmVpKGdsLlBBQ0tfQUxJR05NRU5ULCBwYWNrQWxpZ25tZW50KTsKLSAgICBhcnJheSA9IGds
LnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllU
RSk7Ci0gICAgZXhwZWN0ZWRTaXplID0gc2l6ZTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3Io
KSIsICJnbC5OT19FUlJPUiIpOworICAgIGFycmF5ID0gZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0
aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUpOworICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwg
ImdsLk5PX0VSUk9SIik7CisgICAgdmFyIGJ5dGVzUGVyUGl4ZWwgPSBjYWxjdWxhdGVQaXhlbEJ5
dGVzKGZvcm1hdCwgdHlwZSk7CisgICAgdmFyIHBhZGRpbmcgPSBjYWxjdWxhdGVQYWRkaW5nQnl0
ZXMoYnl0ZXNQZXJQaXhlbCwgcGFja0FsaWdubWVudCwgd2lkdGgpOworICAgIGV4cGVjdGVkU2l6
ZSA9IGJ5dGVzUGVyUGl4ZWwgKiB3aWR0aCAqIGhlaWdodCArIHBhZGRpbmcgKiAoaGVpZ2h0IC0g
MSk7CiAgICAgc2hvdWxkQmUoImFycmF5Lmxlbmd0aCIsICJleHBlY3RlZFNpemUiKTsKICAgICAv
LyBDaGVjayB0aGUgbGFzdCBwaXhlbCBvZiB0aGUgbGFzdCByb3cuCi0gICAgdmFyIHBhZGRpbmcg
PSAwOwotICAgIGlmIChoZWlnaHQgPiAxKQotICAgICAgICBwYWRkaW5nID0gKHNpemUgLSB3aWR0
aCAqIGhlaWdodCAqIDQpIC8gKGhlaWdodCAtIDEpOwotICAgIHZhciBieXRlc1BlclJvdyA9IHdp
ZHRoICogNCArIHBhZGRpbmc7Ci0gICAgdmFyIHBvcyA9IGJ5dGVzUGVyUm93ICogKGhlaWdodCAt
IDEpICsgKHdpZHRoIC0gMSkgKiA0OwotICAgIHBpeGVsWzBdID0gYXJyYXlbcG9zXTsKLSAgICBw
aXhlbFsxXSA9IGFycmF5W3BvcyArIDFdOwotICAgIHBpeGVsWzJdID0gYXJyYXlbcG9zICsgMl07
Ci0gICAgcGl4ZWxbM10gPSBhcnJheVtwb3MgKyAzXTsKLSAgICBzaG91bGRCZSgicGl4ZWwiLCAi
WyAyNTUsIDI1NSwgMCwgMjU1XSIpOwotfQotCi1mdW5jdGlvbiBydW5UZXN0KCkKLXsKLSAgICBz
aG91bGRCZU5vbk51bGwoImdsID0gaW5pdFdlYkdMKCdleGFtcGxlJywgJ3ZzaGFkZXInLCAnZnNo
YWRlcicsIFsgJ3BvcycsICdjb2xvckluJyBdLCBbIDAsIDAsIDAsIDEgXSwgMSkiKTsKLSAgICBn
bC5kaXNhYmxlKGdsLkJMRU5EKTsKLQotICAgIHJ1blRlc3RJdGVyYXRpb24oMSwgMSwgMiwgOCk7
Ci0gICAgcnVuVGVzdEl0ZXJhdGlvbigyLCAxLCAyLCA4KTsKLSAgICBydW5UZXN0SXRlcmF0aW9u
KDQsIDEsIDIsIDgpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgMSwgMiwgMTIpOwotICAgIHJ1
blRlc3RJdGVyYXRpb24oNCwgMiwgMiwgMTYpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgMiwg
MiwgMTYpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oNCwgMywgMiwgMjQpOwotICAgIHJ1blRlc3RJ
dGVyYXRpb24oOCwgMywgMiwgMjgpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oNCwgNCwgMiwgMzIp
OwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgNCwgMiwgMzIpOwotICAgIHJ1blRlc3RJdGVyYXRp
b24oOCwgNSwgMSwgMjApOwotICAgIHJ1blRlc3RJdGVyYXRpb24oNCwgNSwgMiwgNDApOwotICAg
IHJ1blRlc3RJdGVyYXRpb24oOCwgNSwgMiwgNDQpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwg
NiwgMiwgNDgpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgNywgMiwgNjApOwotICAgIHJ1blRl
c3RJdGVyYXRpb24oOCwgOCwgMiwgNjQpOwotCi0gICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1
ZTsKLSAgICB2YXIgZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsK
LSAgICBlcGlsb2d1ZS5vbmxvYWQgPSBmaW5pc2g7Ci0gICAgZXBpbG9ndWUuc3JjID0gIi4uLy4u
L2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiOwotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5k
Q2hpbGQoZXBpbG9ndWUpOwotfQotCi1mdW5jdGlvbiBmaW5pc2goKSB7Ci0gICAgaWYgKHdpbmRv
dy5sYXlvdXRUZXN0Q29udHJvbGxlcikgewotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5u
b3RpZnlEb25lKCk7Ci0gICAgfQorICAgIHZhciBieXRlc1BlclJvdyA9IHdpZHRoICogYnl0ZXNQ
ZXJQaXhlbCArIHBhZGRpbmc7CisgICAgdmFyIHBvcyA9IGJ5dGVzUGVyUm93ICogKGhlaWdodCAt
IDEpICsgKHdpZHRoIC0gMSkgKiBieXRlc1BlclBpeGVsOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgYnl0ZXNQZXJQaXhlbDsgKytpKQorICAgICAgICBwaXhlbFtpXSA9IGFycmF5W3BvcyArIGld
OworICAgIGZvciAodmFyIGkgPSBieXRlc1BlclBpeGVsOyBpIDwgNDsgKytpKQorICAgICAgICBw
aXhlbFtpXSA9IDA7CisgICAgZXhwZWN0ZWRDb2xvciA9IHBhY2tDb2xvcihmb3JtYXQsIHR5cGUs
IDI1NSwgMTAyLCAwLCAyNTUpOworICAgIHNob3VsZEJlTm9uTnVsbChleHBlY3RlZENvbG9yKTsK
KyAgICBzaG91bGRCZSgicGl4ZWwiLCAiZXhwZWN0ZWRDb2xvciIpOwogfQorCitmdW5jdGlvbiBj
aGVja1N1cHBvcnRlZFBpeGVsRm9ybWF0QW5kVHlwZSgpCit7CisgICAgZGVidWcoIkNoZWNrIHN1
cHBvcnRlZCBwaXhlbCBmb3JtYXQvdHlwZSBiZXNpZGVzIFJHQkEvVU5TSUdORURfQllURSIpOwor
ICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CisgICAgcGl4ZWxG
b3JtYXQgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JN
QVQpOworICAgIHBpeGVsVHlwZSA9IGdsLmdldFBhcmFtZXRlcihnbC5JTVBMRU1FTlRBVElPTl9D
T0xPUl9SRUFEX1RZUEUpOworICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VS
Uk9SIik7CisgICAgc2hvdWxkQmVGYWxzZSgicGl4ZWxGb3JtYXQgPT0gZ2wuUkdCQSAmJiBwaXhl
bFR5cGUgPT0gZ2wuVU5TSUdORURfQllURSIpOworfQorCitkZXNjcmlwdGlvbignVmVyaWZ5IHJl
YWRQaXhlbHMoKSB3b3JrcyBmaW5lIHdpdGggdmFyaW91cyBQQUNLX0FMSUdOTUVOVCB2YWx1ZXMu
Jyk7CisKK3Nob3VsZEJlTm9uTnVsbCgiZ2wgPSBpbml0V2ViR0woJ2V4YW1wbGUnLCAndnNoYWRl
cicsICdmc2hhZGVyJywgWyAncG9zJywgJ2NvbG9ySW4nIF0sIFsgMCwgMCwgMCwgMSBdLCAxKSIp
OworZ2wuZGlzYWJsZShnbC5CTEVORCk7CisKK2NoZWNrU3VwcG9ydGVkUGl4ZWxGb3JtYXRBbmRU
eXBlKCk7CisKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgMSwg
MSwgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDIsIDEs
IDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA0LCAxLCAy
KTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgMSwgMik7
CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDQsIDIsIDIpOwor
cnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCAyLCAyKTsKK3J1
blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgNCwgMywgMik7CitydW5U
ZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDMsIDIpOworcnVuVGVz
dEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA0LCA0LCAyKTsKK3J1blRlc3RJ
dGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgNCwgMik7CitydW5UZXN0SXRl
cmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDUsIDEpOworcnVuVGVzdEl0ZXJh
dGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA0LCA1LCAyKTsKK3J1blRlc3RJdGVyYXRp
b24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgNSwgMik7CitydW5UZXN0SXRlcmF0aW9u
KGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDYsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihn
bC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCA3LCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wu
UkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgOCwgMik7CisKK3J1blRlc3RJdGVyYXRpb24ocGl4
ZWxGb3JtYXQsIHBpeGVsVHlwZSwgMSwgMSwgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9y
bWF0LCBwaXhlbFR5cGUsIDIsIDEsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwg
cGl4ZWxUeXBlLCA0LCAxLCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVs
VHlwZSwgOCwgMSwgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUs
IDQsIDIsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCAy
LCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgNCwgMywgMik7
CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDMsIDIpOworcnVu
VGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA0LCA0LCAyKTsKK3J1blRlc3RJ
dGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgNCwgMik7CitydW5UZXN0SXRlcmF0
aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDUsIDEpOworcnVuVGVzdEl0ZXJhdGlvbihw
aXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA0LCA1LCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxG
b3JtYXQsIHBpeGVsVHlwZSwgOCwgNSwgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0
LCBwaXhlbFR5cGUsIDgsIDYsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4
ZWxUeXBlLCA4LCA3LCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlw
ZSwgOCwgOCwgMik7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CiA8L3NjcmlwdD4KLTwv
aGVhZD4KLTxib2R5IG9ubG9hZD0iaW5pdCgpIj4KLTxjYW52YXMgaWQ9ImV4YW1wbGUiIHdpZHRo
PSIzMnB4IiBoZWlnaHQ9IjMycHgiPjwvY2FudmFzPgotPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwv
ZGl2PgotPGRpdiBpZD0iY29uc29sZSI+PC9kaXY+Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvcmVz
b3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+CiA8L2JvZHk+CiA8L2h0bWw+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53397</attachid>
            <date>2010-04-14 18:49:46 -0700</date>
            <delta_ts>2010-04-15 15:38:23 -0700</delta_ts>
            <desc>revised patch: remove two extra whitespace</desc>
            <filename>pixels.patch</filename>
            <type>text/plain</type>
            <size>28208</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzYyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQtMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbXVsYXRl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIGdsR2V0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzI4MQorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KTogUmVt
b3ZlIGVycm9yIGNoZWNrIGJlY2F1c2UgdHdvIGVudW1zIGFyZSBzdXBwb3J0ZWQgbm93LiAKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKTogQWRk
IHR3byBlbnVtcy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVh
ZFBpeGVscyk6IEZpeCBhIHRpbnkgYnVnLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYpOiBFbXVsYXRlIHR3byBlbnVtcy4KKwogMjAxMC0wNC0xNCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU3NjA5LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTc1ODcpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4LDggKzk4LDYgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0Nvbgog
ICAgIG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3JtYXQgPSBpbXBsZW1lbnRhdGlvbkNvbG9y
UmVhZEZvcm1hdDsKICAgICBpbnQgaW1wbGVtZW50YXRpb25Db2xvclJlYWRUeXBlID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFLCAmaW1wbGVt
ZW50YXRpb25Db2xvclJlYWRUeXBlKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSBnZXRFcnJv
cigpIHdoZW4gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQvVFlQRSBhcmUgc3VwcG9y
dGVkLgotICAgIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKICAgICBtX2ltcGxlbWVudGF0aW9uQ29s
b3JSZWFkVHlwZSA9IGltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZTsKICAgICBtX2NvbnRleHQt
PnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAgICAgbV9j
b250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdo
dCgpKTsKQEAgLTEwNTksNiArMTA1NywxMCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQCiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZExvbmdQYXJhbWV0ZXIocG5h
bWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CiAgICAgICAgIHJl
dHVybiBnZXRMb25nUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKKyAgICAgICAgcmV0dXJuIGdldExv
bmdQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfVFlQRToKKyAgICAgICAgcmV0dXJuIGdldExvbmdQYXJhbWV0ZXIo
cG5hbWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6CiAgICAgICAg
IHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CkBAIC0xNjI3LDcgKzE2Mjks
NyBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIShmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSB8fCBmb3JtYXQgPT0gbV9pbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCAmJiB0eXBl
ID09IG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3JtYXQpKSB7CisgICAgaWYgKCEoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ID09IG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3Jt
YXQgJiYgdHlwZSA9PSBtX2ltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkBAIC0xNjQ2LDcgKzE2NDgsNyBA
QCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29uCiAgICAgaWYgKHR5cGUg
PT0gR3JhcGhpY3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEUpCiAgICAgICAgIGFycmF5ID0gV2Vi
R0xVbnNpZ25lZEJ5dGVBcnJheTo6Y3JlYXRlKG51bSk7CiAgICAgZWxzZQotICAgICAgICBhcnJh
eSA9IFdlYkdMVW5zaWduZWRTaG9ydEFycmF5OjpjcmVhdGUobnVtKTsKKyAgICAgICAgYXJyYXkg
PSBXZWJHTFVuc2lnbmVkQnl0ZUFycmF5OjpjcmVhdGUobnVtICogc2l6ZW9mKHVuc2lnbmVkIHNo
b3J0KSk7CiAgICAgdm9pZCogZGF0YSA9IGFycmF5LT5iYXNlQWRkcmVzcygpOwogICAgIG1fY29u
dGV4dC0+cmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIHR5cGUsIGRhdGEp
OwogI2lmIFBMQVRGT1JNKENHKQpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
R3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvbWFjL0dyYXBoaWNzQ29udGV4dDNETWFjLmNwcAkocmV2aXNpb24gNTc1ODcpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMzUsOCArMTEzNSwyMCBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDNEOjpnZXRGcmFtZWJ1ZmZlckF0CiAKIHZvaWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEludGVn
ZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCiB7Ci0gICAgZW5zdXJlQ29udGV4
dChtX2NvbnRleHRPYmopOwotICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAg
IC8vIE5lZWQgdG8gZW11bGF0ZSBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVC9UWVBF
IGZvciBHTC4gIEFueSB2YWxpZAorICAgIC8vIGNvbWJpbmF0aW9uIHNob3VsZCB3b3JrLCBidXQg
R0xfUkdCL0dMX1VOU0lHTkVEX0JZVEUgbWlnaHQgYmUgdGhlIG1vc3QKKyAgICAvLyB1c2VmdWwg
Zm9yIGRlc2t0b3AgV2ViR0wgdXNlcnMuCisgICAgZW5zdXJlQ29udGV4dChtX2NvbnRleHRPYmop
OworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIElNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfRk9STUFUOgorICAgICAgICAqdmFsdWUgPSBHTF9SR0I7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFOgorICAgICAgICAqdmFsdWUgPSBH
TF9VTlNJR05FRF9CWVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICA6
OmdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAgICB9CiB9CiAKIHZvaWQgR3JhcGhpY3ND
b250ZXh0M0Q6OmdldFByb2dyYW1pdihXZWJHTFByb2dyYW0qIHByb2dyYW0sIHVuc2lnbmVkIGxv
bmcgcG5hbWUsIGludCogdmFsdWUpCkluZGV4OiBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3NjIzKQor
KysgV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDEwLTA0LTE0ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW11bGF0ZSBHTF9JTVBMRU1F
TlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVC9UWVBFIGZvciBnbEdldAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzcyODEKKworICAgICAgICAqIHNyYy9X
ZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2Vi
R3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2V0SW50ZWdlcnYpOiBFbXVsYXRlIHR3byAg
ZW51bXMuCisKIDIwMTAtMDQtMTIgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9taXVtLm9yZz4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBGaXNoZXIuCkluZGV4OiBXZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAJKHJl
dmlzaW9uIDU3NTg3KQorKysgV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQz
RERlZmF1bHRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA0OSw3ICsxMDQ5LDIzIEBAIHZv
aWQgV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbDo6Z2UKICAgICBnbEdldEZyYW1lYnVm
ZmVyQXR0YWNobWVudFBhcmFtZXRlcml2RVhUKHRhcmdldCwgYXR0YWNobWVudCwgcG5hbWUsIHZh
bHVlKTsKIH0KIAotREVMRUdBVEVfVE9fR0xfMihnZXRJbnRlZ2VydiwgR2V0SW50ZWdlcnYsIHVu
c2lnbmVkIGxvbmcsIGludCopCit2b2lkIFdlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGw6
OmdldEludGVnZXJ2KHVuc2lnbmVkIGxvbmcgcG5hbWUsIGludCogdmFsdWUpCit7CisgICAgLy8g
TmVlZCB0byBlbXVsYXRlIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9y
IEdMLiAgQW55IHZhbGlkCisgICAgLy8gY29tYmluYXRpb24gc2hvdWxkIHdvcmssIGJ1dCBHTF9S
R0IvR0xfVU5TSUdORURfQllURSBtaWdodCBiZSB0aGUgbW9zdAorICAgIC8vIHVzZWZ1bCBmb3Ig
ZGVza3RvcCBXZWJHTCB1c2Vycy4KKyAgICBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICBzd2l0
Y2ggKHBuYW1lKSB7CisgICAgY2FzZSAweDhCOUI6IC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JF
QURfRk9STUFUCisgICAgICAgICp2YWx1ZSA9IEdMX1JHQjsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSAweDhCOUE6IC8vIElNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfVFlQRQorICAgICAgICAq
dmFsdWUgPSBHTF9VTlNJR05FRF9CWVRFOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICBnbEdldEludGVnZXJ2KHBuYW1lLCB2YWx1ZSk7CisgICAgfQorfQogCiBERUxFR0FU
RV9UT19HTF8zKGdldFByb2dyYW1pdiwgR2V0UHJvZ3JhbWl2LCBXZWJHTElkLCB1bnNpZ25lZCBs
b25nLCBpbnQqKQogCkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA1NzYyMykKKysrIExheW91dFRlc3RzL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDEwLTA0LTE0ICBaaGVu
eWFvIE1vICA8em1vQGdvb2dsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgRW11bGF0ZSBHTF9JTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZP
Uk1BVC9UWVBFIGZvciBnbEdldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MzcyODEKKworICAgICAgICAqIGZhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4
ZWxzLWV4cGVjdGVkLnR4dDogQWRkIHRlc3QgY2FzZSBmb3IgdGhlIG90aGVyIHN1cHBvcnRlZCBm
b3JtYXQvdHlwZSBpbiByZWFkUGl4ZWxzIChiZXNpZGVzIFJHQkEvVU5TSUdORURfQllURSk7IGFs
c28sIGNoYW5nZWQgdG8gYSBzaW1wbGVyIHRlc3QgZnJhbWV3b3JrLgorICAgICAgICAqIGZhc3Qv
Y2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWw6IERpdHRvLgorCiAyMDEwLTA0LTE0ICBYYW4g
TG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXSBzY3JvbGxiYXJzL3Nj
cm9sbGJhci1jcmFzaC1vbi1yZWZyZXNoLmh0bWwgaXMgZmxha2V5IG9uIGRlYnVnIGJvdHMgCklu
ZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhl
bHMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiA1NzU4NykKKysrIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3JlYWQtcGl4ZWxzLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMyw1
NCArMywyMDIgQEAgVmVyaWZ5IHJlYWRQaXhlbHMoKSB3b3JrcyBmaW5lIHdpdGggdmFyaQogT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiBQQVNTIGdsID0gaW5pdFdlYkdMKCdleGFtcGxlJywg
J3ZzaGFkZXInLCAnZnNoYWRlcicsIFsgJ3BvcycsICdjb2xvckluJyBdLCBbIDAsIDAsIDAsIDEg
XSwgMSkgaXMgbm9uLW51bGwuCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lkdGggPSAx
LCBoZWlnaHQgPSAyCitDaGVjayBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0L3R5cGUgYmVzaWRlcyBS
R0JBL1VOU0lHTkVEX0JZVEUKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIHBpeGVsRm9ybWF0ID09IGdsLlJH
QkEgJiYgcGl4ZWxUeXBlID09IGdsLlVOU0lHTkVEX0JZVEUgaXMgZmFsc2UKK1Rlc3RpbmcgZm9y
bWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0gMSwgd2lk
dGggPSAxLCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhw
ZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlz
IGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZ
VEUsIFBBQ0tfQUxJR05NRU5UID0gMiwgd2lkdGggPSAxLCBoZWlnaHQgPSAyCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJP
UgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUg
aXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0
ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGgg
PSAxLCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0
ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4
cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUs
IFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAxLCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgor
UEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMg
bm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0g
UkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSAy
LCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRT
aXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVj
dGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBB
Q0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAyLCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9u
LW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdC
QSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSAzLCBo
ZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXpl
CitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVk
Q29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tf
QUxJR05NRU5UID0gOCwgd2lkdGggPSAzLCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkg
aXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBh
cnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51
bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwg
dHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSA0LCBoZWln
aHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQ
QVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29s
b3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJ
R05NRU5UID0gOCwgd2lkdGggPSA0LCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJh
eS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwu
CitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlw
ZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSA1LCBoZWlnaHQg
PSAxCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNT
IDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IK
K1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05N
RU5UID0gNCwgd2lkdGggPSA1LCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5s
ZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQ
QVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9
IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSA1LCBoZWlnaHQgPSAy
CitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBp
cyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1
NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rl
c3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5U
ID0gOCwgd2lkdGggPSA2LCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9f
RVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5n
dGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNT
IHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVO
U0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSA3LCBoZWlnaHQgPSAyCitQ
QVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBn
bC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwx
MDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3Rp
bmcgZm9ybWF0ID0gUkdCQSwgdHlwZSA9IFVOU0lHTkVEX0JZVEUsIFBBQ0tfQUxJR05NRU5UID0g
OCwgd2lkdGggPSA4LCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBhcnJheS5sZW5ndGgg
aXMgZXhwZWN0ZWRTaXplCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBp
eGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdO
RURfQllURSwgUEFDS19BTElHTk1FTlQgPSAxLCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5P
X0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiww
LDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9y
bWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSAyLCB3aWR0
aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBl
Y3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4
cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllURSwg
UEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQ
QVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9u
LW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdC
LCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDEsIGhl
aWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUK
K1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29s
b3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElH
Tk1FTlQgPSA0LCB3aWR0aCA9IDIsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBn
bC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5
Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQ
QVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0g
VU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDIsIGhlaWdodCA9IDIK
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1
LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3Rp
bmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA0
LCB3aWR0aCA9IDMsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJP
UgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBp
cyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVs
IGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURf
QllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDMsIGhlaWdodCA9IDIKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VS
Uk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAg
aXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0
ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9
IDQsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3Rl
ZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVj
dGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFD
S19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDQsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNT
IGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51
bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0
eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDUsIGhlaWdo
dCA9IDEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BB
U1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IK
K1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1F
TlQgPSA0LCB3aWR0aCA9IDUsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5O
T19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxl
bmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQQVNT
IHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5T
SUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDUsIGhlaWdodCA9IDIKK1BB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEw
MiwwLDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3Rpbmcg
Zm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3
aWR0aCA9IDYsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBl
eHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlz
IGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0gUkdCLCB0eXBlID0gVU5TSUdORURfQllU
RSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDcsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDAgaXMg
bm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKK1Rlc3RpbmcgZm9ybWF0ID0g
UkdCLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDgs
IGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNp
emUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdO
TUVOVCA9IDIsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhw
ZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFD
S19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3Ro
IGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0
aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAxLCBoZWlnaHQgPSAyCi1QQVNTIGFycmF5
Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1
XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMiwgaGVpZ2h0ID0gMgotUEFT
UyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUs
IDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDIsIGhlaWdodCA9
IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1
NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSAzLCBo
ZWlnaHQgPSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwg
aXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRo
ID0gMywgaGVpZ2h0ID0gMgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNT
IHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA0
LCB3aWR0aCA9IDQsIGhlaWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6
ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05N
RU5UID0gOCwgd2lkdGggPSA0LCBoZWlnaHQgPSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBl
Y3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQQUNL
X0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNSwgaGVpZ2h0ID0gMQotUEFTUyBhcnJheS5sZW5ndGgg
aXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRlc3Rp
bmcgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDUsIGhlaWdodCA9IDIKLVBBU1MgYXJyYXku
bGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVd
Ci1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSA1LCBoZWlnaHQgPSAyCi1QQVNT
IGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwg
MCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNiwgaGVpZ2h0ID0g
MgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1
LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDcsIGhl
aWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBp
cyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGgg
PSA4LCBoZWlnaHQgPSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1Mg
cGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVs
bC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgogUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93
ZWJnbC9yZWFkLXBpeGVscy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3QvY2Fu
dmFzL3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWwJKHJldmlzaW9uIDU3NTg3KQorKysgTGF5b3V0VGVz
dHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MjQsOTAgKzI0LDI1MCBAQCB2b2lkIG1haW4oKQogICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9yOwog
fQogPC9zY3JpcHQ+Ci0KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lk
dGg9IjMycHgiIGhlaWdodD0iMzJweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlvbiI+
PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KIDxzY3JpcHQ+CiB2YXIgc3VjY2Vzc2Z1
bGx5UGFyc2VkID0gZmFsc2U7CiAKLS8vIFRoZXNlIGZvdXIgZGVjbGFyYXRpb25zIG5lZWQgdG8g
YmUgZ2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCisvLyBUaGUgYmVsb3cgZGVjbGFy
YXRpb25zIG5lZWQgdG8gYmUgZ2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCiB2YXIg
Z2wgPSBudWxsOwogdmFyIGFycmF5ID0gbnVsbDsKIHZhciBleHBlY3RlZFNpemUgPSAwOwotdmFy
IHBpeGVsID0gWyAwLCAwLCAwLCAxIF07Cit2YXIgcGl4ZWwgPSBbIDAsIDAsIDAsIDAgXTsKK3Zh
ciBleHBlY3RlZENvbG9yID0gWyAwLCAwLCAwLCAwIF07Cit2YXIgcGl4ZWxGb3JtYXQgPSAwOwor
dmFyIHBpeGVsVHlwZSA9IDA7CisKK2Z1bmN0aW9uIGdldFBpeGVsRm9ybWF0VGV4dChmb3JtYXQp
Cit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIGdsLkFMUEhBOgorICAgICAgICBy
ZXR1cm4gIkFMUEhBIjsKKyAgICBjYXNlIGdsLlJHQjoKKyAgICAgICAgcmV0dXJuICJSR0IiOwor
ICAgIGNhc2UgZ2wuUkdCQToKKyAgICAgICAgcmV0dXJuICJSR0JBIjsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gIlVOS05PV04iOworICAgIH0KK30KIAotZnVuY3Rpb24gaW5pdCgpCitm
dW5jdGlvbiBnZXRQaXhlbFR5cGVUZXh0KHR5cGUpCiB7Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRU
ZXN0Q29udHJvbGxlcikgewotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVBy
ZWZlcmVuY2UoIldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7Ci0gICAgICAgIGxheW91dFRlc3RD
b250cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2Fp
dFVudGlsRG9uZSgpOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgZ2wuVU5TSUdORURf
QllURToKKyAgICAgICAgcmV0dXJuICJVTlNJR05FRF9CWVRFIjsKKyAgICBjYXNlIGdsLlVOU0lH
TkVEX1NIT1JUXzVfNl81OgorICAgICAgICByZXR1cm4gIlVOU0lHTkVEX1NIT1JUXzVfNl81IjsK
KyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgICAgIHJldHVybiAiVU5T
SUdORURfU0hPUlRfNF80XzRfNCI7CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8x
OgorICAgICAgICByZXR1cm4gIlVOU0lHTkVEX1NIT1JUXzVfNV81XzEiOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiAiVU5LTk9XTiI7CiAgICAgfQorfQogCi0gICAgZGVzY3JpcHRpb24o
J1ZlcmlmeSByZWFkUGl4ZWxzKCkgd29ya3MgZmluZSB3aXRoIHZhcmlvdXMgUEFDS19BTElHTk1F
TlQgdmFsdWVzLicpOworZnVuY3Rpb24gY2FsY3VsYXRlUGl4ZWxCeXRlcyhmb3JtYXQsIHR5cGUp
Cit7CisgICAgdmFyIHNpemUgPSAwOworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBn
bC5BTFBIQToKKyAgICAgICAgc2l6ZSA9IDE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZ2wu
UkdCOgorICAgICAgICBzaXplID0gMzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBnbC5SR0JB
OgorICAgICAgICBzaXplID0gNDsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg
ICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGdsLlVO
U0lHTkVEX0JZVEU6CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRf
NV82XzU6CisgICAgICAgIGlmIChmb3JtYXQgIT0gZ2wuUkdCKQorICAgICAgICAgICAgcmV0dXJu
IC0xOworICAgICAgICBzaXplID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBnbC5VTlNJ
R05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMToK
KyAgICAgICAgaWYgKGZvcm1hdCAhPSBnbC5SR0JBKQorICAgICAgICAgICAgcmV0dXJuIC0xOwor
ICAgICAgICBzaXplID0gMjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIC0xOworICAgIH0KKyAgICByZXR1cm4gc2l6ZTsKK30KIAotICAgIHJ1blRlc3QoKTsK
K2Z1bmN0aW9uIGNhbGN1bGF0ZVBhZGRpbmdCeXRlcyhieXRlc1BlclBpeGVsLCBwYWNrQWxpZ25t
ZW50LCB3aWR0aCkKK3sKKyAgICB2YXIgcGFkZGluZyA9IDA7CisgICAgc3dpdGNoIChwYWNrQWxp
Z25tZW50KSB7CisgICAgY2FzZSAxOgorICAgIGNhc2UgMjoKKyAgICBjYXNlIDQ6CisgICAgY2Fz
ZSA4OgorICAgICAgICBwYWRkaW5nID0gKGJ5dGVzUGVyUGl4ZWwgKiB3aWR0aCkgJSBwYWNrQWxp
Z25tZW50OworICAgICAgICBpZiAocGFkZGluZyA+IDApCisgICAgICAgICAgICBwYWRkaW5nID0g
cGFja0FsaWdubWVudCAtIHBhZGRpbmc7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgcmV0dXJuIHBhZGRpbmc7CiB9CiAKLWZ1bmN0
aW9uIHJ1blRlc3RJdGVyYXRpb24ocGFja0FsaWdubWVudCwgd2lkdGgsIGhlaWdodCwgc2l6ZSkK
K2Z1bmN0aW9uIHBhY2tDb2xvcihmb3JtYXQsIHR5cGUsIHIsIGcsIGIsIGEpCiB7Ci0gICAgZGVi
dWcoIlRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSAiICsgcGFja0FsaWdubWVudCArICIsIHdpZHRo
ID0gIiArIHdpZHRoICsgIiwgaGVpZ2h0ID0gIiArIGhlaWdodCk7Ci0gICAgZ2wuY2xlYXJDb2xv
cigxLCAxLCAwLCAxKTsKKyAgICAvLyBGSVhNRTogbm90IHN1cmUgaWYgdGhlIGNvbG9yIHBhY2tp
bmcgaXMgY29ycmVjdCBmb3IgVU5TSUdORURfU0hPUlRfKi4KKyAgICB2YXIgY29sb3IgPSBbIDAs
IDAsIDAsIDAgXTsKKyAgICB2YXIgc2hvcnQgPSAwOworICAgIHN3aXRjaCAodHlwZSkgeworICAg
IGNhc2UgZ2wuVU5TSUdORURfQllURToKKyAgICAgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICAg
ICAgY2FzZSBnbC5BTFBIQToKKyAgICAgICAgICAgIGNvbG9yWzBdID0gYTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIGdsLlJHQjoKKyAgICAgICAgICAgIGNvbG9yWzBdID0gcjsK
KyAgICAgICAgICAgIGNvbG9yWzFdID0gZzsKKyAgICAgICAgICAgIGNvbG9yWzJdID0gYjsKKyAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIGdsLlJHQkE6CisgICAgICAgICAgICBjb2xv
clswXSA9IHI7CisgICAgICAgICAgICBjb2xvclsxXSA9IGc7CisgICAgICAgICAgICBjb2xvclsy
XSA9IGI7CisgICAgICAgICAgICBjb2xvclszXSA9IGE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIGlm
IChmb3JtYXQgIT0gZ2wuUkdCKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHIg
Pj49IDM7CisgICAgICAgIGcgPj49IDI7CisgICAgICAgIGIgPj49IDM7CisgICAgICAgIHNob3J0
ID0gKHIgPDwgMTEpICsgKGcgPDwgNSkgKyBiOworICAgICAgICBjb2xvclswXSA9IHNob3J0ICUg
MjU2OworICAgICAgICBjb2xvclsxXSA9IHNob3J0ID4+IDg7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICAgICAgaWYgKGZvcm1hdCAhPSBn
bC5SR0JBKQorICAgICAgICAgICAgcmV0dXJuIG51bGw7CisgICAgICAgIHIgPj49IDQ7CisgICAg
ICAgIGcgPj49IDQ7CisgICAgICAgIGIgPj49IDQ7CisgICAgICAgIGEgPj49IDQ7CisgICAgICAg
IHNob3J0ID0gKHIgPDwgMTIpICsgKGcgPDwgOCkgKyAoYiA8PCA0KSArIGE7CisgICAgICAgIGNv
bG9yWzBdID0gc2hvcnQgJSAyNTY7CisgICAgICAgIGNvbG9yWzFdID0gc2hvcnQgPj4gODsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAg
ICBpZiAoZm9ybWF0ICE9IGdsLlJHQkEpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAg
ICAgciA+Pj0gMzsKKyAgICAgICAgZyA+Pj0gMzsKKyAgICAgICAgYiA+Pj0gMzsKKyAgICAgICAg
YSA+Pj0gNzsKKyAgICAgICAgc2hvcnQgPSAociA8PCAxMSkgKyAoZyA8PCA2KSArIChiIDw8IDEp
ICsgYTsKKyAgICAgICAgY29sb3JbMF0gPSBzaG9ydCAlIDI1NjsKKyAgICAgICAgY29sb3JbMV0g
PSBzaG9ydCA+PiA4OworICAgICAgICBicmVhazsKKyAgICBEZWZhdWx0OgorICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9CisgICAgcmV0dXJuIGNvbG9yOworfQorCitmdW5jdGlvbiBydW5UZXN0
SXRlcmF0aW9uKGZvcm1hdCwgdHlwZSwgcGFja0FsaWdubWVudCwgd2lkdGgsIGhlaWdodCkKK3sK
KyAgICBkZWJ1ZygiVGVzdGluZyBmb3JtYXQgPSAiICsgZ2V0UGl4ZWxGb3JtYXRUZXh0KGZvcm1h
dCkgKyAiLCB0eXBlID0gIiArIGdldFBpeGVsVHlwZVRleHQodHlwZSkKKyAgICAgICAgICArICIs
IFBBQ0tfQUxJR05NRU5UID0gIiArIHBhY2tBbGlnbm1lbnQgKyAiLCB3aWR0aCA9ICIgKyB3aWR0
aCArICIsIGhlaWdodCA9ICIgKyBoZWlnaHQpOworICAgIGdsLmNsZWFyQ29sb3IoMSwgMC40LCAw
LCAxKTsKICAgICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUKTsKICAgICBnbC5waXhlbFN0
b3JlaShnbC5QQUNLX0FMSUdOTUVOVCwgcGFja0FsaWdubWVudCk7Ci0gICAgYXJyYXkgPSBnbC5y
ZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUp
OwotICAgIGV4cGVjdGVkU2l6ZSA9IHNpemU7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCki
LCAiZ2wuTk9fRVJST1IiKTsKKyAgICBhcnJheSA9IGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgs
IGhlaWdodCwgZm9ybWF0LCB0eXBlKTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJn
bC5OT19FUlJPUiIpOworICAgIHZhciBieXRlc1BlclBpeGVsID0gY2FsY3VsYXRlUGl4ZWxCeXRl
cyhmb3JtYXQsIHR5cGUpOworICAgIHZhciBwYWRkaW5nID0gY2FsY3VsYXRlUGFkZGluZ0J5dGVz
KGJ5dGVzUGVyUGl4ZWwsIHBhY2tBbGlnbm1lbnQsIHdpZHRoKTsKKyAgICBleHBlY3RlZFNpemUg
PSBieXRlc1BlclBpeGVsICogd2lkdGggKiBoZWlnaHQgKyBwYWRkaW5nICogKGhlaWdodCAtIDEp
OwogICAgIHNob3VsZEJlKCJhcnJheS5sZW5ndGgiLCAiZXhwZWN0ZWRTaXplIik7CiAgICAgLy8g
Q2hlY2sgdGhlIGxhc3QgcGl4ZWwgb2YgdGhlIGxhc3Qgcm93LgotICAgIHZhciBwYWRkaW5nID0g
MDsKLSAgICBpZiAoaGVpZ2h0ID4gMSkKLSAgICAgICAgcGFkZGluZyA9IChzaXplIC0gd2lkdGgg
KiBoZWlnaHQgKiA0KSAvIChoZWlnaHQgLSAxKTsKLSAgICB2YXIgYnl0ZXNQZXJSb3cgPSB3aWR0
aCAqIDQgKyBwYWRkaW5nOwotICAgIHZhciBwb3MgPSBieXRlc1BlclJvdyAqIChoZWlnaHQgLSAx
KSArICh3aWR0aCAtIDEpICogNDsKLSAgICBwaXhlbFswXSA9IGFycmF5W3Bvc107Ci0gICAgcGl4
ZWxbMV0gPSBhcnJheVtwb3MgKyAxXTsKLSAgICBwaXhlbFsyXSA9IGFycmF5W3BvcyArIDJdOwot
ICAgIHBpeGVsWzNdID0gYXJyYXlbcG9zICsgM107Ci0gICAgc2hvdWxkQmUoInBpeGVsIiwgIlsg
MjU1LCAyNTUsIDAsIDI1NV0iKTsKLX0KLQotZnVuY3Rpb24gcnVuVGVzdCgpCi17Ci0gICAgc2hv
dWxkQmVOb25OdWxsKCJnbCA9IGluaXRXZWJHTCgnZXhhbXBsZScsICd2c2hhZGVyJywgJ2ZzaGFk
ZXInLCBbICdwb3MnLCAnY29sb3JJbicgXSwgWyAwLCAwLCAwLCAxIF0sIDEpIik7Ci0gICAgZ2wu
ZGlzYWJsZShnbC5CTEVORCk7Ci0KLSAgICBydW5UZXN0SXRlcmF0aW9uKDEsIDEsIDIsIDgpOwot
ICAgIHJ1blRlc3RJdGVyYXRpb24oMiwgMSwgMiwgOCk7Ci0gICAgcnVuVGVzdEl0ZXJhdGlvbig0
LCAxLCAyLCA4KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDEsIDIsIDEyKTsKLSAgICBydW5U
ZXN0SXRlcmF0aW9uKDQsIDIsIDIsIDE2KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDIsIDIs
IDE2KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDQsIDMsIDIsIDI0KTsKLSAgICBydW5UZXN0SXRl
cmF0aW9uKDgsIDMsIDIsIDI4KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDQsIDQsIDIsIDMyKTsK
LSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDQsIDIsIDMyKTsKLSAgICBydW5UZXN0SXRlcmF0aW9u
KDgsIDUsIDEsIDIwKTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDQsIDUsIDIsIDQwKTsKLSAgICBy
dW5UZXN0SXRlcmF0aW9uKDgsIDUsIDIsIDQ0KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDYs
IDIsIDQ4KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDcsIDIsIDYwKTsKLSAgICBydW5UZXN0
SXRlcmF0aW9uKDgsIDgsIDIsIDY0KTsKLQotICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
Ci0gICAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Ci0g
ICAgZXBpbG9ndWUub25sb2FkID0gZmluaXNoOwotICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9q
cy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIjsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENo
aWxkKGVwaWxvZ3VlKTsKLX0KLQotZnVuY3Rpb24gZmluaXNoKCkgewotICAgIGlmICh3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90
aWZ5RG9uZSgpOwotICAgIH0KKyAgICB2YXIgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIGJ5dGVzUGVy
UGl4ZWwgKyBwYWRkaW5nOworICAgIHZhciBwb3MgPSBieXRlc1BlclJvdyAqIChoZWlnaHQgLSAx
KSArICh3aWR0aCAtIDEpICogYnl0ZXNQZXJQaXhlbDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IGJ5dGVzUGVyUGl4ZWw7ICsraSkKKyAgICAgICAgcGl4ZWxbaV0gPSBhcnJheVtwb3MgKyBpXTsK
KyAgICBmb3IgKHZhciBpID0gYnl0ZXNQZXJQaXhlbDsgaSA8IDQ7ICsraSkKKyAgICAgICAgcGl4
ZWxbaV0gPSAwOworICAgIGV4cGVjdGVkQ29sb3IgPSBwYWNrQ29sb3IoZm9ybWF0LCB0eXBlLCAy
NTUsIDEwMiwgMCwgMjU1KTsKKyAgICBzaG91bGRCZU5vbk51bGwoZXhwZWN0ZWRDb2xvcik7Cisg
ICAgc2hvdWxkQmUoInBpeGVsIiwgImV4cGVjdGVkQ29sb3IiKTsKIH0KKworZnVuY3Rpb24gY2hl
Y2tTdXBwb3J0ZWRQaXhlbEZvcm1hdEFuZFR5cGUoKQoreworICAgIGRlYnVnKCJDaGVjayBzdXBw
b3J0ZWQgcGl4ZWwgZm9ybWF0L3R5cGUgYmVzaWRlcyBSR0JBL1VOU0lHTkVEX0JZVEUiKTsKKyAg
ICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAgIHBpeGVsRm9y
bWF0ID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFU
KTsKKyAgICBwaXhlbFR5cGUgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuSU1QTEVNRU5UQVRJT05fQ09M
T1JfUkVBRF9UWVBFKTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJP
UiIpOworICAgIHNob3VsZEJlRmFsc2UoInBpeGVsRm9ybWF0ID09IGdsLlJHQkEgJiYgcGl4ZWxU
eXBlID09IGdsLlVOU0lHTkVEX0JZVEUiKTsKK30KKworZGVzY3JpcHRpb24oJ1ZlcmlmeSByZWFk
UGl4ZWxzKCkgd29ya3MgZmluZSB3aXRoIHZhcmlvdXMgUEFDS19BTElHTk1FTlQgdmFsdWVzLicp
OworCitzaG91bGRCZU5vbk51bGwoImdsID0gaW5pdFdlYkdMKCdleGFtcGxlJywgJ3ZzaGFkZXIn
LCAnZnNoYWRlcicsIFsgJ3BvcycsICdjb2xvckluJyBdLCBbIDAsIDAsIDAsIDEgXSwgMSkiKTsK
K2dsLmRpc2FibGUoZ2wuQkxFTkQpOworCitjaGVja1N1cHBvcnRlZFBpeGVsRm9ybWF0QW5kVHlw
ZSgpOworCitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDEsIDEs
IDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCAyLCAxLCAy
KTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgNCwgMSwgMik7
CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDEsIDIpOwor
cnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA0LCAyLCAyKTsKK3J1
blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgMiwgMik7CitydW5U
ZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDQsIDMsIDIpOworcnVuVGVz
dEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCAzLCAyKTsKK3J1blRlc3RJ
dGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgNCwgNCwgMik7CitydW5UZXN0SXRl
cmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDQsIDIpOworcnVuVGVzdEl0ZXJh
dGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCA1LCAxKTsKK3J1blRlc3RJdGVyYXRp
b24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgNCwgNSwgMik7CitydW5UZXN0SXRlcmF0aW9u
KGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDUsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihn
bC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCA2LCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wu
UkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgNywgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJH
QkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDgsIDIpOworCitydW5UZXN0SXRlcmF0aW9uKHBpeGVs
Rm9ybWF0LCBwaXhlbFR5cGUsIDEsIDEsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1h
dCwgcGl4ZWxUeXBlLCAyLCAxLCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBp
eGVsVHlwZSwgNCwgMSwgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5
cGUsIDgsIDEsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA0
LCAyLCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgMiwg
Mik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDQsIDMsIDIpOwor
cnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCAzLCAyKTsKK3J1blRl
c3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgNCwgNCwgMik7CitydW5UZXN0SXRl
cmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDQsIDIpOworcnVuVGVzdEl0ZXJhdGlv
bihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCA1LCAxKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4
ZWxGb3JtYXQsIHBpeGVsVHlwZSwgNCwgNSwgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9y
bWF0LCBwaXhlbFR5cGUsIDgsIDUsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwg
cGl4ZWxUeXBlLCA4LCA2LCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVs
VHlwZSwgOCwgNywgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUs
IDgsIDgsIDIpOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+Ci08L2hl
YWQ+Ci08Ym9keSBvbmxvYWQ9ImluaXQoKSI+Ci08Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0i
MzJweCIgaGVpZ2h0PSIzMnB4Ij48L2NhbnZhcz4KLTxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rp
dj4KLTxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291
cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53484</attachid>
            <date>2010-04-15 15:38:23 -0700</date>
            <delta_ts>2010-04-15 15:45:37 -0700</delta_ts>
            <desc>revised patch : responding to Ken Russell&apos;s review</desc>
            <filename>pixels.patch</filename>
            <type>text/plain</type>
            <size>27905</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzYyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQtMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbXVsYXRl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIGdsR2V0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzI4MQorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KTogUmVt
b3ZlIGVycm9yIGNoZWNrIGJlY2F1c2UgdHdvIGVudW1zIGFyZSBzdXBwb3J0ZWQgbm93LiAKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKTogQWRk
IHR3byBlbnVtcy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVh
ZFBpeGVscyk6IEZpeCBhIHRpbnkgYnVnLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYpOiBFbXVsYXRlIHR3byBlbnVtcy4KKwogMjAxMC0wNC0xNCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU3NjA5LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTc1ODcpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4LDggKzk4LDYgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0Nvbgog
ICAgIG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3JtYXQgPSBpbXBsZW1lbnRhdGlvbkNvbG9y
UmVhZEZvcm1hdDsKICAgICBpbnQgaW1wbGVtZW50YXRpb25Db2xvclJlYWRUeXBlID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFLCAmaW1wbGVt
ZW50YXRpb25Db2xvclJlYWRUeXBlKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSBnZXRFcnJv
cigpIHdoZW4gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQvVFlQRSBhcmUgc3VwcG9y
dGVkLgotICAgIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKICAgICBtX2ltcGxlbWVudGF0aW9uQ29s
b3JSZWFkVHlwZSA9IGltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZTsKICAgICBtX2NvbnRleHQt
PnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAgICAgbV9j
b250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdo
dCgpKTsKQEAgLTEwNTksNiArMTA1NywxMCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQCiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZExvbmdQYXJhbWV0ZXIocG5h
bWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CiAgICAgICAgIHJl
dHVybiBnZXRMb25nUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKKyAgICAgICAgcmV0dXJuIGdldExv
bmdQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfVFlQRToKKyAgICAgICAgcmV0dXJuIGdldExvbmdQYXJhbWV0ZXIo
cG5hbWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6CiAgICAgICAg
IHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CkBAIC0xNjI3LDcgKzE2Mjks
NyBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIShmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSB8fCBmb3JtYXQgPT0gbV9pbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCAmJiB0eXBl
ID09IG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3JtYXQpKSB7CisgICAgaWYgKCEoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ID09IG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3Jt
YXQgJiYgdHlwZSA9PSBtX2ltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShy
ZXZpc2lvbiA1NzU4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNSw4ICsxMTM1LDIwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXQKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKIHsK
LSAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbEdldEludGVnZXJ2KHBu
YW1lLCB2YWx1ZSk7CisgICAgLy8gTmVlZCB0byBlbXVsYXRlIElNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfRk9STUFUL1RZUEUgZm9yIEdMLiAgQW55IHZhbGlkCisgICAgLy8gY29tYmluYXRpb24g
c2hvdWxkIHdvcmssIGJ1dCBHTF9SR0IvR0xfVU5TSUdORURfQllURSBtaWdodCBiZSB0aGUgbW9z
dAorICAgIC8vIHVzZWZ1bCBmb3IgZGVza3RvcCBXZWJHTCB1c2Vycy4KKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CisgICAgICAgICp2YWx1ZSA9IEdMX1JHQjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6Cisg
ICAgICAgICp2YWx1ZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIH0KIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gNTc2MjMpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
bXVsYXRlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIGdsR2V0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzI4MQor
CisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRJbnRlZ2Vy
dik6IEVtdWxhdGUgdHdvICBlbnVtcy4KKwogMjAxMC0wNC0xMiAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNTc1ODcpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ5
LDcgKzEwNDksMjMgQEAgdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZQog
ICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRh
Y2htZW50LCBwbmFtZSwgdmFsdWUpOwogfQogCi1ERUxFR0FURV9UT19HTF8yKGdldEludGVnZXJ2
LCBHZXRJbnRlZ2VydiwgdW5zaWduZWQgbG9uZywgaW50KikKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2
YWx1ZSkKK3sKKyAgICAvLyBOZWVkIHRvIGVtdWxhdGUgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9GT1JNQVQvVFlQRSBmb3IgR0wuICBBbnkgdmFsaWQKKyAgICAvLyBjb21iaW5hdGlvbiBzaG91
bGQgd29yaywgYnV0IEdMX1JHQi9HTF9VTlNJR05FRF9CWVRFIG1pZ2h0IGJlIHRoZSBtb3N0Cisg
ICAgLy8gdXNlZnVsIGZvciBkZXNrdG9wIFdlYkdMIHVzZXJzLgorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIDB4OEI5QjogLy8gSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQKKyAgICAgICAgKnZhbHVlID0gR0xfUkdCOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDB4OEI5QTogLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9UWVBFCisgICAgICAgICp2YWx1ZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAg
ICB9Cit9CiAKIERFTEVHQVRFX1RPX0dMXzMoZ2V0UHJvZ3JhbWl2LCBHZXRQcm9ncmFtaXYsIFdl
YkdMSWQsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3NjIzKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDQtMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbXVsYXRlIEdMX0lNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIGdsR2V0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzI4MQorCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvcmVhZC1waXhlbHMtZXhwZWN0ZWQudHh0OiBBZGQgdGVzdCBjYXNlIGZvciB0aGUg
b3RoZXIgc3VwcG9ydGVkIGZvcm1hdC90eXBlIGluIHJlYWRQaXhlbHMgKGJlc2lkZXMgUkdCQS9V
TlNJR05FRF9CWVRFKTsgYWxzbywgY2hhbmdlZCB0byBhIHNpbXBsZXIgdGVzdCBmcmFtZXdvcmsu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbDogRGl0dG8uCisK
IDIwMTAtMDQtMTQgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIHNjcm9sbGJhcnMvc2Nyb2xsYmFyLWNyYXNoLW9uLXJlZnJlc2guaHRtbCBpcyBmbGFrZXkg
b24gZGVidWcgYm90cyAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQt
cGl4ZWxzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZWFkLXBpeGVscy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3NTg3KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zLDU0ICszLDIwMiBAQCBWZXJpZnkgcmVhZFBpeGVscygpIHdvcmtzIGZp
bmUgd2l0aCB2YXJpCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIFBBU1MgZ2wgPSBpbml0
V2ViR0woJ2V4YW1wbGUnLCAndnNoYWRlcicsICdmc2hhZGVyJywgWyAncG9zJywgJ2NvbG9ySW4n
IF0sIFsgMCwgMCwgMCwgMSBdLCAxKSBpcyBub24tbnVsbC4KLVRlc3RpbmcgUEFDS19BTElHTk1F
TlQgPSAxLCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKK0NoZWNrIHN1cHBvcnRlZCBwaXhlbCBmb3Jt
YXQvdHlwZSBiZXNpZGVzIFJHQkEvVU5TSUdORURfQllURQorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgcGl4
ZWxGb3JtYXQgPT0gZ2wuUkdCQSAmJiBwaXhlbFR5cGUgPT0gZ2wuVU5TSUdORURfQllURSBpcyBm
YWxzZQorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19B
TElHTk1FTlQgPSAxLCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBp
cyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFy
cmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVs
bC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0
eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSAyLCB3aWR0aCA9IDEsIGhlaWdo
dCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BB
U1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xv
cgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElH
Tk1FTlQgPSA0LCB3aWR0aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBn
bC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5
Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4K
K1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBl
ID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDEsIGhlaWdodCA9
IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1Mg
MjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgor
VGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1F
TlQgPSA0LCB3aWR0aCA9IDIsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5O
T19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxl
bmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BB
U1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0g
VU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDIsIGhlaWdodCA9IDIK
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1
LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVz
dGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQg
PSA0LCB3aWR0aCA9IDMsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19F
UlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0
aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1Mg
cGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5T
SUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDMsIGhlaWdodCA9IDIKK1BB
U1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEw
MiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGlu
ZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA0
LCB3aWR0aCA9IDQsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJP
UgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBp
cyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4
ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdO
RURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDQsIGhlaWdodCA9IDIKK1BBU1Mg
Z2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5P
X0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiww
LDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBm
b3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3
aWR0aCA9IDUsIGhlaWdodCA9IDEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBl
eHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwg
aXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURf
QllURSwgUEFDS19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDUsIGhlaWdodCA9IDIKK1BBU1MgZ2wu
Z2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VS
Uk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1
NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3Jt
YXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0
aCA9IDUsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBl
Y3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMg
ZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllU
RSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDYsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0
RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBp
cyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQg
PSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9
IDcsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3Rl
ZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhw
ZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0JBLCB0eXBlID0gVU5TSUdORURfQllURSwg
UEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDgsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQ
QVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBu
b24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBS
R0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDEsIHdpZHRoID0gMSwg
aGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6
ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRD
b2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FM
SUdOTUVOVCA9IDIsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJy
YXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4K
K1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUg
PSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMSwgaGVpZ2h0ID0g
MgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkg
aXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAy
NTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVz
dGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9
IDgsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VS
Uk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3Ro
IGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4
ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05F
RF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMiwgaGVpZ2h0ID0gMgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9f
RVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAs
MCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3Jt
YXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRo
ID0gMiwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNT
IGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVj
dGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhw
ZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQ
QUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMywgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BB
U1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24t
bnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0Is
IHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gMywgaGVp
Z2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQor
UEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xv
cgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdO
TUVOVCA9IDQsIHdpZHRoID0gNCwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXku
bGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BB
U1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBV
TlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNCwgaGVpZ2h0ID0gMgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUs
MTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGlu
ZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgs
IHdpZHRoID0gNSwgaGVpZ2h0ID0gMQorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlz
IGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwg
aXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9C
WVRFLCBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gNSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBp
cyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQg
PSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0g
NSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVk
U2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0
ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNL
X0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNiwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1Mg
YXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVs
bC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5
cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNywgaGVpZ2h0
ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9y
KCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFT
UyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgor
VGVzdGluZyBmb3JtYXQgPSBSR0IsIHR5cGUgPSBVTlNJR05FRF9CWVRFLCBQQUNLX0FMSUdOTUVO
VCA9IDgsIHdpZHRoID0gOCwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5P
X0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgYXJyYXkubGVu
Z3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1U
ZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gMiwgd2lkdGggPSAxLCBoZWlnaHQgPSAyCi1QQVNTIGFy
cmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwg
MjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgot
UEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAy
NTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDEsIGhlaWdo
dCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBb
IDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSAy
LCBoZWlnaHQgPSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4
ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdp
ZHRoID0gMiwgaGVpZ2h0ID0gMgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1Q
QVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQg
PSA0LCB3aWR0aCA9IDMsIGhlaWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVk
U2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJ
R05NRU5UID0gOCwgd2lkdGggPSAzLCBoZWlnaHQgPSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBl
eHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQ
QUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gNCwgaGVpZ2h0ID0gMgotUEFTUyBhcnJheS5sZW5n
dGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRl
c3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDQsIGhlaWdodCA9IDIKLVBBU1MgYXJy
YXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAy
NTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSA1LCBoZWlnaHQgPSAxCi1Q
QVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1
NSwgMCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gNSwgaGVpZ2h0
ID0gMgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsg
MjU1LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDUs
IGhlaWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhl
bCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCi1UZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lk
dGggPSA2LCBoZWlnaHQgPSAyCi1QQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBB
U1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQotVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9
IDgsIHdpZHRoID0gNywgaGVpZ2h0ID0gMgotUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRT
aXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KLVRlc3RpbmcgUEFDS19BTElH
Tk1FTlQgPSA4LCB3aWR0aCA9IDgsIGhlaWdodCA9IDIKLVBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4
cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCitQQVNTIDI1NSwx
MDIsMCwwIGlzIG5vbi1udWxsLgorUEFTUyBwaXhlbCBpcyBleHBlY3RlZENvbG9yCiBQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCiAKIFRFU1QgQ09NUExFVEUKSW5kZXg6IExheW91dFRl
c3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWwKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbAkocmV2aXNpb24gNTc1
ODcpCisrKyBMYXlvdXRUZXN0cy9mYXN0L2NhbnZhcy93ZWJnbC9yZWFkLXBpeGVscy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw5MCArMjQsMjU3IEBAIHZvaWQgbWFpbigpCiAgICAgZ2xfRnJh
Z0NvbG9yID0gY29sb3I7CiB9CiA8L3NjcmlwdD4KLQorPC9oZWFkPgorPGJvZHk+Cis8Y2FudmFz
IGlkPSJleGFtcGxlIiB3aWR0aD0iMzJweCIgaGVpZ2h0PSIzMnB4Ij48L2NhbnZhcz4KKzxkaXYg
aWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KKzxkaXYgaWQ9ImNvbnNvbGUiPjwvZGl2PgogPHNjcmlw
dD4KIHZhciBzdWNjZXNzZnVsbHlQYXJzZWQgPSBmYWxzZTsKIAotLy8gVGhlc2UgZm91ciBkZWNs
YXJhdGlvbnMgbmVlZCB0byBiZSBnbG9iYWwgZm9yICJzaG91bGRCZSIgdG8gc2VlIHRoZW0KKy8v
IFRoZSBiZWxvdyBkZWNsYXJhdGlvbnMgbmVlZCB0byBiZSBnbG9iYWwgZm9yICJzaG91bGRCZSIg
dG8gc2VlIHRoZW0KIHZhciBnbCA9IG51bGw7CiB2YXIgYXJyYXkgPSBudWxsOwogdmFyIGV4cGVj
dGVkU2l6ZSA9IDA7Ci12YXIgcGl4ZWwgPSBbIDAsIDAsIDAsIDEgXTsKK3ZhciBwaXhlbCA9IFsg
MCwgMCwgMCwgMCBdOwordmFyIGV4cGVjdGVkQ29sb3IgPSBbIDAsIDAsIDAsIDAgXTsKK3ZhciBw
aXhlbEZvcm1hdCA9IDA7Cit2YXIgcGl4ZWxUeXBlID0gMDsKKworZnVuY3Rpb24gZ2V0UGl4ZWxG
b3JtYXRUZXh0KGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgZ2wu
QUxQSEE6CisgICAgICAgIHJldHVybiAiQUxQSEEiOworICAgIGNhc2UgZ2wuUkdCOgorICAgICAg
ICByZXR1cm4gIlJHQiI7CisgICAgY2FzZSBnbC5SR0JBOgorICAgICAgICByZXR1cm4gIlJHQkEi
OworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVybiAiVU5LTk9XTiI7CisgICAgfQorfQogCi1m
dW5jdGlvbiBpbml0KCkKK2Z1bmN0aW9uIGdldFBpeGVsVHlwZVRleHQodHlwZSkKIHsKLSAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7Ci0gICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLm92ZXJyaWRlUHJlZmVyZW5jZSgiV2ViS2l0V2ViR0xFbmFibGVkIiwgIjEiKTsKLSAg
ICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOwotICAgICAgICBsYXlvdXRU
ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAg
Y2FzZSBnbC5VTlNJR05FRF9CWVRFOgorICAgICAgICByZXR1cm4gIlVOU0lHTkVEX0JZVEUiOwor
ICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgICAgIHJldHVybiAiVU5TSUdO
RURfU0hPUlRfNV82XzUiOworICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAg
ICAgICAgcmV0dXJuICJVTlNJR05FRF9TSE9SVF80XzRfNF80IjsKKyAgICBjYXNlIGdsLlVOU0lH
TkVEX1NIT1JUXzVfNV81XzE6CisgICAgICAgIHJldHVybiAiVU5TSUdORURfU0hPUlRfNV81XzVf
MSI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuICJVTktOT1dOIjsKICAgICB9Cit9CiAK
LSAgICBkZXNjcmlwdGlvbignVmVyaWZ5IHJlYWRQaXhlbHMoKSB3b3JrcyBmaW5lIHdpdGggdmFy
aW91cyBQQUNLX0FMSUdOTUVOVCB2YWx1ZXMuJyk7CitmdW5jdGlvbiBjYWxjdWxhdGVQaXhlbEJ5
dGVzKGZvcm1hdCwgdHlwZSkKK3sKKyAgICB2YXIgc2l6ZSA9IDA7CisgICAgc3dpdGNoIChmb3Jt
YXQpIHsKKyAgICBjYXNlIGdsLkFMUEhBOgorICAgICAgICBzaXplID0gMTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBnbC5SR0I6CisgICAgICAgIHNpemUgPSAzOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGdsLlJHQkE6CisgICAgICAgIHNpemUgPSA0OworICAgICAgICBicmVhazsKKyAg
ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHN3aXRjaCAodHlwZSkg
eworICAgIGNhc2UgZ2wuVU5TSUdORURfQllURToKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBn
bC5VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICAgICAgaWYgKGZvcm1hdCAhPSBnbC5SR0IpCisg
ICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgIHNpemUgPSAyOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBnbC5VTlNJR05F
RF9TSE9SVF81XzVfNV8xOgorICAgICAgICBpZiAoZm9ybWF0ICE9IGdsLlJHQkEpCisgICAgICAg
ICAgICByZXR1cm4gLTE7CisgICAgICAgIHNpemUgPSAyOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBzaXplOworfQor
CitmdW5jdGlvbiBjYWxjdWxhdGVQYWRkaW5nQnl0ZXMoYnl0ZXNQZXJQaXhlbCwgcGFja0FsaWdu
bWVudCwgd2lkdGgpCit7CisgICAgdmFyIHBhZGRpbmcgPSAwOworICAgIHN3aXRjaCAocGFja0Fs
aWdubWVudCkgeworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6CisgICAgY2FzZSA0OgorICAgIGNh
c2UgODoKKyAgICAgICAgcGFkZGluZyA9IChieXRlc1BlclBpeGVsICogd2lkdGgpICUgcGFja0Fs
aWdubWVudDsKKyAgICAgICAgaWYgKHBhZGRpbmcgPiAwKQorICAgICAgICAgICAgcGFkZGluZyA9
IHBhY2tBbGlnbm1lbnQgLSBwYWRkaW5nOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0Ogor
ICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiBwYWRkaW5nOworfQogCi0gICAg
cnVuVGVzdCgpOworZnVuY3Rpb24gcGFja0NvbG9yKGZvcm1hdCwgdHlwZSwgciwgZywgYiwgYSkK
K3sKKyAgICAvLyBGSVhNRTogbm90IHN1cmUgaWYgdGhlIGNvbG9yIHBhY2tpbmcgaXMgY29ycmVj
dCBmb3IgVU5TSUdORURfU0hPUlRfKi4KKyAgICB2YXIgY29sb3IgPSBbIDAsIDAsIDAsIDAgXTsK
KyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0JZVEU6CisgICAgICAg
IHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgZ2wuQUxQSEE6CisgICAgICAgICAgICBj
b2xvclswXSA9IGE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBnbC5SR0I6Cisg
ICAgICAgICAgICBjb2xvclswXSA9IHI7CisgICAgICAgICAgICBjb2xvclsxXSA9IGc7CisgICAg
ICAgICAgICBjb2xvclsyXSA9IGI7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBn
bC5SR0JBOgorICAgICAgICAgICAgY29sb3JbMF0gPSByOworICAgICAgICAgICAgY29sb3JbMV0g
PSBnOworICAgICAgICAgICAgY29sb3JbMl0gPSBiOworICAgICAgICAgICAgY29sb3JbM10gPSBh
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIGdsLlVOU0lHTkVE
X1NIT1JUXzVfNl81OgorICAgICAgICBpZiAoZm9ybWF0ICE9IGdsLlJHQikKKyAgICAgICAgICAg
IHJldHVybiBudWxsOworICAgICAgICByID4+PSAzOworICAgICAgICBnID4+PSAyOworICAgICAg
ICBiID4+PSAzOworICAgICAgICBjb2xvclswXSA9IChyIDw8IDExKSArIChnIDw8IDUpICsgYjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAg
ICAgICBpZiAoZm9ybWF0ICE9IGdsLlJHQkEpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAg
ICAgICAgciA+Pj0gNDsKKyAgICAgICAgZyA+Pj0gNDsKKyAgICAgICAgYiA+Pj0gNDsKKyAgICAg
ICAgYSA+Pj0gNDsKKyAgICAgICAgY29sb3JbMF0gPSAociA8PCAxMikgKyAoZyA8PCA4KSArIChi
IDw8IDQpICsgYTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81
XzVfNV8xOgorICAgICAgICBpZiAoZm9ybWF0ICE9IGdsLlJHQkEpCisgICAgICAgICAgICByZXR1
cm4gbnVsbDsKKyAgICAgICAgciA+Pj0gMzsKKyAgICAgICAgZyA+Pj0gMzsKKyAgICAgICAgYiA+
Pj0gMzsKKyAgICAgICAgYSA+Pj0gNzsKKyAgICAgICAgY29sb3JbMF0gPSAociA8PCAxMSkgKyAo
ZyA8PCA2KSArIChiIDw8IDEpICsgYTsKKyAgICAgICAgYnJlYWs7CisgICAgRGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVybiBjb2xvcjsKIH0KIAotZnVuY3Rp
b24gcnVuVGVzdEl0ZXJhdGlvbihwYWNrQWxpZ25tZW50LCB3aWR0aCwgaGVpZ2h0LCBzaXplKQor
ZnVuY3Rpb24gcnVuVGVzdEl0ZXJhdGlvbihmb3JtYXQsIHR5cGUsIHBhY2tBbGlnbm1lbnQsIHdp
ZHRoLCBoZWlnaHQpCiB7Ci0gICAgZGVidWcoIlRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSAiICsg
cGFja0FsaWdubWVudCArICIsIHdpZHRoID0gIiArIHdpZHRoICsgIiwgaGVpZ2h0ID0gIiArIGhl
aWdodCk7Ci0gICAgZ2wuY2xlYXJDb2xvcigxLCAxLCAwLCAxKTsKKyAgICBkZWJ1ZygiVGVzdGlu
ZyBmb3JtYXQgPSAiICsgZ2V0UGl4ZWxGb3JtYXRUZXh0KGZvcm1hdCkgKyAiLCB0eXBlID0gIiAr
IGdldFBpeGVsVHlwZVRleHQodHlwZSkKKyAgICAgICAgICArICIsIFBBQ0tfQUxJR05NRU5UID0g
IiArIHBhY2tBbGlnbm1lbnQgKyAiLCB3aWR0aCA9ICIgKyB3aWR0aCArICIsIGhlaWdodCA9ICIg
KyBoZWlnaHQpOworICAgIGdsLmNsZWFyQ29sb3IoMSwgMC40LCAwLCAxKTsKICAgICBnbC5jbGVh
cihnbC5DT0xPUl9CVUZGRVJfQklUKTsKICAgICBnbC5waXhlbFN0b3JlaShnbC5QQUNLX0FMSUdO
TUVOVCwgcGFja0FsaWdubWVudCk7Ci0gICAgYXJyYXkgPSBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdp
ZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUpOwotICAgIGV4cGVjdGVkU2l6
ZSA9IHNpemU7CisgICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsK
KyAgICBhcnJheSA9IGdsLnJlYWRQaXhlbHMoMCwgMCwgd2lkdGgsIGhlaWdodCwgZm9ybWF0LCB0
eXBlKTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAg
IHZhciBieXRlc1BlclBpeGVsID0gY2FsY3VsYXRlUGl4ZWxCeXRlcyhmb3JtYXQsIHR5cGUpOwor
ICAgIHZhciBwYWRkaW5nID0gY2FsY3VsYXRlUGFkZGluZ0J5dGVzKGJ5dGVzUGVyUGl4ZWwsIHBh
Y2tBbGlnbm1lbnQsIHdpZHRoKTsKKyAgICBleHBlY3RlZFNpemUgPSBieXRlc1BlclBpeGVsICog
d2lkdGggKiBoZWlnaHQgKyBwYWRkaW5nICogKGhlaWdodCAtIDEpOworICAgIHZhciBpc1Nob3J0
ID0gZmFsc2U7CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9S
VF81XzZfNToKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBn
bC5VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBpc1Nob3J0ID0gdHJ1ZTsKKyAgICB9
CisgICAgaWYgKGlzU2hvcnQpCisgICAgICAgIGV4cGVjdGVkU2l6ZSAvPSAyOwogICAgIHNob3Vs
ZEJlKCJhcnJheS5sZW5ndGgiLCAiZXhwZWN0ZWRTaXplIik7CiAgICAgLy8gQ2hlY2sgdGhlIGxh
c3QgcGl4ZWwgb2YgdGhlIGxhc3Qgcm93LgotICAgIHZhciBwYWRkaW5nID0gMDsKLSAgICBpZiAo
aGVpZ2h0ID4gMSkKLSAgICAgICAgcGFkZGluZyA9IChzaXplIC0gd2lkdGggKiBoZWlnaHQgKiA0
KSAvIChoZWlnaHQgLSAxKTsKLSAgICB2YXIgYnl0ZXNQZXJSb3cgPSB3aWR0aCAqIDQgKyBwYWRk
aW5nOwotICAgIHZhciBwb3MgPSBieXRlc1BlclJvdyAqIChoZWlnaHQgLSAxKSArICh3aWR0aCAt
IDEpICogNDsKLSAgICBwaXhlbFswXSA9IGFycmF5W3Bvc107Ci0gICAgcGl4ZWxbMV0gPSBhcnJh
eVtwb3MgKyAxXTsKLSAgICBwaXhlbFsyXSA9IGFycmF5W3BvcyArIDJdOwotICAgIHBpeGVsWzNd
ID0gYXJyYXlbcG9zICsgM107Ci0gICAgc2hvdWxkQmUoInBpeGVsIiwgIlsgMjU1LCAyNTUsIDAs
IDI1NV0iKTsKLX0KLQotZnVuY3Rpb24gcnVuVGVzdCgpCi17Ci0gICAgc2hvdWxkQmVOb25OdWxs
KCJnbCA9IGluaXRXZWJHTCgnZXhhbXBsZScsICd2c2hhZGVyJywgJ2ZzaGFkZXInLCBbICdwb3Mn
LCAnY29sb3JJbicgXSwgWyAwLCAwLCAwLCAxIF0sIDEpIik7Ci0gICAgZ2wuZGlzYWJsZShnbC5C
TEVORCk7Ci0KLSAgICBydW5UZXN0SXRlcmF0aW9uKDEsIDEsIDIsIDgpOwotICAgIHJ1blRlc3RJ
dGVyYXRpb24oMiwgMSwgMiwgOCk7Ci0gICAgcnVuVGVzdEl0ZXJhdGlvbig0LCAxLCAyLCA4KTsK
LSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDEsIDIsIDEyKTsKLSAgICBydW5UZXN0SXRlcmF0aW9u
KDQsIDIsIDIsIDE2KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDIsIDIsIDE2KTsKLSAgICBy
dW5UZXN0SXRlcmF0aW9uKDQsIDMsIDIsIDI0KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDMs
IDIsIDI4KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDQsIDQsIDIsIDMyKTsKLSAgICBydW5UZXN0
SXRlcmF0aW9uKDgsIDQsIDIsIDMyKTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDUsIDEsIDIw
KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDQsIDUsIDIsIDQwKTsKLSAgICBydW5UZXN0SXRlcmF0
aW9uKDgsIDUsIDIsIDQ0KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgsIDYsIDIsIDQ4KTsKLSAg
ICBydW5UZXN0SXRlcmF0aW9uKDgsIDcsIDIsIDYwKTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDgs
IDgsIDIsIDY0KTsKLQotICAgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Ci0gICAgdmFyIGVw
aWxvZ3VlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2NyaXB0Iik7Ci0gICAgZXBpbG9ndWUu
b25sb2FkID0gZmluaXNoOwotICAgIGVwaWxvZ3VlLnNyYyA9ICIuLi8uLi9qcy9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIjsKLSAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3Vl
KTsKLX0KLQotZnVuY3Rpb24gZmluaXNoKCkgewotICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIpIHsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZSgpOwor
ICAgIHZhciBieXRlc1BlclJvdyA9IHdpZHRoICogYnl0ZXNQZXJQaXhlbCArIHBhZGRpbmc7Cisg
ICAgdmFyIHBvcyA9IGJ5dGVzUGVyUm93ICogKGhlaWdodCAtIDEpICsgKHdpZHRoIC0gMSkgKiBi
eXRlc1BlclBpeGVsOworICAgIHZhciBudW1Db21wb25lbnRzID0gYnl0ZXNQZXJQaXhlbDsKKyAg
ICBpZiAoaXNTaG9ydCkgeworICAgICAgICBwb3MgLz0gMjsKKyAgICAgICAgbnVtQ29tcG9uZW50
cyAvPSAyOwogICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IG51bUNvbXBvbmVudHM7ICsr
aSkKKyAgICAgICAgcGl4ZWxbaV0gPSBhcnJheVtwb3MgKyBpXTsKKyAgICBmb3IgKHZhciBpID0g
bnVtQ29tcG9uZW50czsgaSA8IDQ7ICsraSkKKyAgICAgICAgcGl4ZWxbaV0gPSAwOworICAgIGV4
cGVjdGVkQ29sb3IgPSBwYWNrQ29sb3IoZm9ybWF0LCB0eXBlLCAyNTUsIDEwMiwgMCwgMjU1KTsK
KyAgICBzaG91bGRCZU5vbk51bGwoZXhwZWN0ZWRDb2xvcik7CisgICAgc2hvdWxkQmUoInBpeGVs
IiwgImV4cGVjdGVkQ29sb3IiKTsKIH0KKworZnVuY3Rpb24gY2hlY2tTdXBwb3J0ZWRQaXhlbEZv
cm1hdEFuZFR5cGUoKQoreworICAgIGRlYnVnKCJDaGVjayBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0
L3R5cGUgYmVzaWRlcyBSR0JBL1VOU0lHTkVEX0JZVEUiKTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0
RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAgIHBpeGVsRm9ybWF0ID0gZ2wuZ2V0UGFyYW1l
dGVyKGdsLklNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUKTsKKyAgICBwaXhlbFR5cGUg
PSBnbC5nZXRQYXJhbWV0ZXIoZ2wuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFKTsKKyAg
ICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAgIHNob3VsZEJl
RmFsc2UoInBpeGVsRm9ybWF0ID09IGdsLlJHQkEgJiYgcGl4ZWxUeXBlID09IGdsLlVOU0lHTkVE
X0JZVEUiKTsKK30KKworZGVzY3JpcHRpb24oJ1ZlcmlmeSByZWFkUGl4ZWxzKCkgd29ya3MgZmlu
ZSB3aXRoIHZhcmlvdXMgUEFDS19BTElHTk1FTlQgdmFsdWVzLicpOworCitzaG91bGRCZU5vbk51
bGwoImdsID0gaW5pdFdlYkdMKCdleGFtcGxlJywgJ3ZzaGFkZXInLCAnZnNoYWRlcicsIFsgJ3Bv
cycsICdjb2xvckluJyBdLCBbIDAsIDAsIDAsIDEgXSwgMSkiKTsKK2dsLmRpc2FibGUoZ2wuQkxF
TkQpOworCitjaGVja1N1cHBvcnRlZFBpeGVsRm9ybWF0QW5kVHlwZSgpOworCitydW5UZXN0SXRl
cmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDEsIDEsIDIpOworcnVuVGVzdEl0ZXJh
dGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCAyLCAxLCAyKTsKK3J1blRlc3RJdGVyYXRp
b24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgNCwgMSwgMik7CitydW5UZXN0SXRlcmF0aW9u
KGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgsIDEsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihn
bC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA0LCAyLCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wu
UkdCQSwgZ2wuVU5TSUdORURfQllURSwgOCwgMiwgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJH
QkEsIGdsLlVOU0lHTkVEX0JZVEUsIDQsIDMsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JB
LCBnbC5VTlNJR05FRF9CWVRFLCA4LCAzLCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgNCwgNCwgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGds
LlVOU0lHTkVEX0JZVEUsIDgsIDQsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCA4LCA1LCAxKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5T
SUdORURfQllURSwgNCwgNSwgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIDgsIDUsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWVRFLCA4LCA2LCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURf
QllURSwgOCwgNywgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZ
VEUsIDgsIDgsIDIpOworCitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUs
IDEsIDEsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCAyLCAx
LCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgNCwgMSwgMik7
CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDEsIDIpOworcnVu
VGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA0LCAyLCAyKTsKK3J1blRlc3RJ
dGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgMiwgMik7CitydW5UZXN0SXRlcmF0
aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDQsIDMsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihw
aXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCAzLCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxG
b3JtYXQsIHBpeGVsVHlwZSwgNCwgNCwgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0
LCBwaXhlbFR5cGUsIDgsIDQsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4
ZWxUeXBlLCA4LCA1LCAxKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlw
ZSwgNCwgNSwgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgs
IDUsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCA2LCAy
KTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgNywgMik7City
dW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDgsIDIpOworCitzdWNj
ZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwogPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9keSBvbmxvYWQ9
ImluaXQoKSI+Ci08Y2FudmFzIGlkPSJleGFtcGxlIiB3aWR0aD0iMzJweCIgaGVpZ2h0PSIzMnB4
Ij48L2NhbnZhcz4KLTxkaXYgaWQ9ImRlc2NyaXB0aW9uIj48L2Rpdj4KLTxkaXYgaWQ9ImNvbnNv
bGUiPjwvZGl2PgorPHNjcmlwdCBzcmM9Ii4uLy4uL2pzL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgogPC9ib2R5PgogPC9odG1sPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53485</attachid>
            <date>2010-04-15 15:45:37 -0700</date>
            <delta_ts>2010-04-22 09:54:11 -0700</delta_ts>
            <desc>revised patch: no longer print out the other supported format/type in the test - they are not constant for ES ports.</desc>
            <filename>pixels.patch</filename>
            <type>text/plain</type>
            <size>24768</size>
            <attacher name="Zhenyao Mo">zmo</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NzYyMykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTcgQEAKKzIwMTAtMDQtMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbXVsYXRl
IEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIGdsR2V0CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzI4MQorCisgICAg
ICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6V2ViR0xSZW5kZXJpbmdDb250ZXh0KTogUmVt
b3ZlIGVycm9yIGNoZWNrIGJlY2F1c2UgdHdvIGVudW1zIGFyZSBzdXBwb3J0ZWQgbm93LiAKKyAg
ICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0UGFyYW1ldGVyKTogQWRk
IHR3byBlbnVtcy4KKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6cmVh
ZFBpeGVscyk6IEZpeCBhIHRpbnkgYnVnLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL21h
Yy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYpOiBFbXVsYXRlIHR3byBlbnVtcy4KKwogMjAxMC0wNC0xNCAg
U2hlcmlmZiBCb3QgIDx3ZWJraXQucmV2aWV3LmJvdEBnbWFpbC5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbGluZyBvdXQgcjU3NjA5LgpJbmRleDogV2ViQ29yZS9odG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvaHRtbC9jYW52
YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkocmV2aXNpb24gNTc1ODcpCisrKyBXZWJDb3Jl
L2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk4LDggKzk4LDYgQEAgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpXZWJHTFJlbmRlcmluZ0Nvbgog
ICAgIG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3JtYXQgPSBpbXBsZW1lbnRhdGlvbkNvbG9y
UmVhZEZvcm1hdDsKICAgICBpbnQgaW1wbGVtZW50YXRpb25Db2xvclJlYWRUeXBlID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlVOU0lHTkVEX0JZVEU7CiAgICAgbV9jb250ZXh0LT5nZXRJbnRlZ2VydihH
cmFwaGljc0NvbnRleHQzRDo6SU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFLCAmaW1wbGVt
ZW50YXRpb25Db2xvclJlYWRUeXBlKTsKLSAgICAvLyBGSVhNRTogcmVtb3ZlIHRoZSBnZXRFcnJv
cigpIHdoZW4gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQvVFlQRSBhcmUgc3VwcG9y
dGVkLgotICAgIG1fY29udGV4dC0+Z2V0RXJyb3IoKTsKICAgICBtX2ltcGxlbWVudGF0aW9uQ29s
b3JSZWFkVHlwZSA9IGltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZTsKICAgICBtX2NvbnRleHQt
PnJlc2hhcGUoY2FudmFzKCktPndpZHRoKCksIGNhbnZhcygpLT5oZWlnaHQoKSk7CiAgICAgbV9j
b250ZXh0LT52aWV3cG9ydCgwLCAwLCBjYW52YXMoKS0+d2lkdGgoKSwgY2FudmFzKCktPmhlaWdo
dCgpKTsKQEAgLTEwNTksNiArMTA1NywxMCBAQCBXZWJHTEdldEluZm8gV2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRQCiAgICAgICAgIHJldHVybiBnZXRVbnNpZ25lZExvbmdQYXJhbWV0ZXIocG5h
bWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkdSRUVOX0JJVFM6CiAgICAgICAgIHJl
dHVybiBnZXRMb25nUGFyYW1ldGVyKHBuYW1lKTsKKyAgICBjYXNlIEdyYXBoaWNzQ29udGV4dDNE
OjpJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX0ZPUk1BVDoKKyAgICAgICAgcmV0dXJuIGdldExv
bmdQYXJhbWV0ZXIocG5hbWUpOworICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OklNUExFTUVO
VEFUSU9OX0NPTE9SX1JFQURfVFlQRToKKyAgICAgICAgcmV0dXJuIGdldExvbmdQYXJhbWV0ZXIo
cG5hbWUpOwogICAgIGNhc2UgR3JhcGhpY3NDb250ZXh0M0Q6OkxJTkVfV0lEVEg6CiAgICAgICAg
IHJldHVybiBnZXRGbG9hdFBhcmFtZXRlcihwbmFtZSk7CiAgICAgY2FzZSBHcmFwaGljc0NvbnRl
eHQzRDo6TUFYX0NPTUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFM6CkBAIC0xNjI3LDcgKzE2Mjks
NyBAQCBQYXNzUmVmUHRyPFdlYkdMQXJyYXk+IFdlYkdMUmVuZGVyaW5nQ29uCiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfRU5V
TSk7CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KLSAgICBpZiAoIShmb3JtYXQgPT0gR3JhcGhp
Y3NDb250ZXh0M0Q6OlJHQkEgJiYgdHlwZSA9PSBHcmFwaGljc0NvbnRleHQzRDo6VU5TSUdORURf
QllURSB8fCBmb3JtYXQgPT0gbV9pbXBsZW1lbnRhdGlvbkNvbG9yUmVhZEZvcm1hdCAmJiB0eXBl
ID09IG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3JtYXQpKSB7CisgICAgaWYgKCEoZm9ybWF0
ID09IEdyYXBoaWNzQ29udGV4dDNEOjpSR0JBICYmIHR5cGUgPT0gR3JhcGhpY3NDb250ZXh0M0Q6
OlVOU0lHTkVEX0JZVEUgfHwgZm9ybWF0ID09IG1faW1wbGVtZW50YXRpb25Db2xvclJlYWRGb3Jt
YXQgJiYgdHlwZSA9PSBtX2ltcGxlbWVudGF0aW9uQ29sb3JSZWFkVHlwZSkpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9P
UEVSQVRJT04pOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CkluZGV4OiBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL21hYy9HcmFwaGljc0NvbnRleHQzRE1hYy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvR3JhcGhpY3NDb250ZXh0M0RNYWMuY3BwCShy
ZXZpc2lvbiA1NzU4NykKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0dyYXBoaWNz
Q29udGV4dDNETWFjLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTEzNSw4ICsxMTM1LDIwIEBAIHZv
aWQgR3JhcGhpY3NDb250ZXh0M0Q6OmdldEZyYW1lYnVmZmVyQXQKIAogdm9pZCBHcmFwaGljc0Nv
bnRleHQzRDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKIHsK
LSAgICBlbnN1cmVDb250ZXh0KG1fY29udGV4dE9iaik7Ci0gICAgOjpnbEdldEludGVnZXJ2KHBu
YW1lLCB2YWx1ZSk7CisgICAgLy8gTmVlZCB0byBlbXVsYXRlIElNUExFTUVOVEFUSU9OX0NPTE9S
X1JFQURfRk9STUFUL1RZUEUgZm9yIEdMLiAgQW55IHZhbGlkCisgICAgLy8gY29tYmluYXRpb24g
c2hvdWxkIHdvcmssIGJ1dCBHTF9SR0IvR0xfVU5TSUdORURfQllURSBtaWdodCBiZSB0aGUgbW9z
dAorICAgIC8vIHVzZWZ1bCBmb3IgZGVza3RvcCBXZWJHTCB1c2Vycy4KKyAgICBlbnN1cmVDb250
ZXh0KG1fY29udGV4dE9iaik7CisgICAgc3dpdGNoIChwbmFtZSkgeworICAgIGNhc2UgSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQ6CisgICAgICAgICp2YWx1ZSA9IEdMX1JHQjsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBJTVBMRU1FTlRBVElPTl9DT0xPUl9SRUFEX1RZUEU6Cisg
ICAgICAgICp2YWx1ZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICAgIGJyZWFrOworICAgIGRl
ZmF1bHQ6CisgICAgICAgIDo6Z2xHZXRJbnRlZ2VydihwbmFtZSwgdmFsdWUpOworICAgIH0KIH0K
IAogdm9pZCBHcmFwaGljc0NvbnRleHQzRDo6Z2V0UHJvZ3JhbWl2KFdlYkdMUHJvZ3JhbSogcHJv
Z3JhbSwgdW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2YWx1ZSkKSW5kZXg6IFdlYktpdC9jaHJv
bWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwko
cmV2aXNpb24gNTc2MjMpCisrKyBXZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTAtMDQtMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xl
LmNvbT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
bXVsYXRlIEdMX0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIGdsR2V0
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzI4MQor
CisgICAgICAgICogc3JjL1dlYkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZXRJbnRlZ2Vy
dik6IEVtdWxhdGUgdHdvICBlbnVtcy4KKwogMjAxMC0wNC0xMiAgVG9ueSBDaGFuZyAgPHRvbnlA
Y2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERhcmluIEZpc2hlci4KSW5kZXg6
IFdlYktpdC9jaHJvbWl1bS9zcmMvV2ViR3JhcGhpY3NDb250ZXh0M0REZWZhdWx0SW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJHcmFwaGljc0NvbnRleHQzRERl
ZmF1bHRJbXBsLmNwcAkocmV2aXNpb24gNTc1ODcpCisrKyBXZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkdyYXBoaWNzQ29udGV4dDNERGVmYXVsdEltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQ5
LDcgKzEwNDksMjMgQEAgdm9pZCBXZWJHcmFwaGljc0NvbnRleHQzRERlZmF1bHRJbXBsOjpnZQog
ICAgIGdsR2V0RnJhbWVidWZmZXJBdHRhY2htZW50UGFyYW1ldGVyaXZFWFQodGFyZ2V0LCBhdHRh
Y2htZW50LCBwbmFtZSwgdmFsdWUpOwogfQogCi1ERUxFR0FURV9UT19HTF8yKGdldEludGVnZXJ2
LCBHZXRJbnRlZ2VydiwgdW5zaWduZWQgbG9uZywgaW50KikKK3ZvaWQgV2ViR3JhcGhpY3NDb250
ZXh0M0REZWZhdWx0SW1wbDo6Z2V0SW50ZWdlcnYodW5zaWduZWQgbG9uZyBwbmFtZSwgaW50KiB2
YWx1ZSkKK3sKKyAgICAvLyBOZWVkIHRvIGVtdWxhdGUgSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9GT1JNQVQvVFlQRSBmb3IgR0wuICBBbnkgdmFsaWQKKyAgICAvLyBjb21iaW5hdGlvbiBzaG91
bGQgd29yaywgYnV0IEdMX1JHQi9HTF9VTlNJR05FRF9CWVRFIG1pZ2h0IGJlIHRoZSBtb3N0Cisg
ICAgLy8gdXNlZnVsIGZvciBkZXNrdG9wIFdlYkdMIHVzZXJzLgorICAgIG1ha2VDb250ZXh0Q3Vy
cmVudCgpOworICAgIHN3aXRjaCAocG5hbWUpIHsKKyAgICBjYXNlIDB4OEI5QjogLy8gSU1QTEVN
RU5UQVRJT05fQ09MT1JfUkVBRF9GT1JNQVQKKyAgICAgICAgKnZhbHVlID0gR0xfUkdCOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIDB4OEI5QTogLy8gSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVB
RF9UWVBFCisgICAgICAgICp2YWx1ZSA9IEdMX1VOU0lHTkVEX0JZVEU7CisgICAgICAgIGJyZWFr
OworICAgIGRlZmF1bHQ6CisgICAgICAgIGdsR2V0SW50ZWdlcnYocG5hbWUsIHZhbHVlKTsKKyAg
ICB9Cit9CiAKIERFTEVHQVRFX1RPX0dMXzMoZ2V0UHJvZ3JhbWl2LCBHZXRQcm9ncmFtaXYsIFdl
YkdMSWQsIHVuc2lnbmVkIGxvbmcsIGludCopCiAKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxv
Zwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDU3NjIzKQor
KysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAK
KzIwMTAtMDQtMTQgIFpoZW55YW8gTW8gIDx6bW9AZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbXVsYXRlIEdMX0lNUExFTUVOVEFU
SU9OX0NPTE9SX1JFQURfRk9STUFUL1RZUEUgZm9yIGdsR2V0CisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zNzI4MQorCisgICAgICAgICogZmFzdC9jYW52
YXMvd2ViZ2wvcmVhZC1waXhlbHMtZXhwZWN0ZWQudHh0OiBBZGQgdGVzdCBjYXNlIGZvciB0aGUg
b3RoZXIgc3VwcG9ydGVkIGZvcm1hdC90eXBlIGluIHJlYWRQaXhlbHMgKGJlc2lkZXMgUkdCQS9V
TlNJR05FRF9CWVRFKTsgYWxzbywgY2hhbmdlZCB0byBhIHNpbXBsZXIgdGVzdCBmcmFtZXdvcmsu
CisgICAgICAgICogZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbDogRGl0dG8uCisK
IDIwMTAtMDQtMTQgIFhhbiBMb3BleiAgPHhsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtH
VEtdIHNjcm9sbGJhcnMvc2Nyb2xsYmFyLWNyYXNoLW9uLXJlZnJlc2guaHRtbCBpcyBmbGFrZXkg
b24gZGVidWcgYm90cyAKSW5kZXg6IExheW91dFRlc3RzL2Zhc3QvY2FudmFzL3dlYmdsL3JlYWQt
cGl4ZWxzLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZWFkLXBpeGVscy1leHBlY3RlZC50eHQJKHJldmlzaW9uIDU3NTg3KQorKysgTGF5
b3V0VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0zLDU0ICszLDIwNCBAQCBWZXJpZnkgcmVhZFBpeGVscygpIHdvcmtzIGZp
bmUgd2l0aCB2YXJpCiBPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCiAKIFBBU1MgZ2wgPSBpbml0
V2ViR0woJ2V4YW1wbGUnLCAndnNoYWRlcicsICdmc2hhZGVyJywgWyAncG9zJywgJ2NvbG9ySW4n
IF0sIFsgMCwgMCwgMCwgMSBdLCAxKSBpcyBub24tbnVsbC4KK0NoZWNrIHN1cHBvcnRlZCBwaXhl
bCBmb3JtYXQvdHlwZSBiZXNpZGVzIFJHQkEvVU5TSUdORURfQllURQorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BB
U1MgcGl4ZWxGb3JtYXQgPT0gZ2wuUkdCQSAmJiBwaXhlbFR5cGUgPT0gZ2wuVU5TSUdORURfQllU
RSBpcyBmYWxzZQorVGVzdGluZyBmb3JtYXQgPSBSR0JBIGFuZCB0eXBlID0gVU5TSUdORURfQllU
RQogVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDEsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBp
cyBbIDI1NSwgMjU1LCAwLCAyNTVdCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQ
QVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKIFRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSAyLCB3
aWR0aCA9IDEsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBQQVNTIGFycmF5Lmxlbmd0aCBpcyBl
eHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQorUEFTUyAyNTUs
MTAyLDAsMjU1IGlzIG5vbi1udWxsLgorUEFTUyBwaXhlbCBpcyBleHBlY3RlZENvbG9yCiBUZXN0
aW5nIFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSAxLCBoZWlnaHQgPSAyCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJP
UgogUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1
LCAyNTUsIDAsIDI1NV0KK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4
ZWwgaXMgZXhwZWN0ZWRDb2xvcgogVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0g
MSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVk
U2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCitQQVNTIDI1NSwxMDIsMCwy
NTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKIFRlc3RpbmcgUEFD
S19BTElHTk1FTlQgPSA0LCB3aWR0aCA9IDIsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBQQVNT
IGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwg
MCwgMjU1XQorUEFTUyAyNTUsMTAyLDAsMjU1IGlzIG5vbi1udWxsLgorUEFTUyBwaXhlbCBpcyBl
eHBlY3RlZENvbG9yCiBUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSAyLCBoZWln
aHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJy
b3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1Q
QVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBu
b24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgogVGVzdGluZyBQQUNLX0FMSUdO
TUVOVCA9IDQsIHdpZHRoID0gMywgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgYXJyYXku
bGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVd
CitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVk
Q29sb3IKIFRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0aCA9IDMsIGhlaWdodCA9IDIK
K1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCiBQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4
ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQorUEFTUyAyNTUsMTAyLDAsMjU1IGlzIG5vbi1udWxs
LgorUEFTUyBwaXhlbCBpcyBleHBlY3RlZENvbG9yCiBUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0g
NCwgd2lkdGggPSA0LCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgogUEFTUyBhcnJheS5sZW5ndGgg
aXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KK1BBU1Mg
MjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgog
VGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNCwgaGVpZ2h0ID0gMgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9f
RVJST1IKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBb
IDI1NSwgMjU1LCAwLCAyNTVdCitQQVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNT
IHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKIFRlc3RpbmcgUEFDS19BTElHTk1FTlQgPSA4LCB3aWR0
aCA9IDUsIGhlaWdodCA9IDEKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBQQVNTIGFycmF5Lmxlbmd0aCBpcyBleHBl
Y3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwgMjU1XQorUEFTUyAyNTUsMTAy
LDAsMjU1IGlzIG5vbi1udWxsLgorUEFTUyBwaXhlbCBpcyBleHBlY3RlZENvbG9yCiBUZXN0aW5n
IFBBQ0tfQUxJR05NRU5UID0gNCwgd2lkdGggPSA1LCBoZWlnaHQgPSAyCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBpcyBnbC5OT19FUlJPUgog
UEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNTIHBpeGVsIGlzIFsgMjU1LCAy
NTUsIDAsIDI1NV0KK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwg
aXMgZXhwZWN0ZWRDb2xvcgogVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNSwg
aGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6
ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCitQQVNTIDI1NSwxMDIsMCwyNTUg
aXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29sb3IKIFRlc3RpbmcgUEFDS19B
TElHTk1FTlQgPSA4LCB3aWR0aCA9IDYsIGhlaWdodCA9IDIKK1BBU1MgZ2wuZ2V0RXJyb3IoKSBp
cyBnbC5OT19FUlJPUgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCiBQQVNTIGFy
cmF5Lmxlbmd0aCBpcyBleHBlY3RlZFNpemUKLVBBU1MgcGl4ZWwgaXMgWyAyNTUsIDI1NSwgMCwg
MjU1XQorUEFTUyAyNTUsMTAyLDAsMjU1IGlzIG5vbi1udWxsLgorUEFTUyBwaXhlbCBpcyBleHBl
Y3RlZENvbG9yCiBUZXN0aW5nIFBBQ0tfQUxJR05NRU5UID0gOCwgd2lkdGggPSA3LCBoZWlnaHQg
PSAyCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgZ2wuZ2V0RXJyb3Io
KSBpcyBnbC5OT19FUlJPUgogUEFTUyBhcnJheS5sZW5ndGggaXMgZXhwZWN0ZWRTaXplCi1QQVNT
IHBpeGVsIGlzIFsgMjU1LCAyNTUsIDAsIDI1NV0KK1BBU1MgMjU1LDEwMiwwLDI1NSBpcyBub24t
bnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgogVGVzdGluZyBQQUNLX0FMSUdOTUVO
VCA9IDgsIHdpZHRoID0gOCwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5P
X0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKIFBBU1MgYXJyYXkubGVu
Z3RoIGlzIGV4cGVjdGVkU2l6ZQotUEFTUyBwaXhlbCBpcyBbIDI1NSwgMjU1LCAwLCAyNTVdCitQ
QVNTIDI1NSwxMDIsMCwyNTUgaXMgbm9uLW51bGwuCitQQVNTIHBpeGVsIGlzIGV4cGVjdGVkQ29s
b3IKK1Rlc3RpbmcgdGhlIG90aGVyIHN1cHBvcnRlZCBmb3JtYXQvdHlwZSBjb21iaW5hdGlvbgor
VGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDEsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFTUyBn
bC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9f
RVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAs
MCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNL
X0FMSUdOTUVOVCA9IDIsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigp
IGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1Mg
YXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVs
bC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9
IDQsIHdpZHRoID0gMSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VS
Uk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3Ro
IGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4
ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0g
MSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGds
LmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVk
U2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0
ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gMiwgaGVpZ2h0ID0g
MgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkg
aXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAy
NTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVz
dGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gMiwgaGVpZ2h0ID0gMgorUEFTUyBnbC5n
ZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJS
T1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBp
cyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FM
SUdOTUVOVCA9IDQsIHdpZHRoID0gMywgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlz
IGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJy
YXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4K
K1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgs
IHdpZHRoID0gMywgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9S
CitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlz
IGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwg
aXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDQsIHdpZHRoID0gNCwg
aGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdl
dEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6
ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRD
b2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNCwgaGVpZ2h0ID0gMgor
UEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMg
Z2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUs
MTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGlu
ZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNSwgaGVpZ2h0ID0gMQorUEFTUyBnbC5nZXRF
cnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IK
K1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBu
b24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdO
TUVOVCA9IDQsIHdpZHRoID0gNSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGds
Lk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXku
bGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BB
U1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdp
ZHRoID0gNSwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQ
QVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4
cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMg
ZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNiwgaGVp
Z2h0ID0gMgorUEFTUyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVy
cm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQor
UEFTUyAyNTUsMTAyLDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xv
cgorVGVzdGluZyBQQUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gNywgaGVpZ2h0ID0gMgorUEFT
UyBnbC5nZXRFcnJvcigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wu
Tk9fRVJST1IKK1BBU1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAy
LDAsMCBpcyBub24tbnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgorVGVzdGluZyBQ
QUNLX0FMSUdOTUVOVCA9IDgsIHdpZHRoID0gOCwgaGVpZ2h0ID0gMgorUEFTUyBnbC5nZXRFcnJv
cigpIGlzIGdsLk5PX0VSUk9SCitQQVNTIGdsLmdldEVycm9yKCkgaXMgZ2wuTk9fRVJST1IKK1BB
U1MgYXJyYXkubGVuZ3RoIGlzIGV4cGVjdGVkU2l6ZQorUEFTUyAyNTUsMTAyLDAsMCBpcyBub24t
bnVsbC4KK1BBU1MgcGl4ZWwgaXMgZXhwZWN0ZWRDb2xvcgogUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQogCiBURVNUIENPTVBMRVRFCkluZGV4OiBMYXlvdXRUZXN0cy9mYXN0L2NhbnZh
cy93ZWJnbC9yZWFkLXBpeGVscy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2Zhc3Qv
Y2FudmFzL3dlYmdsL3JlYWQtcGl4ZWxzLmh0bWwJKHJldmlzaW9uIDU3NTg3KQorKysgTGF5b3V0
VGVzdHMvZmFzdC9jYW52YXMvd2ViZ2wvcmVhZC1waXhlbHMuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMjQsOTAgKzI0LDIyOCBAQCB2b2lkIG1haW4oKQogICAgIGdsX0ZyYWdDb2xvciA9IGNvbG9y
OwogfQogPC9zY3JpcHQ+Ci0KKzwvaGVhZD4KKzxib2R5PgorPGNhbnZhcyBpZD0iZXhhbXBsZSIg
d2lkdGg9IjMycHgiIGhlaWdodD0iMzJweCI+PC9jYW52YXM+Cis8ZGl2IGlkPSJkZXNjcmlwdGlv
biI+PC9kaXY+Cis8ZGl2IGlkPSJjb25zb2xlIj48L2Rpdj4KIDxzY3JpcHQ+CiB2YXIgc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gZmFsc2U7CiAKLS8vIFRoZXNlIGZvdXIgZGVjbGFyYXRpb25zIG5lZWQg
dG8gYmUgZ2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCisvLyBUaGUgYmVsb3cgZGVj
bGFyYXRpb25zIG5lZWQgdG8gYmUgZ2xvYmFsIGZvciAic2hvdWxkQmUiIHRvIHNlZSB0aGVtCiB2
YXIgZ2wgPSBudWxsOwogdmFyIGFycmF5ID0gbnVsbDsKIHZhciBleHBlY3RlZFNpemUgPSAwOwot
dmFyIHBpeGVsID0gWyAwLCAwLCAwLCAxIF07Cit2YXIgcGl4ZWwgPSBbIDAsIDAsIDAsIDAgXTsK
K3ZhciBleHBlY3RlZENvbG9yID0gWyAwLCAwLCAwLCAwIF07Cit2YXIgcGl4ZWxGb3JtYXQgPSAw
OwordmFyIHBpeGVsVHlwZSA9IDA7CiAKLWZ1bmN0aW9uIGluaXQoKQorZnVuY3Rpb24gY2FsY3Vs
YXRlUGl4ZWxCeXRlcyhmb3JtYXQsIHR5cGUpCiB7Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgewotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZl
cmVuY2UoIldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7Ci0gICAgICAgIGxheW91dFRlc3RDb250
cm9sbGVyLmR1bXBBc1RleHQoKTsKLSAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIud2FpdFVu
dGlsRG9uZSgpOworICAgIHZhciBzaXplID0gMDsKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAg
IGNhc2UgZ2wuQUxQSEE6CisgICAgICAgIHNpemUgPSAxOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIGdsLlJHQjoKKyAgICAgICAgc2l6ZSA9IDM7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Z2wuUkdCQToKKyAgICAgICAgc2l6ZSA9IDQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6
CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBnbC5VTlNJR05FRF9CWVRFOgorICAgICAgICBicmVhazsKKyAgICBjYXNlIGdsLlVOU0lHTkVE
X1NIT1JUXzVfNl81OgorICAgICAgICBpZiAoZm9ybWF0ICE9IGdsLlJHQikKKyAgICAgICAgICAg
IHJldHVybiAtMTsKKyAgICAgICAgc2l6ZSA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Z2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVf
NV81XzE6CisgICAgICAgIGlmIChmb3JtYXQgIT0gZ2wuUkdCQSkKKyAgICAgICAgICAgIHJldHVy
biAtMTsKKyAgICAgICAgc2l6ZSA9IDI7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg
ICAgICAgIHJldHVybiAtMTsKICAgICB9CisgICAgcmV0dXJuIHNpemU7Cit9CiAKLSAgICBkZXNj
cmlwdGlvbignVmVyaWZ5IHJlYWRQaXhlbHMoKSB3b3JrcyBmaW5lIHdpdGggdmFyaW91cyBQQUNL
X0FMSUdOTUVOVCB2YWx1ZXMuJyk7CitmdW5jdGlvbiBjYWxjdWxhdGVQYWRkaW5nQnl0ZXMoYnl0
ZXNQZXJQaXhlbCwgcGFja0FsaWdubWVudCwgd2lkdGgpCit7CisgICAgdmFyIHBhZGRpbmcgPSAw
OworICAgIHN3aXRjaCAocGFja0FsaWdubWVudCkgeworICAgIGNhc2UgMToKKyAgICBjYXNlIDI6
CisgICAgY2FzZSA0OgorICAgIGNhc2UgODoKKyAgICAgICAgcGFkZGluZyA9IChieXRlc1BlclBp
eGVsICogd2lkdGgpICUgcGFja0FsaWdubWVudDsKKyAgICAgICAgaWYgKHBhZGRpbmcgPiAwKQor
ICAgICAgICAgICAgcGFkZGluZyA9IHBhY2tBbGlnbm1lbnQgLSBwYWRkaW5nOworICAgICAgICBi
cmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVy
biBwYWRkaW5nOworfQogCi0gICAgcnVuVGVzdCgpOworZnVuY3Rpb24gcGFja0NvbG9yKGZvcm1h
dCwgdHlwZSwgciwgZywgYiwgYSkKK3sKKyAgICAvLyBGSVhNRTogbm90IHN1cmUgaWYgdGhlIGNv
bG9yIHBhY2tpbmcgaXMgY29ycmVjdCBmb3IgVU5TSUdORURfU0hPUlRfKi4KKyAgICB2YXIgY29s
b3IgPSBbIDAsIDAsIDAsIDAgXTsKKyAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNlIGdsLlVO
U0lHTkVEX0JZVEU6CisgICAgICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgICAgIGNhc2UgZ2wu
QUxQSEE6CisgICAgICAgICAgICBjb2xvclswXSA9IGE7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSBnbC5SR0I6CisgICAgICAgICAgICBjb2xvclswXSA9IHI7CisgICAgICAgICAg
ICBjb2xvclsxXSA9IGc7CisgICAgICAgICAgICBjb2xvclsyXSA9IGI7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSBnbC5SR0JBOgorICAgICAgICAgICAgY29sb3JbMF0gPSByOwor
ICAgICAgICAgICAgY29sb3JbMV0gPSBnOworICAgICAgICAgICAgY29sb3JbMl0gPSBiOworICAg
ICAgICAgICAgY29sb3JbM10gPSBhOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAgICAgICBpZiAoZm9ybWF0ICE9
IGdsLlJHQikKKyAgICAgICAgICAgIHJldHVybiBudWxsOworICAgICAgICByID4+PSAzOworICAg
ICAgICBnID4+PSAyOworICAgICAgICBiID4+PSAzOworICAgICAgICBjb2xvclswXSA9IChyIDw8
IDExKSArIChnIDw8IDUpICsgYjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBnbC5VTlNJR05F
RF9TSE9SVF80XzRfNF80OgorICAgICAgICBpZiAoZm9ybWF0ICE9IGdsLlJHQkEpCisgICAgICAg
ICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgciA+Pj0gNDsKKyAgICAgICAgZyA+Pj0gNDsKKyAg
ICAgICAgYiA+Pj0gNDsKKyAgICAgICAgYSA+Pj0gNDsKKyAgICAgICAgY29sb3JbMF0gPSAociA8
PCAxMikgKyAoZyA8PCA4KSArIChiIDw8IDQpICsgYTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgICBpZiAoZm9ybWF0ICE9IGdsLlJH
QkEpCisgICAgICAgICAgICByZXR1cm4gbnVsbDsKKyAgICAgICAgciA+Pj0gMzsKKyAgICAgICAg
ZyA+Pj0gMzsKKyAgICAgICAgYiA+Pj0gMzsKKyAgICAgICAgYSA+Pj0gNzsKKyAgICAgICAgY29s
b3JbMF0gPSAociA8PCAxMSkgKyAoZyA8PCA2KSArIChiIDw8IDEpICsgYTsKKyAgICAgICAgYnJl
YWs7CisgICAgRGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIHJldHVy
biBjb2xvcjsKIH0KIAotZnVuY3Rpb24gcnVuVGVzdEl0ZXJhdGlvbihwYWNrQWxpZ25tZW50LCB3
aWR0aCwgaGVpZ2h0LCBzaXplKQorZnVuY3Rpb24gcnVuVGVzdEl0ZXJhdGlvbihmb3JtYXQsIHR5
cGUsIHBhY2tBbGlnbm1lbnQsIHdpZHRoLCBoZWlnaHQpCiB7CiAgICAgZGVidWcoIlRlc3Rpbmcg
UEFDS19BTElHTk1FTlQgPSAiICsgcGFja0FsaWdubWVudCArICIsIHdpZHRoID0gIiArIHdpZHRo
ICsgIiwgaGVpZ2h0ID0gIiArIGhlaWdodCk7Ci0gICAgZ2wuY2xlYXJDb2xvcigxLCAxLCAwLCAx
KTsKKyAgICBnbC5jbGVhckNvbG9yKDEsIDAuNCwgMCwgMSk7CiAgICAgZ2wuY2xlYXIoZ2wuQ09M
T1JfQlVGRkVSX0JJVCk7CiAgICAgZ2wucGl4ZWxTdG9yZWkoZ2wuUEFDS19BTElHTk1FTlQsIHBh
Y2tBbGlnbm1lbnQpOwotICAgIGFycmF5ID0gZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVp
Z2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFKTsKLSAgICBleHBlY3RlZFNpemUgPSBzaXpl
OworICAgIHNob3VsZEJlKCJnbC5nZXRFcnJvcigpIiwgImdsLk5PX0VSUk9SIik7CisgICAgYXJy
YXkgPSBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgdHlwZSk7Cisg
ICAgc2hvdWxkQmUoImdsLmdldEVycm9yKCkiLCAiZ2wuTk9fRVJST1IiKTsKKyAgICB2YXIgYnl0
ZXNQZXJQaXhlbCA9IGNhbGN1bGF0ZVBpeGVsQnl0ZXMoZm9ybWF0LCB0eXBlKTsKKyAgICB2YXIg
cGFkZGluZyA9IGNhbGN1bGF0ZVBhZGRpbmdCeXRlcyhieXRlc1BlclBpeGVsLCBwYWNrQWxpZ25t
ZW50LCB3aWR0aCk7CisgICAgZXhwZWN0ZWRTaXplID0gYnl0ZXNQZXJQaXhlbCAqIHdpZHRoICog
aGVpZ2h0ICsgcGFkZGluZyAqIChoZWlnaHQgLSAxKTsKKyAgICB2YXIgaXNTaG9ydCA9IGZhbHNl
OworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6
CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgZ2wuVU5TSUdO
RURfU0hPUlRfNV81XzVfMToKKyAgICAgICAgaXNTaG9ydCA9IHRydWU7CisgICAgfQorICAgIGlm
IChpc1Nob3J0KQorICAgICAgICBleHBlY3RlZFNpemUgLz0gMjsKICAgICBzaG91bGRCZSgiYXJy
YXkubGVuZ3RoIiwgImV4cGVjdGVkU2l6ZSIpOwogICAgIC8vIENoZWNrIHRoZSBsYXN0IHBpeGVs
IG9mIHRoZSBsYXN0IHJvdy4KLSAgICB2YXIgcGFkZGluZyA9IDA7Ci0gICAgaWYgKGhlaWdodCA+
IDEpCi0gICAgICAgIHBhZGRpbmcgPSAoc2l6ZSAtIHdpZHRoICogaGVpZ2h0ICogNCkgLyAoaGVp
Z2h0IC0gMSk7Ci0gICAgdmFyIGJ5dGVzUGVyUm93ID0gd2lkdGggKiA0ICsgcGFkZGluZzsKLSAg
ICB2YXIgcG9zID0gYnl0ZXNQZXJSb3cgKiAoaGVpZ2h0IC0gMSkgKyAod2lkdGggLSAxKSAqIDQ7
Ci0gICAgcGl4ZWxbMF0gPSBhcnJheVtwb3NdOwotICAgIHBpeGVsWzFdID0gYXJyYXlbcG9zICsg
MV07Ci0gICAgcGl4ZWxbMl0gPSBhcnJheVtwb3MgKyAyXTsKLSAgICBwaXhlbFszXSA9IGFycmF5
W3BvcyArIDNdOwotICAgIHNob3VsZEJlKCJwaXhlbCIsICJbIDI1NSwgMjU1LCAwLCAyNTVdIik7
CisgICAgdmFyIGJ5dGVzUGVyUm93ID0gd2lkdGggKiBieXRlc1BlclBpeGVsICsgcGFkZGluZzsK
KyAgICB2YXIgcG9zID0gYnl0ZXNQZXJSb3cgKiAoaGVpZ2h0IC0gMSkgKyAod2lkdGggLSAxKSAq
IGJ5dGVzUGVyUGl4ZWw7CisgICAgdmFyIG51bUNvbXBvbmVudHMgPSBieXRlc1BlclBpeGVsOwor
ICAgIGlmIChpc1Nob3J0KSB7CisgICAgICAgIHBvcyAvPSAyOworICAgICAgICBudW1Db21wb25l
bnRzIC89IDI7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbnVtQ29tcG9uZW50czsg
KytpKQorICAgICAgICBwaXhlbFtpXSA9IGFycmF5W3BvcyArIGldOworICAgIGZvciAodmFyIGkg
PSBudW1Db21wb25lbnRzOyBpIDwgNDsgKytpKQorICAgICAgICBwaXhlbFtpXSA9IDA7CisgICAg
ZXhwZWN0ZWRDb2xvciA9IHBhY2tDb2xvcihmb3JtYXQsIHR5cGUsIDI1NSwgMTAyLCAwLCAyNTUp
OworICAgIHNob3VsZEJlTm9uTnVsbChleHBlY3RlZENvbG9yKTsKKyAgICBzaG91bGRCZSgicGl4
ZWwiLCAiZXhwZWN0ZWRDb2xvciIpOwogfQogCi1mdW5jdGlvbiBydW5UZXN0KCkKK2Z1bmN0aW9u
IGNoZWNrU3VwcG9ydGVkUGl4ZWxGb3JtYXRBbmRUeXBlKCkKIHsKLSAgICBzaG91bGRCZU5vbk51
bGwoImdsID0gaW5pdFdlYkdMKCdleGFtcGxlJywgJ3ZzaGFkZXInLCAnZnNoYWRlcicsIFsgJ3Bv
cycsICdjb2xvckluJyBdLCBbIDAsIDAsIDAsIDEgXSwgMSkiKTsKLSAgICBnbC5kaXNhYmxlKGds
LkJMRU5EKTsKLQotICAgIHJ1blRlc3RJdGVyYXRpb24oMSwgMSwgMiwgOCk7Ci0gICAgcnVuVGVz
dEl0ZXJhdGlvbigyLCAxLCAyLCA4KTsKLSAgICBydW5UZXN0SXRlcmF0aW9uKDQsIDEsIDIsIDgp
OwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgMSwgMiwgMTIpOwotICAgIHJ1blRlc3RJdGVyYXRp
b24oNCwgMiwgMiwgMTYpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgMiwgMiwgMTYpOwotICAg
IHJ1blRlc3RJdGVyYXRpb24oNCwgMywgMiwgMjQpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwg
MywgMiwgMjgpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oNCwgNCwgMiwgMzIpOwotICAgIHJ1blRl
c3RJdGVyYXRpb24oOCwgNCwgMiwgMzIpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgNSwgMSwg
MjApOwotICAgIHJ1blRlc3RJdGVyYXRpb24oNCwgNSwgMiwgNDApOwotICAgIHJ1blRlc3RJdGVy
YXRpb24oOCwgNSwgMiwgNDQpOwotICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgNiwgMiwgNDgpOwot
ICAgIHJ1blRlc3RJdGVyYXRpb24oOCwgNywgMiwgNjApOwotICAgIHJ1blRlc3RJdGVyYXRpb24o
OCwgOCwgMiwgNjQpOwotCi0gICAgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKLSAgICB2YXIg
ZXBpbG9ndWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKLSAgICBlcGlsb2d1
ZS5vbmxvYWQgPSBmaW5pc2g7Ci0gICAgZXBpbG9ndWUuc3JjID0gIi4uLy4uL2pzL3Jlc291cmNl
cy9qcy10ZXN0LXBvc3QuanMiOwotICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9n
dWUpOwotfQotCi1mdW5jdGlvbiBmaW5pc2goKSB7Ci0gICAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0
Q29udHJvbGxlcikgewotICAgICAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7
Ci0gICAgfQorICAgIGRlYnVnKCJDaGVjayBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0L3R5cGUgYmVz
aWRlcyBSR0JBL1VOU0lHTkVEX0JZVEUiKTsKKyAgICBzaG91bGRCZSgiZ2wuZ2V0RXJyb3IoKSIs
ICJnbC5OT19FUlJPUiIpOworICAgIHBpeGVsRm9ybWF0ID0gZ2wuZ2V0UGFyYW1ldGVyKGdsLklN
UExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUKTsKKyAgICBwaXhlbFR5cGUgPSBnbC5nZXRQ
YXJhbWV0ZXIoZ2wuSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFKTsKKyAgICBzaG91bGRC
ZSgiZ2wuZ2V0RXJyb3IoKSIsICJnbC5OT19FUlJPUiIpOworICAgIHNob3VsZEJlRmFsc2UoInBp
eGVsRm9ybWF0ID09IGdsLlJHQkEgJiYgcGl4ZWxUeXBlID09IGdsLlVOU0lHTkVEX0JZVEUiKTsK
IH0KKworZGVzY3JpcHRpb24oJ1ZlcmlmeSByZWFkUGl4ZWxzKCkgd29ya3MgZmluZSB3aXRoIHZh
cmlvdXMgUEFDS19BTElHTk1FTlQgdmFsdWVzLicpOworCitzaG91bGRCZU5vbk51bGwoImdsID0g
aW5pdFdlYkdMKCdleGFtcGxlJywgJ3ZzaGFkZXInLCAnZnNoYWRlcicsIFsgJ3BvcycsICdjb2xv
ckluJyBdLCBbIDAsIDAsIDAsIDEgXSwgMSkiKTsKK2dsLmRpc2FibGUoZ2wuQkxFTkQpOworCitj
aGVja1N1cHBvcnRlZFBpeGVsRm9ybWF0QW5kVHlwZSgpOworCitkZWJ1ZygiVGVzdGluZyBmb3Jt
YXQgPSBSR0JBIGFuZCB0eXBlID0gVU5TSUdORURfQllURSIpOworcnVuVGVzdEl0ZXJhdGlvbihn
bC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCAxLCAxLCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wu
UkdCQSwgZ2wuVU5TSUdORURfQllURSwgMiwgMSwgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJH
QkEsIGdsLlVOU0lHTkVEX0JZVEUsIDQsIDEsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JB
LCBnbC5VTlNJR05FRF9CWVRFLCA4LCAxLCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwg
Z2wuVU5TSUdORURfQllURSwgNCwgMiwgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGds
LlVOU0lHTkVEX0JZVEUsIDgsIDIsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5V
TlNJR05FRF9CWVRFLCA0LCAzLCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5T
SUdORURfQllURSwgOCwgMywgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lH
TkVEX0JZVEUsIDQsIDQsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05F
RF9CWVRFLCA4LCA0LCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURf
QllURSwgOCwgNSwgMSk7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZ
VEUsIDQsIDUsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRF
LCA4LCA1LCAyKTsKK3J1blRlc3RJdGVyYXRpb24oZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwg
OCwgNiwgMik7CitydW5UZXN0SXRlcmF0aW9uKGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIDgs
IDcsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCA4LCA4
LCAyKTsKKworZGVidWcoIlRlc3RpbmcgdGhlIG90aGVyIHN1cHBvcnRlZCBmb3JtYXQvdHlwZSBj
b21iaW5hdGlvbiIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCAx
LCAxLCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgMiwgMSwg
Mik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDQsIDEsIDIpOwor
cnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCAxLCAyKTsKK3J1blRl
c3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgNCwgMiwgMik7CitydW5UZXN0SXRl
cmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDIsIDIpOworcnVuVGVzdEl0ZXJhdGlv
bihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA0LCAzLCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4
ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgMywgMik7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9y
bWF0LCBwaXhlbFR5cGUsIDQsIDQsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwg
cGl4ZWxUeXBlLCA4LCA0LCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVs
VHlwZSwgOCwgNSwgMSk7CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUs
IDQsIDUsIDIpOworcnVuVGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCA1
LCAyKTsKK3J1blRlc3RJdGVyYXRpb24ocGl4ZWxGb3JtYXQsIHBpeGVsVHlwZSwgOCwgNiwgMik7
CitydW5UZXN0SXRlcmF0aW9uKHBpeGVsRm9ybWF0LCBwaXhlbFR5cGUsIDgsIDcsIDIpOworcnVu
VGVzdEl0ZXJhdGlvbihwaXhlbEZvcm1hdCwgcGl4ZWxUeXBlLCA4LCA4LCAyKTsKKworc3VjY2Vz
c2Z1bGx5UGFyc2VkID0gdHJ1ZTsKIDwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHkgb25sb2FkPSJp
bml0KCkiPgotPGNhbnZhcyBpZD0iZXhhbXBsZSIgd2lkdGg9IjMycHgiIGhlaWdodD0iMzJweCI+
PC9jYW52YXM+Ci08ZGl2IGlkPSJkZXNjcmlwdGlvbiI+PC9kaXY+Ci08ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KIDwvYm9keT4KIDwvaHRtbD4K
</data>

          </attachment>
      

    </bug>

</bugzilla>