<?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>85299</bug_id>
          
          <creation_ts>2012-05-01 11:38:05 -0700</creation_ts>
          <short_desc>[GTK] Remove the GDK dependency from ImageDiff</short_desc>
          <delta_ts>2017-04-10 04:48:32 -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>WebKitGTK</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=151261</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>170608</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="José Dapena Paz">jdapena</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>buildbot</cc>
    
    <cc>cgarcia</cc>
    
    <cc>clopez</cc>
    
    <cc>d-r</cc>
    
    <cc>gustavo</cc>
    
    <cc>jdapena</cc>
    
    <cc>philn</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>613561</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-01 11:38:05 -0700</bug_when>
    <thetext>ImageDiff should be rewritten so that it doesn&apos;t depend on GDK, only Cairo and GLib. This will allow it to run without an X11 server.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>613562</commentid>
    <comment_count>1</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-05-01 11:38:19 -0700</bug_when>
    <thetext>See also: https://bugs.webkit.org/show_bug.cgi?id=85292</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733700</commentid>
    <comment_count>2</comment_count>
      <attachid>166893</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-10-03 07:55:04 -0700</bug_when>
    <thetext>Created attachment 166893
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733802</commentid>
    <comment_count>3</comment_count>
    <who name="Dominik Röttsches (drott)">d-r</who>
    <bug_when>2012-10-03 09:59:52 -0700</bug_when>
    <thetext>Maybe we can completely share it between EFL and GTK then.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>733809</commentid>
    <comment_count>4</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-03 10:08:34 -0700</bug_when>
    <thetext>And perhaps even WinCairo.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>734615</commentid>
    <comment_count>5</comment_count>
      <attachid>167082</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2012-10-04 05:42:33 -0700</bug_when>
    <thetext>Created attachment 167082
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>735043</commentid>
    <comment_count>6</comment_count>
      <attachid>167082</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-10-04 14:59:10 -0700</bug_when>
    <thetext>Comment on attachment 167082
Patch

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

Okay. This seems like a good first step. The next one is to remove the GLib dependency and to start sharing this code with EFL and maybe even WinCairo. A few nits follow.

&gt; Tools/DumpRenderTree/gtk/ImageDiff.cpp:46
&gt; +cairo_status_t cairoStdinReader(void *closure, unsigned char* data, unsigned length)

Nit: The asterisk for closure are in the wrong place here.

&gt; Tools/DumpRenderTree/gtk/ImageDiff.cpp:48
&gt; +    int* pendingImageSize = reinterpret_cast&lt;int*&gt;(closure);

I think this should be static_cast instead of reinterpret_cast.

&gt; Tools/DumpRenderTree/gtk/ImageDiff.cpp:49
&gt; +    if (*pendingImageSize &gt; 0) {

You should use an early return here:

if (*pendingImageSize &lt;= 0)
    return CAIRO_STATUS_SUCCESS;

&gt; Tools/DumpRenderTree/gtk/ImageDiff.cpp:50
&gt; +        size_t bytesToRead = min&lt;int&gt;(*pendingImageSize, length);

Probably you should use min&lt;size_t&gt; since I think using min&lt;int&gt; will cast length to a signed integer.

&gt; Tools/DumpRenderTree/gtk/ImageDiff.cpp:166
&gt; +    GArray* array = reinterpret_cast&lt;GArray*&gt;(closure);

You should be able to use static_cast here.

&gt; Tools/DumpRenderTree/gtk/ImageDiff.cpp:173
&gt; +    GArray* array = g_array_new(false, false, 1);

Since g_array_new takes gboolean instead of bool, it&apos;s slightly more correct to write FALSE here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814190</commentid>
    <comment_count>7</comment_count>
      <attachid>184229</attachid>
    <who name="José Dapena Paz">jdapena</who>
    <bug_when>2013-01-23 07:34:18 -0800</bug_when>
    <thetext>Created attachment 184229
Patch

Removed glib dependency, now we depend only on Cairo</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>814211</commentid>
    <comment_count>8</comment_count>
      <attachid>184229</attachid>
    <who name="Raphael Kubo da Costa (:rakuco)">rakuco</who>
    <bug_when>2013-01-23 07:56:41 -0800</bug_when>
    <thetext>Comment on attachment 184229
Patch

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

This looks promising, it would be really cool to share an ImageDiff implementation across multiple ports. I have added a few nitpicks for things which were there before your change, so feel free to ignore them. One other thing I&apos;d like to point out if we really move towards sharing ImageDiff is that EFL&apos;s calculateDifference() implementation more readable with the use of OwnPtrs and smaller helper functions.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:137
&gt; +            *currentDiffPixel++ = (unsigned char)(distance * 255.0f);

C-style cast.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:181
&gt; +    fwrite(data, 1, dataLength, stdout);

I find it easier to read if you swap the second and the third arguments: the second argument is `size&apos; and the third one is `nmemb&apos;, not the other way around.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053041</commentid>
    <comment_count>9</comment_count>
      <attachid>242719</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-12-06 10:46:42 -0800</bug_when>
    <thetext>Created attachment 242719
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053042</commentid>
    <comment_count>10</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-12-06 10:48:00 -0800</bug_when>
    <thetext>I updated the build system and addressed rakuco&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053097</commentid>
    <comment_count>11</comment_count>
      <attachid>242719</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2014-12-07 01:28:47 -0800</bug_when>
    <thetext>Comment on attachment 242719
Patch

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

Looks good to me in general, I only have a few minor comments.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:33
&gt; +#include &lt;cairo/cairo.h&gt;

#include &lt;cairo.h&gt;

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:50
&gt; +    int* pendingImageSize = static_cast&lt;int*&gt;(closure);

The passed value is long, not int.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:54
&gt; +    size_t bytesToRead = min&lt;size_t&gt;(*pendingImageSize, length);

An here we cast to size_t, I think we should use the same type consistently.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:65
&gt; +    return cairo_image_surface_create_from_png_stream(static_cast&lt;cairo_read_func_t&gt;(cairoStdinReader), &amp;imageSize);

I don&apos;t think you need the cast, since the function prototype matches cairo_read_funct_t. You could probably use a lambda here :-)

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:91
&gt; +        return 0;

nullptr

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:112
&gt; +    unsigned numberOfChannels = formatChannels(format);

You an move this after the if

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:145
&gt; +                maxDistance = max&lt;float&gt;(maxDistance, distance);

Do we need the cast? both maxDistance and distance are floats

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:153
&gt; +    float difference = 0;

I don&apos;t think this needs to be initialized.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:178
&gt; +    if (cairo_surface_write_to_png_stream(image, static_cast&lt;cairo_write_func_t&gt;(writeToPixelData), &amp;pixelData) != CAIRO_STATUS_SUCCESS)

Same here about rhe function cast. We could probably use a lambda here.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:181
&gt; +    const int dataLength = pixelData.size();

This should be size_t or unsigned.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:189
&gt; +    cairo_surface_t* differenceImage = 0;

nullptr.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:221
&gt; +    cairo_surface_t* actualImage = 0;
&gt; +    cairo_surface_t* baselineImage = 0;

nullptr

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:231
&gt; +            long imageSize = strtol(strtok(0, &quot; &quot;), 0, 10);

nullptr. We could cast this to size_t and use it consistently.

&gt; Tools/ImageDiff/cairo/ImageDiff.cpp:253
&gt; +            actualImage = 0;
&gt; +            baselineImage = 0;

nullptr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053108</commentid>
    <comment_count>12</comment_count>
      <attachid>242737</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-12-07 03:29:17 -0800</bug_when>
    <thetext>Created attachment 242737
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1053109</commentid>
    <comment_count>13</comment_count>
      <attachid>242737</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2014-12-07 03:31:05 -0800</bug_when>
    <thetext>Comment on attachment 242737
Patch

I updated the patch with comments, but it turns out the original implementation does not really work - ImageDiff hangs, I may come back to this after the hackfest, unless jdapena beats me to it ;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1237554</commentid>
    <comment_count>14</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2016-10-07 04:33:01 -0700</bug_when>
    <thetext>Is this something we are still interested in?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295377</commentid>
    <comment_count>15</comment_count>
      <attachid>306514</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-04-07 10:30:39 -0700</bug_when>
    <thetext>Created attachment 306514
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295379</commentid>
    <comment_count>16</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 10:32:30 -0700</bug_when>
    <thetext>Attachment 306514 did not pass style-queue:


ERROR: Tools/ImageDiff/cairo/PlatformImageCairo.cpp:70:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 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>1295402</commentid>
    <comment_count>17</comment_count>
      <attachid>306519</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-04-07 11:24:23 -0700</bug_when>
    <thetext>Created attachment 306519
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295403</commentid>
    <comment_count>18</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 11:26:14 -0700</bug_when>
    <thetext>Attachment 306519 did not pass style-queue:


ERROR: Tools/ImageDiff/cairo/PlatformImageCairo.cpp:70:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 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>1295411</commentid>
    <comment_count>19</comment_count>
      <attachid>306520</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-04-07 11:38:39 -0700</bug_when>
    <thetext>Created attachment 306520
New patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1295412</commentid>
    <comment_count>20</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-04-07 11:41:16 -0700</bug_when>
    <thetext>Attachment 306520 did not pass style-queue:


ERROR: Tools/ImageDiff/cairo/PlatformImageCairo.cpp:70:  More than one command on the same line  [whitespace/newline] [4]
Total errors found: 1 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>1295963</commentid>
    <comment_count>21</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-04-10 04:48:32 -0700</bug_when>
    <thetext>Committed r215179: &lt;http://trac.webkit.org/changeset/215179&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>166893</attachid>
            <date>2012-10-03 07:55:04 -0700</date>
            <delta_ts>2012-10-04 05:42:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85299-20121003165415.patch</filename>
            <type>text/plain</type>
            <size>10495</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMTcyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTgwM2Q2NWZjZjdlODFmZGMzNDJiMjgyZDU3YmM2MWUw
YzJkMjZjNC4uMjJlYWIyZWNmYTgyZjQ0NjcwMTMzYjg5YWY2ODFkMTdiMGQwNTgwNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEyLTEwLTAzICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgR0RLIGRlcGVuZGVuY3kgZnJvbSBJbWFnZURpZmYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1Mjk5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBn
ZGsgZGVwZW5kZW5jeSBvbiBJbWFnZURpZmYgZm9yIGd0aywgdXNpbmcgb25seSBjYWlyby4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9JbWFnZURpZmYuY3BwOgorICAgICAgICAocmVh
ZFN1cmZhY2VGcm9tU3RkaW4pOgorICAgICAgICAoZm9ybWF0Q2hhbm5lbHMpOgorICAgICAgICAo
ZGlmZmVyZW5jZUltYWdlRnJvbURpZmZlcmVuY2VCdWZmZXIpOgorICAgICAgICAoY2FsY3VsYXRl
RGlmZmVyZW5jZSk6CisgICAgICAgICh3cml0ZVRvR0FycmF5KToKKyAgICAgICAgKHByaW50SW1h
Z2UpOgorICAgICAgICAocHJpbnRJbWFnZURpZmZlcmVuY2VzKToKKyAgICAgICAgKG1haW4pOgor
CiAyMDEyLTEwLTAyICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgW1dLMl0gUkVHUkVTU0lPTihyMTI4NjIzKTogSXQgbWFkZSBsYXlvdXQgdGVzdHMgZXh0
cmVtZWx5IHNsb3cKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9JbWFnZURp
ZmYuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0ltYWdlRGlmZi5jcHAKaW5kZXggZTQw
YzMzYWNmOGZlZDQ3NzhlOTBmZWM5YzZjOWZiMWZmMjQwZGEyZC4uOWRlNjIxMjFkN2FhMWYwNDBi
ODhkNjQyNzU1ZGJhYTQ3ZjM0YTY1MiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0ltYWdlRGlmZi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0ltYWdlRGlm
Zi5jcHAKQEAgLTI4LDEwICsyOCwxMSBAQAogICovCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KICNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxjc3Rk
aW8+CiAjaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8
Z2xpYi5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC00Miw1OSArNDMsNzAgQEAgc3Rh
dGljIEdPcHRpb25FbnRyeSBjb21tYW5kTGluZU9wdGlvbkVudHJpZXNbXSA9CiAgICAgeyAwLCAw
LCAwLCBHX09QVElPTl9BUkdfTk9ORSwgMCwgMCwgMCB9LAogfTsKIAotR2RrUGl4YnVmKiByZWFk
UGl4YnVmRnJvbVN0ZGluKGxvbmcgaW1hZ2VTaXplKQorY2Fpcm9fc3RhdHVzX3QgY2Fpcm9TdGRp
blJlYWRlcih2b2lkICpjbG9zdXJlLCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBpbWFnZUJ1ZmZlclsyMDQ4XTsKLSAgICBHZGtQaXhi
dWZMb2FkZXIqIGxvYWRlciA9IGdka19waXhidWZfbG9hZGVyX25ld193aXRoX3R5cGUoInBuZyIs
IDApOwotICAgIEdFcnJvciogZXJyb3IgPSAwOwotCi0gICAgd2hpbGUgKGltYWdlU2l6ZSA+IDAp
IHsKLSAgICAgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWluPGludD4oaW1hZ2VTaXplLCAyMDQ4
KTsKLSAgICAgICAgc2l6ZV90IGJ5dGVzUmVhZCA9IGZyZWFkKGltYWdlQnVmZmVyLCAxLCBieXRl
c1RvUmVhZCwgc3RkaW4pOwotCi0gICAgICAgIGlmICghZ2RrX3BpeGJ1Zl9sb2FkZXJfd3JpdGUo
bG9hZGVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KGltYWdlQnVmZmVyKSwgYnl0
ZXNSZWFkLCAmZXJyb3IpKSB7Ci0gICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAg
ICAgICAgICAgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UobG9hZGVyLCAwKTsKLSAgICAgICAgICAg
IGdfb2JqZWN0X3VucmVmKGxvYWRlcik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIGltYWdlU2l6ZSAtPSBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7Cisg
ICAgaW50KiBwZW5kaW5nSW1hZ2VTaXplID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihjbG9zdXJl
KTsKKyAgICBpZiAoKnBlbmRpbmdJbWFnZVNpemUgPiAwKSB7CisgICAgICAgIHNpemVfdCBieXRl
c1RvUmVhZCA9IG1pbjxpbnQ+KCpwZW5kaW5nSW1hZ2VTaXplLCBsZW5ndGgpOworICAgICAgICBz
aXplX3QgYnl0ZXNSZWFkID0gZnJlYWQoZGF0YSwgMSwgYnl0ZXNUb1JlYWQsIHN0ZGluKTsKKyAg
ICAgICAgaWYgKGJ5dGVzUmVhZCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICAgICAgcmV0dXJuIENB
SVJPX1NUQVRVU19SRUFEX0VSUk9SOworICAgICAgICAqcGVuZGluZ0ltYWdlU2l6ZSAtPSBzdGF0
aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7CiAgICAgfQorICAgIHJldHVybiBDQUlST19TVEFUVVNf
U1VDQ0VTUzsKK30KKworY2Fpcm9fc3VyZmFjZV90KiByZWFkU3VyZmFjZUZyb21TdGRpbihsb25n
IGltYWdlU2l6ZSkKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZnJv
bV9wbmdfc3RyZWFtKHN0YXRpY19jYXN0PGNhaXJvX3JlYWRfZnVuY190PihjYWlyb1N0ZGluUmVh
ZGVyKSwgJmltYWdlU2l6ZSk7Cit9CiAKLSAgICBnZGtfcGl4YnVmX2xvYWRlcl9jbG9zZShsb2Fk
ZXIsIDApOwotICAgIEdka1BpeGJ1ZiogZGVjb2RlZEltYWdlID0gZ2RrX3BpeGJ1Zl9sb2FkZXJf
Z2V0X3BpeGJ1Zihsb2FkZXIpOwotICAgIGdfb2JqZWN0X3JlZihkZWNvZGVkSW1hZ2UpOwotICAg
IHJldHVybiBkZWNvZGVkSW1hZ2U7Cit1bnNpZ25lZCBmb3JtYXRDaGFubmVscyhjYWlyb19mb3Jt
YXRfdCBmb3JtYXQpCit7CisgICAgc3dpdGNoKGZvcm1hdCkgeworICAgIGNhc2UgQ0FJUk9fRk9S
TUFUX0FSR0IzMjoKKyAgICBjYXNlIENBSVJPX0ZPUk1BVF9SR0IyNDoKKyAgICBjYXNlIENBSVJP
X0ZPUk1BVF9SR0IzMDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBDQUlST19GT1JNQVRf
QTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgQ0FJUk9fRk9STUFUX1JHQjE2XzU2NToK
KyAgICAgICAgcmV0dXJuIDI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fTsKIH0KIAotR2RrUGl4YnVmKiBkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5jZUJ1ZmZlcih1
bnNpZ25lZCBjaGFyKiBidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK2NhaXJvX3N1cmZh
Y2VfdCogZGlmZmVyZW5jZUltYWdlRnJvbURpZmZlcmVuY2VCdWZmZXIodW5zaWduZWQgY2hhciog
YnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgR2RrUGl4YnVmKiBpbWFnZSA9
IGdka19waXhidWZfbmV3KEdES19DT0xPUlNQQUNFX1JHQiwgRkFMU0UsIDgsIHdpZHRoLCBoZWln
aHQpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBpbWFnZTsKKyAgICBjYWlyb19z
dXJmYWNlX3QqIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9fRk9STUFU
X1JHQjI0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0dXMoaW1h
Z2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVz
dHJveShpbWFnZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIGludCByb3dTdHJp
ZGUgPSBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoaW1hZ2UpOwotICAgIHVuc2lnbmVkIGNoYXIq
IGRpZmZQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9waXhlbHMoaW1hZ2UpOworICAgIGludCByb3dT
dHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2UpOworICAgIHVuc2ln
bmVkIGNoYXIqIGRpZmZQaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGltYWdl
KTsKICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKICAgICAgICAgZm9yIChp
bnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewogICAgICAgICAgICAgdW5zaWduZWQgY2hhciog
ZGlmZlBpeGVsID0gZGlmZlBpeGVscyArICh5ICogcm93U3RyaWRlKSArICh4ICogMyk7CiAgICAg
ICAgICAgICBkaWZmUGl4ZWxbMF0gPSBkaWZmUGl4ZWxbMV0gPSBkaWZmUGl4ZWxbMl0gPSAqYnVm
ZmVyKys7CiAgICAgICAgIH0KICAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2RpcnR5KGlt
YWdlKTsKIAogICAgIHJldHVybiBpbWFnZTsKIH0KIAotZmxvYXQgY2FsY3VsYXRlRGlmZmVyZW5j
ZShHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UsIEdka1Bp
eGJ1ZioqIGRpZmZlcmVuY2VJbWFnZSkKK2Zsb2F0IGNhbGN1bGF0ZURpZmZlcmVuY2UoY2Fpcm9f
c3VyZmFjZV90KiBiYXNlbGluZUltYWdlLCBjYWlyb19zdXJmYWNlX3QqIGFjdHVhbEltYWdlLCBj
YWlyb19zdXJmYWNlX3QqKiBkaWZmZXJlbmNlSW1hZ2UpCiB7Ci0gICAgaW50IHdpZHRoID0gZ2Rr
X3BpeGJ1Zl9nZXRfd2lkdGgoYWN0dWFsSW1hZ2UpOwotICAgIGludCBoZWlnaHQgPSBnZGtfcGl4
YnVmX2dldF9oZWlnaHQoYWN0dWFsSW1hZ2UpOwotICAgIGludCBudW1iZXJPZkNoYW5uZWxzID0g
Z2RrX3BpeGJ1Zl9nZXRfbl9jaGFubmVscyhhY3R1YWxJbWFnZSk7Ci0gICAgaWYgKCh3aWR0aCAh
PSBnZGtfcGl4YnVmX2dldF93aWR0aChiYXNlbGluZUltYWdlKSkKLSAgICAgICAgfHwgKGhlaWdo
dCAhPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoYmFzZWxpbmVJbWFnZSkpCi0gICAgICAgIHx8IChu
dW1iZXJPZkNoYW5uZWxzICE9IGdka19waXhidWZfZ2V0X25fY2hhbm5lbHMoYmFzZWxpbmVJbWFn
ZSkpCi0gICAgICAgIHx8IChnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEoYWN0dWFsSW1hZ2UpICE9
IGdka19waXhidWZfZ2V0X2hhc19hbHBoYShiYXNlbGluZUltYWdlKSkpIHsKKyAgICBpbnQgd2lk
dGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChhY3R1YWxJbWFnZSk7CisgICAgaW50
IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChhY3R1YWxJbWFnZSk7Cisg
ICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0
KGFjdHVhbEltYWdlKTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gZm9ybWF0Q2hh
bm5lbHMoZm9ybWF0KTsKKyAgICBpZiAoKHdpZHRoICE9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0
X3dpZHRoKGJhc2VsaW5lSW1hZ2UpKQorICAgICAgICB8fCAoaGVpZ2h0ICE9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X2hlaWdodChiYXNlbGluZUltYWdlKSkKKyAgICAgICAgfHwgKGZvcm1hdCAh
PSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQoYmFzZWxpbmVJbWFnZSkpKSB7CiAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IsIHRlc3QgYW5kIHJlZmVyZW5jZSBpbWFnZSBoYXZl
IGRpZmZlcmVudCBwcm9wZXJ0aWVzLlxuIik7CiAgICAgICAgIHJldHVybiAxMDA7IC8vIENvbXBs
ZXRlbHkgZGlmZmVyZW50LgogICAgIH0KQEAgLTEwMywxMCArMTE1LDEwIEBAIGZsb2F0IGNhbGN1
bGF0ZURpZmZlcmVuY2UoR2RrUGl4YnVmKiBiYXNlbGluZUltYWdlLCBHZGtQaXhidWYqIGFjdHVh
bEltYWdlLCBHZGtQCiAgICAgZmxvYXQgY291bnQgPSAwOwogICAgIGZsb2F0IHN1bSA9IDA7CiAg
ICAgZmxvYXQgbWF4RGlzdGFuY2UgPSAwOwotICAgIGludCBhY3R1YWxSb3dTdHJpZGUgPSBnZGtf
cGl4YnVmX2dldF9yb3dzdHJpZGUoYWN0dWFsSW1hZ2UpOwotICAgIGludCBiYXNlUm93U3RyaWRl
ID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGJhc2VsaW5lSW1hZ2UpOwotICAgIHVuc2lnbmVk
IGNoYXIqIGFjdHVhbFBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhhY3R1YWxJbWFnZSk7
Ci0gICAgdW5zaWduZWQgY2hhciogYmFzZVBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhi
YXNlbGluZUltYWdlKTsKKyAgICBpbnQgYWN0dWFsUm93U3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfc3RyaWRlKGFjdHVhbEltYWdlKTsKKyAgICBpbnQgYmFzZVJvd1N0cmlkZSA9IGNh
aXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShiYXNlbGluZUltYWdlKTsKKyAgICB1bnNpZ25l
ZCBjaGFyKiBhY3R1YWxQaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGFjdHVh
bEltYWdlKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3Vy
ZmFjZV9nZXRfZGF0YShiYXNlbGluZUltYWdlKTsKICAgICB1bnNpZ25lZCBjaGFyKiBjdXJyZW50
RGlmZlBpeGVsID0gZGlmZkJ1ZmZlcjsKICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4
KyspIHsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewpAQCAtMTQ3
LDI4ICsxNTksMzQgQEAgZmxvYXQgY2FsY3VsYXRlRGlmZmVyZW5jZShHZGtQaXhidWYqIGJhc2Vs
aW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UsIEdka1AKICAgICByZXR1cm4gZGlmZmVy
ZW5jZTsKIH0KIAotdm9pZCBwcmludEltYWdlKEdka1BpeGJ1ZiogaW1hZ2UpCitjYWlyb19zdGF0
dXNfdCB3cml0ZVRvR0FycmF5KHZvaWQqIGNsb3N1cmUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBjaGFyKiBidWZmZXI7Ci0gICAgZ3NpemUgYnVm
ZmVyU2l6ZTsKLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBpZiAoIWdka19waXhidWZfc2F2
ZV90b19idWZmZXIoaW1hZ2UsICZidWZmZXIsICZidWZmZXJTaXplLCAicG5nIiwgJmVycm9yLCBO
VUxMKSkgewotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgIEdBcnJheSogYXJyYXkg
PSByZWludGVycHJldF9jYXN0PEdBcnJheSo+KGNsb3N1cmUpOworICAgIGdfYXJyYXlfYXBwZW5k
X3ZhbHMoYXJyYXksIGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUND
RVNTOworfQorCit2b2lkIHByaW50SW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkKK3sKKyAg
ICBHQXJyYXkqIGFycmF5ID0gZ19hcnJheV9uZXcoZmFsc2UsIGZhbHNlLCAxKTsKKyAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCBzdGF0aWNfY2FzdDxjYWly
b193cml0ZV9mdW5jX3Q+KHdyaXRlVG9HQXJyYXkpLCBhcnJheSkgIT0gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1MpIHsKKyAgICAgICAgZ19hcnJheV9mcmVlKGFycmF5LCB0cnVlKTsKICAgICAgICAgcmV0
dXJuOyAvLyBEb24ndCBiYWlsIG91dCwgYXMgd2UgY2FuIHN0aWxsIHVzZSB0aGUgcGVyY2VudGFn
ZSBvdXRwdXQuCiAgICAgfQogCi0gICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJSJHX0dTSVpF
X0ZPUk1BVCJcbiIsIGJ1ZmZlclNpemUpOwotICAgIGZ3cml0ZShidWZmZXIsIDEsIGJ1ZmZlclNp
emUsIHN0ZG91dCk7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWRcbiIsIGFycmF5LT5s
ZW4pOworICAgIGZ3cml0ZShhcnJheS0+ZGF0YSwgMSwgYXJyYXktPmxlbiwgc3Rkb3V0KTsKKyAg
ICBnX2FycmF5X2ZyZWUoYXJyYXksIHRydWUpOwogfQogCi12b2lkIHByaW50SW1hZ2VEaWZmZXJl
bmNlcyhHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UpCit2
b2lkIHByaW50SW1hZ2VEaWZmZXJlbmNlcyhjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5lSW1hZ2Us
IGNhaXJvX3N1cmZhY2VfdCogYWN0dWFsSW1hZ2UpCiB7Ci0gICAgR2RrUGl4YnVmKiBkaWZmZXJl
bmNlSW1hZ2UgPSAwOworICAgIGNhaXJvX3N1cmZhY2VfdCogZGlmZmVyZW5jZUltYWdlID0gMDsK
ICAgICBmbG9hdCBkaWZmZXJlbmNlID0gY2FsY3VsYXRlRGlmZmVyZW5jZShiYXNlbGluZUltYWdl
LCBhY3R1YWxJbWFnZSwgJmRpZmZlcmVuY2VJbWFnZSk7CiAgICAgaWYgKGRpZmZlcmVuY2UgPiAw
LjBmKSB7CiAgICAgICAgIGlmIChkaWZmZXJlbmNlSW1hZ2UpIHsKICAgICAgICAgICAgIHByaW50
SW1hZ2UoZGlmZmVyZW5jZUltYWdlKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGRpZmZl
cmVuY2VJbWFnZSk7CisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZGlmZmVyZW5j
ZUltYWdlKTsKICAgICAgICAgfQogICAgICAgICBwcmludGYoImRpZmY6ICUwMS4yZiUlIGZhaWxl
ZFxuIiwgZGlmZmVyZW5jZSk7CiAgICAgfSBlbHNlIHsKQEAgLTE3OCw4ICsxOTYsNiBAQCB2b2lk
IHByaW50SW1hZ2VEaWZmZXJlbmNlcyhHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1
ZiogYWN0dWFsSW1hZ2UpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCiB7Ci0g
ICAgZ190eXBlX2luaXQoKTsKLQogICAgIEdFcnJvciogZXJyb3IgPSAwOwogICAgIEdPcHRpb25D
b250ZXh0KiBjb250ZXh0ID0gZ19vcHRpb25fY29udGV4dF9uZXcoIi0gY29tcGFyZSB0d28gaW1h
Z2UgZmlsZXMsIHByaW50aW5nIHRoZWlyIHBlcmNlbnRhZ2UgZGlmZmVyZW5jZSBhbmQgdGhlIGRp
ZmZlcmVuY2UgaW1hZ2UgdG8gc3Rkb3V0Iik7CiAgICAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFp
bl9lbnRyaWVzKGNvbnRleHQsIGNvbW1hbmRMaW5lT3B0aW9uRW50cmllcywgMCk7CkBAIC0xODks
OCArMjA1LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAgICAgcmV0
dXJuIDE7CiAgICAgfQogCi0gICAgR2RrUGl4YnVmKiBhY3R1YWxJbWFnZSA9IDA7Ci0gICAgR2Rr
UGl4YnVmKiBiYXNlbGluZUltYWdlID0gMDsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGFjdHVhbElt
YWdlID0gMDsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5lSW1hZ2UgPSAwOwogICAgIGNo
YXIgYnVmZmVyWzIwNDhdOwogICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihidWZmZXIp
LCBzdGRpbikpIHsKICAgICAgICAgLy8gQ29udmVydCB0aGUgZmlyc3QgbmV3bGluZSBpbnRvIGEg
TlVMIGNoYXJhY3RlciBzbyB0aGF0IHN0cnRvayBkb2Vzbid0IHByb2R1Y2UgaXQuCkBAIC0yMDks
MTIgKzIyNSwxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAgICAgICAg
ICAgbG9uZyBpbWFnZVNpemUgPSBzdHJ0b2wodG9rZW5zWzFdLCAwLCAxMCk7CiAgICAgICAgICAg
ICBnX3N0cmZyZWV2KHRva2Vucyk7CiAgICAgICAgICAgICBpZiAoaW1hZ2VTaXplID4gMCAmJiAh
YWN0dWFsSW1hZ2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoIShhY3R1YWxJbWFnZSA9IHJlYWRQ
aXhidWZGcm9tU3RkaW4oaW1hZ2VTaXplKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoIShhY3R1
YWxJbWFnZSA9IHJlYWRTdXJmYWNlRnJvbVN0ZGluKGltYWdlU2l6ZSkpKSB7CiAgICAgICAgICAg
ICAgICAgICAgIHByaW50ZigiRXJyb3IsIGNvdWxkIG5vdCByZWFkIGFjdHVhbCBpbWFnZS5cbiIp
OwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWJhc2VsaW5lSW1hZ2UpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIShiYXNlbGluZUltYWdlID0gcmVhZFBpeGJ1ZkZyb21TdGRpbihp
bWFnZVNpemUpKSkgeworICAgICAgICAgICAgICAgIGlmICghKGJhc2VsaW5lSW1hZ2UgPSByZWFk
U3VyZmFjZUZyb21TdGRpbihpbWFnZVNpemUpKSkgewogICAgICAgICAgICAgICAgICAgICBwcmlu
dGYoIkVycm9yLCBjb3VsZCBub3QgcmVhZCBiYXNlbGluZSBpbWFnZS5cbiIpOwogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMjYsOCArMjQyLDgg
QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIAogICAgICAgICBpZiAoYWN0dWFs
SW1hZ2UgJiYgYmFzZWxpbmVJbWFnZSkgewogICAgICAgICAgICAgcHJpbnRJbWFnZURpZmZlcmVu
Y2VzKGJhc2VsaW5lSW1hZ2UsIGFjdHVhbEltYWdlKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3Vu
cmVmKGFjdHVhbEltYWdlKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGJhc2VsaW5lSW1h
Z2UpOworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGFjdHVhbEltYWdlKTsKKyAg
ICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShiYXNlbGluZUltYWdlKTsKICAgICAgICAg
ICAgIGFjdHVhbEltYWdlID0gMDsKICAgICAgICAgICAgIGJhc2VsaW5lSW1hZ2UgPSAwOwogICAg
ICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>167082</attachid>
            <date>2012-10-04 05:42:33 -0700</date>
            <delta_ts>2013-01-23 07:34:13 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85299-20121004144143.patch</filename>
            <type>text/plain</type>
            <size>10558</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTMwMTcyCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYTgwM2Q2NWZjZjdlODFmZGMzNDJiMjgyZDU3YmM2MWUw
YzJkMjZjNC4uMjJlYWIyZWNmYTgyZjQ0NjcwMTMzYjg5YWY2ODFkMTdiMGQwNTgwNyAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIy
IEBACisyMDEyLTEwLTAzICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgR0RLIGRlcGVuZGVuY3kgZnJvbSBJbWFnZURpZmYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1Mjk5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBn
ZGsgZGVwZW5kZW5jeSBvbiBJbWFnZURpZmYgZm9yIGd0aywgdXNpbmcgb25seSBjYWlyby4KKwor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2d0ay9JbWFnZURpZmYuY3BwOgorICAgICAgICAocmVh
ZFN1cmZhY2VGcm9tU3RkaW4pOgorICAgICAgICAoZm9ybWF0Q2hhbm5lbHMpOgorICAgICAgICAo
ZGlmZmVyZW5jZUltYWdlRnJvbURpZmZlcmVuY2VCdWZmZXIpOgorICAgICAgICAoY2FsY3VsYXRl
RGlmZmVyZW5jZSk6CisgICAgICAgICh3cml0ZVRvR0FycmF5KToKKyAgICAgICAgKHByaW50SW1h
Z2UpOgorICAgICAgICAocHJpbnRJbWFnZURpZmZlcmVuY2VzKToKKyAgICAgICAgKG1haW4pOgor
CiAyMDEyLTEwLTAyICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAg
ICAgICAgW1dLMl0gUkVHUkVTU0lPTihyMTI4NjIzKTogSXQgbWFkZSBsYXlvdXQgdGVzdHMgZXh0
cmVtZWx5IHNsb3cKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL2d0ay9JbWFnZURp
ZmYuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0ltYWdlRGlmZi5jcHAKaW5kZXggZTQw
YzMzYWNmOGZlZDQ3NzhlOTBmZWM5YzZjOWZiMWZmMjQwZGEyZC4uZmMwZGQyZWYwMWNmZGQ5YjVj
YWEwODdjN2M4YmU2YjIzM2E0Y2YwZCAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUv
Z3RrL0ltYWdlRGlmZi5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvZ3RrL0ltYWdlRGlm
Zi5jcHAKQEAgLTI4LDEwICsyOCwxMSBAQAogICovCiAKICNpbmNsdWRlIDxhbGdvcml0aG0+Cisj
aW5jbHVkZSA8Y2Fpcm8vY2Fpcm8uaD4KICNpbmNsdWRlIDxjbWF0aD4KICNpbmNsdWRlIDxjc3Rk
aW8+CiAjaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+CisjaW5jbHVkZSA8
Z2xpYi5oPgogCiB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCkBAIC00Miw1OSArNDMsNzIgQEAgc3Rh
dGljIEdPcHRpb25FbnRyeSBjb21tYW5kTGluZU9wdGlvbkVudHJpZXNbXSA9CiAgICAgeyAwLCAw
LCAwLCBHX09QVElPTl9BUkdfTk9ORSwgMCwgMCwgMCB9LAogfTsKIAotR2RrUGl4YnVmKiByZWFk
UGl4YnVmRnJvbVN0ZGluKGxvbmcgaW1hZ2VTaXplKQorY2Fpcm9fc3RhdHVzX3QgY2Fpcm9TdGRp
blJlYWRlcih2b2lkICpjbG9zdXJlLCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5n
dGgpCiB7Ci0gICAgdW5zaWduZWQgY2hhciBpbWFnZUJ1ZmZlclsyMDQ4XTsKLSAgICBHZGtQaXhi
dWZMb2FkZXIqIGxvYWRlciA9IGdka19waXhidWZfbG9hZGVyX25ld193aXRoX3R5cGUoInBuZyIs
IDApOwotICAgIEdFcnJvciogZXJyb3IgPSAwOwotCi0gICAgd2hpbGUgKGltYWdlU2l6ZSA+IDAp
IHsKLSAgICAgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWluPGludD4oaW1hZ2VTaXplLCAyMDQ4
KTsKLSAgICAgICAgc2l6ZV90IGJ5dGVzUmVhZCA9IGZyZWFkKGltYWdlQnVmZmVyLCAxLCBieXRl
c1RvUmVhZCwgc3RkaW4pOwotCi0gICAgICAgIGlmICghZ2RrX3BpeGJ1Zl9sb2FkZXJfd3JpdGUo
bG9hZGVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KGltYWdlQnVmZmVyKSwgYnl0
ZXNSZWFkLCAmZXJyb3IpKSB7Ci0gICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAg
ICAgICAgICAgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UobG9hZGVyLCAwKTsKLSAgICAgICAgICAg
IGdfb2JqZWN0X3VucmVmKGxvYWRlcik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIGltYWdlU2l6ZSAtPSBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7Cisg
ICAgaW50KiBwZW5kaW5nSW1hZ2VTaXplID0gcmVpbnRlcnByZXRfY2FzdDxpbnQqPihjbG9zdXJl
KTsKKyAgICBpZiAoKnBlbmRpbmdJbWFnZVNpemUgPiAwKSB7CisgICAgICAgIHNpemVfdCBieXRl
c1RvUmVhZCA9IG1pbjxpbnQ+KCpwZW5kaW5nSW1hZ2VTaXplLCBsZW5ndGgpOworICAgICAgICBz
aXplX3QgYnl0ZXNSZWFkID0gZnJlYWQoZGF0YSwgMSwgYnl0ZXNUb1JlYWQsIHN0ZGluKTsKKyAg
ICAgICAgaWYgKGJ5dGVzUmVhZCA8IGJ5dGVzVG9SZWFkKQorICAgICAgICAgICAgcmV0dXJuIENB
SVJPX1NUQVRVU19SRUFEX0VSUk9SOworICAgICAgICAqcGVuZGluZ0ltYWdlU2l6ZSAtPSBzdGF0
aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7CiAgICAgfQorICAgIHJldHVybiBDQUlST19TVEFUVVNf
U1VDQ0VTUzsKK30KKworY2Fpcm9fc3VyZmFjZV90KiByZWFkU3VyZmFjZUZyb21TdGRpbihsb25n
IGltYWdlU2l6ZSkKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGVfZnJv
bV9wbmdfc3RyZWFtKHN0YXRpY19jYXN0PGNhaXJvX3JlYWRfZnVuY190PihjYWlyb1N0ZGluUmVh
ZGVyKSwgJmltYWdlU2l6ZSk7Cit9CiAKLSAgICBnZGtfcGl4YnVmX2xvYWRlcl9jbG9zZShsb2Fk
ZXIsIDApOwotICAgIEdka1BpeGJ1ZiogZGVjb2RlZEltYWdlID0gZ2RrX3BpeGJ1Zl9sb2FkZXJf
Z2V0X3BpeGJ1Zihsb2FkZXIpOwotICAgIGdfb2JqZWN0X3JlZihkZWNvZGVkSW1hZ2UpOwotICAg
IHJldHVybiBkZWNvZGVkSW1hZ2U7Cit1bnNpZ25lZCBmb3JtYXRDaGFubmVscyhjYWlyb19mb3Jt
YXRfdCBmb3JtYXQpCit7CisgICAgc3dpdGNoKGZvcm1hdCkgeworICAgIGNhc2UgQ0FJUk9fRk9S
TUFUX0FSR0IzMjoKKyAgICBjYXNlIENBSVJPX0ZPUk1BVF9SR0IyNDoKKyNpZiAoQ0FJUk9fVkVS
U0lPTiA+PSBDQUlST19WRVJTSU9OX0VOQ09ERSgxLCAxMiwgMCkpCisgICAgY2FzZSBDQUlST19G
T1JNQVRfUkdCMzA6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBDQUlST19G
T1JNQVRfQTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgQ0FJUk9fRk9STUFUX1JHQjE2
XzU2NToKKyAgICAgICAgcmV0dXJuIDI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgfTsKIH0KIAotR2RrUGl4YnVmKiBkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5jZUJ1
ZmZlcih1bnNpZ25lZCBjaGFyKiBidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkKK2NhaXJv
X3N1cmZhY2VfdCogZGlmZmVyZW5jZUltYWdlRnJvbURpZmZlcmVuY2VCdWZmZXIodW5zaWduZWQg
Y2hhciogYnVmZmVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgR2RrUGl4YnVmKiBp
bWFnZSA9IGdka19waXhidWZfbmV3KEdES19DT0xPUlNQQUNFX1JHQiwgRkFMU0UsIDgsIHdpZHRo
LCBoZWlnaHQpOwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBpbWFnZTsKKyAgICBj
YWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9jcmVhdGUoQ0FJUk9f
Rk9STUFUX1JHQjI0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoY2Fpcm9fc3VyZmFjZV9zdGF0
dXMoaW1hZ2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAgIGNhaXJvX3N1cmZh
Y2VfZGVzdHJveShpbWFnZSk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KIAotICAgIGludCBy
b3dTdHJpZGUgPSBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoaW1hZ2UpOwotICAgIHVuc2lnbmVk
IGNoYXIqIGRpZmZQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9waXhlbHMoaW1hZ2UpOworICAgIGlu
dCByb3dTdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoaW1hZ2UpOworICAg
IHVuc2lnbmVkIGNoYXIqIGRpZmZQaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KGltYWdlKTsKICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKICAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewogICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciogZGlmZlBpeGVsID0gZGlmZlBpeGVscyArICh5ICogcm93U3RyaWRlKSArICh4ICogMyk7
CiAgICAgICAgICAgICBkaWZmUGl4ZWxbMF0gPSBkaWZmUGl4ZWxbMV0gPSBkaWZmUGl4ZWxbMl0g
PSAqYnVmZmVyKys7CiAgICAgICAgIH0KICAgICB9CisgICAgY2Fpcm9fc3VyZmFjZV9tYXJrX2Rp
cnR5KGltYWdlKTsKIAogICAgIHJldHVybiBpbWFnZTsKIH0KIAotZmxvYXQgY2FsY3VsYXRlRGlm
ZmVyZW5jZShHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2Us
IEdka1BpeGJ1ZioqIGRpZmZlcmVuY2VJbWFnZSkKK2Zsb2F0IGNhbGN1bGF0ZURpZmZlcmVuY2Uo
Y2Fpcm9fc3VyZmFjZV90KiBiYXNlbGluZUltYWdlLCBjYWlyb19zdXJmYWNlX3QqIGFjdHVhbElt
YWdlLCBjYWlyb19zdXJmYWNlX3QqKiBkaWZmZXJlbmNlSW1hZ2UpCiB7Ci0gICAgaW50IHdpZHRo
ID0gZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoYWN0dWFsSW1hZ2UpOwotICAgIGludCBoZWlnaHQgPSBn
ZGtfcGl4YnVmX2dldF9oZWlnaHQoYWN0dWFsSW1hZ2UpOwotICAgIGludCBudW1iZXJPZkNoYW5u
ZWxzID0gZ2RrX3BpeGJ1Zl9nZXRfbl9jaGFubmVscyhhY3R1YWxJbWFnZSk7Ci0gICAgaWYgKCh3
aWR0aCAhPSBnZGtfcGl4YnVmX2dldF93aWR0aChiYXNlbGluZUltYWdlKSkKLSAgICAgICAgfHwg
KGhlaWdodCAhPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoYmFzZWxpbmVJbWFnZSkpCi0gICAgICAg
IHx8IChudW1iZXJPZkNoYW5uZWxzICE9IGdka19waXhidWZfZ2V0X25fY2hhbm5lbHMoYmFzZWxp
bmVJbWFnZSkpCi0gICAgICAgIHx8IChnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEoYWN0dWFsSW1h
Z2UpICE9IGdka19waXhidWZfZ2V0X2hhc19hbHBoYShiYXNlbGluZUltYWdlKSkpIHsKKyAgICBp
bnQgd2lkdGggPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChhY3R1YWxJbWFnZSk7Cisg
ICAgaW50IGhlaWdodCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChhY3R1YWxJbWFn
ZSk7CisgICAgY2Fpcm9fZm9ybWF0X3QgZm9ybWF0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
Zm9ybWF0KGFjdHVhbEltYWdlKTsKKyAgICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gZm9y
bWF0Q2hhbm5lbHMoZm9ybWF0KTsKKyAgICBpZiAoKHdpZHRoICE9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3dpZHRoKGJhc2VsaW5lSW1hZ2UpKQorICAgICAgICB8fCAoaGVpZ2h0ICE9IGNhaXJv
X2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChiYXNlbGluZUltYWdlKSkKKyAgICAgICAgfHwgKGZv
cm1hdCAhPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQoYmFzZWxpbmVJbWFnZSkpKSB7
CiAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IsIHRlc3QgYW5kIHJlZmVyZW5jZSBpbWFn
ZSBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzLlxuIik7CiAgICAgICAgIHJldHVybiAxMDA7IC8v
IENvbXBsZXRlbHkgZGlmZmVyZW50LgogICAgIH0KQEAgLTEwMywxMCArMTE3LDEwIEBAIGZsb2F0
IGNhbGN1bGF0ZURpZmZlcmVuY2UoR2RrUGl4YnVmKiBiYXNlbGluZUltYWdlLCBHZGtQaXhidWYq
IGFjdHVhbEltYWdlLCBHZGtQCiAgICAgZmxvYXQgY291bnQgPSAwOwogICAgIGZsb2F0IHN1bSA9
IDA7CiAgICAgZmxvYXQgbWF4RGlzdGFuY2UgPSAwOwotICAgIGludCBhY3R1YWxSb3dTdHJpZGUg
PSBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoYWN0dWFsSW1hZ2UpOwotICAgIGludCBiYXNlUm93
U3RyaWRlID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGJhc2VsaW5lSW1hZ2UpOwotICAgIHVu
c2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhhY3R1YWxJ
bWFnZSk7Ci0gICAgdW5zaWduZWQgY2hhciogYmFzZVBpeGVscyA9IGdka19waXhidWZfZ2V0X3Bp
eGVscyhiYXNlbGluZUltYWdlKTsKKyAgICBpbnQgYWN0dWFsUm93U3RyaWRlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGFjdHVhbEltYWdlKTsKKyAgICBpbnQgYmFzZVJvd1N0cmlk
ZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShiYXNlbGluZUltYWdlKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRh
KGFjdHVhbEltYWdlKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWxzID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfZGF0YShiYXNlbGluZUltYWdlKTsKICAgICB1bnNpZ25lZCBjaGFyKiBj
dXJyZW50RGlmZlBpeGVsID0gZGlmZkJ1ZmZlcjsKICAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdp
ZHRoOyB4KyspIHsKICAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewpA
QCAtMTQ3LDI4ICsxNjEsMzQgQEAgZmxvYXQgY2FsY3VsYXRlRGlmZmVyZW5jZShHZGtQaXhidWYq
IGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UsIEdka1AKICAgICByZXR1cm4g
ZGlmZmVyZW5jZTsKIH0KIAotdm9pZCBwcmludEltYWdlKEdka1BpeGJ1ZiogaW1hZ2UpCitjYWly
b19zdGF0dXNfdCB3cml0ZVRvR0FycmF5KHZvaWQqIGNsb3N1cmUsIGNvbnN0IHVuc2lnbmVkIGNo
YXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKIHsKLSAgICBjaGFyKiBidWZmZXI7Ci0gICAgZ3Np
emUgYnVmZmVyU2l6ZTsKLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBpZiAoIWdka19waXhi
dWZfc2F2ZV90b19idWZmZXIoaW1hZ2UsICZidWZmZXIsICZidWZmZXJTaXplLCAicG5nIiwgJmVy
cm9yLCBOVUxMKSkgewotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOworICAgIEdBcnJheSog
YXJyYXkgPSByZWludGVycHJldF9jYXN0PEdBcnJheSo+KGNsb3N1cmUpOworICAgIGdfYXJyYXlf
YXBwZW5kX3ZhbHMoYXJyYXksIGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJuIENBSVJPX1NUQVRV
U19TVUNDRVNTOworfQorCit2b2lkIHByaW50SW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSkK
K3sKKyAgICBHQXJyYXkqIGFycmF5ID0gZ19hcnJheV9uZXcoZmFsc2UsIGZhbHNlLCAxKTsKKyAg
ICBpZiAoY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCBzdGF0aWNfY2Fz
dDxjYWlyb193cml0ZV9mdW5jX3Q+KHdyaXRlVG9HQXJyYXkpLCBhcnJheSkgIT0gQ0FJUk9fU1RB
VFVTX1NVQ0NFU1MpIHsKKyAgICAgICAgZ19hcnJheV9mcmVlKGFycmF5LCB0cnVlKTsKICAgICAg
ICAgcmV0dXJuOyAvLyBEb24ndCBiYWlsIG91dCwgYXMgd2UgY2FuIHN0aWxsIHVzZSB0aGUgcGVy
Y2VudGFnZSBvdXRwdXQuCiAgICAgfQogCi0gICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJSJH
X0dTSVpFX0ZPUk1BVCJcbiIsIGJ1ZmZlclNpemUpOwotICAgIGZ3cml0ZShidWZmZXIsIDEsIGJ1
ZmZlclNpemUsIHN0ZG91dCk7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWRcbiIsIGFy
cmF5LT5sZW4pOworICAgIGZ3cml0ZShhcnJheS0+ZGF0YSwgMSwgYXJyYXktPmxlbiwgc3Rkb3V0
KTsKKyAgICBnX2FycmF5X2ZyZWUoYXJyYXksIHRydWUpOwogfQogCi12b2lkIHByaW50SW1hZ2VE
aWZmZXJlbmNlcyhHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1h
Z2UpCit2b2lkIHByaW50SW1hZ2VEaWZmZXJlbmNlcyhjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5l
SW1hZ2UsIGNhaXJvX3N1cmZhY2VfdCogYWN0dWFsSW1hZ2UpCiB7Ci0gICAgR2RrUGl4YnVmKiBk
aWZmZXJlbmNlSW1hZ2UgPSAwOworICAgIGNhaXJvX3N1cmZhY2VfdCogZGlmZmVyZW5jZUltYWdl
ID0gMDsKICAgICBmbG9hdCBkaWZmZXJlbmNlID0gY2FsY3VsYXRlRGlmZmVyZW5jZShiYXNlbGlu
ZUltYWdlLCBhY3R1YWxJbWFnZSwgJmRpZmZlcmVuY2VJbWFnZSk7CiAgICAgaWYgKGRpZmZlcmVu
Y2UgPiAwLjBmKSB7CiAgICAgICAgIGlmIChkaWZmZXJlbmNlSW1hZ2UpIHsKICAgICAgICAgICAg
IHByaW50SW1hZ2UoZGlmZmVyZW5jZUltYWdlKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVm
KGRpZmZlcmVuY2VJbWFnZSk7CisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koZGlm
ZmVyZW5jZUltYWdlKTsKICAgICAgICAgfQogICAgICAgICBwcmludGYoImRpZmY6ICUwMS4yZiUl
IGZhaWxlZFxuIiwgZGlmZmVyZW5jZSk7CiAgICAgfSBlbHNlIHsKQEAgLTE3OCw4ICsxOTgsNiBA
QCB2b2lkIHByaW50SW1hZ2VEaWZmZXJlbmNlcyhHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdk
a1BpeGJ1ZiogYWN0dWFsSW1hZ2UpCiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10p
CiB7Ci0gICAgZ190eXBlX2luaXQoKTsKLQogICAgIEdFcnJvciogZXJyb3IgPSAwOwogICAgIEdP
cHRpb25Db250ZXh0KiBjb250ZXh0ID0gZ19vcHRpb25fY29udGV4dF9uZXcoIi0gY29tcGFyZSB0
d28gaW1hZ2UgZmlsZXMsIHByaW50aW5nIHRoZWlyIHBlcmNlbnRhZ2UgZGlmZmVyZW5jZSBhbmQg
dGhlIGRpZmZlcmVuY2UgaW1hZ2UgdG8gc3Rkb3V0Iik7CiAgICAgZ19vcHRpb25fY29udGV4dF9h
ZGRfbWFpbl9lbnRyaWVzKGNvbnRleHQsIGNvbW1hbmRMaW5lT3B0aW9uRW50cmllcywgMCk7CkBA
IC0xODksOCArMjA3LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKICAgICAg
ICAgcmV0dXJuIDE7CiAgICAgfQogCi0gICAgR2RrUGl4YnVmKiBhY3R1YWxJbWFnZSA9IDA7Ci0g
ICAgR2RrUGl4YnVmKiBiYXNlbGluZUltYWdlID0gMDsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGFj
dHVhbEltYWdlID0gMDsKKyAgICBjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5lSW1hZ2UgPSAwOwog
ICAgIGNoYXIgYnVmZmVyWzIwNDhdOwogICAgIHdoaWxlIChmZ2V0cyhidWZmZXIsIHNpemVvZihi
dWZmZXIpLCBzdGRpbikpIHsKICAgICAgICAgLy8gQ29udmVydCB0aGUgZmlyc3QgbmV3bGluZSBp
bnRvIGEgTlVMIGNoYXJhY3RlciBzbyB0aGF0IHN0cnRvayBkb2Vzbid0IHByb2R1Y2UgaXQuCkBA
IC0yMDksMTIgKzIyNywxMiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQogICAg
ICAgICAgICAgbG9uZyBpbWFnZVNpemUgPSBzdHJ0b2wodG9rZW5zWzFdLCAwLCAxMCk7CiAgICAg
ICAgICAgICBnX3N0cmZyZWV2KHRva2Vucyk7CiAgICAgICAgICAgICBpZiAoaW1hZ2VTaXplID4g
MCAmJiAhYWN0dWFsSW1hZ2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoIShhY3R1YWxJbWFnZSA9
IHJlYWRQaXhidWZGcm9tU3RkaW4oaW1hZ2VTaXplKSkpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IShhY3R1YWxJbWFnZSA9IHJlYWRTdXJmYWNlRnJvbVN0ZGluKGltYWdlU2l6ZSkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IsIGNvdWxkIG5vdCByZWFkIGFjdHVhbCBpbWFn
ZS5cbiIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWJhc2VsaW5lSW1hZ2Up
IHsKLSAgICAgICAgICAgICAgICBpZiAoIShiYXNlbGluZUltYWdlID0gcmVhZFBpeGJ1ZkZyb21T
dGRpbihpbWFnZVNpemUpKSkgeworICAgICAgICAgICAgICAgIGlmICghKGJhc2VsaW5lSW1hZ2Ug
PSByZWFkU3VyZmFjZUZyb21TdGRpbihpbWFnZVNpemUpKSkgewogICAgICAgICAgICAgICAgICAg
ICBwcmludGYoIkVycm9yLCBjb3VsZCBub3QgcmVhZCBiYXNlbGluZSBpbWFnZS5cbiIpOwogICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICAgICAgICAgICB9CkBAIC0yMjYsOCAr
MjQ0LDggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKIAogICAgICAgICBpZiAo
YWN0dWFsSW1hZ2UgJiYgYmFzZWxpbmVJbWFnZSkgewogICAgICAgICAgICAgcHJpbnRJbWFnZURp
ZmZlcmVuY2VzKGJhc2VsaW5lSW1hZ2UsIGFjdHVhbEltYWdlKTsKLSAgICAgICAgICAgIGdfb2Jq
ZWN0X3VucmVmKGFjdHVhbEltYWdlKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGJhc2Vs
aW5lSW1hZ2UpOworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGFjdHVhbEltYWdl
KTsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShiYXNlbGluZUltYWdlKTsKICAg
ICAgICAgICAgIGFjdHVhbEltYWdlID0gMDsKICAgICAgICAgICAgIGJhc2VsaW5lSW1hZ2UgPSAw
OwogICAgICAgICB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>184229</attachid>
            <date>2013-01-23 07:34:18 -0800</date>
            <delta_ts>2014-12-06 10:46:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85299-20130123163112.patch</filename>
            <type>text/plain</type>
            <size>22334</size>
            <attacher name="José Dapena Paz">jdapena</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQwNDM2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMjJmMjI1ODYyMzBmOTQ0MWMyMzU3MmJmZGMwYzg5MGU1
MzI5YzllZS4uMTM4MTVjNzM1MjQ1ZjA3ODg4NDQyZGYwYjNhYTA3OThhYjVhY2NmMSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2
IEBACisyMDEzLTAxLTEzICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgR0RLIGRlcGVuZGVuY3kgZnJvbSBJbWFnZURpZmYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1Mjk5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBn
ZGsgZGVwZW5kZW5jeSBvbiBJbWFnZURpZmYgZm9yIGd0aywgdXNpbmcgb25seSBjYWlyby4KKyAg
ICAgICAgQWxzbyByZW5hbWVkIHRoZSBmb2xkZXIgdG8gY2Fpcm8gYXMgaXQgZG9lcyBub3QgZ2xp
Yi9ndGsKKyAgICAgICAgc3BlY2lmaWMgYW55bW9yZS4KKworICAgICAgICAqIEdOVW1ha2VmaWxl
LmFtOgorICAgICAgICAqIEltYWdlRGlmZi9jYWlyby9JbWFnZURpZmYuY3BwOiBSZW5hbWVkIGZy
b20gVG9vbHMvSW1hZ2VEaWZmL2d0ay9JbWFnZURpZmYuY3BwLgorICAgICAgICAoY2Fpcm9TdGRp
blJlYWRlcik6CisgICAgICAgIChyZWFkU3VyZmFjZUZyb21TdGRpbik6CisgICAgICAgIChmb3Jt
YXRDaGFubmVscyk6CisgICAgICAgIChkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5jZUJ1ZmZl
cik6CisgICAgICAgIChjYWxjdWxhdGVEaWZmZXJlbmNlKToKKyAgICAgICAgKHdyaXRlVG9QaXhl
bERhdGEpOgorICAgICAgICAocHJpbnRJbWFnZSk6CisgICAgICAgIChwcmludEltYWdlRGlmZmVy
ZW5jZXMpOgorICAgICAgICAobWFpbik6CisKIDIwMTMtMDEtMjIgIEFsZXhleSBQcm9za3VyeWFr
b3YgIDxhcEBhcHBsZS5jb20+CiAKICAgICAgICAgT25lIGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBj
b21taXQtcXVldWUgdG8gbWFrZSBvbmVzZWxmIGEgY29tbWl0dGVyLgpkaWZmIC0tZ2l0IGEvVG9v
bHMvR05VbWFrZWZpbGUuYW0gYi9Ub29scy9HTlVtYWtlZmlsZS5hbQppbmRleCBiOTk2MTA4NDdl
MTRiNjE2MTc3YTMyYzJmMzI4ZWE1MjViZmY5ZDQ1Li41NTFlZDI5ODEzYWRlYTY2N2Y5ZjE4Zjk1
M2M2NzQ2OTIwN2I1ZDU2IDEwMDY0NAotLS0gYS9Ub29scy9HTlVtYWtlZmlsZS5hbQorKysgYi9U
b29scy9HTlVtYWtlZmlsZS5hbQpAQCAtMTk4LDEwICsxOTgsMTEgQEAgUHJvZ3JhbXNfRHVtcFJl
bmRlclRyZWVfTERGTEFHUyA9IFwKIAktbm8taW5zdGFsbAogCiAjIEltYWdlRGlmZgotUHJvZ3Jh
bXNfSW1hZ2VEaWZmX0NQUEZMQUdTID0gJChnbG9iYWxfY3BwZmxhZ3MpCitQcm9ncmFtc19JbWFn
ZURpZmZfQ1BQRkxBR1MgPSAkKGdsb2JhbF9jcHBmbGFncykgXAorCS1JJChzcmNkaXIpL1NvdXJj
ZS9XVEYKIAogUHJvZ3JhbXNfSW1hZ2VEaWZmX1NPVVJDRVMgPSBcCi0gICBUb29scy9JbWFnZURp
ZmYvZ3RrL0ltYWdlRGlmZi5jcHAKKyAgIFRvb2xzL0ltYWdlRGlmZi9jYWlyby9JbWFnZURpZmYu
Y3BwCiAKIFByb2dyYW1zX0ltYWdlRGlmZl9DWFhGTEFHUyA9IFwKICAgICQoZ2xvYmFsX2N4eGZs
YWdzKSBcCkBAIC0yMDksMTMgKzIxMCwxNSBAQCBQcm9ncmFtc19JbWFnZURpZmZfQ1hYRkxBR1Mg
PSBcCiAgICAkKFByb2dyYW1zX0ltYWdlRGlmZl9DRkxBR1MpCiAKIFByb2dyYW1zX0ltYWdlRGlm
Zl9DRkxBR1MgPSBcCisgICAtRFdURl9VU0VfRVhQT1JUX01BQ1JPUz0xIFwKICAgIC1mbm8tc3Ry
aWN0LWFsaWFzaW5nIFwKICAgICQoZ2xvYmFsX2NmbGFncykgXAogICAgJChHTE9CQUxERVBTX0NG
TEFHUykgXAotICAgJChHVEtfQ0ZMQUdTKQorICAgJChDQUlST19DRkxBR1MpCiAKIFByb2dyYW1z
X0ltYWdlRGlmZl9MREFERCA9IFwKLSAgICQoR1RLX0xJQlMpCisgICBsaWJXVEYubGEgXAorICAg
JChDQUlST19MSUJTKQogCiBQcm9ncmFtc19JbWFnZURpZmZfTERGTEFHUyA9IFwKICAgIC1uby1m
YXN0LWluc3RhbGwgXApkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VEaWZmL2NhaXJvL0ltYWdlRGlm
Zi5jcHAgYi9Ub29scy9JbWFnZURpZmYvY2Fpcm8vSW1hZ2VEaWZmLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
MGRmOWYyMDgwNzdiYTI3YzRhMzQ5NGNkMzkwMjllYzNkZDk3YjE1Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvSW1hZ2VEaWZmL2NhaXJvL0ltYWdlRGlmZi5jcHAKQEAgLTAsMCArMSwyNTcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFp
bC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVU
T1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFS
RQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8YWxnb3Jp
dGhtPgorI2luY2x1ZGUgPGNhaXJvL2NhaXJvLmg+CisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVk
ZSA8Y3N0ZGlvPgorI2luY2x1ZGUgPGNzdHJpbmc+CisjaW5jbHVkZSA8d3RmL0V4cG9ydE1hY3Jv
cy5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4K
KworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxmY250bC5oPgorI2VuZGlmCisKK3VzaW5n
IG5hbWVzcGFjZSBzdGQ7CisKK2NhaXJvX3N0YXR1c190IGNhaXJvU3RkaW5SZWFkZXIodm9pZCog
Y2xvc3VyZSwgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIGlu
dCogcGVuZGluZ0ltYWdlU2l6ZSA9IHN0YXRpY19jYXN0PGludCo+KGNsb3N1cmUpOworICAgIGlm
ICgqcGVuZGluZ0ltYWdlU2l6ZSA+PSAwKQorICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NV
Q0NFU1M7CisKKyAgICBzaXplX3QgYnl0ZXNUb1JlYWQgPSBtaW48c2l6ZV90PigqcGVuZGluZ0lt
YWdlU2l6ZSwgbGVuZ3RoKTsKKyAgICBzaXplX3QgYnl0ZXNSZWFkID0gZnJlYWQoZGF0YSwgMSwg
Ynl0ZXNUb1JlYWQsIHN0ZGluKTsKKyAgICBpZiAoYnl0ZXNSZWFkIDwgYnl0ZXNUb1JlYWQpCisg
ICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfUkVBRF9FUlJPUjsKKyAgICAqcGVuZGluZ0ltYWdl
U2l6ZSAtPSBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7CisKKyAgICByZXR1cm4gQ0FJUk9f
U1RBVFVTX1NVQ0NFU1M7Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogcmVhZFN1cmZhY2VGcm9tU3Rk
aW4obG9uZyBpbWFnZVNpemUpCit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfY3Jl
YXRlX2Zyb21fcG5nX3N0cmVhbShzdGF0aWNfY2FzdDxjYWlyb19yZWFkX2Z1bmNfdD4oY2Fpcm9T
dGRpblJlYWRlciksICZpbWFnZVNpemUpOworfQorCit1bnNpZ25lZCBmb3JtYXRDaGFubmVscyhj
YWlyb19mb3JtYXRfdCBmb3JtYXQpCit7CisgICAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNl
IENBSVJPX0ZPUk1BVF9BUkdCMzI6CisgICAgY2FzZSBDQUlST19GT1JNQVRfUkdCMjQ6CisjaWYg
KENBSVJPX1ZFUlNJT04gPj0gQ0FJUk9fVkVSU0lPTl9FTkNPREUoMSwgMTIsIDApKQorICAgIGNh
c2UgQ0FJUk9fRk9STUFUX1JHQjMwOgorI2VuZGlmCisgICAgICAgIHJldHVybiA0OworICAgIGNh
c2UgQ0FJUk9fRk9STUFUX0E4OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIENBSVJPX0ZP
Uk1BVF9SR0IxNl81NjU6CisgICAgICAgIHJldHVybiAyOworICAgIGRlZmF1bHQ6CisgICAgICAg
IHJldHVybiAwOworICAgIH07Cit9CisKK2NhaXJvX3N1cmZhY2VfdCogZGlmZmVyZW5jZUltYWdl
RnJvbURpZmZlcmVuY2VCdWZmZXIodW5zaWduZWQgY2hhciogYnVmZmVyLCBpbnQgd2lkdGgsIGlu
dCBoZWlnaHQpCit7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBpbWFnZSA9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfY3JlYXRlKENBSVJPX0ZPUk1BVF9SR0IyNCwgd2lkdGgsIGhlaWdodCk7CisgICAgaWYg
KGNhaXJvX3N1cmZhY2Vfc3RhdHVzKGltYWdlKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykgewor
ICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koaW1hZ2UpOworICAgICAgICByZXR1cm4gMDsK
KyAgICB9CisKKyAgICBpbnQgcm93U3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3Ry
aWRlKGltYWdlKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkaWZmUGl4ZWxzID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShpbWFnZSk7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKSB7CisgICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIqIGRpZmZQaXhlbCA9IGRpZmZQaXhlbHMgKyAoeSAqIHJvd1N0
cmlkZSkgKyAoeCAqIDMpOworICAgICAgICAgICAgZGlmZlBpeGVsWzBdID0gZGlmZlBpeGVsWzFd
ID0gZGlmZlBpeGVsWzJdID0gKmJ1ZmZlcisrOworICAgICAgICB9CisgICAgfQorICAgIGNhaXJv
X3N1cmZhY2VfbWFya19kaXJ0eShpbWFnZSk7CisKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKK2Zs
b2F0IGNhbGN1bGF0ZURpZmZlcmVuY2UoY2Fpcm9fc3VyZmFjZV90KiBiYXNlbGluZUltYWdlLCBj
YWlyb19zdXJmYWNlX3QqIGFjdHVhbEltYWdlLCBmbG9hdCB0b2xlcmFuY2UsIGNhaXJvX3N1cmZh
Y2VfdCoqIGRpZmZlcmVuY2VJbWFnZSkKK3sKKyAgICBpbnQgd2lkdGggPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF93aWR0aChhY3R1YWxJbWFnZSk7CisgICAgaW50IGhlaWdodCA9IGNhaXJvX2lt
YWdlX3N1cmZhY2VfZ2V0X2hlaWdodChhY3R1YWxJbWFnZSk7CisgICAgY2Fpcm9fZm9ybWF0X3Qg
Zm9ybWF0ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KGFjdHVhbEltYWdlKTsKKyAg
ICB1bnNpZ25lZCBudW1iZXJPZkNoYW5uZWxzID0gZm9ybWF0Q2hhbm5lbHMoZm9ybWF0KTsKKyAg
ICBpZiAoKHdpZHRoICE9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKGJhc2VsaW5lSW1h
Z2UpKQorICAgICAgICB8fCAoaGVpZ2h0ICE9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdo
dChiYXNlbGluZUltYWdlKSkKKyAgICAgICAgfHwgKGZvcm1hdCAhPSBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9mb3JtYXQoYmFzZWxpbmVJbWFnZSkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRXJyb3IsIHRlc3QgYW5kIHJlZmVyZW5jZSBpbWFnZSBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0
aWVzLlxuIik7CisgICAgICAgIHJldHVybiAxMDA7IC8vIENvbXBsZXRlbHkgZGlmZmVyZW50Lgor
ICAgIH0KKworICAgIHVuc2lnbmVkIGNoYXIqIGRpZmZCdWZmZXIgPSBzdGF0aWNfY2FzdDx1bnNp
Z25lZCBjaGFyKj4obWFsbG9jKHdpZHRoICogaGVpZ2h0KSk7CisgICAgZmxvYXQgY291bnQgPSAw
OworICAgIGZsb2F0IHN1bSA9IDA7CisgICAgZmxvYXQgbWF4RGlzdGFuY2UgPSAwOworICAgIGlu
dCBhY3R1YWxSb3dTdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9zdHJpZGUoYWN0dWFs
SW1hZ2UpOworICAgIGludCBiYXNlUm93U3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRf
c3RyaWRlKGJhc2VsaW5lSW1hZ2UpOworICAgIHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVscyA9
IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoYWN0dWFsSW1hZ2UpOworICAgIHVuc2lnbmVk
IGNoYXIqIGJhc2VQaXhlbHMgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGJhc2VsaW5l
SW1hZ2UpOworICAgIHVuc2lnbmVkIGNoYXIqIGN1cnJlbnREaWZmUGl4ZWwgPSBkaWZmQnVmZmVy
OworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgeworICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBh
Y3R1YWxQaXhlbCA9IGFjdHVhbFBpeGVscyArICh5ICogYWN0dWFsUm93U3RyaWRlKSArICh4ICog
bnVtYmVyT2ZDaGFubmVscyk7CisgICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWwg
PSBiYXNlUGl4ZWxzICsgKHkgKiBiYXNlUm93U3RyaWRlKSArICh4ICogbnVtYmVyT2ZDaGFubmVs
cyk7CisKKyAgICAgICAgICAgIGZsb2F0IHJlZCA9IChhY3R1YWxQaXhlbFswXSAtIGJhc2VQaXhl
bFswXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFswXSwgYmFzZVBpeGVsWzBdKTsKKyAg
ICAgICAgICAgIGZsb2F0IGdyZWVuID0gKGFjdHVhbFBpeGVsWzFdIC0gYmFzZVBpeGVsWzFdKSAv
IG1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzFdLCBiYXNlUGl4ZWxbMV0pOworICAgICAgICAg
ICAgZmxvYXQgYmx1ZSA9IChhY3R1YWxQaXhlbFsyXSAtIGJhc2VQaXhlbFsyXSkgLyBtYXg8Zmxv
YXQ+KDI1NSAtIGJhc2VQaXhlbFsyXSwgYmFzZVBpeGVsWzJdKTsKKyAgICAgICAgICAgIGZsb2F0
IGFscGhhID0gKGFjdHVhbFBpeGVsWzNdIC0gYmFzZVBpeGVsWzNdKSAvIG1heDxmbG9hdD4oMjU1
IC0gYmFzZVBpeGVsWzNdLCBiYXNlUGl4ZWxbM10pOworICAgICAgICAgICAgZmxvYXQgZGlzdGFu
Y2UgPSBzcXJ0ZihyZWQgKiByZWQgKyBncmVlbiAqIGdyZWVuICsgYmx1ZSAqIGJsdWUgKyBhbHBo
YSAqIGFscGhhKSAvIDIuMGY7CisKKyAgICAgICAgICAgICpjdXJyZW50RGlmZlBpeGVsKysgPSAo
dW5zaWduZWQgY2hhcikoZGlzdGFuY2UgKiAyNTUuMGYpOworCisgICAgICAgICAgICBpZiAoZGlz
dGFuY2UgPj0gMS4wZiAvIDI1NS4wZikgeworICAgICAgICAgICAgICAgIGNvdW50ICs9IDEuMGY7
CisgICAgICAgICAgICAgICAgc3VtICs9IGRpc3RhbmNlOworICAgICAgICAgICAgICAgIG1heERp
c3RhbmNlID0gbWF4PGZsb2F0PihtYXhEaXN0YW5jZSwgZGlzdGFuY2UpOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBhcyBh
IHBlcmNlbnRhZ2UgY29tYmluaW5nIGJvdGggdGhlIG51bWJlciBvZgorICAgIC8vIGRpZmZlcmVu
dCBwaXhlbHMgYW5kIHRoZWlyIGRpZmZlcmVuY2UgYW1vdW50IGkuZS4gdGhlIGF2ZXJhZ2UgZGlz
dGFuY2UKKyAgICAvLyBvdmVyIHRoZSBlbnRpcmUgaW1hZ2UKKyAgICBmbG9hdCBkaWZmZXJlbmNl
ID0gMDsKKyAgICBpZiAoY291bnQgPiAwLjBmKQorICAgICAgICBkaWZmZXJlbmNlID0gMTAwLjBm
ICogc3VtIC8gKGhlaWdodCAqIHdpZHRoKTsKKyAgICBpZiAoZGlmZmVyZW5jZSA8PSB0b2xlcmFu
Y2UpCisgICAgICAgIGRpZmZlcmVuY2UgPSAwOworICAgIGVsc2UgeworICAgICAgICBkaWZmZXJl
bmNlID0gcm91bmRmKGRpZmZlcmVuY2UgKiAxMDAuMGYpIC8gMTAwLjBmOworICAgICAgICBkaWZm
ZXJlbmNlID0gbWF4KGRpZmZlcmVuY2UsIDAuMDFmKTsgLy8gcm91bmQgdG8gMiBkZWNpbWFsIHBs
YWNlcworICAgICAgICAqZGlmZmVyZW5jZUltYWdlID0gZGlmZmVyZW5jZUltYWdlRnJvbURpZmZl
cmVuY2VCdWZmZXIoZGlmZkJ1ZmZlciwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorCisgICAgZnJl
ZShkaWZmQnVmZmVyKTsKKyAgICByZXR1cm4gZGlmZmVyZW5jZTsKK30KKworY2Fpcm9fc3RhdHVz
X3Qgd3JpdGVUb1BpeGVsRGF0YSh2b2lkKiBjbG9zdXJlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiBk
YXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+KiBwaXhl
bERhdGEgPSBzdGF0aWNfY2FzdDxWZWN0b3I8dW5zaWduZWQgY2hhcj4qPihjbG9zdXJlKTsKKyAg
ICBwaXhlbERhdGEtPmFwcGVuZChkYXRhLCBsZW5ndGgpOworICAgIHJldHVybiBDQUlST19TVEFU
VVNfU1VDQ0VTUzsKK30KKwordm9pZCBwcmludEltYWdlKGNhaXJvX3N1cmZhY2VfdCogaW1hZ2Up
Cit7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBpeGVsRGF0YTsKKyAgICBpZiAoY2Fpcm9f
c3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCBzdGF0aWNfY2FzdDxjYWlyb193cml0
ZV9mdW5jX3Q+KHdyaXRlVG9QaXhlbERhdGEpLCAmcGl4ZWxEYXRhKSAhPSBDQUlST19TVEFUVVNf
U1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBiYWlsIG91dCwgYXMgd2UgY2FuIHN0
aWxsIHVzZSB0aGUgcGVyY2VudGFnZSBvdXRwdXQuCisKKyAgICBjb25zdCBpbnQgZGF0YUxlbmd0
aCA9IHBpeGVsRGF0YS5zaXplKCk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSA9IHBp
eGVsRGF0YS5kYXRhKCk7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWRcbiIsIGRhdGFM
ZW5ndGgpOworICAgIGZ3cml0ZShkYXRhLCAxLCBkYXRhTGVuZ3RoLCBzdGRvdXQpOworfQorCit2
b2lkIHByaW50SW1hZ2VEaWZmZXJlbmNlcyhjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5lSW1hZ2Us
IGNhaXJvX3N1cmZhY2VfdCogYWN0dWFsSW1hZ2UsIGZsb2F0IHRvbGVyYW5jZSkKK3sKKyAgICBj
YWlyb19zdXJmYWNlX3QqIGRpZmZlcmVuY2VJbWFnZSA9IDA7CisgICAgZmxvYXQgZGlmZmVyZW5j
ZSA9IGNhbGN1bGF0ZURpZmZlcmVuY2UoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2UsIHRvbGVy
YW5jZSwgJmRpZmZlcmVuY2VJbWFnZSk7CisgICAgaWYgKGRpZmZlcmVuY2UgPiAwLjBmKSB7Cisg
ICAgICAgIGlmIChkaWZmZXJlbmNlSW1hZ2UpIHsKKyAgICAgICAgICAgIHByaW50SW1hZ2UoZGlm
ZmVyZW5jZUltYWdlKTsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShkaWZmZXJl
bmNlSW1hZ2UpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgZmFp
bGVkXG4iLCBkaWZmZXJlbmNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJpbnRmKCJkaWZmOiAl
MDEuMmYlJSBwYXNzZWRcbiIsIGRpZmZlcmVuY2UpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywg
Y2hhciogYXJndltdKQoreworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBfc2V0bW9kZSgwLCBfT19C
SU5BUlkpOworICAgIF9zZXRtb2RlKDEsIF9PX0JJTkFSWSk7CisjZW5kaWYKKworICAgIGZsb2F0
IHRvbGVyYW5jZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgewor
ICAgICAgICBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLXQiKSB8fCAhc3RyY21wKGFyZ3ZbaV0sICIt
LXRvbGVyYW5jZSIpKSB7CisgICAgICAgICAgICBpZiAoaSA+PSBhcmdjIC0gMSkKKyAgICAgICAg
ICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgdG9sZXJhbmNlID0gc3RydG9mKGFyZ3ZbaSAr
IDFdLCAwKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICB9CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV90KiBhY3R1YWxJbWFnZSA9IDA7CisgICAg
Y2Fpcm9fc3VyZmFjZV90KiBiYXNlbGluZUltYWdlID0gMDsKKyAgICBjaGFyIGJ1ZmZlclsyMDQ4
XTsKKyAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7Cisg
ICAgICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IG5ld2xpbmUgaW50byBhIE5VTCBjaGFyYWN0ZXIg
c28gdGhhdCBzdHJ0b2sgZG9lc24ndCBwcm9kdWNlIGl0LgorICAgICAgICBjaGFyKiBuZXdMaW5l
Q2hhcmFjdGVyID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisgICAgICAgIGlmIChuZXdMaW5lQ2hh
cmFjdGVyKQorICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOworCisgICAgICAg
IGlmICghc3RybmNtcCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZlciwgMTYpKSB7CisgICAgICAg
ICAgICBzdHJ0b2soYnVmZmVyLCAiICIpOworICAgICAgICAgICAgbG9uZyBpbWFnZVNpemUgPSBz
dHJ0b2woc3RydG9rKDAsICIgIiksIDAsIDEwKTsKKyAgICAgICAgICAgIGlmIChpbWFnZVNpemUg
PiAwICYmICFhY3R1YWxJbWFnZSkgeworICAgICAgICAgICAgICAgIGlmICghKGFjdHVhbEltYWdl
ID0gcmVhZFN1cmZhY2VGcm9tU3RkaW4oaW1hZ2VTaXplKSkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcHJpbnRmKCJFcnJvciwgY291bGQgbm90IHJlYWQgYWN0dWFsIGltYWdlLlxuIik7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoaW1hZ2VTaXplID4gMCAmJiAhYmFzZWxpbmVJbWFnZSkgeworICAgICAgICAg
ICAgICAgIGlmICghKGJhc2VsaW5lSW1hZ2UgPSByZWFkU3VyZmFjZUZyb21TdGRpbihpbWFnZVNp
emUpKSkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yLCBjb3VsZCBub3QgcmVh
ZCBiYXNlbGluZSBpbWFnZS5cbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHBy
aW50ZigiRXJyb3IsIGltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZpZWQuLlxuIik7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoYWN0dWFsSW1hZ2UgJiYgYmFzZWxpbmVJbWFnZSkgeworICAgICAgICAgICAgcHJpbnRJbWFn
ZURpZmZlcmVuY2VzKGJhc2VsaW5lSW1hZ2UsIGFjdHVhbEltYWdlLCB0b2xlcmFuY2UpOworICAg
ICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGFjdHVhbEltYWdlKTsKKyAgICAgICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveShiYXNlbGluZUltYWdlKTsKKyAgICAgICAgICAgIGFjdHVh
bEltYWdlID0gMDsKKyAgICAgICAgICAgIGJhc2VsaW5lSW1hZ2UgPSAwOworICAgICAgICB9CisK
KyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9JbWFnZURpZmYvZ3RrL0ltYWdlRGlmZi5jcHAgYi9Ub29scy9JbWFnZURp
ZmYvZ3RrL0ltYWdlRGlmZi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYWEy
NWU1YzFmNDU3NjlkOTU1NWZiMjNiZWI0MmI0N2YwMDVhYWEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvSW1hZ2VEaWZmL2d0ay9JbWFnZURpZmYu
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjQwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQg
KEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICog
YXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9m
Ci0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21v
dGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPGNtYXRo
PgotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGdkay9n
ZGsuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3RhdGljIGRvdWJsZSB0b2xlcmFuY2Ug
PSAwOwotc3RhdGljIEdPcHRpb25FbnRyeSBjb21tYW5kTGluZU9wdGlvbkVudHJpZXNbXSA9IAot
ewotICAgIHsgInRvbGVyYW5jZSIsIDAsIDAsIEdfT1BUSU9OX0FSR19ET1VCTEUsICZ0b2xlcmFu
Y2UsICJQZXJjZW50YWdlIGRpZmZlcmVuY2UgYmV0d2VlbiBpbWFnZXMgYmVmb3JlIGNvbnNpZGVy
aW5nIHRoZW0gZGlmZmVyZW50IiwgIlQiIH0sCi0gICAgeyAwLCAwLCAwLCBHX09QVElPTl9BUkdf
Tk9ORSwgMCwgMCwgMCB9LAotfTsKLQotR2RrUGl4YnVmKiByZWFkUGl4YnVmRnJvbVN0ZGluKGxv
bmcgaW1hZ2VTaXplKQotewotICAgIHVuc2lnbmVkIGNoYXIgaW1hZ2VCdWZmZXJbMjA0OF07Ci0g
ICAgR2RrUGl4YnVmTG9hZGVyKiBsb2FkZXIgPSBnZGtfcGl4YnVmX2xvYWRlcl9uZXdfd2l0aF90
eXBlKCJwbmciLCAwKTsKLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLQotICAgIHdoaWxlIChpbWFn
ZVNpemUgPiAwKSB7Ci0gICAgICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1pbjxpbnQ+KGltYWdl
U2l6ZSwgMjA0OCk7Ci0gICAgICAgIHNpemVfdCBieXRlc1JlYWQgPSBmcmVhZChpbWFnZUJ1ZmZl
ciwgMSwgYnl0ZXNUb1JlYWQsIHN0ZGluKTsKLQotICAgICAgICBpZiAoIWdka19waXhidWZfbG9h
ZGVyX3dyaXRlKGxvYWRlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihpbWFnZUJ1
ZmZlciksIGJ5dGVzUmVhZCwgJmVycm9yKSkgewotICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVy
cm9yKTsKLSAgICAgICAgICAgIGdka19waXhidWZfbG9hZGVyX2Nsb3NlKGxvYWRlciwgMCk7Ci0g
ICAgICAgICAgICBnX29iamVjdF91bnJlZihsb2FkZXIpOwotICAgICAgICAgICAgcmV0dXJuIDA7
Ci0gICAgICAgIH0KLQotICAgICAgICBpbWFnZVNpemUgLT0gc3RhdGljX2Nhc3Q8aW50PihieXRl
c1JlYWQpOwotICAgIH0KLQotICAgIGdka19waXhidWZfbG9hZGVyX2Nsb3NlKGxvYWRlciwgMCk7
Ci0gICAgR2RrUGl4YnVmKiBkZWNvZGVkSW1hZ2UgPSBnZGtfcGl4YnVmX2xvYWRlcl9nZXRfcGl4
YnVmKGxvYWRlcik7Ci0gICAgZ19vYmplY3RfcmVmKGRlY29kZWRJbWFnZSk7Ci0gICAgcmV0dXJu
IGRlY29kZWRJbWFnZTsKLX0KLQotR2RrUGl4YnVmKiBkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVy
ZW5jZUJ1ZmZlcih1bnNpZ25lZCBjaGFyKiBidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkK
LXsKLSAgICBHZGtQaXhidWYqIGltYWdlID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NPTE9SU1BBQ0Vf
UkdCLCBGQUxTRSwgOCwgd2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAg
cmV0dXJuIGltYWdlOwotCi0gICAgaW50IHJvd1N0cmlkZSA9IGdka19waXhidWZfZ2V0X3Jvd3N0
cmlkZShpbWFnZSk7Ci0gICAgdW5zaWduZWQgY2hhciogZGlmZlBpeGVscyA9IGdka19waXhidWZf
Z2V0X3BpeGVscyhpbWFnZSk7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7
Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIqIGRpZmZQaXhlbCA9IGRpZmZQaXhlbHMgKyAoeSAqIHJvd1N0cmlkZSkg
KyAoeCAqIDMpOwotICAgICAgICAgICAgZGlmZlBpeGVsWzBdID0gZGlmZlBpeGVsWzFdID0gZGlm
ZlBpeGVsWzJdID0gKmJ1ZmZlcisrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGlt
YWdlOwotfQotCi1mbG9hdCBjYWxjdWxhdGVEaWZmZXJlbmNlKEdka1BpeGJ1ZiogYmFzZWxpbmVJ
bWFnZSwgR2RrUGl4YnVmKiBhY3R1YWxJbWFnZSwgR2RrUGl4YnVmKiogZGlmZmVyZW5jZUltYWdl
KQotewotICAgIGludCB3aWR0aCA9IGdka19waXhidWZfZ2V0X3dpZHRoKGFjdHVhbEltYWdlKTsK
LSAgICBpbnQgaGVpZ2h0ID0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGFjdHVhbEltYWdlKTsKLSAg
ICBpbnQgbnVtYmVyT2ZDaGFubmVscyA9IGdka19waXhidWZfZ2V0X25fY2hhbm5lbHMoYWN0dWFs
SW1hZ2UpOwotICAgIGlmICgod2lkdGggIT0gZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoYmFzZWxpbmVJ
bWFnZSkpCi0gICAgICAgIHx8IChoZWlnaHQgIT0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGJhc2Vs
aW5lSW1hZ2UpKQotICAgICAgICB8fCAobnVtYmVyT2ZDaGFubmVscyAhPSBnZGtfcGl4YnVmX2dl
dF9uX2NoYW5uZWxzKGJhc2VsaW5lSW1hZ2UpKQotICAgICAgICB8fCAoZ2RrX3BpeGJ1Zl9nZXRf
aGFzX2FscGhhKGFjdHVhbEltYWdlKSAhPSBnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEoYmFzZWxp
bmVJbWFnZSkpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IsIHRlc3QgYW5kIHJl
ZmVyZW5jZSBpbWFnZSBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzLlxuIik7Ci0gICAgICAgIHJl
dHVybiAxMDA7IC8vIENvbXBsZXRlbHkgZGlmZmVyZW50LgotICAgIH0KLQotICAgIHVuc2lnbmVk
IGNoYXIqIGRpZmZCdWZmZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFsbG9jKHdp
ZHRoICogaGVpZ2h0KSk7Ci0gICAgZmxvYXQgY291bnQgPSAwOwotICAgIGZsb2F0IHN1bSA9IDA7
Ci0gICAgZmxvYXQgbWF4RGlzdGFuY2UgPSAwOwotICAgIGludCBhY3R1YWxSb3dTdHJpZGUgPSBn
ZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoYWN0dWFsSW1hZ2UpOwotICAgIGludCBiYXNlUm93U3Ry
aWRlID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGJhc2VsaW5lSW1hZ2UpOwotICAgIHVuc2ln
bmVkIGNoYXIqIGFjdHVhbFBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhhY3R1YWxJbWFn
ZSk7Ci0gICAgdW5zaWduZWQgY2hhciogYmFzZVBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVs
cyhiYXNlbGluZUltYWdlKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBjdXJyZW50RGlmZlBpeGVsID0g
ZGlmZkJ1ZmZlcjsKLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAg
ICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgICAgICAgdW5zaWdu
ZWQgY2hhciogYWN0dWFsUGl4ZWwgPSBhY3R1YWxQaXhlbHMgKyAoeSAqIGFjdHVhbFJvd1N0cmlk
ZSkgKyAoeCAqIG51bWJlck9mQ2hhbm5lbHMpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciog
YmFzZVBpeGVsID0gYmFzZVBpeGVscyArICh5ICogYmFzZVJvd1N0cmlkZSkgKyAoeCAqIG51bWJl
ck9mQ2hhbm5lbHMpOwotCi0gICAgICAgICAgICBmbG9hdCByZWQgPSAoYWN0dWFsUGl4ZWxbMF0g
LSBiYXNlUGl4ZWxbMF0pIC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMF0sIGJhc2VQaXhl
bFswXSk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IChhY3R1YWxQaXhlbFsxXSAtIGJhc2VQ
aXhlbFsxXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFsxXSwgYmFzZVBpeGVsWzFdKTsK
LSAgICAgICAgICAgIGZsb2F0IGJsdWUgPSAoYWN0dWFsUGl4ZWxbMl0gLSBiYXNlUGl4ZWxbMl0p
IC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMl0sIGJhc2VQaXhlbFsyXSk7Ci0gICAgICAg
ICAgICBmbG9hdCBhbHBoYSA9IChhY3R1YWxQaXhlbFszXSAtIGJhc2VQaXhlbFszXSkgLyBtYXg8
ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFszXSwgYmFzZVBpeGVsWzNdKTsKLSAgICAgICAgICAgIGZs
b2F0IGRpc3RhbmNlID0gc3FydGYocmVkICogcmVkICsgZ3JlZW4gKiBncmVlbiArIGJsdWUgKiBi
bHVlICsgYWxwaGEgKiBhbHBoYSkgLyAyLjBmOwotCi0gICAgICAgICAgICAqY3VycmVudERpZmZQ
aXhlbCsrID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RhbmNlICogMjU1LjBmKTsKLQotICAgICAgICAg
ICAgaWYgKGRpc3RhbmNlID49IDEuMGYgLyAyNTUuMGYpIHsKLSAgICAgICAgICAgICAgICBjb3Vu
dCArPSAxLjBmOwotICAgICAgICAgICAgICAgIHN1bSArPSBkaXN0YW5jZTsKLSAgICAgICAgICAg
ICAgICBtYXhEaXN0YW5jZSA9IG1heDxmbG9hdD4obWF4RGlzdGFuY2UsIGRpc3RhbmNlKTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENvbXB1dGUgdGhlIGRpZmZl
cmVuY2UgYXMgYSBwZXJjZW50YWdlIGNvbWJpbmluZyBib3RoIHRoZSBudW1iZXIgb2YKLSAgICAv
LyBkaWZmZXJlbnQgcGl4ZWxzIGFuZCB0aGVpciBkaWZmZXJlbmNlIGFtb3VudCBpLmUuIHRoZSBh
dmVyYWdlIGRpc3RhbmNlCi0gICAgLy8gb3ZlciB0aGUgZW50aXJlIGltYWdlCi0gICAgZmxvYXQg
ZGlmZmVyZW5jZSA9IDA7Ci0gICAgaWYgKGNvdW50ID4gMC4wZikKLSAgICAgICAgZGlmZmVyZW5j
ZSA9IDEwMC4wZiAqIHN1bSAvIChoZWlnaHQgKiB3aWR0aCk7Ci0gICAgaWYgKGRpZmZlcmVuY2Ug
PD0gdG9sZXJhbmNlKQotICAgICAgICBkaWZmZXJlbmNlID0gMDsKLSAgICBlbHNlIHsKLSAgICAg
ICAgZGlmZmVyZW5jZSA9IHJvdW5kZihkaWZmZXJlbmNlICogMTAwLjBmKSAvIDEwMC4wZjsKLSAg
ICAgICAgZGlmZmVyZW5jZSA9IG1heChkaWZmZXJlbmNlLCAwLjAxZik7IC8vIHJvdW5kIHRvIDIg
ZGVjaW1hbCBwbGFjZXMKLSAgICAgICAgKmRpZmZlcmVuY2VJbWFnZSA9IGRpZmZlcmVuY2VJbWFn
ZUZyb21EaWZmZXJlbmNlQnVmZmVyKGRpZmZCdWZmZXIsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0K
LQotICAgIGZyZWUoZGlmZkJ1ZmZlcik7Ci0gICAgcmV0dXJuIGRpZmZlcmVuY2U7Ci19Ci0KLXZv
aWQgcHJpbnRJbWFnZShHZGtQaXhidWYqIGltYWdlKQotewotICAgIGNoYXIqIGJ1ZmZlcjsKLSAg
ICBnc2l6ZSBidWZmZXJTaXplOwotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIGlmICghZ2Rr
X3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihpbWFnZSwgJmJ1ZmZlciwgJmJ1ZmZlclNpemUsICJwbmci
LCAmZXJyb3IsIE5VTEwpKSB7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAg
IHJldHVybjsgLy8gRG9uJ3QgYmFpbCBvdXQsIGFzIHdlIGNhbiBzdGlsbCB1c2UgdGhlIHBlcmNl
bnRhZ2Ugb3V0cHV0LgotICAgIH0KLQotICAgIHByaW50ZigiQ29udGVudC1MZW5ndGg6ICUiR19H
U0laRV9GT1JNQVQiXG4iLCBidWZmZXJTaXplKTsKLSAgICBmd3JpdGUoYnVmZmVyLCAxLCBidWZm
ZXJTaXplLCBzdGRvdXQpOwotfQotCi12b2lkIHByaW50SW1hZ2VEaWZmZXJlbmNlcyhHZGtQaXhi
dWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UpCi17Ci0gICAgR2RrUGl4
YnVmKiBkaWZmZXJlbmNlSW1hZ2UgPSAwOwotICAgIGZsb2F0IGRpZmZlcmVuY2UgPSBjYWxjdWxh
dGVEaWZmZXJlbmNlKGJhc2VsaW5lSW1hZ2UsIGFjdHVhbEltYWdlLCAmZGlmZmVyZW5jZUltYWdl
KTsKLSAgICBpZiAoZGlmZmVyZW5jZSA+IDAuMGYpIHsKLSAgICAgICAgaWYgKGRpZmZlcmVuY2VJ
bWFnZSkgewotICAgICAgICAgICAgcHJpbnRJbWFnZShkaWZmZXJlbmNlSW1hZ2UpOwotICAgICAg
ICAgICAgZ19vYmplY3RfdW5yZWYoZGlmZmVyZW5jZUltYWdlKTsKLSAgICAgICAgfQotICAgICAg
ICBwcmludGYoImRpZmY6ICUwMS4yZiUlIGZhaWxlZFxuIiwgZGlmZmVyZW5jZSk7Ci0gICAgfSBl
bHNlCi0gICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgcGFzc2VkXG4iLCBkaWZmZXJlbmNl
KTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKLXsKLSNpZiAhR0xJQl9D
SEVDS19WRVJTSU9OKDIsIDM1LCAwKQotICAgIGdfdHlwZV9pbml0KCk7Ci0jZW5kaWYKLQotICAg
IEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdPcHRpb25Db250ZXh0KiBjb250ZXh0ID0gZ19vcHRp
b25fY29udGV4dF9uZXcoIi0gY29tcGFyZSB0d28gaW1hZ2UgZmlsZXMsIHByaW50aW5nIHRoZWly
IHBlcmNlbnRhZ2UgZGlmZmVyZW5jZSBhbmQgdGhlIGRpZmZlcmVuY2UgaW1hZ2UgdG8gc3Rkb3V0
Iik7Ci0gICAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzKGNvbnRleHQsIGNvbW1h
bmRMaW5lT3B0aW9uRW50cmllcywgMCk7Ci0gICAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNl
KGNvbnRleHQsICZhcmdjLCAmYXJndiwgJmVycm9yKSkgewotICAgICAgICBwcmludGYoIk9wdGlv
biBwYXJzaW5nIGZhaWxlZDogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgZ19lcnJv
cl9mcmVlKGVycm9yKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgR2RrUGl4YnVm
KiBhY3R1YWxJbWFnZSA9IDA7Ci0gICAgR2RrUGl4YnVmKiBiYXNlbGluZUltYWdlID0gMDsKLSAg
ICBjaGFyIGJ1ZmZlclsyMDQ4XTsKLSAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVm
ZmVyKSwgc3RkaW4pKSB7Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IG5ld2xpbmUgaW50
byBhIE5VTCBjaGFyYWN0ZXIgc28gdGhhdCBzdHJ0b2sgZG9lc24ndCBwcm9kdWNlIGl0LgotICAg
ICAgICBjaGFyKiBuZXdMaW5lQ2hhcmFjdGVyID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7Ci0gICAg
ICAgIGlmIChuZXdMaW5lQ2hhcmFjdGVyKQotICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIg
PSAnXDAnOwotCi0gICAgICAgIGlmICghc3RybmNtcCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZl
ciwgMTYpKSB7Ci0gICAgICAgICAgICBnY2hhcioqIHRva2VucyA9IGdfc3Ryc3BsaXQoYnVmZmVy
LCAiICIsIDApOwotICAgICAgICAgICAgaWYgKCF0b2tlbnNbMV0pIHsKLSAgICAgICAgICAgICAg
ICBnX3N0cmZyZWV2KHRva2Vucyk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciwgaW1h
Z2Ugc2l6ZSBtdXN0IGJlIHNwZWNpZmllZC4uXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4g
MTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbG9uZyBpbWFnZVNpemUgPSBzdHJ0b2wo
dG9rZW5zWzFdLCAwLCAxMCk7Ci0gICAgICAgICAgICBnX3N0cmZyZWV2KHRva2Vucyk7Ci0gICAg
ICAgICAgICBpZiAoaW1hZ2VTaXplID4gMCAmJiAhYWN0dWFsSW1hZ2UpIHsKLSAgICAgICAgICAg
ICAgICBpZiAoIShhY3R1YWxJbWFnZSA9IHJlYWRQaXhidWZGcm9tU3RkaW4oaW1hZ2VTaXplKSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciwgY291bGQgbm90IHJlYWQgYWN0
dWFsIGltYWdlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1hZ2VTaXplID4gMCAmJiAhYmFzZWxp
bmVJbWFnZSkgewotICAgICAgICAgICAgICAgIGlmICghKGJhc2VsaW5lSW1hZ2UgPSByZWFkUGl4
YnVmRnJvbVN0ZGluKGltYWdlU2l6ZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50Zigi
RXJyb3IsIGNvdWxkIG5vdCByZWFkIGJhc2VsaW5lIGltYWdlLlxuIik7Ci0gICAgICAgICAgICAg
ICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNp
ZmllZC4uXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIGlmIChhY3R1YWxJbWFnZSAmJiBiYXNlbGluZUltYWdlKSB7Ci0g
ICAgICAgICAgICBwcmludEltYWdlRGlmZmVyZW5jZXMoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1h
Z2UpOwotICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoYWN0dWFsSW1hZ2UpOwotICAgICAgICAg
ICAgZ19vYmplY3RfdW5yZWYoYmFzZWxpbmVJbWFnZSk7Ci0gICAgICAgICAgICBhY3R1YWxJbWFn
ZSA9IDA7Ci0gICAgICAgICAgICBiYXNlbGluZUltYWdlID0gMDsKLSAgICAgICAgfQotCi0gICAg
ICAgIGZmbHVzaChzdGRvdXQpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242719</attachid>
            <date>2014-12-06 10:46:42 -0800</date>
            <delta_ts>2014-12-07 03:29:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85299-20141206194717.patch</filename>
            <type>text/plain</type>
            <size>21774</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2OTA2CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggYmRlMzZiOTZjZGE5OGE2OWJjZjRiNTMwYmYxNGYyMzU2
YWE5OWM1Yi4uMWVhNzEzNmRjODhkYjk1ZjdiMTU0OTMzNjQ3MDc4MWMxMWNkYjRkZiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2
IEBACisyMDE0LTEyLTA2ICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgR0RLIGRlcGVuZGVuY3kgZnJvbSBJbWFnZURpZmYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1Mjk5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlZCBn
ZGsgZGVwZW5kZW5jeSBvbiBJbWFnZURpZmYgZm9yIGd0aywgdXNpbmcgb25seSBjYWlyby4KKyAg
ICAgICAgQWxzbyByZW5hbWVkIHRoZSBmb2xkZXIgdG8gY2Fpcm8gYXMgaXQgZG9lcyBub3QgZ2xp
Yi9ndGsKKyAgICAgICAgc3BlY2lmaWMgYW55bW9yZS4KKworICAgICAgICAqIEltYWdlRGlmZi9Q
bGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBJbWFnZURpZmYvY2Fpcm8vSW1hZ2VEaWZmLmNw
cDogUmVuYW1lZCBmcm9tIFRvb2xzL0ltYWdlRGlmZi9ndGsvSW1hZ2VEaWZmLmNwcC4KKyAgICAg
ICAgKGNhaXJvU3RkaW5SZWFkZXIpOgorICAgICAgICAocmVhZFN1cmZhY2VGcm9tU3RkaW4pOgor
ICAgICAgICAoZm9ybWF0Q2hhbm5lbHMpOgorICAgICAgICAoZGlmZmVyZW5jZUltYWdlRnJvbURp
ZmZlcmVuY2VCdWZmZXIpOgorICAgICAgICAoY2FsY3VsYXRlRGlmZmVyZW5jZSk6CisgICAgICAg
ICh3cml0ZVRvUGl4ZWxEYXRhKToKKyAgICAgICAgKHByaW50SW1hZ2UpOgorICAgICAgICAocHJp
bnRJbWFnZURpZmZlcmVuY2VzKToKKyAgICAgICAgKG1haW4pOgorCiAyMDE0LTEyLTA1ICBDaHJp
cyBGbGVpemFjaCAgPGNmbGVpemFjaEBhcHBsZS5jb20+CiAKICAgICAgICAgQVg6IEkgY2Fubm90
IGFjdGl2YXRlIGxpbmtzIG9uIHRoZSBtb2JpbGUgdmVyc2lvbiBvZiBuZXdzLmdvb2dsZS5jb20K
ZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Rvb2xzL0lt
YWdlRGlmZi9QbGF0Zm9ybUdUSy5jbWFrZQppbmRleCBkNDViODE5NjJjOGZmZDM3NTQ5OTdlODFm
ZmVhZTBhNDcxNGQ3N2JmLi5iY2Y3YWI3OWFhZmJjMjlmNmFhNDBkMjYyYzAyMWE3OWRhMmViOWZi
IDEwMDY0NAotLS0gYS9Ub29scy9JbWFnZURpZmYvUGxhdGZvcm1HVEsuY21ha2UKKysrIGIvVG9v
bHMvSW1hZ2VEaWZmL1BsYXRmb3JtR1RLLmNtYWtlCkBAIC0xLDUgKzEsNSBAQAogc2V0KElNQUdF
X0RJRkZfU09VUkNFUwotICAgICR7SU1BR0VfRElGRl9ESVJ9L2d0ay9JbWFnZURpZmYuY3BwCisg
ICAgJHtJTUFHRV9ESUZGX0RJUn0vY2Fpcm8vSW1hZ2VEaWZmLmNwcAogKQogCiBsaXN0KEFQUEVO
RCBJTUFHRV9ESUZGX0lOQ0xVREVfRElSRUNUT1JJRVMKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdl
RGlmZi9jYWlyby9JbWFnZURpZmYuY3BwIGIvVG9vbHMvSW1hZ2VEaWZmL2NhaXJvL0ltYWdlRGlm
Zi5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTIxNWYyMmU3ZmZhOGQ0ZDI1NzkwMWRkZTEyYTVlMTdlY2FkZTY5
MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9jYWlyby9JbWFnZURpZmYuY3Bw
CkBAIC0wLDAgKzEsMjYwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFphbiBEb2JlcnNl
ayA8emFuZG9iZXJzZWtAZ21haWwuY29tPgorICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBT
LkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICog
MS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y2Fpcm8vY2Fp
cm8uaD4KKyNpbmNsdWRlIDxjbWF0aD4KKyNpbmNsdWRlIDxjc3RkaW8+CisjaW5jbHVkZSA8Y3N0
ZGxpYj4KKyNpbmNsdWRlIDxjc3RyaW5nPgorI2luY2x1ZGUgPHd0Zi9FeHBvcnRNYWNyb3MuaD4K
KyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKKyNp
ZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNlbmRpZgorCit1c2luZyBuYW1l
c3BhY2Ugc3RkOworCitjYWlyb19zdGF0dXNfdCBjYWlyb1N0ZGluUmVhZGVyKHZvaWQqIGNsb3N1
cmUsIHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICBpbnQqIHBl
bmRpbmdJbWFnZVNpemUgPSBzdGF0aWNfY2FzdDxpbnQqPihjbG9zdXJlKTsKKyAgICBpZiAoKnBl
bmRpbmdJbWFnZVNpemUgPj0gMCkKKyAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNT
OworCisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWluPHNpemVfdD4oKnBlbmRpbmdJbWFnZVNp
emUsIGxlbmd0aCk7CisgICAgc2l6ZV90IGJ5dGVzUmVhZCA9IGZyZWFkKGRhdGEsIDEsIGJ5dGVz
VG9SZWFkLCBzdGRpbik7CisgICAgaWYgKGJ5dGVzUmVhZCA8IGJ5dGVzVG9SZWFkKQorICAgICAg
ICByZXR1cm4gQ0FJUk9fU1RBVFVTX1JFQURfRVJST1I7CisgICAgKnBlbmRpbmdJbWFnZVNpemUg
LT0gc3RhdGljX2Nhc3Q8aW50PihieXRlc1JlYWQpOworCisgICAgcmV0dXJuIENBSVJPX1NUQVRV
U19TVUNDRVNTOworfQorCitjYWlyb19zdXJmYWNlX3QqIHJlYWRTdXJmYWNlRnJvbVN0ZGluKGxv
bmcgaW1hZ2VTaXplKQoreworICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9m
cm9tX3BuZ19zdHJlYW0oc3RhdGljX2Nhc3Q8Y2Fpcm9fcmVhZF9mdW5jX3Q+KGNhaXJvU3RkaW5S
ZWFkZXIpLCAmaW1hZ2VTaXplKTsKK30KKwordW5zaWduZWQgZm9ybWF0Q2hhbm5lbHMoY2Fpcm9f
Zm9ybWF0X3QgZm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBDQUlS
T19GT1JNQVRfQVJHQjMyOgorICAgIGNhc2UgQ0FJUk9fRk9STUFUX1JHQjI0OgorI2lmIChDQUlS
T19WRVJTSU9OID49IENBSVJPX1ZFUlNJT05fRU5DT0RFKDEsIDEyLCAwKSkKKyAgICBjYXNlIENB
SVJPX0ZPUk1BVF9SR0IzMDoKKyNlbmRpZgorICAgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIENB
SVJPX0ZPUk1BVF9BODoKKyAgICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBDQUlST19GT1JNQVRf
UkdCMTZfNTY1OgorICAgICAgICByZXR1cm4gMjsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1
cm4gMDsKKyAgICB9OworfQorCitjYWlyb19zdXJmYWNlX3QqIGRpZmZlcmVuY2VJbWFnZUZyb21E
aWZmZXJlbmNlQnVmZmVyKHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQoreworICAgIGNhaXJvX3N1cmZhY2VfdCogaW1hZ2UgPSBjYWlyb19pbWFnZV9zdXJmYWNl
X2NyZWF0ZShDQUlST19GT1JNQVRfUkdCMjQsIHdpZHRoLCBoZWlnaHQpOworICAgIGlmIChjYWly
b19zdXJmYWNlX3N0YXR1cyhpbWFnZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAgICAg
ICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGltYWdlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAg
fQorCisgICAgaW50IHJvd1N0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShp
bWFnZSk7CisgICAgdW5zaWduZWQgY2hhciogZGlmZlBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEoaW1hZ2UpOworICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykg
eworICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7CisgICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyKiBkaWZmUGl4ZWwgPSBkaWZmUGl4ZWxzICsgKHkgKiByb3dTdHJpZGUp
ICsgKHggKiAzKTsKKyAgICAgICAgICAgIGRpZmZQaXhlbFswXSA9IGRpZmZQaXhlbFsxXSA9IGRp
ZmZQaXhlbFsyXSA9ICpidWZmZXIrKzsKKyAgICAgICAgfQorICAgIH0KKyAgICBjYWlyb19zdXJm
YWNlX21hcmtfZGlydHkoaW1hZ2UpOworCisgICAgcmV0dXJuIGltYWdlOworfQorCitmbG9hdCBj
YWxjdWxhdGVEaWZmZXJlbmNlKGNhaXJvX3N1cmZhY2VfdCogYmFzZWxpbmVJbWFnZSwgY2Fpcm9f
c3VyZmFjZV90KiBhY3R1YWxJbWFnZSwgZmxvYXQgdG9sZXJhbmNlLCBjYWlyb19zdXJmYWNlX3Qq
KiBkaWZmZXJlbmNlSW1hZ2UpCit7CisgICAgaW50IHdpZHRoID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9nZXRfd2lkdGgoYWN0dWFsSW1hZ2UpOworICAgIGludCBoZWlnaHQgPSBjYWlyb19pbWFnZV9z
dXJmYWNlX2dldF9oZWlnaHQoYWN0dWFsSW1hZ2UpOworICAgIGNhaXJvX2Zvcm1hdF90IGZvcm1h
dCA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChhY3R1YWxJbWFnZSk7CisgICAgdW5z
aWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGZvcm1hdENoYW5uZWxzKGZvcm1hdCk7CisgICAgaWYg
KCh3aWR0aCAhPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChiYXNlbGluZUltYWdlKSkK
KyAgICAgICAgfHwgKGhlaWdodCAhPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQoYmFz
ZWxpbmVJbWFnZSkpCisgICAgICAgIHx8IChmb3JtYXQgIT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9n
ZXRfZm9ybWF0KGJhc2VsaW5lSW1hZ2UpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVy
cm9yLCB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2UgaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcy5c
biIpOworICAgICAgICByZXR1cm4gMTAwOyAvLyBDb21wbGV0ZWx5IGRpZmZlcmVudC4KKyAgICB9
CisKKyAgICB1bnNpZ25lZCBjaGFyKiBkaWZmQnVmZmVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG1hbGxvYyh3aWR0aCAqIGhlaWdodCkpOworICAgIGZsb2F0IGNvdW50ID0gMDsKKyAg
ICBmbG9hdCBzdW0gPSAwOworICAgIGZsb2F0IG1heERpc3RhbmNlID0gMDsKKyAgICBpbnQgYWN0
dWFsUm93U3RyaWRlID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKGFjdHVhbEltYWdl
KTsKKyAgICBpbnQgYmFzZVJvd1N0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlk
ZShiYXNlbGluZUltYWdlKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbHMgPSBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKGFjdHVhbEltYWdlKTsKKyAgICB1bnNpZ25lZCBjaGFy
KiBiYXNlUGl4ZWxzID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShiYXNlbGluZUltYWdl
KTsKKyAgICB1bnNpZ25lZCBjaGFyKiBjdXJyZW50RGlmZlBpeGVsID0gZGlmZkJ1ZmZlcjsKKyAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKKyAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYWN0dWFs
UGl4ZWwgPSBhY3R1YWxQaXhlbHMgKyAoeSAqIGFjdHVhbFJvd1N0cmlkZSkgKyAoeCAqIG51bWJl
ck9mQ2hhbm5lbHMpOworICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYmFzZVBpeGVsID0gYmFz
ZVBpeGVscyArICh5ICogYmFzZVJvd1N0cmlkZSkgKyAoeCAqIG51bWJlck9mQ2hhbm5lbHMpOwor
CisgICAgICAgICAgICBmbG9hdCByZWQgPSAoYWN0dWFsUGl4ZWxbMF0gLSBiYXNlUGl4ZWxbMF0p
IC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMF0sIGJhc2VQaXhlbFswXSk7CisgICAgICAg
ICAgICBmbG9hdCBncmVlbiA9IChhY3R1YWxQaXhlbFsxXSAtIGJhc2VQaXhlbFsxXSkgLyBtYXg8
ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFsxXSwgYmFzZVBpeGVsWzFdKTsKKyAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSAoYWN0dWFsUGl4ZWxbMl0gLSBiYXNlUGl4ZWxbMl0pIC8gbWF4PGZsb2F0Pigy
NTUgLSBiYXNlUGl4ZWxbMl0sIGJhc2VQaXhlbFsyXSk7CisgICAgICAgICAgICBmbG9hdCBhbHBo
YSA9IChhY3R1YWxQaXhlbFszXSAtIGJhc2VQaXhlbFszXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJh
c2VQaXhlbFszXSwgYmFzZVBpeGVsWzNdKTsKKyAgICAgICAgICAgIGZsb2F0IGRpc3RhbmNlID0g
c3FydGYocmVkICogcmVkICsgZ3JlZW4gKiBncmVlbiArIGJsdWUgKiBibHVlICsgYWxwaGEgKiBh
bHBoYSkgLyAyLjBmOworCisgICAgICAgICAgICAqY3VycmVudERpZmZQaXhlbCsrID0gc3RhdGlj
X2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGlzdGFuY2UgKiAyNTUuMGYpOworCisgICAgICAgICAgICBp
ZiAoZGlzdGFuY2UgPj0gMS4wZiAvIDI1NS4wZikgeworICAgICAgICAgICAgICAgIGNvdW50ICs9
IDEuMGY7CisgICAgICAgICAgICAgICAgc3VtICs9IGRpc3RhbmNlOworICAgICAgICAgICAgICAg
IG1heERpc3RhbmNlID0gbWF4PGZsb2F0PihtYXhEaXN0YW5jZSwgZGlzdGFuY2UpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSB0aGUgZGlmZmVyZW5j
ZSBhcyBhIHBlcmNlbnRhZ2UgY29tYmluaW5nIGJvdGggdGhlIG51bWJlciBvZgorICAgIC8vIGRp
ZmZlcmVudCBwaXhlbHMgYW5kIHRoZWlyIGRpZmZlcmVuY2UgYW1vdW50IGkuZS4gdGhlIGF2ZXJh
Z2UgZGlzdGFuY2UKKyAgICAvLyBvdmVyIHRoZSBlbnRpcmUgaW1hZ2UKKyAgICBmbG9hdCBkaWZm
ZXJlbmNlID0gMDsKKyAgICBpZiAoY291bnQgPiAwLjBmKQorICAgICAgICBkaWZmZXJlbmNlID0g
MTAwLjBmICogc3VtIC8gKGhlaWdodCAqIHdpZHRoKTsKKyAgICBpZiAoZGlmZmVyZW5jZSA8PSB0
b2xlcmFuY2UpCisgICAgICAgIGRpZmZlcmVuY2UgPSAwOworICAgIGVsc2UgeworICAgICAgICBk
aWZmZXJlbmNlID0gcm91bmRmKGRpZmZlcmVuY2UgKiAxMDAuMGYpIC8gMTAwLjBmOworICAgICAg
ICBkaWZmZXJlbmNlID0gbWF4KGRpZmZlcmVuY2UsIDAuMDFmKTsgLy8gcm91bmQgdG8gMiBkZWNp
bWFsIHBsYWNlcworICAgICAgICAqZGlmZmVyZW5jZUltYWdlID0gZGlmZmVyZW5jZUltYWdlRnJv
bURpZmZlcmVuY2VCdWZmZXIoZGlmZkJ1ZmZlciwgd2lkdGgsIGhlaWdodCk7CisgICAgfQorCisg
ICAgZnJlZShkaWZmQnVmZmVyKTsKKyAgICByZXR1cm4gZGlmZmVyZW5jZTsKK30KKworY2Fpcm9f
c3RhdHVzX3Qgd3JpdGVUb1BpeGVsRGF0YSh2b2lkKiBjbG9zdXJlLCBjb25zdCB1bnNpZ25lZCBj
aGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+
KiBwaXhlbERhdGEgPSBzdGF0aWNfY2FzdDxWZWN0b3I8dW5zaWduZWQgY2hhcj4qPihjbG9zdXJl
KTsKKyAgICBwaXhlbERhdGEtPmFwcGVuZChkYXRhLCBsZW5ndGgpOworICAgIHJldHVybiBDQUlS
T19TVEFUVVNfU1VDQ0VTUzsKK30KKwordm9pZCBwcmludEltYWdlKGNhaXJvX3N1cmZhY2VfdCog
aW1hZ2UpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBpeGVsRGF0YTsKKyAgICBpZiAo
Y2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCBzdGF0aWNfY2FzdDxjYWly
b193cml0ZV9mdW5jX3Q+KHdyaXRlVG9QaXhlbERhdGEpLCAmcGl4ZWxEYXRhKSAhPSBDQUlST19T
VEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBiYWlsIG91dCwgYXMgd2Ug
Y2FuIHN0aWxsIHVzZSB0aGUgcGVyY2VudGFnZSBvdXRwdXQuCisKKyAgICBjb25zdCBpbnQgZGF0
YUxlbmd0aCA9IHBpeGVsRGF0YS5zaXplKCk7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0
YSA9IHBpeGVsRGF0YS5kYXRhKCk7CisgICAgcHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWRcbiIs
IGRhdGFMZW5ndGgpOworICAgIGZ3cml0ZShkYXRhLCBkYXRhTGVuZ3RoLCAxLCBzdGRvdXQpOwor
fQorCit2b2lkIHByaW50SW1hZ2VEaWZmZXJlbmNlcyhjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5l
SW1hZ2UsIGNhaXJvX3N1cmZhY2VfdCogYWN0dWFsSW1hZ2UsIGZsb2F0IHRvbGVyYW5jZSkKK3sK
KyAgICBjYWlyb19zdXJmYWNlX3QqIGRpZmZlcmVuY2VJbWFnZSA9IDA7CisgICAgZmxvYXQgZGlm
ZmVyZW5jZSA9IGNhbGN1bGF0ZURpZmZlcmVuY2UoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2Us
IHRvbGVyYW5jZSwgJmRpZmZlcmVuY2VJbWFnZSk7CisgICAgaWYgKGRpZmZlcmVuY2UgPiAwLjBm
KSB7CisgICAgICAgIGlmIChkaWZmZXJlbmNlSW1hZ2UpIHsKKyAgICAgICAgICAgIHByaW50SW1h
Z2UoZGlmZmVyZW5jZUltYWdlKTsKKyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShk
aWZmZXJlbmNlSW1hZ2UpOworICAgICAgICB9CisgICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJm
JSUgZmFpbGVkXG4iLCBkaWZmZXJlbmNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJpbnRmKCJk
aWZmOiAlMDEuMmYlJSBwYXNzZWRcbiIsIGRpZmZlcmVuY2UpOworfQorCitpbnQgbWFpbihpbnQg
YXJnYywgY2hhciogYXJndltdKQoreworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBfc2V0bW9kZSgw
LCBfT19CSU5BUlkpOworICAgIF9zZXRtb2RlKDEsIF9PX0JJTkFSWSk7CisjZW5kaWYKKworICAg
IGZsb2F0IHRvbGVyYW5jZSA9IDA7CisKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsr
aSkgeworICAgICAgICBpZiAoIXN0cmNtcChhcmd2W2ldLCAiLXQiKSB8fCAhc3RyY21wKGFyZ3Zb
aV0sICItLXRvbGVyYW5jZSIpKSB7CisgICAgICAgICAgICBpZiAoaSA+PSBhcmdjIC0gMSkKKyAg
ICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAgdG9sZXJhbmNlID0gc3RydG9mKGFy
Z3ZbaSArIDFdLCAwKTsKKyAgICAgICAgICAgICsraTsKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICB9CisgICAgfQorCisgICAgY2Fpcm9fc3VyZmFjZV90KiBhY3R1YWxJbWFnZSA9IDA7
CisgICAgY2Fpcm9fc3VyZmFjZV90KiBiYXNlbGluZUltYWdlID0gMDsKKyAgICBjaGFyIGJ1ZmZl
clsyMDQ4XTsKKyAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4p
KSB7CisgICAgICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IG5ld2xpbmUgaW50byBhIE5VTCBjaGFy
YWN0ZXIgc28gdGhhdCBzdHJ0b2sgZG9lc24ndCBwcm9kdWNlIGl0LgorICAgICAgICBjaGFyKiBu
ZXdMaW5lQ2hhcmFjdGVyID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisgICAgICAgIGlmIChuZXdM
aW5lQ2hhcmFjdGVyKQorICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOworCisg
ICAgICAgIGlmICghc3RybmNtcCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZlciwgMTYpKSB7Cisg
ICAgICAgICAgICBzdHJ0b2soYnVmZmVyLCAiICIpOworICAgICAgICAgICAgbG9uZyBpbWFnZVNp
emUgPSBzdHJ0b2woc3RydG9rKDAsICIgIiksIDAsIDEwKTsKKyAgICAgICAgICAgIGlmIChpbWFn
ZVNpemUgPiAwICYmICFhY3R1YWxJbWFnZSkgeworICAgICAgICAgICAgICAgIGlmICghKGFjdHVh
bEltYWdlID0gcmVhZFN1cmZhY2VGcm9tU3RkaW4oaW1hZ2VTaXplKSkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbnRmKCJFcnJvciwgY291bGQgbm90IHJlYWQgYWN0dWFsIGltYWdlLlxuIik7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoaW1hZ2VTaXplID4gMCAmJiAhYmFzZWxpbmVJbWFnZSkgeworICAg
ICAgICAgICAgICAgIGlmICghKGJhc2VsaW5lSW1hZ2UgPSByZWFkU3VyZmFjZUZyb21TdGRpbihp
bWFnZVNpemUpKSkgeworICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yLCBjb3VsZCBu
b3QgcmVhZCBiYXNlbGluZSBpbWFnZS5cbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
MTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgIHByaW50ZigiRXJyb3IsIGltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZpZWQuLlxuIik7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoYWN0dWFsSW1hZ2UgJiYgYmFzZWxpbmVJbWFnZSkgeworICAgICAgICAgICAgcHJp
bnRJbWFnZURpZmZlcmVuY2VzKGJhc2VsaW5lSW1hZ2UsIGFjdHVhbEltYWdlLCB0b2xlcmFuY2Up
OworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGFjdHVhbEltYWdlKTsKKyAgICAg
ICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShiYXNlbGluZUltYWdlKTsKKyAgICAgICAgICAg
IGFjdHVhbEltYWdlID0gMDsKKyAgICAgICAgICAgIGJhc2VsaW5lSW1hZ2UgPSAwOworICAgICAg
ICB9CisKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9
CmRpZmYgLS1naXQgYS9Ub29scy9JbWFnZURpZmYvZ3RrL0ltYWdlRGlmZi5jcHAgYi9Ub29scy9J
bWFnZURpZmYvZ3RrL0ltYWdlRGlmZi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGMxNWZjZmVkMjYyMWMwZDg0OTE1NjJhMWI0ZWQzNDc0NzQzZDI3N2UuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvVG9vbHMvSW1hZ2VEaWZmL2d0ay9JbWFn
ZURpZmYuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMjM3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKiBDb3B5
cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0j
aW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Y3N0cmluZz4K
LSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0KLXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyBk
b3VibGUgdG9sZXJhbmNlID0gMDsKLXN0YXRpYyBHT3B0aW9uRW50cnkgY29tbWFuZExpbmVPcHRp
b25FbnRyaWVzW10gPSAKLXsKLSAgICB7ICJ0b2xlcmFuY2UiLCAwLCAwLCBHX09QVElPTl9BUkdf
RE9VQkxFLCAmdG9sZXJhbmNlLCAiUGVyY2VudGFnZSBkaWZmZXJlbmNlIGJldHdlZW4gaW1hZ2Vz
IGJlZm9yZSBjb25zaWRlcmluZyB0aGVtIGRpZmZlcmVudCIsICJUIiB9LAotICAgIHsgMCwgMCwg
MCwgR19PUFRJT05fQVJHX05PTkUsIDAsIDAsIDAgfSwKLX07Ci0KLUdka1BpeGJ1ZiogcmVhZFBp
eGJ1ZkZyb21TdGRpbihsb25nIGltYWdlU2l6ZSkKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGltYWdl
QnVmZmVyWzIwNDhdOwotICAgIEdka1BpeGJ1ZkxvYWRlciogbG9hZGVyID0gZ2RrX3BpeGJ1Zl9s
b2FkZXJfbmV3X3dpdGhfdHlwZSgicG5nIiwgMCk7Ci0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0K
LSAgICB3aGlsZSAoaW1hZ2VTaXplID4gMCkgewotICAgICAgICBzaXplX3QgYnl0ZXNUb1JlYWQg
PSBtaW48aW50PihpbWFnZVNpemUsIDIwNDgpOwotICAgICAgICBzaXplX3QgYnl0ZXNSZWFkID0g
ZnJlYWQoaW1hZ2VCdWZmZXIsIDEsIGJ5dGVzVG9SZWFkLCBzdGRpbik7Ci0KLSAgICAgICAgaWYg
KCFnZGtfcGl4YnVmX2xvYWRlcl93cml0ZShsb2FkZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
Z3VjaGFyKj4oaW1hZ2VCdWZmZXIpLCBieXRlc1JlYWQsICZlcnJvcikpIHsKLSAgICAgICAgICAg
IGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgICAgICBnZGtfcGl4YnVmX2xvYWRlcl9jbG9z
ZShsb2FkZXIsIDApOwotICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYobG9hZGVyKTsKLSAgICAg
ICAgICAgIHJldHVybiAwOwotICAgICAgICB9Ci0KLSAgICAgICAgaW1hZ2VTaXplIC09IHN0YXRp
Y19jYXN0PGludD4oYnl0ZXNSZWFkKTsKLSAgICB9Ci0KLSAgICBnZGtfcGl4YnVmX2xvYWRlcl9j
bG9zZShsb2FkZXIsIDApOwotICAgIEdka1BpeGJ1ZiogZGVjb2RlZEltYWdlID0gZ2RrX3BpeGJ1
Zl9sb2FkZXJfZ2V0X3BpeGJ1Zihsb2FkZXIpOwotICAgIGdfb2JqZWN0X3JlZihkZWNvZGVkSW1h
Z2UpOwotICAgIHJldHVybiBkZWNvZGVkSW1hZ2U7Ci19Ci0KLUdka1BpeGJ1ZiogZGlmZmVyZW5j
ZUltYWdlRnJvbURpZmZlcmVuY2VCdWZmZXIodW5zaWduZWQgY2hhciogYnVmZmVyLCBpbnQgd2lk
dGgsIGludCBoZWlnaHQpCi17Ci0gICAgR2RrUGl4YnVmKiBpbWFnZSA9IGdka19waXhidWZfbmV3
KEdES19DT0xPUlNQQUNFX1JHQiwgRkFMU0UsIDgsIHdpZHRoLCBoZWlnaHQpOwotICAgIGlmICgh
aW1hZ2UpCi0gICAgICAgIHJldHVybiBpbWFnZTsKLQotICAgIGludCByb3dTdHJpZGUgPSBnZGtf
cGl4YnVmX2dldF9yb3dzdHJpZGUoaW1hZ2UpOwotICAgIHVuc2lnbmVkIGNoYXIqIGRpZmZQaXhl
bHMgPSBnZGtfcGl4YnVmX2dldF9waXhlbHMoaW1hZ2UpOwotICAgIGZvciAoaW50IHggPSAwOyB4
IDwgd2lkdGg7IHgrKykgewotICAgICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsr
KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBkaWZmUGl4ZWwgPSBkaWZmUGl4ZWxzICsg
KHkgKiByb3dTdHJpZGUpICsgKHggKiAzKTsKLSAgICAgICAgICAgIGRpZmZQaXhlbFswXSA9IGRp
ZmZQaXhlbFsxXSA9IGRpZmZQaXhlbFsyXSA9ICpidWZmZXIrKzsKLSAgICAgICAgfQotICAgIH0K
LQotICAgIHJldHVybiBpbWFnZTsKLX0KLQotZmxvYXQgY2FsY3VsYXRlRGlmZmVyZW5jZShHZGtQ
aXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UsIEdka1BpeGJ1Zioq
IGRpZmZlcmVuY2VJbWFnZSkKLXsKLSAgICBpbnQgd2lkdGggPSBnZGtfcGl4YnVmX2dldF93aWR0
aChhY3R1YWxJbWFnZSk7Ci0gICAgaW50IGhlaWdodCA9IGdka19waXhidWZfZ2V0X2hlaWdodChh
Y3R1YWxJbWFnZSk7Ci0gICAgaW50IG51bWJlck9mQ2hhbm5lbHMgPSBnZGtfcGl4YnVmX2dldF9u
X2NoYW5uZWxzKGFjdHVhbEltYWdlKTsKLSAgICBpZiAoKHdpZHRoICE9IGdka19waXhidWZfZ2V0
X3dpZHRoKGJhc2VsaW5lSW1hZ2UpKQotICAgICAgICB8fCAoaGVpZ2h0ICE9IGdka19waXhidWZf
Z2V0X2hlaWdodChiYXNlbGluZUltYWdlKSkKLSAgICAgICAgfHwgKG51bWJlck9mQ2hhbm5lbHMg
IT0gZ2RrX3BpeGJ1Zl9nZXRfbl9jaGFubmVscyhiYXNlbGluZUltYWdlKSkKLSAgICAgICAgfHwg
KGdka19waXhidWZfZ2V0X2hhc19hbHBoYShhY3R1YWxJbWFnZSkgIT0gZ2RrX3BpeGJ1Zl9nZXRf
aGFzX2FscGhhKGJhc2VsaW5lSW1hZ2UpKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVy
cm9yLCB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2UgaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcy5c
biIpOwotICAgICAgICByZXR1cm4gMTAwOyAvLyBDb21wbGV0ZWx5IGRpZmZlcmVudC4KLSAgICB9
Ci0KLSAgICB1bnNpZ25lZCBjaGFyKiBkaWZmQnVmZmVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg
Y2hhcio+KG1hbGxvYyh3aWR0aCAqIGhlaWdodCkpOwotICAgIGZsb2F0IGNvdW50ID0gMDsKLSAg
ICBmbG9hdCBzdW0gPSAwOwotICAgIGZsb2F0IG1heERpc3RhbmNlID0gMDsKLSAgICBpbnQgYWN0
dWFsUm93U3RyaWRlID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGFjdHVhbEltYWdlKTsKLSAg
ICBpbnQgYmFzZVJvd1N0cmlkZSA9IGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShiYXNlbGluZUlt
YWdlKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9w
aXhlbHMoYWN0dWFsSW1hZ2UpOwotICAgIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbHMgPSBnZGtf
cGl4YnVmX2dldF9waXhlbHMoYmFzZWxpbmVJbWFnZSk7Ci0gICAgdW5zaWduZWQgY2hhciogY3Vy
cmVudERpZmZQaXhlbCA9IGRpZmZCdWZmZXI7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0
aDsgeCsrKSB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAg
ICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVsID0gYWN0dWFsUGl4ZWxzICsgKHkg
KiBhY3R1YWxSb3dTdHJpZGUpICsgKHggKiBudW1iZXJPZkNoYW5uZWxzKTsKLSAgICAgICAgICAg
IHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbCA9IGJhc2VQaXhlbHMgKyAoeSAqIGJhc2VSb3dTdHJp
ZGUpICsgKHggKiBudW1iZXJPZkNoYW5uZWxzKTsKLQotICAgICAgICAgICAgZmxvYXQgcmVkID0g
KGFjdHVhbFBpeGVsWzBdIC0gYmFzZVBpeGVsWzBdKSAvIG1heDxmbG9hdD4oMjU1IC0gYmFzZVBp
eGVsWzBdLCBiYXNlUGl4ZWxbMF0pOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSAoYWN0dWFs
UGl4ZWxbMV0gLSBiYXNlUGl4ZWxbMV0pIC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMV0s
IGJhc2VQaXhlbFsxXSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gKGFjdHVhbFBpeGVsWzJd
IC0gYmFzZVBpeGVsWzJdKSAvIG1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzJdLCBiYXNlUGl4
ZWxbMl0pOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSAoYWN0dWFsUGl4ZWxbM10gLSBiYXNl
UGl4ZWxbM10pIC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbM10sIGJhc2VQaXhlbFszXSk7
Ci0gICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IHNxcnRmKHJlZCAqIHJlZCArIGdyZWVuICog
Z3JlZW4gKyBibHVlICogYmx1ZSArIGFscGhhICogYWxwaGEpIC8gMi4wZjsKLQotICAgICAgICAg
ICAgKmN1cnJlbnREaWZmUGl4ZWwrKyA9ICh1bnNpZ25lZCBjaGFyKShkaXN0YW5jZSAqIDI1NS4w
Zik7Ci0KLSAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSAxLjBmIC8gMjU1LjBmKSB7Ci0gICAg
ICAgICAgICAgICAgY291bnQgKz0gMS4wZjsKLSAgICAgICAgICAgICAgICBzdW0gKz0gZGlzdGFu
Y2U7Ci0gICAgICAgICAgICAgICAgbWF4RGlzdGFuY2UgPSBtYXg8ZmxvYXQ+KG1heERpc3RhbmNl
LCBkaXN0YW5jZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBD
b21wdXRlIHRoZSBkaWZmZXJlbmNlIGFzIGEgcGVyY2VudGFnZSBjb21iaW5pbmcgYm90aCB0aGUg
bnVtYmVyIG9mCi0gICAgLy8gZGlmZmVyZW50IHBpeGVscyBhbmQgdGhlaXIgZGlmZmVyZW5jZSBh
bW91bnQgaS5lLiB0aGUgYXZlcmFnZSBkaXN0YW5jZQotICAgIC8vIG92ZXIgdGhlIGVudGlyZSBp
bWFnZQotICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAwOwotICAgIGlmIChjb3VudCA+IDAuMGYpCi0g
ICAgICAgIGRpZmZlcmVuY2UgPSAxMDAuMGYgKiBzdW0gLyAoaGVpZ2h0ICogd2lkdGgpOwotICAg
IGlmIChkaWZmZXJlbmNlIDw9IHRvbGVyYW5jZSkKLSAgICAgICAgZGlmZmVyZW5jZSA9IDA7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIGRpZmZlcmVuY2UgPSByb3VuZGYoZGlmZmVyZW5jZSAqIDEwMC4w
ZikgLyAxMDAuMGY7Ci0gICAgICAgIGRpZmZlcmVuY2UgPSBtYXgoZGlmZmVyZW5jZSwgMC4wMWYp
OyAvLyByb3VuZCB0byAyIGRlY2ltYWwgcGxhY2VzCi0gICAgICAgICpkaWZmZXJlbmNlSW1hZ2Ug
PSBkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5jZUJ1ZmZlcihkaWZmQnVmZmVyLCB3aWR0aCwg
aGVpZ2h0KTsKLSAgICB9Ci0KLSAgICBmcmVlKGRpZmZCdWZmZXIpOwotICAgIHJldHVybiBkaWZm
ZXJlbmNlOwotfQotCi12b2lkIHByaW50SW1hZ2UoR2RrUGl4YnVmKiBpbWFnZSkKLXsKLSAgICBj
aGFyKiBidWZmZXI7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBHRXJyb3IqIGVycm9yID0g
MDsKLSAgICBpZiAoIWdka19waXhidWZfc2F2ZV90b19idWZmZXIoaW1hZ2UsICZidWZmZXIsICZi
dWZmZXJTaXplLCAicG5nIiwgJmVycm9yLCBOVUxMKSkgewotICAgICAgICBnX2Vycm9yX2ZyZWUo
ZXJyb3IpOwotICAgICAgICByZXR1cm47IC8vIERvbid0IGJhaWwgb3V0LCBhcyB3ZSBjYW4gc3Rp
bGwgdXNlIHRoZSBwZXJjZW50YWdlIG91dHB1dC4KLSAgICB9Ci0KLSAgICBwcmludGYoIkNvbnRl
bnQtTGVuZ3RoOiAlIiBHX0dTSVpFX0ZPUk1BVCAiXG4iLCBidWZmZXJTaXplKTsKLSAgICBmd3Jp
dGUoYnVmZmVyLCAxLCBidWZmZXJTaXplLCBzdGRvdXQpOwotfQotCi12b2lkIHByaW50SW1hZ2VE
aWZmZXJlbmNlcyhHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1h
Z2UpCi17Ci0gICAgR2RrUGl4YnVmKiBkaWZmZXJlbmNlSW1hZ2UgPSAwOwotICAgIGZsb2F0IGRp
ZmZlcmVuY2UgPSBjYWxjdWxhdGVEaWZmZXJlbmNlKGJhc2VsaW5lSW1hZ2UsIGFjdHVhbEltYWdl
LCAmZGlmZmVyZW5jZUltYWdlKTsKLSAgICBpZiAoZGlmZmVyZW5jZSA+IDAuMGYpIHsKLSAgICAg
ICAgaWYgKGRpZmZlcmVuY2VJbWFnZSkgewotICAgICAgICAgICAgcHJpbnRJbWFnZShkaWZmZXJl
bmNlSW1hZ2UpOwotICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoZGlmZmVyZW5jZUltYWdlKTsK
LSAgICAgICAgfQotICAgICAgICBwcmludGYoImRpZmY6ICUwMS4yZiUlIGZhaWxlZFxuIiwgZGlm
ZmVyZW5jZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgcGFz
c2VkXG4iLCBkaWZmZXJlbmNlKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3Zb
XSkKLXsKLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBHT3B0aW9uQ29udGV4dCogY29udGV4
dCA9IGdfb3B0aW9uX2NvbnRleHRfbmV3KCItIGNvbXBhcmUgdHdvIGltYWdlIGZpbGVzLCBwcmlu
dGluZyB0aGVpciBwZXJjZW50YWdlIGRpZmZlcmVuY2UgYW5kIHRoZSBkaWZmZXJlbmNlIGltYWdl
IHRvIHN0ZG91dCIpOwotICAgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyhjb250
ZXh0LCBjb21tYW5kTGluZU9wdGlvbkVudHJpZXMsIDApOwotICAgIGlmICghZ19vcHRpb25fY29u
dGV4dF9wYXJzZShjb250ZXh0LCAmYXJnYywgJmFyZ3YsICZlcnJvcikpIHsKLSAgICAgICAgcHJp
bnRmKCJPcHRpb24gcGFyc2luZyBmYWlsZWQ6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAg
ICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAg
IEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UgPSAwOwotICAgIEdka1BpeGJ1ZiogYmFzZWxpbmVJbWFn
ZSA9IDA7Ci0gICAgY2hhciBidWZmZXJbMjA0OF07Ci0gICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwg
c2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSkgewotICAgICAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCBu
ZXdsaW5lIGludG8gYSBOVUwgY2hhcmFjdGVyIHNvIHRoYXQgc3RydG9rIGRvZXNuJ3QgcHJvZHVj
ZSBpdC4KLSAgICAgICAgY2hhciogbmV3TGluZUNoYXJhY3RlciA9IHN0cmNocihidWZmZXIsICdc
bicpOwotICAgICAgICBpZiAobmV3TGluZUNoYXJhY3RlcikKLSAgICAgICAgICAgICpuZXdMaW5l
Q2hhcmFjdGVyID0gJ1wwJzsKLQotICAgICAgICBpZiAoIXN0cm5jbXAoIkNvbnRlbnQtTGVuZ3Ro
OiAiLCBidWZmZXIsIDE2KSkgewotICAgICAgICAgICAgZ2NoYXIqKiB0b2tlbnMgPSBnX3N0cnNw
bGl0KGJ1ZmZlciwgIiAiLCAwKTsKLSAgICAgICAgICAgIGlmICghdG9rZW5zWzFdKSB7Ci0gICAg
ICAgICAgICAgICAgZ19zdHJmcmVldih0b2tlbnMpOwotICAgICAgICAgICAgICAgIHByaW50Zigi
RXJyb3IsIGltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZpZWQuLlxuIik7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxvbmcgaW1hZ2VTaXpl
ID0gc3RydG9sKHRva2Vuc1sxXSwgMCwgMTApOwotICAgICAgICAgICAgZ19zdHJmcmVldih0b2tl
bnMpOwotICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWFjdHVhbEltYWdlKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKCEoYWN0dWFsSW1hZ2UgPSByZWFkUGl4YnVmRnJvbVN0ZGluKGlt
YWdlU2l6ZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IsIGNvdWxkIG5v
dCByZWFkIGFjdHVhbCBpbWFnZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6ZSA+IDAg
JiYgIWJhc2VsaW5lSW1hZ2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoIShiYXNlbGluZUltYWdl
ID0gcmVhZFBpeGJ1ZkZyb21TdGRpbihpbWFnZVNpemUpKSkgewotICAgICAgICAgICAgICAgICAg
ICBwcmludGYoIkVycm9yLCBjb3VsZCBub3QgcmVhZCBiYXNlbGluZSBpbWFnZS5cbiIpOwotICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IsIGltYWdlIHNpemUgbXVz
dCBiZSBzcGVjaWZpZWQuLlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0dWFsSW1hZ2UgJiYgYmFzZWxpbmVJ
bWFnZSkgewotICAgICAgICAgICAgcHJpbnRJbWFnZURpZmZlcmVuY2VzKGJhc2VsaW5lSW1hZ2Us
IGFjdHVhbEltYWdlKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGFjdHVhbEltYWdlKTsK
LSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGJhc2VsaW5lSW1hZ2UpOwotICAgICAgICAgICAg
YWN0dWFsSW1hZ2UgPSAwOwotICAgICAgICAgICAgYmFzZWxpbmVJbWFnZSA9IDA7Ci0gICAgICAg
IH0KLQotICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242737</attachid>
            <date>2014-12-07 03:29:17 -0800</date>
            <delta_ts>2017-04-07 10:30:39 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-85299-20141207122953.patch</filename>
            <type>text/plain</type>
            <size>21686</size>
            <attacher name="Gustavo Noronha (kov)">gustavo</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc2OTE4CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNWU1N2FlZDIzNGQyMTI4Yzg4ZmIzNjE4MzZmOGRjZDk3
MmNmNGYxNi4uYWJmNzY3MzBmYzU1MjIzZTYyNzM0YWViODFhZTRjN2FhMWQ5NTIwNSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2
IEBACisyMDE0LTEyLTA3ICBKb3PDqSBEYXBlbmEgUGF6ICA8amRhcGVuYUBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHVEtdIFJlbW92ZSB0aGUgR0RLIGRlcGVuZGVuY3kgZnJvbSBJbWFnZURpZmYK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1Mjk5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgQ2FybG9zIEdhcmNpYSBDYW1wb3MuCisKKyAgICAgICAgUmVt
b3ZlZCBnZGsgZGVwZW5kZW5jeSBvbiBJbWFnZURpZmYgZm9yIGd0aywgdXNpbmcgb25seSBjYWly
by4KKyAgICAgICAgQWxzbyByZW5hbWVkIHRoZSBmb2xkZXIgdG8gY2Fpcm8gYXMgaXQgZG9lcyBu
b3QgZ2xpYi9ndGsKKyAgICAgICAgc3BlY2lmaWMgYW55bW9yZS4KKworICAgICAgICAqIEltYWdl
RGlmZi9QbGF0Zm9ybUdUSy5jbWFrZToKKyAgICAgICAgKiBJbWFnZURpZmYvY2Fpcm8vSW1hZ2VE
aWZmLmNwcDogUmVuYW1lZCBmcm9tIFRvb2xzL0ltYWdlRGlmZi9ndGsvSW1hZ2VEaWZmLmNwcC4K
KyAgICAgICAgKGNhaXJvU3RkaW5SZWFkZXIpOgorICAgICAgICAocmVhZFN1cmZhY2VGcm9tU3Rk
aW4pOgorICAgICAgICAoZm9ybWF0Q2hhbm5lbHMpOgorICAgICAgICAoZGlmZmVyZW5jZUltYWdl
RnJvbURpZmZlcmVuY2VCdWZmZXIpOgorICAgICAgICAoY2FsY3VsYXRlRGlmZmVyZW5jZSk6Cisg
ICAgICAgICh3cml0ZVRvUGl4ZWxEYXRhKToKKyAgICAgICAgKHByaW50SW1hZ2UpOgorICAgICAg
ICAocHJpbnRJbWFnZURpZmZlcmVuY2VzKToKKyAgICAgICAgKG1haW4pOgorCiAyMDE0LTEyLTA3
ICBDc2FiYSBPc3p0cm9nb27DoWMgIDxvc3N5QHdlYmtpdC5vcmc+CiAKICAgICAgICAgW0VGTF1b
amhidWlsZF0gRml4IGxpYnNvdXAgYnVpbGQgd2l0aCBjbGFuZwpkaWZmIC0tZ2l0IGEvVG9vbHMv
SW1hZ2VEaWZmL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMvSW1hZ2VEaWZmL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IGQ0NWI4MTk2MmM4ZmZkMzc1NDk5N2U4MWZmZWFlMGE0NzE0ZDc3YmYuLmJj
ZjdhYjc5YWFmYmMyOWY2YWE0MGQyNjJjMDIxYTc5ZGEyZWI5ZmIgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0ltYWdlRGlmZi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9JbWFnZURpZmYvUGxhdGZv
cm1HVEsuY21ha2UKQEAgLTEsNSArMSw1IEBACiBzZXQoSU1BR0VfRElGRl9TT1VSQ0VTCi0gICAg
JHtJTUFHRV9ESUZGX0RJUn0vZ3RrL0ltYWdlRGlmZi5jcHAKKyAgICAke0lNQUdFX0RJRkZfRElS
fS9jYWlyby9JbWFnZURpZmYuY3BwCiApCiAKIGxpc3QoQVBQRU5EIElNQUdFX0RJRkZfSU5DTFVE
RV9ESVJFQ1RPUklFUwpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VEaWZmL2NhaXJvL0ltYWdlRGlm
Zi5jcHAgYi9Ub29scy9JbWFnZURpZmYvY2Fpcm8vSW1hZ2VEaWZmLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44
MGY2OGNjODdhNTQzOWJjMjc3YzlmZDhkZDNlZDdjYTljYjA5OTk3Ci0tLSAvZGV2L251bGwKKysr
IGIvVG9vbHMvSW1hZ2VEaWZmL2NhaXJvL0ltYWdlRGlmZi5jcHAKQEAgLTAsMCArMSwyNjAgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgWmFuIERvYmVyc2VrIDx6YW5kb2JlcnNla0BnbWFp
bC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKKyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lu
Y2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPGNtYXRoPgor
I2luY2x1ZGUgPGNzdGRpbz4KKyNpbmNsdWRlIDxjc3RkbGliPgorI2luY2x1ZGUgPGNzdHJpbmc+
CisjaW5jbHVkZSA8d3RmL0V4cG9ydE1hY3Jvcy5oPgorI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5o
PgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRl
IDxmY250bC5oPgorI2VuZGlmCisKK3VzaW5nIG5hbWVzcGFjZSBzdGQ7CisKK2NhaXJvX3N0YXR1
c190IGNhaXJvU3RkaW5SZWFkZXIodm9pZCogY2xvc3VyZSwgdW5zaWduZWQgY2hhciogZGF0YSwg
dW5zaWduZWQgbGVuZ3RoKQoreworICAgIHNpemVfdCogcGVuZGluZ0ltYWdlU2l6ZSA9IHN0YXRp
Y19jYXN0PHNpemVfdCo+KGNsb3N1cmUpOworCisgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWlu
PHNpemVfdD4oKnBlbmRpbmdJbWFnZVNpemUsIGxlbmd0aCk7CisgICAgc2l6ZV90IGJ5dGVzUmVh
ZCA9IGZyZWFkKGRhdGEsIGJ5dGVzVG9SZWFkLCAxLCBzdGRpbik7CisKKyAgICBpZiAoYnl0ZXNS
ZWFkIDwgYnl0ZXNUb1JlYWQpCisgICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfUkVBRF9FUlJP
UjsKKworICAgICpwZW5kaW5nSW1hZ2VTaXplIC09IHN0YXRpY19jYXN0PHNpemVfdD4oYnl0ZXNS
ZWFkKTsKKworICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKworY2Fpcm9fc3Vy
ZmFjZV90KiByZWFkU3VyZmFjZUZyb21TdGRpbihzaXplX3QgaW1hZ2VTaXplKQoreworICAgIHJl
dHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mcm9tX3BuZ19zdHJlYW0oY2Fpcm9TdGRp
blJlYWRlciwgJmltYWdlU2l6ZSk7Cit9CisKK3Vuc2lnbmVkIGZvcm1hdENoYW5uZWxzKGNhaXJv
X2Zvcm1hdF90IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgQ0FJ
Uk9fRk9STUFUX0FSR0IzMjoKKyAgICBjYXNlIENBSVJPX0ZPUk1BVF9SR0IyNDoKKyNpZiAoQ0FJ
Uk9fVkVSU0lPTiA+PSBDQUlST19WRVJTSU9OX0VOQ09ERSgxLCAxMiwgMCkpCisgICAgY2FzZSBD
QUlST19GT1JNQVRfUkdCMzA6CisjZW5kaWYKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBD
QUlST19GT1JNQVRfQTg6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgQ0FJUk9fRk9STUFU
X1JHQjE2XzU2NToKKyAgICAgICAgcmV0dXJuIDI7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0
dXJuIDA7CisgICAgfTsKK30KKworY2Fpcm9fc3VyZmFjZV90KiBkaWZmZXJlbmNlSW1hZ2VGcm9t
RGlmZmVyZW5jZUJ1ZmZlcih1bnNpZ25lZCBjaGFyKiBidWZmZXIsIGludCB3aWR0aCwgaW50IGhl
aWdodCkKK3sKKyAgICBjYWlyb19zdXJmYWNlX3QqIGltYWdlID0gY2Fpcm9faW1hZ2Vfc3VyZmFj
ZV9jcmVhdGUoQ0FJUk9fRk9STUFUX1JHQjI0LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMoaW1hZ2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAg
ICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShpbWFnZSk7CisgICAgICAgIHJldHVybiBudWxscHRy
OworICAgIH0KKworICAgIGludCByb3dTdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9z
dHJpZGUoaW1hZ2UpOworICAgIHVuc2lnbmVkIGNoYXIqIGRpZmZQaXhlbHMgPSBjYWlyb19pbWFn
ZV9zdXJmYWNlX2dldF9kYXRhKGltYWdlKTsKKyAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRo
OyB4KyspIHsKKyAgICAgICAgZm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgeworICAg
ICAgICAgICAgdW5zaWduZWQgY2hhciogZGlmZlBpeGVsID0gZGlmZlBpeGVscyArICh5ICogcm93
U3RyaWRlKSArICh4ICogMyk7CisgICAgICAgICAgICBkaWZmUGl4ZWxbMF0gPSBkaWZmUGl4ZWxb
MV0gPSBkaWZmUGl4ZWxbMl0gPSAqYnVmZmVyKys7CisgICAgICAgIH0KKyAgICB9CisgICAgY2Fp
cm9fc3VyZmFjZV9tYXJrX2RpcnR5KGltYWdlKTsKKworICAgIHJldHVybiBpbWFnZTsKK30KKwor
ZmxvYXQgY2FsY3VsYXRlRGlmZmVyZW5jZShjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5lSW1hZ2Us
IGNhaXJvX3N1cmZhY2VfdCogYWN0dWFsSW1hZ2UsIGZsb2F0IHRvbGVyYW5jZSwgY2Fpcm9fc3Vy
ZmFjZV90KiogZGlmZmVyZW5jZUltYWdlKQoreworICAgIGludCB3aWR0aCA9IGNhaXJvX2ltYWdl
X3N1cmZhY2VfZ2V0X3dpZHRoKGFjdHVhbEltYWdlKTsKKyAgICBpbnQgaGVpZ2h0ID0gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KGFjdHVhbEltYWdlKTsKKyAgICBjYWlyb19mb3JtYXRf
dCBmb3JtYXQgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9mb3JtYXQoYWN0dWFsSW1hZ2UpOwor
ICAgIGlmICgod2lkdGggIT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgoYmFzZWxpbmVJ
bWFnZSkpCisgICAgICAgIHx8IChoZWlnaHQgIT0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfaGVp
Z2h0KGJhc2VsaW5lSW1hZ2UpKQorICAgICAgICB8fCAoZm9ybWF0ICE9IGNhaXJvX2ltYWdlX3N1
cmZhY2VfZ2V0X2Zvcm1hdChiYXNlbGluZUltYWdlKSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRl
cnIsICJFcnJvciwgdGVzdCBhbmQgcmVmZXJlbmNlIGltYWdlIGhhdmUgZGlmZmVyZW50IHByb3Bl
cnRpZXMuXG4iKTsKKyAgICAgICAgcmV0dXJuIDEwMDsgLy8gQ29tcGxldGVseSBkaWZmZXJlbnQu
CisgICAgfQorCisgICAgdW5zaWduZWQgY2hhciogZGlmZkJ1ZmZlciA9IHN0YXRpY19jYXN0PHVu
c2lnbmVkIGNoYXIqPihtYWxsb2Mod2lkdGggKiBoZWlnaHQpKTsKKyAgICBmbG9hdCBjb3VudCA9
IDA7CisgICAgZmxvYXQgc3VtID0gMDsKKyAgICBmbG9hdCBtYXhEaXN0YW5jZSA9IDA7CisgICAg
aW50IGFjdHVhbFJvd1N0cmlkZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3N0cmlkZShhY3R1
YWxJbWFnZSk7CisgICAgaW50IGJhc2VSb3dTdHJpZGUgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUoYmFzZWxpbmVJbWFnZSk7CisgICAgdW5zaWduZWQgY2hhciogYWN0dWFsUGl4ZWxz
ID0gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZGF0YShhY3R1YWxJbWFnZSk7CisgICAgdW5zaWdu
ZWQgY2hhciogYmFzZVBpeGVscyA9IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2RhdGEoYmFzZWxp
bmVJbWFnZSk7CisgICAgdW5zaWduZWQgY2hhciogY3VycmVudERpZmZQaXhlbCA9IGRpZmZCdWZm
ZXI7CisgICAgdW5zaWduZWQgbnVtYmVyT2ZDaGFubmVscyA9IGZvcm1hdENoYW5uZWxzKGZvcm1h
dCk7CisgICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7CisgICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IGFjdHVhbFBpeGVsID0gYWN0dWFsUGl4ZWxzICsgKHkgKiBhY3R1YWxSb3dTdHJpZGUpICsgKHgg
KiBudW1iZXJPZkNoYW5uZWxzKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhl
bCA9IGJhc2VQaXhlbHMgKyAoeSAqIGJhc2VSb3dTdHJpZGUpICsgKHggKiBudW1iZXJPZkNoYW5u
ZWxzKTsKKworICAgICAgICAgICAgZmxvYXQgcmVkID0gKGFjdHVhbFBpeGVsWzBdIC0gYmFzZVBp
eGVsWzBdKSAvIG1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzBdLCBiYXNlUGl4ZWxbMF0pOwor
ICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSAoYWN0dWFsUGl4ZWxbMV0gLSBiYXNlUGl4ZWxbMV0p
IC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMV0sIGJhc2VQaXhlbFsxXSk7CisgICAgICAg
ICAgICBmbG9hdCBibHVlID0gKGFjdHVhbFBpeGVsWzJdIC0gYmFzZVBpeGVsWzJdKSAvIG1heDxm
bG9hdD4oMjU1IC0gYmFzZVBpeGVsWzJdLCBiYXNlUGl4ZWxbMl0pOworICAgICAgICAgICAgZmxv
YXQgYWxwaGEgPSAoYWN0dWFsUGl4ZWxbM10gLSBiYXNlUGl4ZWxbM10pIC8gbWF4PGZsb2F0Pigy
NTUgLSBiYXNlUGl4ZWxbM10sIGJhc2VQaXhlbFszXSk7CisgICAgICAgICAgICBmbG9hdCBkaXN0
YW5jZSA9IHNxcnRmKHJlZCAqIHJlZCArIGdyZWVuICogZ3JlZW4gKyBibHVlICogYmx1ZSArIGFs
cGhhICogYWxwaGEpIC8gMi4wZjsKKworICAgICAgICAgICAgKmN1cnJlbnREaWZmUGl4ZWwrKyA9
IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRpc3RhbmNlICogMjU1LjBmKTsKKworICAgICAg
ICAgICAgaWYgKGRpc3RhbmNlID49IDEuMGYgLyAyNTUuMGYpIHsKKyAgICAgICAgICAgICAgICBj
b3VudCArPSAxLjBmOworICAgICAgICAgICAgICAgIHN1bSArPSBkaXN0YW5jZTsKKyAgICAgICAg
ICAgICAgICBtYXhEaXN0YW5jZSA9IG1heDxmbG9hdD4obWF4RGlzdGFuY2UsIGRpc3RhbmNlKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIENvbXB1dGUgdGhlIGRp
ZmZlcmVuY2UgYXMgYSBwZXJjZW50YWdlIGNvbWJpbmluZyBib3RoIHRoZSBudW1iZXIgb2YKKyAg
ICAvLyBkaWZmZXJlbnQgcGl4ZWxzIGFuZCB0aGVpciBkaWZmZXJlbmNlIGFtb3VudCBpLmUuIHRo
ZSBhdmVyYWdlIGRpc3RhbmNlCisgICAgLy8gb3ZlciB0aGUgZW50aXJlIGltYWdlCisgICAgZmxv
YXQgZGlmZmVyZW5jZTsKKyAgICBpZiAoY291bnQgPiAwLjBmKQorICAgICAgICBkaWZmZXJlbmNl
ID0gMTAwLjBmICogc3VtIC8gKGhlaWdodCAqIHdpZHRoKTsKKyAgICBpZiAoZGlmZmVyZW5jZSA8
PSB0b2xlcmFuY2UpCisgICAgICAgIGRpZmZlcmVuY2UgPSAwOworICAgIGVsc2UgeworICAgICAg
ICBkaWZmZXJlbmNlID0gcm91bmRmKGRpZmZlcmVuY2UgKiAxMDAuMGYpIC8gMTAwLjBmOworICAg
ICAgICBkaWZmZXJlbmNlID0gbWF4KGRpZmZlcmVuY2UsIDAuMDFmKTsgLy8gcm91bmQgdG8gMiBk
ZWNpbWFsIHBsYWNlcworICAgICAgICAqZGlmZmVyZW5jZUltYWdlID0gZGlmZmVyZW5jZUltYWdl
RnJvbURpZmZlcmVuY2VCdWZmZXIoZGlmZkJ1ZmZlciwgd2lkdGgsIGhlaWdodCk7CisgICAgfQor
CisgICAgZnJlZShkaWZmQnVmZmVyKTsKKyAgICByZXR1cm4gZGlmZmVyZW5jZTsKK30KKworY2Fp
cm9fc3RhdHVzX3Qgd3JpdGVUb1BpeGVsRGF0YSh2b2lkKiBjbG9zdXJlLCBjb25zdCB1bnNpZ25l
ZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNo
YXI+KiBwaXhlbERhdGEgPSBzdGF0aWNfY2FzdDxWZWN0b3I8dW5zaWduZWQgY2hhcj4qPihjbG9z
dXJlKTsKKyAgICBwaXhlbERhdGEtPmFwcGVuZChkYXRhLCBsZW5ndGgpOworICAgIHJldHVybiBD
QUlST19TVEFUVVNfU1VDQ0VTUzsKK30KKwordm9pZCBwcmludEltYWdlKGNhaXJvX3N1cmZhY2Vf
dCogaW1hZ2UpCit7CisgICAgVmVjdG9yPHVuc2lnbmVkIGNoYXI+IHBpeGVsRGF0YTsKKyAgICBp
ZiAoY2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKGltYWdlLCB3cml0ZVRvUGl4ZWxE
YXRhLCAmcGl4ZWxEYXRhKSAhPSBDQUlST19TVEFUVVNfU1VDQ0VTUykKKyAgICAgICAgcmV0dXJu
OyAvLyBEb24ndCBiYWlsIG91dCwgYXMgd2UgY2FuIHN0aWxsIHVzZSB0aGUgcGVyY2VudGFnZSBv
dXRwdXQuCisKKyAgICBjb25zdCBzaXplX3QgZGF0YUxlbmd0aCA9IHBpeGVsRGF0YS5zaXplKCk7
CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSA9IHBpeGVsRGF0YS5kYXRhKCk7CisgICAg
cHJpbnRmKCJDb250ZW50LUxlbmd0aDogJWRcbiIsIGRhdGFMZW5ndGgpOworICAgIGZ3cml0ZShk
YXRhLCBkYXRhTGVuZ3RoLCAxLCBzdGRvdXQpOworfQorCit2b2lkIHByaW50SW1hZ2VEaWZmZXJl
bmNlcyhjYWlyb19zdXJmYWNlX3QqIGJhc2VsaW5lSW1hZ2UsIGNhaXJvX3N1cmZhY2VfdCogYWN0
dWFsSW1hZ2UsIGZsb2F0IHRvbGVyYW5jZSkKK3sKKyAgICBjYWlyb19zdXJmYWNlX3QqIGRpZmZl
cmVuY2VJbWFnZSA9IG51bGxwdHI7CisgICAgZmxvYXQgZGlmZmVyZW5jZSA9IGNhbGN1bGF0ZURp
ZmZlcmVuY2UoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2UsIHRvbGVyYW5jZSwgJmRpZmZlcmVu
Y2VJbWFnZSk7CisgICAgaWYgKGRpZmZlcmVuY2UgPiAwLjBmKSB7CisgICAgICAgIGlmIChkaWZm
ZXJlbmNlSW1hZ2UpIHsKKyAgICAgICAgICAgIHByaW50SW1hZ2UoZGlmZmVyZW5jZUltYWdlKTsK
KyAgICAgICAgICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJveShkaWZmZXJlbmNlSW1hZ2UpOworICAg
ICAgICB9CisgICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgZmFpbGVkXG4iLCBkaWZmZXJl
bmNlKTsKKyAgICB9IGVsc2UKKyAgICAgICAgcHJpbnRmKCJkaWZmOiAlMDEuMmYlJSBwYXNzZWRc
biIsIGRpZmZlcmVuY2UpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQor
eworI2lmIFBMQVRGT1JNKFdJTikKKyAgICBfc2V0bW9kZSgwLCBfT19CSU5BUlkpOworICAgIF9z
ZXRtb2RlKDEsIF9PX0JJTkFSWSk7CisjZW5kaWYKKworICAgIGZsb2F0IHRvbGVyYW5jZSA9IDA7
CisKKyAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoIXN0
cmNtcChhcmd2W2ldLCAiLXQiKSB8fCAhc3RyY21wKGFyZ3ZbaV0sICItLXRvbGVyYW5jZSIpKSB7
CisgICAgICAgICAgICBpZiAoaSA+PSBhcmdjIC0gMSkKKyAgICAgICAgICAgICAgICBleGl0KDEp
OworICAgICAgICAgICAgdG9sZXJhbmNlID0gc3RydG9mKGFyZ3ZbaSArIDFdLCAwKTsKKyAgICAg
ICAgICAgICsraTsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCisg
ICAgY2Fpcm9fc3VyZmFjZV90KiBhY3R1YWxJbWFnZSA9IG51bGxwdHI7CisgICAgY2Fpcm9fc3Vy
ZmFjZV90KiBiYXNlbGluZUltYWdlID0gbnVsbHB0cjsKKyAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsK
KyAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7CisgICAg
ICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IG5ld2xpbmUgaW50byBhIE5VTCBjaGFyYWN0ZXIgc28g
dGhhdCBzdHJ0b2sgZG9lc24ndCBwcm9kdWNlIGl0LgorICAgICAgICBjaGFyKiBuZXdMaW5lQ2hh
cmFjdGVyID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisgICAgICAgIGlmIChuZXdMaW5lQ2hhcmFj
dGVyKQorICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOworCisgICAgICAgIGlm
ICghc3RybmNtcCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZlciwgMTYpKSB7CisgICAgICAgICAg
ICBzdHJ0b2soYnVmZmVyLCAiICIpOworICAgICAgICAgICAgc2l6ZV90IGltYWdlU2l6ZSA9IHN0
YXRpY19jYXN0PHNpemVfdD4oc3RydG9sKHN0cnRvaygwLCAiICIpLCAwLCAxMCkpOworICAgICAg
ICAgICAgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWFjdHVhbEltYWdlKSB7CisgICAgICAgICAgICAg
ICAgaWYgKCEoYWN0dWFsSW1hZ2UgPSByZWFkU3VyZmFjZUZyb21TdGRpbihpbWFnZVNpemUpKSkg
eworICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yLCBjb3VsZCBub3QgcmVhZCBhY3R1
YWwgaW1hZ2UuXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFnZVNpemUgPiAwICYmICFiYXNlbGlu
ZUltYWdlKSB7CisgICAgICAgICAgICAgICAgaWYgKCEoYmFzZWxpbmVJbWFnZSA9IHJlYWRTdXJm
YWNlRnJvbVN0ZGluKGltYWdlU2l6ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIHByaW50Zigi
RXJyb3IsIGNvdWxkIG5vdCByZWFkIGJhc2VsaW5lIGltYWdlLlxuIik7CisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNp
ZmllZC4uXG4iKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChhY3R1YWxJbWFnZSAmJiBiYXNlbGluZUltYWdlKSB7Cisg
ICAgICAgICAgICBwcmludEltYWdlRGlmZmVyZW5jZXMoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1h
Z2UsIHRvbGVyYW5jZSk7CisgICAgICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koYWN0dWFs
SW1hZ2UpOworICAgICAgICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KGJhc2VsaW5lSW1hZ2Up
OworICAgICAgICAgICAgYWN0dWFsSW1hZ2UgPSBudWxscHRyOworICAgICAgICAgICAgYmFzZWxp
bmVJbWFnZSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBmZmx1c2goc3Rkb3V0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlmZi9n
dGsvSW1hZ2VEaWZmLmNwcCBiL1Rvb2xzL0ltYWdlRGlmZi9ndGsvSW1hZ2VEaWZmLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE1ZmNmZWQyNjIxYzBkODQ5MTU2MmExYjRlZDM0
NzQ3NDNkMjc3ZS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Ub29scy9JbWFnZURpZmYvZ3RrL0ltYWdlRGlmZi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwy
MzcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBaYW4gRG9iZXJzZWsgPHphbmRv
YmVyc2VrQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAxMCBJZ2FsaWEgUy5MLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPGFsZ29y
aXRobT4KLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxjc3RkaW8+Ci0jaW5jbHVkZSA8Y3N0
ZGxpYj4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGdkay9nZGsuaD4KLQotdXNpbmcg
bmFtZXNwYWNlIHN0ZDsKLQotc3RhdGljIGRvdWJsZSB0b2xlcmFuY2UgPSAwOwotc3RhdGljIEdP
cHRpb25FbnRyeSBjb21tYW5kTGluZU9wdGlvbkVudHJpZXNbXSA9IAotewotICAgIHsgInRvbGVy
YW5jZSIsIDAsIDAsIEdfT1BUSU9OX0FSR19ET1VCTEUsICZ0b2xlcmFuY2UsICJQZXJjZW50YWdl
IGRpZmZlcmVuY2UgYmV0d2VlbiBpbWFnZXMgYmVmb3JlIGNvbnNpZGVyaW5nIHRoZW0gZGlmZmVy
ZW50IiwgIlQiIH0sCi0gICAgeyAwLCAwLCAwLCBHX09QVElPTl9BUkdfTk9ORSwgMCwgMCwgMCB9
LAotfTsKLQotR2RrUGl4YnVmKiByZWFkUGl4YnVmRnJvbVN0ZGluKGxvbmcgaW1hZ2VTaXplKQot
ewotICAgIHVuc2lnbmVkIGNoYXIgaW1hZ2VCdWZmZXJbMjA0OF07Ci0gICAgR2RrUGl4YnVmTG9h
ZGVyKiBsb2FkZXIgPSBnZGtfcGl4YnVmX2xvYWRlcl9uZXdfd2l0aF90eXBlKCJwbmciLCAwKTsK
LSAgICBHRXJyb3IqIGVycm9yID0gMDsKLQotICAgIHdoaWxlIChpbWFnZVNpemUgPiAwKSB7Ci0g
ICAgICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1pbjxpbnQ+KGltYWdlU2l6ZSwgMjA0OCk7Ci0g
ICAgICAgIHNpemVfdCBieXRlc1JlYWQgPSBmcmVhZChpbWFnZUJ1ZmZlciwgMSwgYnl0ZXNUb1Jl
YWQsIHN0ZGluKTsKLQotICAgICAgICBpZiAoIWdka19waXhidWZfbG9hZGVyX3dyaXRlKGxvYWRl
ciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihpbWFnZUJ1ZmZlciksIGJ5dGVzUmVh
ZCwgJmVycm9yKSkgewotICAgICAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAg
ICAgIGdka19waXhidWZfbG9hZGVyX2Nsb3NlKGxvYWRlciwgMCk7Ci0gICAgICAgICAgICBnX29i
amVjdF91bnJlZihsb2FkZXIpOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpbWFnZVNpemUgLT0gc3RhdGljX2Nhc3Q8aW50PihieXRlc1JlYWQpOwotICAgIH0K
LQotICAgIGdka19waXhidWZfbG9hZGVyX2Nsb3NlKGxvYWRlciwgMCk7Ci0gICAgR2RrUGl4YnVm
KiBkZWNvZGVkSW1hZ2UgPSBnZGtfcGl4YnVmX2xvYWRlcl9nZXRfcGl4YnVmKGxvYWRlcik7Ci0g
ICAgZ19vYmplY3RfcmVmKGRlY29kZWRJbWFnZSk7Ci0gICAgcmV0dXJuIGRlY29kZWRJbWFnZTsK
LX0KLQotR2RrUGl4YnVmKiBkaWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5jZUJ1ZmZlcih1bnNp
Z25lZCBjaGFyKiBidWZmZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBHZGtQaXhi
dWYqIGltYWdlID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NPTE9SU1BBQ0VfUkdCLCBGQUxTRSwgOCwg
d2lkdGgsIGhlaWdodCk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIGltYWdlOwot
Ci0gICAgaW50IHJvd1N0cmlkZSA9IGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShpbWFnZSk7Ci0g
ICAgdW5zaWduZWQgY2hhciogZGlmZlBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhpbWFn
ZSk7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAgICAgIGZvciAo
aW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIq
IGRpZmZQaXhlbCA9IGRpZmZQaXhlbHMgKyAoeSAqIHJvd1N0cmlkZSkgKyAoeCAqIDMpOwotICAg
ICAgICAgICAgZGlmZlBpeGVsWzBdID0gZGlmZlBpeGVsWzFdID0gZGlmZlBpeGVsWzJdID0gKmJ1
ZmZlcisrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdlOwotfQotCi1mbG9h
dCBjYWxjdWxhdGVEaWZmZXJlbmNlKEdka1BpeGJ1ZiogYmFzZWxpbmVJbWFnZSwgR2RrUGl4YnVm
KiBhY3R1YWxJbWFnZSwgR2RrUGl4YnVmKiogZGlmZmVyZW5jZUltYWdlKQotewotICAgIGludCB3
aWR0aCA9IGdka19waXhidWZfZ2V0X3dpZHRoKGFjdHVhbEltYWdlKTsKLSAgICBpbnQgaGVpZ2h0
ID0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGFjdHVhbEltYWdlKTsKLSAgICBpbnQgbnVtYmVyT2ZD
aGFubmVscyA9IGdka19waXhidWZfZ2V0X25fY2hhbm5lbHMoYWN0dWFsSW1hZ2UpOwotICAgIGlm
ICgod2lkdGggIT0gZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoYmFzZWxpbmVJbWFnZSkpCi0gICAgICAg
IHx8IChoZWlnaHQgIT0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGJhc2VsaW5lSW1hZ2UpKQotICAg
ICAgICB8fCAobnVtYmVyT2ZDaGFubmVscyAhPSBnZGtfcGl4YnVmX2dldF9uX2NoYW5uZWxzKGJh
c2VsaW5lSW1hZ2UpKQotICAgICAgICB8fCAoZ2RrX3BpeGJ1Zl9nZXRfaGFzX2FscGhhKGFjdHVh
bEltYWdlKSAhPSBnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEoYmFzZWxpbmVJbWFnZSkpKSB7Ci0g
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IsIHRlc3QgYW5kIHJlZmVyZW5jZSBpbWFnZSBo
YXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzLlxuIik7Ci0gICAgICAgIHJldHVybiAxMDA7IC8vIENv
bXBsZXRlbHkgZGlmZmVyZW50LgotICAgIH0KLQotICAgIHVuc2lnbmVkIGNoYXIqIGRpZmZCdWZm
ZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFsbG9jKHdpZHRoICogaGVpZ2h0KSk7
Ci0gICAgZmxvYXQgY291bnQgPSAwOwotICAgIGZsb2F0IHN1bSA9IDA7Ci0gICAgZmxvYXQgbWF4
RGlzdGFuY2UgPSAwOwotICAgIGludCBhY3R1YWxSb3dTdHJpZGUgPSBnZGtfcGl4YnVmX2dldF9y
b3dzdHJpZGUoYWN0dWFsSW1hZ2UpOwotICAgIGludCBiYXNlUm93U3RyaWRlID0gZ2RrX3BpeGJ1
Zl9nZXRfcm93c3RyaWRlKGJhc2VsaW5lSW1hZ2UpOwotICAgIHVuc2lnbmVkIGNoYXIqIGFjdHVh
bFBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhhY3R1YWxJbWFnZSk7Ci0gICAgdW5zaWdu
ZWQgY2hhciogYmFzZVBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhiYXNlbGluZUltYWdl
KTsKLSAgICB1bnNpZ25lZCBjaGFyKiBjdXJyZW50RGlmZlBpeGVsID0gZGlmZkJ1ZmZlcjsKLSAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYWN0dWFs
UGl4ZWwgPSBhY3R1YWxQaXhlbHMgKyAoeSAqIGFjdHVhbFJvd1N0cmlkZSkgKyAoeCAqIG51bWJl
ck9mQ2hhbm5lbHMpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYmFzZVBpeGVsID0gYmFz
ZVBpeGVscyArICh5ICogYmFzZVJvd1N0cmlkZSkgKyAoeCAqIG51bWJlck9mQ2hhbm5lbHMpOwot
Ci0gICAgICAgICAgICBmbG9hdCByZWQgPSAoYWN0dWFsUGl4ZWxbMF0gLSBiYXNlUGl4ZWxbMF0p
IC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMF0sIGJhc2VQaXhlbFswXSk7Ci0gICAgICAg
ICAgICBmbG9hdCBncmVlbiA9IChhY3R1YWxQaXhlbFsxXSAtIGJhc2VQaXhlbFsxXSkgLyBtYXg8
ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFsxXSwgYmFzZVBpeGVsWzFdKTsKLSAgICAgICAgICAgIGZs
b2F0IGJsdWUgPSAoYWN0dWFsUGl4ZWxbMl0gLSBiYXNlUGl4ZWxbMl0pIC8gbWF4PGZsb2F0Pigy
NTUgLSBiYXNlUGl4ZWxbMl0sIGJhc2VQaXhlbFsyXSk7Ci0gICAgICAgICAgICBmbG9hdCBhbHBo
YSA9IChhY3R1YWxQaXhlbFszXSAtIGJhc2VQaXhlbFszXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJh
c2VQaXhlbFszXSwgYmFzZVBpeGVsWzNdKTsKLSAgICAgICAgICAgIGZsb2F0IGRpc3RhbmNlID0g
c3FydGYocmVkICogcmVkICsgZ3JlZW4gKiBncmVlbiArIGJsdWUgKiBibHVlICsgYWxwaGEgKiBh
bHBoYSkgLyAyLjBmOwotCi0gICAgICAgICAgICAqY3VycmVudERpZmZQaXhlbCsrID0gKHVuc2ln
bmVkIGNoYXIpKGRpc3RhbmNlICogMjU1LjBmKTsKLQotICAgICAgICAgICAgaWYgKGRpc3RhbmNl
ID49IDEuMGYgLyAyNTUuMGYpIHsKLSAgICAgICAgICAgICAgICBjb3VudCArPSAxLjBmOwotICAg
ICAgICAgICAgICAgIHN1bSArPSBkaXN0YW5jZTsKLSAgICAgICAgICAgICAgICBtYXhEaXN0YW5j
ZSA9IG1heDxmbG9hdD4obWF4RGlzdGFuY2UsIGRpc3RhbmNlKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYXMgYSBwZXJj
ZW50YWdlIGNvbWJpbmluZyBib3RoIHRoZSBudW1iZXIgb2YKLSAgICAvLyBkaWZmZXJlbnQgcGl4
ZWxzIGFuZCB0aGVpciBkaWZmZXJlbmNlIGFtb3VudCBpLmUuIHRoZSBhdmVyYWdlIGRpc3RhbmNl
Ci0gICAgLy8gb3ZlciB0aGUgZW50aXJlIGltYWdlCi0gICAgZmxvYXQgZGlmZmVyZW5jZSA9IDA7
Ci0gICAgaWYgKGNvdW50ID4gMC4wZikKLSAgICAgICAgZGlmZmVyZW5jZSA9IDEwMC4wZiAqIHN1
bSAvIChoZWlnaHQgKiB3aWR0aCk7Ci0gICAgaWYgKGRpZmZlcmVuY2UgPD0gdG9sZXJhbmNlKQot
ICAgICAgICBkaWZmZXJlbmNlID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAgZGlmZmVyZW5jZSA9
IHJvdW5kZihkaWZmZXJlbmNlICogMTAwLjBmKSAvIDEwMC4wZjsKLSAgICAgICAgZGlmZmVyZW5j
ZSA9IG1heChkaWZmZXJlbmNlLCAwLjAxZik7IC8vIHJvdW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMK
LSAgICAgICAgKmRpZmZlcmVuY2VJbWFnZSA9IGRpZmZlcmVuY2VJbWFnZUZyb21EaWZmZXJlbmNl
QnVmZmVyKGRpZmZCdWZmZXIsIHdpZHRoLCBoZWlnaHQpOwotICAgIH0KLQotICAgIGZyZWUoZGlm
ZkJ1ZmZlcik7Ci0gICAgcmV0dXJuIGRpZmZlcmVuY2U7Ci19Ci0KLXZvaWQgcHJpbnRJbWFnZShH
ZGtQaXhidWYqIGltYWdlKQotewotICAgIGNoYXIqIGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJT
aXplOwotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIGlmICghZ2RrX3BpeGJ1Zl9zYXZlX3Rv
X2J1ZmZlcihpbWFnZSwgJmJ1ZmZlciwgJmJ1ZmZlclNpemUsICJwbmciLCAmZXJyb3IsIE5VTEwp
KSB7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIHJldHVybjsgLy8gRG9u
J3QgYmFpbCBvdXQsIGFzIHdlIGNhbiBzdGlsbCB1c2UgdGhlIHBlcmNlbnRhZ2Ugb3V0cHV0Lgot
ICAgIH0KLQotICAgIHByaW50ZigiQ29udGVudC1MZW5ndGg6ICUiIEdfR1NJWkVfRk9STUFUICJc
biIsIGJ1ZmZlclNpemUpOwotICAgIGZ3cml0ZShidWZmZXIsIDEsIGJ1ZmZlclNpemUsIHN0ZG91
dCk7Ci19Ci0KLXZvaWQgcHJpbnRJbWFnZURpZmZlcmVuY2VzKEdka1BpeGJ1ZiogYmFzZWxpbmVJ
bWFnZSwgR2RrUGl4YnVmKiBhY3R1YWxJbWFnZSkKLXsKLSAgICBHZGtQaXhidWYqIGRpZmZlcmVu
Y2VJbWFnZSA9IDA7Ci0gICAgZmxvYXQgZGlmZmVyZW5jZSA9IGNhbGN1bGF0ZURpZmZlcmVuY2Uo
YmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2UsICZkaWZmZXJlbmNlSW1hZ2UpOwotICAgIGlmIChk
aWZmZXJlbmNlID4gMC4wZikgewotICAgICAgICBpZiAoZGlmZmVyZW5jZUltYWdlKSB7Ci0gICAg
ICAgICAgICBwcmludEltYWdlKGRpZmZlcmVuY2VJbWFnZSk7Ci0gICAgICAgICAgICBnX29iamVj
dF91bnJlZihkaWZmZXJlbmNlSW1hZ2UpOwotICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiZGlm
ZjogJTAxLjJmJSUgZmFpbGVkXG4iLCBkaWZmZXJlbmNlKTsKLSAgICB9IGVsc2UKLSAgICAgICAg
cHJpbnRmKCJkaWZmOiAlMDEuMmYlJSBwYXNzZWRcbiIsIGRpZmZlcmVuY2UpOwotfQotCi1pbnQg
bWFpbihpbnQgYXJnYywgY2hhciogYXJndltdKQotewotICAgIEdFcnJvciogZXJyb3IgPSAwOwot
ICAgIEdPcHRpb25Db250ZXh0KiBjb250ZXh0ID0gZ19vcHRpb25fY29udGV4dF9uZXcoIi0gY29t
cGFyZSB0d28gaW1hZ2UgZmlsZXMsIHByaW50aW5nIHRoZWlyIHBlcmNlbnRhZ2UgZGlmZmVyZW5j
ZSBhbmQgdGhlIGRpZmZlcmVuY2UgaW1hZ2UgdG8gc3Rkb3V0Iik7Ci0gICAgZ19vcHRpb25fY29u
dGV4dF9hZGRfbWFpbl9lbnRyaWVzKGNvbnRleHQsIGNvbW1hbmRMaW5lT3B0aW9uRW50cmllcywg
MCk7Ci0gICAgaWYgKCFnX29wdGlvbl9jb250ZXh0X3BhcnNlKGNvbnRleHQsICZhcmdjLCAmYXJn
diwgJmVycm9yKSkgewotICAgICAgICBwcmludGYoIk9wdGlvbiBwYXJzaW5nIGZhaWxlZDogJXNc
biIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAgICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAg
ICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAgR2RrUGl4YnVmKiBhY3R1YWxJbWFnZSA9IDA7Ci0g
ICAgR2RrUGl4YnVmKiBiYXNlbGluZUltYWdlID0gMDsKLSAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsK
LSAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7Ci0gICAg
ICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IG5ld2xpbmUgaW50byBhIE5VTCBjaGFyYWN0ZXIgc28g
dGhhdCBzdHJ0b2sgZG9lc24ndCBwcm9kdWNlIGl0LgotICAgICAgICBjaGFyKiBuZXdMaW5lQ2hh
cmFjdGVyID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7Ci0gICAgICAgIGlmIChuZXdMaW5lQ2hhcmFj
dGVyKQotICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOwotCi0gICAgICAgIGlm
ICghc3RybmNtcCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZlciwgMTYpKSB7Ci0gICAgICAgICAg
ICBnY2hhcioqIHRva2VucyA9IGdfc3Ryc3BsaXQoYnVmZmVyLCAiICIsIDApOwotICAgICAgICAg
ICAgaWYgKCF0b2tlbnNbMV0pIHsKLSAgICAgICAgICAgICAgICBnX3N0cmZyZWV2KHRva2Vucyk7
Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNp
ZmllZC4uXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgbG9uZyBpbWFnZVNpemUgPSBzdHJ0b2wodG9rZW5zWzFdLCAwLCAxMCk7Ci0g
ICAgICAgICAgICBnX3N0cmZyZWV2KHRva2Vucyk7Ci0gICAgICAgICAgICBpZiAoaW1hZ2VTaXpl
ID4gMCAmJiAhYWN0dWFsSW1hZ2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoIShhY3R1YWxJbWFn
ZSA9IHJlYWRQaXhidWZGcm9tU3RkaW4oaW1hZ2VTaXplKSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgcHJpbnRmKCJFcnJvciwgY291bGQgbm90IHJlYWQgYWN0dWFsIGltYWdlLlxuIik7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSBpZiAoaW1hZ2VTaXplID4gMCAmJiAhYmFzZWxpbmVJbWFnZSkgewotICAgICAgICAg
ICAgICAgIGlmICghKGJhc2VsaW5lSW1hZ2UgPSByZWFkUGl4YnVmRnJvbVN0ZGluKGltYWdlU2l6
ZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IsIGNvdWxkIG5vdCByZWFk
IGJhc2VsaW5lIGltYWdlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJp
bnRmKCJFcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNpZmllZC4uXG4iKTsKLSAgICAgICAg
ICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlm
IChhY3R1YWxJbWFnZSAmJiBiYXNlbGluZUltYWdlKSB7Ci0gICAgICAgICAgICBwcmludEltYWdl
RGlmZmVyZW5jZXMoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2UpOwotICAgICAgICAgICAgZ19v
YmplY3RfdW5yZWYoYWN0dWFsSW1hZ2UpOwotICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoYmFz
ZWxpbmVJbWFnZSk7Ci0gICAgICAgICAgICBhY3R1YWxJbWFnZSA9IDA7Ci0gICAgICAgICAgICBi
YXNlbGluZUltYWdlID0gMDsKLSAgICAgICAgfQotCi0gICAgICAgIGZmbHVzaChzdGRvdXQpOwot
ICAgIH0KLQotICAgIHJldHVybiAwOwotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306514</attachid>
            <date>2017-04-07 10:30:39 -0700</date>
            <delta_ts>2017-04-07 11:24:23 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk-image-diff-cairo.diff</filename>
            <type>text/plain</type>
            <size>30733</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMzVh
ZWQ4NzE1MC4uMzhlNmUwMDAwM2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxNy0wNC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVtb3ZlIHRo
ZSBHREsgZGVwZW5kZW5jeSBmcm9tIEltYWdlRGlmZgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjYWlybyBvbmx5IGltcGxlbWVudGF0aW9uIG9m
IEltYWdlRGlmZi4gV2UgY3VycmVudGx5IGhhdmUgMyBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25z
IG9mIEltYWdlRGlmZjogdGhlCisgICAgICAgIEdkayBiYXNlZCBvbmUgdXNlZCBieSBHVEsrIHBv
cnQsIHRoZSBjYWlybyBiYXNlZCBvbmUgdXNlZCBieSBXaW5DYWlybyBhbmQgdGhlIENHIGJhc2Vk
IG9uZS4gTW9zdCBvZiB0aGUgY29kZSBpcworICAgICAgICBhY3R1YWxseSBjb21tb24gaW4gYWxs
IG9mIHRoZW0sIGJ1dCBpdCdzIGR1cGxpY2F0ZWQuIFNvLCBJJ3ZlIHRha2VuIGFkdmFudGFnZSBv
ZiB0aGlzIHBhdGNoIHRvIHJlZmFjdG9yIHRoZQorICAgICAgICBJbWFnZURpZmYgY29kZSB0byBz
aGFyZSB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uLiBUaGlzIHBhdGNoIGFkZHMgdGhlIGNyb3Nz
LXBsYXRmb3JtIGNvZGUsIGFuZCB0aGUgY2Fpcm8KKyAgICAgICAgaW1wbGVtZW50YXRpb24gYW5k
IGVuYWJsZXMgaXQgaW4gdGhlIEdUSysgcG9ydC4gSW4gZm9sbG93IHVwIHBhdGNoZXMgd2UgY2Fu
IG1vdmUgV2luQ2Fpcm8gdG8gdGhpcyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgYWxzbyBh
ZGQgQ0cgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBJbWFnZURpZmYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogSW1hZ2VEaWZmL0NhaXJvLmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBJ
bWFnZURpZmYvSW1hZ2VEaWZmLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAg
KiBJbWFnZURpZmYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogSW1hZ2VEaWZmL1BsYXRm
b3JtSW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6
aXNDb21wYXRpYmxlKToKKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6ZGlmZmVy
ZW5jZSk6CisgICAgICAgICogSW1hZ2VEaWZmL1BsYXRmb3JtSW1hZ2UuaDogQWRkZWQuCisgICAg
ICAgICogSW1hZ2VEaWZmL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHA6IEFkZGVkLgorICAg
ICAgICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tU3RkaW4pOgorICAgICAg
ICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRGlmZkRhdGEpOgorICAgICAg
ICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpQbGF0Zm9ybUltYWdlKToKKyAgICAgICAgKElt
YWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6flBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoSW1hZ2VE
aWZmOjpQbGF0Zm9ybUltYWdlOjp3aWR0aCk6CisgICAgICAgIChJbWFnZURpZmY6OlBsYXRmb3Jt
SW1hZ2U6OmhlaWdodCk6CisgICAgICAgIChJbWFnZURpZmY6OlBsYXRmb3JtSW1hZ2U6OnJvd0J5
dGVzKToKKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEpOgorICAg
ICAgICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpwaXhlbHMpOgorICAgICAgICAoSW1hZ2VE
aWZmOjpQbGF0Zm9ybUltYWdlOjp3cml0ZUFzUE5HVG9TdGRvdXQpOgorICAgICAgICAqIEltYWdl
RGlmZi9ndGsvSW1hZ2VEaWZmLmNwcDogUmVtb3ZlZC4KKwogMjAxNy0wNC0wNiAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRm9udFdpdGhG
ZWF0dXJlcyB0ZXN0IGZvbnQgcGFzcyBPVFMKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlmZi9D
TWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxpc3RzLnR4dAppbmRleCBmZGM1
ODRkNDI2NC4uYzM5MzYzNTQ4ODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxp
c3RzLnR4dAorKysgYi9Ub29scy9JbWFnZURpZmYvQ01ha2VMaXN0cy50eHQKQEAgLTIsNiArMiwx
NSBAQCBzZXQoSU1BR0VfRElGRl9ESVIgIiR7VE9PTFNfRElSfS9JbWFnZURpZmYiKQogCiBzZXQo
SU1BR0VfRElGRl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUyAiIikKIAorc2V0KElNQUdFX0RJ
RkZfU09VUkNFUworICAgICR7SU1BR0VfRElGRl9ESVJ9L0ltYWdlRGlmZi5jcHAKKyAgICAke0lN
QUdFX0RJRkZfRElSfS9QbGF0Zm9ybUltYWdlLmNwcAorKQorCitsaXN0KEFQUEVORCBJTUFHRV9E
SUZGX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAke0lNQUdFX0RJRkZfRElSfQorKQorCiBzZXQo
SU1BR0VfRElGRl9MSUJSQVJJRVMKICAgICBXVEYKICkKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdl
RGlmZi9DYWlyby5jbWFrZSBiL1Rvb2xzL0ltYWdlRGlmZi9DYWlyby5jbWFrZQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmJhNDNkZDg3Y2MKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9JbWFnZURpZmYvQ2Fpcm8uY21ha2UKQEAgLTAsMCArMSwxMSBAQAorbGlzdChB
UFBFTkQgSU1BR0VfRElGRl9TT1VSQ0VTCisgICAgJHtJTUFHRV9ESUZGX0RJUn0vY2Fpcm8vUGxh
dGZvcm1JbWFnZUNhaXJvLmNwcAorKQorCitsaXN0KEFQUEVORCBJTUFHRV9ESUZGX1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTCisgICAgJHtDQUlST19JTkNMVURFX0RJUlN9CispCisKK2xpc3Qo
QVBQRU5EIElNQUdFX0RJRkZfTElCUkFSSUVTCisgICAgJHtDQUlST19MSUJSQVJJRVN9CispCmRp
ZmYgLS1naXQgYS9Ub29scy9JbWFnZURpZmYvSW1hZ2VEaWZmLmNwcCBiL1Rvb2xzL0ltYWdlRGlm
Zi9JbWFnZURpZmYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
N2JiMTFkNDY1NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9JbWFnZURpZmYu
Y3BwCkBAIC0wLDAgKzEsMTI4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1IEJlbiBMYSBNb25pY2EgPGJlbi5s
YW1vbmljYUBnbWFpbC5jb20+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIK
KyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit1c2luZyBuYW1lc3Bh
Y2UgSW1hZ2VEaWZmOworCisjaWYgT1MoV0lORE9XUykKKyNkZWZpbmUgRk9STUFUX1NJWkVfVCAi
SXUiCisjZWxzZQorI2RlZmluZSBGT1JNQVRfU0laRV9UICJ6dSIKKyNlbmRpZgorCitpbnQgbWFp
bihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQoreworI2lmIFBMQVRGT1JNKFdJTikKKyAg
ICBfc2V0bW9kZSgwLCBfT19CSU5BUlkpOworICAgIF9zZXRtb2RlKDEsIF9PX0JJTkFSWSk7Cisj
ZW5kaWYKKworICAgIGZsb2F0IHRvbGVyYW5jZSA9IDAuMGY7CisKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAgIGlmICghc3RyY21wKGFyZ3ZbaV0sICIt
dCIpIHx8ICFzdHJjbXAoYXJndltpXSwgIi0tdG9sZXJhbmNlIikpIHsKKyAgICAgICAgICAgIGlm
IChpID49IGFyZ2MgLSAxKQorICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgICAgICB0
b2xlcmFuY2UgPSBzdHJ0b2YoYXJndltpICsgMV0sIDApOworICAgICAgICAgICAgKytpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGFyIGJ1ZmZlclsy
MDQ4XTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4gYWN0dWFsSW1hZ2U7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IGJhc2VsaW5lSW1hZ2U7CisKKyAgICB3
aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7CisgICAgICAgIC8v
IENvbnZlcnQgdGhlIGZpcnN0IG5ld2xpbmUgaW50byBhIE5VTCBjaGFyYWN0ZXIgc28gdGhhdCBz
dHJ0b2sgZG9lc24ndCBwcm9kdWNlIGl0LgorICAgICAgICBjaGFyKiBuZXdMaW5lQ2hhcmFjdGVy
ID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisgICAgICAgIGlmIChuZXdMaW5lQ2hhcmFjdGVyKQor
ICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOworCisgICAgICAgIGlmICghc3Ry
bmNtcCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZlciwgMTYpKSB7CisgICAgICAgICAgICBzdHJ0
b2soYnVmZmVyLCAiICIpOworCisgICAgICAgICAgICBpbnQgaW1hZ2VTaXplID0gc3RydG9sKHN0
cnRvaygwLCAiICIpLCAwLCAxMCk7CisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDw9IDApIHsK
KyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBpbWFnZSBzaXplIG11c3Qg
YmUgc3BlY2lmaWVkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZSkgeworICAgICAg
ICAgICAgICAgIGlmICghKGFjdHVhbEltYWdlID0gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbVN0
ZGluKGltYWdlU2l6ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi
RXJyb3I6IGNvdWxkIG5vdCByZWFkIGFjdHVhbCBpbWFnZS5cbiIpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0gZWxzZSBpZiAoIWJhc2VsaW5lSW1hZ2UpIHsKKyAgICAgICAgICAgICAgICBpZiAoIShiYXNl
bGluZUltYWdlID0gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbVN0ZGluKGltYWdlU2l6ZSkpKSB7
CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGNvdWxkIG5vdCBy
ZWFkIGJhc2VsaW5lIGltYWdlLlxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFWElU
X0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKGFjdHVhbEltYWdlICYmIGJhc2VsaW5lSW1hZ2UpIHsKKyAgICAgICAgICAg
IGlmICghYWN0dWFsSW1hZ2UtPmlzQ29tcGF0aWJsZSgqYmFzZWxpbmVJbWFnZSkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYWN0dWFsSW1hZ2UtPndpZHRoKCkgIT0gYmFzZWxpbmVJbWFnZS0+d2lk
dGgoKSB8fCBhY3R1YWxJbWFnZS0+aGVpZ2h0KCkgIT0gYmFzZWxpbmVJbWFnZS0+aGVpZ2h0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogdGVzdCBhbmQg
cmVmZXJlbmNlIGltYWdlcyBoYXZlIGRpZmZlcmVudCBzaXplcy4gVGVzdCBpbWFnZSBpcyAlIiBG
T1JNQVRfU0laRV9UICJ4JSIgRk9STUFUX1NJWkVfVCAiLCByZWZlcmVuY2UgaW1hZ2UgaXMgJSIg
Rk9STUFUX1NJWkVfVCAieCUiIEZPUk1BVF9TSVpFX1QgIlxuIiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGFjdHVhbEltYWdlLT53aWR0aCgpLCBhY3R1YWxJbWFnZS0+aGVpZ2h0KCksIGJhc2Vs
aW5lSW1hZ2UtPndpZHRoKCksIGJhc2VsaW5lSW1hZ2UtPmhlaWdodCgpKTsKKyAgICAgICAgICAg
ICAgICB9IGVsc2UgaWYgKGFjdHVhbEltYWdlLT5oYXNBbHBoYSgpICE9IGJhc2VsaW5lSW1hZ2Ut
Pmhhc0FscGhhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJv
cjogdGVzdCBhbmQgcmVmZXJlbmNlIGltYWdlcyBkaWZmZXIgaW4gYWxwaGEuIFRlc3QgaW1hZ2Ug
JXMgYWxwaGEsIHJlZmVyZW5jZSBpbWFnZSAlcyBhbHBoYS5cbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBhY3R1YWxJbWFnZS0+aGFzQWxwaGEoKSA/ICJoYXMiIDogImRvZXMgbm90IGhhdmUi
LCBiYXNlbGluZUltYWdlLT5oYXNBbHBoYSgpID8gImhhcyIgOiAiZG9lcyBub3QgaGF2ZSIpOwor
ICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAxMDAuMGY7
CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4gZGlmZkltYWdlID0g
YWN0dWFsSW1hZ2UtPmRpZmZlcmVuY2UoKmJhc2VsaW5lSW1hZ2UsIGRpZmZlcmVuY2UpOworICAg
ICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPD0gdG9sZXJhbmNlKQorICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2UgPSAwLjBmOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgZGlm
ZmVyZW5jZSA9IHJvdW5kZihkaWZmZXJlbmNlICogMTAwLjBmKSAvIDEwMC4wZjsKKyAgICAgICAg
ICAgICAgICBkaWZmZXJlbmNlID0gc3RkOjptYXg8ZmxvYXQ+KGRpZmZlcmVuY2UsIDAuMDFmKTsg
Ly8gcm91bmQgdG8gMiBkZWNpbWFsIHBsYWNlcworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBpZiAoZGlmZmVyZW5jZSA+IDAuMGYpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlmZkltYWdl
KQorICAgICAgICAgICAgICAgICAgICBkaWZmSW1hZ2UtPndyaXRlQXNQTkdUb1N0ZG91dCgpOwor
ICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiZGlmZjogJTAxLjJmJSUgZmFpbGVkXG4i
LCBkaWZmZXJlbmNlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGZwcmlu
dGYoc3Rkb3V0LCAiZGlmZjogJTAxLjJmJSUgcGFzc2VkXG4iLCBkaWZmZXJlbmNlKTsKKworICAg
ICAgICAgICAgYWN0dWFsSW1hZ2UgPSBudWxscHRyOworICAgICAgICAgICAgYmFzZWxpbmVJbWFn
ZSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICB9
CisKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VE
aWZmL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMvSW1hZ2VEaWZmL1BsYXRmb3JtR1RLLmNtYWtl
CmluZGV4IDhiMzdjYTA4YjliLi5jNGRjZTAwNzJmZiAxMDA2NDQKLS0tIGEvVG9vbHMvSW1hZ2VE
aWZmL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUdUSy5j
bWFrZQpAQCAtMSwxMSArMSwyIEBACi1zZXQoSU1BR0VfRElGRl9TT1VSQ0VTCi0gICAgJHtJTUFH
RV9ESUZGX0RJUn0vZ3RrL0ltYWdlRGlmZi5jcHAKLSkKK2luY2x1ZGUoQ2Fpcm8uY21ha2UpCiAK
LWxpc3QoQVBQRU5EIElNQUdFX0RJRkZfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKLSAgICAk
e0dUS19JTkNMVURFX0RJUlN9Ci0pCi0KLWxpc3QoQVBQRU5EIElNQUdFX0RJRkZfTElCUkFSSUVT
Ci0gICAgJHtHVEtfTElCUkFSSUVTfQotKQpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VEaWZmL1Bs
YXRmb3JtSW1hZ2UuY3BwIGIvVG9vbHMvSW1hZ2VEaWZmL1BsYXRmb3JtSW1hZ2UuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40YzBmNmI0M2M1ZQotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUltYWdlLmNwcApAQCAtMCwwICsxLDk4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBCZW4gTGEgTW9uaWNhIDxi
ZW4ubGFtb25pY2FAZ21haWwuY29tPi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworbmFtZXNwYWNlIEltYWdlRGlmZiB7CisKK2Jv
b2wgUGxhdGZvcm1JbWFnZTo6aXNDb21wYXRpYmxlKGNvbnN0IFBsYXRmb3JtSW1hZ2UmIG90aGVy
KSBjb25zdAoreworICAgIHJldHVybiB3aWR0aCgpID09IG90aGVyLndpZHRoKCkKKyAgICAgICAg
JiYgaGVpZ2h0KCkgPT0gb3RoZXIuaGVpZ2h0KCkKKyAgICAgICAgJiYgcm93Qnl0ZXMoKSA9PSBv
dGhlci5yb3dCeXRlcygpCisgICAgICAgICYmIGhhc0FscGhhKCkgPT0gb3RoZXIuaGFzQWxwaGEo
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IFBsYXRmb3JtSW1hZ2U6OmRp
ZmZlcmVuY2UoY29uc3QgUGxhdGZvcm1JbWFnZSYgb3RoZXIsIGZsb2F0JiBwZXJjZW50YWdlRGlm
ZmVyZW5jZSkKK3sKKyAgICBzaXplX3Qgd2lkdGggPSB0aGlzLT53aWR0aCgpOworICAgIHNpemVf
dCBoZWlnaHQgPSB0aGlzLT5oZWlnaHQoKTsKKyAgICBzaXplX3Qgcm93Qnl0ZXMgPSB0aGlzLT5y
b3dCeXRlcygpOworCisgICAgLy8gQ29tcGFyZSB0aGUgY29udGVudCBvZiB0aGUgMiBiaXRtYXBz
CisgICAgdm9pZCogZGlmZkJ1ZmZlciA9IG1hbGxvYyh3aWR0aCAqIGhlaWdodCk7CisgICAgZmxv
YXQgY291bnQgPSAwLjBmOworICAgIGZsb2F0IHN1bSA9IDAuMGY7CisgICAgZmxvYXQgbWF4RGlz
dGFuY2UgPSAwLjBmOworICAgIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbCA9IHRoaXMtPnBpeGVs
cygpOworICAgIHVuc2lnbmVkIGNoYXIqIHBpeGVsID0gb3RoZXIucGl4ZWxzKCk7CisgICAgdW5z
aWduZWQgY2hhciogZGlmZlBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
ZGlmZkJ1ZmZlcik7CisgICAgZm9yIChzaXplX3QgeSA9IDA7IHkgPCBoZWlnaHQ7ICsreSkgewor
ICAgICAgICBmb3IgKHNpemVfdCB4ID0gMDsgeCA8IHdpZHRoOyArK3gpIHsKKyAgICAgICAgICAg
IGZsb2F0IHJlZCA9IChwaXhlbFswXSAtIGJhc2VQaXhlbFswXSkgLyBzdGQ6Om1heDxmbG9hdD4o
MjU1IC0gYmFzZVBpeGVsWzBdLCBiYXNlUGl4ZWxbMF0pOworICAgICAgICAgICAgZmxvYXQgZ3Jl
ZW4gPSAocGl4ZWxbMV0gLSBiYXNlUGl4ZWxbMV0pIC8gc3RkOjptYXg8ZmxvYXQ+KDI1NSAtIGJh
c2VQaXhlbFsxXSwgYmFzZVBpeGVsWzFdKTsKKyAgICAgICAgICAgIGZsb2F0IGJsdWUgPSAocGl4
ZWxbMl0gLSBiYXNlUGl4ZWxbMl0pIC8gc3RkOjptYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFsy
XSwgYmFzZVBpeGVsWzJdKTsKKyAgICAgICAgICAgIGZsb2F0IGFscGhhID0gKHBpeGVsWzNdIC0g
YmFzZVBpeGVsWzNdKSAvIHN0ZDo6bWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbM10sIGJhc2VQ
aXhlbFszXSk7CisgICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IHNxcnRmKHJlZCAqIHJlZCAr
IGdyZWVuICogZ3JlZW4gKyBibHVlICogYmx1ZSArIGFscGhhICogYWxwaGEpIC8gMi4wZjsKKwor
ICAgICAgICAgICAgKmRpZmZQaXhlbCsrID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oZGlz
dGFuY2UgKiAyNTUuMGYpOworCisgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPj0gMS4wZiAvIDI1
NS4wZikgeworICAgICAgICAgICAgICAgIGNvdW50ICs9IDEuMGY7CisgICAgICAgICAgICAgICAg
c3VtICs9IGRpc3RhbmNlOworICAgICAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IG1heERpc3Rh
bmNlKQorICAgICAgICAgICAgICAgICAgICBtYXhEaXN0YW5jZSA9IGRpc3RhbmNlOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBiYXNlUGl4ZWwgKz0gNDsKKyAgICAgICAgICAgIHBpeGVs
ICs9IDQ7CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBDb21wdXRlIHRoZSBkaWZmZXJlbmNl
IGFzIGEgcGVyY2VudGFnZSBjb21iaW5pbmcgYm90aCB0aGUgbnVtYmVyIG9mIGRpZmZlcmVudCBw
aXhlbHMgYW5kIHRoZWlyIGRpZmZlcmVuY2UgYW1vdW50IGkuZS4gdGhlIGF2ZXJhZ2UgZGlzdGFu
Y2Ugb3ZlciB0aGUgZW50aXJlIGltYWdlCisgICAgaWYgKGNvdW50ID4gMC4wZikKKyAgICAgICAg
cGVyY2VudGFnZURpZmZlcmVuY2UgPSAxMDAuMGYgKiBzdW0gLyAoaGVpZ2h0ICogd2lkdGgpOwor
ICAgIGVsc2UKKyAgICAgICAgcGVyY2VudGFnZURpZmZlcmVuY2UgPSAwLjBmOworCisgICAgaWYg
KCFwZXJjZW50YWdlRGlmZmVyZW5jZSkgeworICAgICAgICBmcmVlKGRpZmZCdWZmZXIpOworICAg
ICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICB9CisKKyAgICAvLyBHZW5lcmF0ZSBhIG5vcm1hbGl6
ZWQgZGlmZiBpbWFnZSBpZiB0aGVyZSBpcyBhbnkgZGlmZmVyZW5jZQorICAgIGlmIChtYXhEaXN0
YW5jZSA8IDEuMGYpIHsKKyAgICAgICAgZGlmZlBpeGVsID0gcmVpbnRlcnByZXRfY2FzdDx1bnNp
Z25lZCBjaGFyKj4oZGlmZkJ1ZmZlcik7CisgICAgICAgIGZvciAoc2l6ZV90IHAgPSAwOyBwIDwg
aGVpZ2h0ICogd2lkdGg7ICsrcCkKKyAgICAgICAgICAgIGRpZmZQaXhlbFtwXSAvPSBtYXhEaXN0
YW5jZTsKKyAgICB9CisKKyAgICByZXR1cm4gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbURpZmZE
YXRhKGRpZmZCdWZmZXIsIHdpZHRoLCBoZWlnaHQpOworfQorCit9IC8vIG5hbWVzcGFjZSBJbWFn
ZURpZmYKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUltYWdlLmggYi9Ub29s
cy9JbWFnZURpZmYvUGxhdGZvcm1JbWFnZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwLi5iMDA4MGFiYmJlZQotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0ltYWdlRGlm
Zi9QbGF0Zm9ybUltYWdlLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNyBJZ2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBB
VVRIT1IgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaW5jbHVkZSA8Y21hdGg+CisjaW5jbHVkZSA8bWVtb3J5PgorI2luY2x1ZGUgPHd0Zi9Q
bGF0Zm9ybS5oPgorCisjaWYgVVNFKENBSVJPKQordHlwZWRlZiBzdHJ1Y3QgX2NhaXJvX3N1cmZh
Y2UgY2Fpcm9fc3VyZmFjZV90OworI2VuZGlmCisKK25hbWVzcGFjZSBJbWFnZURpZmYgeworCitj
bGFzcyBQbGF0Zm9ybUltYWdlIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtSW1hZ2U+IGNyZWF0ZUZyb21TdGRpbihzaXplX3QpOworICAgIHN0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4gY3JlYXRlRnJvbURpZmZEYXRhKHZvaWQqLCBzaXpl
X3Qgd2lkdGgsIHNpemVfdCBoZWlnaHQpOworCisjaWYgVVNFKENBSVJPKQorICAgIFBsYXRmb3Jt
SW1hZ2UoY2Fpcm9fc3VyZmFjZV90Kik7CisjZW5kaWYKKyAgICB+UGxhdGZvcm1JbWFnZSgpOwor
CisgICAgc2l6ZV90IHdpZHRoKCkgY29uc3Q7CisgICAgc2l6ZV90IGhlaWdodCgpIGNvbnN0Owor
ICAgIHNpemVfdCByb3dCeXRlcygpIGNvbnN0OworICAgIGJvb2wgaGFzQWxwaGEoKSBjb25zdDsK
KyAgICB1bnNpZ25lZCBjaGFyKiBwaXhlbHMoKSBjb25zdDsKKyAgICBib29sIGlzQ29tcGF0aWJs
ZShjb25zdCBQbGF0Zm9ybUltYWdlJikgY29uc3Q7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtSW1hZ2U+IGRpZmZlcmVuY2UoY29uc3QgUGxhdGZvcm1JbWFnZSYsIGZsb2F0JiBwZXJjZW50
YWdlRGlmZmVyZW5jZSk7CisgICAgdm9pZCB3cml0ZUFzUE5HVG9TdGRvdXQoKTsKKworcHJpdmF0
ZToKKyNpZiBVU0UoQ0FJUk8pCisgICAgY2Fpcm9fc3VyZmFjZV90KiBtX2ltYWdlOworI2VuZGlm
Cit9OworCit9IC8vIG5hbWVzcGFjZSBJbWFnZURpZmYKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdl
RGlmZi9jYWlyby9QbGF0Zm9ybUltYWdlQ2Fpcm8uY3BwIGIvVG9vbHMvSW1hZ2VEaWZmL2NhaXJv
L1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAuLjVhMDE1NGM0YTNiCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvSW1hZ2VEaWZmL2Nh
aXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHAKQEAgLTAsMCArMSwxMzMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTcgSWdhbGlhIFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1h
Z2UuaCIKKworI2luY2x1ZGUgPGNhaXJvLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmIE9T
KFdJTkRPV1MpCisjZGVmaW5lIEZPUk1BVF9TSVpFX1QgIkl1IgorI2Vsc2UKKyNkZWZpbmUgRk9S
TUFUX1NJWkVfVCAienUiCisjZW5kaWYKKworbmFtZXNwYWNlIEltYWdlRGlmZiB7CisKK3N0ZDo6
dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tU3RkaW4o
c2l6ZV90IGltYWdlU2l6ZSkKK3sKKyAgICBzdHJ1Y3QgUmVhZENvbnRleHQgeworICAgICAgICBj
aGFyIGJ1ZmZlclsyMDQ4XTsKKyAgICAgICAgdW5zaWduZWQgbG9uZyBpbmNvbWluZ0J5dGVzOwor
ICAgICAgICB1bnNpZ25lZCBsb25nIHJlYWRCeXRlczsKKyAgICB9IGNvbnRleHQgeyB7IH0sIGlt
YWdlU2l6ZSwgMCB9OworCisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9jcmVhdGVfZnJvbV9wbmdfc3RyZWFtKAorICAgICAgICBbXSh2b2lkKiBjbG9z
dXJlLCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpIC0+IGNhaXJvX3N0YXR1
c190IHsKKyAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSAqc3RhdGljX2Nhc3Q8UmVhZENvbnRl
eHQqPihjbG9zdXJlKTsKKyAgICAgICAgICAgIGNvbnRleHQucmVhZEJ5dGVzICs9IGxlbmd0aDsK
KworICAgICAgICAgICAgZnJlYWQoZGF0YSwgMSwgbGVuZ3RoLCBzdGRpbik7CisgICAgICAgICAg
ICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0sICZjb250ZXh0KTsKKwor
ICAgIGlmIChjYWlyb19zdXJmYWNlX3N0YXR1cyhzdXJmYWNlKSAhPSBDQUlST19TVEFUVVNfU1VD
Q0VTUykgeworICAgICAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3koc3VyZmFjZSk7CisgICAgICAg
IHJldHVybiBudWxscHRyOworICAgIH0KKworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBs
YXRmb3JtSW1hZ2U+KHN1cmZhY2UpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFn
ZT4gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbURpZmZEYXRhKHZvaWQqIGRhdGEsIHNpemVfdCB3
aWR0aCwgc2l6ZV90IGhlaWdodCkKK3sKKyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBj
YWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0ZV9mb3JfZGF0YShyZWludGVycHJldF9jYXN0PHVuc2ln
bmVkIGNoYXIqPihkYXRhKSwgQ0FJUk9fRk9STUFUX0E4LAorICAgICAgICB3aWR0aCwgaGVpZ2h0
LCBjYWlyb19mb3JtYXRfc3RyaWRlX2Zvcl93aWR0aChDQUlST19GT1JNQVRfQTgsIHdpZHRoKSk7
CisgICAgc3RhdGljIGNhaXJvX3VzZXJfZGF0YV9rZXlfdCBpbWFnZURhdGFLZXk7CisgICAgY2Fp
cm9fc3VyZmFjZV9zZXRfdXNlcl9kYXRhKHN1cmZhY2UsICZpbWFnZURhdGFLZXksIGRhdGEsIFtd
KHZvaWQqIGRhdGEpIHsgZnJlZShkYXRhKTsgfSk7CisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlx
dWU8UGxhdGZvcm1JbWFnZT4oc3VyZmFjZSk7Cit9CisKK1BsYXRmb3JtSW1hZ2U6OlBsYXRmb3Jt
SW1hZ2UoY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlKQorICAgIDogbV9pbWFnZShzdXJmYWNlKQor
eworfQorCitQbGF0Zm9ybUltYWdlOjp+UGxhdGZvcm1JbWFnZSgpCit7CisgICAgY2Fpcm9fc3Vy
ZmFjZV9kZXN0cm95KG1faW1hZ2UpOworfQorCitzaXplX3QgUGxhdGZvcm1JbWFnZTo6d2lkdGgo
KSBjb25zdAoreworICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF93aWR0aChtX2lt
YWdlKTsKK30KKworc2l6ZV90IFBsYXRmb3JtSW1hZ2U6OmhlaWdodCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2hlaWdodChtX2ltYWdlKTsKK30KKworc2l6
ZV90IFBsYXRmb3JtSW1hZ2U6OnJvd0J5dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9f
aW1hZ2Vfc3VyZmFjZV9nZXRfc3RyaWRlKG1faW1hZ2UpOworfQorCitib29sIFBsYXRmb3JtSW1h
Z2U6Omhhc0FscGhhKCkgY29uc3QKK3sKKyAgICAvLyBXaGF0IG1hdHRlcnMgaGVyZSBpcyB3aGV0
aGVyIHRoZSBpbWFnZSBkYXRhIGhhcyBhbiBhbHBoYSBjaGFubmVsLiBJbiBjYWlybywgYm90aAor
ICAgIC8vIENBSVJPX0ZPUk1BVF9BUkdCMzIgYW5kIENBSVJPX0ZPUk1BVF9SR0IyNCBoYXZlIGFu
IGFscGhhIGNoYW5uZWwgZXZlbiBpZiBpdCdzCisgICAgLy8gYWx3YXlzIDAgaW4gdGhlIENBSVJP
X0ZPUk1BVF9SR0IyNCBjYXNlLgorICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2dldF9m
b3JtYXQobV9pbWFnZSkgPT0gQ0FJUk9fRk9STUFUX0FSR0IzMiB8fCBjYWlyb19pbWFnZV9zdXJm
YWNlX2dldF9mb3JtYXQobV9pbWFnZSkgPT0gQ0FJUk9fRk9STUFUX1JHQjI0OworfQorCit1bnNp
Z25lZCBjaGFyKiBQbGF0Zm9ybUltYWdlOjpwaXhlbHMoKSBjb25zdAoreworICAgIHJldHVybiBj
YWlyb19pbWFnZV9zdXJmYWNlX2dldF9kYXRhKG1faW1hZ2UpOworfQorCit2b2lkIFBsYXRmb3Jt
SW1hZ2U6OndyaXRlQXNQTkdUb1N0ZG91dCgpCit7CisgICAgc3RydWN0IFdyaXRlQ29udGV4dCB7
CisgICAgICAgIHVuc2lnbmVkIGxvbmcgd3JpdHRlbkJ5dGVzIHsgMCB9OworICAgIH0gY29udGV4
dDsKKworICAgIC8vIEZpcnN0IHdlIHN1bSB1cCB0aGUgYnl0ZXMgdGhhdCBhcmUgdG8gYmUgd3Jp
dHRlbi4KKyAgICBjYWlyb19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0obV9pbWFnZSwKKyAg
ICAgICAgW10odm9pZCogY2xvc3VyZSwgY29uc3QgdW5zaWduZWQgY2hhciosIHVuc2lnbmVkIGxl
bmd0aCkgLT4gY2Fpcm9fc3RhdHVzX3QgeworICAgICAgICAgICAgYXV0byYgY29udGV4dCA9ICpz
dGF0aWNfY2FzdDxXcml0ZUNvbnRleHQqPihjbG9zdXJlKTsKKyAgICAgICAgICAgIGNvbnRleHQu
d3JpdHRlbkJ5dGVzICs9IGxlbmd0aDsKKyAgICAgICAgICAgIHJldHVybiBDQUlST19TVEFUVVNf
U1VDQ0VTUzsKKyAgICAgICAgfSwgJmNvbnRleHQpOworICAgIGZwcmludGYoc3Rkb3V0LCAiQ29u
dGVudC1MZW5ndGg6ICUiIEZPUk1BVF9TSVpFX1QgIlxuIiwgY29udGV4dC53cml0dGVuQnl0ZXMp
OworICAgIGNhaXJvX3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShtX2ltYWdlLAorICAgICAg
ICBbXSh2b2lkKiwgY29uc3QgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSAt
PiBjYWlyb19zdGF0dXNfdCB7CisgICAgICAgICAgICBmd3JpdGUoZGF0YSwgMSwgbGVuZ3RoLCBz
dGRvdXQpOworICAgICAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOworICAgICAg
ICB9LCBudWxscHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW1hZ2VEaWZmCmRpZmYgLS1naXQg
YS9Ub29scy9JbWFnZURpZmYvZ3RrL0ltYWdlRGlmZi5jcHAgYi9Ub29scy9JbWFnZURpZmYvZ3Rr
L0ltYWdlRGlmZi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDVhMTI4ZDFlMzEy
Li4wMDAwMDAwMDAwMAotLS0gYS9Ub29scy9JbWFnZURpZmYvZ3RrL0ltYWdlRGlmZi5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSwyNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBa
YW4gRG9iZXJzZWsgPHphbmRvYmVyc2VrQGdtYWlsLmNvbT4KLSAqIENvcHlyaWdodCAoQykgMjAx
MCBJZ2FsaWEgUy5MLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxjbWF0aD4KLSNpbmNsdWRlIDxjc3Rk
aW8+Ci0jaW5jbHVkZSA8Y3N0ZGxpYj4KLSNpbmNsdWRlIDxjc3RyaW5nPgotI2luY2x1ZGUgPGdk
ay9nZGsuaD4KLQotdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLQotc3RhdGljIGRvdWJsZSB0b2xlcmFu
Y2UgPSAwOwotc3RhdGljIEdPcHRpb25FbnRyeSBjb21tYW5kTGluZU9wdGlvbkVudHJpZXNbXSA9
IAotewotICAgIHsgInRvbGVyYW5jZSIsIDAsIDAsIEdfT1BUSU9OX0FSR19ET1VCTEUsICZ0b2xl
cmFuY2UsICJQZXJjZW50YWdlIGRpZmZlcmVuY2UgYmV0d2VlbiBpbWFnZXMgYmVmb3JlIGNvbnNp
ZGVyaW5nIHRoZW0gZGlmZmVyZW50IiwgIlQiIH0sCi0gICAgeyAwLCAwLCAwLCBHX09QVElPTl9B
UkdfTk9ORSwgMCwgMCwgMCB9LAotfTsKLQotR2RrUGl4YnVmKiByZWFkUGl4YnVmRnJvbVN0ZGlu
KGxvbmcgaW1hZ2VTaXplKQotewotICAgIHVuc2lnbmVkIGNoYXIgaW1hZ2VCdWZmZXJbMjA0OF07
Ci0gICAgR2RrUGl4YnVmTG9hZGVyKiBsb2FkZXIgPSBnZGtfcGl4YnVmX2xvYWRlcl9uZXdfd2l0
aF90eXBlKCJwbmciLCAwKTsKLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLQotICAgIHdoaWxlIChp
bWFnZVNpemUgPiAwKSB7Ci0gICAgICAgIHNpemVfdCBieXRlc1RvUmVhZCA9IG1pbjxpbnQ+KGlt
YWdlU2l6ZSwgMjA0OCk7Ci0gICAgICAgIHNpemVfdCBieXRlc1JlYWQgPSBmcmVhZChpbWFnZUJ1
ZmZlciwgMSwgYnl0ZXNUb1JlYWQsIHN0ZGluKTsKLQotICAgICAgICBpZiAoIWdka19waXhidWZf
bG9hZGVyX3dyaXRlKGxvYWRlciwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBndWNoYXIqPihpbWFn
ZUJ1ZmZlciksIGJ5dGVzUmVhZCwgJmVycm9yKSkgewotICAgICAgICAgICAgZ19lcnJvcl9mcmVl
KGVycm9yKTsKLSAgICAgICAgICAgIGdka19waXhidWZfbG9hZGVyX2Nsb3NlKGxvYWRlciwgMCk7
Ci0gICAgICAgICAgICBnX29iamVjdF91bnJlZihsb2FkZXIpOwotICAgICAgICAgICAgcmV0dXJu
IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBpbWFnZVNpemUgLT0gc3RhdGljX2Nhc3Q8aW50Pihi
eXRlc1JlYWQpOwotICAgIH0KLQotICAgIGdka19waXhidWZfbG9hZGVyX2Nsb3NlKGxvYWRlciwg
MCk7Ci0gICAgR2RrUGl4YnVmKiBkZWNvZGVkSW1hZ2UgPSBHREtfUElYQlVGKGdfb2JqZWN0X3Jl
ZihnZGtfcGl4YnVmX2xvYWRlcl9nZXRfcGl4YnVmKGxvYWRlcikpKTsKLSAgICBnX29iamVjdF91
bnJlZihsb2FkZXIpOwotICAgIHJldHVybiBkZWNvZGVkSW1hZ2U7Ci19Ci0KLUdka1BpeGJ1Ziog
ZGlmZmVyZW5jZUltYWdlRnJvbURpZmZlcmVuY2VCdWZmZXIodW5zaWduZWQgY2hhciogYnVmZmVy
LCBpbnQgd2lkdGgsIGludCBoZWlnaHQsIGZsb2F0IG1heERpc3RhbmNlKQotewotICAgIEdka1Bp
eGJ1ZiogaW1hZ2UgPSBnZGtfcGl4YnVmX25ldyhHREtfQ09MT1JTUEFDRV9SR0IsIEZBTFNFLCA4
LCB3aWR0aCwgaGVpZ2h0KTsKLSAgICBpZiAoIWltYWdlKQotICAgICAgICByZXR1cm4gaW1hZ2U7
Ci0KLSAgICBib29sIHNob3VsZE5vcm1hbGl6ZSA9IG1heERpc3RhbmNlID4gMCAmJiBtYXhEaXN0
YW5jZSA8IDE7Ci0gICAgaW50IHJvd1N0cmlkZSA9IGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShp
bWFnZSk7Ci0gICAgdW5zaWduZWQgY2hhciogZGlmZlBpeGVscyA9IGdka19waXhidWZfZ2V0X3Bp
eGVscyhpbWFnZSk7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsgeCsrKSB7Ci0gICAg
ICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAgICAgICAgIHVuc2ln
bmVkIGNoYXIqIGRpZmZQaXhlbCA9IGRpZmZQaXhlbHMgKyAoeSAqIHJvd1N0cmlkZSkgKyAoeCAq
IDMpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciBidWZmZXJQaXhlbCA9ICpidWZmZXIrKzsK
LSAgICAgICAgICAgIGlmIChzaG91bGROb3JtYWxpemUpCi0gICAgICAgICAgICAgICAgYnVmZmVy
UGl4ZWwgLz0gbWF4RGlzdGFuY2U7Ci0gICAgICAgICAgICBkaWZmUGl4ZWxbMF0gPSBkaWZmUGl4
ZWxbMV0gPSBkaWZmUGl4ZWxbMl0gPSBidWZmZXJQaXhlbDsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiBpbWFnZTsKLX0KLQotZmxvYXQgY2FsY3VsYXRlRGlmZmVyZW5jZShHZGtQaXhi
dWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UsIEdka1BpeGJ1ZioqIGRp
ZmZlcmVuY2VJbWFnZSkKLXsKLSAgICBpbnQgd2lkdGggPSBnZGtfcGl4YnVmX2dldF93aWR0aChh
Y3R1YWxJbWFnZSk7Ci0gICAgaW50IGhlaWdodCA9IGdka19waXhidWZfZ2V0X2hlaWdodChhY3R1
YWxJbWFnZSk7Ci0gICAgaW50IG51bWJlck9mQ2hhbm5lbHMgPSBnZGtfcGl4YnVmX2dldF9uX2No
YW5uZWxzKGFjdHVhbEltYWdlKTsKLSAgICBpZiAoKHdpZHRoICE9IGdka19waXhidWZfZ2V0X3dp
ZHRoKGJhc2VsaW5lSW1hZ2UpKQotICAgICAgICB8fCAoaGVpZ2h0ICE9IGdka19waXhidWZfZ2V0
X2hlaWdodChiYXNlbGluZUltYWdlKSkKLSAgICAgICAgfHwgKG51bWJlck9mQ2hhbm5lbHMgIT0g
Z2RrX3BpeGJ1Zl9nZXRfbl9jaGFubmVscyhiYXNlbGluZUltYWdlKSkKLSAgICAgICAgfHwgKGdk
a19waXhidWZfZ2V0X2hhc19hbHBoYShhY3R1YWxJbWFnZSkgIT0gZ2RrX3BpeGJ1Zl9nZXRfaGFz
X2FscGhhKGJhc2VsaW5lSW1hZ2UpKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9y
LCB0ZXN0IGFuZCByZWZlcmVuY2UgaW1hZ2UgaGF2ZSBkaWZmZXJlbnQgcHJvcGVydGllcy5cbiIp
OwotICAgICAgICByZXR1cm4gMTAwOyAvLyBDb21wbGV0ZWx5IGRpZmZlcmVudC4KLSAgICB9Ci0K
LSAgICB1bnNpZ25lZCBjaGFyKiBkaWZmQnVmZmVyID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh
cio+KG1hbGxvYyh3aWR0aCAqIGhlaWdodCkpOwotICAgIGZsb2F0IGNvdW50ID0gMDsKLSAgICBm
bG9hdCBzdW0gPSAwOwotICAgIGZsb2F0IG1heERpc3RhbmNlID0gMDsKLSAgICBpbnQgYWN0dWFs
Um93U3RyaWRlID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGFjdHVhbEltYWdlKTsKLSAgICBp
bnQgYmFzZVJvd1N0cmlkZSA9IGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShiYXNlbGluZUltYWdl
KTsKLSAgICB1bnNpZ25lZCBjaGFyKiBhY3R1YWxQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9waXhl
bHMoYWN0dWFsSW1hZ2UpOwotICAgIHVuc2lnbmVkIGNoYXIqIGJhc2VQaXhlbHMgPSBnZGtfcGl4
YnVmX2dldF9waXhlbHMoYmFzZWxpbmVJbWFnZSk7Ci0gICAgdW5zaWduZWQgY2hhciogY3VycmVu
dERpZmZQaXhlbCA9IGRpZmZCdWZmZXI7Ci0gICAgZm9yIChpbnQgeCA9IDA7IHggPCB3aWR0aDsg
eCsrKSB7Ci0gICAgICAgIGZvciAoaW50IHkgPSAwOyB5IDwgaGVpZ2h0OyB5KyspIHsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIqIGFjdHVhbFBpeGVsID0gYWN0dWFsUGl4ZWxzICsgKHkgKiBh
Y3R1YWxSb3dTdHJpZGUpICsgKHggKiBudW1iZXJPZkNoYW5uZWxzKTsKLSAgICAgICAgICAgIHVu
c2lnbmVkIGNoYXIqIGJhc2VQaXhlbCA9IGJhc2VQaXhlbHMgKyAoeSAqIGJhc2VSb3dTdHJpZGUp
ICsgKHggKiBudW1iZXJPZkNoYW5uZWxzKTsKLQotICAgICAgICAgICAgZmxvYXQgcmVkID0gKGFj
dHVhbFBpeGVsWzBdIC0gYmFzZVBpeGVsWzBdKSAvIG1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVs
WzBdLCBiYXNlUGl4ZWxbMF0pOwotICAgICAgICAgICAgZmxvYXQgZ3JlZW4gPSAoYWN0dWFsUGl4
ZWxbMV0gLSBiYXNlUGl4ZWxbMV0pIC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMV0sIGJh
c2VQaXhlbFsxXSk7Ci0gICAgICAgICAgICBmbG9hdCBibHVlID0gKGFjdHVhbFBpeGVsWzJdIC0g
YmFzZVBpeGVsWzJdKSAvIG1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzJdLCBiYXNlUGl4ZWxb
Ml0pOwotICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSAoYWN0dWFsUGl4ZWxbM10gLSBiYXNlUGl4
ZWxbM10pIC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbM10sIGJhc2VQaXhlbFszXSk7Ci0g
ICAgICAgICAgICBmbG9hdCBkaXN0YW5jZSA9IHNxcnRmKHJlZCAqIHJlZCArIGdyZWVuICogZ3Jl
ZW4gKyBibHVlICogYmx1ZSArIGFscGhhICogYWxwaGEpIC8gMi4wZjsKLQotICAgICAgICAgICAg
KmN1cnJlbnREaWZmUGl4ZWwrKyA9ICh1bnNpZ25lZCBjaGFyKShkaXN0YW5jZSAqIDI1NS4wZik7
Ci0KLSAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSAxLjBmIC8gMjU1LjBmKSB7Ci0gICAgICAg
ICAgICAgICAgY291bnQgKz0gMS4wZjsKLSAgICAgICAgICAgICAgICBzdW0gKz0gZGlzdGFuY2U7
Ci0gICAgICAgICAgICAgICAgbWF4RGlzdGFuY2UgPSBtYXg8ZmxvYXQ+KG1heERpc3RhbmNlLCBk
aXN0YW5jZSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBDb21w
dXRlIHRoZSBkaWZmZXJlbmNlIGFzIGEgcGVyY2VudGFnZSBjb21iaW5pbmcgYm90aCB0aGUgbnVt
YmVyIG9mCi0gICAgLy8gZGlmZmVyZW50IHBpeGVscyBhbmQgdGhlaXIgZGlmZmVyZW5jZSBhbW91
bnQgaS5lLiB0aGUgYXZlcmFnZSBkaXN0YW5jZQotICAgIC8vIG92ZXIgdGhlIGVudGlyZSBpbWFn
ZQotICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAwOwotICAgIGlmIChjb3VudCA+IDAuMGYpCi0gICAg
ICAgIGRpZmZlcmVuY2UgPSAxMDAuMGYgKiBzdW0gLyAoaGVpZ2h0ICogd2lkdGgpOwotICAgIGlm
IChkaWZmZXJlbmNlIDw9IHRvbGVyYW5jZSkKLSAgICAgICAgZGlmZmVyZW5jZSA9IDA7Ci0gICAg
ZWxzZSB7Ci0gICAgICAgIGRpZmZlcmVuY2UgPSByb3VuZGYoZGlmZmVyZW5jZSAqIDEwMC4wZikg
LyAxMDAuMGY7Ci0gICAgICAgIGRpZmZlcmVuY2UgPSBtYXgoZGlmZmVyZW5jZSwgMC4wMWYpOyAv
LyByb3VuZCB0byAyIGRlY2ltYWwgcGxhY2VzCi0gICAgICAgICpkaWZmZXJlbmNlSW1hZ2UgPSBk
aWZmZXJlbmNlSW1hZ2VGcm9tRGlmZmVyZW5jZUJ1ZmZlcihkaWZmQnVmZmVyLCB3aWR0aCwgaGVp
Z2h0LCBtYXhEaXN0YW5jZSk7Ci0gICAgfQotCi0gICAgZnJlZShkaWZmQnVmZmVyKTsKLSAgICBy
ZXR1cm4gZGlmZmVyZW5jZTsKLX0KLQotdm9pZCBwcmludEltYWdlKEdka1BpeGJ1ZiogaW1hZ2Up
Ci17Ci0gICAgY2hhciogYnVmZmVyOwotICAgIGdzaXplIGJ1ZmZlclNpemU7Ci0gICAgR0Vycm9y
KiBlcnJvciA9IDA7Ci0gICAgaWYgKCFnZGtfcGl4YnVmX3NhdmVfdG9fYnVmZmVyKGltYWdlLCAm
YnVmZmVyLCAmYnVmZmVyU2l6ZSwgInBuZyIsICZlcnJvciwgTlVMTCkpIHsKLSAgICAgICAgZ19l
cnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgcmV0dXJuOyAvLyBEb24ndCBiYWlsIG91dCwgYXMg
d2UgY2FuIHN0aWxsIHVzZSB0aGUgcGVyY2VudGFnZSBvdXRwdXQuCi0gICAgfQotCi0gICAgcHJp
bnRmKCJDb250ZW50LUxlbmd0aDogJSIgR19HU0laRV9GT1JNQVQgIlxuIiwgYnVmZmVyU2l6ZSk7
Ci0gICAgZndyaXRlKGJ1ZmZlciwgMSwgYnVmZmVyU2l6ZSwgc3Rkb3V0KTsKLX0KLQotdm9pZCBw
cmludEltYWdlRGlmZmVyZW5jZXMoR2RrUGl4YnVmKiBiYXNlbGluZUltYWdlLCBHZGtQaXhidWYq
IGFjdHVhbEltYWdlKQotewotICAgIEdka1BpeGJ1ZiogZGlmZmVyZW5jZUltYWdlID0gMDsKLSAg
ICBmbG9hdCBkaWZmZXJlbmNlID0gY2FsY3VsYXRlRGlmZmVyZW5jZShiYXNlbGluZUltYWdlLCBh
Y3R1YWxJbWFnZSwgJmRpZmZlcmVuY2VJbWFnZSk7Ci0gICAgaWYgKGRpZmZlcmVuY2UgPiAwLjBm
KSB7Ci0gICAgICAgIGlmIChkaWZmZXJlbmNlSW1hZ2UpIHsKLSAgICAgICAgICAgIHByaW50SW1h
Z2UoZGlmZmVyZW5jZUltYWdlKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGRpZmZlcmVu
Y2VJbWFnZSk7Ci0gICAgICAgIH0KLSAgICAgICAgcHJpbnRmKCJkaWZmOiAlMDEuMmYlJSBmYWls
ZWRcbiIsIGRpZmZlcmVuY2UpOwotICAgIH0gZWxzZQotICAgICAgICBwcmludGYoImRpZmY6ICUw
MS4yZiUlIHBhc3NlZFxuIiwgZGlmZmVyZW5jZSk7Ci19Ci0KLWludCBtYWluKGludCBhcmdjLCBj
aGFyKiBhcmd2W10pCi17Ci0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0gICAgR09wdGlvbkNvbnRl
eHQqIGNvbnRleHQgPSBnX29wdGlvbl9jb250ZXh0X25ldygiLSBjb21wYXJlIHR3byBpbWFnZSBm
aWxlcywgcHJpbnRpbmcgdGhlaXIgcGVyY2VudGFnZSBkaWZmZXJlbmNlIGFuZCB0aGUgZGlmZmVy
ZW5jZSBpbWFnZSB0byBzdGRvdXQiKTsKLSAgICBnX29wdGlvbl9jb250ZXh0X2FkZF9tYWluX2Vu
dHJpZXMoY29udGV4dCwgY29tbWFuZExpbmVPcHRpb25FbnRyaWVzLCAwKTsKLSAgICBpZiAoIWdf
b3B0aW9uX2NvbnRleHRfcGFyc2UoY29udGV4dCwgJmFyZ2MsICZhcmd2LCAmZXJyb3IpKSB7Ci0g
ICAgICAgIHByaW50ZigiT3B0aW9uIHBhcnNpbmcgZmFpbGVkOiAlc1xuIiwgZXJyb3ItPm1lc3Nh
Z2UpOwotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAgICByZXR1cm4gMTsKLSAg
ICB9Ci0KLSAgICBHZGtQaXhidWYqIGFjdHVhbEltYWdlID0gMDsKLSAgICBHZGtQaXhidWYqIGJh
c2VsaW5lSW1hZ2UgPSAwOwotICAgIGNoYXIgYnVmZmVyWzIwNDhdOwotICAgIHdoaWxlIChmZ2V0
cyhidWZmZXIsIHNpemVvZihidWZmZXIpLCBzdGRpbikpIHsKLSAgICAgICAgLy8gQ29udmVydCB0
aGUgZmlyc3QgbmV3bGluZSBpbnRvIGEgTlVMIGNoYXJhY3RlciBzbyB0aGF0IHN0cnRvayBkb2Vz
bid0IHByb2R1Y2UgaXQuCi0gICAgICAgIGNoYXIqIG5ld0xpbmVDaGFyYWN0ZXIgPSBzdHJjaHIo
YnVmZmVyLCAnXG4nKTsKLSAgICAgICAgaWYgKG5ld0xpbmVDaGFyYWN0ZXIpCi0gICAgICAgICAg
ICAqbmV3TGluZUNoYXJhY3RlciA9ICdcMCc7Ci0KLSAgICAgICAgaWYgKCFzdHJuY21wKCJDb250
ZW50LUxlbmd0aDogIiwgYnVmZmVyLCAxNikpIHsKLSAgICAgICAgICAgIGdjaGFyKiogdG9rZW5z
ID0gZ19zdHJzcGxpdChidWZmZXIsICIgIiwgMCk7Ci0gICAgICAgICAgICBpZiAoIXRva2Vuc1sx
XSkgewotICAgICAgICAgICAgICAgIGdfc3RyZnJlZXYodG9rZW5zKTsKLSAgICAgICAgICAgICAg
ICBwcmludGYoIkVycm9yLCBpbWFnZSBzaXplIG11c3QgYmUgc3BlY2lmaWVkLi5cbiIpOwotICAg
ICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBsb25n
IGltYWdlU2l6ZSA9IHN0cnRvbCh0b2tlbnNbMV0sIDAsIDEwKTsKLSAgICAgICAgICAgIGdfc3Ry
ZnJlZXYodG9rZW5zKTsKLSAgICAgICAgICAgIGlmIChpbWFnZVNpemUgPiAwICYmICFhY3R1YWxJ
bWFnZSkgewotICAgICAgICAgICAgICAgIGlmICghKGFjdHVhbEltYWdlID0gcmVhZFBpeGJ1ZkZy
b21TdGRpbihpbWFnZVNpemUpKSkgewotICAgICAgICAgICAgICAgICAgICBwcmludGYoIkVycm9y
LCBjb3VsZCBub3QgcmVhZCBhY3R1YWwgaW1hZ2UuXG4iKTsKLSAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIGlmIChpbWFn
ZVNpemUgPiAwICYmICFiYXNlbGluZUltYWdlKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCEoYmFz
ZWxpbmVJbWFnZSA9IHJlYWRQaXhidWZGcm9tU3RkaW4oaW1hZ2VTaXplKSkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgcHJpbnRmKCJFcnJvciwgY291bGQgbm90IHJlYWQgYmFzZWxpbmUgaW1hZ2Uu
XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICBwcmludGYoIkVycm9yLCBpbWFn
ZSBzaXplIG11c3QgYmUgc3BlY2lmaWVkLi5cbiIpOwotICAgICAgICAgICAgICAgIHJldHVybiAx
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFjdHVhbEltYWdlICYm
IGJhc2VsaW5lSW1hZ2UpIHsKLSAgICAgICAgICAgIHByaW50SW1hZ2VEaWZmZXJlbmNlcyhiYXNl
bGluZUltYWdlLCBhY3R1YWxJbWFnZSk7Ci0gICAgICAgICAgICBnX29iamVjdF91bnJlZihhY3R1
YWxJbWFnZSk7Ci0gICAgICAgICAgICBnX29iamVjdF91bnJlZihiYXNlbGluZUltYWdlKTsKLSAg
ICAgICAgICAgIGFjdHVhbEltYWdlID0gMDsKLSAgICAgICAgICAgIGJhc2VsaW5lSW1hZ2UgPSAw
OwotICAgICAgICB9Ci0KLSAgICAgICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgfQotCi0gICAgcmV0
dXJuIDA7Ci19Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306519</attachid>
            <date>2017-04-07 11:24:23 -0700</date>
            <delta_ts>2017-04-07 11:38:39 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk-image-diff-cairo.diff</filename>
            <type>text/plain</type>
            <size>30779</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMzVh
ZWQ4NzE1MC4uMzhlNmUwMDAwM2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxNy0wNC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVtb3ZlIHRo
ZSBHREsgZGVwZW5kZW5jeSBmcm9tIEltYWdlRGlmZgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjYWlybyBvbmx5IGltcGxlbWVudGF0aW9uIG9m
IEltYWdlRGlmZi4gV2UgY3VycmVudGx5IGhhdmUgMyBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25z
IG9mIEltYWdlRGlmZjogdGhlCisgICAgICAgIEdkayBiYXNlZCBvbmUgdXNlZCBieSBHVEsrIHBv
cnQsIHRoZSBjYWlybyBiYXNlZCBvbmUgdXNlZCBieSBXaW5DYWlybyBhbmQgdGhlIENHIGJhc2Vk
IG9uZS4gTW9zdCBvZiB0aGUgY29kZSBpcworICAgICAgICBhY3R1YWxseSBjb21tb24gaW4gYWxs
IG9mIHRoZW0sIGJ1dCBpdCdzIGR1cGxpY2F0ZWQuIFNvLCBJJ3ZlIHRha2VuIGFkdmFudGFnZSBv
ZiB0aGlzIHBhdGNoIHRvIHJlZmFjdG9yIHRoZQorICAgICAgICBJbWFnZURpZmYgY29kZSB0byBz
aGFyZSB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uLiBUaGlzIHBhdGNoIGFkZHMgdGhlIGNyb3Nz
LXBsYXRmb3JtIGNvZGUsIGFuZCB0aGUgY2Fpcm8KKyAgICAgICAgaW1wbGVtZW50YXRpb24gYW5k
IGVuYWJsZXMgaXQgaW4gdGhlIEdUSysgcG9ydC4gSW4gZm9sbG93IHVwIHBhdGNoZXMgd2UgY2Fu
IG1vdmUgV2luQ2Fpcm8gdG8gdGhpcyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgYWxzbyBh
ZGQgQ0cgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBJbWFnZURpZmYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogSW1hZ2VEaWZmL0NhaXJvLmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBJ
bWFnZURpZmYvSW1hZ2VEaWZmLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAg
KiBJbWFnZURpZmYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogSW1hZ2VEaWZmL1BsYXRm
b3JtSW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6
aXNDb21wYXRpYmxlKToKKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6ZGlmZmVy
ZW5jZSk6CisgICAgICAgICogSW1hZ2VEaWZmL1BsYXRmb3JtSW1hZ2UuaDogQWRkZWQuCisgICAg
ICAgICogSW1hZ2VEaWZmL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHA6IEFkZGVkLgorICAg
ICAgICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tU3RkaW4pOgorICAgICAg
ICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRGlmZkRhdGEpOgorICAgICAg
ICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpQbGF0Zm9ybUltYWdlKToKKyAgICAgICAgKElt
YWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6flBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoSW1hZ2VE
aWZmOjpQbGF0Zm9ybUltYWdlOjp3aWR0aCk6CisgICAgICAgIChJbWFnZURpZmY6OlBsYXRmb3Jt
SW1hZ2U6OmhlaWdodCk6CisgICAgICAgIChJbWFnZURpZmY6OlBsYXRmb3JtSW1hZ2U6OnJvd0J5
dGVzKToKKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEpOgorICAg
ICAgICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpwaXhlbHMpOgorICAgICAgICAoSW1hZ2VE
aWZmOjpQbGF0Zm9ybUltYWdlOjp3cml0ZUFzUE5HVG9TdGRvdXQpOgorICAgICAgICAqIEltYWdl
RGlmZi9ndGsvSW1hZ2VEaWZmLmNwcDogUmVtb3ZlZC4KKwogMjAxNy0wNC0wNiAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRm9udFdpdGhG
ZWF0dXJlcyB0ZXN0IGZvbnQgcGFzcyBPVFMKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlmZi9D
TWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxpc3RzLnR4dAppbmRleCBmZGM1
ODRkNDI2NC4uYzM5MzYzNTQ4ODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxp
c3RzLnR4dAorKysgYi9Ub29scy9JbWFnZURpZmYvQ01ha2VMaXN0cy50eHQKQEAgLTIsNiArMiwx
NSBAQCBzZXQoSU1BR0VfRElGRl9ESVIgIiR7VE9PTFNfRElSfS9JbWFnZURpZmYiKQogCiBzZXQo
SU1BR0VfRElGRl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUyAiIikKIAorc2V0KElNQUdFX0RJ
RkZfU09VUkNFUworICAgICR7SU1BR0VfRElGRl9ESVJ9L0ltYWdlRGlmZi5jcHAKKyAgICAke0lN
QUdFX0RJRkZfRElSfS9QbGF0Zm9ybUltYWdlLmNwcAorKQorCitsaXN0KEFQUEVORCBJTUFHRV9E
SUZGX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAke0lNQUdFX0RJRkZfRElSfQorKQorCiBzZXQo
SU1BR0VfRElGRl9MSUJSQVJJRVMKICAgICBXVEYKICkKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdl
RGlmZi9DYWlyby5jbWFrZSBiL1Rvb2xzL0ltYWdlRGlmZi9DYWlyby5jbWFrZQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmJhNDNkZDg3Y2MKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9JbWFnZURpZmYvQ2Fpcm8uY21ha2UKQEAgLTAsMCArMSwxMSBAQAorbGlzdChB
UFBFTkQgSU1BR0VfRElGRl9TT1VSQ0VTCisgICAgJHtJTUFHRV9ESUZGX0RJUn0vY2Fpcm8vUGxh
dGZvcm1JbWFnZUNhaXJvLmNwcAorKQorCitsaXN0KEFQUEVORCBJTUFHRV9ESUZGX1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTCisgICAgJHtDQUlST19JTkNMVURFX0RJUlN9CispCisKK2xpc3Qo
QVBQRU5EIElNQUdFX0RJRkZfTElCUkFSSUVTCisgICAgJHtDQUlST19MSUJSQVJJRVN9CispCmRp
ZmYgLS1naXQgYS9Ub29scy9JbWFnZURpZmYvSW1hZ2VEaWZmLmNwcCBiL1Rvb2xzL0ltYWdlRGlm
Zi9JbWFnZURpZmYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4z
NWY0ODU2N2JkMgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9JbWFnZURpZmYu
Y3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1IEJlbiBMYSBNb25pY2EgPGJlbi5s
YW1vbmljYUBnbWFpbC5jb20+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0
ZGxpYj4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW1hZ2VEaWZmOworCisjaWYgT1MoV0lORE9XUykKKyNkZWZpbmUgRk9STUFUX1NJ
WkVfVCAiSXUiCisjZWxzZQorI2RlZmluZSBGT1JNQVRfU0laRV9UICJ6dSIKKyNlbmRpZgorCitp
bnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQoreworI2lmIFBMQVRGT1JNKFdJ
TikKKyAgICBfc2V0bW9kZSgwLCBfT19CSU5BUlkpOworICAgIF9zZXRtb2RlKDEsIF9PX0JJTkFS
WSk7CisjZW5kaWYKKworICAgIGZsb2F0IHRvbGVyYW5jZSA9IDAuMGY7CisKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAxOyBpIDwgYXJnYzsgKytpKSB7CisgICAgICAgIGlmICghc3RyY21wKGFyZ3Zb
aV0sICItdCIpIHx8ICFzdHJjbXAoYXJndltpXSwgIi0tdG9sZXJhbmNlIikpIHsKKyAgICAgICAg
ICAgIGlmIChpID49IGFyZ2MgLSAxKQorICAgICAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAg
ICAgICB0b2xlcmFuY2UgPSBzdHJ0b2YoYXJndltpICsgMV0sIDApOworICAgICAgICAgICAgKytp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjaGFyIGJ1
ZmZlclsyMDQ4XTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4gYWN0dWFsSW1h
Z2U7CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IGJhc2VsaW5lSW1hZ2U7CisK
KyAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBzaXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7CisgICAg
ICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IG5ld2xpbmUgaW50byBhIE5VTCBjaGFyYWN0ZXIgc28g
dGhhdCBzdHJ0b2sgZG9lc24ndCBwcm9kdWNlIGl0LgorICAgICAgICBjaGFyKiBuZXdMaW5lQ2hh
cmFjdGVyID0gc3RyY2hyKGJ1ZmZlciwgJ1xuJyk7CisgICAgICAgIGlmIChuZXdMaW5lQ2hhcmFj
dGVyKQorICAgICAgICAgICAgKm5ld0xpbmVDaGFyYWN0ZXIgPSAnXDAnOworCisgICAgICAgIGlm
ICghc3RybmNtcCgiQ29udGVudC1MZW5ndGg6ICIsIGJ1ZmZlciwgMTYpKSB7CisgICAgICAgICAg
ICBzdHJ0b2soYnVmZmVyLCAiICIpOworCisgICAgICAgICAgICBpbnQgaW1hZ2VTaXplID0gc3Ry
dG9sKHN0cnRvaygwLCAiICIpLCAwLCAxMCk7CisgICAgICAgICAgICBpZiAoaW1hZ2VTaXplIDw9
IDApIHsKKyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBpbWFnZSBzaXpl
IG11c3QgYmUgc3BlY2lmaWVkLlxuIik7CisgICAgICAgICAgICAgICAgcmV0dXJuIEVYSVRfRkFJ
TFVSRTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFhY3R1YWxJbWFnZSkgewor
ICAgICAgICAgICAgICAgIGlmICghKGFjdHVhbEltYWdlID0gUGxhdGZvcm1JbWFnZTo6Y3JlYXRl
RnJvbVN0ZGluKGltYWdlU2l6ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiRXJyb3I6IGNvdWxkIG5vdCByZWFkIGFjdHVhbCBpbWFnZS5cbiIpOworICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIWJhc2VsaW5lSW1hZ2UpIHsKKyAgICAgICAgICAgICAgICBpZiAo
IShiYXNlbGluZUltYWdlID0gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbVN0ZGluKGltYWdlU2l6
ZSkpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IGNvdWxk
IG5vdCByZWFkIGJhc2VsaW5lIGltYWdlLlxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBFWElUX0ZBSUxVUkU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAg
ICB9CisKKyAgICAgICAgaWYgKGFjdHVhbEltYWdlICYmIGJhc2VsaW5lSW1hZ2UpIHsKKyAgICAg
ICAgICAgIGlmICghYWN0dWFsSW1hZ2UtPmlzQ29tcGF0aWJsZSgqYmFzZWxpbmVJbWFnZSkpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYWN0dWFsSW1hZ2UtPndpZHRoKCkgIT0gYmFzZWxpbmVJbWFn
ZS0+d2lkdGgoKSB8fCBhY3R1YWxJbWFnZS0+aGVpZ2h0KCkgIT0gYmFzZWxpbmVJbWFnZS0+aGVp
Z2h0KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogdGVz
dCBhbmQgcmVmZXJlbmNlIGltYWdlcyBoYXZlIGRpZmZlcmVudCBzaXplcy4gVGVzdCBpbWFnZSBp
cyAlIiBGT1JNQVRfU0laRV9UICJ4JSIgRk9STUFUX1NJWkVfVCAiLCByZWZlcmVuY2UgaW1hZ2Ug
aXMgJSIgRk9STUFUX1NJWkVfVCAieCUiIEZPUk1BVF9TSVpFX1QgIlxuIiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGFjdHVhbEltYWdlLT53aWR0aCgpLCBhY3R1YWxJbWFnZS0+aGVpZ2h0KCks
IGJhc2VsaW5lSW1hZ2UtPndpZHRoKCksIGJhc2VsaW5lSW1hZ2UtPmhlaWdodCgpKTsKKyAgICAg
ICAgICAgICAgICB9IGVsc2UgaWYgKGFjdHVhbEltYWdlLT5oYXNBbHBoYSgpICE9IGJhc2VsaW5l
SW1hZ2UtPmhhc0FscGhhKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJFcnJvcjogdGVzdCBhbmQgcmVmZXJlbmNlIGltYWdlcyBkaWZmZXIgaW4gYWxwaGEuIFRlc3Qg
aW1hZ2UgJXMgYWxwaGEsIHJlZmVyZW5jZSBpbWFnZSAlcyBhbHBoYS5cbiIsCisgICAgICAgICAg
ICAgICAgICAgICAgICBhY3R1YWxJbWFnZS0+aGFzQWxwaGEoKSA/ICJoYXMiIDogImRvZXMgbm90
IGhhdmUiLCBiYXNlbGluZUltYWdlLT5oYXNBbHBoYSgpID8gImhhcyIgOiAiZG9lcyBub3QgaGF2
ZSIpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZB
SUxVUkU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZsb2F0IGRpZmZlcmVuY2UgPSAx
MDAuMGY7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4gZGlmZklt
YWdlID0gYWN0dWFsSW1hZ2UtPmRpZmZlcmVuY2UoKmJhc2VsaW5lSW1hZ2UsIGRpZmZlcmVuY2Up
OworICAgICAgICAgICAgaWYgKGRpZmZlcmVuY2UgPD0gdG9sZXJhbmNlKQorICAgICAgICAgICAg
ICAgIGRpZmZlcmVuY2UgPSAwLjBmOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAg
ICAgZGlmZmVyZW5jZSA9IHJvdW5kZihkaWZmZXJlbmNlICogMTAwLjBmKSAvIDEwMC4wZjsKKyAg
ICAgICAgICAgICAgICBkaWZmZXJlbmNlID0gc3RkOjptYXg8ZmxvYXQ+KGRpZmZlcmVuY2UsIDAu
MDFmKTsgLy8gcm91bmQgdG8gMiBkZWNpbWFsIHBsYWNlcworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBpZiAoZGlmZmVyZW5jZSA+IDAuMGYpIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlm
ZkltYWdlKQorICAgICAgICAgICAgICAgICAgICBkaWZmSW1hZ2UtPndyaXRlQXNQTkdUb1N0ZG91
dCgpOworICAgICAgICAgICAgICAgIGZwcmludGYoc3Rkb3V0LCAiZGlmZjogJTAxLjJmJSUgZmFp
bGVkXG4iLCBkaWZmZXJlbmNlKTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAg
IGZwcmludGYoc3Rkb3V0LCAiZGlmZjogJTAxLjJmJSUgcGFzc2VkXG4iLCBkaWZmZXJlbmNlKTsK
KworICAgICAgICAgICAgYWN0dWFsSW1hZ2UgPSBudWxscHRyOworICAgICAgICAgICAgYmFzZWxp
bmVJbWFnZSA9IG51bGxwdHI7CisgICAgICAgIH0KKworICAgICAgICBmZmx1c2goc3Rkb3V0KTsK
KyAgICB9CisKKyAgICByZXR1cm4gRVhJVF9TVUNDRVNTOworfQpkaWZmIC0tZ2l0IGEvVG9vbHMv
SW1hZ2VEaWZmL1BsYXRmb3JtR1RLLmNtYWtlIGIvVG9vbHMvSW1hZ2VEaWZmL1BsYXRmb3JtR1RL
LmNtYWtlCmluZGV4IDhiMzdjYTA4YjliLi5jNGRjZTAwNzJmZiAxMDA2NDQKLS0tIGEvVG9vbHMv
SW1hZ2VEaWZmL1BsYXRmb3JtR1RLLmNtYWtlCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9y
bUdUSy5jbWFrZQpAQCAtMSwxMSArMSwyIEBACi1zZXQoSU1BR0VfRElGRl9TT1VSQ0VTCi0gICAg
JHtJTUFHRV9ESUZGX0RJUn0vZ3RrL0ltYWdlRGlmZi5jcHAKLSkKK2luY2x1ZGUoQ2Fpcm8uY21h
a2UpCiAKLWxpc3QoQVBQRU5EIElNQUdFX0RJRkZfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMK
LSAgICAke0dUS19JTkNMVURFX0RJUlN9Ci0pCi0KLWxpc3QoQVBQRU5EIElNQUdFX0RJRkZfTElC
UkFSSUVTCi0gICAgJHtHVEtfTElCUkFSSUVTfQotKQpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VE
aWZmL1BsYXRmb3JtSW1hZ2UuY3BwIGIvVG9vbHMvSW1hZ2VEaWZmL1BsYXRmb3JtSW1hZ2UuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4zZjAzY2Q0ZGMyYgotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUltYWdlLmNwcApAQCAtMCww
ICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA1LCAyMDA3LCAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwNSBCZW4gTGEgTW9u
aWNhIDxiZW4ubGFtb25pY2FAZ21haWwuY29tPi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTEgQnJlbnQgRnVsZ2hhbS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKworI2luY2x1ZGUgPGFsZ29yaXRobT4K
KworbmFtZXNwYWNlIEltYWdlRGlmZiB7CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aXNDb21wYXRp
YmxlKGNvbnN0IFBsYXRmb3JtSW1hZ2UmIG90aGVyKSBjb25zdAoreworICAgIHJldHVybiB3aWR0
aCgpID09IG90aGVyLndpZHRoKCkKKyAgICAgICAgJiYgaGVpZ2h0KCkgPT0gb3RoZXIuaGVpZ2h0
KCkKKyAgICAgICAgJiYgcm93Qnl0ZXMoKSA9PSBvdGhlci5yb3dCeXRlcygpCisgICAgICAgICYm
IGhhc0FscGhhKCkgPT0gb3RoZXIuaGFzQWxwaGEoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFBs
YXRmb3JtSW1hZ2U+IFBsYXRmb3JtSW1hZ2U6OmRpZmZlcmVuY2UoY29uc3QgUGxhdGZvcm1JbWFn
ZSYgb3RoZXIsIGZsb2F0JiBwZXJjZW50YWdlRGlmZmVyZW5jZSkKK3sKKyAgICBzaXplX3Qgd2lk
dGggPSB0aGlzLT53aWR0aCgpOworICAgIHNpemVfdCBoZWlnaHQgPSB0aGlzLT5oZWlnaHQoKTsK
KworICAgIC8vIENvbXBhcmUgdGhlIGNvbnRlbnQgb2YgdGhlIDIgYml0bWFwcworICAgIHZvaWQq
IGRpZmZCdWZmZXIgPSBtYWxsb2Mod2lkdGggKiBoZWlnaHQpOworICAgIGZsb2F0IGNvdW50ID0g
MC4wZjsKKyAgICBmbG9hdCBzdW0gPSAwLjBmOworICAgIGZsb2F0IG1heERpc3RhbmNlID0gMC4w
ZjsKKyAgICB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWwgPSB0aGlzLT5waXhlbHMoKTsKKyAgICB1
bnNpZ25lZCBjaGFyKiBwaXhlbCA9IG90aGVyLnBpeGVscygpOworICAgIHVuc2lnbmVkIGNoYXIq
IGRpZmZQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRpZmZCdWZmZXIp
OworICAgIGZvciAoc2l6ZV90IHkgPSAwOyB5IDwgaGVpZ2h0OyArK3kpIHsKKyAgICAgICAgZm9y
IChzaXplX3QgeCA9IDA7IHggPCB3aWR0aDsgKyt4KSB7CisgICAgICAgICAgICBmbG9hdCByZWQg
PSAocGl4ZWxbMF0gLSBiYXNlUGl4ZWxbMF0pIC8gc3RkOjptYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQ
aXhlbFswXSwgYmFzZVBpeGVsWzBdKTsKKyAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gKHBpeGVs
WzFdIC0gYmFzZVBpeGVsWzFdKSAvIHN0ZDo6bWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMV0s
IGJhc2VQaXhlbFsxXSk7CisgICAgICAgICAgICBmbG9hdCBibHVlID0gKHBpeGVsWzJdIC0gYmFz
ZVBpeGVsWzJdKSAvIHN0ZDo6bWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMl0sIGJhc2VQaXhl
bFsyXSk7CisgICAgICAgICAgICBmbG9hdCBhbHBoYSA9IChwaXhlbFszXSAtIGJhc2VQaXhlbFsz
XSkgLyBzdGQ6Om1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzNdLCBiYXNlUGl4ZWxbM10pOwor
ICAgICAgICAgICAgZmxvYXQgZGlzdGFuY2UgPSBzcXJ0ZihyZWQgKiByZWQgKyBncmVlbiAqIGdy
ZWVuICsgYmx1ZSAqIGJsdWUgKyBhbHBoYSAqIGFscGhhKSAvIDIuMGY7CisKKyAgICAgICAgICAg
ICpkaWZmUGl4ZWwrKyA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KGRpc3RhbmNlICogMjU1
LjBmKTsKKworICAgICAgICAgICAgaWYgKGRpc3RhbmNlID49IDEuMGYgLyAyNTUuMGYpIHsKKyAg
ICAgICAgICAgICAgICBjb3VudCArPSAxLjBmOworICAgICAgICAgICAgICAgIHN1bSArPSBkaXN0
YW5jZTsKKyAgICAgICAgICAgICAgICBpZiAoZGlzdGFuY2UgPiBtYXhEaXN0YW5jZSkKKyAgICAg
ICAgICAgICAgICAgICAgbWF4RGlzdGFuY2UgPSBkaXN0YW5jZTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgYmFzZVBpeGVsICs9IDQ7CisgICAgICAgICAgICBwaXhlbCArPSA0OworICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gQ29tcHV0ZSB0aGUgZGlmZmVyZW5jZSBhcyBhIHBlcmNl
bnRhZ2UgY29tYmluaW5nIGJvdGggdGhlIG51bWJlciBvZiBkaWZmZXJlbnQgcGl4ZWxzIGFuZCB0
aGVpciBkaWZmZXJlbmNlIGFtb3VudCBpLmUuIHRoZSBhdmVyYWdlIGRpc3RhbmNlIG92ZXIgdGhl
IGVudGlyZSBpbWFnZQorICAgIGlmIChjb3VudCA+IDAuMGYpCisgICAgICAgIHBlcmNlbnRhZ2VE
aWZmZXJlbmNlID0gMTAwLjBmICogc3VtIC8gKGhlaWdodCAqIHdpZHRoKTsKKyAgICBlbHNlCisg
ICAgICAgIHBlcmNlbnRhZ2VEaWZmZXJlbmNlID0gMC4wZjsKKworICAgIGlmICghcGVyY2VudGFn
ZURpZmZlcmVuY2UpIHsKKyAgICAgICAgZnJlZShkaWZmQnVmZmVyKTsKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisgICAgfQorCisgICAgLy8gR2VuZXJhdGUgYSBub3JtYWxpemVkIGRpZmYgaW1h
Z2UgaWYgdGhlcmUgaXMgYW55IGRpZmZlcmVuY2UKKyAgICBpZiAobWF4RGlzdGFuY2UgPCAxLjBm
KSB7CisgICAgICAgIGRpZmZQaXhlbCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+
KGRpZmZCdWZmZXIpOworICAgICAgICBmb3IgKHNpemVfdCBwID0gMDsgcCA8IGhlaWdodCAqIHdp
ZHRoOyArK3ApCisgICAgICAgICAgICBkaWZmUGl4ZWxbcF0gLz0gbWF4RGlzdGFuY2U7CisgICAg
fQorCisgICAgcmV0dXJuIFBsYXRmb3JtSW1hZ2U6OmNyZWF0ZUZyb21EaWZmRGF0YShkaWZmQnVm
ZmVyLCB3aWR0aCwgaGVpZ2h0KTsKK30KKworfSAvLyBuYW1lc3BhY2UgSW1hZ2VEaWZmCmRpZmYg
LS1naXQgYS9Ub29scy9JbWFnZURpZmYvUGxhdGZvcm1JbWFnZS5oIGIvVG9vbHMvSW1hZ2VEaWZm
L1BsYXRmb3JtSW1hZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u
YjAwODBhYmJiZWUKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9JbWFnZURpZmYvUGxhdGZvcm1J
bWFnZS5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgSWdhbGlh
IFMuTC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBB
VVRIT1IgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgPGNtYXRoPgorI2luY2x1ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4K
KworI2lmIFVTRShDQUlSTykKK3R5cGVkZWYgc3RydWN0IF9jYWlyb19zdXJmYWNlIGNhaXJvX3N1
cmZhY2VfdDsKKyNlbmRpZgorCituYW1lc3BhY2UgSW1hZ2VEaWZmIHsKKworY2xhc3MgUGxhdGZv
cm1JbWFnZSB7CitwdWJsaWM6CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUlt
YWdlPiBjcmVhdGVGcm9tU3RkaW4oc2l6ZV90KTsKKyAgICBzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFBsYXRmb3JtSW1hZ2U+IGNyZWF0ZUZyb21EaWZmRGF0YSh2b2lkKiwgc2l6ZV90IHdpZHRoLCBz
aXplX3QgaGVpZ2h0KTsKKworI2lmIFVTRShDQUlSTykKKyAgICBQbGF0Zm9ybUltYWdlKGNhaXJv
X3N1cmZhY2VfdCopOworI2VuZGlmCisgICAgflBsYXRmb3JtSW1hZ2UoKTsKKworICAgIHNpemVf
dCB3aWR0aCgpIGNvbnN0OworICAgIHNpemVfdCBoZWlnaHQoKSBjb25zdDsKKyAgICBzaXplX3Qg
cm93Qnl0ZXMoKSBjb25zdDsKKyAgICBib29sIGhhc0FscGhhKCkgY29uc3Q7CisgICAgdW5zaWdu
ZWQgY2hhciogcGl4ZWxzKCkgY29uc3Q7CisgICAgYm9vbCBpc0NvbXBhdGlibGUoY29uc3QgUGxh
dGZvcm1JbWFnZSYpIGNvbnN0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBk
aWZmZXJlbmNlKGNvbnN0IFBsYXRmb3JtSW1hZ2UmLCBmbG9hdCYgcGVyY2VudGFnZURpZmZlcmVu
Y2UpOworICAgIHZvaWQgd3JpdGVBc1BOR1RvU3Rkb3V0KCk7CisKK3ByaXZhdGU6CisjaWYgVVNF
KENBSVJPKQorICAgIGNhaXJvX3N1cmZhY2VfdCogbV9pbWFnZTsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgSW1hZ2VEaWZmCmRpZmYgLS1naXQgYS9Ub29scy9JbWFnZURpZmYvY2Fpcm8v
UGxhdGZvcm1JbWFnZUNhaXJvLmNwcCBiL1Rvb2xzL0ltYWdlRGlmZi9jYWlyby9QbGF0Zm9ybUlt
YWdlQ2Fpcm8uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41YTAx
NTRjNGEzYgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9jYWlyby9QbGF0Zm9y
bUltYWdlQ2Fpcm8uY3BwCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE3IElnYWxpYSBTLkwuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFV
VEhPUiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNp
bmNsdWRlIDxjYWlyby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpZiBPUyhXSU5ET1dTKQor
I2RlZmluZSBGT1JNQVRfU0laRV9UICJJdSIKKyNlbHNlCisjZGVmaW5lIEZPUk1BVF9TSVpFX1Qg
Inp1IgorI2VuZGlmCisKK25hbWVzcGFjZSBJbWFnZURpZmYgeworCitzdGQ6OnVuaXF1ZV9wdHI8
UGxhdGZvcm1JbWFnZT4gUGxhdGZvcm1JbWFnZTo6Y3JlYXRlRnJvbVN0ZGluKHNpemVfdCBpbWFn
ZVNpemUpCit7CisgICAgc3RydWN0IFJlYWRDb250ZXh0IHsKKyAgICAgICAgY2hhciBidWZmZXJb
MjA0OF07CisgICAgICAgIHVuc2lnbmVkIGxvbmcgaW5jb21pbmdCeXRlczsKKyAgICAgICAgdW5z
aWduZWQgbG9uZyByZWFkQnl0ZXM7CisgICAgfSBjb250ZXh0IHsgeyB9LCBpbWFnZVNpemUsIDAg
fTsKKworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZhY2Vf
Y3JlYXRlX2Zyb21fcG5nX3N0cmVhbSgKKyAgICAgICAgW10odm9pZCogY2xvc3VyZSwgdW5zaWdu
ZWQgY2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoKSAtPiBjYWlyb19zdGF0dXNfdCB7CisgICAg
ICAgICAgICBhdXRvJiBjb250ZXh0ID0gKnN0YXRpY19jYXN0PFJlYWRDb250ZXh0Kj4oY2xvc3Vy
ZSk7CisgICAgICAgICAgICBjb250ZXh0LnJlYWRCeXRlcyArPSBsZW5ndGg7CisKKyAgICAgICAg
ICAgIGZyZWFkKGRhdGEsIDEsIGxlbmd0aCwgc3RkaW4pOworICAgICAgICAgICAgcmV0dXJuIENB
SVJPX1NUQVRVU19TVUNDRVNTOworICAgICAgICB9LCAmY29udGV4dCk7CisKKyAgICBpZiAoY2Fp
cm9fc3VyZmFjZV9zdGF0dXMoc3VyZmFjZSkgIT0gQ0FJUk9fU1RBVFVTX1NVQ0NFU1MpIHsKKyAg
ICAgICAgY2Fpcm9fc3VyZmFjZV9kZXN0cm95KHN1cmZhY2UpOworICAgICAgICByZXR1cm4gbnVs
bHB0cjsKKyAgICB9CisKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUltYWdl
PihzdXJmYWNlKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IFBsYXRmb3Jt
SW1hZ2U6OmNyZWF0ZUZyb21EaWZmRGF0YSh2b2lkKiBkYXRhLCBzaXplX3Qgd2lkdGgsIHNpemVf
dCBoZWlnaHQpCit7CisgICAgY2Fpcm9fc3VyZmFjZV90KiBzdXJmYWNlID0gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9jcmVhdGVfZm9yX2RhdGEocmVpbnRlcnByZXRfY2FzdDx1bnNpZ25lZCBjaGFyKj4o
ZGF0YSksIENBSVJPX0ZPUk1BVF9BOCwKKyAgICAgICAgd2lkdGgsIGhlaWdodCwgY2Fpcm9fZm9y
bWF0X3N0cmlkZV9mb3Jfd2lkdGgoQ0FJUk9fRk9STUFUX0E4LCB3aWR0aCkpOworICAgIHN0YXRp
YyBjYWlyb191c2VyX2RhdGFfa2V5X3QgaW1hZ2VEYXRhS2V5OworICAgIGNhaXJvX3N1cmZhY2Vf
c2V0X3VzZXJfZGF0YShzdXJmYWNlLCAmaW1hZ2VEYXRhS2V5LCBkYXRhLCBbXSh2b2lkKiBkYXRh
KSB7IGZyZWUoZGF0YSk7IH0pOworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBsYXRmb3Jt
SW1hZ2U+KHN1cmZhY2UpOworfQorCitQbGF0Zm9ybUltYWdlOjpQbGF0Zm9ybUltYWdlKGNhaXJv
X3N1cmZhY2VfdCogc3VyZmFjZSkKKyAgICA6IG1faW1hZ2Uoc3VyZmFjZSkKK3sKK30KKworUGxh
dGZvcm1JbWFnZTo6flBsYXRmb3JtSW1hZ2UoKQoreworICAgIGNhaXJvX3N1cmZhY2VfZGVzdHJv
eShtX2ltYWdlKTsKK30KKworc2l6ZV90IFBsYXRmb3JtSW1hZ2U6OndpZHRoKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfd2lkdGgobV9pbWFnZSk7Cit9CisK
K3NpemVfdCBQbGF0Zm9ybUltYWdlOjpoZWlnaHQoKSBjb25zdAoreworICAgIHJldHVybiBjYWly
b19pbWFnZV9zdXJmYWNlX2dldF9oZWlnaHQobV9pbWFnZSk7Cit9CisKK3NpemVfdCBQbGF0Zm9y
bUltYWdlOjpyb3dCeXRlcygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X3N0cmlkZShtX2ltYWdlKTsKK30KKworYm9vbCBQbGF0Zm9ybUltYWdlOjpoYXNBbHBo
YSgpIGNvbnN0Cit7CisgICAgLy8gV2hhdCBtYXR0ZXJzIGhlcmUgaXMgd2hldGhlciB0aGUgaW1h
Z2UgZGF0YSBoYXMgYW4gYWxwaGEgY2hhbm5lbC4gSW4gY2Fpcm8sIGJvdGgKKyAgICAvLyBDQUlS
T19GT1JNQVRfQVJHQjMyIGFuZCBDQUlST19GT1JNQVRfUkdCMjQgaGF2ZSBhbiBhbHBoYSBjaGFu
bmVsIGV2ZW4gaWYgaXQncworICAgIC8vIGFsd2F5cyAwIGluIHRoZSBDQUlST19GT1JNQVRfUkdC
MjQgY2FzZS4KKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9ybWF0KG1faW1h
Z2UpID09IENBSVJPX0ZPUk1BVF9BUkdCMzIgfHwgY2Fpcm9faW1hZ2Vfc3VyZmFjZV9nZXRfZm9y
bWF0KG1faW1hZ2UpID09IENBSVJPX0ZPUk1BVF9SR0IyNDsKK30KKwordW5zaWduZWQgY2hhciog
UGxhdGZvcm1JbWFnZTo6cGl4ZWxzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1hZ2Vf
c3VyZmFjZV9nZXRfZGF0YShtX2ltYWdlKTsKK30KKwordm9pZCBQbGF0Zm9ybUltYWdlOjp3cml0
ZUFzUE5HVG9TdGRvdXQoKQoreworICAgIHN0cnVjdCBXcml0ZUNvbnRleHQgeworICAgICAgICB1
bnNpZ25lZCBsb25nIHdyaXR0ZW5CeXRlcyB7IDAgfTsKKyAgICB9IGNvbnRleHQ7CisKKyAgICAv
LyBGaXJzdCB3ZSBzdW0gdXAgdGhlIGJ5dGVzIHRoYXQgYXJlIHRvIGJlIHdyaXR0ZW4uCisgICAg
Y2Fpcm9fc3VyZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKG1faW1hZ2UsCisgICAgICAgIFtdKHZv
aWQqIGNsb3N1cmUsIGNvbnN0IHVuc2lnbmVkIGNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpIC0+IGNh
aXJvX3N0YXR1c190IHsKKyAgICAgICAgICAgIGF1dG8mIGNvbnRleHQgPSAqc3RhdGljX2Nhc3Q8
V3JpdGVDb250ZXh0Kj4oY2xvc3VyZSk7CisgICAgICAgICAgICBjb250ZXh0LndyaXR0ZW5CeXRl
cyArPSBsZW5ndGg7CisgICAgICAgICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7Cisg
ICAgICAgIH0sICZjb250ZXh0KTsKKyAgICBmcHJpbnRmKHN0ZG91dCwgIkNvbnRlbnQtTGVuZ3Ro
OiAlIiBGT1JNQVRfU0laRV9UICJcbiIsIGNvbnRleHQud3JpdHRlbkJ5dGVzKTsKKyAgICBjYWly
b19zdXJmYWNlX3dyaXRlX3RvX3BuZ19zdHJlYW0obV9pbWFnZSwKKyAgICAgICAgW10odm9pZCos
IGNvbnN0IHVuc2lnbmVkIGNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgLT4gY2Fpcm9fc3Rh
dHVzX3QgeworICAgICAgICAgICAgZndyaXRlKGRhdGEsIDEsIGxlbmd0aCwgc3Rkb3V0KTsKKyAg
ICAgICAgICAgIHJldHVybiBDQUlST19TVEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfSwgbnVsbHB0
cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEltYWdlRGlmZgpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1h
Z2VEaWZmL2d0ay9JbWFnZURpZmYuY3BwIGIvVG9vbHMvSW1hZ2VEaWZmL2d0ay9JbWFnZURpZmYu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA1YTEyOGQxZTMxMi4uMDAwMDAwMDAw
MDAKLS0tIGEvVG9vbHMvSW1hZ2VEaWZmL2d0ay9JbWFnZURpZmYuY3BwCisrKyAvZGV2L251bGwK
QEAgLTEsMjQxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgWmFuIERvYmVyc2Vr
IDx6YW5kb2JlcnNla0BnbWFpbC5jb20+Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgSWdhbGlhIFMu
TC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRl
IDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8Y21hdGg+Ci0jaW5jbHVkZSA8Y3N0ZGlvPgotI2luY2x1
ZGUgPGNzdGRsaWI+Ci0jaW5jbHVkZSA8Y3N0cmluZz4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0K
LXVzaW5nIG5hbWVzcGFjZSBzdGQ7Ci0KLXN0YXRpYyBkb3VibGUgdG9sZXJhbmNlID0gMDsKLXN0
YXRpYyBHT3B0aW9uRW50cnkgY29tbWFuZExpbmVPcHRpb25FbnRyaWVzW10gPSAKLXsKLSAgICB7
ICJ0b2xlcmFuY2UiLCAwLCAwLCBHX09QVElPTl9BUkdfRE9VQkxFLCAmdG9sZXJhbmNlLCAiUGVy
Y2VudGFnZSBkaWZmZXJlbmNlIGJldHdlZW4gaW1hZ2VzIGJlZm9yZSBjb25zaWRlcmluZyB0aGVt
IGRpZmZlcmVudCIsICJUIiB9LAotICAgIHsgMCwgMCwgMCwgR19PUFRJT05fQVJHX05PTkUsIDAs
IDAsIDAgfSwKLX07Ci0KLUdka1BpeGJ1ZiogcmVhZFBpeGJ1ZkZyb21TdGRpbihsb25nIGltYWdl
U2l6ZSkKLXsKLSAgICB1bnNpZ25lZCBjaGFyIGltYWdlQnVmZmVyWzIwNDhdOwotICAgIEdka1Bp
eGJ1ZkxvYWRlciogbG9hZGVyID0gZ2RrX3BpeGJ1Zl9sb2FkZXJfbmV3X3dpdGhfdHlwZSgicG5n
IiwgMCk7Ci0gICAgR0Vycm9yKiBlcnJvciA9IDA7Ci0KLSAgICB3aGlsZSAoaW1hZ2VTaXplID4g
MCkgewotICAgICAgICBzaXplX3QgYnl0ZXNUb1JlYWQgPSBtaW48aW50PihpbWFnZVNpemUsIDIw
NDgpOwotICAgICAgICBzaXplX3QgYnl0ZXNSZWFkID0gZnJlYWQoaW1hZ2VCdWZmZXIsIDEsIGJ5
dGVzVG9SZWFkLCBzdGRpbik7Ci0KLSAgICAgICAgaWYgKCFnZGtfcGl4YnVmX2xvYWRlcl93cml0
ZShsb2FkZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZ3VjaGFyKj4oaW1hZ2VCdWZmZXIpLCBi
eXRlc1JlYWQsICZlcnJvcikpIHsKLSAgICAgICAgICAgIGdfZXJyb3JfZnJlZShlcnJvcik7Ci0g
ICAgICAgICAgICBnZGtfcGl4YnVmX2xvYWRlcl9jbG9zZShsb2FkZXIsIDApOwotICAgICAgICAg
ICAgZ19vYmplY3RfdW5yZWYobG9hZGVyKTsKLSAgICAgICAgICAgIHJldHVybiAwOwotICAgICAg
ICB9Ci0KLSAgICAgICAgaW1hZ2VTaXplIC09IHN0YXRpY19jYXN0PGludD4oYnl0ZXNSZWFkKTsK
LSAgICB9Ci0KLSAgICBnZGtfcGl4YnVmX2xvYWRlcl9jbG9zZShsb2FkZXIsIDApOwotICAgIEdk
a1BpeGJ1ZiogZGVjb2RlZEltYWdlID0gR0RLX1BJWEJVRihnX29iamVjdF9yZWYoZ2RrX3BpeGJ1
Zl9sb2FkZXJfZ2V0X3BpeGJ1Zihsb2FkZXIpKSk7Ci0gICAgZ19vYmplY3RfdW5yZWYobG9hZGVy
KTsKLSAgICByZXR1cm4gZGVjb2RlZEltYWdlOwotfQotCi1HZGtQaXhidWYqIGRpZmZlcmVuY2VJ
bWFnZUZyb21EaWZmZXJlbmNlQnVmZmVyKHVuc2lnbmVkIGNoYXIqIGJ1ZmZlciwgaW50IHdpZHRo
LCBpbnQgaGVpZ2h0LCBmbG9hdCBtYXhEaXN0YW5jZSkKLXsKLSAgICBHZGtQaXhidWYqIGltYWdl
ID0gZ2RrX3BpeGJ1Zl9uZXcoR0RLX0NPTE9SU1BBQ0VfUkdCLCBGQUxTRSwgOCwgd2lkdGgsIGhl
aWdodCk7Ci0gICAgaWYgKCFpbWFnZSkKLSAgICAgICAgcmV0dXJuIGltYWdlOwotCi0gICAgYm9v
bCBzaG91bGROb3JtYWxpemUgPSBtYXhEaXN0YW5jZSA+IDAgJiYgbWF4RGlzdGFuY2UgPCAxOwot
ICAgIGludCByb3dTdHJpZGUgPSBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoaW1hZ2UpOwotICAg
IHVuc2lnbmVkIGNoYXIqIGRpZmZQaXhlbHMgPSBnZGtfcGl4YnVmX2dldF9waXhlbHMoaW1hZ2Up
OwotICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAgICAgICBmb3IgKGlu
dCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFyKiBk
aWZmUGl4ZWwgPSBkaWZmUGl4ZWxzICsgKHkgKiByb3dTdHJpZGUpICsgKHggKiAzKTsKLSAgICAg
ICAgICAgIHVuc2lnbmVkIGNoYXIgYnVmZmVyUGl4ZWwgPSAqYnVmZmVyKys7Ci0gICAgICAgICAg
ICBpZiAoc2hvdWxkTm9ybWFsaXplKQotICAgICAgICAgICAgICAgIGJ1ZmZlclBpeGVsIC89IG1h
eERpc3RhbmNlOwotICAgICAgICAgICAgZGlmZlBpeGVsWzBdID0gZGlmZlBpeGVsWzFdID0gZGlm
ZlBpeGVsWzJdID0gYnVmZmVyUGl4ZWw7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
aW1hZ2U7Ci19Ci0KLWZsb2F0IGNhbGN1bGF0ZURpZmZlcmVuY2UoR2RrUGl4YnVmKiBiYXNlbGlu
ZUltYWdlLCBHZGtQaXhidWYqIGFjdHVhbEltYWdlLCBHZGtQaXhidWYqKiBkaWZmZXJlbmNlSW1h
Z2UpCi17Ci0gICAgaW50IHdpZHRoID0gZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoYWN0dWFsSW1hZ2Up
OwotICAgIGludCBoZWlnaHQgPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoYWN0dWFsSW1hZ2UpOwot
ICAgIGludCBudW1iZXJPZkNoYW5uZWxzID0gZ2RrX3BpeGJ1Zl9nZXRfbl9jaGFubmVscyhhY3R1
YWxJbWFnZSk7Ci0gICAgaWYgKCh3aWR0aCAhPSBnZGtfcGl4YnVmX2dldF93aWR0aChiYXNlbGlu
ZUltYWdlKSkKLSAgICAgICAgfHwgKGhlaWdodCAhPSBnZGtfcGl4YnVmX2dldF9oZWlnaHQoYmFz
ZWxpbmVJbWFnZSkpCi0gICAgICAgIHx8IChudW1iZXJPZkNoYW5uZWxzICE9IGdka19waXhidWZf
Z2V0X25fY2hhbm5lbHMoYmFzZWxpbmVJbWFnZSkpCi0gICAgICAgIHx8IChnZGtfcGl4YnVmX2dl
dF9oYXNfYWxwaGEoYWN0dWFsSW1hZ2UpICE9IGdka19waXhidWZfZ2V0X2hhc19hbHBoYShiYXNl
bGluZUltYWdlKSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciwgdGVzdCBhbmQg
cmVmZXJlbmNlIGltYWdlIGhhdmUgZGlmZmVyZW50IHByb3BlcnRpZXMuXG4iKTsKLSAgICAgICAg
cmV0dXJuIDEwMDsgLy8gQ29tcGxldGVseSBkaWZmZXJlbnQuCi0gICAgfQotCi0gICAgdW5zaWdu
ZWQgY2hhciogZGlmZkJ1ZmZlciA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXIqPihtYWxsb2Mo
d2lkdGggKiBoZWlnaHQpKTsKLSAgICBmbG9hdCBjb3VudCA9IDA7Ci0gICAgZmxvYXQgc3VtID0g
MDsKLSAgICBmbG9hdCBtYXhEaXN0YW5jZSA9IDA7Ci0gICAgaW50IGFjdHVhbFJvd1N0cmlkZSA9
IGdka19waXhidWZfZ2V0X3Jvd3N0cmlkZShhY3R1YWxJbWFnZSk7Ci0gICAgaW50IGJhc2VSb3dT
dHJpZGUgPSBnZGtfcGl4YnVmX2dldF9yb3dzdHJpZGUoYmFzZWxpbmVJbWFnZSk7Ci0gICAgdW5z
aWduZWQgY2hhciogYWN0dWFsUGl4ZWxzID0gZ2RrX3BpeGJ1Zl9nZXRfcGl4ZWxzKGFjdHVhbElt
YWdlKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBiYXNlUGl4ZWxzID0gZ2RrX3BpeGJ1Zl9nZXRfcGl4
ZWxzKGJhc2VsaW5lSW1hZ2UpOwotICAgIHVuc2lnbmVkIGNoYXIqIGN1cnJlbnREaWZmUGl4ZWwg
PSBkaWZmQnVmZmVyOwotICAgIGZvciAoaW50IHggPSAwOyB4IDwgd2lkdGg7IHgrKykgewotICAg
ICAgICBmb3IgKGludCB5ID0gMDsgeSA8IGhlaWdodDsgeSsrKSB7Ci0gICAgICAgICAgICB1bnNp
Z25lZCBjaGFyKiBhY3R1YWxQaXhlbCA9IGFjdHVhbFBpeGVscyArICh5ICogYWN0dWFsUm93U3Ry
aWRlKSArICh4ICogbnVtYmVyT2ZDaGFubmVscyk7Ci0gICAgICAgICAgICB1bnNpZ25lZCBjaGFy
KiBiYXNlUGl4ZWwgPSBiYXNlUGl4ZWxzICsgKHkgKiBiYXNlUm93U3RyaWRlKSArICh4ICogbnVt
YmVyT2ZDaGFubmVscyk7Ci0KLSAgICAgICAgICAgIGZsb2F0IHJlZCA9IChhY3R1YWxQaXhlbFsw
XSAtIGJhc2VQaXhlbFswXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFswXSwgYmFzZVBp
eGVsWzBdKTsKLSAgICAgICAgICAgIGZsb2F0IGdyZWVuID0gKGFjdHVhbFBpeGVsWzFdIC0gYmFz
ZVBpeGVsWzFdKSAvIG1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzFdLCBiYXNlUGl4ZWxbMV0p
OwotICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IChhY3R1YWxQaXhlbFsyXSAtIGJhc2VQaXhlbFsy
XSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFsyXSwgYmFzZVBpeGVsWzJdKTsKLSAgICAg
ICAgICAgIGZsb2F0IGFscGhhID0gKGFjdHVhbFBpeGVsWzNdIC0gYmFzZVBpeGVsWzNdKSAvIG1h
eDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzNdLCBiYXNlUGl4ZWxbM10pOwotICAgICAgICAgICAg
ZmxvYXQgZGlzdGFuY2UgPSBzcXJ0ZihyZWQgKiByZWQgKyBncmVlbiAqIGdyZWVuICsgYmx1ZSAq
IGJsdWUgKyBhbHBoYSAqIGFscGhhKSAvIDIuMGY7Ci0KLSAgICAgICAgICAgICpjdXJyZW50RGlm
ZlBpeGVsKysgPSAodW5zaWduZWQgY2hhcikoZGlzdGFuY2UgKiAyNTUuMGYpOwotCi0gICAgICAg
ICAgICBpZiAoZGlzdGFuY2UgPj0gMS4wZiAvIDI1NS4wZikgewotICAgICAgICAgICAgICAgIGNv
dW50ICs9IDEuMGY7Ci0gICAgICAgICAgICAgICAgc3VtICs9IGRpc3RhbmNlOwotICAgICAgICAg
ICAgICAgIG1heERpc3RhbmNlID0gbWF4PGZsb2F0PihtYXhEaXN0YW5jZSwgZGlzdGFuY2UpOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gQ29tcHV0ZSB0aGUgZGlm
ZmVyZW5jZSBhcyBhIHBlcmNlbnRhZ2UgY29tYmluaW5nIGJvdGggdGhlIG51bWJlciBvZgotICAg
IC8vIGRpZmZlcmVudCBwaXhlbHMgYW5kIHRoZWlyIGRpZmZlcmVuY2UgYW1vdW50IGkuZS4gdGhl
IGF2ZXJhZ2UgZGlzdGFuY2UKLSAgICAvLyBvdmVyIHRoZSBlbnRpcmUgaW1hZ2UKLSAgICBmbG9h
dCBkaWZmZXJlbmNlID0gMDsKLSAgICBpZiAoY291bnQgPiAwLjBmKQotICAgICAgICBkaWZmZXJl
bmNlID0gMTAwLjBmICogc3VtIC8gKGhlaWdodCAqIHdpZHRoKTsKLSAgICBpZiAoZGlmZmVyZW5j
ZSA8PSB0b2xlcmFuY2UpCi0gICAgICAgIGRpZmZlcmVuY2UgPSAwOwotICAgIGVsc2UgewotICAg
ICAgICBkaWZmZXJlbmNlID0gcm91bmRmKGRpZmZlcmVuY2UgKiAxMDAuMGYpIC8gMTAwLjBmOwot
ICAgICAgICBkaWZmZXJlbmNlID0gbWF4KGRpZmZlcmVuY2UsIDAuMDFmKTsgLy8gcm91bmQgdG8g
MiBkZWNpbWFsIHBsYWNlcwotICAgICAgICAqZGlmZmVyZW5jZUltYWdlID0gZGlmZmVyZW5jZUlt
YWdlRnJvbURpZmZlcmVuY2VCdWZmZXIoZGlmZkJ1ZmZlciwgd2lkdGgsIGhlaWdodCwgbWF4RGlz
dGFuY2UpOwotICAgIH0KLQotICAgIGZyZWUoZGlmZkJ1ZmZlcik7Ci0gICAgcmV0dXJuIGRpZmZl
cmVuY2U7Ci19Ci0KLXZvaWQgcHJpbnRJbWFnZShHZGtQaXhidWYqIGltYWdlKQotewotICAgIGNo
YXIqIGJ1ZmZlcjsKLSAgICBnc2l6ZSBidWZmZXJTaXplOwotICAgIEdFcnJvciogZXJyb3IgPSAw
OwotICAgIGlmICghZ2RrX3BpeGJ1Zl9zYXZlX3RvX2J1ZmZlcihpbWFnZSwgJmJ1ZmZlciwgJmJ1
ZmZlclNpemUsICJwbmciLCAmZXJyb3IsIE5VTEwpKSB7Ci0gICAgICAgIGdfZXJyb3JfZnJlZShl
cnJvcik7Ci0gICAgICAgIHJldHVybjsgLy8gRG9uJ3QgYmFpbCBvdXQsIGFzIHdlIGNhbiBzdGls
bCB1c2UgdGhlIHBlcmNlbnRhZ2Ugb3V0cHV0LgotICAgIH0KLQotICAgIHByaW50ZigiQ29udGVu
dC1MZW5ndGg6ICUiIEdfR1NJWkVfRk9STUFUICJcbiIsIGJ1ZmZlclNpemUpOwotICAgIGZ3cml0
ZShidWZmZXIsIDEsIGJ1ZmZlclNpemUsIHN0ZG91dCk7Ci19Ci0KLXZvaWQgcHJpbnRJbWFnZURp
ZmZlcmVuY2VzKEdka1BpeGJ1ZiogYmFzZWxpbmVJbWFnZSwgR2RrUGl4YnVmKiBhY3R1YWxJbWFn
ZSkKLXsKLSAgICBHZGtQaXhidWYqIGRpZmZlcmVuY2VJbWFnZSA9IDA7Ci0gICAgZmxvYXQgZGlm
ZmVyZW5jZSA9IGNhbGN1bGF0ZURpZmZlcmVuY2UoYmFzZWxpbmVJbWFnZSwgYWN0dWFsSW1hZ2Us
ICZkaWZmZXJlbmNlSW1hZ2UpOwotICAgIGlmIChkaWZmZXJlbmNlID4gMC4wZikgewotICAgICAg
ICBpZiAoZGlmZmVyZW5jZUltYWdlKSB7Ci0gICAgICAgICAgICBwcmludEltYWdlKGRpZmZlcmVu
Y2VJbWFnZSk7Ci0gICAgICAgICAgICBnX29iamVjdF91bnJlZihkaWZmZXJlbmNlSW1hZ2UpOwot
ICAgICAgICB9Ci0gICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgZmFpbGVkXG4iLCBkaWZm
ZXJlbmNlKTsKLSAgICB9IGVsc2UKLSAgICAgICAgcHJpbnRmKCJkaWZmOiAlMDEuMmYlJSBwYXNz
ZWRcbiIsIGRpZmZlcmVuY2UpOwotfQotCi1pbnQgbWFpbihpbnQgYXJnYywgY2hhciogYXJndltd
KQotewotICAgIEdFcnJvciogZXJyb3IgPSAwOwotICAgIEdPcHRpb25Db250ZXh0KiBjb250ZXh0
ID0gZ19vcHRpb25fY29udGV4dF9uZXcoIi0gY29tcGFyZSB0d28gaW1hZ2UgZmlsZXMsIHByaW50
aW5nIHRoZWlyIHBlcmNlbnRhZ2UgZGlmZmVyZW5jZSBhbmQgdGhlIGRpZmZlcmVuY2UgaW1hZ2Ug
dG8gc3Rkb3V0Iik7Ci0gICAgZ19vcHRpb25fY29udGV4dF9hZGRfbWFpbl9lbnRyaWVzKGNvbnRl
eHQsIGNvbW1hbmRMaW5lT3B0aW9uRW50cmllcywgMCk7Ci0gICAgaWYgKCFnX29wdGlvbl9jb250
ZXh0X3BhcnNlKGNvbnRleHQsICZhcmdjLCAmYXJndiwgJmVycm9yKSkgewotICAgICAgICBwcmlu
dGYoIk9wdGlvbiBwYXJzaW5nIGZhaWxlZDogJXNcbiIsIGVycm9yLT5tZXNzYWdlKTsKLSAgICAg
ICAgZ19lcnJvcl9mcmVlKGVycm9yKTsKLSAgICAgICAgcmV0dXJuIDE7Ci0gICAgfQotCi0gICAg
R2RrUGl4YnVmKiBhY3R1YWxJbWFnZSA9IDA7Ci0gICAgR2RrUGl4YnVmKiBiYXNlbGluZUltYWdl
ID0gMDsKLSAgICBjaGFyIGJ1ZmZlclsyMDQ4XTsKLSAgICB3aGlsZSAoZmdldHMoYnVmZmVyLCBz
aXplb2YoYnVmZmVyKSwgc3RkaW4pKSB7Ci0gICAgICAgIC8vIENvbnZlcnQgdGhlIGZpcnN0IG5l
d2xpbmUgaW50byBhIE5VTCBjaGFyYWN0ZXIgc28gdGhhdCBzdHJ0b2sgZG9lc24ndCBwcm9kdWNl
IGl0LgotICAgICAgICBjaGFyKiBuZXdMaW5lQ2hhcmFjdGVyID0gc3RyY2hyKGJ1ZmZlciwgJ1xu
Jyk7Ci0gICAgICAgIGlmIChuZXdMaW5lQ2hhcmFjdGVyKQotICAgICAgICAgICAgKm5ld0xpbmVD
aGFyYWN0ZXIgPSAnXDAnOwotCi0gICAgICAgIGlmICghc3RybmNtcCgiQ29udGVudC1MZW5ndGg6
ICIsIGJ1ZmZlciwgMTYpKSB7Ci0gICAgICAgICAgICBnY2hhcioqIHRva2VucyA9IGdfc3Ryc3Bs
aXQoYnVmZmVyLCAiICIsIDApOwotICAgICAgICAgICAgaWYgKCF0b2tlbnNbMV0pIHsKLSAgICAg
ICAgICAgICAgICBnX3N0cmZyZWV2KHRva2Vucyk7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJF
cnJvciwgaW1hZ2Ugc2l6ZSBtdXN0IGJlIHNwZWNpZmllZC4uXG4iKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgbG9uZyBpbWFnZVNpemUg
PSBzdHJ0b2wodG9rZW5zWzFdLCAwLCAxMCk7Ci0gICAgICAgICAgICBnX3N0cmZyZWV2KHRva2Vu
cyk7Ci0gICAgICAgICAgICBpZiAoaW1hZ2VTaXplID4gMCAmJiAhYWN0dWFsSW1hZ2UpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoIShhY3R1YWxJbWFnZSA9IHJlYWRQaXhidWZGcm9tU3RkaW4oaW1h
Z2VTaXplKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciwgY291bGQgbm90
IHJlYWQgYWN0dWFsIGltYWdlLlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSBpZiAoaW1hZ2VTaXplID4gMCAm
JiAhYmFzZWxpbmVJbWFnZSkgewotICAgICAgICAgICAgICAgIGlmICghKGJhc2VsaW5lSW1hZ2Ug
PSByZWFkUGl4YnVmRnJvbVN0ZGluKGltYWdlU2l6ZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IHByaW50ZigiRXJyb3IsIGNvdWxkIG5vdCByZWFkIGJhc2VsaW5lIGltYWdlLlxuIik7Ci0gICAg
ICAgICAgICAgICAgICAgIHJldHVybiAxOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgcHJpbnRmKCJFcnJvciwgaW1hZ2Ugc2l6ZSBtdXN0
IGJlIHNwZWNpZmllZC4uXG4iKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhY3R1YWxJbWFnZSAmJiBiYXNlbGluZUlt
YWdlKSB7Ci0gICAgICAgICAgICBwcmludEltYWdlRGlmZmVyZW5jZXMoYmFzZWxpbmVJbWFnZSwg
YWN0dWFsSW1hZ2UpOwotICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoYWN0dWFsSW1hZ2UpOwot
ICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoYmFzZWxpbmVJbWFnZSk7Ci0gICAgICAgICAgICBh
Y3R1YWxJbWFnZSA9IDA7Ci0gICAgICAgICAgICBiYXNlbGluZUltYWdlID0gMDsKLSAgICAgICAg
fQotCi0gICAgICAgIGZmbHVzaChzdGRvdXQpOwotICAgIH0KLQotICAgIHJldHVybiAwOwotfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>306520</attachid>
            <date>2017-04-07 11:38:39 -0700</date>
            <delta_ts>2017-04-10 04:24:14 -0700</delta_ts>
            <desc>New patch</desc>
            <filename>wk-image-diff-cairo.diff</filename>
            <type>text/plain</type>
            <size>30774</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCBkMzVh
ZWQ4NzE1MC4uMzhlNmUwMDAwM2YgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9U
b29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzOSBAQAorMjAxNy0wNC0wNyAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dUS10gUmVtb3ZlIHRo
ZSBHREsgZGVwZW5kZW5jeSBmcm9tIEltYWdlRGlmZgorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODUyOTkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBjYWlybyBvbmx5IGltcGxlbWVudGF0aW9uIG9m
IEltYWdlRGlmZi4gV2UgY3VycmVudGx5IGhhdmUgMyBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25z
IG9mIEltYWdlRGlmZjogdGhlCisgICAgICAgIEdkayBiYXNlZCBvbmUgdXNlZCBieSBHVEsrIHBv
cnQsIHRoZSBjYWlybyBiYXNlZCBvbmUgdXNlZCBieSBXaW5DYWlybyBhbmQgdGhlIENHIGJhc2Vk
IG9uZS4gTW9zdCBvZiB0aGUgY29kZSBpcworICAgICAgICBhY3R1YWxseSBjb21tb24gaW4gYWxs
IG9mIHRoZW0sIGJ1dCBpdCdzIGR1cGxpY2F0ZWQuIFNvLCBJJ3ZlIHRha2VuIGFkdmFudGFnZSBv
ZiB0aGlzIHBhdGNoIHRvIHJlZmFjdG9yIHRoZQorICAgICAgICBJbWFnZURpZmYgY29kZSB0byBz
aGFyZSB0aGUgY29tbW9uIGltcGxlbWVudGF0aW9uLiBUaGlzIHBhdGNoIGFkZHMgdGhlIGNyb3Nz
LXBsYXRmb3JtIGNvZGUsIGFuZCB0aGUgY2Fpcm8KKyAgICAgICAgaW1wbGVtZW50YXRpb24gYW5k
IGVuYWJsZXMgaXQgaW4gdGhlIEdUSysgcG9ydC4gSW4gZm9sbG93IHVwIHBhdGNoZXMgd2UgY2Fu
IG1vdmUgV2luQ2Fpcm8gdG8gdGhpcyBpbXBsZW1lbnRhdGlvbgorICAgICAgICBhbmQgYWxzbyBh
ZGQgQ0cgaW1wbGVtZW50YXRpb24uCisKKyAgICAgICAgKiBJbWFnZURpZmYvQ01ha2VMaXN0cy50
eHQ6CisgICAgICAgICogSW1hZ2VEaWZmL0NhaXJvLmNtYWtlOiBBZGRlZC4KKyAgICAgICAgKiBJ
bWFnZURpZmYvSW1hZ2VEaWZmLmNwcDogQWRkZWQuCisgICAgICAgIChtYWluKToKKyAgICAgICAg
KiBJbWFnZURpZmYvUGxhdGZvcm1HVEsuY21ha2U6CisgICAgICAgICogSW1hZ2VEaWZmL1BsYXRm
b3JtSW1hZ2UuY3BwOiBBZGRlZC4KKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6
aXNDb21wYXRpYmxlKToKKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6ZGlmZmVy
ZW5jZSk6CisgICAgICAgICogSW1hZ2VEaWZmL1BsYXRmb3JtSW1hZ2UuaDogQWRkZWQuCisgICAg
ICAgICogSW1hZ2VEaWZmL2NhaXJvL1BsYXRmb3JtSW1hZ2VDYWlyby5jcHA6IEFkZGVkLgorICAg
ICAgICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tU3RkaW4pOgorICAgICAg
ICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRGlmZkRhdGEpOgorICAgICAg
ICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpQbGF0Zm9ybUltYWdlKToKKyAgICAgICAgKElt
YWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6flBsYXRmb3JtSW1hZ2UpOgorICAgICAgICAoSW1hZ2VE
aWZmOjpQbGF0Zm9ybUltYWdlOjp3aWR0aCk6CisgICAgICAgIChJbWFnZURpZmY6OlBsYXRmb3Jt
SW1hZ2U6OmhlaWdodCk6CisgICAgICAgIChJbWFnZURpZmY6OlBsYXRmb3JtSW1hZ2U6OnJvd0J5
dGVzKToKKyAgICAgICAgKEltYWdlRGlmZjo6UGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEpOgorICAg
ICAgICAoSW1hZ2VEaWZmOjpQbGF0Zm9ybUltYWdlOjpwaXhlbHMpOgorICAgICAgICAoSW1hZ2VE
aWZmOjpQbGF0Zm9ybUltYWdlOjp3cml0ZUFzUE5HVG9TdGRvdXQpOgorICAgICAgICAqIEltYWdl
RGlmZi9ndGsvSW1hZ2VEaWZmLmNwcDogUmVtb3ZlZC4KKwogMjAxNy0wNC0wNiAgTXlsZXMgQy4g
TWF4ZmllbGQgIDxtbWF4ZmllbGRAYXBwbGUuY29tPgogCiAgICAgICAgIE1ha2UgRm9udFdpdGhG
ZWF0dXJlcyB0ZXN0IGZvbnQgcGFzcyBPVFMKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlmZi9D
TWFrZUxpc3RzLnR4dCBiL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxpc3RzLnR4dAppbmRleCBmZGM1
ODRkNDI2NC4uYzM5MzYzNTQ4ODEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0ltYWdlRGlmZi9DTWFrZUxp
c3RzLnR4dAorKysgYi9Ub29scy9JbWFnZURpZmYvQ01ha2VMaXN0cy50eHQKQEAgLTIsNiArMiwx
NSBAQCBzZXQoSU1BR0VfRElGRl9ESVIgIiR7VE9PTFNfRElSfS9JbWFnZURpZmYiKQogCiBzZXQo
SU1BR0VfRElGRl9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUyAiIikKIAorc2V0KElNQUdFX0RJ
RkZfU09VUkNFUworICAgICR7SU1BR0VfRElGRl9ESVJ9L0ltYWdlRGlmZi5jcHAKKyAgICAke0lN
QUdFX0RJRkZfRElSfS9QbGF0Zm9ybUltYWdlLmNwcAorKQorCitsaXN0KEFQUEVORCBJTUFHRV9E
SUZGX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAke0lNQUdFX0RJRkZfRElSfQorKQorCiBzZXQo
SU1BR0VfRElGRl9MSUJSQVJJRVMKICAgICBXVEYKICkKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdl
RGlmZi9DYWlyby5jbWFrZSBiL1Rvb2xzL0ltYWdlRGlmZi9DYWlyby5jbWFrZQpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMmJhNDNkZDg3Y2MKLS0tIC9kZXYvbnVsbAor
KysgYi9Ub29scy9JbWFnZURpZmYvQ2Fpcm8uY21ha2UKQEAgLTAsMCArMSwxMSBAQAorbGlzdChB
UFBFTkQgSU1BR0VfRElGRl9TT1VSQ0VTCisgICAgJHtJTUFHRV9ESUZGX0RJUn0vY2Fpcm8vUGxh
dGZvcm1JbWFnZUNhaXJvLmNwcAorKQorCitsaXN0KEFQUEVORCBJTUFHRV9ESUZGX1NZU1RFTV9J
TkNMVURFX0RJUkVDVE9SSUVTCisgICAgJHtDQUlST19JTkNMVURFX0RJUlN9CispCisKK2xpc3Qo
QVBQRU5EIElNQUdFX0RJRkZfTElCUkFSSUVTCisgICAgJHtDQUlST19MSUJSQVJJRVN9CispCmRp
ZmYgLS1naXQgYS9Ub29scy9JbWFnZURpZmYvSW1hZ2VEaWZmLmNwcCBiL1Rvb2xzL0ltYWdlRGlm
Zi9JbWFnZURpZmYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45
ZjdmOTdkZGI2MAotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL0ltYWdlRGlmZi9JbWFnZURpZmYu
Y3BwCkBAIC0wLDAgKzEsMTMxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBT
LkwuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUsIDIwMDcsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA1IEJlbiBMYSBNb25pY2EgPGJlbi5s
YW1vbmljYUBnbWFpbC5jb20+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtSW1hZ2UuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8Y3N0
ZGxpYj4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit1c2luZyBu
YW1lc3BhY2UgSW1hZ2VEaWZmOworCisjaWYgT1MoV0lORE9XUykKKyNkZWZpbmUgRk9STUFUX1NJ
WkVfVCAiSXUiCisjZWxzZQorI2RlZmluZSBGT1JNQVRfU0laRV9UICJ6dSIKKyNlbmRpZgorCitp
bnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciogYXJndltdKQoreworI2lmIFBMQVRGT1JNKFdJ
TikKKyAgICBfc2V0bW9kZSgwLCBfT19CSU5BUlkpOworICAgIF9zZXRtb2RlKDEsIF9PX0JJTkFS
WSk7CisjZW5kaWYKKworICAgIGZsb2F0IHRvbGVyYW5jZSA9IDAuMGY7CisKKyAgICBmb3IgKGlu
dCBpID0gMTsgaSA8IGFyZ2M7ICsraSkgeworICAgICAgICBpZiAoIXN0cmNtcChhcmd2W2ldLCAi
LXQiKSB8fCAhc3RyY21wKGFyZ3ZbaV0sICItLXRvbGVyYW5jZSIpKSB7CisgICAgICAgICAgICBp
ZiAoaSA+PSBhcmdjIC0gMSkKKyAgICAgICAgICAgICAgICBleGl0KDEpOworICAgICAgICAgICAg
dG9sZXJhbmNlID0gc3RydG9mKGFyZ3ZbaSArIDFdLCAwKTsKKyAgICAgICAgICAgICsraTsKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAgfQorCisgICAgY2hhciBidWZmZXJb
MjA0OF07CisgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IGFjdHVhbEltYWdlOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBiYXNlbGluZUltYWdlOworCisgICAg
d2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9mKGJ1ZmZlciksIHN0ZGluKSkgeworICAgICAgICAv
LyBDb252ZXJ0IHRoZSBmaXJzdCBuZXdsaW5lIGludG8gYSBOVUwgY2hhcmFjdGVyIHNvIHRoYXQg
c3RydG9rIGRvZXNuJ3QgcHJvZHVjZSBpdC4KKyAgICAgICAgY2hhciogbmV3TGluZUNoYXJhY3Rl
ciA9IHN0cmNocihidWZmZXIsICdcbicpOworICAgICAgICBpZiAobmV3TGluZUNoYXJhY3RlcikK
KyAgICAgICAgICAgICpuZXdMaW5lQ2hhcmFjdGVyID0gJ1wwJzsKKworICAgICAgICBpZiAoIXN0
cm5jbXAoIkNvbnRlbnQtTGVuZ3RoOiAiLCBidWZmZXIsIDE2KSkgeworICAgICAgICAgICAgc3Ry
dG9rKGJ1ZmZlciwgIiAiKTsKKworICAgICAgICAgICAgaW50IGltYWdlU2l6ZSA9IHN0cnRvbChz
dHJ0b2soMCwgIiAiKSwgMCwgMTApOworICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSA8PSAwKSB7
CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvcjogaW1hZ2Ugc2l6ZSBtdXN0
IGJlIHNwZWNpZmllZC5cbiIpOworICAgICAgICAgICAgICAgIHJldHVybiBFWElUX0ZBSUxVUkU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghYWN0dWFsSW1hZ2UpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIShhY3R1YWxJbWFnZSA9IFBsYXRmb3JtSW1hZ2U6OmNyZWF0ZUZyb21T
dGRpbihpbWFnZVNpemUpKSkgeworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkVycm9yOiBjb3VsZCBub3QgcmVhZCBhY3R1YWwgaW1hZ2UuXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEVYSVRfRkFJTFVSRTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9IGVsc2UgaWYgKCFiYXNlbGluZUltYWdlKSB7CisgICAgICAgICAgICAgICAgaWYgKCEoYmFz
ZWxpbmVJbWFnZSA9IFBsYXRmb3JtSW1hZ2U6OmNyZWF0ZUZyb21TdGRpbihpbWFnZVNpemUpKSkg
eworICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkVycm9yOiBjb3VsZCBub3Qg
cmVhZCBiYXNlbGluZSBpbWFnZS5cbiIpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gRVhJ
VF9GQUlMVVJFOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIGlmIChhY3R1YWxJbWFnZSAmJiBiYXNlbGluZUltYWdlKSB7CisgICAgICAgICAg
ICBpZiAoIWFjdHVhbEltYWdlLT5pc0NvbXBhdGlibGUoKmJhc2VsaW5lSW1hZ2UpKSB7CisgICAg
ICAgICAgICAgICAgaWYgKGFjdHVhbEltYWdlLT53aWR0aCgpICE9IGJhc2VsaW5lSW1hZ2UtPndp
ZHRoKCkgfHwgYWN0dWFsSW1hZ2UtPmhlaWdodCgpICE9IGJhc2VsaW5lSW1hZ2UtPmhlaWdodCgp
KSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3I6IHRlc3QgYW5k
IHJlZmVyZW5jZSBpbWFnZXMgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuIFRlc3QgaW1hZ2UgaXMgJSIg
Rk9STUFUX1NJWkVfVCAieCUiIEZPUk1BVF9TSVpFX1QgIiwgcmVmZXJlbmNlIGltYWdlIGlzICUi
IEZPUk1BVF9TSVpFX1QgInglIiBGT1JNQVRfU0laRV9UICJcbiIsCisgICAgICAgICAgICAgICAg
ICAgICAgICBhY3R1YWxJbWFnZS0+d2lkdGgoKSwgYWN0dWFsSW1hZ2UtPmhlaWdodCgpLCBiYXNl
bGluZUltYWdlLT53aWR0aCgpLCBiYXNlbGluZUltYWdlLT5oZWlnaHQoKSk7CisgICAgICAgICAg
ICAgICAgfSBlbHNlIGlmIChhY3R1YWxJbWFnZS0+aGFzQWxwaGEoKSAhPSBiYXNlbGluZUltYWdl
LT5oYXNBbHBoYSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJy
b3I6IHRlc3QgYW5kIHJlZmVyZW5jZSBpbWFnZXMgZGlmZmVyIGluIGFscGhhLiBUZXN0IGltYWdl
ICVzIGFscGhhLCByZWZlcmVuY2UgaW1hZ2UgJXMgYWxwaGEuXG4iLAorICAgICAgICAgICAgICAg
ICAgICAgICAgYWN0dWFsSW1hZ2UtPmhhc0FscGhhKCkgPyAiaGFzIiA6ICJkb2VzIG5vdCBoYXZl
IiwgYmFzZWxpbmVJbWFnZS0+aGFzQWxwaGEoKSA/ICJoYXMiIDogImRvZXMgbm90IGhhdmUiKTsK
KyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICByZXR1cm4gRVhJVF9GQUlMVVJF
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmbG9hdCBkaWZmZXJlbmNlID0gMTAwLjBm
OworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFBsYXRmb3JtSW1hZ2U+IGRpZmZJbWFnZSA9
IGFjdHVhbEltYWdlLT5kaWZmZXJlbmNlKCpiYXNlbGluZUltYWdlLCBkaWZmZXJlbmNlKTsKKyAg
ICAgICAgICAgIGlmIChkaWZmZXJlbmNlIDw9IHRvbGVyYW5jZSkKKyAgICAgICAgICAgICAgICBk
aWZmZXJlbmNlID0gMC4wZjsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGRp
ZmZlcmVuY2UgPSByb3VuZGYoZGlmZmVyZW5jZSAqIDEwMC4wZikgLyAxMDAuMGY7CisgICAgICAg
ICAgICAgICAgZGlmZmVyZW5jZSA9IHN0ZDo6bWF4PGZsb2F0PihkaWZmZXJlbmNlLCAwLjAxZik7
IC8vIHJvdW5kIHRvIDIgZGVjaW1hbCBwbGFjZXMKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaWYgKGRpZmZlcmVuY2UgPiAwLjBmKSB7CisgICAgICAgICAgICAgICAgaWYgKGRpZmZJbWFn
ZSkKKyAgICAgICAgICAgICAgICAgICAgZGlmZkltYWdlLT53cml0ZUFzUE5HVG9TdGRvdXQoKTsK
KyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZG91dCwgImRpZmY6ICUwMS4yZiUlIGZhaWxlZFxu
IiwgZGlmZmVyZW5jZSk7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBmcHJp
bnRmKHN0ZG91dCwgImRpZmY6ICUwMS4yZiUlIHBhc3NlZFxuIiwgZGlmZmVyZW5jZSk7CisKKyAg
ICAgICAgICAgIGFjdHVhbEltYWdlID0gbnVsbHB0cjsKKyAgICAgICAgICAgIGJhc2VsaW5lSW1h
Z2UgPSBudWxscHRyOworICAgICAgICB9CisKKyAgICAgICAgZmZsdXNoKHN0ZG91dCk7CisgICAg
fQorCisgICAgcmV0dXJuIEVYSVRfU1VDQ0VTUzsKK30KZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdl
RGlmZi9QbGF0Zm9ybUdUSy5jbWFrZSBiL1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUdUSy5jbWFr
ZQppbmRleCA4YjM3Y2EwOGI5Yi4uYzRkY2UwMDcyZmYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0ltYWdl
RGlmZi9QbGF0Zm9ybUdUSy5jbWFrZQorKysgYi9Ub29scy9JbWFnZURpZmYvUGxhdGZvcm1HVEsu
Y21ha2UKQEAgLTEsMTEgKzEsMiBAQAotc2V0KElNQUdFX0RJRkZfU09VUkNFUwotICAgICR7SU1B
R0VfRElGRl9ESVJ9L2d0ay9JbWFnZURpZmYuY3BwCi0pCitpbmNsdWRlKENhaXJvLmNtYWtlKQog
Ci1saXN0KEFQUEVORCBJTUFHRV9ESUZGX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCi0gICAg
JHtHVEtfSU5DTFVERV9ESVJTfQotKQotCi1saXN0KEFQUEVORCBJTUFHRV9ESUZGX0xJQlJBUklF
UwotICAgICR7R1RLX0xJQlJBUklFU30KLSkKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlmZi9Q
bGF0Zm9ybUltYWdlLmNwcCBiL1Rvb2xzL0ltYWdlRGlmZi9QbGF0Zm9ybUltYWdlLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2YwM2NkNGRjMmIKLS0tIC9kZXYv
bnVsbAorKysgYi9Ub29scy9JbWFnZURpZmYvUGxhdGZvcm1JbWFnZS5jcHAKQEAgLTAsMCArMSw5
OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNSwgMjAwNywgMjAxNSBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDUgQmVuIExhIE1vbmljYSA8
YmVuLmxhbW9uaWNhQGdtYWlsLmNvbT4uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJp
Z2h0IChDKSAyMDExIEJyZW50IEZ1bGdoYW0uIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUltYWdlLmgiCisKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisKK25h
bWVzcGFjZSBJbWFnZURpZmYgeworCitib29sIFBsYXRmb3JtSW1hZ2U6OmlzQ29tcGF0aWJsZShj
b25zdCBQbGF0Zm9ybUltYWdlJiBvdGhlcikgY29uc3QKK3sKKyAgICByZXR1cm4gd2lkdGgoKSA9
PSBvdGhlci53aWR0aCgpCisgICAgICAgICYmIGhlaWdodCgpID09IG90aGVyLmhlaWdodCgpCisg
ICAgICAgICYmIHJvd0J5dGVzKCkgPT0gb3RoZXIucm93Qnl0ZXMoKQorICAgICAgICAmJiBoYXNB
bHBoYSgpID09IG90aGVyLmhhc0FscGhhKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9y
bUltYWdlPiBQbGF0Zm9ybUltYWdlOjpkaWZmZXJlbmNlKGNvbnN0IFBsYXRmb3JtSW1hZ2UmIG90
aGVyLCBmbG9hdCYgcGVyY2VudGFnZURpZmZlcmVuY2UpCit7CisgICAgc2l6ZV90IHdpZHRoID0g
dGhpcy0+d2lkdGgoKTsKKyAgICBzaXplX3QgaGVpZ2h0ID0gdGhpcy0+aGVpZ2h0KCk7CisKKyAg
ICAvLyBDb21wYXJlIHRoZSBjb250ZW50IG9mIHRoZSAyIGJpdG1hcHMKKyAgICB2b2lkKiBkaWZm
QnVmZmVyID0gbWFsbG9jKHdpZHRoICogaGVpZ2h0KTsKKyAgICBmbG9hdCBjb3VudCA9IDAuMGY7
CisgICAgZmxvYXQgc3VtID0gMC4wZjsKKyAgICBmbG9hdCBtYXhEaXN0YW5jZSA9IDAuMGY7Cisg
ICAgdW5zaWduZWQgY2hhciogYmFzZVBpeGVsID0gdGhpcy0+cGl4ZWxzKCk7CisgICAgdW5zaWdu
ZWQgY2hhciogcGl4ZWwgPSBvdGhlci5waXhlbHMoKTsKKyAgICB1bnNpZ25lZCBjaGFyKiBkaWZm
UGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkaWZmQnVmZmVyKTsKKyAg
ICBmb3IgKHNpemVfdCB5ID0gMDsgeSA8IGhlaWdodDsgKyt5KSB7CisgICAgICAgIGZvciAoc2l6
ZV90IHggPSAwOyB4IDwgd2lkdGg7ICsreCkgeworICAgICAgICAgICAgZmxvYXQgcmVkID0gKHBp
eGVsWzBdIC0gYmFzZVBpeGVsWzBdKSAvIHN0ZDo6bWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxb
MF0sIGJhc2VQaXhlbFswXSk7CisgICAgICAgICAgICBmbG9hdCBncmVlbiA9IChwaXhlbFsxXSAt
IGJhc2VQaXhlbFsxXSkgLyBzdGQ6Om1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzFdLCBiYXNl
UGl4ZWxbMV0pOworICAgICAgICAgICAgZmxvYXQgYmx1ZSA9IChwaXhlbFsyXSAtIGJhc2VQaXhl
bFsyXSkgLyBzdGQ6Om1heDxmbG9hdD4oMjU1IC0gYmFzZVBpeGVsWzJdLCBiYXNlUGl4ZWxbMl0p
OworICAgICAgICAgICAgZmxvYXQgYWxwaGEgPSAocGl4ZWxbM10gLSBiYXNlUGl4ZWxbM10pIC8g
c3RkOjptYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFszXSwgYmFzZVBpeGVsWzNdKTsKKyAgICAg
ICAgICAgIGZsb2F0IGRpc3RhbmNlID0gc3FydGYocmVkICogcmVkICsgZ3JlZW4gKiBncmVlbiAr
IGJsdWUgKiBibHVlICsgYWxwaGEgKiBhbHBoYSkgLyAyLjBmOworCisgICAgICAgICAgICAqZGlm
ZlBpeGVsKysgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihkaXN0YW5jZSAqIDI1NS4wZik7
CisKKyAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+PSAxLjBmIC8gMjU1LjBmKSB7CisgICAgICAg
ICAgICAgICAgY291bnQgKz0gMS4wZjsKKyAgICAgICAgICAgICAgICBzdW0gKz0gZGlzdGFuY2U7
CisgICAgICAgICAgICAgICAgaWYgKGRpc3RhbmNlID4gbWF4RGlzdGFuY2UpCisgICAgICAgICAg
ICAgICAgICAgIG1heERpc3RhbmNlID0gZGlzdGFuY2U7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGJhc2VQaXhlbCArPSA0OworICAgICAgICAgICAgcGl4ZWwgKz0gNDsKKyAgICAgICAg
fQorICAgIH0KKworICAgIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVuY2UgYXMgYSBwZXJjZW50YWdl
IGNvbWJpbmluZyBib3RoIHRoZSBudW1iZXIgb2YgZGlmZmVyZW50IHBpeGVscyBhbmQgdGhlaXIg
ZGlmZmVyZW5jZSBhbW91bnQgaS5lLiB0aGUgYXZlcmFnZSBkaXN0YW5jZSBvdmVyIHRoZSBlbnRp
cmUgaW1hZ2UKKyAgICBpZiAoY291bnQgPiAwLjBmKQorICAgICAgICBwZXJjZW50YWdlRGlmZmVy
ZW5jZSA9IDEwMC4wZiAqIHN1bSAvIChoZWlnaHQgKiB3aWR0aCk7CisgICAgZWxzZQorICAgICAg
ICBwZXJjZW50YWdlRGlmZmVyZW5jZSA9IDAuMGY7CisKKyAgICBpZiAoIXBlcmNlbnRhZ2VEaWZm
ZXJlbmNlKSB7CisgICAgICAgIGZyZWUoZGlmZkJ1ZmZlcik7CisgICAgICAgIHJldHVybiBudWxs
cHRyOworICAgIH0KKworICAgIC8vIEdlbmVyYXRlIGEgbm9ybWFsaXplZCBkaWZmIGltYWdlIGlm
IHRoZXJlIGlzIGFueSBkaWZmZXJlbmNlCisgICAgaWYgKG1heERpc3RhbmNlIDwgMS4wZikgewor
ICAgICAgICBkaWZmUGl4ZWwgPSByZWludGVycHJldF9jYXN0PHVuc2lnbmVkIGNoYXIqPihkaWZm
QnVmZmVyKTsKKyAgICAgICAgZm9yIChzaXplX3QgcCA9IDA7IHAgPCBoZWlnaHQgKiB3aWR0aDsg
KytwKQorICAgICAgICAgICAgZGlmZlBpeGVsW3BdIC89IG1heERpc3RhbmNlOworICAgIH0KKwor
ICAgIHJldHVybiBQbGF0Zm9ybUltYWdlOjpjcmVhdGVGcm9tRGlmZkRhdGEoZGlmZkJ1ZmZlciwg
d2lkdGgsIGhlaWdodCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEltYWdlRGlmZgpkaWZmIC0tZ2l0
IGEvVG9vbHMvSW1hZ2VEaWZmL1BsYXRmb3JtSW1hZ2UuaCBiL1Rvb2xzL0ltYWdlRGlmZi9QbGF0
Zm9ybUltYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmIwMDgw
YWJiYmVlCi0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMvSW1hZ2VEaWZmL1BsYXRmb3JtSW1hZ2Uu
aApAQCAtMCwwICsxLDYxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IElnYWxpYSBTLkwu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9S
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxj
bWF0aD4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNp
ZiBVU0UoQ0FJUk8pCit0eXBlZGVmIHN0cnVjdCBfY2Fpcm9fc3VyZmFjZSBjYWlyb19zdXJmYWNl
X3Q7CisjZW5kaWYKKworbmFtZXNwYWNlIEltYWdlRGlmZiB7CisKK2NsYXNzIFBsYXRmb3JtSW1h
Z2UgeworcHVibGljOgorICAgIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4g
Y3JlYXRlRnJvbVN0ZGluKHNpemVfdCk7CisgICAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQbGF0
Zm9ybUltYWdlPiBjcmVhdGVGcm9tRGlmZkRhdGEodm9pZCosIHNpemVfdCB3aWR0aCwgc2l6ZV90
IGhlaWdodCk7CisKKyNpZiBVU0UoQ0FJUk8pCisgICAgUGxhdGZvcm1JbWFnZShjYWlyb19zdXJm
YWNlX3QqKTsKKyNlbmRpZgorICAgIH5QbGF0Zm9ybUltYWdlKCk7CisKKyAgICBzaXplX3Qgd2lk
dGgoKSBjb25zdDsKKyAgICBzaXplX3QgaGVpZ2h0KCkgY29uc3Q7CisgICAgc2l6ZV90IHJvd0J5
dGVzKCkgY29uc3Q7CisgICAgYm9vbCBoYXNBbHBoYSgpIGNvbnN0OworICAgIHVuc2lnbmVkIGNo
YXIqIHBpeGVscygpIGNvbnN0OworICAgIGJvb2wgaXNDb21wYXRpYmxlKGNvbnN0IFBsYXRmb3Jt
SW1hZ2UmKSBjb25zdDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UGxhdGZvcm1JbWFnZT4gZGlmZmVy
ZW5jZShjb25zdCBQbGF0Zm9ybUltYWdlJiwgZmxvYXQmIHBlcmNlbnRhZ2VEaWZmZXJlbmNlKTsK
KyAgICB2b2lkIHdyaXRlQXNQTkdUb1N0ZG91dCgpOworCitwcml2YXRlOgorI2lmIFVTRShDQUlS
TykKKyAgICBjYWlyb19zdXJmYWNlX3QqIG1faW1hZ2U7CisjZW5kaWYKK307CisKK30gLy8gbmFt
ZXNwYWNlIEltYWdlRGlmZgpkaWZmIC0tZ2l0IGEvVG9vbHMvSW1hZ2VEaWZmL2NhaXJvL1BsYXRm
b3JtSW1hZ2VDYWlyby5jcHAgYi9Ub29scy9JbWFnZURpZmYvY2Fpcm8vUGxhdGZvcm1JbWFnZUNh
aXJvLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNWEwMTU0YzRh
M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9JbWFnZURpZmYvY2Fpcm8vUGxhdGZvcm1JbWFn
ZUNhaXJvLmNwcApAQCAtMCwwICsxLDEzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBJ
Z2FsaWEgUy5MLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1Ig
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1JbWFnZS5oIgorCisjaW5jbHVk
ZSA8Y2Fpcm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWYgT1MoV0lORE9XUykKKyNkZWZp
bmUgRk9STUFUX1NJWkVfVCAiSXUiCisjZWxzZQorI2RlZmluZSBGT1JNQVRfU0laRV9UICJ6dSIK
KyNlbmRpZgorCituYW1lc3BhY2UgSW1hZ2VEaWZmIHsKKworc3RkOjp1bmlxdWVfcHRyPFBsYXRm
b3JtSW1hZ2U+IFBsYXRmb3JtSW1hZ2U6OmNyZWF0ZUZyb21TdGRpbihzaXplX3QgaW1hZ2VTaXpl
KQoreworICAgIHN0cnVjdCBSZWFkQ29udGV4dCB7CisgICAgICAgIGNoYXIgYnVmZmVyWzIwNDhd
OworICAgICAgICB1bnNpZ25lZCBsb25nIGluY29taW5nQnl0ZXM7CisgICAgICAgIHVuc2lnbmVk
IGxvbmcgcmVhZEJ5dGVzOworICAgIH0gY29udGV4dCB7IHsgfSwgaW1hZ2VTaXplLCAwIH07CisK
KyAgICBjYWlyb19zdXJmYWNlX3QqIHN1cmZhY2UgPSBjYWlyb19pbWFnZV9zdXJmYWNlX2NyZWF0
ZV9mcm9tX3BuZ19zdHJlYW0oCisgICAgICAgIFtdKHZvaWQqIGNsb3N1cmUsIHVuc2lnbmVkIGNo
YXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkgLT4gY2Fpcm9fc3RhdHVzX3QgeworICAgICAgICAg
ICAgYXV0byYgY29udGV4dCA9ICpzdGF0aWNfY2FzdDxSZWFkQ29udGV4dCo+KGNsb3N1cmUpOwor
ICAgICAgICAgICAgY29udGV4dC5yZWFkQnl0ZXMgKz0gbGVuZ3RoOworCisgICAgICAgICAgICBm
cmVhZChkYXRhLCAxLCBsZW5ndGgsIHN0ZGluKTsKKyAgICAgICAgICAgIHJldHVybiBDQUlST19T
VEFUVVNfU1VDQ0VTUzsKKyAgICAgICAgfSwgJmNvbnRleHQpOworCisgICAgaWYgKGNhaXJvX3N1
cmZhY2Vfc3RhdHVzKHN1cmZhY2UpICE9IENBSVJPX1NUQVRVU19TVUNDRVNTKSB7CisgICAgICAg
IGNhaXJvX3N1cmZhY2VfZGVzdHJveShzdXJmYWNlKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgfQorCisgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGxhdGZvcm1JbWFnZT4oc3Vy
ZmFjZSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxQbGF0Zm9ybUltYWdlPiBQbGF0Zm9ybUltYWdl
OjpjcmVhdGVGcm9tRGlmZkRhdGEodm9pZCogZGF0YSwgc2l6ZV90IHdpZHRoLCBzaXplX3QgaGVp
Z2h0KQoreworICAgIGNhaXJvX3N1cmZhY2VfdCogc3VyZmFjZSA9IGNhaXJvX2ltYWdlX3N1cmZh
Y2VfY3JlYXRlX2Zvcl9kYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8dW5zaWduZWQgY2hhcio+KGRhdGEp
LCBDQUlST19GT1JNQVRfQTgsCisgICAgICAgIHdpZHRoLCBoZWlnaHQsIGNhaXJvX2Zvcm1hdF9z
dHJpZGVfZm9yX3dpZHRoKENBSVJPX0ZPUk1BVF9BOCwgd2lkdGgpKTsKKyAgICBzdGF0aWMgY2Fp
cm9fdXNlcl9kYXRhX2tleV90IGltYWdlRGF0YUtleTsKKyAgICBjYWlyb19zdXJmYWNlX3NldF91
c2VyX2RhdGEoc3VyZmFjZSwgJmltYWdlRGF0YUtleSwgZGF0YSwgW10odm9pZCogZGF0YSkgeyBm
cmVlKGRhdGEpOyB9KTsKKyAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQbGF0Zm9ybUltYWdl
PihzdXJmYWNlKTsKK30KKworUGxhdGZvcm1JbWFnZTo6UGxhdGZvcm1JbWFnZShjYWlyb19zdXJm
YWNlX3QqIHN1cmZhY2UpCisgICAgOiBtX2ltYWdlKHN1cmZhY2UpCit7Cit9CisKK1BsYXRmb3Jt
SW1hZ2U6On5QbGF0Zm9ybUltYWdlKCkKK3sKKyAgICBjYWlyb19zdXJmYWNlX2Rlc3Ryb3kobV9p
bWFnZSk7Cit9CisKK3NpemVfdCBQbGF0Zm9ybUltYWdlOjp3aWR0aCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X3dpZHRoKG1faW1hZ2UpOworfQorCitzaXpl
X3QgUGxhdGZvcm1JbWFnZTo6aGVpZ2h0KCkgY29uc3QKK3sKKyAgICByZXR1cm4gY2Fpcm9faW1h
Z2Vfc3VyZmFjZV9nZXRfaGVpZ2h0KG1faW1hZ2UpOworfQorCitzaXplX3QgUGxhdGZvcm1JbWFn
ZTo6cm93Qnl0ZXMoKSBjb25zdAoreworICAgIHJldHVybiBjYWlyb19pbWFnZV9zdXJmYWNlX2dl
dF9zdHJpZGUobV9pbWFnZSk7Cit9CisKK2Jvb2wgUGxhdGZvcm1JbWFnZTo6aGFzQWxwaGEoKSBj
b25zdAoreworICAgIC8vIFdoYXQgbWF0dGVycyBoZXJlIGlzIHdoZXRoZXIgdGhlIGltYWdlIGRh
dGEgaGFzIGFuIGFscGhhIGNoYW5uZWwuIEluIGNhaXJvLCBib3RoCisgICAgLy8gQ0FJUk9fRk9S
TUFUX0FSR0IzMiBhbmQgQ0FJUk9fRk9STUFUX1JHQjI0IGhhdmUgYW4gYWxwaGEgY2hhbm5lbCBl
dmVuIGlmIGl0J3MKKyAgICAvLyBhbHdheXMgMCBpbiB0aGUgQ0FJUk9fRk9STUFUX1JHQjI0IGNh
c2UuCisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdChtX2ltYWdlKSA9
PSBDQUlST19GT1JNQVRfQVJHQjMyIHx8IGNhaXJvX2ltYWdlX3N1cmZhY2VfZ2V0X2Zvcm1hdCht
X2ltYWdlKSA9PSBDQUlST19GT1JNQVRfUkdCMjQ7Cit9CisKK3Vuc2lnbmVkIGNoYXIqIFBsYXRm
b3JtSW1hZ2U6OnBpeGVscygpIGNvbnN0Cit7CisgICAgcmV0dXJuIGNhaXJvX2ltYWdlX3N1cmZh
Y2VfZ2V0X2RhdGEobV9pbWFnZSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1JbWFnZTo6d3JpdGVBc1BO
R1RvU3Rkb3V0KCkKK3sKKyAgICBzdHJ1Y3QgV3JpdGVDb250ZXh0IHsKKyAgICAgICAgdW5zaWdu
ZWQgbG9uZyB3cml0dGVuQnl0ZXMgeyAwIH07CisgICAgfSBjb250ZXh0OworCisgICAgLy8gRmly
c3Qgd2Ugc3VtIHVwIHRoZSBieXRlcyB0aGF0IGFyZSB0byBiZSB3cml0dGVuLgorICAgIGNhaXJv
X3N1cmZhY2Vfd3JpdGVfdG9fcG5nX3N0cmVhbShtX2ltYWdlLAorICAgICAgICBbXSh2b2lkKiBj
bG9zdXJlLCBjb25zdCB1bnNpZ25lZCBjaGFyKiwgdW5zaWduZWQgbGVuZ3RoKSAtPiBjYWlyb19z
dGF0dXNfdCB7CisgICAgICAgICAgICBhdXRvJiBjb250ZXh0ID0gKnN0YXRpY19jYXN0PFdyaXRl
Q29udGV4dCo+KGNsb3N1cmUpOworICAgICAgICAgICAgY29udGV4dC53cml0dGVuQnl0ZXMgKz0g
bGVuZ3RoOworICAgICAgICAgICAgcmV0dXJuIENBSVJPX1NUQVRVU19TVUNDRVNTOworICAgICAg
ICB9LCAmY29udGV4dCk7CisgICAgZnByaW50ZihzdGRvdXQsICJDb250ZW50LUxlbmd0aDogJSIg
Rk9STUFUX1NJWkVfVCAiXG4iLCBjb250ZXh0LndyaXR0ZW5CeXRlcyk7CisgICAgY2Fpcm9fc3Vy
ZmFjZV93cml0ZV90b19wbmdfc3RyZWFtKG1faW1hZ2UsCisgICAgICAgIFtdKHZvaWQqLCBjb25z
dCB1bnNpZ25lZCBjaGFyKiBkYXRhLCB1bnNpZ25lZCBsZW5ndGgpIC0+IGNhaXJvX3N0YXR1c190
IHsKKyAgICAgICAgICAgIGZ3cml0ZShkYXRhLCAxLCBsZW5ndGgsIHN0ZG91dCk7CisgICAgICAg
ICAgICByZXR1cm4gQ0FJUk9fU1RBVFVTX1NVQ0NFU1M7CisgICAgICAgIH0sIG51bGxwdHIpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBJbWFnZURpZmYKZGlmZiAtLWdpdCBhL1Rvb2xzL0ltYWdlRGlm
Zi9ndGsvSW1hZ2VEaWZmLmNwcCBiL1Rvb2xzL0ltYWdlRGlmZi9ndGsvSW1hZ2VEaWZmLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNWExMjhkMWUzMTIuLjAwMDAwMDAwMDAwCi0t
LSBhL1Rvb2xzL0ltYWdlRGlmZi9ndGsvSW1hZ2VEaWZmLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDI0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IFphbiBEb2JlcnNlayA8emFu
ZG9iZXJzZWtAZ21haWwuY29tPgotICogQ29weXJpZ2h0IChDKSAyMDEwIElnYWxpYSBTLkwuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSA8YWxn
b3JpdGhtPgotI2luY2x1ZGUgPGNtYXRoPgotI2luY2x1ZGUgPGNzdGRpbz4KLSNpbmNsdWRlIDxj
c3RkbGliPgotI2luY2x1ZGUgPGNzdHJpbmc+Ci0jaW5jbHVkZSA8Z2RrL2dkay5oPgotCi11c2lu
ZyBuYW1lc3BhY2Ugc3RkOwotCi1zdGF0aWMgZG91YmxlIHRvbGVyYW5jZSA9IDA7Ci1zdGF0aWMg
R09wdGlvbkVudHJ5IGNvbW1hbmRMaW5lT3B0aW9uRW50cmllc1tdID0gCi17Ci0gICAgeyAidG9s
ZXJhbmNlIiwgMCwgMCwgR19PUFRJT05fQVJHX0RPVUJMRSwgJnRvbGVyYW5jZSwgIlBlcmNlbnRh
Z2UgZGlmZmVyZW5jZSBiZXR3ZWVuIGltYWdlcyBiZWZvcmUgY29uc2lkZXJpbmcgdGhlbSBkaWZm
ZXJlbnQiLCAiVCIgfSwKLSAgICB7IDAsIDAsIDAsIEdfT1BUSU9OX0FSR19OT05FLCAwLCAwLCAw
IH0sCi19OwotCi1HZGtQaXhidWYqIHJlYWRQaXhidWZGcm9tU3RkaW4obG9uZyBpbWFnZVNpemUp
Ci17Ci0gICAgdW5zaWduZWQgY2hhciBpbWFnZUJ1ZmZlclsyMDQ4XTsKLSAgICBHZGtQaXhidWZM
b2FkZXIqIGxvYWRlciA9IGdka19waXhidWZfbG9hZGVyX25ld193aXRoX3R5cGUoInBuZyIsIDAp
OwotICAgIEdFcnJvciogZXJyb3IgPSAwOwotCi0gICAgd2hpbGUgKGltYWdlU2l6ZSA+IDApIHsK
LSAgICAgICAgc2l6ZV90IGJ5dGVzVG9SZWFkID0gbWluPGludD4oaW1hZ2VTaXplLCAyMDQ4KTsK
LSAgICAgICAgc2l6ZV90IGJ5dGVzUmVhZCA9IGZyZWFkKGltYWdlQnVmZmVyLCAxLCBieXRlc1Rv
UmVhZCwgc3RkaW4pOwotCi0gICAgICAgIGlmICghZ2RrX3BpeGJ1Zl9sb2FkZXJfd3JpdGUobG9h
ZGVyLCByZWludGVycHJldF9jYXN0PGNvbnN0IGd1Y2hhcio+KGltYWdlQnVmZmVyKSwgYnl0ZXNS
ZWFkLCAmZXJyb3IpKSB7Ci0gICAgICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3IpOwotICAgICAg
ICAgICAgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UobG9hZGVyLCAwKTsKLSAgICAgICAgICAgIGdf
b2JqZWN0X3VucmVmKGxvYWRlcik7Ci0gICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAgfQot
Ci0gICAgICAgIGltYWdlU2l6ZSAtPSBzdGF0aWNfY2FzdDxpbnQ+KGJ5dGVzUmVhZCk7Ci0gICAg
fQotCi0gICAgZ2RrX3BpeGJ1Zl9sb2FkZXJfY2xvc2UobG9hZGVyLCAwKTsKLSAgICBHZGtQaXhi
dWYqIGRlY29kZWRJbWFnZSA9IEdES19QSVhCVUYoZ19vYmplY3RfcmVmKGdka19waXhidWZfbG9h
ZGVyX2dldF9waXhidWYobG9hZGVyKSkpOwotICAgIGdfb2JqZWN0X3VucmVmKGxvYWRlcik7Ci0g
ICAgcmV0dXJuIGRlY29kZWRJbWFnZTsKLX0KLQotR2RrUGl4YnVmKiBkaWZmZXJlbmNlSW1hZ2VG
cm9tRGlmZmVyZW5jZUJ1ZmZlcih1bnNpZ25lZCBjaGFyKiBidWZmZXIsIGludCB3aWR0aCwgaW50
IGhlaWdodCwgZmxvYXQgbWF4RGlzdGFuY2UpCi17Ci0gICAgR2RrUGl4YnVmKiBpbWFnZSA9IGdk
a19waXhidWZfbmV3KEdES19DT0xPUlNQQUNFX1JHQiwgRkFMU0UsIDgsIHdpZHRoLCBoZWlnaHQp
OwotICAgIGlmICghaW1hZ2UpCi0gICAgICAgIHJldHVybiBpbWFnZTsKLQotICAgIGJvb2wgc2hv
dWxkTm9ybWFsaXplID0gbWF4RGlzdGFuY2UgPiAwICYmIG1heERpc3RhbmNlIDwgMTsKLSAgICBp
bnQgcm93U3RyaWRlID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGltYWdlKTsKLSAgICB1bnNp
Z25lZCBjaGFyKiBkaWZmUGl4ZWxzID0gZ2RrX3BpeGJ1Zl9nZXRfcGl4ZWxzKGltYWdlKTsKLSAg
ICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAgZm9yIChpbnQgeSA9
IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogZGlmZlBp
eGVsID0gZGlmZlBpeGVscyArICh5ICogcm93U3RyaWRlKSArICh4ICogMyk7Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBjaGFyIGJ1ZmZlclBpeGVsID0gKmJ1ZmZlcisrOwotICAgICAgICAgICAgaWYg
KHNob3VsZE5vcm1hbGl6ZSkKLSAgICAgICAgICAgICAgICBidWZmZXJQaXhlbCAvPSBtYXhEaXN0
YW5jZTsKLSAgICAgICAgICAgIGRpZmZQaXhlbFswXSA9IGRpZmZQaXhlbFsxXSA9IGRpZmZQaXhl
bFsyXSA9IGJ1ZmZlclBpeGVsOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIGltYWdl
OwotfQotCi1mbG9hdCBjYWxjdWxhdGVEaWZmZXJlbmNlKEdka1BpeGJ1ZiogYmFzZWxpbmVJbWFn
ZSwgR2RrUGl4YnVmKiBhY3R1YWxJbWFnZSwgR2RrUGl4YnVmKiogZGlmZmVyZW5jZUltYWdlKQot
ewotICAgIGludCB3aWR0aCA9IGdka19waXhidWZfZ2V0X3dpZHRoKGFjdHVhbEltYWdlKTsKLSAg
ICBpbnQgaGVpZ2h0ID0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGFjdHVhbEltYWdlKTsKLSAgICBp
bnQgbnVtYmVyT2ZDaGFubmVscyA9IGdka19waXhidWZfZ2V0X25fY2hhbm5lbHMoYWN0dWFsSW1h
Z2UpOwotICAgIGlmICgod2lkdGggIT0gZ2RrX3BpeGJ1Zl9nZXRfd2lkdGgoYmFzZWxpbmVJbWFn
ZSkpCi0gICAgICAgIHx8IChoZWlnaHQgIT0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGJhc2VsaW5l
SW1hZ2UpKQotICAgICAgICB8fCAobnVtYmVyT2ZDaGFubmVscyAhPSBnZGtfcGl4YnVmX2dldF9u
X2NoYW5uZWxzKGJhc2VsaW5lSW1hZ2UpKQotICAgICAgICB8fCAoZ2RrX3BpeGJ1Zl9nZXRfaGFz
X2FscGhhKGFjdHVhbEltYWdlKSAhPSBnZGtfcGl4YnVmX2dldF9oYXNfYWxwaGEoYmFzZWxpbmVJ
bWFnZSkpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRXJyb3IsIHRlc3QgYW5kIHJlZmVy
ZW5jZSBpbWFnZSBoYXZlIGRpZmZlcmVudCBwcm9wZXJ0aWVzLlxuIik7Ci0gICAgICAgIHJldHVy
biAxMDA7IC8vIENvbXBsZXRlbHkgZGlmZmVyZW50LgotICAgIH0KLQotICAgIHVuc2lnbmVkIGNo
YXIqIGRpZmZCdWZmZXIgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyKj4obWFsbG9jKHdpZHRo
ICogaGVpZ2h0KSk7Ci0gICAgZmxvYXQgY291bnQgPSAwOwotICAgIGZsb2F0IHN1bSA9IDA7Ci0g
ICAgZmxvYXQgbWF4RGlzdGFuY2UgPSAwOwotICAgIGludCBhY3R1YWxSb3dTdHJpZGUgPSBnZGtf
cGl4YnVmX2dldF9yb3dzdHJpZGUoYWN0dWFsSW1hZ2UpOwotICAgIGludCBiYXNlUm93U3RyaWRl
ID0gZ2RrX3BpeGJ1Zl9nZXRfcm93c3RyaWRlKGJhc2VsaW5lSW1hZ2UpOwotICAgIHVuc2lnbmVk
IGNoYXIqIGFjdHVhbFBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhhY3R1YWxJbWFnZSk7
Ci0gICAgdW5zaWduZWQgY2hhciogYmFzZVBpeGVscyA9IGdka19waXhidWZfZ2V0X3BpeGVscyhi
YXNlbGluZUltYWdlKTsKLSAgICB1bnNpZ25lZCBjaGFyKiBjdXJyZW50RGlmZlBpeGVsID0gZGlm
ZkJ1ZmZlcjsKLSAgICBmb3IgKGludCB4ID0gMDsgeCA8IHdpZHRoOyB4KyspIHsKLSAgICAgICAg
Zm9yIChpbnQgeSA9IDA7IHkgPCBoZWlnaHQ7IHkrKykgewotICAgICAgICAgICAgdW5zaWduZWQg
Y2hhciogYWN0dWFsUGl4ZWwgPSBhY3R1YWxQaXhlbHMgKyAoeSAqIGFjdHVhbFJvd1N0cmlkZSkg
KyAoeCAqIG51bWJlck9mQ2hhbm5lbHMpOwotICAgICAgICAgICAgdW5zaWduZWQgY2hhciogYmFz
ZVBpeGVsID0gYmFzZVBpeGVscyArICh5ICogYmFzZVJvd1N0cmlkZSkgKyAoeCAqIG51bWJlck9m
Q2hhbm5lbHMpOwotCi0gICAgICAgICAgICBmbG9hdCByZWQgPSAoYWN0dWFsUGl4ZWxbMF0gLSBi
YXNlUGl4ZWxbMF0pIC8gbWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMF0sIGJhc2VQaXhlbFsw
XSk7Ci0gICAgICAgICAgICBmbG9hdCBncmVlbiA9IChhY3R1YWxQaXhlbFsxXSAtIGJhc2VQaXhl
bFsxXSkgLyBtYXg8ZmxvYXQ+KDI1NSAtIGJhc2VQaXhlbFsxXSwgYmFzZVBpeGVsWzFdKTsKLSAg
ICAgICAgICAgIGZsb2F0IGJsdWUgPSAoYWN0dWFsUGl4ZWxbMl0gLSBiYXNlUGl4ZWxbMl0pIC8g
bWF4PGZsb2F0PigyNTUgLSBiYXNlUGl4ZWxbMl0sIGJhc2VQaXhlbFsyXSk7Ci0gICAgICAgICAg
ICBmbG9hdCBhbHBoYSA9IChhY3R1YWxQaXhlbFszXSAtIGJhc2VQaXhlbFszXSkgLyBtYXg8Zmxv
YXQ+KDI1NSAtIGJhc2VQaXhlbFszXSwgYmFzZVBpeGVsWzNdKTsKLSAgICAgICAgICAgIGZsb2F0
IGRpc3RhbmNlID0gc3FydGYocmVkICogcmVkICsgZ3JlZW4gKiBncmVlbiArIGJsdWUgKiBibHVl
ICsgYWxwaGEgKiBhbHBoYSkgLyAyLjBmOwotCi0gICAgICAgICAgICAqY3VycmVudERpZmZQaXhl
bCsrID0gKHVuc2lnbmVkIGNoYXIpKGRpc3RhbmNlICogMjU1LjBmKTsKLQotICAgICAgICAgICAg
aWYgKGRpc3RhbmNlID49IDEuMGYgLyAyNTUuMGYpIHsKLSAgICAgICAgICAgICAgICBjb3VudCAr
PSAxLjBmOwotICAgICAgICAgICAgICAgIHN1bSArPSBkaXN0YW5jZTsKLSAgICAgICAgICAgICAg
ICBtYXhEaXN0YW5jZSA9IG1heDxmbG9hdD4obWF4RGlzdGFuY2UsIGRpc3RhbmNlKTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIENvbXB1dGUgdGhlIGRpZmZlcmVu
Y2UgYXMgYSBwZXJjZW50YWdlIGNvbWJpbmluZyBib3RoIHRoZSBudW1iZXIgb2YKLSAgICAvLyBk
aWZmZXJlbnQgcGl4ZWxzIGFuZCB0aGVpciBkaWZmZXJlbmNlIGFtb3VudCBpLmUuIHRoZSBhdmVy
YWdlIGRpc3RhbmNlCi0gICAgLy8gb3ZlciB0aGUgZW50aXJlIGltYWdlCi0gICAgZmxvYXQgZGlm
ZmVyZW5jZSA9IDA7Ci0gICAgaWYgKGNvdW50ID4gMC4wZikKLSAgICAgICAgZGlmZmVyZW5jZSA9
IDEwMC4wZiAqIHN1bSAvIChoZWlnaHQgKiB3aWR0aCk7Ci0gICAgaWYgKGRpZmZlcmVuY2UgPD0g
dG9sZXJhbmNlKQotICAgICAgICBkaWZmZXJlbmNlID0gMDsKLSAgICBlbHNlIHsKLSAgICAgICAg
ZGlmZmVyZW5jZSA9IHJvdW5kZihkaWZmZXJlbmNlICogMTAwLjBmKSAvIDEwMC4wZjsKLSAgICAg
ICAgZGlmZmVyZW5jZSA9IG1heChkaWZmZXJlbmNlLCAwLjAxZik7IC8vIHJvdW5kIHRvIDIgZGVj
aW1hbCBwbGFjZXMKLSAgICAgICAgKmRpZmZlcmVuY2VJbWFnZSA9IGRpZmZlcmVuY2VJbWFnZUZy
b21EaWZmZXJlbmNlQnVmZmVyKGRpZmZCdWZmZXIsIHdpZHRoLCBoZWlnaHQsIG1heERpc3RhbmNl
KTsKLSAgICB9Ci0KLSAgICBmcmVlKGRpZmZCdWZmZXIpOwotICAgIHJldHVybiBkaWZmZXJlbmNl
OwotfQotCi12b2lkIHByaW50SW1hZ2UoR2RrUGl4YnVmKiBpbWFnZSkKLXsKLSAgICBjaGFyKiBi
dWZmZXI7Ci0gICAgZ3NpemUgYnVmZmVyU2l6ZTsKLSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAg
ICBpZiAoIWdka19waXhidWZfc2F2ZV90b19idWZmZXIoaW1hZ2UsICZidWZmZXIsICZidWZmZXJT
aXplLCAicG5nIiwgJmVycm9yLCBOVUxMKSkgewotICAgICAgICBnX2Vycm9yX2ZyZWUoZXJyb3Ip
OwotICAgICAgICByZXR1cm47IC8vIERvbid0IGJhaWwgb3V0LCBhcyB3ZSBjYW4gc3RpbGwgdXNl
IHRoZSBwZXJjZW50YWdlIG91dHB1dC4KLSAgICB9Ci0KLSAgICBwcmludGYoIkNvbnRlbnQtTGVu
Z3RoOiAlIiBHX0dTSVpFX0ZPUk1BVCAiXG4iLCBidWZmZXJTaXplKTsKLSAgICBmd3JpdGUoYnVm
ZmVyLCAxLCBidWZmZXJTaXplLCBzdGRvdXQpOwotfQotCi12b2lkIHByaW50SW1hZ2VEaWZmZXJl
bmNlcyhHZGtQaXhidWYqIGJhc2VsaW5lSW1hZ2UsIEdka1BpeGJ1ZiogYWN0dWFsSW1hZ2UpCi17
Ci0gICAgR2RrUGl4YnVmKiBkaWZmZXJlbmNlSW1hZ2UgPSAwOwotICAgIGZsb2F0IGRpZmZlcmVu
Y2UgPSBjYWxjdWxhdGVEaWZmZXJlbmNlKGJhc2VsaW5lSW1hZ2UsIGFjdHVhbEltYWdlLCAmZGlm
ZmVyZW5jZUltYWdlKTsKLSAgICBpZiAoZGlmZmVyZW5jZSA+IDAuMGYpIHsKLSAgICAgICAgaWYg
KGRpZmZlcmVuY2VJbWFnZSkgewotICAgICAgICAgICAgcHJpbnRJbWFnZShkaWZmZXJlbmNlSW1h
Z2UpOwotICAgICAgICAgICAgZ19vYmplY3RfdW5yZWYoZGlmZmVyZW5jZUltYWdlKTsKLSAgICAg
ICAgfQotICAgICAgICBwcmludGYoImRpZmY6ICUwMS4yZiUlIGZhaWxlZFxuIiwgZGlmZmVyZW5j
ZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHByaW50ZigiZGlmZjogJTAxLjJmJSUgcGFzc2VkXG4i
LCBkaWZmZXJlbmNlKTsKLX0KLQotaW50IG1haW4oaW50IGFyZ2MsIGNoYXIqIGFyZ3ZbXSkKLXsK
LSAgICBHRXJyb3IqIGVycm9yID0gMDsKLSAgICBHT3B0aW9uQ29udGV4dCogY29udGV4dCA9IGdf
b3B0aW9uX2NvbnRleHRfbmV3KCItIGNvbXBhcmUgdHdvIGltYWdlIGZpbGVzLCBwcmludGluZyB0
aGVpciBwZXJjZW50YWdlIGRpZmZlcmVuY2UgYW5kIHRoZSBkaWZmZXJlbmNlIGltYWdlIHRvIHN0
ZG91dCIpOwotICAgIGdfb3B0aW9uX2NvbnRleHRfYWRkX21haW5fZW50cmllcyhjb250ZXh0LCBj
b21tYW5kTGluZU9wdGlvbkVudHJpZXMsIDApOwotICAgIGlmICghZ19vcHRpb25fY29udGV4dF9w
YXJzZShjb250ZXh0LCAmYXJnYywgJmFyZ3YsICZlcnJvcikpIHsKLSAgICAgICAgcHJpbnRmKCJP
cHRpb24gcGFyc2luZyBmYWlsZWQ6ICVzXG4iLCBlcnJvci0+bWVzc2FnZSk7Ci0gICAgICAgIGdf
ZXJyb3JfZnJlZShlcnJvcik7Ci0gICAgICAgIHJldHVybiAxOwotICAgIH0KLQotICAgIEdka1Bp
eGJ1ZiogYWN0dWFsSW1hZ2UgPSAwOwotICAgIEdka1BpeGJ1ZiogYmFzZWxpbmVJbWFnZSA9IDA7
Ci0gICAgY2hhciBidWZmZXJbMjA0OF07Ci0gICAgd2hpbGUgKGZnZXRzKGJ1ZmZlciwgc2l6ZW9m
KGJ1ZmZlciksIHN0ZGluKSkgewotICAgICAgICAvLyBDb252ZXJ0IHRoZSBmaXJzdCBuZXdsaW5l
IGludG8gYSBOVUwgY2hhcmFjdGVyIHNvIHRoYXQgc3RydG9rIGRvZXNuJ3QgcHJvZHVjZSBpdC4K
LSAgICAgICAgY2hhciogbmV3TGluZUNoYXJhY3RlciA9IHN0cmNocihidWZmZXIsICdcbicpOwot
ICAgICAgICBpZiAobmV3TGluZUNoYXJhY3RlcikKLSAgICAgICAgICAgICpuZXdMaW5lQ2hhcmFj
dGVyID0gJ1wwJzsKLQotICAgICAgICBpZiAoIXN0cm5jbXAoIkNvbnRlbnQtTGVuZ3RoOiAiLCBi
dWZmZXIsIDE2KSkgewotICAgICAgICAgICAgZ2NoYXIqKiB0b2tlbnMgPSBnX3N0cnNwbGl0KGJ1
ZmZlciwgIiAiLCAwKTsKLSAgICAgICAgICAgIGlmICghdG9rZW5zWzFdKSB7Ci0gICAgICAgICAg
ICAgICAgZ19zdHJmcmVldih0b2tlbnMpOwotICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3Is
IGltYWdlIHNpemUgbXVzdCBiZSBzcGVjaWZpZWQuLlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuIDE7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGxvbmcgaW1hZ2VTaXplID0gc3Ry
dG9sKHRva2Vuc1sxXSwgMCwgMTApOwotICAgICAgICAgICAgZ19zdHJmcmVldih0b2tlbnMpOwot
ICAgICAgICAgICAgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWFjdHVhbEltYWdlKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKCEoYWN0dWFsSW1hZ2UgPSByZWFkUGl4YnVmRnJvbVN0ZGluKGltYWdlU2l6
ZSkpKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IsIGNvdWxkIG5vdCByZWFk
IGFjdHVhbCBpbWFnZS5cbiIpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm4gMTsKLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGltYWdlU2l6ZSA+IDAgJiYgIWJh
c2VsaW5lSW1hZ2UpIHsKLSAgICAgICAgICAgICAgICBpZiAoIShiYXNlbGluZUltYWdlID0gcmVh
ZFBpeGJ1ZkZyb21TdGRpbihpbWFnZVNpemUpKSkgewotICAgICAgICAgICAgICAgICAgICBwcmlu
dGYoIkVycm9yLCBjb3VsZCBub3QgcmVhZCBiYXNlbGluZSBpbWFnZS5cbiIpOwotICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gMTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIHByaW50ZigiRXJyb3IsIGltYWdlIHNpemUgbXVzdCBiZSBz
cGVjaWZpZWQuLlxuIik7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYWN0dWFsSW1hZ2UgJiYgYmFzZWxpbmVJbWFnZSkg
ewotICAgICAgICAgICAgcHJpbnRJbWFnZURpZmZlcmVuY2VzKGJhc2VsaW5lSW1hZ2UsIGFjdHVh
bEltYWdlKTsKLSAgICAgICAgICAgIGdfb2JqZWN0X3VucmVmKGFjdHVhbEltYWdlKTsKLSAgICAg
ICAgICAgIGdfb2JqZWN0X3VucmVmKGJhc2VsaW5lSW1hZ2UpOwotICAgICAgICAgICAgYWN0dWFs
SW1hZ2UgPSAwOwotICAgICAgICAgICAgYmFzZWxpbmVJbWFnZSA9IDA7Ci0gICAgICAgIH0KLQot
ICAgICAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gMDsKLX0K
</data>
<flag name="review"
          id="327863"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>