<?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>10648</bug_id>
          
          <creation_ts>2006-08-31 00:36:24 -0700</creation_ts>
          <short_desc>unnecessary NSGraphicsContext usage should be removed from WebCore</short_desc>
          <delta_ts>2006-09-10 13:04:14 -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>WebCore Misc.</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>8824</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>darin</cc>
    
    <cc>hyatt</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>54305</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-08-31 00:36:24 -0700</bug_when>
    <thetext>All NSGraphicsContext usage should be removed from WebCore

This pertains particularly to the use of [NSGraphicsContext currentContext]

This isn&apos;t too hard of a task.  There are only 45 uses of NSGraphicsContext left in the code.  Most of them are unnecessary at this point now that form controls are almost all rendered inside the engine code.

A few enhancements will be necessary to GraphicsContext before this is possible (including adding an isPrinting state as well as an isFlipped state -- both for text drawing).

NSGraphicsContext currentContext will still be needed when calling up into plugins, but should be otherwise unnecessary inside WebCore.

(Removing this will fix some crashers in SVG if nothing else -- due to mishandling of NSGraphicsContext in KRenderingGraphicsContext.)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54329</commentid>
    <comment_count>1</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-08-31 09:35:05 -0700</bug_when>
    <thetext>Sounds OK.

(In reply to comment #0)
&gt; A few enhancements will be necessary to GraphicsContext before this is possible
&gt; (including adding an isPrinting state as well as an isFlipped state -- both for
&gt; text drawing).

But I think that&apos;s wrong. That reflects our old thinking, but since then we&apos;ve explored this further.

We won&apos;t need an &quot;isFlipped&quot; state because we are going to only support drawing into flipped graphics contexts.

And we won&apos;t need an isPrinting state because we can and do handle that at a higher level. The document has an isPrinting state.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>54849</commentid>
    <comment_count>2</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-05 16:33:35 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Sounds OK.
&gt; 
&gt; (In reply to comment #0)
&gt; &gt; A few enhancements will be necessary to GraphicsContext before this is possible
&gt; &gt; (including adding an isPrinting state as well as an isFlipped state -- both for
&gt; &gt; text drawing).
&gt; 
&gt; But I think that&apos;s wrong. That reflects our old thinking, but since then we&apos;ve
&gt; explored this further.
&gt; 
&gt; We won&apos;t need an &quot;isFlipped&quot; state because we are going to only support drawing
&gt; into flipped graphics contexts.

Agreed.

&gt; And we won&apos;t need an isPrinting state because we can and do handle that at a
&gt; higher level. The document has an isPrinting state.

We&apos;ll just have to pass a bool down into the Font routines so they can choose whether to use Screen or Printer fonts appropriately.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55011</commentid>
    <comment_count>3</comment_count>
      <attachid>10446</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-07 21:07:05 -0700</bug_when>
    <thetext>Created attachment 10446
Gets us damn close.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55057</commentid>
    <comment_count>4</comment_count>
      <attachid>10446</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-08 09:37:01 -0700</bug_when>
    <thetext>Comment on attachment 10446
Gets us damn close.

This patch is great! Thanks for tackling this.

+#if MAC_OS_X_VERSION_MIN_REQUIRED &lt;= MAC_OS_X_VERSION_10_4
+    // Tiger versions of Safari don&apos;t properly flip the NSGraphicsContext before calling WebCore

That #if looks wrong. It&apos;s saying &quot;if &lt; 10.4&quot; which is true for Panther, not for Tiger.

WebCoreNSGraphicsContextBridge retains but does not release m_savedNSGraphicsContext!

WebCoreNSGraphicsContextBridge is a great idea for a class, but I don&apos;t think it should have &quot;bridge&quot; in its name. And since it&apos;s in the WebCore namespace I don&apos;t think its name should begin with WebCore. I think we should call the class CurrentGraphicsContextSetter. It would be pretty clear even without the NS since only AppKit has a current context, not CG or WebCore. I also think it&apos;s not a good idea to call the local variable &quot;hack&quot;. I suggest &quot;setter&quot;. Also, the class should inherit from Noncopyable. I think the class might need to be in a header, too. There will probably be more places we want to use it. I also don&apos;t think the constructor and destructor need to be inlined.

I don&apos;t think that every use of WebCoreNSGraphicsContextBridge/CurrentGraphicsContextSetter needs a FIXME. The comment should just say something like &quot;Set up the NSGraphicsContext, since this function uses it&quot; or something to that effect. There&apos;s no need to say that it &quot;ignores the GraphicsContext in the PaintInfo&quot; any more, since this will no longer be true. And no need to say FIXME. In fact, I really don&apos;t think we need a comment at all, but if we do have one it should be short and sweet.

I know I suggested putting the printing boolean in as a separate variable, but you should instead consider making it part of the TextStyle class; it would keep the API simpler and I think it would work really well. I also think it should be called something more like &quot;use printer font&quot; than &quot;is printing&quot;.

I think the FIXME in GraphicsContext::drawLineForMisspelling is incorrect. That code could be changed to use CGPattern and need not be platform-independent. Or the code could be changed to create  a suitable NSGraphicsContext as GraphicsContext::setCompositeOperation or WebCoreNSGraphicsContextBridge. So please don&apos;t check that comment in as is.

I don&apos;t think the new comment in -[WebCoreFrameBridge drawRect:] is particularly helpful. It&apos;s calling a function that takes a GraphicsContext, so yes, it needs to make a GraphicsContext. But I don&apos;t think that needs to be called out. I&apos;m also not that fond of the comment you added to FileButtonMac.mm, but that file is about to be deleted so there&apos;s no real point debating it! I suggest you just leave both of those files as-is.

Why the code to handle 0 for graphicsContext in ATSULayoutParameters? The old code didn&apos;t seem to allow 0.

+    ATSUAttributeValuePtr values[] = { (context ? &amp;context : 0), &amp;lineLayoutOptions, &amp;rtl, &amp;overrideSpecifier };

I&apos;m specifically concerned about the above line. Is it really OK to pass 0 for kATSUCGContextTag?

Also in Font::displayComplexText, there&apos;s this line of code:

    [nsColor(graphicsContext-&gt;pen().color()) set];

Since -[NSColor set] works on the current NSGraphicsContext, what are we doing to ensure that&apos;s set correctly?

For this comment:

    // IMO this is confusing, setting the fill based on the pen color. - ecs
 
Instead you should say something more like &quot;text needs to respect the pen color, but it&apos;s actually the fill color that controls the color of the text, so we need to set the fill color of the CGContext based on the pen color of the GraphicsContext&quot;. That way instead of creating doubt and confusion for later programmers, we clarify things for them.

+    // This is another entry into WebCore from AppKit.  We build a new GraphicsContext from the current context before continuing.

I think that comment is not all that helpful. Sure, you need to create a GraphicsContext since you are calling a function that takes one. But there&apos;s no need to have a comment about the &quot;bigger picture&quot;, in my opinion. A better comment might be more like &quot;Draw into the NSGraphicsContext currentContext because that&apos;s what NSTableView expects&quot;. I don&apos;t think we need to highlight the creation of a WebCore::GraphicsContext, but it is good to highlight why this code is picking up the current context.

Similarly, for WebCoreDrawTextAtPoint, I think the comment should just be &quot;Draws into the current NSGraphicsContext&quot; or the like.

How did you test? I&apos;m particularly curious about why testing didn&apos;t show the problem with the 10.4 ifdef.

review- because of that 10.3/4 snafu and the missing release in WebCoreNSGraphicsContextBridge. Please consider my other comments too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55092</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-08 17:46:51 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; +#if MAC_OS_X_VERSION_MIN_REQUIRED &lt;= MAC_OS_X_VERSION_10_4
&gt; +    // Tiger versions of Safari don&apos;t properly flip the NSGraphicsContext
&gt; before calling WebCore
&gt; 
&gt; That #if looks wrong. It&apos;s saying &quot;if &lt; 10.4&quot; which is true for Panther, not
&gt; for Tiger.

My understanding of that line is &quot;if the minimum deployment version required is less than or equal to tiger, do this&quot;.  Meaning &quot;if we&apos;re not leopard or later&quot;.

I&apos;ll fix the release.  And rename the class.  I still think the wk* calls could take a context instead of relying on the current one.  But I agree, the class I added cleans up the code enough to not really care if it uses the current context or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55093</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-08 17:55:08 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #4)
&gt; &gt; +#if MAC_OS_X_VERSION_MIN_REQUIRED &lt;= MAC_OS_X_VERSION_10_4
&gt; &gt; +    // Tiger versions of Safari don&apos;t properly flip the NSGraphicsContext
&gt; &gt; before calling WebCore
&gt; &gt; 
&gt; &gt; That #if looks wrong. It&apos;s saying &quot;if &lt; 10.4&quot; which is true for Panther, not
&gt; &gt; for Tiger.
&gt; 
&gt; My understanding of that line is &quot;if the minimum deployment version required is
&gt; less than or equal to tiger, do this&quot;.  Meaning &quot;if we&apos;re not leopard or
&gt; later&quot;.

Doh! &lt;=! Somehow I thought it was &lt;, not &lt;=. My bad, you had it right all along.

&gt; I still think the wk* calls could take a context instead of relying on the current one.

Sure, if we find we&apos;re able to do that some day it would be nice cleanup.

Did any of my other comments lead you to make code changes?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55104</commentid>
    <comment_count>7</comment_count>
      <attachid>10470</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-09 04:48:20 -0700</bug_when>
    <thetext>Created attachment 10470
Addressing darin&apos;s concerns

I also ran the layout tests on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55105</commentid>
    <comment_count>8</comment_count>
      <attachid>10471</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2006-09-09 05:04:03 -0700</bug_when>
    <thetext>Created attachment 10471
Patch which actually passes the layout tests

I lied.  The layout tests weren&apos;t completely done yet.  This version actually passes (at least all of the layout tests which are currently supposed to pass on TOT).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>55195</commentid>
    <comment_count>9</comment_count>
      <attachid>10471</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-09-10 12:29:03 -0700</bug_when>
    <thetext>Comment on attachment 10471
Patch which actually passes the layout tests

CurrentGraphicsContextSetter should inherit from Noncopyable

r=me</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10446</attachid>
            <date>2006-09-07 21:07:05 -0700</date>
            <delta_ts>2006-09-09 04:48:20 -0700</delta_ts>
            <desc>Gets us damn close.</desc>
            <filename>remove-nsgraphicscontext.patch</filename>
            <type>text/plain</type>
            <size>37179</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE2MjY4
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMDYtMDkt
MDcgIEVyaWMgU2VpZGVsICA8ZXJpY0Blc2VpZGVsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbW92ZSBhIGJ1bmNoIG1vcmUg
TlNHcmFwaGljc0NvbnRleHQgcmVsYXRlZCBjb2RlLgorICAgICAgICBBZGQgYSBXZWJDb3JlTlNH
cmFwaGljc0NvbnRleHRCcmlkZ2UgdG8gc2ltcGxpZnkgbWV0aG9kcyB3aGljaCBuZWVkIHRvIGNh
bGwgdXAgaW50byBBcHBLaXQgY29udHJvbHMgKGFuZCB0aHVzIGRlcGVuZCBvbiB0aGUgW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBiZWluZyBzZXQgY29ycmVjdGx5KQorICAgICAg
ICBBZGQgYW4gImlzUHJpbnRpbmciIGZsYWcgdG8gbWFueSBvZiB0aGUgdGV4dCBkcmF3aW5nIGZ1
bmN0aW9ucyBpbiBvcmRlciB0byBhdm9pZCB0aGUgbmVlZCBmb3IgYSBHcmFwaGljc0NvbnRleHQ6
OmlzUHJpbnRpbmcoKSBmdW5jdGlvbi4KKworICAgICAgICBObyB0ZXN0cyB3ZXJlIGhhcm1lZCBp
biB0aGUgbWFraW5nIG9mIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBicmlkZ2UvbWFjL1dlYkNv
cmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGRyYXdSZWN0
Ol0pOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVh
cnR6Lmg6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6
Y2dDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VRdWFydHo6Omlz
QnVmZmVyZWQpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2
aWNlUXVhcnR6Lm1tOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dWFydHo6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KToKKyAgICAgICAgKFdlYkNvcmU6
OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojp+S1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dWFydHopOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1t
OgorICAgICAgICAqIHBsYXRmb3JtL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZHJhd1NpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1RleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6Cisg
ICAgICAgICogcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL0ZpbGVCdXR0b25NYWMubW06CisgICAgICAgICgtW1dlYkZpbGVDaG9vc2VyQnV0dG9uIGRy
YXdSZWN0Ol0pOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Gb250TWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6QVRTVUxheW91dFBhcmFtZXRlcnM6OkFUU1VMYXlvdXRQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFUU1VMYXlvdXRQYXJhbWV0ZXJzOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1p
c3NwZWxsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvTGlzdEJveE1hYy5tbToKKyAgICAg
ICAgKC1bV2ViQ29yZVRhYmxlVmlldyBkcmF3Um93OmNsaXBSZWN0Ol0pOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1tOgorICAgICAgICAoV2ViQ29yZURyYXdU
ZXh0QXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2U6OldlYkNvcmVOU0dyYXBoaWNzQ29udGV4dEJy
aWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2U6
On5XZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRUZXh0QXJlYSk6CisKIDIwMDYtMDktMDcgIFNhbSBXZWluaWcgIDxzYW0ud2VpbmlnQGdt
YWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBhbmQgVGltIEguCkluZGV4OiBi
cmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBicmlkZ2UvbWFj
L1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNpb24gMTYyNjApCisrKyBicmlkZ2UvbWFjL1dl
YkNvcmVGcmFtZUJyaWRnZS5tbQkod29ya2luZyBjb3B5KQpAQCAtOTI1LDExICs5MjUsMTIgQEAg
c3RhdGljIEJPT0wgbm93UHJpbnRpbmcoV2ViQ29yZUZyYW1lQnJpZAogCiAtICh2b2lkKWRyYXdS
ZWN0OihOU1JlY3QpcmVjdAogeworICAgIC8vIFRoaXMgaXMgdGhlIHByaW1hcnkgZHJhd2luZyBl
bnRyeSBwb2ludCBmcm9tIFdlYktpdCBpbnRvIFdlYkNvcmUuCisgICAgLy8gV2UgbXVzdCBzZXR1
cCBhIEdyYXBoaWNzQ29udGV4dCBmb3IgV2ViQ29yZSBiZWZvcmUgZHJhd2luZy4KICAgICBQbGF0
Zm9ybUdyYXBoaWNzQ29udGV4dCogcGxhdGZvcm1Db250ZXh0ID0gc3RhdGljX2Nhc3Q8UGxhdGZv
cm1HcmFwaGljc0NvbnRleHQqPihbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBn
cmFwaGljc1BvcnRdKTsKLSAgICAKICAgICBBU1NFUlQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7Ci0gICAgCiAgICAgR3JhcGhpY3NDb250ZXh0IGNvbnRl
eHQocGxhdGZvcm1Db250ZXh0KTsKKyAgICAKICAgICBbc2VsZiBfc2V0dXBSb290Rm9yUHJpbnRp
bmc6WUVTXTsKICAgICAKICAgICBBU1NFUlQoIW1fZnJhbWUtPmRvY3VtZW50KCkgfHwgbV9mcmFt
ZS0+ZG9jdW1lbnQoKS0+cHJpbnRpbmcoKSA9PSBtX2ZyYW1lLT5kb2N1bWVudCgpLT5yZW5kZXJl
cigpLT52aWV3KCktPnByaW50aW5nTW9kZSgpKTsKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAkocmV2aXNpb24gMTYyNjApCisrKyBrY2Fu
dmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMiArMzQsNiBAQAogdHlwZWRlZiBzdHJ1Y3QgQ0dSZWN0IENHUmVjdDsKIHR5cGVk
ZWYgc3RydWN0IENHQ29udGV4dCAqQ0dDb250ZXh0UmVmOwogCi0jaWZkZWYgX19PQkpDX18KLUBj
bGFzcyBOU0dyYXBoaWNzQ29udGV4dDsKLSNlbHNlCi1jbGFzcyBOU0dyYXBoaWNzQ29udGV4dDsK
LSNlbmRpZgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIEtSZW5kZXJpbmdEZXZpY2VD
b250ZXh0UXVhcnR6IDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0IHsKQEAgLTU2LDEx
ICs1MCw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEdyYXBoaWNzQ29udGV4dCogY3JlYXRlR3Jh
cGhpY3NDb250ZXh0KCk7CiAgICAgCiAgICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCgpIGNvbnN0
IHsgcmV0dXJuIG1fY2dDb250ZXh0OyB9OwotICAgIE5TR3JhcGhpY3NDb250ZXh0ICpuc0dyYXBo
aWNzQ29udGV4dCgpOwogICAgIAogcHJpdmF0ZToKICAgICBDR0NvbnRleHRSZWYgbV9jZ0NvbnRl
eHQ7Ci0gICAgTlNHcmFwaGljc0NvbnRleHQgKm1fbnNHcmFwaGljc0NvbnRleHQ7CiB9OwogCiBj
bGFzcyBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6IDogcHVibGljIEtSZW5kZXJpbmdEZXZpY2UgewpA
QCAtNjksOSArNjEsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB+S1JlbmRlcmluZ0RldmljZVF1
YXJ0eigpIHsgfQogCiAgICAgdmlydHVhbCBib29sIGlzQnVmZmVyZWQoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotICAgIAotICAgIHZpcnR1YWwgS1JlbmRlcmluZ0RldmljZUNvbnRleHQgKnBv
cENvbnRleHQoKTsKLSAgICB2aXJ0dWFsIHZvaWQgcHVzaENvbnRleHQoS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHQgKmNvbnRleHQpOwogCiAgICAgLy8gY29udGV4dCBtYW5hZ2VtZW50LgogICAgIEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6ICpxdWFydHpDb250ZXh0KCkgY29uc3Q7CkluZGV4
OiBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQko
cmV2aXNpb24gMTYyNjApCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ei5tbQkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNiBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpLUmVuZGVyaW5nRGV2aWNl
Q29udGV4dFF1YXJ0eihDR0NvbnRleHRSZWYgY29udGV4dCkKICAgICA6IG1fY2dDb250ZXh0KENH
Q29udGV4dFJldGFpbihjb250ZXh0KSkKLSAgICAsIG1fbnNHcmFwaGljc0NvbnRleHQoMCkKIHsK
ICAgICBBU1NFUlQobV9jZ0NvbnRleHQpOwogfQpAQCAtNTIsNyArNTEsNiBAQCBLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dFF1YXJ0ejo6S1JlbmRlcmluCiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1
YXJ0ejo6fktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KCkKIHsKICAgICBDR0NvbnRleHRS
ZWxlYXNlKG1fY2dDb250ZXh0KTsKLSAgICBIYXJkUmVsZWFzZShtX25zR3JhcGhpY3NDb250ZXh0
KTsKIH0KIAogQWZmaW5lVHJhbnNmb3JtIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojpj
b25jYXRDVE0oY29uc3QgQWZmaW5lVHJhbnNmb3JtJiB3b3JsZE1hdHJpeCkKQEAgLTc4LDEzICs3
Niw2IEBAIHZvaWQgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OmFkZFAKICAgICBDR0Nv
bnRleHRBZGRQYXRoKG1fY2dDb250ZXh0LCBwYXRoLnBsYXRmb3JtUGF0aCgpKTsKIH0KIAotTlNH
cmFwaGljc0NvbnRleHQgKktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojpuc0dyYXBoaWNz
Q29udGV4dCgpCi17Ci0gICAgaWYgKCFtX25zR3JhcGhpY3NDb250ZXh0ICYmIG1fY2dDb250ZXh0
KQotICAgICAgICBtX25zR3JhcGhpY3NDb250ZXh0ID0gSGFyZFJldGFpbihbTlNHcmFwaGljc0Nv
bnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDptX2NnQ29udGV4dCBmbGlwcGVk
OllFU10pOwotICAgIHJldHVybiBtX25zR3JhcGhpY3NDb250ZXh0OwotfQotCiBHcmFwaGljc0Nv
bnRleHQqIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjpjcmVhdGVHcmFwaGljc0NvbnRl
eHQoKQogewogICAgIHJldHVybiBuZXcgR3JhcGhpY3NDb250ZXh0KG1fY2dDb250ZXh0KTsKQEAg
LTEyOCwyMyArMTE5LDYgQEAgQ0dDb250ZXh0UmVmIEtSZW5kZXJpbmdEZXZpY2VRdWFydHo6OmN1
cgogICAgIHJldHVybiBxdWFydHpDb250ZXh0KCktPmNnQ29udGV4dCgpOwogfQogCi12b2lkIEtS
ZW5kZXJpbmdEZXZpY2VRdWFydHo6OnB1c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0
ICpjb250ZXh0KQotewotICAgIEFTU0VSVChjb250ZXh0KTsKLSAgICBLUmVuZGVyaW5nRGV2aWNl
OjpwdXNoQ29udGV4dChjb250ZXh0KTsKLSAgICBbTlNHcmFwaGljc0NvbnRleHQgc2F2ZUdyYXBo
aWNzU3RhdGVdOwotICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpxdWFy
dHpDb250ZXh0KCktPm5zR3JhcGhpY3NDb250ZXh0KCldOwotICAgIEFTU0VSVChxdWFydHpDb250
ZXh0KCktPm5zR3JhcGhpY3NDb250ZXh0KCkgPT0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XSk7Ci19Ci0KLUtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpLUmVuZGVyaW5nRGV2aWNl
UXVhcnR6Ojpwb3BDb250ZXh0KCkKLXsKLSAgICBbTlNHcmFwaGljc0NvbnRleHQgcmVzdG9yZUdy
YXBoaWNzU3RhdGVdOwotICAgIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpwb3BwZWRDb250ZXh0
ID0gS1JlbmRlcmluZ0RldmljZTo6cG9wQ29udGV4dCgpOwotICAgIEFTU0VSVCghY3VycmVudENv
bnRleHQoKSB8fCBjdXJyZW50Q0dDb250ZXh0KCkgPT0gW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSk7Ci0gICAgcmV0dXJuIHBvcHBlZENvbnRleHQ7Ci19
Ci0KIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpLUmVuZGVyaW5nRGV2aWNlUXVhcnR6Ojpjb250
ZXh0Rm9ySW1hZ2UoS0NhbnZhc0ltYWdlICppbWFnZSkgY29uc3QKIHsKICAgICBLQ2FudmFzSW1h
Z2VRdWFydHogKnF1YXJ0ekltYWdlID0gc3RhdGljX2Nhc3Q8S0NhbnZhc0ltYWdlUXVhcnR6ICo+
KGltYWdlKTsKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCShyZXZp
c2lvbiAxNjI2MCkKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tCSh3
b3JraW5nIGNvcHkpCkBAIC00Miw0NiArNDIsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
LSNpZm5kZWYgTkRFQlVHCi12b2lkIGRlYnVnRHVtcENHSW1hZ2VUb0ZpbGUoTlNTdHJpbmcgKmZp
bGVuYW1lLCBDR0ltYWdlUmVmIGltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAg
TlNJbWFnZSAqZmlsZUltYWdlID0gW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6TlNNYWtl
U2l6ZSh3aWR0aCwgaGVpZ2h0KV07Ci0gICAgW2ZpbGVJbWFnZSBsb2NrRm9jdXNdOwotICAgIENH
Q29udGV4dFJlZiBmaWxlSW1hZ2VDb250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwotICAgIENHQ29udGV4dERyYXdJ
bWFnZShmaWxlSW1hZ2VDb250ZXh0LCBHcmFwaGljc0NvbnRleHQoZmlsZUltYWdlQ29udGV4dCku
cm91bmRUb0RldmljZVBpeGVscygKLSAgICAgICAgRmxvYXRSZWN0KDAsIDAsIHdpZHRoLCBoZWln
aHQpKSwgaW1hZ2UpOyAKLSAgICBbZmlsZUltYWdlIHVubG9ja0ZvY3VzXTsKLSAgICBOU0RhdGEg
KnRpZmYgPSBbZmlsZUltYWdlIFRJRkZSZXByZXNlbnRhdGlvbl07Ci0gICAgW3RpZmYgd3JpdGVU
b0ZpbGU6ZmlsZW5hbWUgYXRvbWljYWxseTpZRVNdOwotICAgIFtmaWxlSW1hZ2UgcmVsZWFzZV07
Ci19Ci0KLXZvaWQgZGVidWdEdW1wQ0dMYXllclRvRmlsZShOU1N0cmluZyAqZmlsZW5hbWUsIENH
TGF5ZXJSZWYgbGF5ZXIsIGludCB3aWR0aCwgaW50IGhlaWdodCkKLXsKLSAgICBOU0ltYWdlICpm
aWxlSW1hZ2UgPSBbW05TSW1hZ2UgYWxsb2NdIGluaXRXaXRoU2l6ZTpOU01ha2VTaXplKHdpZHRo
LCBoZWlnaHQpXTsKLSAgICBbZmlsZUltYWdlIGxvY2tGb2N1c107Ci0gICAgQ0dDb250ZXh0UmVm
IGZpbGVJbWFnZUNvbnRleHQgPSAoQ0dDb250ZXh0UmVmKVtbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF07Ci0gICAgQ0dDb250ZXh0RHJhd0xheWVyQXRQb2lu
dChmaWxlSW1hZ2VDb250ZXh0LCBDR1BvaW50TWFrZSgwLCAwKSwgbGF5ZXIpOyAKLSAgICBbZmls
ZUltYWdlIHVubG9ja0ZvY3VzXTsKLSAgICBOU0RhdGEgKnRpZmYgPSBbZmlsZUltYWdlIFRJRkZS
ZXByZXNlbnRhdGlvbl07Ci0gICAgW3RpZmYgd3JpdGVUb0ZpbGU6ZmlsZW5hbWUgYXRvbWljYWxs
eTpZRVNdOwotICAgIFtmaWxlSW1hZ2UgcmVsZWFzZV07Ci19Ci0KLXZvaWQgZGVidWdEdW1wQ0lJ
bWFnZVRvRmlsZShOU1N0cmluZyAqZmlsZW5hbWUsIENJSW1hZ2UgKmNpSW1hZ2UsIGludCB3aWR0
aCwgaW50IGhlaWdodCkKLXsKLSAgICBOU0ltYWdlICpmaWxlSW1hZ2UgPSBbW05TSW1hZ2UgYWxs
b2NdIGluaXRXaXRoU2l6ZTpOU01ha2VTaXplKHdpZHRoLCBoZWlnaHQpXTsKLSAgICBbZmlsZUlt
YWdlIGxvY2tGb2N1c107Ci0gICAgQ0dDb250ZXh0UmVmIGZpbGVJbWFnZUNvbnRleHQgPSAoQ0dD
b250ZXh0UmVmKVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9y
dF07Ci0gICAgQ0lDb250ZXh0ICpjaUNvbnRleHQgPSBbQ0lDb250ZXh0IGNvbnRleHRXaXRoQ0dD
b250ZXh0OmZpbGVJbWFnZUNvbnRleHQgb3B0aW9uczpuaWxdOwotICAgIFtjaUNvbnRleHQgZHJh
d0ltYWdlOmNpSW1hZ2UgYXRQb2ludDpDR1BvaW50WmVybyBmcm9tUmVjdDpDR1JlY3RNYWtlKDAs
IDAsIHdpZHRoLCBoZWlnaHQpXTsKLSAgICBbZmlsZUltYWdlIHVubG9ja0ZvY3VzXTsKLSAgICBO
U0RhdGEgKnRpZmYgPSBbZmlsZUltYWdlIFRJRkZSZXByZXNlbnRhdGlvbl07Ci0gICAgW3RpZmYg
d3JpdGVUb0ZpbGU6ZmlsZW5hbWUgYXRvbWljYWxseTpZRVNdOwotICAgIFtmaWxlSW1hZ2UgcmVs
ZWFzZV07Ci19Ci0jZW5kaWYKLQogQ0ZTdHJpbmdSZWYgQ0ZTdHJpbmdGcm9tQ0dBZmZpbmVUcmFu
c2Zvcm0oQ0dBZmZpbmVUcmFuc2Zvcm0gdCkKIHsKICAgICByZXR1cm4gQ0ZTdHJpbmdDcmVhdGVX
aXRoRm9ybWF0KDAsIDAsIENGU1RSKCJhOiAlZiBiOiAlZiBjOiAlZiBkOiAlZiB0eDogJWYgdHk6
ICVmIiksIHQuYSwgdC5iLCB0LmMsIHQuZCwgdC50eCwgdC50eSk7CkluZGV4OiBwbGF0Zm9ybS9G
b250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9Gb250LmNwcAkocmV2aXNpb24gMTYyNjAp
CisrKyBwbGF0Zm9ybS9Gb250LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcwLDcgKzQ3MCw3IEBA
IGJvb2wgRm9udDo6Y2FuVXNlR2x5cGhDYWNoZShjb25zdCBUZXh0UnUKIAogfQogCi12b2lkIEZv
bnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgVGV4dFJ1
biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCkg
Y29uc3QKK3ZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGNvbnN0IEZsb2F0
UG9pbnQmIHBvaW50LCBib29sIHByaW50aW5nKSBjb25zdAogewogICAgIC8vIFRoaXMgZ2x5cGgg
YnVmZmVyIGhvbGRzIG91ciBnbHlwaHMrYWR2YW5jZXMrZm9udCBkYXRhIGZvciBlYWNoIGdseXBo
LgogICAgIEdseXBoQnVmZmVyIGdseXBoQnVmZmVyOwpAQCAtNTAxLDcgKzUwMSw3IEBAIHZvaWQg
Rm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXgKICAgICB3aGlsZSAobmV4dEdseXBo
IDwgZ2x5cGhCdWZmZXIuc2l6ZSgpKSB7CiAgICAgICAgIGNvbnN0IEZvbnREYXRhKiBuZXh0Rm9u
dERhdGEgPSBnbHlwaEJ1ZmZlci5mb250RGF0YUF0KG5leHRHbHlwaCk7CiAgICAgICAgIGlmIChu
ZXh0Rm9udERhdGEgIT0gZm9udERhdGEpIHsKLSAgICAgICAgICAgIGRyYXdHbHlwaHMoY29udGV4
dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20s
IHN0YXJ0UG9pbnQpOworICAgICAgICAgICAgZHJhd0dseXBocyhjb250ZXh0LCBmb250RGF0YSwg
Z2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCwg
cHJpbnRpbmcpOwogICAgICAgICAgICAgbGFzdEZyb20gPSBuZXh0R2x5cGg7CiAgICAgICAgICAg
ICBmb250RGF0YSA9IG5leHRGb250RGF0YTsKICAgICAgICAgICAgIHN0YXJ0UG9pbnQuc2V0WChu
ZXh0WCk7CkBAIC01MDksMTMgKzUwOSwxMyBAQCB2b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdy
YXBoaWNzQ29udGV4CiAgICAgICAgIG5leHRYICs9IGdseXBoQnVmZmVyLmFkdmFuY2VBdChuZXh0
R2x5cGgpOwogICAgICAgICBuZXh0R2x5cGgrKzsKICAgICB9Ci0gICAgZHJhd0dseXBocyhjb250
ZXh0LCBmb250RGF0YSwgZ2x5cGhCdWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0RnJv
bSwgc3RhcnRQb2ludCk7CisgICAgZHJhd0dseXBocyhjb250ZXh0LCBmb250RGF0YSwgZ2x5cGhC
dWZmZXIsIGxhc3RGcm9tLCBuZXh0R2x5cGggLSBsYXN0RnJvbSwgc3RhcnRQb2ludCwgcHJpbnRp
bmcpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdUZXh0KEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwg
Y29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlLCBjb25zdCBGbG9hdFBv
aW50JiBwb2ludCkgY29uc3QKK3ZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBj
b250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGNvbnN0
IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHByaW50aW5nKSBjb25zdAogewogICAgIGlmIChjYW5V
c2VHbHlwaENhY2hlKHJ1bikpCi0gICAgICAgIGRyYXdTaW1wbGVUZXh0KGNvbnRleHQsIHJ1biwg
c3R5bGUsIHBvaW50KTsKKyAgICAgICAgZHJhd1NpbXBsZVRleHQoY29udGV4dCwgcnVuLCBzdHls
ZSwgcG9pbnQsIHByaW50aW5nKTsKICAgICBlbHNlCiAgICAgICAgIGRyYXdDb21wbGV4VGV4dChj
b250ZXh0LCBydW4sIHN0eWxlLCBwb2ludCk7CiB9CkluZGV4OiBwbGF0Zm9ybS9Gb250LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gcGxhdGZvcm0vRm9udC5oCShyZXZpc2lvbiAxNjI2MCkKKysrIHBsYXRmb3Jt
L0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDcgKzEwOCw3IEBAIHB1YmxpYzoKICAgICAK
ICAgICB2b2lkIHVwZGF0ZSgpIGNvbnN0OwogCi0gICAgdm9pZCBkcmF3VGV4dChHcmFwaGljc0Nv
bnRleHQqLCBjb25zdCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2lu
dCYpIGNvbnN0OworICAgIHZvaWQgZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgVGV4
dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGlzUHJpbnRp
bmcpIGNvbnN0OwogCiAgICAgaW50IHdpZHRoKGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5
bGUmKSBjb25zdDsKICAgICBpbnQgd2lkdGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0OwpAQCAtMTUz
LDggKzE1Myw4IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgLy8gRklYTUU6IFRoaXMgd2lsbCBl
dmVudHVhbGx5IGJlIGNyb3NzLXBsYXRmb3JtLCBidXQgd2Ugd2FudCB0byBrZWVwIFdpbmRvd3Mg
Y29tcGlsaW5nIGZvciBub3cuCiAgICAgYm9vbCBjYW5Vc2VHbHlwaENhY2hlKGNvbnN0IFRleHRS
dW4mKSBjb25zdDsKLSAgICB2b2lkIGRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBGbG9hdFBvaW50JikgY29uc3Q7
Ci0gICAgdm9pZCBkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEZvbnREYXRhKiwg
Y29uc3QgR2x5cGhCdWZmZXImLCBpbnQgZnJvbSwgaW50IHRvLCBjb25zdCBGbG9hdFBvaW50Jikg
Y29uc3Q7CisgICAgdm9pZCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYsIGJvb2wgcHJpbnRp
bmcpIGNvbnN0OworICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBG
b250RGF0YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxv
YXRQb2ludCYsIGJvb2wgcHJpbnRpbmcpIGNvbnN0OwogICAgIHZvaWQgZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0
dXRlRm9udERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHN0
YXJ0WCwgR2x5cGhCdWZmZXIqKSBjb25zdDsKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0LmNwcAkocmV2aXNp
b24gMTYyNjApCisrKyBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODAsMTcgKzE4MCwxNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0ltYWdlKElt
YWdlKiBpCiAgICAgZHJhd0ltYWdlKGltYWdlLCBGbG9hdFJlY3QoZGVzdCksIHNyY1JlY3QsIG9w
KTsKIH0KIAotdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IFRleHRSdW4mIHJ1
biwgY29uc3QgSW50UG9pbnQmIHBvaW50KQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdUZXh0
KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBib29sIGlzUHJpbnRp
bmcpCiB7Ci0gICAgZHJhd1RleHQocnVuLCBwb2ludCwgVGV4dFN0eWxlKCkpOworICAgIGRyYXdU
ZXh0KHJ1biwgcG9pbnQsIFRleHRTdHlsZSgpLCBpc1ByaW50aW5nKTsKIH0KIAotdm9pZCBHcmFw
aGljc0NvbnRleHQ6OmRyYXdUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQm
IHBvaW50LCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlKQordm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50LCBjb25zdCBU
ZXh0U3R5bGUmIHN0eWxlLCBib29sIGlzUHJpbnRpbmcpCiB7CiAgICAgaWYgKHBhaW50aW5nRGlz
YWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAotICAgIGZvbnQoKS5kcmF3VGV4dCh0aGlz
LCBydW4sIHN0eWxlLCBwb2ludCk7CisgICAgZm9udCgpLmRyYXdUZXh0KHRoaXMsIHJ1biwgc3R5
bGUsIHBvaW50LCBpc1ByaW50aW5nKTsKIH0KIAogdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdI
aWdobGlnaHRGb3JUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgSW50UG9pbnQmIHBvaW50
LCBpbnQgaCwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSwgY29uc3QgQ29sb3ImIGJhY2tncm91bmRD
b2xvcikKSW5kZXg6IHBsYXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBs
YXRmb3JtL0dyYXBoaWNzQ29udGV4dC5oCShyZXZpc2lvbiAxNjI2MCkKKysrIHBsYXRmb3JtL0dy
YXBoaWNzQ29udGV4dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsOCArMTIwLDggQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICB2b2lkIHNldEZvY3VzUmluZ0NsaXAoY29uc3QgSW50UmVj
dCYpOwogICAgICAgICB2b2lkIGNsZWFyRm9jdXNSaW5nQ2xpcCgpOwogCi0gICAgICAgIHZvaWQg
ZHJhd1RleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50Jik7Ci0gICAgICAgIHZvaWQg
ZHJhd1RleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50JiwgY29uc3QgVGV4dFN0eWxl
Jik7CisgICAgICAgIHZvaWQgZHJhd1RleHQoY29uc3QgVGV4dFJ1biYsIGNvbnN0IEludFBvaW50
JiwgYm9vbCBpc1ByaW50aW5nKTsKKyAgICAgICAgdm9pZCBkcmF3VGV4dChjb25zdCBUZXh0UnVu
JiwgY29uc3QgSW50UG9pbnQmLCBjb25zdCBUZXh0U3R5bGUmLCBib29sIGlzUHJpbnRpbmcpOwog
ICAgICAgICB2b2lkIGRyYXdIaWdobGlnaHRGb3JUZXh0KGNvbnN0IFRleHRSdW4mLCBjb25zdCBJ
bnRQb2ludCYsIGludCBoLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBDb2xvciYgYmFja2dyb3Vu
ZENvbG9yKTsKIAogICAgICAgICBGbG9hdFJlY3Qgcm91bmRUb0RldmljZVBpeGVscyhjb25zdCBG
bG9hdFJlY3QmKTsKSW5kZXg6IHBsYXRmb3JtL21hYy9GaWxlQnV0dG9uTWFjLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHBsYXRmb3JtL21hYy9GaWxlQnV0dG9uTWFjLm1tCShyZXZpc2lvbiAxNjI2MCkKKysr
IHBsYXRmb3JtL21hYy9GaWxlQnV0dG9uTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzgsNiAr
MTM4LDkgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAgICAgICAgIAogLSAodm9pZClkcmF3
UmVjdDooTlNSZWN0KXJlY3QKIHsKKyAgICAvLyBBbHRob3VnaCB0aGlzIGZ1bmN0aW9uIGlzIGlu
IFdlYkNvcmUsIGl0IGRvZXMgbm90IHVzZSB0aGUgV2ViQ29yZSBkcmF3aW5nIG1vZGVsLgorICAg
IC8vIEluc3RlYWQgdGhpcyB1c2VzIHRoZSBOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dCwganVzdCBsaWtlIGFueSBub3JtYWwgQ29jb2EgYXBwbGljYXRpb24gd291bGQuCisgICAgLy8g
Q2FsbHMgZnJvbSB0aGlzIGZ1bmN0aW9uIGJhY2sgaW50byBXZWJDb3JlIG11c3QgcGFzcyB0aHJv
dWdoIGFub3RoZXIgV2ViQ29yZSBkcmF3aW5nIGVudHJ5IHBvaW50IGZvciBHcmFwaGljc0NvbnRl
eHQgc2V0dXAuCiAgICAgTlNSZWN0IGJvdW5kcyA9IFtzZWxmIGJvdW5kc107CiAgICAgCiAgICAg
W05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKSW5kZXg6IHBsYXRmb3JtL21h
Yy9Gb250TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9Gb250TWFjLm1tCShyZXZp
c2lvbiAxNjI2MCkKKysrIHBsYXRmb3JtL21hYy9Gb250TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC02MiwxMSArNjIsMTcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogc3RydWN0IEFUU1VMYXlvdXRQ
YXJhbWV0ZXJzCiB7CiAgICAgQVRTVUxheW91dFBhcmFtZXRlcnMoY29uc3QgVGV4dFJ1biYgcnVu
LCBjb25zdCBUZXh0U3R5bGUmIHN0eWxlKQotICAgIDptX3J1bihydW4pLCBtX3N0eWxlKHN0eWxl
KSwKLSAgICAgbV9mb250KDApLCBtX2ZvbnRzKDApLCBtX2NoYXJCdWZmZXIoMCksIG1faGFzU3lu
dGhldGljQm9sZChmYWxzZSksIG1fc3ludGhldGljQm9sZFBhc3MoZmFsc2UpLCBtX3BhZFBlclNw
YWNlKDApCisgICAgICAgIDogbV9ydW4ocnVuKQorICAgICAgICAsIG1fc3R5bGUoc3R5bGUpCisg
ICAgICAgICwgbV9mb250KDApCisgICAgICAgICwgbV9mb250cygwKQorICAgICAgICAsIG1fY2hh
ckJ1ZmZlcigwKQorICAgICAgICAsIG1faGFzU3ludGhldGljQm9sZChmYWxzZSkKKyAgICAgICAg
LCBtX3N5bnRoZXRpY0JvbGRQYXNzKGZhbHNlKQorICAgICAgICAsIG1fcGFkUGVyU3BhY2UoMCkK
ICAgICB7fQogCi0gICAgdm9pZCBpbml0aWFsaXplKGNvbnN0IEZvbnQqIGZvbnQpOworICAgIHZv
aWQgaW5pdGlhbGl6ZShjb25zdCBGb250KiwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiA9IDApOwog
CiAgICAgY29uc3QgVGV4dFJ1biYgbV9ydW47CiAgICAgY29uc3QgVGV4dFN0eWxlJiBtX3N0eWxl
OwpAQCAtMjYxLDcgKzI2Nyw3IEBAIHN0YXRpYyBPU1N0YXR1cyBvdmVycmlkZUxheW91dE9wZXJh
dGlvbigKICAgICByZXR1cm4gbm9FcnI7CiB9CiAKLXZvaWQgQVRTVUxheW91dFBhcmFtZXRlcnM6
OmluaXRpYWxpemUoY29uc3QgRm9udCogZm9udCkKK3ZvaWQgQVRTVUxheW91dFBhcmFtZXRlcnM6
OmluaXRpYWxpemUoY29uc3QgRm9udCogZm9udCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBncmFw
aGljc0NvbnRleHQpCiB7CiAgICAgbV9mb250ID0gZm9udDsKIApAQCAtMjcxLDggKzI3Nyw2IEBA
IHZvaWQgQVRTVUxheW91dFBhcmFtZXRlcnM6OmluaXRpYWxpemUoY28KICAgICBtX2ZvbnRzID0g
bmV3IGNvbnN0IEZvbnREYXRhKlttX3J1bi5sZW5ndGgoKV07CiAgICAgbV9jaGFyQnVmZmVyID0g
KFVDaGFyKikoKGZvbnQtPmlzU21hbGxDYXBzKCkgfHwgKG1fc3R5bGUucnRsKCkgJiYgIWZvbnRE
YXRhLT5tX0FUU1VNaXJyb3JzKSkgPyBuZXcgVUNoYXJbbV9ydW4ubGVuZ3RoKCldIDogMCk7CiAg
ICAgCi0gICAgLy8gVGhlIG9ubHkgQ29jb2EgY2FsbHMgaGVyZSBhcmUgdG8gTlNHcmFwaGljc0Nv
bnRleHQsIHdoaWNoIGRvZXMgbm90IHJhaXNlIGV4Y2VwdGlvbnMuCi0KICAgICBBVFNVVGV4dExh
eW91dCBsYXlvdXQ7CiAgICAgT1NTdGF0dXMgc3RhdHVzOwogICAgIEFUU1VMYXlvdXRPcGVyYXRp
b25PdmVycmlkZVNwZWNpZmllciBvdmVycmlkZVNwZWNpZmllcjsKQEAgLTMwNiwxNCArMzEwLDE0
IEBAIHZvaWQgQVRTVUxheW91dFBhcmFtZXRlcnM6OmluaXRpYWxpemUoY28KICAgICBtX2xheW91
dCA9IGxheW91dDsKICAgICBBVFNVU2V0VGV4dExheW91dFJlZkNvbihtX2xheW91dCwgKFVSZWZD
b24pdGhpcyk7CiAKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0ID0gKENHQ29udGV4dFJlZilb
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwogICAgIEFU
U0xpbmVMYXlvdXRPcHRpb25zIGxpbmVMYXlvdXRPcHRpb25zID0ga0FUU0xpbmVLZWVwU3BhY2Vz
T3V0T2ZNYXJnaW4gfCBrQVRTTGluZUhhc05vSGFuZ2VyczsKICAgICBCb29sZWFuIHJ0bCA9IG1f
c3R5bGUucnRsKCk7CiAgICAgb3ZlcnJpZGVTcGVjaWZpZXIub3BlcmF0aW9uU2VsZWN0b3IgPSBr
QVRTVUxheW91dE9wZXJhdGlvblBvc3RMYXlvdXRBZGp1c3RtZW50OwogICAgIG92ZXJyaWRlU3Bl
Y2lmaWVyLm92ZXJyaWRlVVBQID0gb3ZlcnJpZGVMYXlvdXRPcGVyYXRpb247CiAgICAgQVRTVUF0
dHJpYnV0ZVRhZyB0YWdzW10gPSB7IGtBVFNVQ0dDb250ZXh0VGFnLCBrQVRTVUxpbmVMYXlvdXRP
cHRpb25zVGFnLCBrQVRTVUxpbmVEaXJlY3Rpb25UYWcsIGtBVFNVTGF5b3V0T3BlcmF0aW9uT3Zl
cnJpZGVUYWcgfTsKICAgICBCeXRlQ291bnQgc2l6ZXNbXSA9IHsgc2l6ZW9mKENHQ29udGV4dFJl
ZiksIHNpemVvZihBVFNMaW5lTGF5b3V0T3B0aW9ucyksIHNpemVvZihCb29sZWFuKSwgc2l6ZW9m
KEFUU1VMYXlvdXRPcGVyYXRpb25PdmVycmlkZVNwZWNpZmllcikgfTsKLSAgICBBVFNVQXR0cmli
dXRlVmFsdWVQdHIgdmFsdWVzW10gPSB7ICZjZ0NvbnRleHQsICZsaW5lTGF5b3V0T3B0aW9ucywg
JnJ0bCwgJm92ZXJyaWRlU3BlY2lmaWVyIH07CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBn
cmFwaGljc0NvbnRleHQgPyBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogMDsK
KyAgICBBVFNVQXR0cmlidXRlVmFsdWVQdHIgdmFsdWVzW10gPSB7IChjb250ZXh0ID8gJmNvbnRl
eHQgOiAwKSwgJmxpbmVMYXlvdXRPcHRpb25zLCAmcnRsLCAmb3ZlcnJpZGVTcGVjaWZpZXIgfTsK
ICAgICAKICAgICBzdGF0dXMgPSBBVFNVU2V0TGF5b3V0Q29udHJvbHMobGF5b3V0LCAobV9zdHls
ZS5hcHBseVdvcmRSb3VuZGluZygpID8gNCA6IDMpLCB0YWdzLCBzaXplcywgdmFsdWVzKTsKICAg
ICBpZiAoc3RhdHVzICE9IG5vRXJyKQpAQCAtNDY3LDE4ICs0NzEsMTQgQEAgdm9pZCBGb250Ojpk
cmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZQogCiAgICAgVGV4dFJ1biBhZGp1c3RlZFJ1biA9
IHN0eWxlLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSA/IGFkZERpcmVjdGlvbmFsT3ZlcnJpZGUocnVu
LCBzdHlsZS5ydGwoKSkgOiBydW47CiAgICAgQVRTVUxheW91dFBhcmFtZXRlcnMgcGFyYW1zKGFk
anVzdGVkUnVuLCBzdHlsZSk7Ci0gICAgcGFyYW1zLmluaXRpYWxpemUodGhpcyk7CisgICAgcGFy
YW1zLmluaXRpYWxpemUodGhpcywgZ3JhcGhpY3NDb250ZXh0KTsKIAogICAgIFtuc0NvbG9yKGdy
YXBoaWNzQ29udGV4dC0+cGVuKCkuY29sb3IoKSkgc2V0XTsKIAogICAgIC8vIEFUU1VJIGNhbid0
IGRyYXcgYmV5b25kIC0zMjc2OCB0byArMzI3Njcgc28gd2UgdHJhbnNsYXRlIHRoZSBDVE0gYW5k
IHRlbGwgQVRTVUkgdG8gZHJhdyBhdCAoMCwgMCkuCiAgICAgLy8gRklYTUU6IEN1dCB0aGUgZGVw
ZW5kZW5jeSBvbiBjdXJyZW50Q29udGV4dCBoZXJlLgotICAgIE5TR3JhcGhpY3NDb250ZXh0ICpn
Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07Ci0gICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSAoQ0dDb250ZXh0UmVmKVtnQ29udGV4dCBncmFwaGljc1BvcnRdOwor
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgcG9pbnQueCgpLCBwb2lu
dC55KCkpOwotICAgIGJvb2wgZmxpcHBlZCA9IFtnQ29udGV4dCBpc0ZsaXBwZWRdOwotICAgIGlm
ICghZmxpcHBlZCkKLSAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMS4wLCAtMS4w
KTsKICAgICBzdGF0dXMgPSBBVFNVRHJhd1RleHQocGFyYW1zLm1fbGF5b3V0LCBhZGp1c3RlZFJ1
bi5mcm9tKCksIHJ1bkxlbmd0aCwgMCwgMCk7CiAgICAgaWYgKHN0YXR1cyA9PSBub0VyciAmJiBw
YXJhbXMubV9oYXNTeW50aGV0aWNCb2xkKSB7CiAgICAgICAgIC8vIEZvcmNlIHJlbGF5b3V0IGZv
ciB0aGUgYm9sZCBwYXNzCkBAIC00ODYsOCArNDg2LDYgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxl
eFRleHQoR3JhcGhpY3NDb250ZQogICAgICAgICBwYXJhbXMubV9zeW50aGV0aWNCb2xkUGFzcyA9
IHRydWU7CiAgICAgICAgIHN0YXR1cyA9IEFUU1VEcmF3VGV4dChwYXJhbXMubV9sYXlvdXQsIGFk
anVzdGVkUnVuLmZyb20oKSwgcnVuTGVuZ3RoLCAwLCAwKTsKICAgICB9Ci0gICAgaWYgKCFmbGlw
cGVkKQotICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLjAsIC0xLjApOwogICAg
IENHQ29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCAtcG9pbnQueCgpLCAtcG9pbnQueSgpKTsK
IAogICAgIGlmIChzdGF0dXMgIT0gbm9FcnIpIHsKQEAgLTU1NCwxOSArNTUyLDE2IEBAIGludCBG
b250OjpvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXgKICAgICByZXR1cm4gb2Zmc2V0IC0g
YWRqdXN0ZWRSdW4uZnJvbSgpOwogfQogCi12b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXIm
IGdseXBoQnVmZmVyLCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYg
cG9pbnQpIGNvbnN0Cit2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjb250
ZXh0LCBjb25zdCBGb250RGF0YSogZm9udCwgY29uc3QgR2x5cGhCdWZmZXImIGdseXBoQnVmZmVy
LCBpbnQgZnJvbSwgaW50IG51bUdseXBocywgY29uc3QgRmxvYXRQb2ludCYgcG9pbnQsIGJvb2wg
aXNQcmludGluZykgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogR3JhYiB0aGUgQ0dDb250ZXh0IGZy
b20gdGhlIEdyYXBoaWNzQ29udGV4dCBldmVudHVhbGx5LCB3aGVuIHdlIGhhdmUgbWFkZSBzdXJl
IHRvIHNoaWVsZCBhZ2FpbnN0IGZsaXBwaW5nIGNhdXNlZCBieSBjYWxscyBpbnRvIHVzCi0gICAg
Ly8gZnJvbSBTYWZhcmkuCi0gICAgTlNHcmFwaGljc0NvbnRleHQgKmdDb250ZXh0ID0gW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKLSAgICBDR0NvbnRleHRSZWYgY2dDb250ZXh0
ID0gKENHQ29udGV4dFJlZilbZ0NvbnRleHQgZ3JhcGhpY3NQb3J0XTsKKyAgICBDR0NvbnRleHRS
ZWYgY2dDb250ZXh0ID0gY29udGV4dC0+cGxhdGZvcm1Db250ZXh0KCk7CiAKICAgICBib29sIG9y
aWdpbmFsU2hvdWxkVXNlRm9udFNtb290aGluZyA9IHdrQ0dDb250ZXh0R2V0U2hvdWxkU21vb3Ro
Rm9udHMoY2dDb250ZXh0KTsKICAgICBDR0NvbnRleHRTZXRTaG91bGRTbW9vdGhGb250cyhjZ0Nv
bnRleHQsIFdlYkNvcmVTaG91bGRVc2VGb250U21vb3RoaW5nKCkpOwogICAgIAogICAgIGNvbnN0
IEZvbnRQbGF0Zm9ybURhdGEmIHBsYXRmb3JtRGF0YSA9IGZvbnQtPnBsYXRmb3JtRGF0YSgpOwog
ICAgIE5TRm9udCogZHJhd0ZvbnQ7Ci0gICAgaWYgKFtnQ29udGV4dCBpc0RyYXdpbmdUb1NjcmVl
bl0pIHsKKyAgICBpZiAoIWlzUHJpbnRpbmcpIHsKICAgICAgICAgZHJhd0ZvbnQgPSBbcGxhdGZv
cm1EYXRhLmZvbnQgc2NyZWVuRm9udF07CiAgICAgICAgIGlmIChkcmF3Rm9udCAhPSBwbGF0Zm9y
bURhdGEuZm9udCkKICAgICAgICAgICAgIC8vIFdlIGFyZSBnZXR0aW5nIHRoaXMgaW4gdG9vIG1h
bnkgcGxhY2VzICgzNDA2NDExKTsgdXNlIEVSUk9SIHNvIGl0IG9ubHkgcHJpbnRzIG9uIGRlYnVn
IHZlcnNpb25zIGZvciBub3cuIChXZSBzaG91bGQgZGVidWcgdGhpcyBhbHNvLCBldmVudHVhbGx5
KS4KQEAgLTU4MywxMCArNTc4LDggQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogYwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAgIG1lbWNweSgmbWF0
cml4LCBbZHJhd0ZvbnQgbWF0cml4XSwgc2l6ZW9mKG1hdHJpeCkpOwotICAgIGlmIChbZ0NvbnRl
eHQgaXNGbGlwcGVkXSkgewotICAgICAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKLSAgICAgICAg
bWF0cml4LmQgPSAtbWF0cml4LmQ7Ci0gICAgfQorICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwor
ICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwogICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGlj
T2JsaXF1ZSkKICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4
LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgLXRhbmYoU1lOVEhFVElDX09CTElRVUVfQU5H
TEUgKiBhY29zZigwKSAvIDkwKSwgMSwgMCwgMCkpOyAKICAgICBDR0NvbnRleHRTZXRUZXh0TWF0
cml4KGNnQ29udGV4dCwgbWF0cml4KTsKQEAgLTU5NCw3ICs1ODcsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgd2tTZXRDR0ZvbnRSZW5kZXJpbmdNb2Rl
KGNnQ29udGV4dCwgZHJhd0ZvbnQpOwogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4
dCwgMS4wZik7CiAKLSAgICBbbnNDb2xvcihjb250ZXh0LT5wZW4oKS5jb2xvcigpKSBzZXRdOwor
ICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjZ0NvbnRleHQsIGNnQ29sb3IoY29u
dGV4dC0+cGVuKCkuY29sb3IoKSkpOyAvLyBJTU8gdGhpcyBpcyBjb25mdXNpbmcsIHNldHRpbmcg
dGhlIGZpbGwgYmFzZWQgb24gdGhlIHBlbiBjb2xvci4gLSBlY3MKIAogICAgIENHQ29udGV4dFNl
dFRleHRQb3NpdGlvbihjZ0NvbnRleHQsIHBvaW50LngoKSwgcG9pbnQueSgpKTsKICAgICBDR0Nv
bnRleHRTaG93R2x5cGhzV2l0aEFkdmFuY2VzKGNnQ29udGV4dCwgZ2x5cGhCdWZmZXIuZ2x5cGhz
KGZyb20pLCBnbHlwaEJ1ZmZlci5hZHZhbmNlcyhmcm9tKSwgbnVtR2x5cGhzKTsKSW5kZXg6IHBs
YXRmb3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0v
bWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gMTYyNjApCisrKyBwbGF0Zm9ybS9t
YWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNiArMTM0LDkg
QEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRyYXdMaW5lRm9yTWlzc3BlbAogICAgICAgICAgICAg
d2lkdGggLT0gd2lkdGhNb2Q7CiAgICAgfQogICAgIAorICAgIC8vIEZJWE1FOiBUaGlzIGNvZGUg
c2hvdWxkIG5vdCB1c2UgTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHQKKyAgICAvLyBJ
biBvcmRlciB0byByZW1vdmUgdGhpcyByZXF1aXJlbWVudCwgd2Ugd2lsbCBuZWVkIHRvIGltcGxl
bWVudCBhIHBsYXRmb3JtL1BhdHRlcm4gY2xhc3MgaG93ZXZlci4KKyAgICAKICAgICAvLyBEcmF3
IHVuZGVybGluZQogICAgIE5TR3JhcGhpY3NDb250ZXh0ICpjdXJyZW50Q29udGV4dCA9IFtOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CiAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSAoQ0dDb250ZXh0UmVmKVtjdXJyZW50Q29udGV4dCBncmFwaGljc1BvcnRdOwpJbmRleDogcGxh
dGZvcm0vbWFjL0xpc3RCb3hNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vbWFjL0xpc3RC
b3hNYWMubW0JKHJldmlzaW9uIDE2MjYwKQorKysgcGxhdGZvcm0vbWFjL0xpc3RCb3hNYWMubW0J
KHdvcmtpbmcgY29weSkKQEAgLTY1OSw5ICs2NTksMTMgQEAgc3RhdGljIEJvb2xlYW4gTGlzdEJv
eFR5cGVTZWxlY3RDYWxsYmFjawogCiAtICh2b2lkKWRyYXdSb3c6KGludClyb3cgY2xpcFJlY3Q6
KE5TUmVjdCljbGlwUmVjdAogewotICAgIGlmICghX2JveCkgeworICAgIGlmICghX2JveCkKICAg
ICAgICAgcmV0dXJuOwotICAgIH0KKyAgICAKKyAgICAvLyBUaGlzIGlzIGFub3RoZXIgZW50cnkg
aW50byBXZWJDb3JlIGZyb20gQXBwS2l0LiAgV2UgYnVpbGQgYSBuZXcgR3JhcGhpY3NDb250ZXh0
IGZyb20gdGhlIGN1cnJlbnQgY29udGV4dCBiZWZvcmUgY29udGludWluZy4KKyAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKKyAgICBBU1NFUlQoW1tOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dF0gaXNGbGlwcGVkXSk7CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNz
Q29udGV4dChjb250ZXh0KTsKIAogICAgIGNvbnN0IExpc3RCb3hJdGVtICZpdGVtID0gX2JveC0+
aXRlbUF0SW5kZXgocm93KTsKIApAQCAtNjgwLDExICs2ODQsMTEgQEAgc3RhdGljIEJvb2xlYW4g
TGlzdEJveFR5cGVTZWxlY3RDYWxsYmFjawogCiAgICAgYm9vbCBkZWxldGVSZW5kZXJlciA9IGZh
bHNlOwogICAgIGNvbnN0IEZvbnQqIHJlbmRlcmVyOwotICAgIGlmIChpc1N5c3RlbUZvbnQpIHsK
LSAgICAgICAgUmVuZGVyV2lkZ2V0ICpjbGllbnQgPSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQg
Kj4oW3NlbGYgd2lkZ2V0XS0+Y2xpZW50KCkpOwotICAgICAgICBib29sIGlzUHJpbnRpbmcgPSBj
bGllbnQtPnZpZXcoKS0+cHJpbnRpbmdNb2RlKCk7CisgICAgUmVuZGVyV2lkZ2V0ICpjbGllbnQg
PSBzdGF0aWNfY2FzdDxSZW5kZXJXaWRnZXQgKj4oW3NlbGYgd2lkZ2V0XS0+Y2xpZW50KCkpOwor
ICAgIGJvb2wgaXNQcmludGluZyA9IGNsaWVudC0+dmlldygpLT5wcmludGluZ01vZGUoKTsKKyAg
ICBpZiAoaXNTeXN0ZW1Gb250KQogICAgICAgICByZW5kZXJlciA9IChpdGVtLnR5cGUgPT0gTGlz
dEJveEdyb3VwTGFiZWwpID8gZ3JvdXBMYWJlbFRleHRSZW5kZXJlcihpc1ByaW50aW5nKSA6IGl0
ZW1UZXh0UmVuZGVyZXIoaXNQcmludGluZyk7Ci0gICAgfSBlbHNlIHsKKyAgICBlbHNlIHsKICAg
ICAgICAgaWYgKGl0ZW0udHlwZSA9PSBMaXN0Qm94R3JvdXBMYWJlbCkgewogICAgICAgICAgICAg
ZGVsZXRlUmVuZGVyZXIgPSB0cnVlOwogICAgICAgICAgICAgRm9udERlc2NyaXB0aW9uIGJvbGRE
ZXNjID0gX2JveC0+Zm9udCgpLmZvbnREZXNjcmlwdGlvbigpOwpAQCAtNzEwLDEyICs3MTQsMTAg
QEAgc3RhdGljIEJvb2xlYW4gTGlzdEJveFR5cGVTZWxlY3RDYWxsYmFjawogICAgICAgICBwb2lu
dC5zZXRYKE5TTWF4WChjZWxsUmVjdCkgLSByaWdodE1hcmdpbiAtIHJlbmRlcmVyLT5mbG9hdFdp
ZHRoKHJ1biwgc3R5bGUpKTsKICAgICBwb2ludC5zZXRZKE5TTWF4WShjZWxsUmVjdCkgLSByZW5k
ZXJlci0+ZGVzY2VudCgpIC0gYm90dG9tTWFyZ2luKTsKIAotICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBn
cmFwaGljc1BvcnRdOwotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4
dCk7CiAgICAgQ0dGbG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKICAgICBbW2NvbG9yIGNv
bG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdIGdldFJlZDomcmVk
IGdyZWVuOiZncmVlbiBibHVlOiZibHVlIGFscGhhOiZhbHBoYV07CiAgICAgZ3JhcGhpY3NDb250
ZXh0LnNldFBlbihtYWtlUkdCQSgoaW50KShyZWQgKiAyNTUpLCAoaW50KShncmVlbiAqIDI1NSks
IChpbnQpKGJsdWUgKiAyNTUpLCAoaW50KShhbHBoYSAqIDI1NSkpKTsKLSAgICByZW5kZXJlci0+
ZHJhd1RleHQoJmdyYXBoaWNzQ29udGV4dCwgcnVuLCBzdHlsZSwgcG9pbnQpOworICAgIHJlbmRl
cmVyLT5kcmF3VGV4dCgmZ3JhcGhpY3NDb250ZXh0LCBydW4sIHN0eWxlLCBwb2ludCwgaXNQcmlu
dGluZyk7CiB9CiAKIC0gKHZvaWQpX3dlYmNvcmVfc2V0S2V5Ym9hcmRGb2N1c1JpbmdOZWVkc0Rp
c3BsYXkKSW5kZXg6IHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1tCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1tCShyZXZpc2lvbiAxNjI2
MCkKKysrIHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1tCSh3b3JraW5nIGNvcHkp
CkBAIC0zNyw2ICszNywxOSBAQCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogdm9pZCBXZWJD
b3JlRHJhd1RleHRBdFBvaW50KGNvbnN0IFVuaUNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgbGVuZ3Ro
LCBOU1BvaW50IHBvaW50LCBOU0ZvbnQqIGZvbnQsIE5TQ29sb3IqIHRleHRDb2xvcikKIHsKKyAg
ICAvLyBUaGlzIGlzIGFub3RoZXIgZW50cnkgcG9pbnQgaW50byBXZWJDb3JlIGZyb20gU2FmYXJp
LCB3ZSBoYXZlIHRvIGJ1aWxkIGEgR3JhcGhpY3NDb250ZXh0IGZyb20gdGhlIGN1cnJlbnQgY29u
dGV4dCBmb3IgV2ViQ29yZSB0byBkcmF3CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAoQ0dD
b250ZXh0UmVmKVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9y
dF07CisgICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dChjb250ZXh0KTsKKyAgICAK
KyNpZiBNQUNfT1NfWF9WRVJTSU9OX01JTl9SRVFVSVJFRCA8PSBNQUNfT1NfWF9WRVJTSU9OXzEw
XzQKKyAgICAvLyBUaWdlciB2ZXJzaW9ucyBvZiBTYWZhcmkgZG9uJ3QgcHJvcGVybHkgZmxpcCB0
aGUgTlNHcmFwaGljc0NvbnRleHQgYmVmb3JlIGNhbGxpbmcgV2ViQ29yZQorICAgIGJvb2wgZmxp
cHBlZCA9IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF07Cisg
ICAgaWYgKCFmbGlwcGVkKQorICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLjAs
IC0xLjApOworI2Vsc2UKKyAgICBBU1NFUlQoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29u
dGV4dF0gaXNGbGlwcGVkXSk7CisjZW5kaWYKKyAgICAKICAgICBGb250UGxhdGZvcm1EYXRhIGYo
Zm9udCk7CiAgICAgRm9udCByZW5kZXJlcihmKTsKICAgICBUZXh0UnVuIHJ1bihidWZmZXIsIGxl
bmd0aCk7CkBAIC00NCwxMCArNTcsMTQgQEAgdm9pZCBXZWJDb3JlRHJhd1RleHRBdFBvaW50KGNv
bnN0IFVuaUNoYQogICAgIHN0eWxlLmRpc2FibGVSb3VuZGluZ0hhY2tzKCk7CiAgICAgQ0dGbG9h
dCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKICAgICBbW3RleHRDb2xvciBjb2xvclVzaW5nQ29s
b3JTcGFjZU5hbWU6TlNEZXZpY2VSR0JDb2xvclNwYWNlXSBnZXRSZWQ6JnJlZCBncmVlbjomZ3Jl
ZW4gYmx1ZTomYmx1ZSBhbHBoYTomYWxwaGFdOwotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0g
KENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGlj
c1BvcnRdOwotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAg
ICAgZ3JhcGhpY3NDb250ZXh0LnNldFBlbihtYWtlUkdCQSgoaW50KShyZWQgKiAyNTUpLCAoaW50
KShncmVlbiAqIDI1NSksIChpbnQpKGJsdWUgKiAyNTUpLCAoaW50KShhbHBoYSAqIDI1NSkpKTsK
LSAgICByZW5kZXJlci5kcmF3VGV4dCgmZ3JhcGhpY3NDb250ZXh0LCBydW4sIHN0eWxlLCBGbG9h
dFBvaW50KHBvaW50LngsIHBvaW50LnkpKTsKKyAgICBib29sIGlzUHJpbnRpbmcgPSAhW1tOU0dy
YXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3JlZW5dOworICAgIHJl
bmRlcmVyLmRyYXdUZXh0KCZncmFwaGljc0NvbnRleHQsIHJ1biwgc3R5bGUsIEZsb2F0UG9pbnQo
cG9pbnQueCwgcG9pbnQueSksIGlzUHJpbnRpbmcpOworICAgIAorI2lmIE1BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEIDw9IE1BQ19PU19YX1ZFUlNJT05fMTBfNAorICAgIGlmICghZmxpcHBl
ZCkKKyAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMS4wLCAtMS4wKTsKKyNlbmRp
ZgogfQogCiBmbG9hdCBXZWJDb3JlVGV4dEZsb2F0V2lkdGgoY29uc3QgVW5pQ2hhciogYnVmZmVy
LCB1bnNpZ25lZCBsZW5ndGggLCBOU0ZvbnQqIGZvbnQpCkluZGV4OiByZW5kZXJpbmcvRWxsaXBz
aXNCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlz
aW9uIDE2MjYwKQorKysgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkVsbGlwc2lz
Qm94LmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4
dC5oIgogI2luY2x1ZGUgIlRleHRTdHlsZS5oIgogCkBAIC00Niw3ICs0Nyw3IEBAIHZvaWQgRWxs
aXBzaXNCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGEKICAgICB9CiAKICAgICBjb25zdCBTdHJp
bmcmIHN0ciA9IG1fc3RyOwotICAgIHAtPmRyYXdUZXh0KFRleHRSdW4oc3RyLmltcGwoKSksIElu
dFBvaW50KG1feCArIF90eCwgbV95ICsgX3R5ICsgbV9iYXNlbGluZSksIFRleHRTdHlsZSgwLCAw
LCAwLCBmYWxzZSwgX3N0eWxlLT52aXN1YWxseU9yZGVyZWQoKSkpOworICAgIHAtPmRyYXdUZXh0
KFRleHRSdW4oc3RyLmltcGwoKSksIEludFBvaW50KG1feCArIF90eCwgbV95ICsgX3R5ICsgbV9i
YXNlbGluZSksIFRleHRTdHlsZSgwLCAwLCAwLCBmYWxzZSwgX3N0eWxlLT52aXN1YWxseU9yZGVy
ZWQoKSksIG9iamVjdCgpLT5kb2N1bWVudCgpLT5wcmludGluZygpKTsKIAogICAgIGlmIChzZXRT
aGFkb3cpCiAgICAgICAgIHAtPmNsZWFyU2hhZG93KCk7CkluZGV4OiByZW5kZXJpbmcvSW5saW5l
VGV4dEJveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwCShy
ZXZpc2lvbiAxNjI2MCkKKysrIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzUyLDE5ICszNTIsMTkgQEAgdm9pZCBJbmxpbmVUZXh0Qm94OjpwYWludChSZW5k
ZXJPYmplY3Q6OgogICAgICAgICBpbnQgZW5kUG9pbnQgPSBtX2xlbjsKICAgICAgICAgaWYgKG1f
dHJ1bmNhdGlvbiAhPSBjTm9UcnVuY2F0aW9uKQogICAgICAgICAgICAgZW5kUG9pbnQgPSBtX3Ry
dW5jYXRpb24gLSBtX3N0YXJ0OwotICAgICAgICBpLnAtPmRyYXdUZXh0KFRleHRSdW4odGV4dFN0
ciwgbV9zdGFydCwgZW5kUG9pbnQpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jh
c2VsaW5lKSwgdGV4dFN0eWxlKTsKKyAgICAgICAgaS5wLT5kcmF3VGV4dChUZXh0UnVuKHRleHRT
dHIsIG1fc3RhcnQsIGVuZFBvaW50KSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9i
YXNlbGluZSksIHRleHRTdHlsZSwgaXNQcmludGluZyk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
aW50IHNQb3MsIGVQb3M7CiAgICAgICAgIHNlbGVjdGlvblN0YXJ0RW5kKHNQb3MsIGVQb3MpOwog
ICAgICAgICBpZiAocGFpbnRTZWxlY3RlZFRleHRTZXBhcmF0ZWx5KSB7CiAgICAgICAgICAgICAv
LyBwYWludCBvbmx5IHRoZSB0ZXh0IHRoYXQgaXMgbm90IHNlbGVjdGVkCiAgICAgICAgICAgICBp
ZiAoc1BvcyA+PSBlUG9zKQotICAgICAgICAgICAgICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0
ZXh0U3RyLCBtX3N0YXJ0LCBtX2xlbiksIEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1f
YmFzZWxpbmUpLCB0ZXh0U3R5bGUpOworICAgICAgICAgICAgICAgIGkucC0+ZHJhd1RleHQoVGV4
dFJ1bih0ZXh0U3RyLCBtX3N0YXJ0LCBtX2xlbiksIEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0
eSArIG1fYmFzZWxpbmUpLCB0ZXh0U3R5bGUsIGlzUHJpbnRpbmcpOwogICAgICAgICAgICAgZWxz
ZSB7CiAgICAgICAgICAgICAgICAgaWYgKHNQb3MgLSAxID49IDApCi0gICAgICAgICAgICAgICAg
ICAgIGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0ZXh0U3RyLCBtX3N0YXJ0LCBtX2xlbiwgMCwgc1Bv
cyksIEludFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0ZXh0U3R5bGUp
OworICAgICAgICAgICAgICAgICAgICBpLnAtPmRyYXdUZXh0KFRleHRSdW4odGV4dFN0ciwgbV9z
dGFydCwgbV9sZW4sIDAsIHNQb3MpLCBJbnRQb2ludChtX3ggKyB0eCwgbV95ICsgdHkgKyBtX2Jh
c2VsaW5lKSwgdGV4dFN0eWxlLCBpc1ByaW50aW5nKTsKICAgICAgICAgICAgICAgICBpZiAoZVBv
cyA8IG1fc3RhcnQgKyBtX2xlbikKLSAgICAgICAgICAgICAgICAgICAgaS5wLT5kcmF3VGV4dChU
ZXh0UnVuKHRleHRTdHIsIG1fc3RhcnQsIG1fbGVuLCBlUG9zKSwgSW50UG9pbnQobV94ICsgdHgs
IG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7CisgICAgICAgICAgICAgICAgICAg
IGkucC0+ZHJhd1RleHQoVGV4dFJ1bih0ZXh0U3RyLCBtX3N0YXJ0LCBtX2xlbiwgZVBvcyksIElu
dFBvaW50KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0ZXh0U3R5bGUsIGlzUHJp
bnRpbmcpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTM3Nyw3
ICszNzcsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6CiAgICAg
ICAgICAgICAgICAgaS5wLT5zZXRTaGFkb3coSW50U2l6ZShzZWxlY3Rpb25UZXh0U2hhZG93LT54
LCBzZWxlY3Rpb25UZXh0U2hhZG93LT55KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzZWxlY3Rpb25UZXh0U2hhZG93LT5ibHVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHNlbGVjdGlvblRleHRTaGFkb3ctPmNvbG9yKTsKLSAgICAgICAgICAgIGkucC0+ZHJhd1Rl
eHQoVGV4dFJ1bih0ZXh0U3RyLCBtX3N0YXJ0LCBtX2xlbiwgc1BvcywgZVBvcyksIEludFBvaW50
KG1feCArIHR4LCBtX3kgKyB0eSArIG1fYmFzZWxpbmUpLCB0ZXh0U3R5bGUpOworICAgICAgICAg
ICAgaS5wLT5kcmF3VGV4dChUZXh0UnVuKHRleHRTdHIsIG1fc3RhcnQsIG1fbGVuLCBzUG9zLCBl
UG9zKSwgSW50UG9pbnQobV94ICsgdHgsIG1feSArIHR5ICsgbV9iYXNlbGluZSksIHRleHRTdHls
ZSwgaXNQcmludGluZyk7CiAgICAgICAgICAgICBpZiAoc2VsZWN0aW9uVGV4dFNoYWRvdykKICAg
ICAgICAgICAgICAgICBpLnAtPmNsZWFyU2hhZG93KCk7CiAgICAgICAgIH0KSW5kZXg6IHJlbmRl
cmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5nL1JlbmRlckltYWdl
LmNwcAkocmV2aXNpb24gMTYyNjApCisrKyByZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNTYsOSArMjU2LDkgQEAgdm9pZCBSZW5kZXJJbWFnZTo6cGFpbnQoUGFp
bnRJbmZvJiBpLCBpbgogICAgICAgICAgICAgICAgIGludCB0ZXh0V2lkdGggPSBmb250LndpZHRo
KHRleHRSdW4pOwogICAgICAgICAgICAgICAgIGlmIChlcnJvclBpY3R1cmVEcmF3bikgewogICAg
ICAgICAgICAgICAgICAgICBpZiAodXNhYmxlV2lkdGggPj0gdGV4dFdpZHRoICYmIGZvbnQuaGVp
Z2h0KCkgPD0gaW1hZ2VZKQotICAgICAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4
dFJ1biwgSW50UG9pbnQoYXgsIGF5ICsgYXNjZW50KSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpLCBpc1ByaW50
aW5nKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHVzYWJsZVdpZHRoID49IHRleHRXaWR0
aCAmJiBjSGVpZ2h0ID49IGZvbnQuaGVpZ2h0KCkpCi0gICAgICAgICAgICAgICAgICAgIHAtPmRy
YXdUZXh0KHRleHRSdW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCkpOworICAgICAgICAgICAg
ICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpLCBp
c1ByaW50aW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobV9j
YWNoZWRJbWFnZSkgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTYyNjAp
CisrKyByZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIz
MSwxNyArMjMxLDE4IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAK
ICAgICAgICAgaWYgKCFtX2l0ZW0uaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250
JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2l0ZW0udW5pY29kZSgpKSwgbV9pdGVtLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGJvb2wgaXNQcmludGluZyA9IHZpZXcoKS0+cHJpbnRpbmdN
b2RlKCk7CiAgICAgICAgICAgICBpZiAoc3R5bGUoKS0+ZGlyZWN0aW9uKCkgPT0gTFRSKSB7CiAg
ICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53aWR0aCh0ZXh0UnVuKTsKLSAgICAgICAg
ICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBtYXJrZXIubG9jYXRpb24oKSk7CisgICAgICAg
ICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFya2VyLmxvY2F0aW9uKCksIGlzUHJpbnRp
bmcpOwogICAgICAgICAgICAgICAgIFVDaGFyIHBlcmlvZFNwYWNlWzJdID0geyAnLicsICcgJyB9
OwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KFRleHRSdW4ocGVyaW9kU3BhY2UsIDIpLCBt
YXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAgICAgICBw
LT5kcmF3VGV4dChUZXh0UnVuKHBlcmlvZFNwYWNlLCAyKSwgbWFya2VyLmxvY2F0aW9uKCkgKyBJ
bnRTaXplKHdpZHRoLCAwKSwgaXNQcmludGluZyk7CiAgICAgICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgICAgIFVDaGFyIHNwYWNlUGVyaW9kWzJdID0geyAnICcsICcuJyB9OwogICAgICAg
ICAgICAgICAgIFRleHRSdW4gc3BhY2VQZXJpb2RSdW4oc3BhY2VQZXJpb2QsIDIpOwogICAgICAg
ICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgoc3BhY2VQZXJpb2RSdW4pOwotICAgICAg
ICAgICAgICAgIHAtPmRyYXdUZXh0KHNwYWNlUGVyaW9kUnVuLCBtYXJrZXIubG9jYXRpb24oKSk7
Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFya2VyLmxvY2F0aW9uKCkg
KyBJbnRTaXplKHdpZHRoLCAwKSk7CisgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoc3BhY2VQ
ZXJpb2RSdW4sIG1hcmtlci5sb2NhdGlvbigpLCBpc1ByaW50aW5nKTsKKyAgICAgICAgICAgICAg
ICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgs
IDApLCBpc1ByaW50aW5nKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5kZXg6
IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSByZW5kZXJpbmcvUmVu
ZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE2MjYwKQorKysgcmVuZGVyaW5nL1JlbmRlclRoZW1l
TWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywzMSBAQAogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKKy8vIFRoaXMgY2xhc3MgYXV0b21hdGljYWxseSBzYXZlcyBhbmQgcmVzdG9yZXMg
dGhlIGN1cnJlbnQgTlNHcmFwaGljc0NvbnRleHQgZm9yCisvLyBmdW5jdGlvbnMgd2hpY2ggY2Fs
bCBvdXQgaW50byBBcHBLaXQgYW5kIHJlbHkgb24gdGhlIGN1cnJlbnRDb250ZXh0IGJlaW5nIHNl
dAorY2xhc3MgV2ViQ29yZU5TR3JhcGhpY3NDb250ZXh0QnJpZGdlIHsKK3B1YmxpYzoKKyAgICBX
ZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2UoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0Nv
bnRleHQpCisgICAgeworICAgICAgICBpZiAoZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRl
eHQoKSA9PSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRd
KSB7CisgICAgICAgICAgICBtX3NhdmVkTlNHcmFwaGljc0NvbnRleHQgPSAwOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIAorICAgICAgICBtX3NhdmVkTlNHcmFwaGlj
c0NvbnRleHQgPSBbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSByZXRhaW5dOwor
ICAgICAgICBOU0dyYXBoaWNzQ29udGV4dCogbmV3Q29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHRXaXRoR3JhcGhpY3NQb3J0OmdyYXBoaWNzQ29udGV4dC0+cGxhdGZv
cm1Db250ZXh0KCkgZmxpcHBlZDpZRVNdOworICAgICAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0
Q3VycmVudENvbnRleHQ6bmV3Q29udGV4dF07CisgICAgfQorICAgIH5XZWJDb3JlTlNHcmFwaGlj
c0NvbnRleHRCcmlkZ2UoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZWROU0dyYXBoaWNzQ29u
dGV4dCkKKyAgICAgICAgICAgIFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpt
X3NhdmVkTlNHcmFwaGljc0NvbnRleHRdOworICAgIH0KKworcHJpdmF0ZToKKyAgICBOU0dyYXBo
aWNzQ29udGV4dCogbV9zYXZlZE5TR3JhcGhpY3NDb250ZXh0OworfTsKKwogZW51bSB7CiAgICAg
dG9wTWFyZ2luLAogICAgIHJpZ2h0TWFyZ2luLApAQCAtNTkyLDEwICs2MTcsOSBAQCB2b2lkIFJl
bmRlclRoZW1lTWFjOjpzZXRCdXR0b25DZWxsU3RhdGUoCiAgICAgdXBkYXRlRm9jdXNlZFN0YXRl
KGJ1dHRvbiwgbyk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50QnV0dG9uKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0
JiByKQoteyAgICAKLSAgICAvLyBGSVhNRTogSWdub3JlcyB0aGUgR3JhcGhpY3NDb250ZXh0IGlu
IHRoZSBQYWludEluZm8gYW5kIGFsd2F5cyBkcmF3cyBpbnRvIHRoZSBjdXJyZW50Ci0gICAgLy8g
TlNHcmFwaGljc0NvbnRleHQgaW5zdGVhZC4KK2Jvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50QnV0
dG9uKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50
SW5mbywgY29uc3QgSW50UmVjdCYgcikKK3sKKyAgICBXZWJDb3JlTlNHcmFwaGljc0NvbnRleHRC
cmlkZ2UgaGFjayhwYWludEluZm8ucCk7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFu
ZCBoZWlnaHQgbmVlZGVkIGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3Ig
cGFpbnRpbmcuCiAgICAgc2V0QnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwpAQCAtNjE2LDE2ICs2NDAs
MTkgQEAgYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRCdXR0b24oUmVuZGVyTwogICAgICAgICBp
bmZsYXRlZFJlY3QgPSBpbmZsYXRlUmVjdChpbmZsYXRlZFJlY3QsIHNpemUsIGJ1dHRvbk1hcmdp
bnMoKSk7CiAgICAgfQogCisgICAgLy8gRklYTUU6IFRoaXMgY2FsbCBpZ25vcmVzIHRoZSBHcmFw
aGljc0NvbnRleHQgaW4gdGhlIFBhaW50SW5mbyBhbmQgYWx3YXlzIGRyYXdzIGludG8gdGhlIGN1
cnJlbnQKKyAgICAvLyBOU0dyYXBoaWNzQ29udGV4dCBpbnN0ZWFkLiAgKEhlbmNlIHRoZSBuZWVk
ZWQgV2ViQ29yZU5TR3JhcGhpY3NDb250ZXh0QnJpZGdlIGFib3ZlLikKICAgICBbYnV0dG9uIGRy
YXdXaXRoRnJhbWU6TlNSZWN0KGluZmxhdGVkUmVjdCkgaW5WaWV3Om8tPnZpZXcoKS0+ZnJhbWVW
aWV3KCktPmdldERvY3VtZW50VmlldygpXTsKICAgICBbYnV0dG9uIHNldENvbnRyb2xWaWV3Om5p
bF07Ci0KKyAgICAKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6
OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWlu
dEluZm8mLCBjb25zdCBJbnRSZWN0JiByKQorYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0
RmllbGQoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFp
bnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQogewotICAgIC8vIEZJWE1FOiBJZ25vcmVzIHRoZSBH
cmFwaGljc0NvbnRleHQgaW4gdGhlIFBhaW50SW5mbyBhbmQgYWx3YXlzIGRyYXdzIGludG8gdGhl
IGN1cnJlbnQKLSAgICAvLyBOU0dyYXBoaWNzQ29udGV4dCBpbnN0ZWFkLgorICAgIFdlYkNvcmVO
U0dyYXBoaWNzQ29udGV4dEJyaWRnZSBoYWNrKHBhaW50SW5mby5wKTsKKyAgICAvLyBGSVhNRTog
VGhpcyBjYWxsIGlnbm9yZXMgdGhlIEdyYXBoaWNzQ29udGV4dCBpbiB0aGUgUGFpbnRJbmZvIGFu
ZCBhbHdheXMgZHJhd3MgaW50byB0aGUgY3VycmVudAorICAgIC8vIE5TR3JhcGhpY3NDb250ZXh0
IGluc3RlYWQuICAoSGVuY2UgdGhlIG5lZWRlZCBXZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlk
Z2UgYWJvdmUuKQogICAgIHdrRHJhd0JlemVsZWRUZXh0RmllbGRDZWxsKHIsIGlzRW5hYmxlZChv
KSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOwogICAgIHJldHVybiBmYWxzZTsKIH0KQEAgLTYz
NywxMCArNjY0LDExIEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OmFkanVzdFRleHRGaWVsZFN0eWwK
ICAgICAgICAgYWRkSW50cmluc2ljTWFyZ2lucyhzdHlsZSwgTlNSZWd1bGFyQ29udHJvbFNpemUp
OwogfQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCog
bywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mLCBjb25zdCBJbnRSZWN0JiByKQorYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYShSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJl
bmRlck9iamVjdDo6UGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHIpCiB7Ci0g
ICAgLy8gRklYTUU6IElnbm9yZXMgdGhlIEdyYXBoaWNzQ29udGV4dCBpbiB0aGUgUGFpbnRJbmZv
IGFuZCBhbHdheXMgZHJhd3MgaW50byB0aGUgY3VycmVudAotICAgIC8vIE5TR3JhcGhpY3NDb250
ZXh0IGluc3RlYWQuCisgICAgV2ViQ29yZU5TR3JhcGhpY3NDb250ZXh0QnJpZGdlIGhhY2socGFp
bnRJbmZvLnApOworICAgIC8vIEZJWE1FOiBUaGlzIGNhbGwgaWdub3JlcyB0aGUgR3JhcGhpY3ND
b250ZXh0IGluIHRoZSBQYWludEluZm8gYW5kIGFsd2F5cyBkcmF3cyBpbnRvIHRoZSBjdXJyZW50
CisgICAgLy8gTlNHcmFwaGljc0NvbnRleHQgaW5zdGVhZC4gIChIZW5jZSB0aGUgbmVlZGVkIFdl
YkNvcmVOU0dyYXBoaWNzQ29udGV4dEJyaWRnZSBhYm92ZS4pCiAgICAgd2tEcmF3QmV6ZWxlZFRl
eHRBcmVhKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0K
</data>
<flag name="review"
          id="3356"
          type_id="1"
          status="-"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10470</attachid>
            <date>2006-09-09 04:48:20 -0700</date>
            <delta_ts>2006-09-09 05:04:03 -0700</delta_ts>
            <desc>Addressing darin&apos;s concerns</desc>
            <filename>nsgraphics-remove.patch</filename>
            <type>text/plain</type>
            <size>35508</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiAxNjI3MykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTcgQEAKKzIwMDYtMDktMDggIEVyaWMgU2VpZGVsICA8ZXJpY0Blc2VpZGVsLmNv
bT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAg
ICAgIFJlbW92ZSBhIGJ1bmNoIG1vcmUgTlNHcmFwaGljc0NvbnRleHQgcmVsYXRlZCBjb2RlLgor
ICAgICAgICBBZGQgYSBXZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2UgdG8gc2ltcGxpZnkg
bWV0aG9kcyB3aGljaCBuZWVkIHRvIGNhbGwgdXAgaW50byBBcHBLaXQgY29udHJvbHMgKGFuZCB0
aHVzIGRlcGVuZCBvbiB0aGUgW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBiZWlu
ZyBzZXQgY29ycmVjdGx5KQorICAgICAgICBBZGQgYW4gImlzUHJpbnRpbmciIGZsYWcgdG8gbWFu
eSBvZiB0aGUgdGV4dCBkcmF3aW5nIGZ1bmN0aW9ucyBpbiBvcmRlciB0byBhdm9pZCB0aGUgbmVl
ZCBmb3IgYSBHcmFwaGljc0NvbnRleHQ6OmlzUHJpbnRpbmcoKSBmdW5jdGlvbi4KKworICAgICAg
ICBObyB0ZXN0cyB3ZXJlIGhhcm1lZCBpbiB0aGUgbWFraW5nIG9mIHRoaXMgcGF0Y2guCisKKyAg
ICAgICAgKiBicmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2Vi
Q29yZUZyYW1lQnJpZGdlIGRyYXdSZWN0Ol0pOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lmg6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6Y2dDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OktS
ZW5kZXJpbmdEZXZpY2VRdWFydHo6OmlzQnVmZmVyZWQpOgorICAgICAgICAqIGtjYW52YXMvZGV2
aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tOgorICAgICAgICAoV2ViQ29yZTo6
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVh
cnR6KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojp+
S1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHopOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNl
L3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1tOgorICAgICAgICAqIHBsYXRmb3JtL0ZvbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1NpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Rm9udDo6ZHJhd1RleHQpOgorICAgICAgICAqIHBsYXRmb3JtL0ZvbnQuaDoKKyAgICAgICAg
KiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3VGV4dCk6CisgICAgICAgICogcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0
Lmg6CisgICAgICAgICogcGxhdGZvcm0vbWFjL0ZpbGVCdXR0b25NYWMubW06CisgICAgICAgICgt
W1dlYkZpbGVDaG9vc2VyQnV0dG9uIGRyYXdSZWN0Ol0pOgorICAgICAgICAqIHBsYXRmb3JtL21h
Yy9Gb250TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6QVRTVUxheW91dFBhcmFtZXRlcnM6OkFU
U1VMYXlvdXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkFUU1VMYXlvdXRQYXJhbWV0
ZXJzOjppbml0aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhp
Y3NDb250ZXh0OjpkcmF3TGluZUZvck1pc3NwZWxsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
YWMvTGlzdEJveE1hYy5tbToKKyAgICAgICAgKC1bV2ViQ29yZVRhYmxlVmlldyBkcmF3Um93OmNs
aXBSZWN0Ol0pOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1t
OgorICAgICAgICAoV2ViQ29yZURyYXdUZXh0QXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5n
L0VsbGlwc2lzQm94LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6
CisgICAgICAgICogcmVuZGVyaW5nL0lubGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SW5saW5lVGV4dEJveDo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFn
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJJbWFnZTo6cGFpbnQpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxpc3RNYXJrZXI6OnBhaW50KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMu
bW06CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2U6Oldl
YkNvcmVOU0dyYXBoaWNzQ29udGV4dEJyaWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3Jl
TlNHcmFwaGljc0NvbnRleHRCcmlkZ2U6On5XZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVNYWM6OnBhaW50QnV0dG9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lTWFjOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6cGFpbnRUZXh0QXJlYSk6CisKIDIwMDYtMDktMDggIEVy
aWMgU2VpZGVsICA8ZXJpY0Blc2VpZGVsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBkYXJp
bi4KSW5kZXg6IFdlYkNvcmUvYnJpZGdlL21hYy9XZWJDb3JlRnJhbWVCcmlkZ2UubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9icmlkZ2UvbWFjL1dlYkNvcmVGcmFtZUJyaWRnZS5tbQkocmV2aXNp
b24gMTYyNzEpCisrKyBXZWJDb3JlL2JyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJpZGdlLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC05MjYsMTAgKzkyNiw5IEBAIHN0YXRpYyBCT09MIG5vd1ByaW50aW5n
KFdlYkNvcmVGcmFtZUJyaWQKIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0CiB7CiAgICAg
UGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCA9IHN0YXRpY19jYXN0PFBs
YXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0gZ3JhcGhpY3NQb3J0XSk7Ci0gICAgCiAgICAgQVNTRVJUKFtbTlNHcmFwaGljc0NvbnRleHQg
Y3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0pOwotICAgIAogICAgIEdyYXBoaWNzQ29udGV4dCBj
b250ZXh0KHBsYXRmb3JtQ29udGV4dCk7CisgICAgCiAgICAgW3NlbGYgX3NldHVwUm9vdEZvclBy
aW50aW5nOllFU107CiAgICAgCiAgICAgQVNTRVJUKCFtX2ZyYW1lLT5kb2N1bWVudCgpIHx8IG1f
ZnJhbWUtPmRvY3VtZW50KCktPnByaW50aW5nKCkgPT0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyZXIoKS0+dmlldygpLT5wcmludGluZ01vZGUoKSk7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMv
ZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9rY2FudmFzL2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oCShyZXZp
c2lvbiAxNjI3MSkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdE
ZXZpY2VRdWFydHouaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDYgQEAKIHR5cGVkZWYg
c3RydWN0IENHUmVjdCBDR1JlY3Q7CiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgKkNHQ29udGV4
dFJlZjsKIAotI2lmZGVmIF9fT0JKQ19fCi1AY2xhc3MgTlNHcmFwaGljc0NvbnRleHQ7Ci0jZWxz
ZQotY2xhc3MgTlNHcmFwaGljc0NvbnRleHQ7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBjbGFzcyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVy
aW5nRGV2aWNlQ29udGV4dCB7CkBAIC01NiwxMSArNTAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBHcmFwaGljc0NvbnRleHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogICAgIAogICAgIENH
Q29udGV4dFJlZiBjZ0NvbnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NnQ29udGV4dDsgfTsKLSAg
ICBOU0dyYXBoaWNzQ29udGV4dCAqbnNHcmFwaGljc0NvbnRleHQoKTsKICAgICAKIHByaXZhdGU6
CiAgICAgQ0dDb250ZXh0UmVmIG1fY2dDb250ZXh0OwotICAgIE5TR3JhcGhpY3NDb250ZXh0ICpt
X25zR3JhcGhpY3NDb250ZXh0OwogfTsKIAogY2xhc3MgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiA6
IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlIHsKQEAgLTY5LDkgKzYxLDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgfktSZW5kZXJpbmdEZXZpY2VRdWFydHooKSB7IH0KIAogICAgIHZpcnR1YWwgYm9v
bCBpc0J1ZmZlcmVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICB2aXJ0dWFs
IEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpwb3BDb250ZXh0KCk7Ci0gICAgdmlydHVhbCB2b2lk
IHB1c2hDb250ZXh0KEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0KTsKIAogICAgIC8v
IGNvbnRleHQgbWFuYWdlbWVudC4KICAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiAq
cXVhcnR6Q29udGV4dCgpIGNvbnN0OwpJbmRleDogV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFy
dHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2tjYW52
YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6Lm1tCShyZXZpc2lvbiAxNjI3
MSkKKysrIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFy
dHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUg
ewogCiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6S1JlbmRlcmluZ0RldmljZUNvbnRl
eHRRdWFydHooQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgOiBtX2NnQ29udGV4dChDR0NvbnRl
eHRSZXRhaW4oY29udGV4dCkpCi0gICAgLCBtX25zR3JhcGhpY3NDb250ZXh0KDApCiB7CiAgICAg
QVNTRVJUKG1fY2dDb250ZXh0KTsKIH0KQEAgLTUyLDcgKzUxLDYgQEAgS1JlbmRlcmluZ0Rldmlj
ZUNvbnRleHRRdWFydHo6OktSZW5kZXJpbgogS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6
On5LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eigpCiB7CiAgICAgQ0dDb250ZXh0UmVsZWFz
ZShtX2NnQ29udGV4dCk7Ci0gICAgSGFyZFJlbGVhc2UobV9uc0dyYXBoaWNzQ29udGV4dCk7CiB9
CiAKIEFmZmluZVRyYW5zZm9ybSBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6Y29uY2F0
Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgd29ybGRNYXRyaXgpCkBAIC03OCwxMyArNzYsNiBA
QCB2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6OjphZGRQCiAgICAgQ0dDb250ZXh0
QWRkUGF0aChtX2NnQ29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgoKSk7CiB9CiAKLU5TR3JhcGhp
Y3NDb250ZXh0ICpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6bnNHcmFwaGljc0NvbnRl
eHQoKQotewotICAgIGlmICghbV9uc0dyYXBoaWNzQ29udGV4dCAmJiBtX2NnQ29udGV4dCkKLSAg
ICAgICAgbV9uc0dyYXBoaWNzQ29udGV4dCA9IEhhcmRSZXRhaW4oW05TR3JhcGhpY3NDb250ZXh0
IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6bV9jZ0NvbnRleHQgZmxpcHBlZDpZRVNd
KTsKLSAgICByZXR1cm4gbV9uc0dyYXBoaWNzQ29udGV4dDsKLX0KLQogR3JhcGhpY3NDb250ZXh0
KiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6Y3JlYXRlR3JhcGhpY3NDb250ZXh0KCkK
IHsKICAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dChtX2NnQ29udGV4dCk7CkBAIC0xMjgs
MjMgKzExOSw2IEBAIENHQ29udGV4dFJlZiBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpjdXIKICAg
ICByZXR1cm4gcXVhcnR6Q29udGV4dCgpLT5jZ0NvbnRleHQoKTsKIH0KIAotdm9pZCBLUmVuZGVy
aW5nRGV2aWNlUXVhcnR6OjpwdXNoQ29udGV4dChLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqY29u
dGV4dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgS1JlbmRlcmluZ0RldmljZTo6cHVz
aENvbnRleHQoY29udGV4dCk7Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0
YXRlXTsKLSAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVudENvbnRleHQ6cXVhcnR6Q29u
dGV4dCgpLT5uc0dyYXBoaWNzQ29udGV4dCgpXTsKLSAgICBBU1NFUlQocXVhcnR6Q29udGV4dCgp
LT5uc0dyYXBoaWNzQ29udGV4dCgpID09IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4
dF0pOwotfQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqS1JlbmRlcmluZ0RldmljZVF1YXJ0
ejo6cG9wQ29udGV4dCgpCi17Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGlj
c1N0YXRlXTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqcG9wcGVkQ29udGV4dCA9IEtS
ZW5kZXJpbmdEZXZpY2U6OnBvcENvbnRleHQoKTsKLSAgICBBU1NFUlQoIWN1cnJlbnRDb250ZXh0
KCkgfHwgY3VycmVudENHQ29udGV4dCgpID09IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENv
bnRleHRdIGdyYXBoaWNzUG9ydF0pOwotICAgIHJldHVybiBwb3BwZWRDb250ZXh0OwotfQotCiBL
UmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqS1JlbmRlcmluZ0RldmljZVF1YXJ0ejo6Y29udGV4dEZv
ckltYWdlKEtDYW52YXNJbWFnZSAqaW1hZ2UpIGNvbnN0CiB7CiAgICAgS0NhbnZhc0ltYWdlUXVh
cnR6ICpxdWFydHpJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJbWFnZVF1YXJ0eiAqPihpbWFn
ZSk7CkluZGV4OiBXZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUva2NhbnZhcy9kZXZpY2UvcXVhcnR6L1F1YXJ0elN1cHBv
cnQubW0JKHJldmlzaW9uIDE2MjcxKQorKysgV2ViQ29yZS9rY2FudmFzL2RldmljZS9xdWFydHov
UXVhcnR6U3VwcG9ydC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsNDYgKzQyLDYgQEAKIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBkZWJ1Z0R1bXBDR0ltYWdl
VG9GaWxlKE5TU3RyaW5nICpmaWxlbmFtZSwgQ0dJbWFnZVJlZiBpbWFnZSwgaW50IHdpZHRoLCBp
bnQgaGVpZ2h0KQotewotICAgIE5TSW1hZ2UgKmZpbGVJbWFnZSA9IFtbTlNJbWFnZSBhbGxvY10g
aW5pdFdpdGhTaXplOk5TTWFrZVNpemUod2lkdGgsIGhlaWdodCldOwotICAgIFtmaWxlSW1hZ2Ug
bG9ja0ZvY3VzXTsKLSAgICBDR0NvbnRleHRSZWYgZmlsZUltYWdlQ29udGV4dCA9IChDR0NvbnRl
eHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsK
LSAgICBDR0NvbnRleHREcmF3SW1hZ2UoZmlsZUltYWdlQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0
KGZpbGVJbWFnZUNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCi0gICAgICAgIEZsb2F0UmVj
dCgwLCAwLCB3aWR0aCwgaGVpZ2h0KSksIGltYWdlKTsgCi0gICAgW2ZpbGVJbWFnZSB1bmxvY2tG
b2N1c107Ci0gICAgTlNEYXRhICp0aWZmID0gW2ZpbGVJbWFnZSBUSUZGUmVwcmVzZW50YXRpb25d
OwotICAgIFt0aWZmIHdyaXRlVG9GaWxlOmZpbGVuYW1lIGF0b21pY2FsbHk6WUVTXTsKLSAgICBb
ZmlsZUltYWdlIHJlbGVhc2VdOwotfQotCi12b2lkIGRlYnVnRHVtcENHTGF5ZXJUb0ZpbGUoTlNT
dHJpbmcgKmZpbGVuYW1lLCBDR0xheWVyUmVmIGxheWVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQp
Ci17Ci0gICAgTlNJbWFnZSAqZmlsZUltYWdlID0gW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNp
emU6TlNNYWtlU2l6ZSh3aWR0aCwgaGVpZ2h0KV07Ci0gICAgW2ZpbGVJbWFnZSBsb2NrRm9jdXNd
OwotICAgIENHQ29udGV4dFJlZiBmaWxlSW1hZ2VDb250ZXh0ID0gKENHQ29udGV4dFJlZilbW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwotICAgIENHQ29u
dGV4dERyYXdMYXllckF0UG9pbnQoZmlsZUltYWdlQ29udGV4dCwgQ0dQb2ludE1ha2UoMCwgMCks
IGxheWVyKTsgCi0gICAgW2ZpbGVJbWFnZSB1bmxvY2tGb2N1c107Ci0gICAgTlNEYXRhICp0aWZm
ID0gW2ZpbGVJbWFnZSBUSUZGUmVwcmVzZW50YXRpb25dOwotICAgIFt0aWZmIHdyaXRlVG9GaWxl
OmZpbGVuYW1lIGF0b21pY2FsbHk6WUVTXTsKLSAgICBbZmlsZUltYWdlIHJlbGVhc2VdOwotfQot
Ci12b2lkIGRlYnVnRHVtcENJSW1hZ2VUb0ZpbGUoTlNTdHJpbmcgKmZpbGVuYW1lLCBDSUltYWdl
ICpjaUltYWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgTlNJbWFnZSAqZmlsZUlt
YWdlID0gW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6TlNNYWtlU2l6ZSh3aWR0aCwgaGVp
Z2h0KV07Ci0gICAgW2ZpbGVJbWFnZSBsb2NrRm9jdXNdOwotICAgIENHQ29udGV4dFJlZiBmaWxl
SW1hZ2VDb250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRD
b250ZXh0XSBncmFwaGljc1BvcnRdOwotICAgIENJQ29udGV4dCAqY2lDb250ZXh0ID0gW0NJQ29u
dGV4dCBjb250ZXh0V2l0aENHQ29udGV4dDpmaWxlSW1hZ2VDb250ZXh0IG9wdGlvbnM6bmlsXTsK
LSAgICBbY2lDb250ZXh0IGRyYXdJbWFnZTpjaUltYWdlIGF0UG9pbnQ6Q0dQb2ludFplcm8gZnJv
bVJlY3Q6Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07Ci0gICAgW2ZpbGVJbWFnZSB1
bmxvY2tGb2N1c107Ci0gICAgTlNEYXRhICp0aWZmID0gW2ZpbGVJbWFnZSBUSUZGUmVwcmVzZW50
YXRpb25dOwotICAgIFt0aWZmIHdyaXRlVG9GaWxlOmZpbGVuYW1lIGF0b21pY2FsbHk6WUVTXTsK
LSAgICBbZmlsZUltYWdlIHJlbGVhc2VdOwotfQotI2VuZGlmCi0KIENGU3RyaW5nUmVmIENGU3Ry
aW5nRnJvbUNHQWZmaW5lVHJhbnNmb3JtKENHQWZmaW5lVHJhbnNmb3JtIHQpCiB7CiAgICAgcmV0
dXJuIENGU3RyaW5nQ3JlYXRlV2l0aEZvcm1hdCgwLCAwLCBDRlNUUigiYTogJWYgYjogJWYgYzog
JWYgZDogJWYgdHg6ICVmIHR5OiAlZiIpLCB0LmEsIHQuYiwgdC5jLCB0LmQsIHQudHgsIHQudHkp
OwpJbmRleDogV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3Jl
L3BsYXRmb3JtL0ZvbnQuY3BwCShyZXZpc2lvbiAxNjI3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0v
Rm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwMSw3ICs1MDEsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4CiAgICAgd2hpbGUgKG5leHRHbHlwaCA8IGdseXBo
QnVmZmVyLnNpemUoKSkgewogICAgICAgICBjb25zdCBGb250RGF0YSogbmV4dEZvbnREYXRhID0g
Z2x5cGhCdWZmZXIuZm9udERhdGFBdChuZXh0R2x5cGgpOwogICAgICAgICBpZiAobmV4dEZvbnRE
YXRhICE9IGZvbnREYXRhKSB7Ci0gICAgICAgICAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnRE
YXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBv
aW50KTsKKyAgICAgICAgICAgIGRyYXdHbHlwaHMoY29udGV4dCwgZm9udERhdGEsIGdseXBoQnVm
ZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFzdEZyb20sIHN0YXJ0UG9pbnQsIHN0eWxlLnVz
ZVByaW50ZXJGb250cygpKTsKICAgICAgICAgICAgIGxhc3RGcm9tID0gbmV4dEdseXBoOwogICAg
ICAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERhdGE7CiAgICAgICAgICAgICBzdGFydFBvaW50
LnNldFgobmV4dFgpOwpAQCAtNTA5LDcgKzUwOSw3IEBAIHZvaWQgRm9udDo6ZHJhd1NpbXBsZVRl
eHQoR3JhcGhpY3NDb250ZXgKICAgICAgICAgbmV4dFggKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0
KG5leHRHbHlwaCk7CiAgICAgICAgIG5leHRHbHlwaCsrOwogICAgIH0KLSAgICBkcmF3R2x5cGhz
KGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxh
c3RGcm9tLCBzdGFydFBvaW50KTsKKyAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBn
bHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50LCBz
dHlsZS51c2VQcmludGVyRm9udHMoKSk7CiB9CiAKIHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhp
Y3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYg
c3R5bGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdApJbmRleDogV2ViQ29yZS9wbGF0
Zm9ybS9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmgJKHJldmlz
aW9uIDE2MjcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAg
LTE1NCw3ICsxNTQsNyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgZXZlbnR1
YWxseSBiZSBjcm9zcy1wbGF0Zm9ybSwgYnV0IHdlIHdhbnQgdG8ga2VlcCBXaW5kb3dzIGNvbXBp
bGluZyBmb3Igbm93LgogICAgIGJvb2wgY2FuVXNlR2x5cGhDYWNoZShjb25zdCBUZXh0UnVuJikg
Y29uc3Q7CiAgICAgdm9pZCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25zdCBU
ZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0OwotICAg
IHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250RGF0YSosIGNvbnN0
IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0
OworICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250RGF0YSos
IGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYs
IGJvb2wgdXNlUHJpbnRlckZvbnQpIGNvbnN0OwogICAgIHZvaWQgZHJhd0NvbXBsZXhUZXh0KEdy
YXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25zdCBG
bG9hdFBvaW50JikgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQoY29u
c3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0dXRl
Rm9udERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHN0YXJ0
WCwgR2x5cGhCdWZmZXIqKSBjb25zdDsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vVGV4dFN0eWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9UZXh0U3R5bGUuaAkocmV2aXNpb24g
MTYyNzEpCisrKyBXZWJDb3JlL3BsYXRmb3JtL1RleHRTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yNiw3ICsyNiw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIFRleHRTdHlsZSB7CiBw
dWJsaWM6CiAgICAgVGV4dFN0eWxlKGludCB0YWJXaWR0aCA9IDAsIGludCB4cG9zID0gMCwgaW50
IHBhZGRpbmcgPSAwLCBib29sIHJ0bCA9IGZhbHNlLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUg
PSBmYWxzZSwKLSAgICAgICAgICAgICAgYm9vbCBhcHBseVJ1blJvdW5kaW5nID0gdHJ1ZSwgYm9v
bCBhcHBseVdvcmRSb3VuZGluZyA9IHRydWUsIGJvb2wgYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24g
PSB0cnVlKQorICAgICAgICAgICAgICBib29sIGFwcGx5UnVuUm91bmRpbmcgPSB0cnVlLCBib29s
IGFwcGx5V29yZFJvdW5kaW5nID0gdHJ1ZSwgYm9vbCBhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbiA9
IHRydWUsIGJvb2wgdXNlUHJpbnRlckZvbnRzID0gZmFsc2UpCiAgICAgICAgIDogbV90YWJXaWR0
aCh0YWJXaWR0aCkKICAgICAgICAgLCBtX3hwb3MoeHBvcykKICAgICAgICAgLCBtX3BhZGRpbmco
cGFkZGluZykKQEAgLTM1LDYgKzM1LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fYXBwbHlSdW5S
b3VuZGluZyhhcHBseVJ1blJvdW5kaW5nKQogICAgICAgICAsIG1fYXBwbHlXb3JkUm91bmRpbmco
YXBwbHlXb3JkUm91bmRpbmcpCiAgICAgICAgICwgbV9hdHRlbXB0Rm9udFN1YnN0aXR1dGlvbihh
dHRlbXB0Rm9udFN1YnN0aXR1dGlvbikKKyAgICAgICAgLCBtX3VzZVByaW50ZXJGb250cyh1c2VQ
cmludGVyRm9udHMpCiAgICAgewogICAgIH0KIApAQCAtNDcsOSArNDgsMTEgQEAgcHVibGljOgog
ICAgIGJvb2wgYXBwbHlSdW5Sb3VuZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlSdW5Sb3Vu
ZGluZzsgfQogICAgIGJvb2wgYXBwbHlXb3JkUm91bmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2Fw
cGx5V29yZFJvdW5kaW5nOyB9CiAgICAgYm9vbCBhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbigpIGNv
bnN0IHsgcmV0dXJuIG1fYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb247IH0KKyAgICBib29sIHVzZVBy
aW50ZXJGb250cygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlUHJpbnRlckZvbnRzOyB9CiAKICAgICB2
b2lkIGRpc2FibGVSb3VuZGluZ0hhY2tzKCkgeyBtX2FwcGx5UnVuUm91bmRpbmcgPSBtX2FwcGx5
V29yZFJvdW5kaW5nID0gZmFsc2U7IH0KICAgICB2b2lkIHNldFJUTChib29sIGIpIHsgbV9ydGwg
PSBiOyB9CisgICAgdm9pZCBzZXRVc2VQcmludGVyRm9udHMoYm9vbCBiKSB7IG1fdXNlUHJpbnRl
ckZvbnRzID0gYjsgfQogICAgIAogcHJpdmF0ZToKICAgICBpbnQgbV90YWJXaWR0aDsKQEAgLTYw
LDYgKzYzLDcgQEAgcHJpdmF0ZToKICAgICBib29sIG1fYXBwbHlSdW5Sb3VuZGluZzsKICAgICBi
b29sIG1fYXBwbHlXb3JkUm91bmRpbmc7CiAgICAgYm9vbCBtX2F0dGVtcHRGb250U3Vic3RpdHV0
aW9uOworICAgIGJvb2wgbV91c2VQcmludGVyRm9udHM7CiB9OwogCiB9CkluZGV4OiBXZWJDb3Jl
L3BsYXRmb3JtL21hYy9Gb250TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
bWFjL0ZvbnRNYWMubW0JKHJldmlzaW9uIDE2MjcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
Rm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsMTEgKzYyLDE3IEBAIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIHN0cnVjdCBBVFNVTGF5b3V0UGFyYW1ldGVycwogewogICAgIEFUU1VMYXlvdXRQ
YXJhbWV0ZXJzKGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxlJiBzdHlsZSkKLSAg
ICA6bV9ydW4ocnVuKSwgbV9zdHlsZShzdHlsZSksCi0gICAgIG1fZm9udCgwKSwgbV9mb250cygw
KSwgbV9jaGFyQnVmZmVyKDApLCBtX2hhc1N5bnRoZXRpY0JvbGQoZmFsc2UpLCBtX3N5bnRoZXRp
Y0JvbGRQYXNzKGZhbHNlKSwgbV9wYWRQZXJTcGFjZSgwKQorICAgICAgICA6IG1fcnVuKHJ1bikK
KyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgICAgICAsIG1fZm9udCgwKQorICAgICAgICAs
IG1fZm9udHMoMCkKKyAgICAgICAgLCBtX2NoYXJCdWZmZXIoMCkKKyAgICAgICAgLCBtX2hhc1N5
bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50aGV0aWNCb2xkUGFzcyhmYWxzZSkK
KyAgICAgICAgLCBtX3BhZFBlclNwYWNlKDApCiAgICAge30KIAotICAgIHZvaWQgaW5pdGlhbGl6
ZShjb25zdCBGb250KiBmb250KTsKKyAgICB2b2lkIGluaXRpYWxpemUoY29uc3QgRm9udCosIGNv
bnN0IEdyYXBoaWNzQ29udGV4dCogPSAwKTsKIAogICAgIGNvbnN0IFRleHRSdW4mIG1fcnVuOwog
ICAgIGNvbnN0IFRleHRTdHlsZSYgbV9zdHlsZTsKQEAgLTI2MSwxOCArMjY3LDE2IEBAIHN0YXRp
YyBPU1N0YXR1cyBvdmVycmlkZUxheW91dE9wZXJhdGlvbigKICAgICByZXR1cm4gbm9FcnI7CiB9
CiAKLXZvaWQgQVRTVUxheW91dFBhcmFtZXRlcnM6OmluaXRpYWxpemUoY29uc3QgRm9udCogZm9u
dCkKK3ZvaWQgQVRTVUxheW91dFBhcmFtZXRlcnM6OmluaXRpYWxpemUoY29uc3QgRm9udCogZm9u
dCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQpCiB7CiAgICAgbV9mb250
ID0gZm9udDsKLQorICAgIAogICAgIC8vIEZJWE1FOiBJdCBpcyBwcm9iYWJseSBiZXN0IHRvIGFs
d2F5cyBhbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgUlRMLCBzaW5jZSBldmVuIGlmIGZvciB0aGlzCiAg
ICAgLy8gZm9udERhdGEgQVRTVU1pcnJvcnMgaXMgdHJ1ZSwgZm9yIGEgc3Vic3RpdHV0ZSBmb250
RGF0YSBpdCBtaWdodCBiZSBmYWxzZS4KICAgICBjb25zdCBGb250RGF0YSogZm9udERhdGEgPSBm
b250LT5wcmltYXJ5Rm9udCgpOwogICAgIG1fZm9udHMgPSBuZXcgY29uc3QgRm9udERhdGEqW21f
cnVuLmxlbmd0aCgpXTsKICAgICBtX2NoYXJCdWZmZXIgPSAoVUNoYXIqKSgoZm9udC0+aXNTbWFs
bENhcHMoKSB8fCAobV9zdHlsZS5ydGwoKSAmJiAhZm9udERhdGEtPm1fQVRTVU1pcnJvcnMpKSA/
IG5ldyBVQ2hhclttX3J1bi5sZW5ndGgoKV0gOiAwKTsKICAgICAKLSAgICAvLyBUaGUgb25seSBD
b2NvYSBjYWxscyBoZXJlIGFyZSB0byBOU0dyYXBoaWNzQ29udGV4dCwgd2hpY2ggZG9lcyBub3Qg
cmFpc2UgZXhjZXB0aW9ucy4KLQogICAgIEFUU1VUZXh0TGF5b3V0IGxheW91dDsKICAgICBPU1N0
YXR1cyBzdGF0dXM7CiAgICAgQVRTVUxheW91dE9wZXJhdGlvbk92ZXJyaWRlU3BlY2lmaWVyIG92
ZXJyaWRlU3BlY2lmaWVyOwpAQCAtMzA2LDcgKzMxMCwxMyBAQCB2b2lkIEFUU1VMYXlvdXRQYXJh
bWV0ZXJzOjppbml0aWFsaXplKGNvCiAgICAgbV9sYXlvdXQgPSBsYXlvdXQ7CiAgICAgQVRTVVNl
dFRleHRMYXlvdXRSZWZDb24obV9sYXlvdXQsIChVUmVmQ29uKXRoaXMpOwogCi0gICAgQ0dDb250
ZXh0UmVmIGNnQ29udGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKKyAgICAvLyBGSVhNRTogVGhlcmUgYXJlIGNlcnRh
aW4gdGltZXMgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHdoZW4gd2UgZG9uJ3QgaGF2ZSBh
Y2Nlc3MgdG8gYSBHcmFwaGljc0NvbnRleHQKKyAgICAvLyBtZWFzdXJpbmcgdGV4dCBydW5zIHdp
dGggZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0IGlzIG9uZSBleGFtcGxlLgorICAgIC8vIEFUU1VJ
IHJlcXVpcmVzIHRoYXQgd2UgcGFzcyBhIHZhbGlkIENHQ29udGV4dFJlZiB0byBpdCB3aGVuIHNw
ZWNpZnlpbmcga0FUU1VDR0NvbnRleHRUYWcgKGNyYXNoZXMgd2hlbiBwYXNzZWQgMCkKKyAgICAv
LyBBVFNVSSBkaXNhYmxlcyBzdWItcGl4ZWwgcmVuZGVyaW5nIGlmIGtBVFNVQ0dDb250ZXh0VGFn
IGlzIG5vdCBzcGVjaWZpZWQhICBTbyB3ZSdyZSBpbiBhIGJpbmQuCisgICAgLy8gU29tZXRpbWVz
IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0gbWF5IHJl
dHVybiB0aGUgd3JvbmcgKG9yIG5vISkgY29udGV4dC4gIE5vdGhpbmcgd2UgY2FuIGRvIGFib3V0
IGl0ICh5ZXQpLgorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBncmFwaGljc0NvbnRleHQg
PyBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogKENHQ29udGV4dFJlZilbW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOworICAgIAogICAg
IEFUU0xpbmVMYXlvdXRPcHRpb25zIGxpbmVMYXlvdXRPcHRpb25zID0ga0FUU0xpbmVLZWVwU3Bh
Y2VzT3V0T2ZNYXJnaW4gfCBrQVRTTGluZUhhc05vSGFuZ2VyczsKICAgICBCb29sZWFuIHJ0bCA9
IG1fc3R5bGUucnRsKCk7CiAgICAgb3ZlcnJpZGVTcGVjaWZpZXIub3BlcmF0aW9uU2VsZWN0b3Ig
PSBrQVRTVUxheW91dE9wZXJhdGlvblBvc3RMYXlvdXRBZGp1c3RtZW50OwpAQCAtNDY3LDE4ICs0
NzcsMTIgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3NDb250ZQogCiAgICAg
VGV4dFJ1biBhZGp1c3RlZFJ1biA9IHN0eWxlLmRpcmVjdGlvbmFsT3ZlcnJpZGUoKSA/IGFkZERp
cmVjdGlvbmFsT3ZlcnJpZGUocnVuLCBzdHlsZS5ydGwoKSkgOiBydW47CiAgICAgQVRTVUxheW91
dFBhcmFtZXRlcnMgcGFyYW1zKGFkanVzdGVkUnVuLCBzdHlsZSk7Ci0gICAgcGFyYW1zLmluaXRp
YWxpemUodGhpcyk7Ci0KLSAgICBbbnNDb2xvcihncmFwaGljc0NvbnRleHQtPnBlbigpLmNvbG9y
KCkpIHNldF07Ci0KKyAgICBwYXJhbXMuaW5pdGlhbGl6ZSh0aGlzLCBncmFwaGljc0NvbnRleHQp
OworICAgIAogICAgIC8vIEFUU1VJIGNhbid0IGRyYXcgYmV5b25kIC0zMjc2OCB0byArMzI3Njcg
c28gd2UgdHJhbnNsYXRlIHRoZSBDVE0gYW5kIHRlbGwgQVRTVUkgdG8gZHJhdyBhdCAoMCwgMCku
Ci0gICAgLy8gRklYTUU6IEN1dCB0aGUgZGVwZW5kZW5jeSBvbiBjdXJyZW50Q29udGV4dCBoZXJl
LgotICAgIE5TR3JhcGhpY3NDb250ZXh0ICpnQ29udGV4dCA9IFtOU0dyYXBoaWNzQ29udGV4dCBj
dXJyZW50Q29udGV4dF07Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAoQ0dDb250ZXh0UmVm
KVtnQ29udGV4dCBncmFwaGljc1BvcnRdOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gZ3Jh
cGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29s
b3JXaXRoQ29sb3IoY29udGV4dCwgY2dDb2xvcihncmFwaGljc0NvbnRleHQtPnBlbigpLmNvbG9y
KCkpKTsKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgcG9pbnQueCgpLCBwb2lu
dC55KCkpOwotICAgIGJvb2wgZmxpcHBlZCA9IFtnQ29udGV4dCBpc0ZsaXBwZWRdOwotICAgIGlm
ICghZmxpcHBlZCkKLSAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMS4wLCAtMS4w
KTsKICAgICBzdGF0dXMgPSBBVFNVRHJhd1RleHQocGFyYW1zLm1fbGF5b3V0LCBhZGp1c3RlZFJ1
bi5mcm9tKCksIHJ1bkxlbmd0aCwgMCwgMCk7CiAgICAgaWYgKHN0YXR1cyA9PSBub0VyciAmJiBw
YXJhbXMubV9oYXNTeW50aGV0aWNCb2xkKSB7CiAgICAgICAgIC8vIEZvcmNlIHJlbGF5b3V0IGZv
ciB0aGUgYm9sZCBwYXNzCkBAIC00ODYsMTQgKzQ5MCwxMSBAQCB2b2lkIEZvbnQ6OmRyYXdDb21w
bGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgICAgIHBhcmFtcy5tX3N5bnRoZXRpY0JvbGRQYXNz
ID0gdHJ1ZTsKICAgICAgICAgc3RhdHVzID0gQVRTVURyYXdUZXh0KHBhcmFtcy5tX2xheW91dCwg
YWRqdXN0ZWRSdW4uZnJvbSgpLCBydW5MZW5ndGgsIDAsIDApOwogICAgIH0KLSAgICBpZiAoIWZs
aXBwZWQpCi0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEuMCwgLTEuMCk7CiAg
ICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC1wb2ludC54KCksIC1wb2ludC55KCkp
OwogCi0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgIGlmIChzdGF0dXMgIT0gbm9FcnIp
CiAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gYnV0IHJlcG9ydCB0aGUgZXJyb3IgKGRldiBidWls
ZCBvbmx5KS4KICAgICAgICAgTE9HX0VSUk9SKCJBVFNVRHJhd1RleHQoKSBmYWlsZWQoJWQpIiwg
c3RhdHVzKTsKLSAgICB9CiAKICAgICBkaXNwb3NlQVRTVUxheW91dFBhcmFtZXRlcnMoJnBhcmFt
cyk7CiAgICAgCkBAIC01NTQsMTkgKzU1NSwxNiBAQCBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRp
b25Gb3JDb21wbGV4VGV4CiAgICAgcmV0dXJuIG9mZnNldCAtIGFkanVzdGVkUnVuLmZyb20oKTsK
IH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZy
b20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBjb25zdAordm9pZCBG
b250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29uc3QgRm9udERhdGEq
IGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZyb20sIGludCBudW1H
bHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHVzZVByaW50ZXJGb250KSBjb25z
dAogewotICAgIC8vIEZJWE1FOiBHcmFiIHRoZSBDR0NvbnRleHQgZnJvbSB0aGUgR3JhcGhpY3ND
b250ZXh0IGV2ZW50dWFsbHksIHdoZW4gd2UgaGF2ZSBtYWRlIHN1cmUgdG8gc2hpZWxkIGFnYWlu
c3QgZmxpcHBpbmcgY2F1c2VkIGJ5IGNhbGxzIGludG8gdXMKLSAgICAvLyBmcm9tIFNhZmFyaS4K
LSAgICBOU0dyYXBoaWNzQ29udGV4dCAqZ0NvbnRleHQgPSBbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHRdOwotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSAoQ0dDb250ZXh0UmVm
KVtnQ29udGV4dCBncmFwaGljc1BvcnRdOworICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBj
b250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGJvb2wgb3JpZ2luYWxTaG91bGRVc2VG
b250U21vb3RoaW5nID0gd2tDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250cyhjZ0NvbnRleHQp
OwogICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4dCwgV2ViQ29yZVNo
b3VsZFVzZUZvbnRTbW9vdGhpbmcoKSk7CiAgICAgCiAgICAgY29uc3QgRm9udFBsYXRmb3JtRGF0
YSYgcGxhdGZvcm1EYXRhID0gZm9udC0+cGxhdGZvcm1EYXRhKCk7CiAgICAgTlNGb250KiBkcmF3
Rm9udDsKLSAgICBpZiAoW2dDb250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSkgeworICAgIGlmICgh
dXNlUHJpbnRlckZvbnQpIHsKICAgICAgICAgZHJhd0ZvbnQgPSBbcGxhdGZvcm1EYXRhLmZvbnQg
c2NyZWVuRm9udF07CiAgICAgICAgIGlmIChkcmF3Rm9udCAhPSBwbGF0Zm9ybURhdGEuZm9udCkK
ICAgICAgICAgICAgIC8vIFdlIGFyZSBnZXR0aW5nIHRoaXMgaW4gdG9vIG1hbnkgcGxhY2VzICgz
NDA2NDExKTsgdXNlIEVSUk9SIHNvIGl0IG9ubHkgcHJpbnRzIG9uIGRlYnVnIHZlcnNpb25zIGZv
ciBub3cuIChXZSBzaG91bGQgZGVidWcgdGhpcyBhbHNvLCBldmVudHVhbGx5KS4KQEAgLTU4Mywx
MCArNTgxLDggQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogYwogCiAg
ICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAgIG1lbWNweSgmbWF0cml4LCBbZHJhd0Zv
bnQgbWF0cml4XSwgc2l6ZW9mKG1hdHJpeCkpOwotICAgIGlmIChbZ0NvbnRleHQgaXNGbGlwcGVk
XSkgewotICAgICAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKLSAgICAgICAgbWF0cml4LmQgPSAt
bWF0cml4LmQ7Ci0gICAgfQorICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOworICAgIG1hdHJpeC5k
ID0gLW1hdHJpeC5kOwogICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGljT2JsaXF1ZSkKICAg
ICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0FmZmluZVRy
YW5zZm9ybU1ha2UoMSwgMCwgLXRhbmYoU1lOVEhFVElDX09CTElRVUVfQU5HTEUgKiBhY29zZigw
KSAvIDkwKSwgMSwgMCwgMCkpOyAKICAgICBDR0NvbnRleHRTZXRUZXh0TWF0cml4KGNnQ29udGV4
dCwgbWF0cml4KTsKQEAgLTU5NCw3ICs1OTAsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3Jh
cGhpY3NDb250ZXh0KiBjCiAgICAgd2tTZXRDR0ZvbnRSZW5kZXJpbmdNb2RlKGNnQ29udGV4dCwg
ZHJhd0ZvbnQpOwogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4dCwgMS4wZik7CiAK
LSAgICBbbnNDb2xvcihjb250ZXh0LT5wZW4oKS5jb2xvcigpKSBzZXRdOworICAgIENHQ29udGV4
dFNldEZpbGxDb2xvcldpdGhDb2xvcihjZ0NvbnRleHQsIGNnQ29sb3IoY29udGV4dC0+cGVuKCku
Y29sb3IoKSkpOyAvLyBXZWJDb3JlIGV4cGVjdHMgdGV4dCB0byByZXNwZWN0IHRoZSBwZW4gY29s
b3IsIENHIGV4cGVjdHMgdGV4dCB0byB1c2UgZmlsbAogCiAgICAgQ0dDb250ZXh0U2V0VGV4dFBv
c2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwogICAgIENHQ29udGV4dFNo
b3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5nbHlwaHMoZnJvbSks
IGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwpJbmRleDogV2ViQ29yZS9w
bGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
cGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQkocmV2aXNpb24gMTYyNzEpCisrKyBX
ZWJDb3JlL3BsYXRmb3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkK
QEAgLTEzNCw2ICsxMzQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNz
cGVsCiAgICAgICAgICAgICB3aWR0aCAtPSB3aWR0aE1vZDsKICAgICB9CiAgICAgCisgICAgLy8g
RklYTUU6IFRoaXMgY29kZSBzaG91bGQgbm90IHVzZSBOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dAorICAgIC8vIEluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50IHdlIHdp
bGwgbmVlZCB0byB1c2UgQ0dQYXR0ZXJuIGluc3RlYWQgb2YgTlNDb2xvcgorICAgIAogICAgIC8v
IERyYXcgdW5kZXJsaW5lCiAgICAgTlNHcmFwaGljc0NvbnRleHQgKmN1cnJlbnRDb250ZXh0ID0g
W05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IChDR0NvbnRleHRSZWYpW2N1cnJlbnRDb250ZXh0IGdyYXBoaWNzUG9ydF07CkluZGV4
OiBXZWJDb3JlL3BsYXRmb3JtL21hYy9MaXN0Qm94TWFjLm1tCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvcGxhdGZvcm0vbWFjL0xpc3RCb3hNYWMubW0JKHJldmlzaW9uIDE2MjcxKQorKysgV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvTGlzdEJveE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjU5LDkgKzY1
OSwxMiBAQCBzdGF0aWMgQm9vbGVhbiBMaXN0Qm94VHlwZVNlbGVjdENhbGxiYWNrCiAKIC0gKHZv
aWQpZHJhd1JvdzooaW50KXJvdyBjbGlwUmVjdDooTlNSZWN0KWNsaXBSZWN0CiB7Ci0gICAgaWYg
KCFfYm94KSB7CisgICAgaWYgKCFfYm94KQogICAgICAgICByZXR1cm47Ci0gICAgfQorICAgIAor
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250
ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOworICAgIEFTU0VSVChbW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRdKTsKKyAgICBHcmFwaGljc0NvbnRl
eHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAgY29uc3QgTGlzdEJveEl0ZW0gJml0
ZW0gPSBfYm94LT5pdGVtQXRJbmRleChyb3cpOwogCkBAIC02ODAsMTEgKzY4MywxMSBAQCBzdGF0
aWMgQm9vbGVhbiBMaXN0Qm94VHlwZVNlbGVjdENhbGxiYWNrCiAKICAgICBib29sIGRlbGV0ZVJl
bmRlcmVyID0gZmFsc2U7CiAgICAgY29uc3QgRm9udCogcmVuZGVyZXI7Ci0gICAgaWYgKGlzU3lz
dGVtRm9udCkgewotICAgICAgICBSZW5kZXJXaWRnZXQgKmNsaWVudCA9IHN0YXRpY19jYXN0PFJl
bmRlcldpZGdldCAqPihbc2VsZiB3aWRnZXRdLT5jbGllbnQoKSk7Ci0gICAgICAgIGJvb2wgaXNQ
cmludGluZyA9IGNsaWVudC0+dmlldygpLT5wcmludGluZ01vZGUoKTsKKyAgICBSZW5kZXJXaWRn
ZXQgKmNsaWVudCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihbc2VsZiB3aWRnZXRdLT5j
bGllbnQoKSk7CisgICAgYm9vbCBpc1ByaW50aW5nID0gY2xpZW50LT52aWV3KCktPnByaW50aW5n
TW9kZSgpOworICAgIGlmIChpc1N5c3RlbUZvbnQpCiAgICAgICAgIHJlbmRlcmVyID0gKGl0ZW0u
dHlwZSA9PSBMaXN0Qm94R3JvdXBMYWJlbCkgPyBncm91cExhYmVsVGV4dFJlbmRlcmVyKGlzUHJp
bnRpbmcpIDogaXRlbVRleHRSZW5kZXJlcihpc1ByaW50aW5nKTsKLSAgICB9IGVsc2UgeworICAg
IGVsc2UgewogICAgICAgICBpZiAoaXRlbS50eXBlID09IExpc3RCb3hHcm91cExhYmVsKSB7CiAg
ICAgICAgICAgICBkZWxldGVSZW5kZXJlciA9IHRydWU7CiAgICAgICAgICAgICBGb250RGVzY3Jp
cHRpb24gYm9sZERlc2MgPSBfYm94LT5mb250KCkuZm9udERlc2NyaXB0aW9uKCk7CkBAIC02OTks
NiArNzAyLDcgQEAgc3RhdGljIEJvb2xlYW4gTGlzdEJveFR5cGVTZWxlY3RDYWxsYmFjawogICAg
IFdlYkNvcmU6OlRleHRTdHlsZSBzdHlsZTsKICAgICBzdHlsZS5zZXRSVEwocnRsKTsKICAgICBz
dHlsZS5kaXNhYmxlUm91bmRpbmdIYWNrcygpOworICAgIHN0eWxlLnNldFVzZVByaW50ZXJGb250
cyhpc1ByaW50aW5nKTsKIAogICAgIFRleHRSdW4gcnVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3Qg
VW5pQ2hhciAqPihpdGVtLnN0cmluZy51bmljb2RlKCkpLCBpdGVtLnN0cmluZy5sZW5ndGgoKSk7
CiAgICAgCkBAIC03MTAsOCArNzE0LDYgQEAgc3RhdGljIEJvb2xlYW4gTGlzdEJveFR5cGVTZWxl
Y3RDYWxsYmFjawogICAgICAgICBwb2ludC5zZXRYKE5TTWF4WChjZWxsUmVjdCkgLSByaWdodE1h
cmdpbiAtIHJlbmRlcmVyLT5mbG9hdFdpZHRoKHJ1biwgc3R5bGUpKTsKICAgICBwb2ludC5zZXRZ
KE5TTWF4WShjZWxsUmVjdCkgLSByZW5kZXJlci0+ZGVzY2VudCgpIC0gYm90dG9tTWFyZ2luKTsK
IAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwotICAgIEdyYXBoaWNzQ29udGV4
dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgQ0dGbG9hdCByZWQsIGdyZWVuLCBibHVl
LCBhbHBoYTsKICAgICBbW2NvbG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJH
QkNvbG9yU3BhY2VdIGdldFJlZDomcmVkIGdyZWVuOiZncmVlbiBibHVlOiZibHVlIGFscGhhOiZh
bHBoYV07CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFBlbihtYWtlUkdCQSgoaW50KShyZWQgKiAy
NTUpLCAoaW50KShncmVlbiAqIDI1NSksIChpbnQpKGJsdWUgKiAyNTUpLCAoaW50KShhbHBoYSAq
IDI1NSkpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVUZXh0UmVuZGVyZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVy
LmgJKHJldmlzaW9uIDE2MjcxKQorKysgV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVRleHRS
ZW5kZXJlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBACiBleHRlcm4gIkMiIHsK
ICNlbmRpZgogCi1leHRlcm4gdm9pZCBXZWJDb3JlRHJhd1RleHRBdFBvaW50KGNvbnN0IFVuaUNo
YXIqLCB1bnNpZ25lZCBsZW5ndGgsIE5TUG9pbnQsIE5TRm9udCosIE5TQ29sb3IqKTsKK2V4dGVy
biB2b2lkIFdlYkNvcmVEcmF3VGV4dEF0UG9pbnQoQ0dDb250ZXh0UmVmLCBjb25zdCBVbmlDaGFy
KiwgdW5zaWduZWQgbGVuZ3RoLCBOU1BvaW50LCBOU0ZvbnQqLCBOU0NvbG9yKik7CiBleHRlcm4g
ZmxvYXQgV2ViQ29yZVRleHRGbG9hdFdpZHRoKGNvbnN0IFVuaUNoYXIqLCB1bnNpZ25lZCBsZW5n
dGgsIE5TRm9udCopOwogZXh0ZXJuIHZvaWQgV2ViQ29yZVNldFNob3VsZFVzZUZvbnRTbW9vdGhp
bmcoYm9vbCk7CiBleHRlcm4gYm9vbCBXZWJDb3JlU2hvdWxkVXNlRm9udFNtb290aGluZygpOwpJ
bmRleDogV2ViQ29yZS9wbGF0Zm9ybS9tYWMvV2ViQ29yZVRleHRSZW5kZXJlci5tbQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1tCShyZXZp
c2lvbiAxNjI3MSkKKysrIFdlYkNvcmUvcGxhdGZvcm0vbWFjL1dlYkNvcmVUZXh0UmVuZGVyZXIu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTM1LDE3ICszNSwxOSBAQAogCiB1c2luZyBuYW1lc3BhY2Ug
V2ViQ29yZTsKIAotdm9pZCBXZWJDb3JlRHJhd1RleHRBdFBvaW50KGNvbnN0IFVuaUNoYXIqIGJ1
ZmZlciwgdW5zaWduZWQgbGVuZ3RoLCBOU1BvaW50IHBvaW50LCBOU0ZvbnQqIGZvbnQsIE5TQ29s
b3IqIHRleHRDb2xvcikKK3ZvaWQgV2ViQ29yZURyYXdUZXh0QXRQb2ludChDR0NvbnRleHRSZWYg
Y29udGV4dCwgY29uc3QgVW5pQ2hhciogYnVmZmVyLCB1bnNpZ25lZCBsZW5ndGgsIE5TUG9pbnQg
cG9pbnQsIE5TRm9udCogZm9udCwgTlNDb2xvciogdGV4dENvbG9yKQogeworICAgIEdyYXBoaWNz
Q29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CisgICAgQVNTRVJUKFtbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0pOworICAgICAgICAKICAgICBGb250
UGxhdGZvcm1EYXRhIGYoZm9udCk7CiAgICAgRm9udCByZW5kZXJlcihmKTsKICAgICBUZXh0UnVu
IHJ1bihidWZmZXIsIGxlbmd0aCk7CiAgICAgVGV4dFN0eWxlIHN0eWxlOwogICAgIHN0eWxlLmRp
c2FibGVSb3VuZGluZ0hhY2tzKCk7CisgICAgc3R5bGUuc2V0VXNlUHJpbnRlckZvbnRzKCFbW05T
R3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0RyYXdpbmdUb1NjcmVlbl0pOwogICAg
IENHRmxvYXQgcmVkLCBncmVlbiwgYmx1ZSwgYWxwaGE7CiAgICAgW1t0ZXh0Q29sb3IgY29sb3JV
c2luZ0NvbG9yU3BhY2VOYW1lOk5TRGV2aWNlUkdCQ29sb3JTcGFjZV0gZ2V0UmVkOiZyZWQgZ3Jl
ZW46JmdyZWVuIGJsdWU6JmJsdWUgYWxwaGE6JmFscGhhXTsKLSAgICBDR0NvbnRleHRSZWYgY29u
dGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0g
Z3JhcGhpY3NQb3J0XTsKLSAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpOwogICAgIGdyYXBoaWNzQ29udGV4dC5zZXRQZW4obWFrZVJHQkEoKGludCkocmVkICogMjU1
KSwgKGludCkoZ3JlZW4gKiAyNTUpLCAoaW50KShibHVlICogMjU1KSwgKGludCkoYWxwaGEgKiAy
NTUpKSk7CiAgICAgcmVuZGVyZXIuZHJhd1RleHQoJmdyYXBoaWNzQ29udGV4dCwgcnVuLCBzdHls
ZSwgRmxvYXRQb2ludChwb2ludC54LCBwb2ludC55KSk7CiB9CkluZGV4OiBXZWJDb3JlL3JlbmRl
cmluZy9FbGxpcHNpc0JveC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvRWxs
aXBzaXNCb3guY3BwCShyZXZpc2lvbiAxNjI3MSkKKysrIFdlYkNvcmUvcmVuZGVyaW5nL0VsbGlw
c2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIkVsbGlwc2lzQm94LmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHRTdHlsZS5oIgog
CkBAIC00Niw3ICs0Nyw5IEBAIHZvaWQgRWxsaXBzaXNCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6
UGEKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcmIHN0ciA9IG1fc3RyOwotICAgIHAtPmRyYXdU
ZXh0KFRleHRSdW4oc3RyLmltcGwoKSksIEludFBvaW50KG1feCArIF90eCwgbV95ICsgX3R5ICsg
bV9iYXNlbGluZSksIFRleHRTdHlsZSgwLCAwLCAwLCBmYWxzZSwgX3N0eWxlLT52aXN1YWxseU9y
ZGVyZWQoKSkpOworICAgIFRleHRTdHlsZSB0ZXh0U3R5bGUoMCwgMCwgMCwgZmFsc2UsIF9zdHls
ZS0+dmlzdWFsbHlPcmRlcmVkKCkpOworICAgIHRleHRTdHlsZS5zZXRVc2VQcmludGVyRm9udHMo
b2JqZWN0KCktPmRvY3VtZW50KCktPnByaW50aW5nKCkpOworICAgIHAtPmRyYXdUZXh0KFRleHRS
dW4oc3RyLmltcGwoKSksIEludFBvaW50KG1feCArIF90eCwgbV95ICsgX3R5ICsgbV9iYXNlbGlu
ZSksIHRleHRTdHlsZSk7CiAKICAgICBpZiAoc2V0U2hhZG93KQogICAgICAgICBwLT5jbGVhclNo
YWRvdygpOwpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHJldmlzaW9uIDE2
MjcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0NCw2ICszNDQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRlck9i
amVjdDo6CiAgICAgU3RyaW5nSW1wbCogdGV4dFN0ciA9IHRleHRPYmplY3QoKS0+c3RyaW5nKCk7
CiAKICAgICBUZXh0U3R5bGUgdGV4dFN0eWxlKHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwgdGV4
dFBvcygpLCBtX3RvQWRkLCBtX3JldmVyc2VkLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlVG9Vc2Ut
PnZpc3VhbGx5T3JkZXJlZCgpKTsKKyAgICB0ZXh0U3R5bGUuc2V0VXNlUHJpbnRlckZvbnRzKGlz
UHJpbnRpbmcpOwogCiAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkgJiYgIXBhaW50U2Vs
ZWN0ZWRUZXh0U2VwYXJhdGVseSkgewogICAgICAgICAvLyBwYWludCBhbGwgdGhlIHRleHQKSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckltYWdlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAJKHJldmlzaW9uIDE2MjcxKQorKysgV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVySW1hZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3
IEBACiAjaW5jbHVkZSAiSFRNTE1hcEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIK
ICNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCisjaW5jbHVkZSAiVGV4dFN0eWxlLmgiCiAKIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTI1MywxMiArMjU0LDE0IEBAIHZvaWQgUmVuZGVySW1hZ2U6
OnBhaW50KFBhaW50SW5mbyYgaSwgaW4KICAgICAgICAgICAgICAgICAvLyBPbmx5IGRyYXcgdGhl
IGFsdCB0ZXh0IGlmIGl0J2xsIGZpdCB3aXRoaW4gdGhlIGNvbnRlbnQgYm94LAogICAgICAgICAg
ICAgICAgIC8vIGFuZCBvbmx5IGlmIGl0IGZpdHMgYWJvdmUgdGhlIGVycm9yIGltYWdlLgogICAg
ICAgICAgICAgICAgIFRleHRSdW4gdGV4dFJ1bihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFy
Kj4odGV4dC51bmljb2RlKCkpLCB0ZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBUZXh0
U3R5bGUgdGV4dFN0eWxlOworICAgICAgICAgICAgICAgIHRleHRTdHlsZS5zZXRVc2VQcmludGVy
Rm9udHModmlldygpLT5wcmludGluZ01vZGUoKSk7CiAgICAgICAgICAgICAgICAgaW50IHRleHRX
aWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yUGlj
dHVyZURyYXduKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0
V2lkdGggJiYgZm9udC5oZWlnaHQoKSA8PSBpbWFnZVkpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHRleHRSdW4sIEludFBvaW50KGF4LCBheSAr
IGFzY2VudCksIHRleHRTdHlsZSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1c2FibGVX
aWR0aCA+PSB0ZXh0V2lkdGggJiYgY0hlaWdodCA+PSBmb250LmhlaWdodCgpKQotICAgICAgICAg
ICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQp
KTsKKyAgICAgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQoYXgs
IGF5ICsgYXNjZW50KSwgdGV4dFN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAg
IH0gZWxzZSBpZiAobV9jYWNoZWRJbWFnZSkgewpJbmRleDogV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGlzdE1hcmtlci5jcHAJKHJldmlzaW9uIDE2MjcxKQorKysgV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNs
dWRlICJMaXN0TWFya2VyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5oIgogI2luY2x1ZGUg
IlJlbmRlckxpc3RJdGVtLmgiCisjaW5jbHVkZSAiVGV4dFN0eWxlLmgiCiAKIHVzaW5nIG5hbWVz
cGFjZSBzdGQ7CiAKQEAgLTIzMSwxNyArMjMyLDE5IEBAIHZvaWQgUmVuZGVyTGlzdE1hcmtlcjo6
cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgaWYgKCFtX2l0ZW0uaXNFbXB0eSgpKSB7CiAgICAg
ICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwogICAgICAgICAgICAg
VGV4dFJ1biB0ZXh0UnVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIqPihtX2l0ZW0udW5p
Y29kZSgpKSwgbV9pdGVtLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIFRleHRTdHlsZSB0ZXh0U3R5
bGU7CisgICAgICAgICAgICB0ZXh0U3R5bGUuc2V0VXNlUHJpbnRlckZvbnRzKHZpZXcoKS0+cHJp
bnRpbmdNb2RlKCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVjdGlvbigpID09IExU
UikgewogICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgodGV4dFJ1bik7Ci0g
ICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFya2VyLmxvY2F0aW9uKCkpOwor
ICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHRleHRSdW4sIG1hcmtlci5sb2NhdGlvbigpLCB0
ZXh0U3R5bGUpOwogICAgICAgICAgICAgICAgIFVDaGFyIHBlcmlvZFNwYWNlWzJdID0geyAnLics
ICcgJyB9OwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KFRleHRSdW4ocGVyaW9kU3BhY2Us
IDIpLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAg
ICAgICBwLT5kcmF3VGV4dChUZXh0UnVuKHBlcmlvZFNwYWNlLCAyKSwgbWFya2VyLmxvY2F0aW9u
KCkgKyBJbnRTaXplKHdpZHRoLCAwKSwgdGV4dFN0eWxlKTsKICAgICAgICAgICAgIH0gZWxzZSB7
CiAgICAgICAgICAgICAgICAgVUNoYXIgc3BhY2VQZXJpb2RbMl0gPSB7ICcgJywgJy4nIH07CiAg
ICAgICAgICAgICAgICAgVGV4dFJ1biBzcGFjZVBlcmlvZFJ1bihzcGFjZVBlcmlvZCwgMik7CiAg
ICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53aWR0aChzcGFjZVBlcmlvZFJ1bik7Ci0g
ICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoc3BhY2VQZXJpb2RSdW4sIG1hcmtlci5sb2NhdGlv
bigpKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBtYXJrZXIubG9jYXRp
b24oKSArIEludFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChz
cGFjZVBlcmlvZFJ1biwgbWFya2VyLmxvY2F0aW9uKCksIHRleHRTdHlsZSk7CisgICAgICAgICAg
ICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFya2VyLmxvY2F0aW9uKCkgKyBJbnRTaXplKHdp
ZHRoLCAwKSwgdGV4dFN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KSW5k
ZXg6IFdlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCShyZXZpc2lvbiAxNjI3MSkKKysrIFdl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2
ICszNywzMyBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFRoaXMgY2xhc3MgYXV0b21h
dGljYWxseSBzYXZlcyBhbmQgcmVzdG9yZXMgdGhlIGN1cnJlbnQgTlNHcmFwaGljc0NvbnRleHQg
Zm9yCisvLyBmdW5jdGlvbnMgd2hpY2ggY2FsbCBvdXQgaW50byBBcHBLaXQgYW5kIHJlbHkgb24g
dGhlIGN1cnJlbnRDb250ZXh0IGJlaW5nIHNldAorY2xhc3MgQ3VycmVudEdyYXBoaWNzQ29udGV4
dFNldHRlciB7CitwdWJsaWM6CisgICAgQ3VycmVudEdyYXBoaWNzQ29udGV4dFNldHRlcihHcmFw
aGljc0NvbnRleHQqIGdyYXBoaWNzQ29udGV4dCkKKyAgICB7CisgICAgICAgIGlmIChncmFwaGlj
c0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpID09IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdIGdyYXBoaWNzUG9ydF0pIHsKKyAgICAgICAgICAgIG1fc2F2ZWROU0dyYXBoaWNz
Q29udGV4dCA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIG1fc2F2ZWROU0dyYXBoaWNzQ29udGV4dCA9IFtbTlNHcmFwaGljc0NvbnRleHQgY3Vy
cmVudENvbnRleHRdIHJldGFpbl07CisgICAgICAgIE5TR3JhcGhpY3NDb250ZXh0KiBuZXdDb250
ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6
Z3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSBmbGlwcGVkOllFU107CisgICAgICAg
IFtOU0dyYXBoaWNzQ29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuZXdDb250ZXh0XTsKKyAgICB9
CisgICAgfkN1cnJlbnRHcmFwaGljc0NvbnRleHRTZXR0ZXIoKQorICAgIHsKKyAgICAgICAgaWYg
KG1fc2F2ZWROU0dyYXBoaWNzQ29udGV4dCkgeworICAgICAgICAgICAgW05TR3JhcGhpY3NDb250
ZXh0IHNldEN1cnJlbnRDb250ZXh0Om1fc2F2ZWROU0dyYXBoaWNzQ29udGV4dF07CisgICAgICAg
ICAgICBbbV9zYXZlZE5TR3JhcGhpY3NDb250ZXh0IHJlbGVhc2VdOworICAgICAgICB9CisgICAg
fQorCitwcml2YXRlOgorICAgIE5TR3JhcGhpY3NDb250ZXh0KiBtX3NhdmVkTlNHcmFwaGljc0Nv
bnRleHQ7Cit9OworCiBlbnVtIHsKICAgICB0b3BNYXJnaW4sCiAgICAgcmlnaHRNYXJnaW4sCkBA
IC01OTIsMTAgKzYxOSw5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEJ1dHRvbkNlbGxTdGF0
ZSgKICAgICB1cGRhdGVGb2N1c2VkU3RhdGUoYnV0dG9uLCBvKTsKIH0KIAotYm9vbCBSZW5kZXJU
aGVtZU1hYzo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6
OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3QmIHIpCi17ICAgIAotICAgIC8vIEZJWE1FOiBJZ25v
cmVzIHRoZSBHcmFwaGljc0NvbnRleHQgaW4gdGhlIFBhaW50SW5mbyBhbmQgYWx3YXlzIGRyYXdz
IGludG8gdGhlIGN1cnJlbnQKLSAgICAvLyBOU0dyYXBoaWNzQ29udGV4dCBpbnN0ZWFkLgorYm9v
bCBSZW5kZXJUaGVtZU1hYzo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5k
ZXJPYmplY3Q6OlBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAg
IEN1cnJlbnRHcmFwaGljc0NvbnRleHRTZXR0ZXIgY3VycmVudEdyYXBoaWNzQ29udGV4dFNldHRl
cihwYWludEluZm8ucCk7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQg
bmVlZGVkIGZvciB0aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcu
CiAgICAgc2V0QnV0dG9uQ2VsbFN0YXRlKG8sIHIpOwpAQCAtNjIyLDEwICs2NDgsOSBAQCBib29s
IFJlbmRlclRoZW1lTWFjOjpwYWludEJ1dHRvbihSZW5kZXJPCiAgICAgcmV0dXJuIGZhbHNlOwog
fQogCi1ib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8s
IGNvbnN0IFJlbmRlck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wg
UmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVu
ZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAg
ICAvLyBGSVhNRTogSWdub3JlcyB0aGUgR3JhcGhpY3NDb250ZXh0IGluIHRoZSBQYWludEluZm8g
YW5kIGFsd2F5cyBkcmF3cyBpbnRvIHRoZSBjdXJyZW50Ci0gICAgLy8gTlNHcmFwaGljc0NvbnRl
eHQgaW5zdGVhZC4KKyAgICBDdXJyZW50R3JhcGhpY3NDb250ZXh0U2V0dGVyIGN1cnJlbnRHcmFw
aGljc0NvbnRleHRTZXR0ZXIocGFpbnRJbmZvLnApOwogICAgIHdrRHJhd0JlemVsZWRUZXh0Rmll
bGRDZWxsKHIsIGlzRW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOwogICAgIHJl
dHVybiBmYWxzZTsKIH0KQEAgLTYzNywxMCArNjYyLDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6
YWRqdXN0VGV4dEZpZWxkU3R5bAogICAgICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlLCBO
U1JlZ3VsYXJDb250cm9sU2l6ZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4
dEFyZWEoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNv
bnN0IEludFJlY3QmIHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29u
c3QgSW50UmVjdCYgcikKIHsKLSAgICAvLyBGSVhNRTogSWdub3JlcyB0aGUgR3JhcGhpY3NDb250
ZXh0IGluIHRoZSBQYWludEluZm8gYW5kIGFsd2F5cyBkcmF3cyBpbnRvIHRoZSBjdXJyZW50Ci0g
ICAgLy8gTlNHcmFwaGljc0NvbnRleHQgaW5zdGVhZC4KKyAgICBDdXJyZW50R3JhcGhpY3NDb250
ZXh0U2V0dGVyIGN1cnJlbnRHcmFwaGljc0NvbnRleHRTZXR0ZXIocGFpbnRJbmZvLnApOwogICAg
IHdrRHJhd0JlemVsZWRUZXh0QXJlYShyLCBpc0VuYWJsZWQobykgJiYgIWlzUmVhZE9ubHlDb250
cm9sKG8pKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CkluZGV4OiBXZWJLaXQvQ2hhbmdlTG9nCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYktpdC9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2Mjc0KQorKysgV2ViS2l0
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyIEBACisyMDA2LTA5LTA5ICBF
cmljIFNlaWRlbCAgPGVyaWNAZXNlaWRlbC5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisgICAgICAgIAorICAgICAgICBVcGRhdGUgV2ViS2l0IHRvIHVzZSBzbGln
aHRseSBhbHRlcmVkIFdlYkNvcmVEcmF3VGV4dEF0UG9pbnQgU1BJLgorCisgICAgICAgICogTWlz
Yy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tOgorICAgICAgICAoLVtOU1N0cmluZyBfd2ViX2RyYXdB
dFBvaW50OmZvbnQ6dGV4dENvbG9yOl0pOiBmbGlwIGNvbnRleHQgYmVmb3JlIGNhbGxpbmcgV2Vi
Q29yZSB3aGVuIG5lY2Vzc2FyeQorCiAyMDA2LTA5LTA4ICBUaW0gT21lcm5pY2sgIDx0aW1vQGFw
cGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBCcmFkeSBFaWRzb24uCkluZGV4OiBXZWJL
aXQvTWlzYy9XZWJLaXROU1N0cmluZ0V4dHJhcy5tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYktpdC9NaXNj
L1dlYktpdE5TU3RyaW5nRXh0cmFzLm0JKHJldmlzaW9uIDE2MjY5KQorKysgV2ViS2l0L01pc2Mv
V2ViS2l0TlNTdHJpbmdFeHRyYXMubQkod29ya2luZyBjb3B5KQpAQCAtNTYsOSArNTYsMTcgQEAg
c3RhdGljIEJPT0wgY2FuVXNlRmFzdFJlbmRlcmVyKGNvbnN0IFVuaQogCiAgICAgW3NlbGYgZ2V0
Q2hhcmFjdGVyczpidWZmZXJdOwogICAgIAotICAgIGlmIChjYW5Vc2VGYXN0UmVuZGVyZXIoYnVm
ZmVyLCBsZW5ndGgpKQotICAgICAgICBXZWJDb3JlRHJhd1RleHRBdFBvaW50KGJ1ZmZlciwgbGVu
Z3RoLCBwb2ludCwgZm9udCwgdGV4dENvbG9yKTsKLSAgICBlbHNlIHsKKyAgICBpZiAoY2FuVXNl
RmFzdFJlbmRlcmVyKGJ1ZmZlciwgbGVuZ3RoKSkgeworICAgICAgICBOU0dyYXBoaWNzQ29udGV4
dCAqbnNDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XTsKKyAgICAg
ICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IFtuc0NvbnRleHQgZ3JhcGhpY3NQb3J0XTsKKyAg
ICAgICAgLy8gU2FmYXJpIGRvZXNuJ3QgZmxpcCB0aGUgTlNHcmFwaGljc0NvbnRleHQgYmVmb3Jl
IGNhbGxpbmcgV2ViS2l0LCB5ZXQgV2ViQ29yZSByZXF1aXJlcyBhIGZsaXBwZWQgZ3JhcGhpY3Mg
Y29udGV4dC4KKyAgICAgICAgQk9PTCBmbGlwcGVkID0gW25zQ29udGV4dCBpc0ZsaXBwZWRdOwor
ICAgICAgICBpZiAoIWZsaXBwZWQpCisgICAgICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0Nv
bnRleHQsIDEuMCwgLTEuMCk7CisgICAgICAgIFdlYkNvcmVEcmF3VGV4dEF0UG9pbnQoY2dDb250
ZXh0LCBidWZmZXIsIGxlbmd0aCwgcG9pbnQsIGZvbnQsIHRleHRDb2xvcik7CisgICAgICAgIGlm
ICghZmxpcHBlZCkKKyAgICAgICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNnQ29udGV4dCwgMS4w
LCAtMS4wKTsKKyAgICB9IGVsc2UgewogICAgICAgICAvLyBXZWJUZXh0UmVuZGVyZXIgYXNzdW1l
cyBkcmF3aW5nIGZyb20gYmFzZWxpbmUuCiAgICAgICAgIGlmIChbW05TVmlldyBmb2N1c1ZpZXdd
IGlzRmxpcHBlZF0pCiAgICAgICAgICAgICBwb2ludC55IC09IFtmb250IGFzY2VuZGVyXTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>10471</attachid>
            <date>2006-09-09 05:04:03 -0700</date>
            <delta_ts>2006-09-10 12:29:03 -0700</delta_ts>
            <desc>Patch which actually passes the layout tests</desc>
            <filename>better-remove.patch</filename>
            <type>text/plain</type>
            <size>32965</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDE2Mjcz
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNTcgQEAKKzIwMDYtMDkt
MDggIEVyaWMgU2VpZGVsICA8ZXJpY0Blc2VpZGVsLmNvbT4KKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFJlbW92ZSBhIGJ1bmNoIG1vcmUg
TlNHcmFwaGljc0NvbnRleHQgcmVsYXRlZCBjb2RlLgorICAgICAgICBBZGQgYSBXZWJDb3JlTlNH
cmFwaGljc0NvbnRleHRCcmlkZ2UgdG8gc2ltcGxpZnkgbWV0aG9kcyB3aGljaCBuZWVkIHRvIGNh
bGwgdXAgaW50byBBcHBLaXQgY29udHJvbHMgKGFuZCB0aHVzIGRlcGVuZCBvbiB0aGUgW05TR3Jh
cGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBiZWluZyBzZXQgY29ycmVjdGx5KQorICAgICAg
ICBBZGQgYW4gImlzUHJpbnRpbmciIGZsYWcgdG8gbWFueSBvZiB0aGUgdGV4dCBkcmF3aW5nIGZ1
bmN0aW9ucyBpbiBvcmRlciB0byBhdm9pZCB0aGUgbmVlZCBmb3IgYSBHcmFwaGljc0NvbnRleHQ6
OmlzUHJpbnRpbmcoKSBmdW5jdGlvbi4KKworICAgICAgICBObyB0ZXN0cyB3ZXJlIGhhcm1lZCBp
biB0aGUgbWFraW5nIG9mIHRoaXMgcGF0Y2guCisKKyAgICAgICAgKiBicmlkZ2UvbWFjL1dlYkNv
cmVGcmFtZUJyaWRnZS5tbToKKyAgICAgICAgKC1bV2ViQ29yZUZyYW1lQnJpZGdlIGRyYXdSZWN0
Ol0pOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVh
cnR6Lmg6CisgICAgICAgIChXZWJDb3JlOjpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6
Y2dDb250ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OktSZW5kZXJpbmdEZXZpY2VRdWFydHo6Omlz
QnVmZmVyZWQpOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2
aWNlUXVhcnR6Lm1tOgorICAgICAgICAoV2ViQ29yZTo6S1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dWFydHo6OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6KToKKyAgICAgICAgKFdlYkNvcmU6
OktSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojp+S1JlbmRlcmluZ0RldmljZUNvbnRleHRR
dWFydHopOgorICAgICAgICAqIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9RdWFydHpTdXBwb3J0Lm1t
OgorICAgICAgICAqIHBsYXRmb3JtL0ZvbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6
ZHJhd1NpbXBsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZHJhd1RleHQpOgorICAg
ICAgICAqIHBsYXRmb3JtL0ZvbnQuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9HcmFwaGljc0NvbnRl
eHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3VGV4dCk6Cisg
ICAgICAgICogcGxhdGZvcm0vR3JhcGhpY3NDb250ZXh0Lmg6CisgICAgICAgICogcGxhdGZvcm0v
bWFjL0ZpbGVCdXR0b25NYWMubW06CisgICAgICAgICgtW1dlYkZpbGVDaG9vc2VyQnV0dG9uIGRy
YXdSZWN0Ol0pOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9Gb250TWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6QVRTVUxheW91dFBhcmFtZXRlcnM6OkFUU1VMYXlvdXRQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkFUU1VMYXlvdXRQYXJhbWV0ZXJzOjppbml0aWFsaXplKToKKyAgICAg
ICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpG
b250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NDb250ZXh0OjpkcmF3TGluZUZvck1p
c3NwZWxsaW5nKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvTGlzdEJveE1hYy5tbToKKyAgICAg
ICAgKC1bV2ViQ29yZVRhYmxlVmlldyBkcmF3Um93OmNsaXBSZWN0Ol0pOgorICAgICAgICAqIHBs
YXRmb3JtL21hYy9XZWJDb3JlVGV4dFJlbmRlcmVyLm1tOgorICAgICAgICAoV2ViQ29yZURyYXdU
ZXh0QXRQb2ludCk6CisgICAgICAgICogcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsbGlwc2lzQm94OjpwYWludCk6CisgICAgICAgICogcmVuZGVyaW5nL0lu
bGluZVRleHRCb3guY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lVGV4dEJveDo6cGFpbnQp
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJJbWFnZTo6cGFpbnQpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFy
a2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxpc3RNYXJrZXI6OnBhaW50KToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW06CisgICAgICAgIChXZWJDb3JlOjpX
ZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2U6OldlYkNvcmVOU0dyYXBoaWNzQ29udGV4dEJy
aWRnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2U6
On5XZWJDb3JlTlNHcmFwaGljc0NvbnRleHRCcmlkZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVNYWM6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
TWFjOjpwYWludFRleHRGaWVsZCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZU1hYzo6
cGFpbnRUZXh0QXJlYSk6CisKIDIwMDYtMDktMDggIEVyaWMgU2VpZGVsICA8ZXJpY0Blc2VpZGVs
LmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBkYXJpbi4KSW5kZXg6IGJyaWRnZS9tYWMvV2Vi
Q29yZUZyYW1lQnJpZGdlLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1l
QnJpZGdlLm1tCShyZXZpc2lvbiAxNjI3MSkKKysrIGJyaWRnZS9tYWMvV2ViQ29yZUZyYW1lQnJp
ZGdlLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05MjYsMTAgKzkyNiw5IEBAIHN0YXRpYyBCT09MIG5v
d1ByaW50aW5nKFdlYkNvcmVGcmFtZUJyaWQKIC0gKHZvaWQpZHJhd1JlY3Q6KE5TUmVjdClyZWN0
CiB7CiAgICAgUGxhdGZvcm1HcmFwaGljc0NvbnRleHQqIHBsYXRmb3JtQ29udGV4dCA9IHN0YXRp
Y19jYXN0PFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0Kj4oW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSk7Ci0gICAgCiAgICAgQVNTRVJUKFtbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHRdIGlzRmxpcHBlZF0pOwotICAgIAogICAgIEdyYXBoaWNz
Q29udGV4dCBjb250ZXh0KHBsYXRmb3JtQ29udGV4dCk7CisgICAgCiAgICAgW3NlbGYgX3NldHVw
Um9vdEZvclByaW50aW5nOllFU107CiAgICAgCiAgICAgQVNTRVJUKCFtX2ZyYW1lLT5kb2N1bWVu
dCgpIHx8IG1fZnJhbWUtPmRvY3VtZW50KCktPnByaW50aW5nKCkgPT0gbV9mcmFtZS0+ZG9jdW1l
bnQoKS0+cmVuZGVyZXIoKS0+dmlldygpLT5wcmludGluZ01vZGUoKSk7CkluZGV4OiBrY2FudmFz
L2RldmljZS9xdWFydHovS1JlbmRlcmluZ0RldmljZVF1YXJ0ei5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtj
YW52YXMvZGV2aWNlL3F1YXJ0ei9LUmVuZGVyaW5nRGV2aWNlUXVhcnR6LmgJKHJldmlzaW9uIDE2
MjcxKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFydHouaAko
d29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDYgQEAKIHR5cGVkZWYgc3RydWN0IENHUmVjdCBD
R1JlY3Q7CiB0eXBlZGVmIHN0cnVjdCBDR0NvbnRleHQgKkNHQ29udGV4dFJlZjsKIAotI2lmZGVm
IF9fT0JKQ19fCi1AY2xhc3MgTlNHcmFwaGljc0NvbnRleHQ7Ci0jZWxzZQotY2xhc3MgTlNHcmFw
aGljc0NvbnRleHQ7Ci0jZW5kaWYKLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBLUmVu
ZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVyaW5nRGV2aWNlQ29udGV4
dCB7CkBAIC01NiwxMSArNTAsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBHcmFwaGljc0NvbnRl
eHQqIGNyZWF0ZUdyYXBoaWNzQ29udGV4dCgpOwogICAgIAogICAgIENHQ29udGV4dFJlZiBjZ0Nv
bnRleHQoKSBjb25zdCB7IHJldHVybiBtX2NnQ29udGV4dDsgfTsKLSAgICBOU0dyYXBoaWNzQ29u
dGV4dCAqbnNHcmFwaGljc0NvbnRleHQoKTsKICAgICAKIHByaXZhdGU6CiAgICAgQ0dDb250ZXh0
UmVmIG1fY2dDb250ZXh0OwotICAgIE5TR3JhcGhpY3NDb250ZXh0ICptX25zR3JhcGhpY3NDb250
ZXh0OwogfTsKIAogY2xhc3MgS1JlbmRlcmluZ0RldmljZVF1YXJ0eiA6IHB1YmxpYyBLUmVuZGVy
aW5nRGV2aWNlIHsKQEAgLTY5LDkgKzYxLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgfktSZW5k
ZXJpbmdEZXZpY2VRdWFydHooKSB7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBpc0J1ZmZlcmVkKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAKLSAgICB2aXJ0dWFsIEtSZW5kZXJpbmdEZXZp
Y2VDb250ZXh0ICpwb3BDb250ZXh0KCk7Ci0gICAgdmlydHVhbCB2b2lkIHB1c2hDb250ZXh0KEtS
ZW5kZXJpbmdEZXZpY2VDb250ZXh0ICpjb250ZXh0KTsKIAogICAgIC8vIGNvbnRleHQgbWFuYWdl
bWVudC4KICAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eiAqcXVhcnR6Q29udGV4dCgp
IGNvbnN0OwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZpY2VRdWFy
dHoubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0ga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tSZW5kZXJpbmdEZXZp
Y2VRdWFydHoubW0JKHJldmlzaW9uIDE2MjcxKQorKysga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tS
ZW5kZXJpbmdEZXZpY2VRdWFydHoubW0JKHdvcmtpbmcgY29weSkKQEAgLTQ0LDcgKzQ0LDYgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6S1Jl
bmRlcmluZ0RldmljZUNvbnRleHRRdWFydHooQ0dDb250ZXh0UmVmIGNvbnRleHQpCiAgICAgOiBt
X2NnQ29udGV4dChDR0NvbnRleHRSZXRhaW4oY29udGV4dCkpCi0gICAgLCBtX25zR3JhcGhpY3ND
b250ZXh0KDApCiB7CiAgICAgQVNTRVJUKG1fY2dDb250ZXh0KTsKIH0KQEAgLTUyLDcgKzUxLDYg
QEAgS1JlbmRlcmluZ0RldmljZUNvbnRleHRRdWFydHo6OktSZW5kZXJpbgogS1JlbmRlcmluZ0Rl
dmljZUNvbnRleHRRdWFydHo6On5LUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0eigpCiB7CiAg
ICAgQ0dDb250ZXh0UmVsZWFzZShtX2NnQ29udGV4dCk7Ci0gICAgSGFyZFJlbGVhc2UobV9uc0dy
YXBoaWNzQ29udGV4dCk7CiB9CiAKIEFmZmluZVRyYW5zZm9ybSBLUmVuZGVyaW5nRGV2aWNlQ29u
dGV4dFF1YXJ0ejo6Y29uY2F0Q1RNKGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgd29ybGRNYXRyaXgp
CkBAIC03OCwxMyArNzYsNiBAQCB2b2lkIEtSZW5kZXJpbmdEZXZpY2VDb250ZXh0UXVhcnR6Ojph
ZGRQCiAgICAgQ0dDb250ZXh0QWRkUGF0aChtX2NnQ29udGV4dCwgcGF0aC5wbGF0Zm9ybVBhdGgo
KSk7CiB9CiAKLU5TR3JhcGhpY3NDb250ZXh0ICpLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0
ejo6bnNHcmFwaGljc0NvbnRleHQoKQotewotICAgIGlmICghbV9uc0dyYXBoaWNzQ29udGV4dCAm
JiBtX2NnQ29udGV4dCkKLSAgICAgICAgbV9uc0dyYXBoaWNzQ29udGV4dCA9IEhhcmRSZXRhaW4o
W05TR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6bV9jZ0Nv
bnRleHQgZmxpcHBlZDpZRVNdKTsKLSAgICByZXR1cm4gbV9uc0dyYXBoaWNzQ29udGV4dDsKLX0K
LQogR3JhcGhpY3NDb250ZXh0KiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dFF1YXJ0ejo6Y3JlYXRl
R3JhcGhpY3NDb250ZXh0KCkKIHsKICAgICByZXR1cm4gbmV3IEdyYXBoaWNzQ29udGV4dChtX2Nn
Q29udGV4dCk7CkBAIC0xMjgsMjMgKzExOSw2IEBAIENHQ29udGV4dFJlZiBLUmVuZGVyaW5nRGV2
aWNlUXVhcnR6OjpjdXIKICAgICByZXR1cm4gcXVhcnR6Q29udGV4dCgpLT5jZ0NvbnRleHQoKTsK
IH0KIAotdm9pZCBLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpwdXNoQ29udGV4dChLUmVuZGVyaW5n
RGV2aWNlQ29udGV4dCAqY29udGV4dCkKLXsKLSAgICBBU1NFUlQoY29udGV4dCk7Ci0gICAgS1Jl
bmRlcmluZ0RldmljZTo6cHVzaENvbnRleHQoY29udGV4dCk7Ci0gICAgW05TR3JhcGhpY3NDb250
ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKLSAgICBbTlNHcmFwaGljc0NvbnRleHQgc2V0Q3VycmVu
dENvbnRleHQ6cXVhcnR6Q29udGV4dCgpLT5uc0dyYXBoaWNzQ29udGV4dCgpXTsKLSAgICBBU1NF
UlQocXVhcnR6Q29udGV4dCgpLT5uc0dyYXBoaWNzQ29udGV4dCgpID09IFtOU0dyYXBoaWNzQ29u
dGV4dCBjdXJyZW50Q29udGV4dF0pOwotfQotCi1LUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqS1Jl
bmRlcmluZ0RldmljZVF1YXJ0ejo6cG9wQ29udGV4dCgpCi17Ci0gICAgW05TR3JhcGhpY3NDb250
ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsKLSAgICBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAq
cG9wcGVkQ29udGV4dCA9IEtSZW5kZXJpbmdEZXZpY2U6OnBvcENvbnRleHQoKTsKLSAgICBBU1NF
UlQoIWN1cnJlbnRDb250ZXh0KCkgfHwgY3VycmVudENHQ29udGV4dCgpID09IFtbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOwotICAgIHJldHVybiBwb3Bw
ZWRDb250ZXh0OwotfQotCiBLUmVuZGVyaW5nRGV2aWNlQ29udGV4dCAqS1JlbmRlcmluZ0Rldmlj
ZVF1YXJ0ejo6Y29udGV4dEZvckltYWdlKEtDYW52YXNJbWFnZSAqaW1hZ2UpIGNvbnN0CiB7CiAg
ICAgS0NhbnZhc0ltYWdlUXVhcnR6ICpxdWFydHpJbWFnZSA9IHN0YXRpY19jYXN0PEtDYW52YXNJ
bWFnZVF1YXJ0eiAqPihpbWFnZSk7CkluZGV4OiBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6
U3VwcG9ydC5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6U3Vw
cG9ydC5tbQkocmV2aXNpb24gMTYyNzEpCisrKyBrY2FudmFzL2RldmljZS9xdWFydHovUXVhcnR6
U3VwcG9ydC5tbQkod29ya2luZyBjb3B5KQpAQCAtNDIsNDYgKzQyLDYgQEAKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi0jaWZuZGVmIE5ERUJVRwotdm9pZCBkZWJ1Z0R1bXBDR0ltYWdlVG9GaWxl
KE5TU3RyaW5nICpmaWxlbmFtZSwgQ0dJbWFnZVJlZiBpbWFnZSwgaW50IHdpZHRoLCBpbnQgaGVp
Z2h0KQotewotICAgIE5TSW1hZ2UgKmZpbGVJbWFnZSA9IFtbTlNJbWFnZSBhbGxvY10gaW5pdFdp
dGhTaXplOk5TTWFrZVNpemUod2lkdGgsIGhlaWdodCldOwotICAgIFtmaWxlSW1hZ2UgbG9ja0Zv
Y3VzXTsKLSAgICBDR0NvbnRleHRSZWYgZmlsZUltYWdlQ29udGV4dCA9IChDR0NvbnRleHRSZWYp
W1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKLSAgICBD
R0NvbnRleHREcmF3SW1hZ2UoZmlsZUltYWdlQ29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGZpbGVJ
bWFnZUNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoCi0gICAgICAgIEZsb2F0UmVjdCgwLCAw
LCB3aWR0aCwgaGVpZ2h0KSksIGltYWdlKTsgCi0gICAgW2ZpbGVJbWFnZSB1bmxvY2tGb2N1c107
Ci0gICAgTlNEYXRhICp0aWZmID0gW2ZpbGVJbWFnZSBUSUZGUmVwcmVzZW50YXRpb25dOwotICAg
IFt0aWZmIHdyaXRlVG9GaWxlOmZpbGVuYW1lIGF0b21pY2FsbHk6WUVTXTsKLSAgICBbZmlsZUlt
YWdlIHJlbGVhc2VdOwotfQotCi12b2lkIGRlYnVnRHVtcENHTGF5ZXJUb0ZpbGUoTlNTdHJpbmcg
KmZpbGVuYW1lLCBDR0xheWVyUmVmIGxheWVyLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0g
ICAgTlNJbWFnZSAqZmlsZUltYWdlID0gW1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6TlNN
YWtlU2l6ZSh3aWR0aCwgaGVpZ2h0KV07Ci0gICAgW2ZpbGVJbWFnZSBsb2NrRm9jdXNdOwotICAg
IENHQ29udGV4dFJlZiBmaWxlSW1hZ2VDb250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhp
Y3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwotICAgIENHQ29udGV4dERy
YXdMYXllckF0UG9pbnQoZmlsZUltYWdlQ29udGV4dCwgQ0dQb2ludE1ha2UoMCwgMCksIGxheWVy
KTsgCi0gICAgW2ZpbGVJbWFnZSB1bmxvY2tGb2N1c107Ci0gICAgTlNEYXRhICp0aWZmID0gW2Zp
bGVJbWFnZSBUSUZGUmVwcmVzZW50YXRpb25dOwotICAgIFt0aWZmIHdyaXRlVG9GaWxlOmZpbGVu
YW1lIGF0b21pY2FsbHk6WUVTXTsKLSAgICBbZmlsZUltYWdlIHJlbGVhc2VdOwotfQotCi12b2lk
IGRlYnVnRHVtcENJSW1hZ2VUb0ZpbGUoTlNTdHJpbmcgKmZpbGVuYW1lLCBDSUltYWdlICpjaUlt
YWdlLCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCi17Ci0gICAgTlNJbWFnZSAqZmlsZUltYWdlID0g
W1tOU0ltYWdlIGFsbG9jXSBpbml0V2l0aFNpemU6TlNNYWtlU2l6ZSh3aWR0aCwgaGVpZ2h0KV07
Ci0gICAgW2ZpbGVJbWFnZSBsb2NrRm9jdXNdOwotICAgIENHQ29udGV4dFJlZiBmaWxlSW1hZ2VD
b250ZXh0ID0gKENHQ29udGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0
XSBncmFwaGljc1BvcnRdOwotICAgIENJQ29udGV4dCAqY2lDb250ZXh0ID0gW0NJQ29udGV4dCBj
b250ZXh0V2l0aENHQ29udGV4dDpmaWxlSW1hZ2VDb250ZXh0IG9wdGlvbnM6bmlsXTsKLSAgICBb
Y2lDb250ZXh0IGRyYXdJbWFnZTpjaUltYWdlIGF0UG9pbnQ6Q0dQb2ludFplcm8gZnJvbVJlY3Q6
Q0dSZWN0TWFrZSgwLCAwLCB3aWR0aCwgaGVpZ2h0KV07Ci0gICAgW2ZpbGVJbWFnZSB1bmxvY2tG
b2N1c107Ci0gICAgTlNEYXRhICp0aWZmID0gW2ZpbGVJbWFnZSBUSUZGUmVwcmVzZW50YXRpb25d
OwotICAgIFt0aWZmIHdyaXRlVG9GaWxlOmZpbGVuYW1lIGF0b21pY2FsbHk6WUVTXTsKLSAgICBb
ZmlsZUltYWdlIHJlbGVhc2VdOwotfQotI2VuZGlmCi0KIENGU3RyaW5nUmVmIENGU3RyaW5nRnJv
bUNHQWZmaW5lVHJhbnNmb3JtKENHQWZmaW5lVHJhbnNmb3JtIHQpCiB7CiAgICAgcmV0dXJuIENG
U3RyaW5nQ3JlYXRlV2l0aEZvcm1hdCgwLCAwLCBDRlNUUigiYTogJWYgYjogJWYgYzogJWYgZDog
JWYgdHg6ICVmIHR5OiAlZiIpLCB0LmEsIHQuYiwgdC5jLCB0LmQsIHQudHgsIHQudHkpOwpJbmRl
eDogcGxhdGZvcm0vRm9udC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcGxhdGZvcm0vRm9udC5jcHAJKHJl
dmlzaW9uIDE2MjcxKQorKysgcGxhdGZvcm0vRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUw
MSw3ICs1MDEsNyBAQCB2b2lkIEZvbnQ6OmRyYXdTaW1wbGVUZXh0KEdyYXBoaWNzQ29udGV4CiAg
ICAgd2hpbGUgKG5leHRHbHlwaCA8IGdseXBoQnVmZmVyLnNpemUoKSkgewogICAgICAgICBjb25z
dCBGb250RGF0YSogbmV4dEZvbnREYXRhID0gZ2x5cGhCdWZmZXIuZm9udERhdGFBdChuZXh0R2x5
cGgpOwogICAgICAgICBpZiAobmV4dEZvbnREYXRhICE9IGZvbnREYXRhKSB7Ci0gICAgICAgICAg
ICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5l
eHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKKyAgICAgICAgICAgIGRyYXdHbHlwaHMo
Y29udGV4dCwgZm9udERhdGEsIGdseXBoQnVmZmVyLCBsYXN0RnJvbSwgbmV4dEdseXBoIC0gbGFz
dEZyb20sIHN0YXJ0UG9pbnQsIHN0eWxlLnVzZVByaW50ZXJGb250cygpKTsKICAgICAgICAgICAg
IGxhc3RGcm9tID0gbmV4dEdseXBoOwogICAgICAgICAgICAgZm9udERhdGEgPSBuZXh0Rm9udERh
dGE7CiAgICAgICAgICAgICBzdGFydFBvaW50LnNldFgobmV4dFgpOwpAQCAtNTA5LDcgKzUwOSw3
IEBAIHZvaWQgRm9udDo6ZHJhd1NpbXBsZVRleHQoR3JhcGhpY3NDb250ZXgKICAgICAgICAgbmV4
dFggKz0gZ2x5cGhCdWZmZXIuYWR2YW5jZUF0KG5leHRHbHlwaCk7CiAgICAgICAgIG5leHRHbHlw
aCsrOwogICAgIH0KLSAgICBkcmF3R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZl
ciwgbGFzdEZyb20sIG5leHRHbHlwaCAtIGxhc3RGcm9tLCBzdGFydFBvaW50KTsKKyAgICBkcmF3
R2x5cGhzKGNvbnRleHQsIGZvbnREYXRhLCBnbHlwaEJ1ZmZlciwgbGFzdEZyb20sIG5leHRHbHlw
aCAtIGxhc3RGcm9tLCBzdGFydFBvaW50LCBzdHlsZS51c2VQcmludGVyRm9udHMoKSk7CiB9CiAK
IHZvaWQgRm9udDo6ZHJhd1RleHQoR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBUZXh0
UnVuJiBydW4sIGNvbnN0IFRleHRTdHlsZSYgc3R5bGUsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50
KSBjb25zdApJbmRleDogcGxhdGZvcm0vRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL0Zv
bnQuaAkocmV2aXNpb24gMTYyNzEpCisrKyBwbGF0Zm9ybS9Gb250LmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1NCw3ICsxNTQsNyBAQCBwcml2YXRlOgogICAgIC8vIEZJWE1FOiBUaGlzIHdpbGwgZXZl
bnR1YWxseSBiZSBjcm9zcy1wbGF0Zm9ybSwgYnV0IHdlIHdhbnQgdG8ga2VlcCBXaW5kb3dzIGNv
bXBpbGluZyBmb3Igbm93LgogICAgIGJvb2wgY2FuVXNlR2x5cGhDYWNoZShjb25zdCBUZXh0UnVu
JikgY29uc3Q7CiAgICAgdm9pZCBkcmF3U2ltcGxlVGV4dChHcmFwaGljc0NvbnRleHQqLCBjb25z
dCBUZXh0UnVuJiwgY29uc3QgVGV4dFN0eWxlJiwgY29uc3QgRmxvYXRQb2ludCYpIGNvbnN0Owot
ICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250RGF0YSosIGNv
bnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2ludCYpIGNv
bnN0OworICAgIHZvaWQgZHJhd0dseXBocyhHcmFwaGljc0NvbnRleHQqLCBjb25zdCBGb250RGF0
YSosIGNvbnN0IEdseXBoQnVmZmVyJiwgaW50IGZyb20sIGludCB0bywgY29uc3QgRmxvYXRQb2lu
dCYsIGJvb2wgdXNlUHJpbnRlckZvbnQpIGNvbnN0OwogICAgIHZvaWQgZHJhd0NvbXBsZXhUZXh0
KEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IFRleHRSdW4mLCBjb25zdCBUZXh0U3R5bGUmLCBjb25z
dCBGbG9hdFBvaW50JikgY29uc3Q7CiAgICAgZmxvYXQgZmxvYXRXaWR0aEZvclNpbXBsZVRleHQo
Y29uc3QgVGV4dFJ1biYsIGNvbnN0IFRleHRTdHlsZSYsIGNvbnN0IEZvbnREYXRhKiBzdWJzdGl0
dXRlRm9udERhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQqIHN0
YXJ0WCwgR2x5cGhCdWZmZXIqKSBjb25zdDsKSW5kZXg6IHBsYXRmb3JtL1RleHRTdHlsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIHBsYXRmb3JtL1RleHRTdHlsZS5oCShyZXZpc2lvbiAxNjI3MSkKKysrIHBs
YXRmb3JtL1RleHRTdHlsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIGNsYXNzIFRleHRTdHlsZSB7CiBwdWJsaWM6CiAgICAgVGV4dFN0eWxl
KGludCB0YWJXaWR0aCA9IDAsIGludCB4cG9zID0gMCwgaW50IHBhZGRpbmcgPSAwLCBib29sIHJ0
bCA9IGZhbHNlLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwKLSAgICAgICAgICAg
ICAgYm9vbCBhcHBseVJ1blJvdW5kaW5nID0gdHJ1ZSwgYm9vbCBhcHBseVdvcmRSb3VuZGluZyA9
IHRydWUsIGJvb2wgYXR0ZW1wdEZvbnRTdWJzdGl0dXRpb24gPSB0cnVlKQorICAgICAgICAgICAg
ICBib29sIGFwcGx5UnVuUm91bmRpbmcgPSB0cnVlLCBib29sIGFwcGx5V29yZFJvdW5kaW5nID0g
dHJ1ZSwgYm9vbCBhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbiA9IHRydWUsIGJvb2wgdXNlUHJpbnRl
ckZvbnRzID0gZmFsc2UpCiAgICAgICAgIDogbV90YWJXaWR0aCh0YWJXaWR0aCkKICAgICAgICAg
LCBtX3hwb3MoeHBvcykKICAgICAgICAgLCBtX3BhZGRpbmcocGFkZGluZykKQEAgLTM1LDYgKzM1
LDcgQEAgcHVibGljOgogICAgICAgICAsIG1fYXBwbHlSdW5Sb3VuZGluZyhhcHBseVJ1blJvdW5k
aW5nKQogICAgICAgICAsIG1fYXBwbHlXb3JkUm91bmRpbmcoYXBwbHlXb3JkUm91bmRpbmcpCiAg
ICAgICAgICwgbV9hdHRlbXB0Rm9udFN1YnN0aXR1dGlvbihhdHRlbXB0Rm9udFN1YnN0aXR1dGlv
bikKKyAgICAgICAgLCBtX3VzZVByaW50ZXJGb250cyh1c2VQcmludGVyRm9udHMpCiAgICAgewog
ICAgIH0KIApAQCAtNDcsOSArNDgsMTEgQEAgcHVibGljOgogICAgIGJvb2wgYXBwbHlSdW5Sb3Vu
ZGluZygpIGNvbnN0IHsgcmV0dXJuIG1fYXBwbHlSdW5Sb3VuZGluZzsgfQogICAgIGJvb2wgYXBw
bHlXb3JkUm91bmRpbmcoKSBjb25zdCB7IHJldHVybiBtX2FwcGx5V29yZFJvdW5kaW5nOyB9CiAg
ICAgYm9vbCBhdHRlbXB0Rm9udFN1YnN0aXR1dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYXR0ZW1w
dEZvbnRTdWJzdGl0dXRpb247IH0KKyAgICBib29sIHVzZVByaW50ZXJGb250cygpIGNvbnN0IHsg
cmV0dXJuIG1fdXNlUHJpbnRlckZvbnRzOyB9CiAKICAgICB2b2lkIGRpc2FibGVSb3VuZGluZ0hh
Y2tzKCkgeyBtX2FwcGx5UnVuUm91bmRpbmcgPSBtX2FwcGx5V29yZFJvdW5kaW5nID0gZmFsc2U7
IH0KICAgICB2b2lkIHNldFJUTChib29sIGIpIHsgbV9ydGwgPSBiOyB9CisgICAgdm9pZCBzZXRV
c2VQcmludGVyRm9udHMoYm9vbCBiKSB7IG1fdXNlUHJpbnRlckZvbnRzID0gYjsgfQogICAgIAog
cHJpdmF0ZToKICAgICBpbnQgbV90YWJXaWR0aDsKQEAgLTYwLDYgKzYzLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIG1fYXBwbHlSdW5Sb3VuZGluZzsKICAgICBib29sIG1fYXBwbHlXb3JkUm91bmRp
bmc7CiAgICAgYm9vbCBtX2F0dGVtcHRGb250U3Vic3RpdHV0aW9uOworICAgIGJvb2wgbV91c2VQ
cmludGVyRm9udHM7CiB9OwogCiB9CkluZGV4OiBwbGF0Zm9ybS9tYWMvRm9udE1hYy5tbQo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvRm9udE1hYy5tbQkocmV2aXNpb24gMTYyNzEpCisrKyBw
bGF0Zm9ybS9tYWMvRm9udE1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtNjIsMTEgKzYyLDE3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIHN0cnVjdCBBVFNVTGF5b3V0UGFyYW1ldGVycwogewogICAg
IEFUU1VMYXlvdXRQYXJhbWV0ZXJzKGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgVGV4dFN0eWxl
JiBzdHlsZSkKLSAgICA6bV9ydW4ocnVuKSwgbV9zdHlsZShzdHlsZSksCi0gICAgIG1fZm9udCgw
KSwgbV9mb250cygwKSwgbV9jaGFyQnVmZmVyKDApLCBtX2hhc1N5bnRoZXRpY0JvbGQoZmFsc2Up
LCBtX3N5bnRoZXRpY0JvbGRQYXNzKGZhbHNlKSwgbV9wYWRQZXJTcGFjZSgwKQorICAgICAgICA6
IG1fcnVuKHJ1bikKKyAgICAgICAgLCBtX3N0eWxlKHN0eWxlKQorICAgICAgICAsIG1fZm9udCgw
KQorICAgICAgICAsIG1fZm9udHMoMCkKKyAgICAgICAgLCBtX2NoYXJCdWZmZXIoMCkKKyAgICAg
ICAgLCBtX2hhc1N5bnRoZXRpY0JvbGQoZmFsc2UpCisgICAgICAgICwgbV9zeW50aGV0aWNCb2xk
UGFzcyhmYWxzZSkKKyAgICAgICAgLCBtX3BhZFBlclNwYWNlKDApCiAgICAge30KIAotICAgIHZv
aWQgaW5pdGlhbGl6ZShjb25zdCBGb250KiBmb250KTsKKyAgICB2b2lkIGluaXRpYWxpemUoY29u
c3QgRm9udCosIGNvbnN0IEdyYXBoaWNzQ29udGV4dCogPSAwKTsKIAogICAgIGNvbnN0IFRleHRS
dW4mIG1fcnVuOwogICAgIGNvbnN0IFRleHRTdHlsZSYgbV9zdHlsZTsKQEAgLTI2MSwxOCArMjY3
LDE2IEBAIHN0YXRpYyBPU1N0YXR1cyBvdmVycmlkZUxheW91dE9wZXJhdGlvbigKICAgICByZXR1
cm4gbm9FcnI7CiB9CiAKLXZvaWQgQVRTVUxheW91dFBhcmFtZXRlcnM6OmluaXRpYWxpemUoY29u
c3QgRm9udCogZm9udCkKK3ZvaWQgQVRTVUxheW91dFBhcmFtZXRlcnM6OmluaXRpYWxpemUoY29u
c3QgRm9udCogZm9udCwgY29uc3QgR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQpCiB7
CiAgICAgbV9mb250ID0gZm9udDsKLQorICAgIAogICAgIC8vIEZJWE1FOiBJdCBpcyBwcm9iYWJs
eSBiZXN0IHRvIGFsd2F5cyBhbGxvY2F0ZSBhIGJ1ZmZlciBmb3IgUlRMLCBzaW5jZSBldmVuIGlm
IGZvciB0aGlzCiAgICAgLy8gZm9udERhdGEgQVRTVU1pcnJvcnMgaXMgdHJ1ZSwgZm9yIGEgc3Vi
c3RpdHV0ZSBmb250RGF0YSBpdCBtaWdodCBiZSBmYWxzZS4KICAgICBjb25zdCBGb250RGF0YSog
Zm9udERhdGEgPSBmb250LT5wcmltYXJ5Rm9udCgpOwogICAgIG1fZm9udHMgPSBuZXcgY29uc3Qg
Rm9udERhdGEqW21fcnVuLmxlbmd0aCgpXTsKICAgICBtX2NoYXJCdWZmZXIgPSAoVUNoYXIqKSgo
Zm9udC0+aXNTbWFsbENhcHMoKSB8fCAobV9zdHlsZS5ydGwoKSAmJiAhZm9udERhdGEtPm1fQVRT
VU1pcnJvcnMpKSA/IG5ldyBVQ2hhclttX3J1bi5sZW5ndGgoKV0gOiAwKTsKICAgICAKLSAgICAv
LyBUaGUgb25seSBDb2NvYSBjYWxscyBoZXJlIGFyZSB0byBOU0dyYXBoaWNzQ29udGV4dCwgd2hp
Y2ggZG9lcyBub3QgcmFpc2UgZXhjZXB0aW9ucy4KLQogICAgIEFUU1VUZXh0TGF5b3V0IGxheW91
dDsKICAgICBPU1N0YXR1cyBzdGF0dXM7CiAgICAgQVRTVUxheW91dE9wZXJhdGlvbk92ZXJyaWRl
U3BlY2lmaWVyIG92ZXJyaWRlU3BlY2lmaWVyOwpAQCAtMzA2LDcgKzMxMCwxMyBAQCB2b2lkIEFU
U1VMYXlvdXRQYXJhbWV0ZXJzOjppbml0aWFsaXplKGNvCiAgICAgbV9sYXlvdXQgPSBsYXlvdXQ7
CiAgICAgQVRTVVNldFRleHRMYXlvdXRSZWZDb24obV9sYXlvdXQsIChVUmVmQ29uKXRoaXMpOwog
Ci0gICAgQ0dDb250ZXh0UmVmIGNnQ29udGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNz
Q29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKKyAgICAvLyBGSVhNRTogVGhl
cmUgYXJlIGNlcnRhaW4gdGltZXMgd2hlbiB0aGlzIG1ldGhvZCBpcyBjYWxsZWQsIHdoZW4gd2Ug
ZG9uJ3QgaGF2ZSBhY2Nlc3MgdG8gYSBHcmFwaGljc0NvbnRleHQKKyAgICAvLyBtZWFzdXJpbmcg
dGV4dCBydW5zIHdpdGggZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0IGlzIG9uZSBleGFtcGxlLgor
ICAgIC8vIEFUU1VJIHJlcXVpcmVzIHRoYXQgd2UgcGFzcyBhIHZhbGlkIENHQ29udGV4dFJlZiB0
byBpdCB3aGVuIHNwZWNpZnlpbmcga0FUU1VDR0NvbnRleHRUYWcgKGNyYXNoZXMgd2hlbiBwYXNz
ZWQgMCkKKyAgICAvLyBBVFNVSSBkaXNhYmxlcyBzdWItcGl4ZWwgcmVuZGVyaW5nIGlmIGtBVFNV
Q0dDb250ZXh0VGFnIGlzIG5vdCBzcGVjaWZpZWQhICBTbyB3ZSdyZSBpbiBhIGJpbmQuCisgICAg
Ly8gU29tZXRpbWVzIFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNz
UG9ydF0gbWF5IHJldHVybiB0aGUgd3JvbmcgKG9yIG5vISkgY29udGV4dC4gIE5vdGhpbmcgd2Ug
Y2FuIGRvIGFib3V0IGl0ICh5ZXQpLgorICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSBncmFw
aGljc0NvbnRleHQgPyBncmFwaGljc0NvbnRleHQtPnBsYXRmb3JtQ29udGV4dCgpIDogKENHQ29u
dGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRd
OworICAgIAogICAgIEFUU0xpbmVMYXlvdXRPcHRpb25zIGxpbmVMYXlvdXRPcHRpb25zID0ga0FU
U0xpbmVLZWVwU3BhY2VzT3V0T2ZNYXJnaW4gfCBrQVRTTGluZUhhc05vSGFuZ2VyczsKICAgICBC
b29sZWFuIHJ0bCA9IG1fc3R5bGUucnRsKCk7CiAgICAgb3ZlcnJpZGVTcGVjaWZpZXIub3BlcmF0
aW9uU2VsZWN0b3IgPSBrQVRTVUxheW91dE9wZXJhdGlvblBvc3RMYXlvdXRBZGp1c3RtZW50OwpA
QCAtNDY3LDE4ICs0NzcsMTIgQEAgdm9pZCBGb250OjpkcmF3Q29tcGxleFRleHQoR3JhcGhpY3ND
b250ZQogCiAgICAgVGV4dFJ1biBhZGp1c3RlZFJ1biA9IHN0eWxlLmRpcmVjdGlvbmFsT3ZlcnJp
ZGUoKSA/IGFkZERpcmVjdGlvbmFsT3ZlcnJpZGUocnVuLCBzdHlsZS5ydGwoKSkgOiBydW47CiAg
ICAgQVRTVUxheW91dFBhcmFtZXRlcnMgcGFyYW1zKGFkanVzdGVkUnVuLCBzdHlsZSk7Ci0gICAg
cGFyYW1zLmluaXRpYWxpemUodGhpcyk7Ci0KLSAgICBbbnNDb2xvcihncmFwaGljc0NvbnRleHQt
PnBlbigpLmNvbG9yKCkpIHNldF07Ci0KKyAgICBwYXJhbXMuaW5pdGlhbGl6ZSh0aGlzLCBncmFw
aGljc0NvbnRleHQpOworICAgIAogICAgIC8vIEFUU1VJIGNhbid0IGRyYXcgYmV5b25kIC0zMjc2
OCB0byArMzI3Njcgc28gd2UgdHJhbnNsYXRlIHRoZSBDVE0gYW5kIHRlbGwgQVRTVUkgdG8gZHJh
dyBhdCAoMCwgMCkuCi0gICAgLy8gRklYTUU6IEN1dCB0aGUgZGVwZW5kZW5jeSBvbiBjdXJyZW50
Q29udGV4dCBoZXJlLgotICAgIE5TR3JhcGhpY3NDb250ZXh0ICpnQ29udGV4dCA9IFtOU0dyYXBo
aWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07Ci0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSAo
Q0dDb250ZXh0UmVmKVtnQ29udGV4dCBncmFwaGljc1BvcnRdOworICAgIENHQ29udGV4dFJlZiBj
b250ZXh0ID0gZ3JhcGhpY3NDb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBDR0NvbnRl
eHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY2dDb2xvcihncmFwaGljc0NvbnRleHQt
PnBlbigpLmNvbG9yKCkpKTsKICAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgcG9p
bnQueCgpLCBwb2ludC55KCkpOwotICAgIGJvb2wgZmxpcHBlZCA9IFtnQ29udGV4dCBpc0ZsaXBw
ZWRdOwotICAgIGlmICghZmxpcHBlZCkKLSAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4
dCwgMS4wLCAtMS4wKTsKICAgICBzdGF0dXMgPSBBVFNVRHJhd1RleHQocGFyYW1zLm1fbGF5b3V0
LCBhZGp1c3RlZFJ1bi5mcm9tKCksIHJ1bkxlbmd0aCwgMCwgMCk7CiAgICAgaWYgKHN0YXR1cyA9
PSBub0VyciAmJiBwYXJhbXMubV9oYXNTeW50aGV0aWNCb2xkKSB7CiAgICAgICAgIC8vIEZvcmNl
IHJlbGF5b3V0IGZvciB0aGUgYm9sZCBwYXNzCkBAIC00ODYsMTQgKzQ5MCwxMSBAQCB2b2lkIEZv
bnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgICAgIHBhcmFtcy5tX3N5bnRo
ZXRpY0JvbGRQYXNzID0gdHJ1ZTsKICAgICAgICAgc3RhdHVzID0gQVRTVURyYXdUZXh0KHBhcmFt
cy5tX2xheW91dCwgYWRqdXN0ZWRSdW4uZnJvbSgpLCBydW5MZW5ndGgsIDAsIDApOwogICAgIH0K
LSAgICBpZiAoIWZsaXBwZWQpCi0gICAgICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEu
MCwgLTEuMCk7CiAgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRleHQsIC1wb2ludC54KCks
IC1wb2ludC55KCkpOwogCi0gICAgaWYgKHN0YXR1cyAhPSBub0VycikgeworICAgIGlmIChzdGF0
dXMgIT0gbm9FcnIpCiAgICAgICAgIC8vIE5vdGhpbmcgdG8gZG8gYnV0IHJlcG9ydCB0aGUgZXJy
b3IgKGRldiBidWlsZCBvbmx5KS4KICAgICAgICAgTE9HX0VSUk9SKCJBVFNVRHJhd1RleHQoKSBm
YWlsZWQoJWQpIiwgc3RhdHVzKTsKLSAgICB9CiAKICAgICBkaXNwb3NlQVRTVUxheW91dFBhcmFt
ZXRlcnMoJnBhcmFtcyk7CiAgICAgCkBAIC01NTQsMTkgKzU1NSwxNiBAQCBpbnQgRm9udDo6b2Zm
c2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4CiAgICAgcmV0dXJuIG9mZnNldCAtIGFkanVzdGVk
UnVuLmZyb20oKTsKIH0KIAotdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCog
Y29udGV4dCwgY29uc3QgRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1
ZmZlciwgaW50IGZyb20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50KSBj
b25zdAordm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29udGV4dCogY29udGV4dCwgY29u
c3QgRm9udERhdGEqIGZvbnQsIGNvbnN0IEdseXBoQnVmZmVyJiBnbHlwaEJ1ZmZlciwgaW50IGZy
b20sIGludCBudW1HbHlwaHMsIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBib29sIHVzZVByaW50
ZXJGb250KSBjb25zdAogewotICAgIC8vIEZJWE1FOiBHcmFiIHRoZSBDR0NvbnRleHQgZnJvbSB0
aGUgR3JhcGhpY3NDb250ZXh0IGV2ZW50dWFsbHksIHdoZW4gd2UgaGF2ZSBtYWRlIHN1cmUgdG8g
c2hpZWxkIGFnYWluc3QgZmxpcHBpbmcgY2F1c2VkIGJ5IGNhbGxzIGludG8gdXMKLSAgICAvLyBm
cm9tIFNhZmFyaS4KLSAgICBOU0dyYXBoaWNzQ29udGV4dCAqZ0NvbnRleHQgPSBbTlNHcmFwaGlj
c0NvbnRleHQgY3VycmVudENvbnRleHRdOwotICAgIENHQ29udGV4dFJlZiBjZ0NvbnRleHQgPSAo
Q0dDb250ZXh0UmVmKVtnQ29udGV4dCBncmFwaGljc1BvcnRdOworICAgIENHQ29udGV4dFJlZiBj
Z0NvbnRleHQgPSBjb250ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKIAogICAgIGJvb2wgb3JpZ2lu
YWxTaG91bGRVc2VGb250U21vb3RoaW5nID0gd2tDR0NvbnRleHRHZXRTaG91bGRTbW9vdGhGb250
cyhjZ0NvbnRleHQpOwogICAgIENHQ29udGV4dFNldFNob3VsZFNtb290aEZvbnRzKGNnQ29udGV4
dCwgV2ViQ29yZVNob3VsZFVzZUZvbnRTbW9vdGhpbmcoKSk7CiAgICAgCiAgICAgY29uc3QgRm9u
dFBsYXRmb3JtRGF0YSYgcGxhdGZvcm1EYXRhID0gZm9udC0+cGxhdGZvcm1EYXRhKCk7CiAgICAg
TlNGb250KiBkcmF3Rm9udDsKLSAgICBpZiAoW2dDb250ZXh0IGlzRHJhd2luZ1RvU2NyZWVuXSkg
eworICAgIGlmICghdXNlUHJpbnRlckZvbnQpIHsKICAgICAgICAgZHJhd0ZvbnQgPSBbcGxhdGZv
cm1EYXRhLmZvbnQgc2NyZWVuRm9udF07CiAgICAgICAgIGlmIChkcmF3Rm9udCAhPSBwbGF0Zm9y
bURhdGEuZm9udCkKICAgICAgICAgICAgIC8vIFdlIGFyZSBnZXR0aW5nIHRoaXMgaW4gdG9vIG1h
bnkgcGxhY2VzICgzNDA2NDExKTsgdXNlIEVSUk9SIHNvIGl0IG9ubHkgcHJpbnRzIG9uIGRlYnVn
IHZlcnNpb25zIGZvciBub3cuIChXZSBzaG91bGQgZGVidWcgdGhpcyBhbHNvLCBldmVudHVhbGx5
KS4KQEAgLTU4MywxMCArNTgxLDggQEAgdm9pZCBGb250OjpkcmF3R2x5cGhzKEdyYXBoaWNzQ29u
dGV4dCogYwogCiAgICAgQ0dBZmZpbmVUcmFuc2Zvcm0gbWF0cml4OwogICAgIG1lbWNweSgmbWF0
cml4LCBbZHJhd0ZvbnQgbWF0cml4XSwgc2l6ZW9mKG1hdHJpeCkpOwotICAgIGlmIChbZ0NvbnRl
eHQgaXNGbGlwcGVkXSkgewotICAgICAgICBtYXRyaXguYiA9IC1tYXRyaXguYjsKLSAgICAgICAg
bWF0cml4LmQgPSAtbWF0cml4LmQ7Ci0gICAgfQorICAgIG1hdHJpeC5iID0gLW1hdHJpeC5iOwor
ICAgIG1hdHJpeC5kID0gLW1hdHJpeC5kOwogICAgIGlmIChwbGF0Zm9ybURhdGEuc3ludGhldGlj
T2JsaXF1ZSkKICAgICAgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4
LCBDR0FmZmluZVRyYW5zZm9ybU1ha2UoMSwgMCwgLXRhbmYoU1lOVEhFVElDX09CTElRVUVfQU5H
TEUgKiBhY29zZigwKSAvIDkwKSwgMSwgMCwgMCkpOyAKICAgICBDR0NvbnRleHRTZXRUZXh0TWF0
cml4KGNnQ29udGV4dCwgbWF0cml4KTsKQEAgLTU5NCw3ICs1OTAsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBjCiAgICAgd2tTZXRDR0ZvbnRSZW5kZXJpbmdNb2Rl
KGNnQ29udGV4dCwgZHJhd0ZvbnQpOwogICAgIENHQ29udGV4dFNldEZvbnRTaXplKGNnQ29udGV4
dCwgMS4wZik7CiAKLSAgICBbbnNDb2xvcihjb250ZXh0LT5wZW4oKS5jb2xvcigpKSBzZXRdOwor
ICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjZ0NvbnRleHQsIGNnQ29sb3IoY29u
dGV4dC0+cGVuKCkuY29sb3IoKSkpOyAvLyBXZWJDb3JlIGV4cGVjdHMgdGV4dCB0byByZXNwZWN0
IHRoZSBwZW4gY29sb3IsIENHIGV4cGVjdHMgdGV4dCB0byB1c2UgZmlsbAogCiAgICAgQ0dDb250
ZXh0U2V0VGV4dFBvc2l0aW9uKGNnQ29udGV4dCwgcG9pbnQueCgpLCBwb2ludC55KCkpOwogICAg
IENHQ29udGV4dFNob3dHbHlwaHNXaXRoQWR2YW5jZXMoY2dDb250ZXh0LCBnbHlwaEJ1ZmZlci5n
bHlwaHMoZnJvbSksIGdseXBoQnVmZmVyLmFkdmFuY2VzKGZyb20pLCBudW1HbHlwaHMpOwpJbmRl
eDogcGxhdGZvcm0vbWFjL0dyYXBoaWNzQ29udGV4dE1hYy5tbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0
Zm9ybS9tYWMvR3JhcGhpY3NDb250ZXh0TWFjLm1tCShyZXZpc2lvbiAxNjI3MSkKKysrIHBsYXRm
b3JtL21hYy9HcmFwaGljc0NvbnRleHRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNCw2ICsx
MzQsOSBAQCB2b2lkIEdyYXBoaWNzQ29udGV4dDo6ZHJhd0xpbmVGb3JNaXNzcGVsCiAgICAgICAg
ICAgICB3aWR0aCAtPSB3aWR0aE1vZDsKICAgICB9CiAgICAgCisgICAgLy8gRklYTUU6IFRoaXMg
Y29kZSBzaG91bGQgbm90IHVzZSBOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dAorICAg
IC8vIEluIG9yZGVyIHRvIHJlbW92ZSB0aGlzIHJlcXVpcmVtZW50IHdlIHdpbGwgbmVlZCB0byB1
c2UgQ0dQYXR0ZXJuIGluc3RlYWQgb2YgTlNDb2xvcgorICAgIAogICAgIC8vIERyYXcgdW5kZXJs
aW5lCiAgICAgTlNHcmFwaGljc0NvbnRleHQgKmN1cnJlbnRDb250ZXh0ID0gW05TR3JhcGhpY3ND
b250ZXh0IGN1cnJlbnRDb250ZXh0XTsKICAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IChDR0Nv
bnRleHRSZWYpW2N1cnJlbnRDb250ZXh0IGdyYXBoaWNzUG9ydF07CkluZGV4OiBwbGF0Zm9ybS9t
YWMvTGlzdEJveE1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBwbGF0Zm9ybS9tYWMvTGlzdEJveE1hYy5t
bQkocmV2aXNpb24gMTYyNzEpCisrKyBwbGF0Zm9ybS9tYWMvTGlzdEJveE1hYy5tbQkod29ya2lu
ZyBjb3B5KQpAQCAtNjU5LDkgKzY1OSwxMiBAQCBzdGF0aWMgQm9vbGVhbiBMaXN0Qm94VHlwZVNl
bGVjdENhbGxiYWNrCiAKIC0gKHZvaWQpZHJhd1JvdzooaW50KXJvdyBjbGlwUmVjdDooTlNSZWN0
KWNsaXBSZWN0CiB7Ci0gICAgaWYgKCFfYm94KSB7CisgICAgaWYgKCFfYm94KQogICAgICAgICBy
ZXR1cm47Ci0gICAgfQorICAgIAorICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4
dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwor
ICAgIEFTU0VSVChbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBpc0ZsaXBwZWRd
KTsKKyAgICBHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0KGNvbnRleHQpOwogCiAgICAg
Y29uc3QgTGlzdEJveEl0ZW0gJml0ZW0gPSBfYm94LT5pdGVtQXRJbmRleChyb3cpOwogCkBAIC02
ODAsMTEgKzY4MywxMSBAQCBzdGF0aWMgQm9vbGVhbiBMaXN0Qm94VHlwZVNlbGVjdENhbGxiYWNr
CiAKICAgICBib29sIGRlbGV0ZVJlbmRlcmVyID0gZmFsc2U7CiAgICAgY29uc3QgRm9udCogcmVu
ZGVyZXI7Ci0gICAgaWYgKGlzU3lzdGVtRm9udCkgewotICAgICAgICBSZW5kZXJXaWRnZXQgKmNs
aWVudCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdldCAqPihbc2VsZiB3aWRnZXRdLT5jbGllbnQo
KSk7Ci0gICAgICAgIGJvb2wgaXNQcmludGluZyA9IGNsaWVudC0+dmlldygpLT5wcmludGluZ01v
ZGUoKTsKKyAgICBSZW5kZXJXaWRnZXQgKmNsaWVudCA9IHN0YXRpY19jYXN0PFJlbmRlcldpZGdl
dCAqPihbc2VsZiB3aWRnZXRdLT5jbGllbnQoKSk7CisgICAgYm9vbCBpc1ByaW50aW5nID0gY2xp
ZW50LT52aWV3KCktPnByaW50aW5nTW9kZSgpOworICAgIGlmIChpc1N5c3RlbUZvbnQpCiAgICAg
ICAgIHJlbmRlcmVyID0gKGl0ZW0udHlwZSA9PSBMaXN0Qm94R3JvdXBMYWJlbCkgPyBncm91cExh
YmVsVGV4dFJlbmRlcmVyKGlzUHJpbnRpbmcpIDogaXRlbVRleHRSZW5kZXJlcihpc1ByaW50aW5n
KTsKLSAgICB9IGVsc2UgeworICAgIGVsc2UgewogICAgICAgICBpZiAoaXRlbS50eXBlID09IExp
c3RCb3hHcm91cExhYmVsKSB7CiAgICAgICAgICAgICBkZWxldGVSZW5kZXJlciA9IHRydWU7CiAg
ICAgICAgICAgICBGb250RGVzY3JpcHRpb24gYm9sZERlc2MgPSBfYm94LT5mb250KCkuZm9udERl
c2NyaXB0aW9uKCk7CkBAIC02OTksNiArNzAyLDcgQEAgc3RhdGljIEJvb2xlYW4gTGlzdEJveFR5
cGVTZWxlY3RDYWxsYmFjawogICAgIFdlYkNvcmU6OlRleHRTdHlsZSBzdHlsZTsKICAgICBzdHls
ZS5zZXRSVEwocnRsKTsKICAgICBzdHlsZS5kaXNhYmxlUm91bmRpbmdIYWNrcygpOworICAgIHN0
eWxlLnNldFVzZVByaW50ZXJGb250cyhpc1ByaW50aW5nKTsKIAogICAgIFRleHRSdW4gcnVuKHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVW5pQ2hhciAqPihpdGVtLnN0cmluZy51bmljb2RlKCkpLCBp
dGVtLnN0cmluZy5sZW5ndGgoKSk7CiAgICAgCkBAIC03MTAsOCArNzE0LDYgQEAgc3RhdGljIEJv
b2xlYW4gTGlzdEJveFR5cGVTZWxlY3RDYWxsYmFjawogICAgICAgICBwb2ludC5zZXRYKE5TTWF4
WChjZWxsUmVjdCkgLSByaWdodE1hcmdpbiAtIHJlbmRlcmVyLT5mbG9hdFdpZHRoKHJ1biwgc3R5
bGUpKTsKICAgICBwb2ludC5zZXRZKE5TTWF4WShjZWxsUmVjdCkgLSByZW5kZXJlci0+ZGVzY2Vu
dCgpIC0gYm90dG9tTWFyZ2luKTsKIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29u
dGV4dFJlZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRd
OwotICAgIEdyYXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY29udGV4dCk7CiAgICAgQ0dG
bG9hdCByZWQsIGdyZWVuLCBibHVlLCBhbHBoYTsKICAgICBbW2NvbG9yIGNvbG9yVXNpbmdDb2xv
clNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdIGdldFJlZDomcmVkIGdyZWVuOiZncmVl
biBibHVlOiZibHVlIGFscGhhOiZhbHBoYV07CiAgICAgZ3JhcGhpY3NDb250ZXh0LnNldFBlbiht
YWtlUkdCQSgoaW50KShyZWQgKiAyNTUpLCAoaW50KShncmVlbiAqIDI1NSksIChpbnQpKGJsdWUg
KiAyNTUpLCAoaW50KShhbHBoYSAqIDI1NSkpKTsKSW5kZXg6IHBsYXRmb3JtL21hYy9XZWJDb3Jl
VGV4dFJlbmRlcmVyLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJl
bmRlcmVyLm1tCShyZXZpc2lvbiAxNjI3MSkKKysrIHBsYXRmb3JtL21hYy9XZWJDb3JlVGV4dFJl
bmRlcmVyLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNywxNyArMzcsMjYgQEAgdXNpbmcgbmFtZXNw
YWNlIFdlYkNvcmU7CiAKIHZvaWQgV2ViQ29yZURyYXdUZXh0QXRQb2ludChjb25zdCBVbmlDaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGxlbmd0aCwgTlNQb2ludCBwb2ludCwgTlNGb250KiBmb250LCBO
U0NvbG9yKiB0ZXh0Q29sb3IpCiB7CisgICAgTlNHcmFwaGljc0NvbnRleHQgKm5zQ29udGV4dCA9
IFtOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF07CisgICAgQ0dDb250ZXh0UmVmIGNn
Q29udGV4dCA9IChDR0NvbnRleHRSZWYpW25zQ29udGV4dCBncmFwaGljc1BvcnRdOworICAgIEdy
YXBoaWNzQ29udGV4dCBncmFwaGljc0NvbnRleHQoY2dDb250ZXh0KTsgICAgCisgICAgLy8gU2Fm
YXJpIGRvZXNuJ3QgZmxpcCB0aGUgTlNHcmFwaGljc0NvbnRleHQgYmVmb3JlIGNhbGxpbmcgV2Vi
S2l0LCB5ZXQgV2ViQ29yZSByZXF1aXJlcyBhIGZsaXBwZWQgZ3JhcGhpY3MgY29udGV4dC4KKyAg
ICBCT09MIGZsaXBwZWQgPSBbbnNDb250ZXh0IGlzRmxpcHBlZF07CisgICAgaWYgKCFmbGlwcGVk
KQorICAgICAgICBDR0NvbnRleHRTY2FsZUNUTShjZ0NvbnRleHQsIDEuMCwgLTEuMCk7CisgICAg
CiAgICAgRm9udFBsYXRmb3JtRGF0YSBmKGZvbnQpOwogICAgIEZvbnQgcmVuZGVyZXIoZik7CiAg
ICAgVGV4dFJ1biBydW4oYnVmZmVyLCBsZW5ndGgpOwogICAgIFRleHRTdHlsZSBzdHlsZTsKICAg
ICBzdHlsZS5kaXNhYmxlUm91bmRpbmdIYWNrcygpOworICAgIHN0eWxlLnNldFVzZVByaW50ZXJG
b250cyghW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gaXNEcmF3aW5nVG9TY3Jl
ZW5dKTsKICAgICBDR0Zsb2F0IHJlZCwgZ3JlZW4sIGJsdWUsIGFscGhhOwogICAgIFtbdGV4dENv
bG9yIGNvbG9yVXNpbmdDb2xvclNwYWNlTmFtZTpOU0RldmljZVJHQkNvbG9yU3BhY2VdIGdldFJl
ZDomcmVkIGdyZWVuOiZncmVlbiBibHVlOiZibHVlIGFscGhhOiZhbHBoYV07Ci0gICAgQ0dDb250
ZXh0UmVmIGNvbnRleHQgPSAoQ0dDb250ZXh0UmVmKVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdIGdyYXBoaWNzUG9ydF07Ci0gICAgR3JhcGhpY3NDb250ZXh0IGdyYXBoaWNzQ29u
dGV4dChjb250ZXh0KTsKICAgICBncmFwaGljc0NvbnRleHQuc2V0UGVuKG1ha2VSR0JBKChpbnQp
KHJlZCAqIDI1NSksIChpbnQpKGdyZWVuICogMjU1KSwgKGludCkoYmx1ZSAqIDI1NSksIChpbnQp
KGFscGhhICogMjU1KSkpOwogICAgIHJlbmRlcmVyLmRyYXdUZXh0KCZncmFwaGljc0NvbnRleHQs
IHJ1biwgc3R5bGUsIEZsb2F0UG9pbnQocG9pbnQueCwgcG9pbnQueSkpOworICAgIGlmICghZmxp
cHBlZCkKKyAgICAgICAgQ0dDb250ZXh0U2NhbGVDVE0oY2dDb250ZXh0LCAxLjAsIC0xLjApOwog
fQogCiBmbG9hdCBXZWJDb3JlVGV4dEZsb2F0V2lkdGgoY29uc3QgVW5pQ2hhciogYnVmZmVyLCB1
bnNpZ25lZCBsZW5ndGggLCBOU0ZvbnQqIGZvbnQpCkluZGV4OiByZW5kZXJpbmcvRWxsaXBzaXNC
b3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9FbGxpcHNpc0JveC5jcHAJKHJldmlzaW9u
IDE2MjcxKQorKysgcmVuZGVyaW5nL0VsbGlwc2lzQm94LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjMsNiArMjMsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkVsbGlwc2lzQm94
LmgiCiAKKyNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIlRleHRTdHlsZS5oIgogCkBAIC00Niw3ICs0Nyw5IEBAIHZvaWQgRWxsaXBz
aXNCb3g6OnBhaW50KFJlbmRlck9iamVjdDo6UGEKICAgICB9CiAKICAgICBjb25zdCBTdHJpbmcm
IHN0ciA9IG1fc3RyOwotICAgIHAtPmRyYXdUZXh0KFRleHRSdW4oc3RyLmltcGwoKSksIEludFBv
aW50KG1feCArIF90eCwgbV95ICsgX3R5ICsgbV9iYXNlbGluZSksIFRleHRTdHlsZSgwLCAwLCAw
LCBmYWxzZSwgX3N0eWxlLT52aXN1YWxseU9yZGVyZWQoKSkpOworICAgIFRleHRTdHlsZSB0ZXh0
U3R5bGUoMCwgMCwgMCwgZmFsc2UsIF9zdHlsZS0+dmlzdWFsbHlPcmRlcmVkKCkpOworICAgIHRl
eHRTdHlsZS5zZXRVc2VQcmludGVyRm9udHMob2JqZWN0KCktPmRvY3VtZW50KCktPnByaW50aW5n
KCkpOworICAgIHAtPmRyYXdUZXh0KFRleHRSdW4oc3RyLmltcGwoKSksIEludFBvaW50KG1feCAr
IF90eCwgbV95ICsgX3R5ICsgbV9iYXNlbGluZSksIHRleHRTdHlsZSk7CiAKICAgICBpZiAoc2V0
U2hhZG93KQogICAgICAgICBwLT5jbGVhclNoYWRvdygpOwpJbmRleDogcmVuZGVyaW5nL0lubGlu
ZVRleHRCb3guY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIHJlbmRlcmluZy9JbmxpbmVUZXh0Qm94LmNwcAko
cmV2aXNpb24gMTYyNzEpCisrKyByZW5kZXJpbmcvSW5saW5lVGV4dEJveC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM0NCw2ICszNDQsNyBAQCB2b2lkIElubGluZVRleHRCb3g6OnBhaW50KFJlbmRl
ck9iamVjdDo6CiAgICAgU3RyaW5nSW1wbCogdGV4dFN0ciA9IHRleHRPYmplY3QoKS0+c3RyaW5n
KCk7CiAKICAgICBUZXh0U3R5bGUgdGV4dFN0eWxlKHRleHRPYmplY3QoKS0+dGFiV2lkdGgoKSwg
dGV4dFBvcygpLCBtX3RvQWRkLCBtX3JldmVyc2VkLCBtX2Rpck92ZXJyaWRlIHx8IHN0eWxlVG9V
c2UtPnZpc3VhbGx5T3JkZXJlZCgpKTsKKyAgICB0ZXh0U3R5bGUuc2V0VXNlUHJpbnRlckZvbnRz
KGlzUHJpbnRpbmcpOwogCiAgICAgaWYgKCFwYWludFNlbGVjdGVkVGV4dE9ubHkgJiYgIXBhaW50
U2VsZWN0ZWRUZXh0U2VwYXJhdGVseSkgewogICAgICAgICAvLyBwYWludCBhbGwgdGhlIHRleHQK
SW5kZXg6IHJlbmRlcmluZy9SZW5kZXJJbWFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gcmVuZGVyaW5n
L1JlbmRlckltYWdlLmNwcAkocmV2aXNpb24gMTYyNzEpCisrKyByZW5kZXJpbmcvUmVuZGVySW1h
Z2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiSFRNTE1h
cEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJSZW5kZXJWaWV3
LmgiCisjaW5jbHVkZSAiVGV4dFN0eWxlLmgiCiAKIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAg
LTI1MywxMiArMjU0LDE0IEBAIHZvaWQgUmVuZGVySW1hZ2U6OnBhaW50KFBhaW50SW5mbyYgaSwg
aW4KICAgICAgICAgICAgICAgICAvLyBPbmx5IGRyYXcgdGhlIGFsdCB0ZXh0IGlmIGl0J2xsIGZp
dCB3aXRoaW4gdGhlIGNvbnRlbnQgYm94LAogICAgICAgICAgICAgICAgIC8vIGFuZCBvbmx5IGlm
IGl0IGZpdHMgYWJvdmUgdGhlIGVycm9yIGltYWdlLgogICAgICAgICAgICAgICAgIFRleHRSdW4g
dGV4dFJ1bihyZWludGVycHJldF9jYXN0PGNvbnN0IFVDaGFyKj4odGV4dC51bmljb2RlKCkpLCB0
ZXh0Lmxlbmd0aCgpKTsKKyAgICAgICAgICAgICAgICBUZXh0U3R5bGUgdGV4dFN0eWxlOworICAg
ICAgICAgICAgICAgIHRleHRTdHlsZS5zZXRVc2VQcmludGVyRm9udHModmlldygpLT5wcmludGlu
Z01vZGUoKSk7CiAgICAgICAgICAgICAgICAgaW50IHRleHRXaWR0aCA9IGZvbnQud2lkdGgodGV4
dFJ1bik7CiAgICAgICAgICAgICAgICAgaWYgKGVycm9yUGljdHVyZURyYXduKSB7CiAgICAgICAg
ICAgICAgICAgICAgIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0V2lkdGggJiYgZm9udC5oZWlnaHQo
KSA8PSBpbWFnZVkpCi0gICAgICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVu
LCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHAt
PmRyYXdUZXh0KHRleHRSdW4sIEludFBvaW50KGF4LCBheSArIGFzY2VudCksIHRleHRTdHlsZSk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh1c2FibGVXaWR0aCA+PSB0ZXh0V2lkdGggJiYg
Y0hlaWdodCA+PSBmb250LmhlaWdodCgpKQotICAgICAgICAgICAgICAgICAgICBwLT5kcmF3VGV4
dCh0ZXh0UnVuLCBJbnRQb2ludChheCwgYXkgKyBhc2NlbnQpKTsKKyAgICAgICAgICAgICAgICAg
ICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgSW50UG9pbnQoYXgsIGF5ICsgYXNjZW50KSwgdGV4dFN0
eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSBpZiAobV9jYWNoZWRJ
bWFnZSkgewpJbmRleDogcmVuZGVyaW5nL1JlbmRlckxpc3RNYXJrZXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIHJlbmRlcmluZy9SZW5kZXJMaXN0TWFya2VyLmNwcAkocmV2aXNpb24gMTYyNzEpCisrKyBy
ZW5kZXJpbmcvUmVuZGVyTGlzdE1hcmtlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJMaXN0TWFya2VyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyVmlldy5o
IgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCisjaW5jbHVkZSAiVGV4dFN0eWxlLmgiCiAK
IHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKQEAgLTIzMSwxNyArMjMyLDE5IEBAIHZvaWQgUmVuZGVy
TGlzdE1hcmtlcjo6cGFpbnQoUGFpbnRJbmZvJiAKICAgICAgICAgaWYgKCFtX2l0ZW0uaXNFbXB0
eSgpKSB7CiAgICAgICAgICAgICBjb25zdCBGb250JiBmb250ID0gc3R5bGUoKS0+Zm9udCgpOwog
ICAgICAgICAgICAgVGV4dFJ1biB0ZXh0UnVuKHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgVUNoYXIq
PihtX2l0ZW0udW5pY29kZSgpKSwgbV9pdGVtLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIFRleHRT
dHlsZSB0ZXh0U3R5bGU7CisgICAgICAgICAgICB0ZXh0U3R5bGUuc2V0VXNlUHJpbnRlckZvbnRz
KHZpZXcoKS0+cHJpbnRpbmdNb2RlKCkpOwogICAgICAgICAgICAgaWYgKHN0eWxlKCktPmRpcmVj
dGlvbigpID09IExUUikgewogICAgICAgICAgICAgICAgIGludCB3aWR0aCA9IGZvbnQud2lkdGgo
dGV4dFJ1bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFya2VyLmxv
Y2F0aW9uKCkpOworICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KHRleHRSdW4sIG1hcmtlci5s
b2NhdGlvbigpLCB0ZXh0U3R5bGUpOwogICAgICAgICAgICAgICAgIFVDaGFyIHBlcmlvZFNwYWNl
WzJdID0geyAnLicsICcgJyB9OwotICAgICAgICAgICAgICAgIHAtPmRyYXdUZXh0KFRleHRSdW4o
cGVyaW9kU3BhY2UsIDIpLCBtYXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsK
KyAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dChUZXh0UnVuKHBlcmlvZFNwYWNlLCAyKSwgbWFy
a2VyLmxvY2F0aW9uKCkgKyBJbnRTaXplKHdpZHRoLCAwKSwgdGV4dFN0eWxlKTsKICAgICAgICAg
ICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgVUNoYXIgc3BhY2VQZXJpb2RbMl0gPSB7ICcg
JywgJy4nIH07CiAgICAgICAgICAgICAgICAgVGV4dFJ1biBzcGFjZVBlcmlvZFJ1bihzcGFjZVBl
cmlvZCwgMik7CiAgICAgICAgICAgICAgICAgaW50IHdpZHRoID0gZm9udC53aWR0aChzcGFjZVBl
cmlvZFJ1bik7Ci0gICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQoc3BhY2VQZXJpb2RSdW4sIG1h
cmtlci5sb2NhdGlvbigpKTsKLSAgICAgICAgICAgICAgICBwLT5kcmF3VGV4dCh0ZXh0UnVuLCBt
YXJrZXIubG9jYXRpb24oKSArIEludFNpemUod2lkdGgsIDApKTsKKyAgICAgICAgICAgICAgICBw
LT5kcmF3VGV4dChzcGFjZVBlcmlvZFJ1biwgbWFya2VyLmxvY2F0aW9uKCksIHRleHRTdHlsZSk7
CisgICAgICAgICAgICAgICAgcC0+ZHJhd1RleHQodGV4dFJ1biwgbWFya2VyLmxvY2F0aW9uKCkg
KyBJbnRTaXplKHdpZHRoLCAwKSwgdGV4dFN0eWxlKTsKICAgICAgICAgICAgIH0KICAgICAgICAg
fQogICAgIH0KSW5kZXg6IHJlbmRlcmluZy9SZW5kZXJUaGVtZU1hYy5tbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSByZW5kZXJpbmcvUmVuZGVyVGhlbWVNYWMubW0JKHJldmlzaW9uIDE2MjcxKQorKysgcmVuZGVy
aW5nL1JlbmRlclRoZW1lTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw2ICszNywzMyBAQAog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKKy8vIFRoaXMgY2xhc3MgYXV0b21hdGljYWxseSBzYXZl
cyBhbmQgcmVzdG9yZXMgdGhlIGN1cnJlbnQgTlNHcmFwaGljc0NvbnRleHQgZm9yCisvLyBmdW5j
dGlvbnMgd2hpY2ggY2FsbCBvdXQgaW50byBBcHBLaXQgYW5kIHJlbHkgb24gdGhlIGN1cnJlbnRD
b250ZXh0IGJlaW5nIHNldAorY2xhc3MgQ3VycmVudEdyYXBoaWNzQ29udGV4dFNldHRlciB7Citw
dWJsaWM6CisgICAgQ3VycmVudEdyYXBoaWNzQ29udGV4dFNldHRlcihHcmFwaGljc0NvbnRleHQq
IGdyYXBoaWNzQ29udGV4dCkKKyAgICB7CisgICAgICAgIGlmIChncmFwaGljc0NvbnRleHQtPnBs
YXRmb3JtQ29udGV4dCgpID09IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdy
YXBoaWNzUG9ydF0pIHsKKyAgICAgICAgICAgIG1fc2F2ZWROU0dyYXBoaWNzQ29udGV4dCA9IDA7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCisgICAgICAgIG1fc2F2
ZWROU0dyYXBoaWNzQ29udGV4dCA9IFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRd
IHJldGFpbl07CisgICAgICAgIE5TR3JhcGhpY3NDb250ZXh0KiBuZXdDb250ZXh0ID0gW05TR3Jh
cGhpY3NDb250ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Z3JhcGhpY3NDb250
ZXh0LT5wbGF0Zm9ybUNvbnRleHQoKSBmbGlwcGVkOllFU107CisgICAgICAgIFtOU0dyYXBoaWNz
Q29udGV4dCBzZXRDdXJyZW50Q29udGV4dDpuZXdDb250ZXh0XTsKKyAgICB9CisgICAgfkN1cnJl
bnRHcmFwaGljc0NvbnRleHRTZXR0ZXIoKQorICAgIHsKKyAgICAgICAgaWYgKG1fc2F2ZWROU0dy
YXBoaWNzQ29udGV4dCkgeworICAgICAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHNldEN1cnJl
bnRDb250ZXh0Om1fc2F2ZWROU0dyYXBoaWNzQ29udGV4dF07CisgICAgICAgICAgICBbbV9zYXZl
ZE5TR3JhcGhpY3NDb250ZXh0IHJlbGVhc2VdOworICAgICAgICB9CisgICAgfQorCitwcml2YXRl
OgorICAgIE5TR3JhcGhpY3NDb250ZXh0KiBtX3NhdmVkTlNHcmFwaGljc0NvbnRleHQ7Cit9Owor
CiBlbnVtIHsKICAgICB0b3BNYXJnaW4sCiAgICAgcmlnaHRNYXJnaW4sCkBAIC01OTIsMTAgKzYx
OSw5IEBAIHZvaWQgUmVuZGVyVGhlbWVNYWM6OnNldEJ1dHRvbkNlbGxTdGF0ZSgKICAgICB1cGRh
dGVGb2N1c2VkU3RhdGUoYnV0dG9uLCBvKTsKIH0KIAotYm9vbCBSZW5kZXJUaGVtZU1hYzo6cGFp
bnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYs
IGNvbnN0IEludFJlY3QmIHIpCi17ICAgIAotICAgIC8vIEZJWE1FOiBJZ25vcmVzIHRoZSBHcmFw
aGljc0NvbnRleHQgaW4gdGhlIFBhaW50SW5mbyBhbmQgYWx3YXlzIGRyYXdzIGludG8gdGhlIGN1
cnJlbnQKLSAgICAvLyBOU0dyYXBoaWNzQ29udGV4dCBpbnN0ZWFkLgorYm9vbCBSZW5kZXJUaGVt
ZU1hYzo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBh
aW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByKQoreworICAgIEN1cnJlbnRHcmFw
aGljc0NvbnRleHRTZXR0ZXIgY3VycmVudEdyYXBoaWNzQ29udGV4dFNldHRlcihwYWludEluZm8u
cCk7CiAKICAgICAvLyBEZXRlcm1pbmUgdGhlIHdpZHRoIGFuZCBoZWlnaHQgbmVlZGVkIGZvciB0
aGUgY29udHJvbCBhbmQgcHJlcGFyZSB0aGUgY2VsbCBmb3IgcGFpbnRpbmcuCiAgICAgc2V0QnV0
dG9uQ2VsbFN0YXRlKG8sIHIpOwpAQCAtNjIyLDEwICs2NDgsOSBAQCBib29sIFJlbmRlclRoZW1l
TWFjOjpwYWludEJ1dHRvbihSZW5kZXJPCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFJl
bmRlclRoZW1lTWFjOjpwYWludFRleHRGaWVsZChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFJlbmRl
ck9iamVjdDo6UGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYgcikKK2Jvb2wgUmVuZGVyVGhlbWVN
YWM6OnBhaW50VGV4dEZpZWxkKFJlbmRlck9iamVjdCogbywgY29uc3QgUmVuZGVyT2JqZWN0OjpQ
YWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcikKIHsKLSAgICAvLyBGSVhNRTog
SWdub3JlcyB0aGUgR3JhcGhpY3NDb250ZXh0IGluIHRoZSBQYWludEluZm8gYW5kIGFsd2F5cyBk
cmF3cyBpbnRvIHRoZSBjdXJyZW50Ci0gICAgLy8gTlNHcmFwaGljc0NvbnRleHQgaW5zdGVhZC4K
KyAgICBDdXJyZW50R3JhcGhpY3NDb250ZXh0U2V0dGVyIGN1cnJlbnRHcmFwaGljc0NvbnRleHRT
ZXR0ZXIocGFpbnRJbmZvLnApOwogICAgIHdrRHJhd0JlemVsZWRUZXh0RmllbGRDZWxsKHIsIGlz
RW5hYmxlZChvKSAmJiAhaXNSZWFkT25seUNvbnRyb2wobykpOwogICAgIHJldHVybiBmYWxzZTsK
IH0KQEAgLTYzNywxMCArNjYyLDkgQEAgdm9pZCBSZW5kZXJUaGVtZU1hYzo6YWRqdXN0VGV4dEZp
ZWxkU3R5bAogICAgICAgICBhZGRJbnRyaW5zaWNNYXJnaW5zKHN0eWxlLCBOU1JlZ3VsYXJDb250
cm9sU2l6ZSk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVNYWM6OnBhaW50VGV4dEFyZWEoUmVuZGVy
T2JqZWN0KiBvLCBjb25zdCBSZW5kZXJPYmplY3Q6OlBhaW50SW5mbyYsIGNvbnN0IEludFJlY3Qm
IHIpCitib29sIFJlbmRlclRoZW1lTWFjOjpwYWludFRleHRBcmVhKFJlbmRlck9iamVjdCogbywg
Y29uc3QgUmVuZGVyT2JqZWN0OjpQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYg
cikKIHsKLSAgICAvLyBGSVhNRTogSWdub3JlcyB0aGUgR3JhcGhpY3NDb250ZXh0IGluIHRoZSBQ
YWludEluZm8gYW5kIGFsd2F5cyBkcmF3cyBpbnRvIHRoZSBjdXJyZW50Ci0gICAgLy8gTlNHcmFw
aGljc0NvbnRleHQgaW5zdGVhZC4KKyAgICBDdXJyZW50R3JhcGhpY3NDb250ZXh0U2V0dGVyIGN1
cnJlbnRHcmFwaGljc0NvbnRleHRTZXR0ZXIocGFpbnRJbmZvLnApOwogICAgIHdrRHJhd0JlemVs
ZWRUZXh0QXJlYShyLCBpc0VuYWJsZWQobykgJiYgIWlzUmVhZE9ubHlDb250cm9sKG8pKTsKICAg
ICByZXR1cm4gZmFsc2U7CiB9Cg==
</data>
<flag name="review"
          id="3370"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>