<?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>86922</bug_id>
          
          <creation_ts>2012-05-18 16:36:58 -0700</creation_ts>
          <short_desc>[Chromium-Android] Run DumpRenderTree as an apk (C++ and gyp part)</short_desc>
          <delta_ts>2012-05-22 21:13:34 -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>Tools / Tests</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>86862</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Xianzhu Wang">wangxianzhu</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>dpranke</cc>
    
    <cc>jnd</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>zhenghao</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>628248</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-18 16:36:58 -0700</bug_when>
    <thetext>C++ and gyp part of patch for bug 86862.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628263</commentid>
    <comment_count>1</comment_count>
      <attachid>142821</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-18 16:53:27 -0700</bug_when>
    <thetext>Created attachment 142821
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>628697</commentid>
    <comment_count>2</comment_count>
      <attachid>142821</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-20 18:28:48 -0700</bug_when>
    <thetext>Comment on attachment 142821
patch

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

Looks ok.

&gt; Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:83
&gt; +                &apos;ImageDiff&apos;,
&gt; +                &apos;TestNetscapePlugIn&apos;,
&gt; +                &apos;copy_TestNetscapePlugIn&apos;,

Why did you move them to here?  It looks a unnecessary change.

&gt; Tools/DumpRenderTree/chromium/TestShellAndroid.cpp:45
&gt; +const char optionInFifo[] = &quot;--in-fifo=&quot;;
&gt; +const char optionOutFifo[] = &quot;--out-fifo=&quot;;

should be optionInFIFO and optionOutFIFO.
http://www.webkit.org/coding/coding-style.html#names-basic

&gt; Tools/DumpRenderTree/chromium/TestShellAndroid.cpp:87
&gt; +    const char* inFifo = 0;
&gt; +    const char* outFifo = 0;

should be inFIFO and outFIFO.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>629219</commentid>
    <comment_count>3</comment_count>
      <attachid>142821</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2012-05-21 10:05:22 -0700</bug_when>
    <thetext>Comment on attachment 142821
patch

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

&gt; Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:196
&gt; +                [&apos;os_posix!=1 or OS==&quot;mac&quot;&apos;, {
&gt; +                    &apos;sources/&apos;: [
&gt; +                        [&apos;exclude&apos;, &apos;Posix\\.cpp$&apos;],

It&apos;s confusing to have os_posix include mac but the Posix.cpp file exclude mac, but I&apos;m not sure of a better name for Linux or Android.

&gt; Tools/DumpRenderTree/chromium/TestShellX11.cpp:36
&gt;  #if USE(GTK)

Is this file used by aura and gtk? Should we merge TestShellGtk.cpp into this file (it&apos;s only like 12 lines of code) and put it behind an #if USE(GTK)?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630739</commentid>
    <comment_count>4</comment_count>
      <attachid>143359</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-22 14:15:47 -0700</bug_when>
    <thetext>Created attachment 143359
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630745</commentid>
    <comment_count>5</comment_count>
      <attachid>142821</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-22 14:16:31 -0700</bug_when>
    <thetext>Comment on attachment 142821
patch

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

&gt;&gt; Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:83
&gt;&gt; +                &apos;copy_TestNetscapePlugIn&apos;,
&gt; 
&gt; Why did you move them to here?  It looks a unnecessary change.

These had been there before http://trac.webkit.org/changeset/95171. We put the dependencies into the &apos;else&apos; part of OS==&quot;android&quot; because at some time gyp didn&apos;t support excluding from dependencies. Now it is supported so I changed this to &apos;include all then exclude&apos; style which is clearer and normally used in gyp files.

&gt;&gt; Tools/DumpRenderTree/DumpRenderTree.gyp/DumpRenderTree.gyp:196
&gt;&gt; +                        [&apos;exclude&apos;, &apos;Posix\\.cpp$&apos;],
&gt; 
&gt; It&apos;s confusing to have os_posix include mac but the Posix.cpp file exclude mac, but I&apos;m not sure of a better name for Linux or Android.

In chromium there are also some places using such style (on mac some posix source files are excluded).
Actually the code in Posix.cpp file works on Mac. It is excluded just because Mac has a better implementation.

&gt;&gt; Tools/DumpRenderTree/chromium/TestShellAndroid.cpp:45
&gt;&gt; +const char optionOutFifo[] = &quot;--out-fifo=&quot;;
&gt; 
&gt; should be optionInFIFO and optionOutFIFO.
&gt; http://www.webkit.org/coding/coding-style.html#names-basic

Done.

&gt;&gt; Tools/DumpRenderTree/chromium/TestShellAndroid.cpp:87
&gt;&gt; +    const char* outFifo = 0;
&gt; 
&gt; should be inFIFO and outFIFO.

Done.

&gt;&gt; Tools/DumpRenderTree/chromium/TestShellX11.cpp:36
&gt;&gt;  #if USE(GTK)
&gt; 
&gt; Is this file used by aura and gtk? Should we merge TestShellGtk.cpp into this file (it&apos;s only like 12 lines of code) and put it behind an #if USE(GTK)?

I think so. Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630809</commentid>
    <comment_count>6</comment_count>
      <attachid>143359</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-22 15:10:44 -0700</bug_when>
    <thetext>Comment on attachment 143359
patch for landing

Will soon upload a new patch containing latest downstream changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630813</commentid>
    <comment_count>7</comment_count>
      <attachid>143375</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-22 15:19:21 -0700</bug_when>
    <thetext>Created attachment 143375
patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630826</commentid>
    <comment_count>8</comment_count>
      <attachid>143375</attachid>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-22 15:30:42 -0700</bug_when>
    <thetext>Comment on attachment 143375
patch for landing

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

&gt; Tools/DumpRenderTree/DumpRenderTree.gypi:57
&gt;              &apos;chromium/WebPreferences.h&apos;,
&gt; +            &apos;chromium/WebThemeControlDRTWin.cpp&apos;,
&gt; +            &apos;chromium/WebThemeControlDRTWin.h&apos;,
&gt; +            &apos;chromium/WebThemeEngineDRTMac.mm&apos;,
&gt; +            &apos;chromium/WebThemeEngineDRTMac.h&apos;,
&gt; +            &apos;chromium/WebThemeEngineDRTWin.cpp&apos;,
&gt; +            &apos;chromium/WebThemeEngineDRTWin.h&apos;,
&gt;              &apos;chromium/WebUserMediaClientMock.cpp&apos;,

This patch includes a change which was not in the reviewed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630828</commentid>
    <comment_count>9</comment_count>
      <attachid>143375</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-22 15:34:35 -0700</bug_when>
    <thetext>Comment on attachment 143375
patch for landing

Sorry. I should request another review. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630832</commentid>
    <comment_count>10</comment_count>
    <who name="Kent Tamura">tkent</who>
    <bug_when>2012-05-22 15:38:21 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 143375 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=143375&amp;action=review
&gt; 
&gt; &gt; Tools/DumpRenderTree/DumpRenderTree.gypi:57
&gt; &gt;              &apos;chromium/WebPreferences.h&apos;,
&gt; &gt; +            &apos;chromium/WebThemeControlDRTWin.cpp&apos;,
&gt; &gt; +            &apos;chromium/WebThemeControlDRTWin.h&apos;,
&gt; &gt; +            &apos;chromium/WebThemeEngineDRTMac.mm&apos;,
&gt; &gt; +            &apos;chromium/WebThemeEngineDRTMac.h&apos;,
&gt; &gt; +            &apos;chromium/WebThemeEngineDRTWin.cpp&apos;,
&gt; &gt; +            &apos;chromium/WebThemeEngineDRTWin.h&apos;,
&gt; &gt;              &apos;chromium/WebUserMediaClientMock.cpp&apos;,
&gt; 
&gt; This patch includes a change which was not in the reviewed patch.

Please change this in another patch.  It is unrelated to &quot;Run DumpRenderTree as an apk&quot;, and we shouldn&apos;t do it in this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630857</commentid>
    <comment_count>11</comment_count>
      <attachid>143385</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-22 15:53:51 -0700</bug_when>
    <thetext>Created attachment 143385
patch v4

Will file another bug for the conditions in DumpRenderTree.gypi.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630891</commentid>
    <comment_count>12</comment_count>
      <attachid>143385</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-22 16:20:34 -0700</bug_when>
    <thetext>Comment on attachment 143385
patch v4

Attachment 143385 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/12767058</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630900</commentid>
    <comment_count>13</comment_count>
      <attachid>143394</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-22 16:26:10 -0700</bug_when>
    <thetext>Created attachment 143394
last patch hopefully

Will commit-queue+ after passing ews.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631002</commentid>
    <comment_count>14</comment_count>
      <attachid>143418</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2012-05-22 17:51:17 -0700</bug_when>
    <thetext>Created attachment 143418
Yet another last patch (resolved conflicts)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631155</commentid>
    <comment_count>15</comment_count>
      <attachid>143418</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-22 21:13:28 -0700</bug_when>
    <thetext>Comment on attachment 143418
Yet another last patch (resolved conflicts)

Clearing flags on attachment: 143418

Committed r118115: &lt;http://trac.webkit.org/changeset/118115&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631156</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-22 21:13:34 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>142821</attachid>
            <date>2012-05-18 16:53:27 -0700</date>
            <delta_ts>2012-05-22 14:16:31 -0700</delta_ts>
            <desc>patch</desc>
            <filename>86922</filename>
            <type>text/plain</type>
            <size>37667</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExNzY1NykKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDI3IEBACisyMDEyLTA1LTE4ICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1
bS5vcmc+CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBh
cyBhbiBhcGsgKEMrKyBhbmQgZ3lwIHBhcnQpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD04NjkyMgorCisgICAgICAgIEJlY2F1c2Ugd2UgaGF2ZSBuZXcg
cGxhdGZvcm1Jbml0KCkgaW4gVGVzdFNoZWxsQW5kcm9pZC5jcHAsIGFuZAorICAgICAgICB3ZSBz
dGlsbCBuZWVkIHRoZSB0aW1lb3V0IHBhcnQgaW4gVGVzdFNoZWxsTGludXguY3BwLCBUZXN0U2hl
bGxMaW51eC5jcHAKKyAgICAgICAgaXMgc3BsaXQgaW50byBUZXN0U2hlbGxQb3NpeC5jcHAgYW5k
IFRlc3RTaGVsbFgxMS5jcHAuCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRl
clRyZWUuZ3lwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHA6
IEFkZGVkLiBIYW5kbGVzIGNvbW1hbmQgbGluZXMgdG8gcmVkaXJlY3Qgc3RkaW4vc3Rkb3V0L3N0
ZGVyci4KKyAgICAgICAgKHBsYXRmb3JtSW5pdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsR3RrLmNwcDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGxMaW51eC5jcHA6IFJlbW92ZWQuIFNwbGl0IGludG8gVGVzdFNoZWxsUG9z
aXguY3BwIGFuZCBUZXN0U2hlbGxYMTEuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2No
cm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcDogU3BsaXQgZnJvbSBUZXN0U2hlbGxMaW51eC5jcHAs
IGNvbnRhaW5pbmcgdGhlIHRpbWVvdXQgaGFuZGxpbmcgcGFydCwgY29tcGlsZWQgd2hlbiBvc19w
b3NpeD0xIChleGNsdWRpbmcgbWFjKS4KKyAgICAgICAgKEFsYXJtSGFuZGxlcik6CisgICAgICAg
IChUZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHA6IFNwbGl0IGZyb20gVGVzdFNoZWxsTGludXguY3Bw
LCBjb250YWluaW5nIHRoZSBmb250Y29uZmlnIHBhcnQsIGNvbXBpbGVkIHdoZW4gdXNlX3gxMT0x
CisgICAgICAgIChzZXR1cEZvbnRjb25maWcpOgorICAgICAgICAocGxhdGZvcm1Jbml0KToKKwog
MjAxMi0wNS0xOCAgRGlyayBQcmFua2UgIDxkcHJhbmtlQGNocm9taXVtLm9yZz4KIAogICAgICAg
ICBzY20uYWRkKCkgZG9lc24ndCB3b3JrIHByb3Blcmx5IHdpdGggc3ZuIDEuNwpJbmRleDogVG9v
bHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwaQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCShyZXZpc2lvbiAxMTc2MzkpCisr
KyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCSh3b3JraW5nIGNvcHkp
CkBAIC0zNCwxMCArMzQsMTIgQEAKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0TmF2aWdhdGlv
bkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsLmNwcCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVt
L1Rlc3RTaGVsbExpbnV4LmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsQW5k
cm9pZC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbEd0ay5jcHAnLAogICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbE1hYy5tbScsCisgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFNoZWxsUG9zaXguY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxX
aW4uY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0V2ViUGx1Z2luLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFdlYlBsdWdpbi5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXh0SW5wdXRDb250
cm9sbGVyLmNwcCcsCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXAvRHVtcFJlbmRlclRyZWUuZ3lwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAJKHJldmlzaW9uIDExNzYzOSkK
KysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJl
ZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTc4LDExICs3OCwxNSBAQAogICAgICAgICAgICAgJ3R5
cGUnOiAnZXhlY3V0YWJsZScsCiAgICAgICAgICAgICAnbWFjX2J1bmRsZSc6IDEsCiAgICAgICAg
ICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAgICAgICAgICdJbWFnZURpZmYnLAorICAg
ICAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVnSW4nLAorICAgICAgICAgICAgICAgICdjb3B5
X1Rlc3ROZXRzY2FwZVBsdWdJbicsCiAgICAgICAgICAgICAgICAgJzwoc291cmNlX2RpcikvV2Vi
S2l0L2Nocm9taXVtL1dlYktpdC5neXA6aW5zcGVjdG9yX3Jlc291cmNlcycsCiAgICAgICAgICAg
ICAgICAgJzwoc291cmNlX2RpcikvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXA6d2Via2l0JywK
ICAgICAgICAgICAgICAgICAnPChzb3VyY2VfZGlyKS9XVEYvV1RGLmd5cC9XVEYuZ3lwOnd0Zics
CiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYnVpbGQvdGVtcF9neXAvZ29v
Z2xldXJsLmd5cDpnb29nbGV1cmwnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL3RoaXJkX3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKKyAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9tZXNhL21lc2EuZ3lwOm9zbWVzYScsCiAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdjgvdG9vbHMvZ3lwL3Y4Lmd5cDp2OCcs
CiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0
X3N1cHBvcnRfYmFzZScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvd2Vi
a2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuZ3lwOmJsb2InLApAQCAtMTg3LDYgKzE5MSwxMSBA
QAogICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ01hY1xcLmNwcCQnXSwKICAg
ICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAg
ICBbJ29zX3Bvc2l4IT0xIG9yIE9TPT0ibWFjIicsIHsKKyAgICAgICAgICAgICAgICAgICAgJ3Nv
dXJjZXMvJzogWworICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwu
Y3BwJCddLAorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIH1dLAogICAg
ICAgICAgICAgICAgIFsndXNlX3gxMSA9PSAxJywgewogICAgICAgICAgICAgICAgICAgICAnZGVw
ZW5kZW5jaWVzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rp
cikvYnVpbGQvbGludXgvc3lzdGVtLmd5cDpmb250Y29uZmlnJywKQEAgLTIxMiw3ICsyMjEsNyBA
QAogICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIH0seyAjIHVzZV94MTEg
IT0gMQogICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAg
ICAgICAgICBbJ2V4Y2x1ZGUnLCAnTGludXhcXC5jcHAkJ10KKyAgICAgICAgICAgICAgICAgICAg
ICAgIFsnZXhjbHVkZScsICdYMTFcXC5jcHAkJ10sCiAgICAgICAgICAgICAgICAgICAgIF0KICAg
ICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ3Rvb2xraXRfdXNlc19ndGsgPT0g
MScsIHsKQEAgLTIzMSwyMSArMjQwLDMwIEBACiAgICAgICAgICAgICAgICAgICAgIF0KICAgICAg
ICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CisgICAg
ICAgICAgICAgICAgICAgICd0eXBlJzogJ3NoYXJlZF9saWJyYXJ5JywKICAgICAgICAgICAgICAg
ICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICdJbWFnZURp
ZmYjaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9i
YXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL3Rvb2xzL2FuZHJvaWQvZm9yd2FyZGVyL2ZvcndhcmRlci5n
eXA6Zm9yd2FyZGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL3Rlc3RpbmcvYW5kcm9pZC9uYXRpdmVfdGVzdC5neXA6bmF0aXZlX3Rlc3RfbmF0aXZlX2Nv
ZGUnLAogICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnc291cmNl
cy8nOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnY2hyb21pdW0vVGVz
dFNoZWxsTGludXhcXC5jcHAkJ10sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAg
ICAgICAgfSx7ICMgT1MhPSJhbmRyb2lkIgotICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8n
OiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnKEFuZHJvaWQpXFwuY3Bw
JCddCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdkZXBlbmRl
bmNpZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMhJzogWwogICAgICAg
ICAgICAgICAgICAgICAgICAgJ0ltYWdlRGlmZicsCisgICAgICAgICAgICAgICAgICAgICAgICAn
VGVzdE5ldHNjYXBlUGx1Z0luJywKICAgICAgICAgICAgICAgICAgICAgICAgICdjb3B5X1Rlc3RO
ZXRzY2FwZVBsdWdJbicsCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNf
ZGlyKS90aGlyZF9wYXJ0eS9tZXNhL21lc2EuZ3lwOm9zbWVzYScsCiAgICAgICAgICAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdjb3BpZXMnOiBbeworICAgICAgICAgICAgICAg
ICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoUFJPRFVDVF9ESVIpJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdmaWxlcyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhaGVt
X3BhdGgpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChJTlRFUk1FRElBVEVfRElS
KS9yZXBhY2svRHVtcFJlbmRlclRyZWUucGFrJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF0K
KyAgICAgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgfSwgeyAjIE9TIT0iYW5k
cm9pZCIKKyAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWworICAgICAgICAgICAgICAg
ICAgICAgICAgWydleGNsdWRlJywgJ0FuZHJvaWRcXC5jcHAkJ10sCisgICAgICAgICAgICAgICAg
ICAgIF0sCiAgICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAgWydpbnNpZGVfY2hy
b21pdW1fYnVpbGQ9PTEgYW5kIGNvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IicsIHsKICAgICAg
ICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCkBAIC0zODMsNSArNDAxLDQzIEBACiAgICAgICAg
ICAgICAgICAgJ2NmbGFnc19jYyc6IFsnLVduby1jKysweC1jb21wYXQnXSwKICAgICAgICAgICAg
IH0sCiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CisgICAgICAgICAg
ICAjIFdyYXAgbGliRHVtcFJlbmRlclRyZWUuc28gaW50byBhbiBhbmRyb2lkIGFwayBmb3IgZXhl
Y3V0aW9uLgorICAgICAgICAgICAgIyBTZWUgPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2Uu
Z3lwIGZvciBUT0RPKGpyZylzIGFib3V0IHRoaXMgc3RyYXRlZ3kuCisgICAgICAgICAgICAndGFy
Z2V0cyc6IFt7CisgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ0R1bXBSZW5kZXJUcmVl
X2FwaycsCisgICAgICAgICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCisgICAgICAgICAgICAgICAg
J2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlJywK
KyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICdhY3Rpb25zJzogW3sKKyAgICAg
ICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSBhcGsgZmlsZXMgKGluY2x1ZGluZyBzb3VyY2UgYW5k
IGFudGZpbGUpIGZyb20KKyAgICAgICAgICAgICAgICAgICAgIyBhIHRlbXBsYXRlLCBhbmQgYnVp
bGRzIHRoZW0uCisgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZV9h
bmRfYnVpbGQnLAorICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWworICAgICAgICAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL2dlbmVyYXRl
X25hdGl2ZV90ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElS
KS9saWIudGFyZ2V0L2xpYkR1bXBSZW5kZXJUcmVlLnNvJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICMgVE9ETyh3YW5neGlhbnpodSk6IEJ1aWxkIHRoZSBqYXIgZm9yIG5hdGl2ZSB0ZXN0cyB3
aXRoIFNESy4KKyAgICAgICAgICAgICAgICAgICAgICAgICMgRm9yIG5vdyB3ZSBhcmUgdXNpbmcg
QW5kcm9pZC5tayB0byBidWlsZCB0aGUgYXBrLgorICAgICAgICAgICAgICAgICAgICBdLAorICAg
ICAgICAgICAgICAgICAgICAnb3V0cHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICc8
KFBST0RVQ1RfRElSKS9EdW1wUmVuZGVyVHJlZV9hcGsvQ2hyb21lTmF0aXZlVGVzdHMtZGVidWcu
YXBrJywKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgJ2FjdGlv
bic6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3Rp
bmcvYW5kcm9pZC9nZW5lcmF0ZV9uYXRpdmVfdGVzdC5weScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAnLS1uYXRpdmVfbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9E
VUNUX0RJUikvbGliLnRhcmdldC9saWJEdW1wUmVuZGVyVHJlZS5zbycsCisgICAgICAgICAgICAg
ICAgICAgICAgICAjIFRPRE8od2FuZ3hpYW56aHUpOiBCdWlsZCB0aGUgamFyIGZvciBuYXRpdmUg
dGVzdHMgd2l0aCBTREsuCisgICAgICAgICAgICAgICAgICAgICAgICAjICctLWphcicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAjICdmb28vYmFyLmphcicsCisgICAgICAgICAgICAgICAgICAg
ICAgICAnLS1vdXRwdXQnLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIp
L0R1bXBSZW5kZXJUcmVlX2FwaycsCisgICAgICAgICAgICAgICAgICAgICAgICAnLS1hbnQtYXJn
cycsCisgICAgICAgICAgICAgICAgICAgICAgICAnLURQUk9EVUNUX0RJUj08KFBST0RVQ1RfRElS
KScsCisgICAgICAgICAgICAgICAgICAgICAgICAnLS1hbnQtY29tcGlsZScKKyAgICAgICAgICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIH1dLAorICAgICAg
ICB9XSwKICAgICBdLCAjIGNvbmRpdGlvbnMKIH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2ds
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAq
IGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRo
ZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlS
SUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlU
RUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRl
c3RTaGVsbC5oIgorCisjaW5jbHVkZSA8YW5kcm9pZC9sb2cuaD4KKyNpbmNsdWRlIDxlcnJuby5o
PgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxz
eXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgorCituYW1lc3BhY2UgeworCitjb25zdCBjaGFyIG9wdGlvbkluRmlmb1tdID0gIi0taW4t
Zmlmbz0iOworY29uc3QgY2hhciBvcHRpb25PdXRGaWZvW10gPSAiLS1vdXQtZmlmbz0iOworY29u
c3QgY2hhciBvcHRpb25FcnJGaWxlW10gPSAiLS1lcnItZmlsZT0iOworCit2b2lkIGFuZHJvaWRM
b2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwg
Mik7CisKK3ZvaWQgYW5kcm9pZExvZ0Vycm9yKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQorewor
ICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIF9fYW5k
cm9pZF9sb2dfdnByaW50KEFORFJPSURfTE9HX0VSUk9SLCAiRHVtcFJlbmRlclRyZWUiLCBmb3Jt
YXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKK30KKwordm9pZCByZW1vdmVBcmcoaW50IGlu
ZGV4LCBpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKK3sKKyAgICBmb3IgKGludCBpID0gaW5kZXg7
IGkgPCAqYXJnYzsgKytpKQorICAgICAgICAoKmFyZ3YpW2ldID0gKCphcmd2KVtpICsgMV07Cisg
ICAgLS0qYXJnYzsKK30KKwordm9pZCBjcmVhdGVGaWZvKGNvbnN0IGNoYXIqIGZpZm9QYXRoKQor
eworICAgIHVubGluayhmaWZvUGF0aCk7CisgICAgaWYgKG1rZmlmbyhmaWZvUGF0aCwgMDYwMCkp
IHsKKyAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpZm8gJXM6ICVz
XG4iLCBmaWZvUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOworICAgIH0KK30KKwordm9pZCByZWRpcmVjdFRvRmlsZShGSUxFKiBzdHJlYW0sIGNvbnN0
IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIqIG1vZGUpCit7CisgICAgaWYgKCFmcmVvcGVuKHBhdGgs
IG1vZGUsIHN0cmVhbSkpIHsKKyAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gcmVk
aXJlY3Qgc3RyZWFtIHRvIGZpbGU6ICVzOiAlc1xuIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsK
KyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UK
Kwordm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCit7CisgICAgY29u
c3QgY2hhciogaW5GaWZvID0gMDsKKyAgICBjb25zdCBjaGFyKiBvdXRGaWZvID0gMDsKKyAgICBj
b25zdCBjaGFyKiBlcnJGaWxlID0gMDsKKyAgICBmb3IgKGludCBpID0gMTsgaSA8ICphcmdjOyAp
IHsKKyAgICAgICAgY29uc3QgY2hhciogYXJndW1lbnQgPSAoKmFyZ3YpW2ldOworICAgICAgICBp
ZiAoc3Ryc3RyKGFyZ3VtZW50LCBvcHRpb25JbkZpZm8pID09IGFyZ3VtZW50KSB7CisgICAgICAg
ICAgICBpbkZpZm8gPSBhcmd1bWVudCArIHN0cmxlbihvcHRpb25JbkZpZm8pOworICAgICAgICAg
ICAgY3JlYXRlRmlmbyhpbkZpZm8pOworICAgICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2MsIGFy
Z3YpOworICAgICAgICB9IGVsc2UgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9uT3V0Rmlmbykg
PT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIG91dEZpZm8gPSBhcmd1bWVudCArIHN0cmxlbihv
cHRpb25PdXRGaWZvKTsKKyAgICAgICAgICAgIGNyZWF0ZUZpZm8ob3V0Rmlmbyk7CisgICAgICAg
ICAgICByZW1vdmVBcmcoaSwgYXJnYywgYXJndik7CisgICAgICAgIH0gZWxzZSBpZiAoc3Ryc3Ry
KGFyZ3VtZW50LCBvcHRpb25FcnJGaWxlKSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgZXJy
RmlsZSA9IGFyZ3VtZW50ICsgc3RybGVuKG9wdGlvbkVyckZpbGUpOworICAgICAgICAgICAgcmVt
b3ZlQXJnKGksIGFyZ2MsIGFyZ3YpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICsraTsK
KyAgICB9CisKKyAgICAvLyBUaGUgb3JkZXIgb2YgY3JlYXRlRmlmbygpIGFuZCByZWRpcmVjdFRv
RmlmbygpIGlzIGltcG9ydGFudCB0byBhdm9pZCBkZWFkbG9jay4KKyAgICBpZiAob3V0RmlmbykK
KyAgICAgICAgcmVkaXJlY3RUb0ZpbGUoc3Rkb3V0LCBvdXRGaWZvLCAidyIpOworICAgIGlmIChp
bkZpZm8pCisgICAgICAgIHJlZGlyZWN0VG9GaWxlKHN0ZGluLCBpbkZpZm8sICJyIik7CisgICAg
aWYgKGVyckZpbGUpCisgICAgICAgIHJlZGlyZWN0VG9GaWxlKHN0ZGVyciwgZXJyRmlsZSwgInci
KTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gUmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dC4KKyAg
ICAgICAgZHVwMigxLCAyKTsKKyAgICB9Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9E
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbEd0ay5jcHAJKHJldmlzaW9uIDExNzYzOSkKKysrIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEd0ay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDExICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFNo
ZWxsLmgiCiAKLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2lu
Y2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgogI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNp
bmNsdWRlIDxzaWduYWwuaD4KLQogCiB2b2lkIG9wZW5TdGFydHVwRGlhbG9nKCkKIHsKSW5kZXg6
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5jcHAJ
KHJldmlzaW9uIDExNzYzOSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbExpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwyMjMgKzAsMCBAQAotLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmli
dXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUg
bmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBw
cm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNw
ZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
Ci0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJUZXN0U2hlbGwuaCIKLQotI2luY2x1ZGUgIlNrVHlwZWZhY2Uu
aCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0
X3N1cHBvcnQuaCIKLQotI2lmICFPUyhBTkRST0lEKQotI2luY2x1ZGUgPGZvbnRjb25maWcvZm9u
dGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR1RLKQotI2luY2x1ZGUgPGd0ay9ndGsuaD4K
LSNlbmRpZgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1zdGF0
aWMgdm9pZCBBbGFybUhhbmRsZXIoaW50KQotewotICAgIC8vIElmIHRoZSBhbGFybSBhbGFybWVk
LCBraWxsIHRoZSBwcm9jZXNzIHNpbmNlIHdlIGhhdmUgYSByZWFsbHkgYmFkIGhhbmcuCi0gICAg
cHV0cygiXG4jVEVTVF9USU1FRF9PVVRcbiIpOwotICAgIHB1dHMoIiNFT0ZcbiIpOwotICAgIGZm
bHVzaChzdGRvdXQpOwotICAgIGV4aXQoMCk7Ci19Ci0KLXZvaWQgVGVzdFNoZWxsOjp3YWl0VGVz
dEZpbmlzaGVkKCkKLXsKLSAgICBBU1NFUlQoIW1fdGVzdElzUGVuZGluZyk7Ci0gICAgbV90ZXN0
SXNQZW5kaW5nID0gdHJ1ZTsKLQotICAgIC8vIEluc3RhbGwgYW4gYWxhcm0gc2lnbmFsIGhhbmRs
ZXIgdGhhdCB3aWxsIGtpbGwgdXMgaWYgd2UgdGltZSBvdXQuCi0gICAgc3RydWN0IHNpZ2FjdGlv
biBhbGFybUFjdGlvbjsKLSAgICBhbGFybUFjdGlvbi5zYV9oYW5kbGVyID0gQWxhcm1IYW5kbGVy
OwotICAgIHNpZ2VtcHR5c2V0KCZhbGFybUFjdGlvbi5zYV9tYXNrKTsKLSAgICBhbGFybUFjdGlv
bi5zYV9mbGFncyA9IDA7Ci0KLSAgICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbjsKLSAgICBz
aWdhY3Rpb24oU0lHQUxSTSwgJmFsYXJtQWN0aW9uLCAmb2xkQWN0aW9uKTsKLSAgICBhbGFybShs
YXlvdXRUZXN0VGltZW91dEZvcldhdGNoRG9nKCkgLyAxMDAwKTsKLQotICAgIC8vIFRlc3RGaW5p
c2hlZCgpIHdpbGwgcG9zdCBhIHF1aXQgbWVzc2FnZSB0byBicmVhayB0aGlzIGxvb3Agd2hlbiB0
aGUgcGFnZQotICAgIC8vIGZpbmlzaGVzIGxvYWRpbmcuCi0gICAgd2hpbGUgKG1fdGVzdElzUGVu
ZGluZykKLSAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7Ci0KLSAgICAv
LyBSZW1vdmUgdGhlIGFsYXJtLgotICAgIGFsYXJtKDApOwotICAgIHNpZ2FjdGlvbihTSUdBTFJN
LCAmb2xkQWN0aW9uLCAwKTsKLX0KLQotI2lmICFPUyhBTkRST0lEKQotc3RhdGljIGJvb2wgY2hl
Y2tBbmRMb2FkRm9udEZpbGUoRmNDb25maWcqIGZvbnRjZmcsIGNvbnN0IGNoYXIqIHBhdGgxLCBj
b25zdCBjaGFyKiBwYXRoMikKLXsKLSAgICBjb25zdCBjaGFyKiBmb250ID0gcGF0aDE7Ci0gICAg
aWYgKGFjY2Vzcyhmb250LCBSX09LKSA8IDApIHsKLSAgICAgICAgZm9udCA9IHBhdGgyOwotICAg
ICAgICBpZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkgewotICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJZb3UgYXJlIG1pc3NpbmcgJXMgb3IgJXMuIFdpdGhvdXQgdGhpcywgc29tZSBsYXlv
dXQgdGVzdHMgbWF5IGZhaWwuICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VlIGh0
dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xheW91dFRlc3RzTGludXggIgot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgbW9yZS5cbiIsIHBhdGgxLCBwYXRoMik7
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFG
Y0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGZvbnRjZmcsIChGY0NoYXI4ICopIGZvbnQpKSB7Ci0gICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgZm9udCk7Ci0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXN0YXRp
YyB2b2lkIHNldHVwRm9udGNvbmZpZygpCi17Ci0gICAgLy8gV2Ugd2lzaCB0byBtYWtlIHRoZSBs
YXlvdXQgdGVzdHMgcmVwcm9kdWNhYmxlIHdpdGggcmVzcGVjdCB0byBmb250cy4gU2tpYQotICAg
IC8vIHVzZXMgZm9udGNvbmZpZyB0byByZXNvbHZlIGZvbnQgZmFtaWx5IG5hbWVzIGZyb20gV2Vi
S2l0IGludG8gYWN0dWFsIGZvbnQKLSAgICAvLyBmaWxlcyBmb3VuZCBvbiB0aGUgY3VycmVudCBz
eXN0ZW0uIFRoaXMgbWVhbnMgdGhhdCBmb250cyB2YXJ5IGJhc2VkIG9uIHRoZQotICAgIC8vIHN5
c3RlbSBhbmQgYWxzbyBvbiB0aGUgZm9udGNvbmZpZyBjb25maWd1cmF0aW9uLgotICAgIC8vCi0g
ICAgLy8gVG8gYXZvaWQgdGhpcyB3ZSBpbml0aWFsaXNlIGZvbnRjb25maWcgaGVyZSBhbmQgaW5z
dGFsbCBhIGNvbmZpZ3VyYXRpb24KLSAgICAvLyB3aGljaCBvbmx5IGtub3dzIGFib3V0IGEgZmV3
LCBzZWxlY3QsIGZvbnRzLgotCi0gICAgLy8gV2UgaGF2ZSBmb250Y29uZmlnIHBhcnNlIGEgY29u
ZmlnIGZpbGUgZnJvbSBvdXIgcmVzb3VyY2VzIGZpbGUuIFRoaXMKLSAgICAvLyBzZXRzIGEgbnVt
YmVyIG9mIGFsaWFzZXMgKCJzYW5zIi0+IkFyaWFsIiBldGMpLCBidXQgZG9lc24ndCBpbmNsdWRl
IGFueQotICAgIC8vIGZvbnQgZGlyZWN0b3JpZXMuCi0gICAgRmNJbml0KCk7Ci0KLSAgICBjaGFy
IGRydFBhdGhbUEFUSF9NQVggKyAxXTsKLSAgICBpbnQgZHJ0UGF0aFNpemUgPSByZWFkbGluaygi
L3Byb2Mvc2VsZi9leGUiLCBkcnRQYXRoLCBQQVRIX01BWCk7Ci0gICAgaWYgKGRydFBhdGhTaXpl
IDwgMCB8fCBkcnRQYXRoU2l6ZSA+IFBBVEhfTUFYKSB7Ci0gICAgICAgIGZwdXRzKCJVbmFibGUg
dG8gcmVzb2x2ZSAvcHJvYy9zZWxmL2V4ZS4iLCBzdGRlcnIpOwotICAgICAgICBleGl0KDEpOwot
ICAgIH0KLSAgICBkcnRQYXRoW2RydFBhdGhTaXplXSA9IDA7Ci0gICAgc3RkOjpzdHJpbmcgZHJ0
RGlyUGF0aChkcnRQYXRoKTsKLSAgICBzaXplX3QgbGFzdFBhdGhQb3MgPSBkcnREaXJQYXRoLnJm
aW5kKCIvIik7Ci0gICAgQVNTRVJUKGxhc3RQYXRoUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsK
LSAgICBkcnREaXJQYXRoLmVyYXNlKGxhc3RQYXRoUG9zICsgMSk7Ci0KLSAgICBGY0NvbmZpZyog
Zm9udGNmZyA9IEZjQ29uZmlnQ3JlYXRlKCk7Ci0gICAgc3RkOjpzdHJpbmcgZm9udGNvbmZpZ1Bh
dGggPSBkcnREaXJQYXRoICsgImZvbnRzLmNvbmYiOwotICAgIGlmICghRmNDb25maWdQYXJzZUFu
ZExvYWQoZm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZm9udGNvbmZp
Z1BhdGguY19zdHIoKSksIHRydWUpKSB7Ci0gICAgICAgIGZwdXRzKCJGYWlsZWQgdG8gcGFyc2Ug
Zm9udGNvbmZpZyBjb25maWcgZmlsZVxuIiwgc3RkZXJyKTsKLSAgICAgICAgZXhpdCgxKTsKLSAg
ICB9Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIGZvbnRzIHRoYXQgZm9udGNvbmZpZyB3
aWxsIGtub3cgYWJvdXQuIEl0Ci0gICAgLy8gd2lsbCB0cnkgaXRzIGJlc3QgdG8gbWF0Y2ggYmFz
ZWQgb25seSBvbiB0aGUgZm9udHMgaGVyZSBpbi4gVGhlCi0gICAgLy8gcGF0aHMgYXJlIHdoZXJl
IHRoZXNlIGZvbnRzIGFyZSBmb3VuZCBvbiBvdXIgVWJ1bnR1IGJveGVzLgotICAgIHN0YXRpYyBj
b25zdCBjaGFyICpjb25zdCBmb250c1tdID0gewotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9rb2NoaS9rb2NoaS1nb3RoaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUva29jaGkva29jaGktbWluY2hvLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWwudHRmIiwKLSAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbF9Cb2xkLnR0ZiIsCi0gICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfQm9sZF9J
dGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9BcmlhbF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5
cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5zX01TLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ29taWNfU2Fuc19NU19Cb2xkLnR0ZiIsCi0g
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9O
ZXcudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250
cy9Db3VyaWVyX05ld19Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19JdGFs
aWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250
cy9HZW9yZ2lhLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvR2VvcmdpYV9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYV9Cb2xkX0l0YWxpYy50dGYiLAotICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFfSXRhbGljLnR0
ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvSW1w
YWN0LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9u
dHMvVHJlYnVjaGV0X01TLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfQm9sZF9JdGFsaWMu
dHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9U
cmVidWNoZXRfTVNfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuLnR0ZiIsCi0gICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGQudHRm
IiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1l
c19OZXdfUm9tYW5fQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW5fSXRhbGljLnR0ZiIsCi0gICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYS50dGYi
LAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRh
bmFfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL1ZlcmRhbmFfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0l0YWxpYy50dGYiLAotICAgICAgICAv
LyBUaGUgRGVqYVZ1U2FucyBmb250IGlzIHVzZWQgYnkgdGhlIGNzczIuMSB0ZXN0cy4KLSAgICAg
ICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWRlamF2dS9EZWphVnVTYW5zLnR0ZiIs
Ci0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3Jl
L2xvaGl0X2hpLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1p
bmRpYy1mb250cy1jb3JlL2xvaGl0X3RhLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL011a3RpTmFycm93LnR0ZiIsCi0gICAgfTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShmb250cyk7ICsraSkgewotICAg
ICAgICBpZiAoYWNjZXNzKGZvbnRzW2ldLCBSX09LKSkgewotICAgICAgICAgICAgZnByaW50Zihz
dGRlcnIsICJZb3UgYXJlIG1pc3NpbmcgJXMuIFRyeSByZS1ydW5uaW5nIGJ1aWxkL2luc3RhbGwt
YnVpbGQtZGVwcy5zaC4gQWxzbyBzZWUgIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJo
dHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4IiwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250c1tpXSk7Ci0gICAgICAgICAgICBleGl0
KDEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250
Y2ZnLCAoRmNDaGFyOCAqKSBmb250c1tpXSkpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgZm9udHNbaV0pOwotICAgICAgICAgICAgZXhp
dCgxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghY2hlY2tBbmRMb2FkRm9udEZpbGUo
Zm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdGhhaS9HYXJ1ZGEudHRmIiwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3Rs
d2cvR2FydWRhLnR0ZiIpKQotICAgICAgICBleGl0KDEpOwotCi0gICAgLy8gV2Ugc3BlY2lhbCBj
YXNlIHRoZXNlIGZvbnRzIGJlY2F1c2UgdGhleSdyZSBvbmx5IG5lZWRlZCBpbiBhCi0gICAgLy8g
ZmV3IGxheW91dCB0ZXN0cy4KLSAgICBjaGVja0FuZExvYWRGb250RmlsZShmb250Y2ZnLCAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF9wYS50dGYi
LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90
dGYtcHVuamFiaS1mb250cy9sb2hpdF9wYS50dGYiKTsKLQotICAgIC8vIEFsc28gbG9hZCB0aGUg
bGF5b3V0LXRlc3Qtc3BlY2lmaWMgIkFoZW0iIGZvbnQuCi0gICAgc3RkOjpzdHJpbmcgYWhlbVBh
dGggPSBkcnREaXJQYXRoICsgIkFIRU1fX19fLlRURiI7Ci0gICAgaWYgKCFGY0NvbmZpZ0FwcEZv
bnRBZGRGaWxlKGZvbnRjZmcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGFoZW1Q
YXRoLmNfc3RyKCkpKSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2Fk
IGZvbnQgJXNcbiIsIGFoZW1QYXRoLmNfc3RyKCkpOwotICAgICAgICBleGl0KDEpOwotICAgIH0K
LQotICAgIGlmICghRmNDb25maWdTZXRDdXJyZW50KGZvbnRjZmcpKSB7Ci0gICAgICAgIGZwdXRz
KCJGYWlsZWQgdG8gc2V0IHRoZSBkZWZhdWx0IGZvbnQgY29uZmlndXJhdGlvblxuIiwgc3RkZXJy
KTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci19Ci0jZW5kaWYgLy8gIU9TKEFORFJPSUQpCi0K
LXZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQotewotICAgIC8vIEZJ
WE1FOiBJdCdzIGJldHRlciBjYWxsIGd0a19pbml0KCkgb25seSB3aGVuIHdlIHJ1biBwbHVnaW4g
dGVzdHMuCi0gICAgLy8gU2VlIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9y
Zy9ncm91cC9jaHJvbWl1bS1kZXYvYnJvd3NlX3RocmVhZC90aHJlYWQvNjMzZWExNjdjZGUxOTZj
YSMKLSNpZiBVU0UoR1RLKQotICAgIGd0a19pbml0KGFyZ2MsIGFyZ3YpOwotI2VuZGlmCi0KLSNp
ZiAhT1MoQU5EUk9JRCkKLSAgICBzZXR1cEZvbnRjb25maWcoKTsKLSNlbmRpZgotfQotCkluZGV4
OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxQb3NpeC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3Bw
CShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
UG9zaXguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcxIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgorCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Vi
a2l0X3N1cHBvcnQuaCIKKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5o
PgorCitzdGF0aWMgdm9pZCBBbGFybUhhbmRsZXIoaW50KQoreworICAgIC8vIElmIHRoZSBhbGFy
bSBhbGFybWVkLCBraWxsIHRoZSBwcm9jZXNzIHNpbmNlIHdlIGhhdmUgYSByZWFsbHkgYmFkIGhh
bmcuCisgICAgcHV0cygiXG4jVEVTVF9USU1FRF9PVVRcbiIpOworICAgIHB1dHMoIiNFT0ZcbiIp
OworICAgIGZmbHVzaChzdGRvdXQpOworICAgIGV4aXQoMCk7Cit9CisKK3ZvaWQgVGVzdFNoZWxs
Ojp3YWl0VGVzdEZpbmlzaGVkKCkKK3sKKyAgICBBU1NFUlQoIW1fdGVzdElzUGVuZGluZyk7Cisg
ICAgbV90ZXN0SXNQZW5kaW5nID0gdHJ1ZTsKKworICAgIC8vIEluc3RhbGwgYW4gYWxhcm0gc2ln
bmFsIGhhbmRsZXIgdGhhdCB3aWxsIGtpbGwgdXMgaWYgd2UgdGltZSBvdXQuCisgICAgc3RydWN0
IHNpZ2FjdGlvbiBhbGFybUFjdGlvbjsKKyAgICBhbGFybUFjdGlvbi5zYV9oYW5kbGVyID0gQWxh
cm1IYW5kbGVyOworICAgIHNpZ2VtcHR5c2V0KCZhbGFybUFjdGlvbi5zYV9tYXNrKTsKKyAgICBh
bGFybUFjdGlvbi5zYV9mbGFncyA9IDA7CisKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlv
bjsKKyAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFsYXJtQWN0aW9uLCAmb2xkQWN0aW9uKTsKKyAg
ICBhbGFybShsYXlvdXRUZXN0VGltZW91dEZvcldhdGNoRG9nKCkgLyAxMDAwKTsKKworICAgIC8v
IFRlc3RGaW5pc2hlZCgpIHdpbGwgcG9zdCBhIHF1aXQgbWVzc2FnZSB0byBicmVhayB0aGlzIGxv
b3Agd2hlbiB0aGUgcGFnZQorICAgIC8vIGZpbmlzaGVzIGxvYWRpbmcuCisgICAgd2hpbGUgKG1f
dGVzdElzUGVuZGluZykKKyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7
CisKKyAgICAvLyBSZW1vdmUgdGhlIGFsYXJtLgorICAgIGFsYXJtKDApOworICAgIHNpZ2FjdGlv
bihTSUdBTFJNLCAmb2xkQWN0aW9uLCAwKTsKK30KClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcApfX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFk
ZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAJKHJldmlzaW9uIDExNzYwNCkJKGZyb20gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsTGludXguY3BwOjExNzYwNCkKKysr
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICog
Y29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhl
ciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
IGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJ
R0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVz
dFNoZWxsLmgiCisKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCisjaW5jbHVkZSAiV2ViVmlldy5o
IgorI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCisKKyNpZiAhT1Mo
QU5EUk9JRCkKKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KKyNlbmRpZgorCisj
aWYgVVNFKEdUSykKKyNpbmNsdWRlIDxndGsvZ3RrLmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWdu
YWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIHZvaWQgQWxhcm1IYW5kbGVyKGlu
dCkKK3sKKyAgICAvLyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2VzcyBzaW5j
ZSB3ZSBoYXZlIGEgcmVhbGx5IGJhZCBoYW5nLgorICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VU
XG4iKTsKKyAgICBwdXRzKCIjRU9GXG4iKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBleGl0
KDApOworfQorCit2b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCit7CisgICAgQVNT
RVJUKCFtX3Rlc3RJc1BlbmRpbmcpOworICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7CisKKyAg
ICAvLyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxsIHVzIGlm
IHdlIHRpbWUgb3V0LgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247CisgICAgYWxh
cm1BY3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKKyAgICBzaWdlbXB0eXNldCgmYWxh
cm1BY3Rpb24uc2FfbWFzayk7CisgICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOworCisgICAg
c3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247CisgICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhbGFy
bUFjdGlvbiwgJm9sZEFjdGlvbik7CisgICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRj
aERvZygpIC8gMTAwMCk7CisKKyAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0
IG1lc3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKKyAgICAvLyBmaW5pc2hl
cyBsb2FkaW5nLgorICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCisgICAgICAgIHdlYmtpdF9z
dXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworCisgICAgLy8gUmVtb3ZlIHRoZSBhbGFybS4KKyAg
ICBhbGFybSgwKTsKKyAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7Cit9CisK
KyNpZiAhT1MoQU5EUk9JRCkKK3N0YXRpYyBib29sIGNoZWNrQW5kTG9hZEZvbnRGaWxlKEZjQ29u
ZmlnKiBmb250Y2ZnLCBjb25zdCBjaGFyKiBwYXRoMSwgY29uc3QgY2hhciogcGF0aDIpCit7Cisg
ICAgY29uc3QgY2hhciogZm9udCA9IHBhdGgxOworICAgIGlmIChhY2Nlc3MoZm9udCwgUl9PSykg
PCAwKSB7CisgICAgICAgIGZvbnQgPSBwYXRoMjsKKyAgICAgICAgaWYgKGFjY2Vzcyhmb250LCBS
X09LKSA8IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBtaXNzaW5n
ICVzIG9yICVzLiBXaXRob3V0IHRoaXMsIHNvbWUgbGF5b3V0IHRlc3RzIG1heSBmYWlsLiAiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3Av
Y2hyb21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4ICIKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiZm9yIG1vcmUuXG4iLCBwYXRoMSwgcGF0aDIpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShm
b250Y2ZnLCAoRmNDaGFyOCAqKSBmb250KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZh
aWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGZvbnQpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgdm9pZCBzZXR1cEZvbnRjb25maWco
KQoreworICAgIC8vIFdlIHdpc2ggdG8gbWFrZSB0aGUgbGF5b3V0IHRlc3RzIHJlcHJvZHVjYWJs
ZSB3aXRoIHJlc3BlY3QgdG8gZm9udHMuIFNraWEKKyAgICAvLyB1c2VzIGZvbnRjb25maWcgdG8g
cmVzb2x2ZSBmb250IGZhbWlseSBuYW1lcyBmcm9tIFdlYktpdCBpbnRvIGFjdHVhbCBmb250Cisg
ICAgLy8gZmlsZXMgZm91bmQgb24gdGhlIGN1cnJlbnQgc3lzdGVtLiBUaGlzIG1lYW5zIHRoYXQg
Zm9udHMgdmFyeSBiYXNlZCBvbiB0aGUKKyAgICAvLyBzeXN0ZW0gYW5kIGFsc28gb24gdGhlIGZv
bnRjb25maWcgY29uZmlndXJhdGlvbi4KKyAgICAvLworICAgIC8vIFRvIGF2b2lkIHRoaXMgd2Ug
aW5pdGlhbGlzZSBmb250Y29uZmlnIGhlcmUgYW5kIGluc3RhbGwgYSBjb25maWd1cmF0aW9uCisg
ICAgLy8gd2hpY2ggb25seSBrbm93cyBhYm91dCBhIGZldywgc2VsZWN0LCBmb250cy4KKworICAg
IC8vIFdlIGhhdmUgZm9udGNvbmZpZyBwYXJzZSBhIGNvbmZpZyBmaWxlIGZyb20gb3VyIHJlc291
cmNlcyBmaWxlLiBUaGlzCisgICAgLy8gc2V0cyBhIG51bWJlciBvZiBhbGlhc2VzICgic2FucyIt
PiJBcmlhbCIgZXRjKSwgYnV0IGRvZXNuJ3QgaW5jbHVkZSBhbnkKKyAgICAvLyBmb250IGRpcmVj
dG9yaWVzLgorICAgIEZjSW5pdCgpOworCisgICAgY2hhciBkcnRQYXRoW1BBVEhfTUFYICsgMV07
CisgICAgaW50IGRydFBhdGhTaXplID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgZHJ0UGF0
aCwgUEFUSF9NQVgpOworICAgIGlmIChkcnRQYXRoU2l6ZSA8IDAgfHwgZHJ0UGF0aFNpemUgPiBQ
QVRIX01BWCkgeworICAgICAgICBmcHV0cygiVW5hYmxlIHRvIHJlc29sdmUgL3Byb2Mvc2VsZi9l
eGUuIiwgc3RkZXJyKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisgICAgZHJ0UGF0aFtkcnRQ
YXRoU2l6ZV0gPSAwOworICAgIHN0ZDo6c3RyaW5nIGRydERpclBhdGgoZHJ0UGF0aCk7CisgICAg
c2l6ZV90IGxhc3RQYXRoUG9zID0gZHJ0RGlyUGF0aC5yZmluZCgiLyIpOworICAgIEFTU0VSVChs
YXN0UGF0aFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7CisgICAgZHJ0RGlyUGF0aC5lcmFzZShs
YXN0UGF0aFBvcyArIDEpOworCisgICAgRmNDb25maWcqIGZvbnRjZmcgPSBGY0NvbmZpZ0NyZWF0
ZSgpOworICAgIHN0ZDo6c3RyaW5nIGZvbnRjb25maWdQYXRoID0gZHJ0RGlyUGF0aCArICJmb250
cy5jb25mIjsKKyAgICBpZiAoIUZjQ29uZmlnUGFyc2VBbmRMb2FkKGZvbnRjZmcsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRjb25maWdQYXRoLmNfc3RyKCkpLCB0cnVlKSkg
eworICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHBhcnNlIGZvbnRjb25maWcgY29uZmlnIGZpbGVc
biIsIHN0ZGVycik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgLy8gVGhpcyBpcyB0
aGUgbGlzdCBvZiBmb250cyB0aGF0IGZvbnRjb25maWcgd2lsbCBrbm93IGFib3V0LiBJdAorICAg
IC8vIHdpbGwgdHJ5IGl0cyBiZXN0IHRvIG1hdGNoIGJhc2VkIG9ubHkgb24gdGhlIGZvbnRzIGhl
cmUgaW4uIFRoZQorICAgIC8vIHBhdGhzIGFyZSB3aGVyZSB0aGVzZSBmb250cyBhcmUgZm91bmQg
b24gb3VyIFVidW50dSBib3hlcy4KKyAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZm9udHNb
XSA9IHsKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUva29jaGkva29jaGktZ290
aGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hpL2tvY2hp
LW1pbmNoby50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL0FyaWFsLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvQXJpYWxfQm9sZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGRfSXRhbGljLnR0ZiIsCisgICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfSXRhbGljLnR0ZiIs
CisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ29taWNf
U2Fuc19NUy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL0NvbWljX1NhbnNfTVNfQm9sZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3LnR0ZiIsCisgICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9sZC50dGYi
LAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJp
ZXJfTmV3X0JvbGRfSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYS50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFfQm9sZC50
dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dl
b3JnaWFfQm9sZF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5
cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0ltcGFjdC50dGYiLAorICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NUy50dGYiLAor
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hl
dF9NU19Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGRfSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0l0YWxpYy50dGYi
LAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVz
X05ld19Sb21hbi50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0
Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGRfSXRhbGlj
LnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
VGltZXNfTmV3X1JvbWFuX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmEudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0JvbGQudHRmIiwKKyAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0JvbGRfSXRh
bGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9u
dHMvVmVyZGFuYV9JdGFsaWMudHRmIiwKKyAgICAgICAgLy8gVGhlIERlamFWdVNhbnMgZm9udCBp
cyB1c2VkIGJ5IHRoZSBjc3MyLjEgdGVzdHMuCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2Fucy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF9oaS50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF90
YS50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9u
dHMtY29yZS9NdWt0aU5hcnJvdy50dGYiLAorICAgIH07CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBhcnJheXNpemUoZm9udHMpOyArK2kpIHsKKyAgICAgICAgaWYgKGFjY2Vzcyhmb250c1tp
XSwgUl9PSykpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBtaXNzaW5n
ICVzLiBUcnkgcmUtcnVubmluZyBidWlsZC9pbnN0YWxsLWJ1aWxkLWRlcHMuc2guIEFsc28gc2Vl
ICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9w
L2Nocm9taXVtL3dpa2kvTGF5b3V0VGVzdHNMaW51eCIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZm9udHNbaV0pOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAgICAgfQorICAgICAg
ICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikgZm9udHNb
aV0pKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQg
JXNcbiIsIGZvbnRzW2ldKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICB9
CisKKyAgICBpZiAoIWNoZWNrQW5kTG9hZEZvbnRGaWxlKGZvbnRjZmcsICIvdXNyL3NoYXJlL2Zv
bnRzL3RydWV0eXBlL3RoYWkvR2FydWRhLnR0ZiIsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90bHdnL0dhcnVkYS50dGYiKSkKKyAgICAg
ICAgZXhpdCgxKTsKKworICAgIC8vIFdlIHNwZWNpYWwgY2FzZSB0aGVzZSBmb250cyBiZWNhdXNl
IHRoZXkncmUgb25seSBuZWVkZWQgaW4gYQorICAgIC8vIGZldyBsYXlvdXQgdGVzdHMuCisgICAg
Y2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
dHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfcGEudHRmIiwgCisgICAgICAgICAgICAgICAgICAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLXB1bmphYmktZm9udHMvbG9oaXRf
cGEudHRmIik7CisKKyAgICAvLyBBbHNvIGxvYWQgdGhlIGxheW91dC10ZXN0LXNwZWNpZmljICJB
aGVtIiBmb250LgorICAgIHN0ZDo6c3RyaW5nIGFoZW1QYXRoID0gZHJ0RGlyUGF0aCArICJBSEVN
X19fXy5UVEYiOworICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCByZWlu
dGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihhaGVtUGF0aC5jX3N0cigpKSkpIHsKKyAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBhaGVtUGF0aC5j
X3N0cigpKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICBpZiAoIUZjQ29uZmlnU2V0
Q3VycmVudChmb250Y2ZnKSkgeworICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHNldCB0aGUgZGVm
YXVsdCBmb250IGNvbmZpZ3VyYXRpb25cbiIsIHN0ZGVycik7CisgICAgICAgIGV4aXQoMSk7Cisg
ICAgfQorfQorI2VuZGlmIC8vICFPUyhBTkRST0lEKQorCit2b2lkIHBsYXRmb3JtSW5pdChpbnQq
IGFyZ2MsIGNoYXIqKiogYXJndikKK3sKKyAgICAvLyBGSVhNRTogSXQncyBiZXR0ZXIgY2FsbCBn
dGtfaW5pdCgpIG9ubHkgd2hlbiB3ZSBydW4gcGx1Z2luIHRlc3RzLgorICAgIC8vIFNlZSBodHRw
Oi8vZ3JvdXBzLmdvb2dsZS5jb20vYS9jaHJvbWl1bS5vcmcvZ3JvdXAvY2hyb21pdW0tZGV2L2Jy
b3dzZV90aHJlYWQvdGhyZWFkLzYzM2VhMTY3Y2RlMTk2Y2EjCisjaWYgVVNFKEdUSykKKyAgICBn
dGtfaW5pdChhcmdjLCBhcmd2KTsKKyNlbmRpZgorCisjaWYgIU9TKEFORFJPSUQpCisgICAgc2V0
dXBGb250Y29uZmlnKCk7CisjZW5kaWYKK30KKwpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
Y2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCShyZXZpc2lvbiAxMTc2MDQpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw1NSArMzEsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJUZXN0
U2hlbGwuaCIKIAotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNpbmNsdWRlICJXZWJWaWV3Lmgi
Ci0jaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKLQotI2lmICFPUyhB
TkRST0lEKQogI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgotI2VuZGlmCiAKICNp
ZiBVU0UoR1RLKQogI2luY2x1ZGUgPGd0ay9ndGsuaD4KICNlbmRpZgotI2luY2x1ZGUgPHNpZ25h
bC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgotCi1zdGF0aWMgdm9pZCBBbGFybUhhbmRsZXIoaW50
KQotewotICAgIC8vIElmIHRoZSBhbGFybSBhbGFybWVkLCBraWxsIHRoZSBwcm9jZXNzIHNpbmNl
IHdlIGhhdmUgYSByZWFsbHkgYmFkIGhhbmcuCi0gICAgcHV0cygiXG4jVEVTVF9USU1FRF9PVVRc
biIpOwotICAgIHB1dHMoIiNFT0ZcbiIpOwotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIGV4aXQo
MCk7Ci19CiAKLXZvaWQgVGVzdFNoZWxsOjp3YWl0VGVzdEZpbmlzaGVkKCkKLXsKLSAgICBBU1NF
UlQoIW1fdGVzdElzUGVuZGluZyk7Ci0gICAgbV90ZXN0SXNQZW5kaW5nID0gdHJ1ZTsKLQotICAg
IC8vIEluc3RhbGwgYW4gYWxhcm0gc2lnbmFsIGhhbmRsZXIgdGhhdCB3aWxsIGtpbGwgdXMgaWYg
d2UgdGltZSBvdXQuCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBhbGFybUFjdGlvbjsKLSAgICBhbGFy
bUFjdGlvbi5zYV9oYW5kbGVyID0gQWxhcm1IYW5kbGVyOwotICAgIHNpZ2VtcHR5c2V0KCZhbGFy
bUFjdGlvbi5zYV9tYXNrKTsKLSAgICBhbGFybUFjdGlvbi5zYV9mbGFncyA9IDA7Ci0KLSAgICBz
dHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbjsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFsYXJt
QWN0aW9uLCAmb2xkQWN0aW9uKTsKLSAgICBhbGFybShsYXlvdXRUZXN0VGltZW91dEZvcldhdGNo
RG9nKCkgLyAxMDAwKTsKLQotICAgIC8vIFRlc3RGaW5pc2hlZCgpIHdpbGwgcG9zdCBhIHF1aXQg
bWVzc2FnZSB0byBicmVhayB0aGlzIGxvb3Agd2hlbiB0aGUgcGFnZQotICAgIC8vIGZpbmlzaGVz
IGxvYWRpbmcuCi0gICAgd2hpbGUgKG1fdGVzdElzUGVuZGluZykKLSAgICAgICAgd2Via2l0X3N1
cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIGFsYXJtLgotICAg
IGFsYXJtKDApOwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2xkQWN0aW9uLCAwKTsKLX0KLQot
I2lmICFPUyhBTkRST0lEKQogc3RhdGljIGJvb2wgY2hlY2tBbmRMb2FkRm9udEZpbGUoRmNDb25m
aWcqIGZvbnRjZmcsIGNvbnN0IGNoYXIqIHBhdGgxLCBjb25zdCBjaGFyKiBwYXRoMikKIHsKICAg
ICBjb25zdCBjaGFyKiBmb250ID0gcGF0aDE7CkBAIC0yMDYsNyArMTYzLDYgQEAgc3RhdGljIHZv
aWQgc2V0dXBGb250Y29uZmlnKCkKICAgICAgICAgZXhpdCgxKTsKICAgICB9CiB9Ci0jZW5kaWYg
Ly8gIU9TKEFORFJPSUQpCiAKIHZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hhcioqKiBh
cmd2KQogewpAQCAtMjE2LDggKzE3Miw2IEBAIHZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywg
Y2hhcioqKiBhcmcKICAgICBndGtfaW5pdChhcmdjLCBhcmd2KTsKICNlbmRpZgogCi0jaWYgIU9T
KEFORFJPSUQpCiAgICAgc2V0dXBGb250Y29uZmlnKCk7Ci0jZW5kaWYKIH0KIAo=
</data>
<flag name="review"
          id="149239"
          type_id="1"
          status="+"
          setter="tkent"
    />
    <flag name="commit-queue"
          id="149373"
          type_id="3"
          status="-"
          setter="tkent"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143359</attachid>
            <date>2012-05-22 14:15:47 -0700</date>
            <delta_ts>2012-05-22 15:10:44 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>86922a</filename>
            <type>text/plain</type>
            <size>43507</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFRvb2xzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJl
dmlzaW9uIDExODA1MSkKKysrIFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSAr
MSwyNyBAQAorMjAxMi0wNS0yMiAgWGlhbnpodSBXYW5nICA8d2FuZ3hpYW56aHVAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFtDaHJvbWl1bS1BbmRyb2lkXSBSdW4gRHVtcFJlbmRlclRyZWUgYXMg
YW4gYXBrIChDKysgYW5kIGd5cCBwYXJ0KQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9ODY5MjIKKworICAgICAgICBCZWNhdXNlIHdlIGhhdmUgbmV3IHBs
YXRmb3JtSW5pdCgpIGluIFRlc3RTaGVsbEFuZHJvaWQuY3BwLCBhbmQKKyAgICAgICAgd2Ugc3Rp
bGwgbmVlZCB0aGUgdGltZW91dCBwYXJ0IGluIFRlc3RTaGVsbExpbnV4LmNwcCwgVGVzdFNoZWxs
TGludXguY3BwCisgICAgICAgIGlzIHNwbGl0IGludG8gVGVzdFNoZWxsUG9zaXguY3BwIGFuZCBU
ZXN0U2hlbGxYMTEuY3BwLgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhIGFuZCBU
b255IENoYW5nLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lw
L0R1bXBSZW5kZXJUcmVlLmd5cDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5neXBpOiBTb3VyY2UgZmlsZSBjb25kaXRpb25zIG1vdmVkIGludG8gRHVtcFJlbmRlclRy
ZWUuZ3lwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJv
aWQuY3BwOiBBZGRlZC4gSGFuZGxlcyBjb21tYW5kIGxpbmVzIHRvIHJlZGlyZWN0IHN0ZGluL3N0
ZG91dC9zdGRlcnIuCisgICAgICAgIChwbGF0Zm9ybUluaXQpOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEd0ay5jcHA6IFJlbW92ZWQuIE1lcmdlZCBpbnRvIFRl
c3RTaGVsbFgxMS5jcHAKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGxMaW51eC5jcHA6IFJlbW92ZWQuIFNwbGl0IGludG8gVGVzdFNoZWxsUG9zaXguY3BwIGFuZCBU
ZXN0U2hlbGxYMTEuY3BwLgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbFBvc2l4LmNwcDogU3BsaXQgZnJvbSBUZXN0U2hlbGxMaW51eC5jcHAsIGNvbnRhaW5pbmcg
dGhlIHRpbWVvdXQgaGFuZGxpbmcgcGFydCwgY29tcGlsZWQgd2hlbiBvc19wb3NpeD0xIChleGNs
dWRpbmcgbWFjKS4KKyAgICAgICAgKEFsYXJtSGFuZGxlcik6CisgICAgICAgIChUZXN0U2hlbGw6
OndhaXRUZXN0RmluaXNoZWQpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbFgxMS5jcHA6IFNwbGl0IGZyb20gVGVzdFNoZWxsTGludXguY3BwLCBjb250YWluaW5n
IHRoZSBmb250Y29uZmlnIHBhcnQsIGNvbXBpbGVkIHdoZW4gdXNlX3gxMT0xCisgICAgICAgIChv
cGVuU3RhcnR1cERpYWxvZyk6IGZyb20gVGVzdFNoZWxsR3RrLmNwcAorICAgICAgICAoY2hlY2tM
YXlvdXRUZXN0U3lzdGVtRGVwZW5kZW5jaWVzKTogZnJvbSBUZXN0U2hlbGxHdGsuY3BwLgorICAg
ICAgICAoc2V0dXBGb250Y29uZmlnKToKKyAgICAgICAgKHBsYXRmb3JtSW5pdCk6CisKID09IFJv
bGxlZCBvdmVyIHRvIENoYW5nZUxvZy0yMDEyLTA1LTIyID09CkluZGV4OiBUb29scy9EdW1wUmVu
ZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkJKHJldmlzaW9uIDExODA1MSkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTM0LDEw
ICszNCwxMiBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3ROYXZpZ2F0aW9uQ29udHJvbGxl
ci5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGwuY3BwJywKICAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0U2hlbGwuaCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxs
TGludXguY3BwJywKLSAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwJywKKyAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcCcsCiAgICAgICAgICAgICAn
Y2hyb21pdW0vVGVzdFNoZWxsTWFjLm1tJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hl
bGxQb3NpeC5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbFN0dWIuY3BwJywK
ICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxXaW4uY3BwJywKKyAgICAgICAgICAgICdj
aHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0V2Vi
UGx1Z2luLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5oJywKICAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCcsCkBAIC00Niw2ICs0
OCwxMiBAQAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlBlcm1pc3Npb25zLmgnLAogICAgICAg
ICAgICAgJ2Nocm9taXVtL1dlYlByZWZlcmVuY2VzLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vV2ViUHJlZmVyZW5jZXMuaCcsCisgICAgICAgICAgICAnY2hyb21pdW0vV2ViVGhlbWVDb250
cm9sRFJUV2luLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vV2ViVGhlbWVDb250cm9sRFJU
V2luLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlRoZW1lRW5naW5lRFJUTWFjLm1tJywK
KyAgICAgICAgICAgICdjaHJvbWl1bS9XZWJUaGVtZUVuZ2luZURSVE1hYy5oJywKKyAgICAgICAg
ICAgICdjaHJvbWl1bS9XZWJUaGVtZUVuZ2luZURSVFdpbi5jcHAnLAorICAgICAgICAgICAgJ2No
cm9taXVtL1dlYlRoZW1lRW5naW5lRFJUV2luLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1dl
YlVzZXJNZWRpYUNsaWVudE1vY2suY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJVc2Vy
TWVkaWFDbGllbnRNb2NrLmgnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlZpZXdIb3N0LmNw
cCcsCkBAIC03NCwyNiArODIsNSBAQAogICAgICAgICAgICAgJ1Rlc3ROZXRzY2FwZVBsdWdJbi9U
ZXN0cy9Qcml2YXRlQnJvd3NpbmcuY3BwJywKICAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVn
SW4vbWFpbi5jcHAnLAogICAgICAgICBdLAotICAgICAgICAnY29uZGl0aW9ucyc6IFsKLSAgICAg
ICAgICAgIFsnKE9TPT0ibGludXgiIGFuZCB0b29sa2l0X3VzZXNfZ3RrIT0xKSBvciBPUz09ImFu
ZHJvaWQiJywgewotICAgICAgICAgICAgICAgICdkcnRfZmlsZXMnOiBbCi0gICAgICAgICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxTdHViLmNwcCcsCi0gICAgICAgICAgICAgICAgXSwK
LSAgICAgICAgICAgIH1dLAotICAgICAgICAgICAgWydPUz09IndpbiInLCB7Ci0gICAgICAgICAg
ICAgICAgJ2RydF9maWxlcyc6IFsKLSAgICAgICAgICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlRo
ZW1lQ29udHJvbERSVFdpbi5jcHAnLAotICAgICAgICAgICAgICAgICAgICAnY2hyb21pdW0vV2Vi
VGhlbWVDb250cm9sRFJUV2luLmgnLAotICAgICAgICAgICAgICAgICAgICAnY2hyb21pdW0vV2Vi
VGhlbWVFbmdpbmVEUlRXaW4uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgJ2Nocm9taXVtL1dl
YlRoZW1lRW5naW5lRFJUV2luLmgnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICB9
XSwKLSAgICAgICAgICAgIFsnT1M9PSJtYWMiJywgewotICAgICAgICAgICAgICAgICdkcnRfZmls
ZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJUaGVtZUVuZ2luZURSVE1h
Yy5tbScsCi0gICAgICAgICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJUaGVtZUVuZ2luZURSVE1h
Yy5oJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAgICAgIF0sCiAg
ICAgfQogfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1
bXBSZW5kZXJUcmVlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCShyZXZpc2lvbiAxMTgwNTEpCisrKyBU
b29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lw
CSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMSArNzgsMTQgQEAKICAgICAgICAgICAgICd0eXBlJzog
J2V4ZWN1dGFibGUnLAogICAgICAgICAgICAgJ21hY19idW5kbGUnOiAxLAogICAgICAgICAgICAg
J2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAgICAnSW1hZ2VEaWZmJywKKyAgICAgICAg
ICAgICAgICAnY29weV9UZXN0TmV0c2NhcGVQbHVnSW4nLAogICAgICAgICAgICAgICAgICc8KHNv
dXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwOmluc3BlY3Rvcl9yZXNvdXJjZXMn
LAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQu
Z3lwOndlYmtpdCcsCiAgICAgICAgICAgICAgICAgJzwoc291cmNlX2RpcikvV1RGL1dURi5neXAv
V1RGLmd5cDp3dGYnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxk
L3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xldXJsJywKICAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDppY3V1YycsCisgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvbWVzYS9tZXNhLmd5cDpv
c21lc2EnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Y4L3Rvb2xzL2d5
cC92OC5neXA6djgnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2Uv
YmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL3dlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmd5cDpibG9iJywKQEAgLTEw
NCwxMyArMTA3LDE3IEBACiAgICAgICAgICAgICAgICAgJzxAKGRydF9maWxlcyknLAogICAgICAg
ICAgICAgXSwKICAgICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAgICAgICAgICAgIFsn
T1M9PSJ3aW4iIG9yIE9TPT0ibWFjIiBvciB0b29sa2l0X3VzZXNfZ3RrPT0xJywgeworICAgICAg
ICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4
Y2x1ZGUnLCAnVGVzdFNoZWxsU3R1YlxcLmNwcCQnXSwKKyAgICAgICAgICAgICAgICAgICAgXSwK
KyAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ09TPT0id2luIicsIHsKICAg
ICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAgICAg
ICAgICdMYXlvdXRUZXN0SGVscGVyJywKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9t
aXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L2FuZ2xlL3NyYy9idWlsZF9hbmdsZS5neXA6bGliRUdM
JywKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3Bh
cnR5L2FuZ2xlL3NyYy9idWlsZF9hbmdsZS5neXA6bGliR0xFU3YyJywKICAgICAgICAgICAgICAg
ICAgICAgXSwKLQogICAgICAgICAgICAgICAgICAgICAncmVzb3VyY2VfaW5jbHVkZV9kaXJzJzog
Wyc8KFNIQVJFRF9JTlRFUk1FRElBVEVfRElSKS93ZWJraXQnXSwKICAgICAgICAgICAgICAgICAg
ICAgJ3NvdXJjZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChTSEFSRURfSU5URVJN
RURJQVRFX0RJUikvbmV0L25ldF9yZXNvdXJjZXMucmMnLApAQCAtMTg3LDYgKzE5NCwxMSBAQAog
ICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ01hY1xcLmNwcCQnXSwKICAgICAg
ICAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgICBb
J29zX3Bvc2l4IT0xIG9yIE9TPT0ibWFjIicsIHsKKyAgICAgICAgICAgICAgICAgICAgJ3NvdXJj
ZXMvJzogWworICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ1Bvc2l4XFwuY3Bw
JCddLAorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIH1dLAogICAgICAg
ICAgICAgICAgIFsndXNlX3gxMSA9PSAxJywgewogICAgICAgICAgICAgICAgICAgICAnZGVwZW5k
ZW5jaWVzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikv
YnVpbGQvbGludXgvc3lzdGVtLmd5cDpmb250Y29uZmlnJywKQEAgLTIxMiw3ICsyMjQsNyBAQAog
ICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIH0seyAjIHVzZV94MTEgIT0g
MQogICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICAg
ICAgICBbJ2V4Y2x1ZGUnLCAnTGludXhcXC5jcHAkJ10KKyAgICAgICAgICAgICAgICAgICAgICAg
IFsnZXhjbHVkZScsICdYMTFcXC5jcHAkJ10sCiAgICAgICAgICAgICAgICAgICAgIF0KICAgICAg
ICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ3Rvb2xraXRfdXNlc19ndGsgPT0gMScs
IHsKQEAgLTIyNSwyNyArMjM3LDM0IEBACiAgICAgICAgICAgICAgICAgICAgICdpbmNsdWRlX2Rp
cnMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChzb3VyY2VfZGlyKS9XZWJLaXQvY2hy
b21pdW0vcHVibGljL2d0aycsCiAgICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAg
ICAgfSx7ICMgdG9vbGtpdF91c2VzX2d0ayAhPSAxCi0gICAgICAgICAgICAgICAgICAgICdzb3Vy
Y2VzLyc6IFsKLSAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdHdGtcXC5jcHAk
J10KLSAgICAgICAgICAgICAgICAgICAgXQogICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAg
ICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKKyAgICAgICAgICAgICAgICAgICAgJ3R5cGUnOiAn
c2hhcmVkX2xpYnJhcnknLAogICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWwog
ICAgICAgICAgICAgICAgICAgICAgICAgJ0ltYWdlRGlmZiNob3N0JywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0
X2Jhc2UnLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdG9v
bHMvYW5kcm9pZC9mb3J3YXJkZXIvZm9yd2FyZGVyLmd5cDpmb3J3YXJkZXInLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL25hdGl2
ZV90ZXN0Lmd5cDpuYXRpdmVfdGVzdF9uYXRpdmVfY29kZScsCiAgICAgICAgICAgICAgICAgICAg
IF0sCi0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIFsnaW5jbHVkZScsICdjaHJvbWl1bS9UZXN0U2hlbGxMaW51eFxcLmNwcCQnXSwKLSAg
ICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICB9LHsgIyBPUyE9ImFuZHJvaWQi
Ci0gICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIFsnZXhjbHVkZScsICcoQW5kcm9pZClcXC5jcHAkJ10KLSAgICAgICAgICAgICAgICAgICAg
XSwKLSAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAg
ICAgICAgJ2RlcGVuZGVuY2llcyEnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnSW1hZ2VE
aWZmJywKICAgICAgICAgICAgICAgICAgICAgICAgICdjb3B5X1Rlc3ROZXRzY2FwZVBsdWdJbics
CiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0
eS9tZXNhL21lc2EuZ3lwOm9zbWVzYScsCiAgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhj
bHVkZScsICdXZWJVc2VyTWVkaWFDbGllbnRNb2NrXFwuY3BwJ10sCisgICAgICAgICAgICAgICAg
ICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdjb3BpZXMnOiBbeworICAgICAgICAgICAgICAg
ICAgICAgICAgJ2Rlc3RpbmF0aW9uJzogJzwoUFJPRFVDVF9ESVIpJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICdmaWxlcyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChhaGVt
X3BhdGgpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnPChJTlRFUk1FRElBVEVfRElS
KS9yZXBhY2svRHVtcFJlbmRlclRyZWUucGFrJywKKyAgICAgICAgICAgICAgICAgICAgICAgIF0K
KyAgICAgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgfSwgeyAjIE9TIT0iYW5k
cm9pZCIKKyAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWworICAgICAgICAgICAgICAg
ICAgICAgICAgWydleGNsdWRlJywgJ0FuZHJvaWRcXC5jcHAkJ10sCisgICAgICAgICAgICAgICAg
ICAgIF0sCiAgICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAgWydpbnNpZGVfY2hy
b21pdW1fYnVpbGQ9PTEgYW5kIGNvbXBvbmVudD09InNoYXJlZF9saWJyYXJ5IicsIHsKICAgICAg
ICAgICAgICAgICAgICAgJ3NvdXJjZXMnOiBbCkBAIC0zODMsNSArNDAyLDQzIEBACiAgICAgICAg
ICAgICAgICAgJ2NmbGFnc19jYyc6IFsnLVduby1jKysweC1jb21wYXQnXSwKICAgICAgICAgICAg
IH0sCiAgICAgICAgIH1dLAorICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CisgICAgICAgICAg
ICAjIFdyYXAgbGliRHVtcFJlbmRlclRyZWUuc28gaW50byBhbiBhbmRyb2lkIGFwayBmb3IgZXhl
Y3V0aW9uLgorICAgICAgICAgICAgIyBTZWUgPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2Uu
Z3lwIGZvciBUT0RPKGpyZylzIGFib3V0IHRoaXMgc3RyYXRlZ3kuCisgICAgICAgICAgICAndGFy
Z2V0cyc6IFt7CisgICAgICAgICAgICAgICAgJ3RhcmdldF9uYW1lJzogJ0R1bXBSZW5kZXJUcmVl
X2FwaycsCisgICAgICAgICAgICAgICAgJ3R5cGUnOiAnbm9uZScsCisgICAgICAgICAgICAgICAg
J2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAgICAgICAgJ0R1bXBSZW5kZXJUcmVlJywK
KyAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICdhY3Rpb25zJzogW3sKKyAgICAg
ICAgICAgICAgICAgICAgIyBHZW5lcmF0ZSBhcGsgZmlsZXMgKGluY2x1ZGluZyBzb3VyY2UgYW5k
IGFudGZpbGUpIGZyb20KKyAgICAgICAgICAgICAgICAgICAgIyBhIHRlbXBsYXRlLCBhbmQgYnVp
bGRzIHRoZW0uCisgICAgICAgICAgICAgICAgICAgICdhY3Rpb25fbmFtZSc6ICdnZW5lcmF0ZV9h
bmRfYnVpbGQnLAorICAgICAgICAgICAgICAgICAgICAnaW5wdXRzJzogWworICAgICAgICAgICAg
ICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL2dlbmVyYXRl
X25hdGl2ZV90ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElS
KS9saWIudGFyZ2V0L2xpYkR1bXBSZW5kZXJUcmVlLnNvJywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICMgRklYTUU6IEJ1aWxkIHRoZSBqYXIgZm9yIG5hdGl2ZSB0ZXN0cyB3aXRoIFNESy4KKyAg
ICAgICAgICAgICAgICAgICAgICAgICMgRm9yIG5vdyB3ZSBhcmUgdXNpbmcgQW5kcm9pZC5tayB0
byBidWlsZCB0aGUgYXBrLgorICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAg
ICAgICAnb3V0cHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElS
KS9EdW1wUmVuZGVyVHJlZV9hcGsvQ2hyb21lTmF0aXZlVGVzdHMtZGVidWcuYXBrJywKKyAgICAg
ICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbic6IFsKKyAgICAg
ICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5kcm9pZC9n
ZW5lcmF0ZV9uYXRpdmVfdGVzdC5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAnLS1uYXRp
dmVfbGlicmFyeScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvbGli
LnRhcmdldC9saWJEdW1wUmVuZGVyVHJlZS5zbycsCisgICAgICAgICAgICAgICAgICAgICAgICAj
IEZJWE1FOiBCdWlsZCB0aGUgamFyIGZvciBuYXRpdmUgdGVzdHMgd2l0aCBTREsuCisgICAgICAg
ICAgICAgICAgICAgICAgICAjICctLWphcicsCisgICAgICAgICAgICAgICAgICAgICAgICAjICdm
b28vYmFyLmphcicsCisgICAgICAgICAgICAgICAgICAgICAgICAnLS1vdXRwdXQnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0R1bXBSZW5kZXJUcmVlX2FwaycsCisg
ICAgICAgICAgICAgICAgICAgICAgICAnLS1hbnQtYXJncycsCisgICAgICAgICAgICAgICAgICAg
ICAgICAnLURQUk9EVUNUX0RJUj08KFBST0RVQ1RfRElSKScsCisgICAgICAgICAgICAgICAgICAg
ICAgICAnLS1hbnQtY29tcGlsZScKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAg
ICAgICB9XSwKKyAgICAgICAgICAgIH1dLAorICAgICAgICB9XSwKICAgICBdLCAjIGNvbmRpdGlv
bnMKIH0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJv
aWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMwIEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
KyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgorCisjaW5jbHVkZSA8
YW5kcm9pZC9sb2cuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGZjbnRsLmg+Cisj
aW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90
eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisKK25hbWVzcGFjZSB7CisKK2NvbnN0IGNoYXIgb3B0aW9uSW5GSUZPW10gPSAiLS1pbi1maWZv
PSI7Citjb25zdCBjaGFyIG9wdGlvbk91dEZJRk9bXSA9ICItLW91dC1maWZvPSI7Citjb25zdCBj
aGFyIG9wdGlvbkVyckZpbGVbXSA9ICItLWVyci1maWxlPSI7CisKK3ZvaWQgYW5kcm9pZExvZ0Vy
cm9yKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKSBXVEZfQVRUUklCVVRFX1BSSU5URigxLCAyKTsK
Kwordm9pZCBhbmRyb2lkTG9nRXJyb3IoY29uc3QgY2hhciogZm9ybWF0LCAuLi4pCit7CisgICAg
dmFfbGlzdCBhcmdzOworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgX19hbmRyb2lk
X2xvZ192cHJpbnQoQU5EUk9JRF9MT0dfRVJST1IsICJEdW1wUmVuZGVyVHJlZSIsIGZvcm1hdCwg
YXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworfQorCit2b2lkIHJlbW92ZUFyZyhpbnQgaW5kZXgs
IGludCogYXJnYywgY2hhcioqKiBhcmd2KQoreworICAgIGZvciAoaW50IGkgPSBpbmRleDsgaSA8
ICphcmdjOyArK2kpCisgICAgICAgICgqYXJndilbaV0gPSAoKmFyZ3YpW2kgKyAxXTsKKyAgICAt
LSphcmdjOworfQorCit2b2lkIGNyZWF0ZUZJRk8oY29uc3QgY2hhciogZmlmb1BhdGgpCit7Cisg
ICAgdW5saW5rKGZpZm9QYXRoKTsKKyAgICBpZiAobWtmaWZvKGZpZm9QYXRoLCAwNjAwKSkgewor
ICAgICAgICBhbmRyb2lkTG9nRXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZmlmbyAlczogJXNcbiIs
IGZpZm9QYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
CisgICAgfQorfQorCit2b2lkIGNyZWF0ZUZpbGUoY29uc3QgY2hhciogZmlsZVBhdGgpCit7Cisg
ICAgdW5saW5rKGZpbGVQYXRoKTsKKyAgICBpbnQgZmQgPSBjcmVhdChmaWxlUGF0aCwgMDYwMCk7
CisgICAgaWYgKGZkIDwgMCkgeworICAgICAgICBhbmRyb2lkTG9nRXJyb3IoIkZhaWxlZCB0byBj
cmVhdGUgZmlsZSAlczogJXNcbiIsIGZpbGVQYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAg
ICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAgfQorICAgIGNsb3NlKGZkKTsKK30KKwordm9pZCBy
ZWRpcmVjdFRvRmlsZShGSUxFKiBzdHJlYW0sIGNvbnN0IGNoYXIqIHBhdGgsIGNvbnN0IGNoYXIq
IG1vZGUpCit7CisgICAgaWYgKCFmcmVvcGVuKHBhdGgsIG1vZGUsIHN0cmVhbSkpIHsKKyAgICAg
ICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gcmVkaXJlY3Qgc3RyZWFtIHRvIGZpbGU6ICVz
OiAlc1xuIiwgcGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxV
UkUpOworICAgIH0KK30KKworfSAvLyBuYW1lc3BhY2UKKwordm9pZCBwbGF0Zm9ybUluaXQoaW50
KiBhcmdjLCBjaGFyKioqIGFyZ3YpCit7CisgICAgY29uc3QgY2hhciogaW5GSUZPID0gMDsKKyAg
ICBjb25zdCBjaGFyKiBvdXRGSUZPID0gMDsKKyAgICBjb25zdCBjaGFyKiBlcnJGaWxlID0gMDsK
KyAgICBmb3IgKGludCBpID0gMTsgaSA8ICphcmdjOyApIHsKKyAgICAgICAgY29uc3QgY2hhciog
YXJndW1lbnQgPSAoKmFyZ3YpW2ldOworICAgICAgICBpZiAoc3Ryc3RyKGFyZ3VtZW50LCBvcHRp
b25JbkZJRk8pID09IGFyZ3VtZW50KSB7CisgICAgICAgICAgICBpbkZJRk8gPSBhcmd1bWVudCAr
IFdURl9BUlJBWV9MRU5HVEgob3B0aW9uSW5GSUZPKSAtIDE7CisgICAgICAgICAgICBjcmVhdGVG
SUZPKGluRklGTyk7CisgICAgICAgICAgICByZW1vdmVBcmcoaSwgYXJnYywgYXJndik7CisgICAg
ICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGFyZ3VtZW50LCBvcHRpb25PdXRGSUZPKSA9PSBhcmd1bWVu
dCkgeworICAgICAgICAgICAgb3V0RklGTyA9IGFyZ3VtZW50ICsgV1RGX0FSUkFZX0xFTkdUSChv
cHRpb25PdXRGSUZPKSAtIDE7CisgICAgICAgICAgICBjcmVhdGVGSUZPKG91dEZJRk8pOworICAg
ICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2MsIGFyZ3YpOworICAgICAgICB9IGVsc2UgaWYgKHN0
cnN0cihhcmd1bWVudCwgb3B0aW9uRXJyRmlsZSkgPT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAg
IGVyckZpbGUgPSBhcmd1bWVudCArIFdURl9BUlJBWV9MRU5HVEgob3B0aW9uRXJyRmlsZSkgLSAx
OworICAgICAgICAgICAgY3JlYXRlRmlsZShlcnJGaWxlKTsKKyAgICAgICAgICAgIHJlbW92ZUFy
ZyhpLCBhcmdjLCBhcmd2KTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICArK2k7CisgICAg
fQorCisgICAgLy8gVGhlIG9yZGVyIG9mIGNyZWF0ZUZJRk8oKSBhbmQgcmVkaXJlY3RUb0ZJRk8o
KSBpcyBpbXBvcnRhbnQgdG8gYXZvaWQgZGVhZGxvY2suCisgICAgaWYgKG91dEZJRk8pCisgICAg
ICAgIHJlZGlyZWN0VG9GaWxlKHN0ZG91dCwgb3V0RklGTywgInciKTsKKyAgICBpZiAoaW5GSUZP
KQorICAgICAgICByZWRpcmVjdFRvRmlsZShzdGRpbiwgaW5GSUZPLCAiciIpOworICAgIGlmIChl
cnJGaWxlKQorICAgICAgICByZWRpcmVjdFRvRmlsZShzdGRlcnIsIGVyckZpbGUsICJ3Iik7Cisg
ICAgZWxzZSB7CisgICAgICAgIC8vIFJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQuCisgICAgICAg
IGR1cDIoMSwgMik7CisgICAgfQorfQoKUHJvcGVydHkgY2hhbmdlcyBvbjogVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDog
c3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwCShyZXZpc2lvbiAxMTgwNTEpCisrKyBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1l
dDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
cgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBv
ZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMg
QU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZ
UklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFNoZWxsLmgiCi0K
LSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotI2luY2x1ZGUgPGZv
bnRjb25maWcvZm9udGNvbmZpZy5oPgotI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNpbmNsdWRlIDxz
aWduYWwuaD4KLQotCi12b2lkIG9wZW5TdGFydHVwRGlhbG9nKCkKLXsKLSAgICBHdGtXaWRnZXQq
IGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoCi0gICAgICAgIDAsIEdUS19ESUFMT0df
TU9EQUwsIEdUS19NRVNTQUdFX0lORk8sIEdUS19CVVRUT05TX09LLCAiQXR0YWNoIHRvIG1lPyIp
OwotICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgIkR1bXBSZW5k
ZXJUcmVlIik7Ci0gICAgZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsgLy8gUnVu
cyBhIG5lc3RlZCBtZXNzYWdlIGxvb3AuCi0gICAgZ3RrX3dpZGdldF9kZXN0cm95KGRpYWxvZyk7
Ci19Ci0KLWJvb2wgY2hlY2tMYXlvdXRUZXN0U3lzdGVtRGVwZW5kZW5jaWVzKCkKLXsKLSAgICBy
ZXR1cm4gdHJ1ZTsKLX0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbExpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGxMaW51eC5jcHAJKHJldmlzaW9uIDExODA1MSkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSwy
MjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0
OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
Ci0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0U2hlbGwuaCIKLQot
I2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNpbmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSAi
d2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKLQotI2lmICFPUyhBTkRST0lEKQotI2lu
Y2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgotI2VuZGlmCi0KLSNpZiBVU0UoR1RLKQot
I2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNlbmRpZgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1
ZGUgPHVuaXN0ZC5oPgotCi1zdGF0aWMgdm9pZCBBbGFybUhhbmRsZXIoaW50KQotewotICAgIC8v
IElmIHRoZSBhbGFybSBhbGFybWVkLCBraWxsIHRoZSBwcm9jZXNzIHNpbmNlIHdlIGhhdmUgYSBy
ZWFsbHkgYmFkIGhhbmcuCi0gICAgcHV0cygiXG4jVEVTVF9USU1FRF9PVVRcbiIpOwotICAgIHB1
dHMoIiNFT0ZcbiIpOwotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIGV4aXQoMCk7Ci19Ci0KLXZv
aWQgVGVzdFNoZWxsOjp3YWl0VGVzdEZpbmlzaGVkKCkKLXsKLSAgICBBU1NFUlQoIW1fdGVzdElz
UGVuZGluZyk7Ci0gICAgbV90ZXN0SXNQZW5kaW5nID0gdHJ1ZTsKLQotICAgIC8vIEluc3RhbGwg
YW4gYWxhcm0gc2lnbmFsIGhhbmRsZXIgdGhhdCB3aWxsIGtpbGwgdXMgaWYgd2UgdGltZSBvdXQu
Ci0gICAgc3RydWN0IHNpZ2FjdGlvbiBhbGFybUFjdGlvbjsKLSAgICBhbGFybUFjdGlvbi5zYV9o
YW5kbGVyID0gQWxhcm1IYW5kbGVyOwotICAgIHNpZ2VtcHR5c2V0KCZhbGFybUFjdGlvbi5zYV9t
YXNrKTsKLSAgICBhbGFybUFjdGlvbi5zYV9mbGFncyA9IDA7Ci0KLSAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIG9sZEFjdGlvbjsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFsYXJtQWN0aW9uLCAmb2xk
QWN0aW9uKTsKLSAgICBhbGFybShsYXlvdXRUZXN0VGltZW91dEZvcldhdGNoRG9nKCkgLyAxMDAw
KTsKLQotICAgIC8vIFRlc3RGaW5pc2hlZCgpIHdpbGwgcG9zdCBhIHF1aXQgbWVzc2FnZSB0byBi
cmVhayB0aGlzIGxvb3Agd2hlbiB0aGUgcGFnZQotICAgIC8vIGZpbmlzaGVzIGxvYWRpbmcuCi0g
ICAgd2hpbGUgKG1fdGVzdElzUGVuZGluZykKLSAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1l
c3NhZ2VMb29wKCk7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIGFsYXJtLgotICAgIGFsYXJtKDApOwot
ICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2xkQWN0aW9uLCAwKTsKLX0KLQotI2lmICFPUyhBTkRS
T0lEKQotc3RhdGljIGJvb2wgY2hlY2tBbmRMb2FkRm9udEZpbGUoRmNDb25maWcqIGZvbnRjZmcs
IGNvbnN0IGNoYXIqIHBhdGgxLCBjb25zdCBjaGFyKiBwYXRoMikKLXsKLSAgICBjb25zdCBjaGFy
KiBmb250ID0gcGF0aDE7Ci0gICAgaWYgKGFjY2Vzcyhmb250LCBSX09LKSA8IDApIHsKLSAgICAg
ICAgZm9udCA9IHBhdGgyOwotICAgICAgICBpZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkgewot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3UgYXJlIG1pc3NpbmcgJXMgb3IgJXMuIFdp
dGhvdXQgdGhpcywgc29tZSBsYXlvdXQgdGVzdHMgbWF5IGZhaWwuICIKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAiU2VlIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtp
L0xheW91dFRlc3RzTGludXggIgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICJmb3IgbW9y
ZS5cbiIsIHBhdGgxLCBwYXRoMik7Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAg
IH0KLSAgICB9Ci0gICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGZvbnRjZmcsIChGY0No
YXI4ICopIGZvbnQpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQg
Zm9udCAlc1xuIiwgZm9udCk7Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLXN0YXRpYyB2b2lkIHNldHVwRm9udGNvbmZpZygpCi17Ci0gICAgLy8g
V2Ugd2lzaCB0byBtYWtlIHRoZSBsYXlvdXQgdGVzdHMgcmVwcm9kdWNhYmxlIHdpdGggcmVzcGVj
dCB0byBmb250cy4gU2tpYQotICAgIC8vIHVzZXMgZm9udGNvbmZpZyB0byByZXNvbHZlIGZvbnQg
ZmFtaWx5IG5hbWVzIGZyb20gV2ViS2l0IGludG8gYWN0dWFsIGZvbnQKLSAgICAvLyBmaWxlcyBm
b3VuZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoaXMgbWVhbnMgdGhhdCBmb250cyB2YXJ5IGJh
c2VkIG9uIHRoZQotICAgIC8vIHN5c3RlbSBhbmQgYWxzbyBvbiB0aGUgZm9udGNvbmZpZyBjb25m
aWd1cmF0aW9uLgotICAgIC8vCi0gICAgLy8gVG8gYXZvaWQgdGhpcyB3ZSBpbml0aWFsaXNlIGZv
bnRjb25maWcgaGVyZSBhbmQgaW5zdGFsbCBhIGNvbmZpZ3VyYXRpb24KLSAgICAvLyB3aGljaCBv
bmx5IGtub3dzIGFib3V0IGEgZmV3LCBzZWxlY3QsIGZvbnRzLgotCi0gICAgLy8gV2UgaGF2ZSBm
b250Y29uZmlnIHBhcnNlIGEgY29uZmlnIGZpbGUgZnJvbSBvdXIgcmVzb3VyY2VzIGZpbGUuIFRo
aXMKLSAgICAvLyBzZXRzIGEgbnVtYmVyIG9mIGFsaWFzZXMgKCJzYW5zIi0+IkFyaWFsIiBldGMp
LCBidXQgZG9lc24ndCBpbmNsdWRlIGFueQotICAgIC8vIGZvbnQgZGlyZWN0b3JpZXMuCi0gICAg
RmNJbml0KCk7Ci0KLSAgICBjaGFyIGRydFBhdGhbUEFUSF9NQVggKyAxXTsKLSAgICBpbnQgZHJ0
UGF0aFNpemUgPSByZWFkbGluaygiL3Byb2Mvc2VsZi9leGUiLCBkcnRQYXRoLCBQQVRIX01BWCk7
Ci0gICAgaWYgKGRydFBhdGhTaXplIDwgMCB8fCBkcnRQYXRoU2l6ZSA+IFBBVEhfTUFYKSB7Ci0g
ICAgICAgIGZwdXRzKCJVbmFibGUgdG8gcmVzb2x2ZSAvcHJvYy9zZWxmL2V4ZS4iLCBzdGRlcnIp
OwotICAgICAgICBleGl0KDEpOwotICAgIH0KLSAgICBkcnRQYXRoW2RydFBhdGhTaXplXSA9IDA7
Ci0gICAgc3RkOjpzdHJpbmcgZHJ0RGlyUGF0aChkcnRQYXRoKTsKLSAgICBzaXplX3QgbGFzdFBh
dGhQb3MgPSBkcnREaXJQYXRoLnJmaW5kKCIvIik7Ci0gICAgQVNTRVJUKGxhc3RQYXRoUG9zICE9
IHN0ZDo6c3RyaW5nOjpucG9zKTsKLSAgICBkcnREaXJQYXRoLmVyYXNlKGxhc3RQYXRoUG9zICsg
MSk7Ci0KLSAgICBGY0NvbmZpZyogZm9udGNmZyA9IEZjQ29uZmlnQ3JlYXRlKCk7Ci0gICAgc3Rk
OjpzdHJpbmcgZm9udGNvbmZpZ1BhdGggPSBkcnREaXJQYXRoICsgImZvbnRzLmNvbmYiOwotICAg
IGlmICghRmNDb25maWdQYXJzZUFuZExvYWQoZm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBGY0NoYXI4Kj4oZm9udGNvbmZpZ1BhdGguY19zdHIoKSksIHRydWUpKSB7Ci0gICAgICAgIGZw
dXRzKCJGYWlsZWQgdG8gcGFyc2UgZm9udGNvbmZpZyBjb25maWcgZmlsZVxuIiwgc3RkZXJyKTsK
LSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICAvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIGZv
bnRzIHRoYXQgZm9udGNvbmZpZyB3aWxsIGtub3cgYWJvdXQuIEl0Ci0gICAgLy8gd2lsbCB0cnkg
aXRzIGJlc3QgdG8gbWF0Y2ggYmFzZWQgb25seSBvbiB0aGUgZm9udHMgaGVyZSBpbi4gVGhlCi0g
ICAgLy8gcGF0aHMgYXJlIHdoZXJlIHRoZXNlIGZvbnRzIGFyZSBmb3VuZCBvbiBvdXIgVWJ1bnR1
IGJveGVzLgotICAgIHN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBmb250c1tdID0gewotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9rb2NoaS9rb2NoaS1nb3RoaWMudHRmIiwKLSAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUva29jaGkva29jaGktbWluY2hvLnR0ZiIs
Ci0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWwu
dHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9B
cmlhbF9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvQXJpYWxfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5zX01TLnR0ZiIs
Ci0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ29taWNf
U2Fuc19NU19Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvQ291cmllcl9OZXcudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19Cb2xkLnR0ZiIsCi0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9sZF9J
dGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9Db3VyaWVyX05ld19JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYV9Cb2xkLnR0ZiIsCi0gICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYV9Cb2xkX0l0
YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZv
bnRzL0dlb3JnaWFfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvSW1wYWN0LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TLnR0ZiIsCi0gICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGQudHRm
IiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVi
dWNoZXRfTVNfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfSXRhbGljLnR0ZiIsCi0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuLnR0
ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGlt
ZXNfTmV3X1JvbWFuX0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5
cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW5fQm9sZF9JdGFsaWMudHRmIiwKLSAgICAg
ICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9t
YW5fSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvVmVyZGFuYS50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfQm9sZF9JdGFsaWMudHRmIiwKLSAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0l0
YWxpYy50dGYiLAotICAgICAgICAvLyBUaGUgRGVqYVZ1U2FucyBmb250IGlzIHVzZWQgYnkgdGhl
IGNzczIuMSB0ZXN0cy4KLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWRl
amF2dS9EZWphVnVTYW5zLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L3R0Zi1pbmRpYy1mb250cy1jb3JlL2xvaGl0X2hpLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL2xvaGl0X3RhLnR0ZiIsCi0gICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL011a3Rp
TmFycm93LnR0ZiIsCi0gICAgfTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6
ZShmb250cyk7ICsraSkgewotICAgICAgICBpZiAoYWNjZXNzKGZvbnRzW2ldLCBSX09LKSkgewot
ICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3UgYXJlIG1pc3NpbmcgJXMuIFRyeSByZS1y
dW5uaW5nIGJ1aWxkL2luc3RhbGwtYnVpbGQtZGVwcy5zaC4gQWxzbyBzZWUgIgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICJodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lr
aS9MYXlvdXRUZXN0c0xpbnV4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb250c1tp
XSk7Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgICAgIGlmICghRmNDb25m
aWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCAoRmNDaGFyOCAqKSBmb250c1tpXSkpIHsKLSAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgZm9udHNb
aV0pOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
Y2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
dGhhaS9HYXJ1ZGEudHRmIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL3Rsd2cvR2FydWRhLnR0ZiIpKQotICAgICAgICBleGl0KDEpOwot
Ci0gICAgLy8gV2Ugc3BlY2lhbCBjYXNlIHRoZXNlIGZvbnRzIGJlY2F1c2UgdGhleSdyZSBvbmx5
IG5lZWRlZCBpbiBhCi0gICAgLy8gZmV3IGxheW91dCB0ZXN0cy4KLSAgICBjaGVja0FuZExvYWRG
b250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9u
dHMtY29yZS9sb2hpdF9wYS50dGYiLCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS90dGYtcHVuamFiaS1mb250cy9sb2hpdF9wYS50dGYiKTsKLQot
ICAgIC8vIEFsc28gbG9hZCB0aGUgbGF5b3V0LXRlc3Qtc3BlY2lmaWMgIkFoZW0iIGZvbnQuCi0g
ICAgc3RkOjpzdHJpbmcgYWhlbVBhdGggPSBkcnREaXJQYXRoICsgIkFIRU1fX19fLlRURiI7Ci0g
ICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGZvbnRjZmcsIHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgRmNDaGFyOCo+KGFoZW1QYXRoLmNfc3RyKCkpKSkgewotICAgICAgICBmcHJpbnRmKHN0
ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGFoZW1QYXRoLmNfc3RyKCkpOwotICAg
ICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIGlmICghRmNDb25maWdTZXRDdXJyZW50KGZvbnRj
ZmcpKSB7Ci0gICAgICAgIGZwdXRzKCJGYWlsZWQgdG8gc2V0IHRoZSBkZWZhdWx0IGZvbnQgY29u
ZmlndXJhdGlvblxuIiwgc3RkZXJyKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci19Ci0jZW5k
aWYgLy8gIU9TKEFORFJPSUQpCi0KLXZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hhcioq
KiBhcmd2KQotewotICAgIC8vIEZJWE1FOiBJdCdzIGJldHRlciBjYWxsIGd0a19pbml0KCkgb25s
eSB3aGVuIHdlIHJ1biBwbHVnaW4gdGVzdHMuCi0gICAgLy8gU2VlIGh0dHA6Ly9ncm91cHMuZ29v
Z2xlLmNvbS9hL2Nocm9taXVtLm9yZy9ncm91cC9jaHJvbWl1bS1kZXYvYnJvd3NlX3RocmVhZC90
aHJlYWQvNjMzZWExNjdjZGUxOTZjYSMKLSNpZiBVU0UoR1RLKQotICAgIGd0a19pbml0KGFyZ2Ms
IGFyZ3YpOwotI2VuZGlmCi0KLSNpZiAhT1MoQU5EUk9JRCkKLSAgICBzZXR1cEZvbnRjb25maWco
KTsKLSNlbmRpZgotfQotCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxQb3NpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21p
dW0vVGVzdFNoZWxsUG9zaXguY3BwCShyZXZpc2lvbiAwKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDcx
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgorCisjaW5jbHVk
ZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKKworI2luY2x1ZGUgPHNpZ25hbC5o
PgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgdm9pZCBBbGFybUhhbmRsZXIoaW50KQor
eworICAgIC8vIElmIHRoZSBhbGFybSBhbGFybWVkLCBraWxsIHRoZSBwcm9jZXNzIHNpbmNlIHdl
IGhhdmUgYSByZWFsbHkgYmFkIGhhbmcuCisgICAgcHV0cygiXG4jVEVTVF9USU1FRF9PVVRcbiIp
OworICAgIHB1dHMoIiNFT0ZcbiIpOworICAgIGZmbHVzaChzdGRvdXQpOworICAgIGV4aXQoMCk7
Cit9CisKK3ZvaWQgVGVzdFNoZWxsOjp3YWl0VGVzdEZpbmlzaGVkKCkKK3sKKyAgICBBU1NFUlQo
IW1fdGVzdElzUGVuZGluZyk7CisgICAgbV90ZXN0SXNQZW5kaW5nID0gdHJ1ZTsKKworICAgIC8v
IEluc3RhbGwgYW4gYWxhcm0gc2lnbmFsIGhhbmRsZXIgdGhhdCB3aWxsIGtpbGwgdXMgaWYgd2Ug
dGltZSBvdXQuCisgICAgc3RydWN0IHNpZ2FjdGlvbiBhbGFybUFjdGlvbjsKKyAgICBhbGFybUFj
dGlvbi5zYV9oYW5kbGVyID0gQWxhcm1IYW5kbGVyOworICAgIHNpZ2VtcHR5c2V0KCZhbGFybUFj
dGlvbi5zYV9tYXNrKTsKKyAgICBhbGFybUFjdGlvbi5zYV9mbGFncyA9IDA7CisKKyAgICBzdHJ1
Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbjsKKyAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFsYXJtQWN0
aW9uLCAmb2xkQWN0aW9uKTsKKyAgICBhbGFybShsYXlvdXRUZXN0VGltZW91dEZvcldhdGNoRG9n
KCkgLyAxMDAwKTsKKworICAgIC8vIFRlc3RGaW5pc2hlZCgpIHdpbGwgcG9zdCBhIHF1aXQgbWVz
c2FnZSB0byBicmVhayB0aGlzIGxvb3Agd2hlbiB0aGUgcGFnZQorICAgIC8vIGZpbmlzaGVzIGxv
YWRpbmcuCisgICAgd2hpbGUgKG1fdGVzdElzUGVuZGluZykKKyAgICAgICAgd2Via2l0X3N1cHBv
cnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CisKKyAgICAvLyBSZW1vdmUgdGhlIGFsYXJtLgorICAgIGFs
YXJtKDApOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2xkQWN0aW9uLCAwKTsKK30KClByb3Bl
cnR5IGNoYW5nZXMgb246IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBv
c2l4LmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBU
b29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAJKHJldmlz
aW9uIDExODAxMCkJKGZyb20gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
TGludXguY3BwOjExODAxMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbFgxMS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMjMgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJpYnV0
aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5h
bWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFT
IElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAor
ICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCisKKyNpbmNsdWRlICJTa1R5cGVmYWNlLmgi
CisjaW5jbHVkZSAiV2ViVmlldy5oIgorI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9z
dXBwb3J0LmgiCisKKyNpZiAhT1MoQU5EUk9JRCkKKyNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRj
b25maWcuaD4KKyNlbmRpZgorCisjaWYgVVNFKEdUSykKKyNpbmNsdWRlIDxndGsvZ3RrLmg+Cisj
ZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGlj
IHZvaWQgQWxhcm1IYW5kbGVyKGludCkKK3sKKyAgICAvLyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwg
a2lsbCB0aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5IGJhZCBoYW5nLgorICAgIHB1
dHMoIlxuI1RFU1RfVElNRURfT1VUXG4iKTsKKyAgICBwdXRzKCIjRU9GXG4iKTsKKyAgICBmZmx1
c2goc3Rkb3V0KTsKKyAgICBleGl0KDApOworfQorCit2b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RG
aW5pc2hlZCgpCit7CisgICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRpbmcpOworICAgIG1fdGVzdElz
UGVuZGluZyA9IHRydWU7CisKKyAgICAvLyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVy
IHRoYXQgd2lsbCBraWxsIHVzIGlmIHdlIHRpbWUgb3V0LgorICAgIHN0cnVjdCBzaWdhY3Rpb24g
YWxhcm1BY3Rpb247CisgICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsK
KyAgICBzaWdlbXB0eXNldCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7CisgICAgYWxhcm1BY3Rpb24u
c2FfZmxhZ3MgPSAwOworCisgICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247CisgICAgc2ln
YWN0aW9uKFNJR0FMUk0sICZhbGFybUFjdGlvbiwgJm9sZEFjdGlvbik7CisgICAgYWxhcm0obGF5
b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAwMCk7CisKKyAgICAvLyBUZXN0RmluaXNo
ZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhl
IHBhZ2UKKyAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgorICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRp
bmcpCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworCisgICAgLy8g
UmVtb3ZlIHRoZSBhbGFybS4KKyAgICBhbGFybSgwKTsKKyAgICBzaWdhY3Rpb24oU0lHQUxSTSwg
Jm9sZEFjdGlvbiwgMCk7Cit9CisKKyNpZiAhT1MoQU5EUk9JRCkKK3N0YXRpYyBib29sIGNoZWNr
QW5kTG9hZEZvbnRGaWxlKEZjQ29uZmlnKiBmb250Y2ZnLCBjb25zdCBjaGFyKiBwYXRoMSwgY29u
c3QgY2hhciogcGF0aDIpCit7CisgICAgY29uc3QgY2hhciogZm9udCA9IHBhdGgxOworICAgIGlm
IChhY2Nlc3MoZm9udCwgUl9PSykgPCAwKSB7CisgICAgICAgIGZvbnQgPSBwYXRoMjsKKyAgICAg
ICAgaWYgKGFjY2Vzcyhmb250LCBSX09LKSA8IDApIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiWW91IGFyZSBtaXNzaW5nICVzIG9yICVzLiBXaXRob3V0IHRoaXMsIHNvbWUgbGF5b3V0
IHRlc3RzIG1heSBmYWlsLiAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSBodHRw
Oi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4ICIKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIG1vcmUuXG4iLCBwYXRoMSwgcGF0aDIpOwor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGlmICghRmND
b25maWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCAoRmNDaGFyOCAqKSBmb250KSkgeworICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGZvbnQpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMg
dm9pZCBzZXR1cEZvbnRjb25maWcoKQoreworICAgIC8vIFdlIHdpc2ggdG8gbWFrZSB0aGUgbGF5
b3V0IHRlc3RzIHJlcHJvZHVjYWJsZSB3aXRoIHJlc3BlY3QgdG8gZm9udHMuIFNraWEKKyAgICAv
LyB1c2VzIGZvbnRjb25maWcgdG8gcmVzb2x2ZSBmb250IGZhbWlseSBuYW1lcyBmcm9tIFdlYktp
dCBpbnRvIGFjdHVhbCBmb250CisgICAgLy8gZmlsZXMgZm91bmQgb24gdGhlIGN1cnJlbnQgc3lz
dGVtLiBUaGlzIG1lYW5zIHRoYXQgZm9udHMgdmFyeSBiYXNlZCBvbiB0aGUKKyAgICAvLyBzeXN0
ZW0gYW5kIGFsc28gb24gdGhlIGZvbnRjb25maWcgY29uZmlndXJhdGlvbi4KKyAgICAvLworICAg
IC8vIFRvIGF2b2lkIHRoaXMgd2UgaW5pdGlhbGlzZSBmb250Y29uZmlnIGhlcmUgYW5kIGluc3Rh
bGwgYSBjb25maWd1cmF0aW9uCisgICAgLy8gd2hpY2ggb25seSBrbm93cyBhYm91dCBhIGZldywg
c2VsZWN0LCBmb250cy4KKworICAgIC8vIFdlIGhhdmUgZm9udGNvbmZpZyBwYXJzZSBhIGNvbmZp
ZyBmaWxlIGZyb20gb3VyIHJlc291cmNlcyBmaWxlLiBUaGlzCisgICAgLy8gc2V0cyBhIG51bWJl
ciBvZiBhbGlhc2VzICgic2FucyItPiJBcmlhbCIgZXRjKSwgYnV0IGRvZXNuJ3QgaW5jbHVkZSBh
bnkKKyAgICAvLyBmb250IGRpcmVjdG9yaWVzLgorICAgIEZjSW5pdCgpOworCisgICAgY2hhciBk
cnRQYXRoW1BBVEhfTUFYICsgMV07CisgICAgaW50IGRydFBhdGhTaXplID0gcmVhZGxpbmsoIi9w
cm9jL3NlbGYvZXhlIiwgZHJ0UGF0aCwgUEFUSF9NQVgpOworICAgIGlmIChkcnRQYXRoU2l6ZSA8
IDAgfHwgZHJ0UGF0aFNpemUgPiBQQVRIX01BWCkgeworICAgICAgICBmcHV0cygiVW5hYmxlIHRv
IHJlc29sdmUgL3Byb2Mvc2VsZi9leGUuIiwgc3RkZXJyKTsKKyAgICAgICAgZXhpdCgxKTsKKyAg
ICB9CisgICAgZHJ0UGF0aFtkcnRQYXRoU2l6ZV0gPSAwOworICAgIHN0ZDo6c3RyaW5nIGRydERp
clBhdGgoZHJ0UGF0aCk7CisgICAgc2l6ZV90IGxhc3RQYXRoUG9zID0gZHJ0RGlyUGF0aC5yZmlu
ZCgiLyIpOworICAgIEFTU0VSVChsYXN0UGF0aFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Cisg
ICAgZHJ0RGlyUGF0aC5lcmFzZShsYXN0UGF0aFBvcyArIDEpOworCisgICAgRmNDb25maWcqIGZv
bnRjZmcgPSBGY0NvbmZpZ0NyZWF0ZSgpOworICAgIHN0ZDo6c3RyaW5nIGZvbnRjb25maWdQYXRo
ID0gZHJ0RGlyUGF0aCArICJmb250cy5jb25mIjsKKyAgICBpZiAoIUZjQ29uZmlnUGFyc2VBbmRM
b2FkKGZvbnRjZmcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRjb25maWdQ
YXRoLmNfc3RyKCkpLCB0cnVlKSkgeworICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHBhcnNlIGZv
bnRjb25maWcgY29uZmlnIGZpbGVcbiIsIHN0ZGVycik7CisgICAgICAgIGV4aXQoMSk7CisgICAg
fQorCisgICAgLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiBmb250cyB0aGF0IGZvbnRjb25maWcgd2ls
bCBrbm93IGFib3V0LiBJdAorICAgIC8vIHdpbGwgdHJ5IGl0cyBiZXN0IHRvIG1hdGNoIGJhc2Vk
IG9ubHkgb24gdGhlIGZvbnRzIGhlcmUgaW4uIFRoZQorICAgIC8vIHBhdGhzIGFyZSB3aGVyZSB0
aGVzZSBmb250cyBhcmUgZm91bmQgb24gb3VyIFVidW50dSBib3hlcy4KKyAgICBzdGF0aWMgY29u
c3QgY2hhciAqY29uc3QgZm9udHNbXSA9IHsKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUva29jaGkva29jaGktZ290aGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL2tvY2hpL2tvY2hpLW1pbmNoby50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsLnR0ZiIsCisgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfQm9sZC50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGRfSXRh
bGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9u
dHMvQXJpYWxfSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvQ29taWNfU2Fuc19NUy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVNfQm9sZC50dGYiLAorICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3
LnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
Q291cmllcl9OZXdfQm9sZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3X0JvbGRfSXRhbGljLnR0ZiIsCisgICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfSXRhbGlj
LnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
R2VvcmdpYS50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL0dlb3JnaWFfQm9sZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFfQm9sZF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0l0YWxpYy50dGYi
LAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0ltcGFj
dC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L1RyZWJ1Y2hldF9NUy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGRfSXRhbGljLnR0
ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJl
YnVjaGV0X01TX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbi50dGYiLAorICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkLnR0ZiIs
CisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNf
TmV3X1JvbWFuX0JvbGRfSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0l0YWxpYy50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmEudHRmIiwK
KyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5h
X0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9WZXJkYW5hX0JvbGRfSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYV9JdGFsaWMudHRmIiwKKyAgICAgICAgLy8g
VGhlIERlamFWdVNhbnMgZm9udCBpcyB1c2VkIGJ5IHRoZSBjc3MyLjEgdGVzdHMuCisgICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2Fucy50dGYiLAor
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9s
b2hpdF9oaS50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5k
aWMtZm9udHMtY29yZS9sb2hpdF90YS50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9NdWt0aU5hcnJvdy50dGYiLAorICAgIH07Cisg
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoZm9udHMpOyArK2kpIHsKKyAgICAg
ICAgaWYgKGFjY2Vzcyhmb250c1tpXSwgUl9PSykpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk
ZXJyLCAiWW91IGFyZSBtaXNzaW5nICVzLiBUcnkgcmUtcnVubmluZyBidWlsZC9pbnN0YWxsLWJ1
aWxkLWRlcHMuc2guIEFsc28gc2VlICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0
cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5b3V0VGVzdHNMaW51eCIsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udHNbaV0pOworICAgICAgICAgICAgZXhpdCgx
KTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNm
ZywgKEZjQ2hhcjggKikgZm9udHNbaV0pKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwg
IkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGZvbnRzW2ldKTsKKyAgICAgICAgICAgIGV4aXQo
MSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIWNoZWNrQW5kTG9hZEZvbnRGaWxlKGZv
bnRjZmcsICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3RoYWkvR2FydWRhLnR0ZiIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90bHdn
L0dhcnVkYS50dGYiKSkKKyAgICAgICAgZXhpdCgxKTsKKworICAgIC8vIFdlIHNwZWNpYWwgY2Fz
ZSB0aGVzZSBmb250cyBiZWNhdXNlIHRoZXkncmUgb25seSBuZWVkZWQgaW4gYQorICAgIC8vIGZl
dyBsYXlvdXQgdGVzdHMuCisgICAgY2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfcGEudHRmIiwg
CisgICAgICAgICAgICAgICAgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRm
LXB1bmphYmktZm9udHMvbG9oaXRfcGEudHRmIik7CisKKyAgICAvLyBBbHNvIGxvYWQgdGhlIGxh
eW91dC10ZXN0LXNwZWNpZmljICJBaGVtIiBmb250LgorICAgIHN0ZDo6c3RyaW5nIGFoZW1QYXRo
ID0gZHJ0RGlyUGF0aCArICJBSEVNX19fXy5UVEYiOworICAgIGlmICghRmNDb25maWdBcHBGb250
QWRkRmlsZShmb250Y2ZnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihhaGVtUGF0
aC5jX3N0cigpKSkpIHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBm
b250ICVzXG4iLCBhaGVtUGF0aC5jX3N0cigpKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisK
KyAgICBpZiAoIUZjQ29uZmlnU2V0Q3VycmVudChmb250Y2ZnKSkgeworICAgICAgICBmcHV0cygi
RmFpbGVkIHRvIHNldCB0aGUgZGVmYXVsdCBmb250IGNvbmZpZ3VyYXRpb25cbiIsIHN0ZGVycik7
CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorfQorI2VuZGlmIC8vICFPUyhBTkRST0lEKQorCit2
b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKK3sKKyAgICAvLyBGSVhN
RTogSXQncyBiZXR0ZXIgY2FsbCBndGtfaW5pdCgpIG9ubHkgd2hlbiB3ZSBydW4gcGx1Z2luIHRl
c3RzLgorICAgIC8vIFNlZSBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20vYS9jaHJvbWl1bS5vcmcv
Z3JvdXAvY2hyb21pdW0tZGV2L2Jyb3dzZV90aHJlYWQvdGhyZWFkLzYzM2VhMTY3Y2RlMTk2Y2Ej
CisjaWYgVVNFKEdUSykKKyAgICBndGtfaW5pdChhcmdjLCBhcmd2KTsKKyNlbmRpZgorCisjaWYg
IU9TKEFORFJPSUQpCisgICAgc2V0dXBGb250Y29uZmlnKCk7CisjZW5kaWYKK30KKwpJbmRleDog
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCShyZXZp
c2lvbiAxMTgwMTApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxY
MTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChD
KSAyMDEyIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMSw1NSArMzEsMjYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJUZXN0U2hlbGwuaCIKIAotI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKLSNp
bmNsdWRlICJXZWJWaWV3LmgiCi0jaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBv
cnQuaCIKLQotI2lmICFPUyhBTkRST0lEKQogI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZp
Zy5oPgotI2VuZGlmCiAKICNpZiBVU0UoR1RLKQogI2luY2x1ZGUgPGd0ay9ndGsuaD4KLSNlbmRp
ZgotI2luY2x1ZGUgPHNpZ25hbC5oPgotI2luY2x1ZGUgPHVuaXN0ZC5oPgogCi1zdGF0aWMgdm9p
ZCBBbGFybUhhbmRsZXIoaW50KQordm9pZCBvcGVuU3RhcnR1cERpYWxvZygpCiB7Ci0gICAgLy8g
SWYgdGhlIGFsYXJtIGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJl
YWxseSBiYWQgaGFuZy4KLSAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7Ci0gICAgcHV0
cygiI0VPRlxuIik7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgZXhpdCgwKTsKKyAgICBHdGtX
aWRnZXQqIGRpYWxvZyA9IGd0a19tZXNzYWdlX2RpYWxvZ19uZXcoCisgICAgICAgIDAsIEdUS19E
SUFMT0dfTU9EQUwsIEdUS19NRVNTQUdFX0lORk8sIEdUS19CVVRUT05TX09LLCAiQXR0YWNoIHRv
IG1lPyIpOworICAgIGd0a193aW5kb3dfc2V0X3RpdGxlKEdUS19XSU5ET1coZGlhbG9nKSwgIkR1
bXBSZW5kZXJUcmVlIik7CisgICAgZ3RrX2RpYWxvZ19ydW4oR1RLX0RJQUxPRyhkaWFsb2cpKTsg
Ly8gUnVucyBhIG5lc3RlZCBtZXNzYWdlIGxvb3AuCisgICAgZ3RrX3dpZGdldF9kZXN0cm95KGRp
YWxvZyk7CiB9CiAKLXZvaWQgVGVzdFNoZWxsOjp3YWl0VGVzdEZpbmlzaGVkKCkKK2Jvb2wgY2hl
Y2tMYXlvdXRUZXN0U3lzdGVtRGVwZW5kZW5jaWVzKCkKIHsKLSAgICBBU1NFUlQoIW1fdGVzdElz
UGVuZGluZyk7Ci0gICAgbV90ZXN0SXNQZW5kaW5nID0gdHJ1ZTsKLQotICAgIC8vIEluc3RhbGwg
YW4gYWxhcm0gc2lnbmFsIGhhbmRsZXIgdGhhdCB3aWxsIGtpbGwgdXMgaWYgd2UgdGltZSBvdXQu
Ci0gICAgc3RydWN0IHNpZ2FjdGlvbiBhbGFybUFjdGlvbjsKLSAgICBhbGFybUFjdGlvbi5zYV9o
YW5kbGVyID0gQWxhcm1IYW5kbGVyOwotICAgIHNpZ2VtcHR5c2V0KCZhbGFybUFjdGlvbi5zYV9t
YXNrKTsKLSAgICBhbGFybUFjdGlvbi5zYV9mbGFncyA9IDA7Ci0KLSAgICBzdHJ1Y3Qgc2lnYWN0
aW9uIG9sZEFjdGlvbjsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJmFsYXJtQWN0aW9uLCAmb2xk
QWN0aW9uKTsKLSAgICBhbGFybShsYXlvdXRUZXN0VGltZW91dEZvcldhdGNoRG9nKCkgLyAxMDAw
KTsKLQotICAgIC8vIFRlc3RGaW5pc2hlZCgpIHdpbGwgcG9zdCBhIHF1aXQgbWVzc2FnZSB0byBi
cmVhayB0aGlzIGxvb3Agd2hlbiB0aGUgcGFnZQotICAgIC8vIGZpbmlzaGVzIGxvYWRpbmcuCi0g
ICAgd2hpbGUgKG1fdGVzdElzUGVuZGluZykKLSAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1l
c3NhZ2VMb29wKCk7Ci0KLSAgICAvLyBSZW1vdmUgdGhlIGFsYXJtLgotICAgIGFsYXJtKDApOwot
ICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2xkQWN0aW9uLCAwKTsKKyAgICByZXR1cm4gdHJ1ZTsK
IH0KKyNlbmRpZiAvLyBVU0UoR1RLKQogCi0jaWYgIU9TKEFORFJPSUQpCiBzdGF0aWMgYm9vbCBj
aGVja0FuZExvYWRGb250RmlsZShGY0NvbmZpZyogZm9udGNmZywgY29uc3QgY2hhciogcGF0aDEs
IGNvbnN0IGNoYXIqIHBhdGgyKQogewogICAgIGNvbnN0IGNoYXIqIGZvbnQgPSBwYXRoMTsKQEAg
LTIwNiw3ICsxNzcsNiBAQCBzdGF0aWMgdm9pZCBzZXR1cEZvbnRjb25maWcoKQogICAgICAgICBl
eGl0KDEpOwogICAgIH0KIH0KLSNlbmRpZiAvLyAhT1MoQU5EUk9JRCkKIAogdm9pZCBwbGF0Zm9y
bUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCiB7CkBAIC0yMTYsOCArMTg2LDUgQEAgdm9p
ZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZwogICAgIGd0a19pbml0KGFyZ2Ms
IGFyZ3YpOwogI2VuZGlmCiAKLSNpZiAhT1MoQU5EUk9JRCkKICAgICBzZXR1cEZvbnRjb25maWco
KTsKLSNlbmRpZgogfQotCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143375</attachid>
            <date>2012-05-22 15:19:21 -0700</date>
            <delta_ts>2012-05-22 15:53:51 -0700</delta_ts>
            <desc>patch for landing</desc>
            <filename>86922b</filename>
            <type>text/plain</type>
            <size>45095</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTgwNjIpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDEyLTA1LTIyICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBhcyBhbiBh
cGsgKEMrKyBhbmQgZ3lwIHBhcnQpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NjkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhIGFu
ZCBUb255IENoYW5nLgorCisgICAgICAgICogQWxsLmd5cDogQWRkZWQgRHVtcFJlbmRlclRyZWVf
YXBrIGludG8gZGVwZW5kZW5jaWVzIGZvciBBbmRyb2lkLgorCiAyMDEyLTA1LTIyICBLYXVzYWx5
YSBNYWRodXN1ZGhhbmFuICA8a21hZGh1c3VAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtDaHJv
bWl1bV0gVXNlIG92ZXJsb2FkZWQgcHJpbnRCZWdpbigpIHdlYmtpdCBBUEkgdG8gc3VwcG9ydCBh
dXRvIGZpdCB0byBwYWdlIGZ1bmN0aW9uYWxpdHkuCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL0FsbC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9BbGwuZ3lw
CShyZXZpc2lvbiAxMTgwNTEpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0FsbC5neXAJKHdv
cmtpbmcgY29weSkKQEAgLTQ0LDYgKzQ0LDEzIEBACiAgICAgICAgICAgICAgICAgJy4uLy4uLy4u
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5n
eXA6RHVtcFJlbmRlclRyZWUnLAogICAgICAgICAgICAgICAgICcuLi8uLi8uLi9Ub29scy9UZXN0
V2ViS2l0QVBJL1Rlc3RXZWJLaXRBUEkuZ3lwL1Rlc3RXZWJLaXRBUEkuZ3lwOlRlc3RXZWJLaXRB
UEknLAogICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICdjb25kaXRpb25zJzogWworICAgICAg
ICAgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKKyAgICAgICAgICAgICAgICAgICAgJ2RlcGVu
ZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICcuLi8uLi8uLi9Ub29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwOkR1bXBSZW5k
ZXJUcmVlX2FwaycsCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgfV0s
CisgICAgICAgICAgICBdLAogICAgICAgICB9CiAgICAgXSwKIH0KSW5kZXg6IFRvb2xzL0NoYW5n
ZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9DaGFuZ2VMb2cJKHJldmlzaW9uIDExODA2MikKKysr
IFRvb2xzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI5IEBACisyMDEyLTA1
LTIyICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
W0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBhcyBhbiBhcGsgKEMrKyBhbmQg
Z3lwIHBhcnQpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD04NjkyMgorCisgICAgICAgIEJlY2F1c2Ugd2UgaGF2ZSBuZXcgcGxhdGZvcm1Jbml0KCkgaW4g
VGVzdFNoZWxsQW5kcm9pZC5jcHAsIGFuZAorICAgICAgICB3ZSBzdGlsbCBuZWVkIHRoZSB0aW1l
b3V0IHBhcnQgaW4gVGVzdFNoZWxsTGludXguY3BwLCBUZXN0U2hlbGxMaW51eC5jcHAKKyAgICAg
ICAgaXMgc3BsaXQgaW50byBUZXN0U2hlbGxQb3NpeC5jcHAgYW5kIFRlc3RTaGVsbFgxMS5jcHAu
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgS2VudCBUYW11cmEgYW5kIFRvbnkgQ2hhbmcuCisKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUu
Z3lwOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cGk6IFNvdXJj
ZSBmaWxlIGNvbmRpdGlvbnMgbW92ZWQgaW50byBEdW1wUmVuZGVyVHJlZS5neXAuCisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHA6IEFkZGVkLiBI
YW5kbGVzIGNvbW1hbmQgbGluZXMgdG8gcmVkaXJlY3Qgc3RkaW4vc3Rkb3V0L3N0ZGVyci4KKyAg
ICAgICAgKHBsYXRmb3JtSW5pdCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsR3RrLmNwcDogUmVtb3ZlZC4gTWVyZ2VkIGludG8gVGVzdFNoZWxsWDExLmNwcAor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNwcDogUmVt
b3ZlZC4gU3BsaXQgaW50byBUZXN0U2hlbGxQb3NpeC5jcHAgYW5kIFRlc3RTaGVsbFgxMS5jcHAu
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3BwOiBT
cGxpdCBmcm9tIFRlc3RTaGVsbExpbnV4LmNwcCwgY29udGFpbmluZyB0aGUgdGltZW91dCBoYW5k
bGluZyBwYXJ0LCBjb21waWxlZCB3aGVuIG9zX3Bvc2l4PTEgKGV4Y2x1ZGluZyBtYWMpLgorICAg
ICAgICAoQWxhcm1IYW5kbGVyKToKKyAgICAgICAgKFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hl
ZCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcDog
U3BsaXQgZnJvbSBUZXN0U2hlbGxMaW51eC5jcHAsIGNvbnRhaW5pbmcgdGhlIGZvbnRjb25maWcg
cGFydCwgY29tcGlsZWQgd2hlbiB1c2VfeDExPTEKKyAgICAgICAgKG9wZW5TdGFydHVwRGlhbG9n
KTogZnJvbSBUZXN0U2hlbGxHdGsuY3BwCisgICAgICAgIChjaGVja0xheW91dFRlc3RTeXN0ZW1E
ZXBlbmRlbmNpZXMpOiBmcm9tIFRlc3RTaGVsbEd0ay5jcHAuCisgICAgICAgIChzZXR1cEZvbnRj
b25maWcpOgorICAgICAgICAocGxhdGZvcm1Jbml0KToKKwogMjAxMi0wNS0yMiAgS2F1c2FseWEg
TWFkaHVzdWRoYW5hbiAgPGttYWRodXN1QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21p
dW1dIFVzZSBvdmVybG9hZGVkIHByaW50QmVnaW4oKSB3ZWJraXQgQVBJIHRvIHN1cHBvcnQgYXV0
byBmaXQgdG8gcGFnZSBmdW5jdGlvbmFsaXR5LgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9E
dW1wUmVuZGVyVHJlZS5neXBpCShyZXZpc2lvbiAxMTgwNTEpCisrKyBUb29scy9EdW1wUmVuZGVy
VHJlZS9EdW1wUmVuZGVyVHJlZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTIg
QEAKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuaCcsCiAg
ICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFNoZWxsLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNw
cCcsCi0gICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsR3RrLmNwcCcsCisgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVt
L1Rlc3RTaGVsbE1hYy5tbScsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsUG9zaXgu
Y3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxTdHViLmNwcCcsCiAgICAgICAg
ICAgICAnY2hyb21pdW0vVGVzdFNoZWxsV2luLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0v
VGVzdFNoZWxsWDExLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5j
cHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4uaCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGV4dElucHV0Q29udHJvbGxlci5jcHAnLApAQCAtNDYsNiArNDgsMTIgQEAK
ICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJQZXJtaXNzaW9ucy5oJywKICAgICAgICAgICAgICdj
aHJvbWl1bS9XZWJQcmVmZXJlbmNlcy5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlBy
ZWZlcmVuY2VzLmgnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlRoZW1lQ29udHJvbERSVFdp
bi5jcHAnLAorICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlRoZW1lQ29udHJvbERSVFdpbi5oJywK
KyAgICAgICAgICAgICdjaHJvbWl1bS9XZWJUaGVtZUVuZ2luZURSVE1hYy5tbScsCisgICAgICAg
ICAgICAnY2hyb21pdW0vV2ViVGhlbWVFbmdpbmVEUlRNYWMuaCcsCisgICAgICAgICAgICAnY2hy
b21pdW0vV2ViVGhlbWVFbmdpbmVEUlRXaW4uY3BwJywKKyAgICAgICAgICAgICdjaHJvbWl1bS9X
ZWJUaGVtZUVuZ2luZURSVFdpbi5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJVc2VyTWVk
aWFDbGllbnRNb2NrLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vV2ViVXNlck1lZGlhQ2xp
ZW50TW9jay5oJywKICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJWaWV3SG9zdC5jcHAnLApAQCAt
NzQsMjYgKzgyLDUgQEAKICAgICAgICAgICAgICdUZXN0TmV0c2NhcGVQbHVnSW4vVGVzdHMvUHJp
dmF0ZUJyb3dzaW5nLmNwcCcsCiAgICAgICAgICAgICAnVGVzdE5ldHNjYXBlUGx1Z0luL21haW4u
Y3BwJywKICAgICAgICAgXSwKLSAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCi0gICAgICAgICAgICBb
JyhPUz09ImxpbnV4IiBhbmQgdG9vbGtpdF91c2VzX2d0ayE9MSkgb3IgT1M9PSJhbmRyb2lkIics
IHsKLSAgICAgICAgICAgICAgICAnZHJ0X2ZpbGVzJzogWwotICAgICAgICAgICAgICAgICAgICAn
Y2hyb21pdW0vVGVzdFNoZWxsU3R1Yi5jcHAnLAotICAgICAgICAgICAgICAgIF0sCi0gICAgICAg
ICAgICB9XSwKLSAgICAgICAgICAgIFsnT1M9PSJ3aW4iJywgewotICAgICAgICAgICAgICAgICdk
cnRfZmlsZXMnOiBbCi0gICAgICAgICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJUaGVtZUNvbnRy
b2xEUlRXaW4uY3BwJywKLSAgICAgICAgICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlRoZW1lQ29u
dHJvbERSVFdpbi5oJywKLSAgICAgICAgICAgICAgICAgICAgJ2Nocm9taXVtL1dlYlRoZW1lRW5n
aW5lRFJUV2luLmNwcCcsCi0gICAgICAgICAgICAgICAgICAgICdjaHJvbWl1bS9XZWJUaGVtZUVu
Z2luZURSVFdpbi5oJywKLSAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgfV0sCi0gICAg
ICAgICAgICBbJ09TPT0ibWFjIicsIHsKLSAgICAgICAgICAgICAgICAnZHJ0X2ZpbGVzJzogWwot
ICAgICAgICAgICAgICAgICAgICAnY2hyb21pdW0vV2ViVGhlbWVFbmdpbmVEUlRNYWMubW0nLAot
ICAgICAgICAgICAgICAgICAgICAnY2hyb21pdW0vV2ViVGhlbWVFbmdpbmVEUlRNYWMuaCcsCi0g
ICAgICAgICAgICAgICAgXSwKLSAgICAgICAgICAgIH1dLAotICAgICAgICBdLAogICAgIH0KIH0K
SW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVy
VHJlZS5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAkocmV2aXNpb24gMTE4MDUxKQorKysgVG9vbHMvRHVt
cFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAkod29ya2lu
ZyBjb3B5KQpAQCAtNzgsMTEgKzc4LDE0IEBACiAgICAgICAgICAgICAndHlwZSc6ICdleGVjdXRh
YmxlJywKICAgICAgICAgICAgICdtYWNfYnVuZGxlJzogMSwKICAgICAgICAgICAgICdkZXBlbmRl
bmNpZXMnOiBbCisgICAgICAgICAgICAgICAgJ0ltYWdlRGlmZicsCisgICAgICAgICAgICAgICAg
J2NvcHlfVGVzdE5ldHNjYXBlUGx1Z0luJywKICAgICAgICAgICAgICAgICAnPChzb3VyY2VfZGly
KS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cDppbnNwZWN0b3JfcmVzb3VyY2VzJywKICAgICAg
ICAgICAgICAgICAnPChzb3VyY2VfZGlyKS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cDp3ZWJr
aXQnLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dURi9XVEYuZ3lwL1dURi5neXA6
d3RmJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9idWlsZC90ZW1wX2d5
cC9nb29nbGV1cmwuZ3lwOmdvb2dsZXVybCcsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1f
c3JjX2RpcikvdGhpcmRfcGFydHkvaWN1L2ljdS5neXA6aWN1dWMnLAorICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJkX3BhcnR5L21lc2EvbWVzYS5neXA6b3NtZXNhJywK
ICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS92OC90b29scy9neXAvdjguZ3lw
OnY4JywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lw
OnRlc3Rfc3VwcG9ydF9iYXNlJywKICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS93ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5neXA6YmxvYicsCkBAIC0xMDQsMTMgKzEw
NywxNyBAQAogICAgICAgICAgICAgICAgICc8QChkcnRfZmlsZXMpJywKICAgICAgICAgICAgIF0s
CiAgICAgICAgICAgICAnY29uZGl0aW9ucyc6IFsKKyAgICAgICAgICAgICAgICBbJ09TPT0id2lu
IiBvciBPUz09Im1hYyIgb3IgdG9vbGtpdF91c2VzX2d0az09MScsIHsKKyAgICAgICAgICAgICAg
ICAgICAgJ3NvdXJjZXMvJzogWworICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywg
J1Rlc3RTaGVsbFN0dWJcXC5jcHAkJ10sCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAg
ICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAgWydPUz09IndpbiInLCB7CiAgICAgICAgICAg
ICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnTGF5
b3V0VGVzdEhlbHBlcicsCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNf
ZGlyKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvYnVpbGRfYW5nbGUuZ3lwOmxpYkVHTCcsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9hbmds
ZS9zcmMvYnVpbGRfYW5nbGUuZ3lwOmxpYkdMRVN2MicsCiAgICAgICAgICAgICAgICAgICAgIF0s
Ci0KICAgICAgICAgICAgICAgICAgICAgJ3Jlc291cmNlX2luY2x1ZGVfZGlycyc6IFsnPChTSEFS
RURfSU5URVJNRURJQVRFX0RJUikvd2Via2l0J10sCiAgICAgICAgICAgICAgICAgICAgICdzb3Vy
Y2VzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9E
SVIpL25ldC9uZXRfcmVzb3VyY2VzLnJjJywKQEAgLTE4Nyw2ICsxOTQsMTEgQEAKICAgICAgICAg
ICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdNYWNcXC5jcHAkJ10sCiAgICAgICAgICAgICAg
ICAgICAgIF0sCiAgICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICAgICAgWydvc19wb3Np
eCE9MSBvciBPUz09Im1hYyInLCB7CisgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsK
KyAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdQb3NpeFxcLmNwcCQnXSwKKyAg
ICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAg
ICBbJ3VzZV94MTEgPT0gMScsIHsKICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6
IFsKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxkL2xp
bnV4L3N5c3RlbS5neXA6Zm9udGNvbmZpZycsCkBAIC0yMTIsNyArMjI0LDcgQEAKICAgICAgICAg
ICAgICAgICAgICAgXSwKICAgICAgICAgICAgICAgICB9LHsgIyB1c2VfeDExICE9IDEKICAgICAg
ICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgWydl
eGNsdWRlJywgJ0xpbnV4XFwuY3BwJCddCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1
ZGUnLCAnWDExXFwuY3BwJCddLAogICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAg
ICAgfV0sCiAgICAgICAgICAgICAgICAgWyd0b29sa2l0X3VzZXNfZ3RrID09IDEnLCB7CkBAIC0y
MjUsMjcgKzIzNywzNCBAQAogICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwog
ICAgICAgICAgICAgICAgICAgICAgICAgJzwoc291cmNlX2RpcikvV2ViS2l0L2Nocm9taXVtL3B1
YmxpYy9ndGsnLAogICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0seyAj
IHRvb2xraXRfdXNlc19ndGsgIT0gMQotICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBb
Ci0gICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnR3RrXFwuY3BwJCddCi0gICAg
ICAgICAgICAgICAgICAgIF0KICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBb
J09TPT0iYW5kcm9pZCInLCB7CisgICAgICAgICAgICAgICAgICAgICd0eXBlJzogJ3NoYXJlZF9s
aWJyYXJ5JywKICAgICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAg
ICAgICAgICAgICAgICAgICdJbWFnZURpZmYjaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAg
ICAnPChjaHJvbWl1bV9zcmNfZGlyKS9iYXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywK
KyAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rvb2xzL2FuZHJv
aWQvZm9yd2FyZGVyL2ZvcndhcmRlci5neXA6Zm9yd2FyZGVyJywKKyAgICAgICAgICAgICAgICAg
ICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5kcm9pZC9uYXRpdmVfdGVzdC5n
eXA6bmF0aXZlX3Rlc3RfbmF0aXZlX2NvZGUnLAogICAgICAgICAgICAgICAgICAgICBdLAotICAg
ICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBb
J2luY2x1ZGUnLCAnY2hyb21pdW0vVGVzdFNoZWxsTGludXhcXC5jcHAkJ10sCi0gICAgICAgICAg
ICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgfSx7ICMgT1MhPSJhbmRyb2lkIgotICAgICAg
ICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2V4
Y2x1ZGUnLCAnKEFuZHJvaWQpXFwuY3BwJCddCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAg
ICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICdk
ZXBlbmRlbmNpZXMhJzogWwogICAgICAgICAgICAgICAgICAgICAgICAgJ0ltYWdlRGlmZicsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAnY29weV9UZXN0TmV0c2NhcGVQbHVnSW4nLAogICAgICAg
ICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvbWVzYS9t
ZXNhLmd5cDpvc21lc2EnLAogICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAg
ICAgICAnc291cmNlcy8nOiBbCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
V2ViVXNlck1lZGlhQ2xpZW50TW9ja1xcLmNwcCddLAorICAgICAgICAgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgICAgICAgICAnY29waWVzJzogW3sKKyAgICAgICAgICAgICAgICAgICAgICAg
ICdkZXN0aW5hdGlvbic6ICc8KFBST0RVQ1RfRElSKScsCisgICAgICAgICAgICAgICAgICAgICAg
ICAnZmlsZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoYWhlbV9wYXRoKScs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoSU5URVJNRURJQVRFX0RJUikvcmVwYWNr
L0R1bXBSZW5kZXJUcmVlLnBhaycsCisgICAgICAgICAgICAgICAgICAgICAgICBdCisgICAgICAg
ICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgIH0sIHsgIyBPUyE9ImFuZHJvaWQiCisg
ICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsnZXhjbHVkZScsICdBbmRyb2lkXFwuY3BwJCddLAorICAgICAgICAgICAgICAgICAgICBdLAog
ICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgIFsnaW5zaWRlX2Nocm9taXVtX2J1
aWxkPT0xIGFuZCBjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSInLCB7CiAgICAgICAgICAgICAg
ICAgICAgICdzb3VyY2VzJzogWwpAQCAtMzgzLDUgKzQwMiw0MyBAQAogICAgICAgICAgICAgICAg
ICdjZmxhZ3NfY2MnOiBbJy1Xbm8tYysrMHgtY29tcGF0J10sCiAgICAgICAgICAgICB9LAogICAg
ICAgICB9XSwKKyAgICAgICAgWydPUz09ImFuZHJvaWQiJywgeworICAgICAgICAgICAgIyBXcmFw
IGxpYkR1bXBSZW5kZXJUcmVlLnNvIGludG8gYW4gYW5kcm9pZCBhcGsgZm9yIGV4ZWN1dGlvbi4K
KyAgICAgICAgICAgICMgU2VlIDwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cCBmb3Ig
VE9ETyhqcmcpcyBhYm91dCB0aGlzIHN0cmF0ZWd5LgorICAgICAgICAgICAgJ3RhcmdldHMnOiBb
eworICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdEdW1wUmVuZGVyVHJlZV9hcGsnLAor
ICAgICAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAorICAgICAgICAgICAgICAgICdkZXBlbmRl
bmNpZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICdEdW1wUmVuZGVyVHJlZScsCisgICAgICAg
ICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAnYWN0aW9ucyc6IFt7CisgICAgICAgICAgICAg
ICAgICAgICMgR2VuZXJhdGUgYXBrIGZpbGVzIChpbmNsdWRpbmcgc291cmNlIGFuZCBhbnRmaWxl
KSBmcm9tCisgICAgICAgICAgICAgICAgICAgICMgYSB0ZW1wbGF0ZSwgYW5kIGJ1aWxkcyB0aGVt
LgorICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAnZ2VuZXJhdGVfYW5kX2J1aWxk
JywKKyAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5kcm9pZC9nZW5lcmF0ZV9uYXRpdmVf
dGVzdC5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvbGliLnRh
cmdldC9saWJEdW1wUmVuZGVyVHJlZS5zbycsCisgICAgICAgICAgICAgICAgICAgICAgICAjIEZJ
WE1FOiBCdWlsZCB0aGUgamFyIGZvciBuYXRpdmUgdGVzdHMgd2l0aCBTREsuCisgICAgICAgICAg
ICAgICAgICAgICAgICAjIEZvciBub3cgd2UgYXJlIHVzaW5nIEFuZHJvaWQubWsgdG8gYnVpbGQg
dGhlIGFway4KKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgJ291
dHB1dHMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRHVtcFJl
bmRlclRyZWVfYXBrL0Nocm9tZU5hdGl2ZVRlc3RzLWRlYnVnLmFwaycsCisgICAgICAgICAgICAg
ICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdhY3Rpb24nOiBbCisgICAgICAgICAgICAg
ICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJvaWQvZ2VuZXJhdGVf
bmF0aXZlX3Rlc3QucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tbmF0aXZlX2xpYnJh
cnknLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2xpYi50YXJnZXQv
bGliRHVtcFJlbmRlclRyZWUuc28nLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhNRTog
QnVpbGQgdGhlIGphciBmb3IgbmF0aXZlIHRlc3RzIHdpdGggU0RLLgorICAgICAgICAgICAgICAg
ICAgICAgICAgIyAnLS1qYXInLAorICAgICAgICAgICAgICAgICAgICAgICAgIyAnZm9vL2Jhci5q
YXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tb3V0cHV0JywKKyAgICAgICAgICAgICAg
ICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EdW1wUmVuZGVyVHJlZV9hcGsnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJy0tYW50LWFyZ3MnLAorICAgICAgICAgICAgICAgICAgICAgICAgJy1E
UFJPRFVDVF9ESVI9PChQUk9EVUNUX0RJUiknLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0t
YW50LWNvbXBpbGUnCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgfV0s
CisgICAgICAgICAgICB9XSwKKyAgICAgICAgfV0sCiAgICAgXSwgIyBjb25kaXRpb25zCiB9Cklu
ZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRy
b2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDEzMCBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0
cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0
aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0
IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisg
KiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1Ig
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKworI2luY2x1ZGUgPGFuZHJvaWQv
bG9nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUg
PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4K
KyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgorCituYW1l
c3BhY2UgeworCitjb25zdCBjaGFyIG9wdGlvbkluRklGT1tdID0gIi0taW4tZmlmbz0iOworY29u
c3QgY2hhciBvcHRpb25PdXRGSUZPW10gPSAiLS1vdXQtZmlmbz0iOworY29uc3QgY2hhciBvcHRp
b25FcnJGaWxlW10gPSAiLS1lcnItZmlsZT0iOworCit2b2lkIGFuZHJvaWRMb2dFcnJvcihjb25z
dCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklOVEYoMSwgMik7CisKK3ZvaWQg
YW5kcm9pZExvZ0Vycm9yKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3Qg
YXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAgIF9fYW5kcm9pZF9sb2dfdnBy
aW50KEFORFJPSURfTE9HX0VSUk9SLCAiRHVtcFJlbmRlclRyZWUiLCBmb3JtYXQsIGFyZ3MpOwor
ICAgIHZhX2VuZChhcmdzKTsKK30KKwordm9pZCByZW1vdmVBcmcoaW50IGluZGV4LCBpbnQqIGFy
Z2MsIGNoYXIqKiogYXJndikKK3sKKyAgICBmb3IgKGludCBpID0gaW5kZXg7IGkgPCAqYXJnYzsg
KytpKQorICAgICAgICAoKmFyZ3YpW2ldID0gKCphcmd2KVtpICsgMV07CisgICAgLS0qYXJnYzsK
K30KKwordm9pZCBjcmVhdGVGSUZPKGNvbnN0IGNoYXIqIGZpZm9QYXRoKQoreworICAgIHVubGlu
ayhmaWZvUGF0aCk7CisgICAgaWYgKG1rZmlmbyhmaWZvUGF0aCwgMDYwMCkpIHsKKyAgICAgICAg
YW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpZm8gJXM6ICVzXG4iLCBmaWZvUGF0
aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0K
K30KKwordm9pZCBjcmVhdGVGaWxlKGNvbnN0IGNoYXIqIGZpbGVQYXRoKQoreworICAgIHVubGlu
ayhmaWxlUGF0aCk7CisgICAgaW50IGZkID0gY3JlYXQoZmlsZVBhdGgsIDA2MDApOworICAgIGlm
IChmZCA8IDApIHsKKyAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZp
bGUgJXM6ICVzXG4iLCBmaWxlUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChF
WElUX0ZBSUxVUkUpOworICAgIH0KKyAgICBjbG9zZShmZCk7Cit9CisKK3ZvaWQgcmVkaXJlY3RU
b0ZpbGUoRklMRSogc3RyZWFtLCBjb25zdCBjaGFyKiBwYXRoLCBjb25zdCBjaGFyKiBtb2RlKQor
eworICAgIGlmICghZnJlb3BlbihwYXRoLCBtb2RlLCBzdHJlYW0pKSB7CisgICAgICAgIGFuZHJv
aWRMb2dFcnJvcigiRmFpbGVkIHRvIHJlZGlyZWN0IHN0cmVhbSB0byBmaWxlOiAlczogJXNcbiIs
IHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAg
ICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywg
Y2hhcioqKiBhcmd2KQoreworICAgIGNvbnN0IGNoYXIqIGluRklGTyA9IDA7CisgICAgY29uc3Qg
Y2hhciogb3V0RklGTyA9IDA7CisgICAgY29uc3QgY2hhciogZXJyRmlsZSA9IDA7CisgICAgZm9y
IChpbnQgaSA9IDE7IGkgPCAqYXJnYzsgKSB7CisgICAgICAgIGNvbnN0IGNoYXIqIGFyZ3VtZW50
ID0gKCphcmd2KVtpXTsKKyAgICAgICAgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9uSW5GSUZP
KSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgaW5GSUZPID0gYXJndW1lbnQgKyBXVEZfQVJS
QVlfTEVOR1RIKG9wdGlvbkluRklGTykgLSAxOworICAgICAgICAgICAgY3JlYXRlRklGTyhpbkZJ
Rk8pOworICAgICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2MsIGFyZ3YpOworICAgICAgICB9IGVs
c2UgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9uT3V0RklGTykgPT0gYXJndW1lbnQpIHsKKyAg
ICAgICAgICAgIG91dEZJRk8gPSBhcmd1bWVudCArIFdURl9BUlJBWV9MRU5HVEgob3B0aW9uT3V0
RklGTykgLSAxOworICAgICAgICAgICAgY3JlYXRlRklGTyhvdXRGSUZPKTsKKyAgICAgICAgICAg
IHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKKyAgICAgICAgfSBlbHNlIGlmIChzdHJzdHIoYXJn
dW1lbnQsIG9wdGlvbkVyckZpbGUpID09IGFyZ3VtZW50KSB7CisgICAgICAgICAgICBlcnJGaWxl
ID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlvbkVyckZpbGUpIC0gMTsKKyAgICAg
ICAgICAgIGNyZWF0ZUZpbGUoZXJyRmlsZSk7CisgICAgICAgICAgICByZW1vdmVBcmcoaSwgYXJn
YywgYXJndik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgKytpOworICAgIH0KKworICAg
IC8vIFRoZSBvcmRlciBvZiBjcmVhdGVGSUZPKCkgYW5kIHJlZGlyZWN0VG9GSUZPKCkgaXMgaW1w
b3J0YW50IHRvIGF2b2lkIGRlYWRsb2NrLgorICAgIGlmIChvdXRGSUZPKQorICAgICAgICByZWRp
cmVjdFRvRmlsZShzdGRvdXQsIG91dEZJRk8sICJ3Iik7CisgICAgaWYgKGluRklGTykKKyAgICAg
ICAgcmVkaXJlY3RUb0ZpbGUoc3RkaW4sIGluRklGTywgInIiKTsKKyAgICBpZiAoZXJyRmlsZSkK
KyAgICAgICAgcmVkaXJlY3RUb0ZpbGUoc3RkZXJyLCBlcnJGaWxlLCAidyIpOworICAgIGVsc2Ug
eworICAgICAgICAvLyBSZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0LgorICAgICAgICBkdXAyKDEs
IDIpOworICAgIH0KK30KClByb3BlcnR5IGNoYW5nZXMgb246IFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wt
c3R5bGUKICAgKyBMRgoKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsR3RrLmNwcAkocmV2aXNpb24gMTE4MDUxKQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsR3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0g
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgotCi0jaW5jbHVk
ZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKLSNpbmNsdWRlIDxmb250Y29uZmln
L2ZvbnRjb25maWcuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jaW5jbHVkZSA8c2lnbmFsLmg+
Ci0KLQotdm9pZCBvcGVuU3RhcnR1cERpYWxvZygpCi17Ci0gICAgR3RrV2lkZ2V0KiBkaWFsb2cg
PSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KAotICAgICAgICAwLCBHVEtfRElBTE9HX01PREFMLCBH
VEtfTUVTU0FHRV9JTkZPLCBHVEtfQlVUVE9OU19PSywgIkF0dGFjaCB0byBtZT8iKTsKLSAgICBn
dGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksICJEdW1wUmVuZGVyVHJlZSIp
OwotICAgIGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7IC8vIFJ1bnMgYSBuZXN0
ZWQgbWVzc2FnZSBsb29wLgotICAgIGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOwotfQotCi1i
b29sIGNoZWNrTGF5b3V0VGVzdFN5c3RlbURlcGVuZGVuY2llcygpCi17Ci0gICAgcmV0dXJuIHRy
dWU7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51
eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsTGludXguY3BwCShyZXZpc2lvbiAxMTgwNTEpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsMjIzICswLDAg
QEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0g
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4g
dGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUg
SW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRS
SUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAq
IE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFNoZWxsLmgiCi0KLSNpbmNsdWRl
ICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIndlYmtpdC9z
dXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0KLSNpZiAhT1MoQU5EUk9JRCkKLSNpbmNsdWRlIDxm
b250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNlbmRpZgotCi0jaWYgVVNFKEdUSykKLSNpbmNsdWRl
IDxndGsvZ3RrLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDx1bmlz
dGQuaD4KLQotc3RhdGljIHZvaWQgQWxhcm1IYW5kbGVyKGludCkKLXsKLSAgICAvLyBJZiB0aGUg
YWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5IGJh
ZCBoYW5nLgotICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VUXG4iKTsKLSAgICBwdXRzKCIjRU9G
XG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBleGl0KDApOwotfQotCi12b2lkIFRlc3RT
aGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCi17Ci0gICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRpbmcp
OwotICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7Ci0KLSAgICAvLyBJbnN0YWxsIGFuIGFsYXJt
IHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxsIHVzIGlmIHdlIHRpbWUgb3V0LgotICAgIHN0
cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Ci0gICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxlciA9
IEFsYXJtSGFuZGxlcjsKLSAgICBzaWdlbXB0eXNldCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7Ci0g
ICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwotCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRB
Y3Rpb247Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhbGFybUFjdGlvbiwgJm9sZEFjdGlvbik7
Ci0gICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAwMCk7Ci0KLSAg
ICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhp
cyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgotICAgIHdoaWxl
IChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9v
cCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBhbGFybS4KLSAgICBhbGFybSgwKTsKLSAgICBzaWdh
Y3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7Ci19Ci0KLSNpZiAhT1MoQU5EUk9JRCkKLXN0
YXRpYyBib29sIGNoZWNrQW5kTG9hZEZvbnRGaWxlKEZjQ29uZmlnKiBmb250Y2ZnLCBjb25zdCBj
aGFyKiBwYXRoMSwgY29uc3QgY2hhciogcGF0aDIpCi17Ci0gICAgY29uc3QgY2hhciogZm9udCA9
IHBhdGgxOwotICAgIGlmIChhY2Nlc3MoZm9udCwgUl9PSykgPCAwKSB7Ci0gICAgICAgIGZvbnQg
PSBwYXRoMjsKLSAgICAgICAgaWYgKGFjY2Vzcyhmb250LCBSX09LKSA8IDApIHsKLSAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBtaXNzaW5nICVzIG9yICVzLiBXaXRob3V0IHRo
aXMsIHNvbWUgbGF5b3V0IHRlc3RzIG1heSBmYWlsLiAiCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIlNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MYXlvdXRU
ZXN0c0xpbnV4ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZm9yIG1vcmUuXG4iLCBw
YXRoMSwgcGF0aDIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
fQotICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCAoRmNDaGFyOCAqKSBm
b250KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNc
biIsIGZvbnQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIHJldHVybiB0cnVl
OwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cEZvbnRjb25maWcoKQotewotICAgIC8vIFdlIHdpc2gg
dG8gbWFrZSB0aGUgbGF5b3V0IHRlc3RzIHJlcHJvZHVjYWJsZSB3aXRoIHJlc3BlY3QgdG8gZm9u
dHMuIFNraWEKLSAgICAvLyB1c2VzIGZvbnRjb25maWcgdG8gcmVzb2x2ZSBmb250IGZhbWlseSBu
YW1lcyBmcm9tIFdlYktpdCBpbnRvIGFjdHVhbCBmb250Ci0gICAgLy8gZmlsZXMgZm91bmQgb24g
dGhlIGN1cnJlbnQgc3lzdGVtLiBUaGlzIG1lYW5zIHRoYXQgZm9udHMgdmFyeSBiYXNlZCBvbiB0
aGUKLSAgICAvLyBzeXN0ZW0gYW5kIGFsc28gb24gdGhlIGZvbnRjb25maWcgY29uZmlndXJhdGlv
bi4KLSAgICAvLwotICAgIC8vIFRvIGF2b2lkIHRoaXMgd2UgaW5pdGlhbGlzZSBmb250Y29uZmln
IGhlcmUgYW5kIGluc3RhbGwgYSBjb25maWd1cmF0aW9uCi0gICAgLy8gd2hpY2ggb25seSBrbm93
cyBhYm91dCBhIGZldywgc2VsZWN0LCBmb250cy4KLQotICAgIC8vIFdlIGhhdmUgZm9udGNvbmZp
ZyBwYXJzZSBhIGNvbmZpZyBmaWxlIGZyb20gb3VyIHJlc291cmNlcyBmaWxlLiBUaGlzCi0gICAg
Ly8gc2V0cyBhIG51bWJlciBvZiBhbGlhc2VzICgic2FucyItPiJBcmlhbCIgZXRjKSwgYnV0IGRv
ZXNuJ3QgaW5jbHVkZSBhbnkKLSAgICAvLyBmb250IGRpcmVjdG9yaWVzLgotICAgIEZjSW5pdCgp
OwotCi0gICAgY2hhciBkcnRQYXRoW1BBVEhfTUFYICsgMV07Ci0gICAgaW50IGRydFBhdGhTaXpl
ID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgZHJ0UGF0aCwgUEFUSF9NQVgpOwotICAgIGlm
IChkcnRQYXRoU2l6ZSA8IDAgfHwgZHJ0UGF0aFNpemUgPiBQQVRIX01BWCkgewotICAgICAgICBm
cHV0cygiVW5hYmxlIHRvIHJlc29sdmUgL3Byb2Mvc2VsZi9leGUuIiwgc3RkZXJyKTsKLSAgICAg
ICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZHJ0UGF0aFtkcnRQYXRoU2l6ZV0gPSAwOwotICAgIHN0
ZDo6c3RyaW5nIGRydERpclBhdGgoZHJ0UGF0aCk7Ci0gICAgc2l6ZV90IGxhc3RQYXRoUG9zID0g
ZHJ0RGlyUGF0aC5yZmluZCgiLyIpOwotICAgIEFTU0VSVChsYXN0UGF0aFBvcyAhPSBzdGQ6OnN0
cmluZzo6bnBvcyk7Ci0gICAgZHJ0RGlyUGF0aC5lcmFzZShsYXN0UGF0aFBvcyArIDEpOwotCi0g
ICAgRmNDb25maWcqIGZvbnRjZmcgPSBGY0NvbmZpZ0NyZWF0ZSgpOwotICAgIHN0ZDo6c3RyaW5n
IGZvbnRjb25maWdQYXRoID0gZHJ0RGlyUGF0aCArICJmb250cy5jb25mIjsKLSAgICBpZiAoIUZj
Q29uZmlnUGFyc2VBbmRMb2FkKGZvbnRjZmcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFy
OCo+KGZvbnRjb25maWdQYXRoLmNfc3RyKCkpLCB0cnVlKSkgewotICAgICAgICBmcHV0cygiRmFp
bGVkIHRvIHBhcnNlIGZvbnRjb25maWcgY29uZmlnIGZpbGVcbiIsIHN0ZGVycik7Ci0gICAgICAg
IGV4aXQoMSk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBpcyB0aGUgbGlzdCBvZiBmb250cyB0aGF0
IGZvbnRjb25maWcgd2lsbCBrbm93IGFib3V0LiBJdAotICAgIC8vIHdpbGwgdHJ5IGl0cyBiZXN0
IHRvIG1hdGNoIGJhc2VkIG9ubHkgb24gdGhlIGZvbnRzIGhlcmUgaW4uIFRoZQotICAgIC8vIHBh
dGhzIGFyZSB3aGVyZSB0aGVzZSBmb250cyBhcmUgZm91bmQgb24gb3VyIFVidW50dSBib3hlcy4K
LSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZm9udHNbXSA9IHsKLSAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUva29jaGkva29jaGktZ290aGljLnR0ZiIsCi0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hpL2tvY2hpLW1pbmNoby50dGYiLAotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsLnR0ZiIsCi0g
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfQm9s
ZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L0FyaWFsX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ29taWNfU2Fuc19NUy50dGYiLAotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVNf
Qm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZv
bnRzL0NvdXJpZXJfTmV3LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3X0JvbGRfSXRhbGljLnR0
ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291
cmllcl9OZXdfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvR2VvcmdpYS50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFfQm9sZF9JdGFsaWMudHRm
IiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9y
Z2lhX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0
Y29yZWZvbnRzL0ltcGFjdC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NUy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19Cb2xkLnR0ZiIsCi0gICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01T
X0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbi50dGYiLAotICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19S
b21hbl9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0l0YWxp
Yy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L1ZlcmRhbmEudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNv
cmVmb250cy9WZXJkYW5hX0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYV9JdGFsaWMudHRm
IiwKLSAgICAgICAgLy8gVGhlIERlamFWdVNhbnMgZm9udCBpcyB1c2VkIGJ5IHRoZSBjc3MyLjEg
dGVzdHMuCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1kZWphdnUvRGVq
YVZ1U2Fucy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5k
aWMtZm9udHMtY29yZS9sb2hpdF9oaS50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF90YS50dGYiLAotICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9NdWt0aU5hcnJvdy50
dGYiLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhcnJheXNpemUoZm9udHMp
OyArK2kpIHsKLSAgICAgICAgaWYgKGFjY2Vzcyhmb250c1tpXSwgUl9PSykpIHsKLSAgICAgICAg
ICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBtaXNzaW5nICVzLiBUcnkgcmUtcnVubmluZyBi
dWlsZC9pbnN0YWxsLWJ1aWxkLWRlcHMuc2guIEFsc28gc2VlICIKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5b3V0
VGVzdHNMaW51eCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9udHNbaV0pOwotICAg
ICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgICAgICBpZiAoIUZjQ29uZmlnQXBwRm9u
dEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikgZm9udHNbaV0pKSB7Ci0gICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIsIGZvbnRzW2ldKTsKLSAg
ICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWNoZWNrQW5k
TG9hZEZvbnRGaWxlKGZvbnRjZmcsICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3RoYWkvR2Fy
dWRhLnR0ZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90bHdnL0dhcnVkYS50dGYiKSkKLSAgICAgICAgZXhpdCgxKTsKLQotICAgIC8v
IFdlIHNwZWNpYWwgY2FzZSB0aGVzZSBmb250cyBiZWNhdXNlIHRoZXkncmUgb25seSBuZWVkZWQg
aW4gYQotICAgIC8vIGZldyBsYXlvdXQgdGVzdHMuCi0gICAgY2hlY2tBbmRMb2FkRm9udEZpbGUo
Zm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUv
bG9oaXRfcGEudHRmIiwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvdHRmLXB1bmphYmktZm9udHMvbG9oaXRfcGEudHRmIik7Ci0KLSAgICAvLyBB
bHNvIGxvYWQgdGhlIGxheW91dC10ZXN0LXNwZWNpZmljICJBaGVtIiBmb250LgotICAgIHN0ZDo6
c3RyaW5nIGFoZW1QYXRoID0gZHJ0RGlyUGF0aCArICJBSEVNX19fXy5UVEYiOwotICAgIGlmICgh
RmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZj
Q2hhcjgqPihhaGVtUGF0aC5jX3N0cigpKSkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJG
YWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBhaGVtUGF0aC5jX3N0cigpKTsKLSAgICAgICAgZXhp
dCgxKTsKLSAgICB9Ci0KLSAgICBpZiAoIUZjQ29uZmlnU2V0Q3VycmVudChmb250Y2ZnKSkgewot
ICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHNldCB0aGUgZGVmYXVsdCBmb250IGNvbmZpZ3VyYXRp
b25cbiIsIHN0ZGVycik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotfQotI2VuZGlmIC8vICFP
UyhBTkRST0lEKQotCi12b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikK
LXsKLSAgICAvLyBGSVhNRTogSXQncyBiZXR0ZXIgY2FsbCBndGtfaW5pdCgpIG9ubHkgd2hlbiB3
ZSBydW4gcGx1Z2luIHRlc3RzLgotICAgIC8vIFNlZSBodHRwOi8vZ3JvdXBzLmdvb2dsZS5jb20v
YS9jaHJvbWl1bS5vcmcvZ3JvdXAvY2hyb21pdW0tZGV2L2Jyb3dzZV90aHJlYWQvdGhyZWFkLzYz
M2VhMTY3Y2RlMTk2Y2EjCi0jaWYgVVNFKEdUSykKLSAgICBndGtfaW5pdChhcmdjLCBhcmd2KTsK
LSNlbmRpZgotCi0jaWYgIU9TKEFORFJPSUQpCi0gICAgc2V0dXBGb250Y29uZmlnKCk7Ci0jZW5k
aWYKLX0KLQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsUG9z
aXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RT
aGVsbFBvc2l4LmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbFBvc2l4LmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSw3MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBk
aXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5v
ciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRo
b3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JT
CisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIg
T1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICog
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKworI2luY2x1ZGUgIndlYmtp
dC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNs
dWRlIDx1bmlzdGQuaD4KKworc3RhdGljIHZvaWQgQWxhcm1IYW5kbGVyKGludCkKK3sKKyAgICAv
LyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEg
cmVhbGx5IGJhZCBoYW5nLgorICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VUXG4iKTsKKyAgICBw
dXRzKCIjRU9GXG4iKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAgICBleGl0KDApOworfQorCit2
b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCit7CisgICAgQVNTRVJUKCFtX3Rlc3RJ
c1BlbmRpbmcpOworICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7CisKKyAgICAvLyBJbnN0YWxs
IGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxsIHVzIGlmIHdlIHRpbWUgb3V0
LgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247CisgICAgYWxhcm1BY3Rpb24uc2Ff
aGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKKyAgICBzaWdlbXB0eXNldCgmYWxhcm1BY3Rpb24uc2Ff
bWFzayk7CisgICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOworCisgICAgc3RydWN0IHNpZ2Fj
dGlvbiBvbGRBY3Rpb247CisgICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhbGFybUFjdGlvbiwgJm9s
ZEFjdGlvbik7CisgICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAw
MCk7CisKKyAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8g
YnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKKyAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgor
ICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCisgICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5N
ZXNzYWdlTG9vcCgpOworCisgICAgLy8gUmVtb3ZlIHRoZSBhbGFybS4KKyAgICBhbGFybSgwKTsK
KyAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7Cit9CgpQcm9wZXJ0eSBjaGFu
Z2VzIG9uOiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxQb3NpeC5jcHAK
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExGCgpJbmRleDogVG9vbHMvRHVt
cFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCShyZXZpc2lvbiAxMTgw
MTApCShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNw
cDoxMTgwMTApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAq
ICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBp
dHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisg
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIlRlc3RTaGVsbC5oIgorCisjaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgorI2luY2x1
ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5o
IgorCisjaWYgIU9TKEFORFJPSUQpCisjaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+
CisjZW5kaWYKKworI2lmIFVTRShHVEspCisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorI2VuZGlmCisj
aW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyB2b2lkIEFs
YXJtSGFuZGxlcihpbnQpCit7CisgICAgLy8gSWYgdGhlIGFsYXJtIGFsYXJtZWQsIGtpbGwgdGhl
IHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJlYWxseSBiYWQgaGFuZy4KKyAgICBwdXRzKCJcbiNU
RVNUX1RJTUVEX09VVFxuIik7CisgICAgcHV0cygiI0VPRlxuIik7CisgICAgZmZsdXNoKHN0ZG91
dCk7CisgICAgZXhpdCgwKTsKK30KKwordm9pZCBUZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQo
KQoreworICAgIEFTU0VSVCghbV90ZXN0SXNQZW5kaW5nKTsKKyAgICBtX3Rlc3RJc1BlbmRpbmcg
PSB0cnVlOworCisgICAgLy8gSW5zdGFsbCBhbiBhbGFybSBzaWduYWwgaGFuZGxlciB0aGF0IHdp
bGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0
aW9uOworICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRsZXIgPSBBbGFybUhhbmRsZXI7CisgICAgc2ln
ZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2spOworICAgIGFsYXJtQWN0aW9uLnNhX2ZsYWdz
ID0gMDsKKworICAgIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9uOworICAgIHNpZ2FjdGlvbihT
SUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rpb24pOworICAgIGFsYXJtKGxheW91dFRlc3RU
aW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOworCisgICAgLy8gVGVzdEZpbmlzaGVkKCkgd2ls
bCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFrIHRoaXMgbG9vcCB3aGVuIHRoZSBwYWdlCisg
ICAgLy8gZmluaXNoZXMgbG9hZGluZy4KKyAgICB3aGlsZSAobV90ZXN0SXNQZW5kaW5nKQorICAg
ICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3AoKTsKKworICAgIC8vIFJlbW92ZSB0
aGUgYWxhcm0uCisgICAgYWxhcm0oMCk7CisgICAgc2lnYWN0aW9uKFNJR0FMUk0sICZvbGRBY3Rp
b24sIDApOworfQorCisjaWYgIU9TKEFORFJPSUQpCitzdGF0aWMgYm9vbCBjaGVja0FuZExvYWRG
b250RmlsZShGY0NvbmZpZyogZm9udGNmZywgY29uc3QgY2hhciogcGF0aDEsIGNvbnN0IGNoYXIq
IHBhdGgyKQoreworICAgIGNvbnN0IGNoYXIqIGZvbnQgPSBwYXRoMTsKKyAgICBpZiAoYWNjZXNz
KGZvbnQsIFJfT0spIDwgMCkgeworICAgICAgICBmb250ID0gcGF0aDI7CisgICAgICAgIGlmIChh
Y2Nlc3MoZm9udCwgUl9PSykgPCAwKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllv
dSBhcmUgbWlzc2luZyAlcyBvciAlcy4gV2l0aG91dCB0aGlzLCBzb21lIGxheW91dCB0ZXN0cyBt
YXkgZmFpbC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJTZWUgaHR0cDovL2NvZGUu
Z29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5b3V0VGVzdHNMaW51eCAiCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgImZvciBtb3JlLlxuIiwgcGF0aDEsIHBhdGgyKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICBpZiAoIUZjQ29uZmlnQXBw
Rm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikgZm9udCkpIHsKKyAgICAgICAgZnByaW50
ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBmb250KTsKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgc2V0
dXBGb250Y29uZmlnKCkKK3sKKyAgICAvLyBXZSB3aXNoIHRvIG1ha2UgdGhlIGxheW91dCB0ZXN0
cyByZXByb2R1Y2FibGUgd2l0aCByZXNwZWN0IHRvIGZvbnRzLiBTa2lhCisgICAgLy8gdXNlcyBm
b250Y29uZmlnIHRvIHJlc29sdmUgZm9udCBmYW1pbHkgbmFtZXMgZnJvbSBXZWJLaXQgaW50byBh
Y3R1YWwgZm9udAorICAgIC8vIGZpbGVzIGZvdW5kIG9uIHRoZSBjdXJyZW50IHN5c3RlbS4gVGhp
cyBtZWFucyB0aGF0IGZvbnRzIHZhcnkgYmFzZWQgb24gdGhlCisgICAgLy8gc3lzdGVtIGFuZCBh
bHNvIG9uIHRoZSBmb250Y29uZmlnIGNvbmZpZ3VyYXRpb24uCisgICAgLy8KKyAgICAvLyBUbyBh
dm9pZCB0aGlzIHdlIGluaXRpYWxpc2UgZm9udGNvbmZpZyBoZXJlIGFuZCBpbnN0YWxsIGEgY29u
ZmlndXJhdGlvbgorICAgIC8vIHdoaWNoIG9ubHkga25vd3MgYWJvdXQgYSBmZXcsIHNlbGVjdCwg
Zm9udHMuCisKKyAgICAvLyBXZSBoYXZlIGZvbnRjb25maWcgcGFyc2UgYSBjb25maWcgZmlsZSBm
cm9tIG91ciByZXNvdXJjZXMgZmlsZS4gVGhpcworICAgIC8vIHNldHMgYSBudW1iZXIgb2YgYWxp
YXNlcyAoInNhbnMiLT4iQXJpYWwiIGV0YyksIGJ1dCBkb2Vzbid0IGluY2x1ZGUgYW55CisgICAg
Ly8gZm9udCBkaXJlY3Rvcmllcy4KKyAgICBGY0luaXQoKTsKKworICAgIGNoYXIgZHJ0UGF0aFtQ
QVRIX01BWCArIDFdOworICAgIGludCBkcnRQYXRoU2l6ZSA9IHJlYWRsaW5rKCIvcHJvYy9zZWxm
L2V4ZSIsIGRydFBhdGgsIFBBVEhfTUFYKTsKKyAgICBpZiAoZHJ0UGF0aFNpemUgPCAwIHx8IGRy
dFBhdGhTaXplID4gUEFUSF9NQVgpIHsKKyAgICAgICAgZnB1dHMoIlVuYWJsZSB0byByZXNvbHZl
IC9wcm9jL3NlbGYvZXhlLiIsIHN0ZGVycik7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorICAg
IGRydFBhdGhbZHJ0UGF0aFNpemVdID0gMDsKKyAgICBzdGQ6OnN0cmluZyBkcnREaXJQYXRoKGRy
dFBhdGgpOworICAgIHNpemVfdCBsYXN0UGF0aFBvcyA9IGRydERpclBhdGgucmZpbmQoIi8iKTsK
KyAgICBBU1NFUlQobGFzdFBhdGhQb3MgIT0gc3RkOjpzdHJpbmc6Om5wb3MpOworICAgIGRydERp
clBhdGguZXJhc2UobGFzdFBhdGhQb3MgKyAxKTsKKworICAgIEZjQ29uZmlnKiBmb250Y2ZnID0g
RmNDb25maWdDcmVhdGUoKTsKKyAgICBzdGQ6OnN0cmluZyBmb250Y29uZmlnUGF0aCA9IGRydERp
clBhdGggKyAiZm9udHMuY29uZiI7CisgICAgaWYgKCFGY0NvbmZpZ1BhcnNlQW5kTG9hZChmb250
Y2ZnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihmb250Y29uZmlnUGF0aC5jX3N0
cigpKSwgdHJ1ZSkpIHsKKyAgICAgICAgZnB1dHMoIkZhaWxlZCB0byBwYXJzZSBmb250Y29uZmln
IGNvbmZpZyBmaWxlXG4iLCBzdGRlcnIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAg
IC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZm9udHMgdGhhdCBmb250Y29uZmlnIHdpbGwga25vdyBh
Ym91dC4gSXQKKyAgICAvLyB3aWxsIHRyeSBpdHMgYmVzdCB0byBtYXRjaCBiYXNlZCBvbmx5IG9u
IHRoZSBmb250cyBoZXJlIGluLiBUaGUKKyAgICAvLyBwYXRocyBhcmUgd2hlcmUgdGhlc2UgZm9u
dHMgYXJlIGZvdW5kIG9uIG91ciBVYnVudHUgYm94ZXMuCisgICAgc3RhdGljIGNvbnN0IGNoYXIg
KmNvbnN0IGZvbnRzW10gPSB7CisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tv
Y2hpL2tvY2hpLWdvdGhpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9rb2NoaS9rb2NoaS1taW5jaG8udHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbF9Cb2xkX0l0YWxpYy50dGYi
LAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFs
X0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL0NvbWljX1NhbnNfTVMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5zX01TX0JvbGQudHRmIiwKKyAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ldy50dGYiLAor
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJf
TmV3X0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNv
cmVmb250cy9Db3VyaWVyX05ld19Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3X0l0YWxpYy50dGYiLAor
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWEu
dHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9H
ZW9yZ2lhX0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0
dGNvcmVmb250cy9HZW9yZ2lhX0JvbGRfSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYV9JdGFsaWMudHRmIiwKKyAgICAg
ICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9JbXBhY3QudHRmIiwK
KyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNo
ZXRfTVMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9UcmVidWNoZXRfTVNfQm9sZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19Cb2xkX0l0YWxpYy50dGYiLAorICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9N
U19JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNv
cmVmb250cy9UaW1lc19OZXdfUm9tYW4udHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW5fQm9sZC50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21h
bl9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hLnR0ZiIsCisgICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkLnR0
ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVy
ZGFuYV9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfSXRhbGljLnR0ZiIsCisgICAgICAgIC8vIFRoZSBEZWph
VnVTYW5zIGZvbnQgaXMgdXNlZCBieSB0aGUgY3NzMi4xIHRlc3RzLgorICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1L0RlamFWdVNhbnMudHRmIiwKKyAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfaGku
dHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRz
LWNvcmUvbG9oaXRfdGEudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
dHRmLWluZGljLWZvbnRzLWNvcmUvTXVrdGlOYXJyb3cudHRmIiwKKyAgICB9OworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGZvbnRzKTsgKytpKSB7CisgICAgICAgIGlmIChh
Y2Nlc3MoZm9udHNbaV0sIFJfT0spKSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllv
dSBhcmUgbWlzc2luZyAlcy4gVHJ5IHJlLXJ1bm5pbmcgYnVpbGQvaW5zdGFsbC1idWlsZC1kZXBz
LnNoLiBBbHNvIHNlZSAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0dHA6Ly9jb2Rl
Lmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xheW91dFRlc3RzTGludXgiLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGZvbnRzW2ldKTsKKyAgICAgICAgICAgIGV4aXQoMSk7CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGZvbnRjZmcsIChGY0No
YXI4ICopIGZvbnRzW2ldKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQg
dG8gbG9hZCBmb250ICVzXG4iLCBmb250c1tpXSk7CisgICAgICAgICAgICBleGl0KDEpOworICAg
ICAgICB9CisgICAgfQorCisgICAgaWYgKCFjaGVja0FuZExvYWRGb250RmlsZShmb250Y2ZnLCAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90aGFpL0dhcnVkYS50dGYiLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdGx3Zy9HYXJ1ZGEu
dHRmIikpCisgICAgICAgIGV4aXQoMSk7CisKKyAgICAvLyBXZSBzcGVjaWFsIGNhc2UgdGhlc2Ug
Zm9udHMgYmVjYXVzZSB0aGV5J3JlIG9ubHkgbmVlZGVkIGluIGEKKyAgICAvLyBmZXcgbGF5b3V0
IHRlc3RzLgorICAgIGNoZWNrQW5kTG9hZEZvbnRGaWxlKGZvbnRjZmcsICIvdXNyL3NoYXJlL2Zv
bnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL2xvaGl0X3BhLnR0ZiIsIAorICAgICAg
ICAgICAgICAgICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1wdW5qYWJp
LWZvbnRzL2xvaGl0X3BhLnR0ZiIpOworCisgICAgLy8gQWxzbyBsb2FkIHRoZSBsYXlvdXQtdGVz
dC1zcGVjaWZpYyAiQWhlbSIgZm9udC4KKyAgICBzdGQ6OnN0cmluZyBhaGVtUGF0aCA9IGRydERp
clBhdGggKyAiQUhFTV9fX18uVFRGIjsKKyAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUo
Zm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oYWhlbVBhdGguY19zdHIo
KSkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xu
IiwgYWhlbVBhdGguY19zdHIoKSk7CisgICAgICAgIGV4aXQoMSk7CisgICAgfQorCisgICAgaWYg
KCFGY0NvbmZpZ1NldEN1cnJlbnQoZm9udGNmZykpIHsKKyAgICAgICAgZnB1dHMoIkZhaWxlZCB0
byBzZXQgdGhlIGRlZmF1bHQgZm9udCBjb25maWd1cmF0aW9uXG4iLCBzdGRlcnIpOworICAgICAg
ICBleGl0KDEpOworICAgIH0KK30KKyNlbmRpZiAvLyAhT1MoQU5EUk9JRCkKKwordm9pZCBwbGF0
Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCit7CisgICAgLy8gRklYTUU6IEl0J3Mg
YmV0dGVyIGNhbGwgZ3RrX2luaXQoKSBvbmx5IHdoZW4gd2UgcnVuIHBsdWdpbiB0ZXN0cy4KKyAg
ICAvLyBTZWUgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2EvY2hyb21pdW0ub3JnL2dyb3VwL2No
cm9taXVtLWRldi9icm93c2VfdGhyZWFkL3RocmVhZC82MzNlYTE2N2NkZTE5NmNhIworI2lmIFVT
RShHVEspCisgICAgZ3RrX2luaXQoYXJnYywgYXJndik7CisjZW5kaWYKKworI2lmICFPUyhBTkRS
T0lEKQorICAgIHNldHVwRm9udGNvbmZpZygpOworI2VuZGlmCit9CisKSW5kZXg6IFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9v
bHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAkocmV2aXNpb24gMTE4
MDEwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEg
R29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBH
b29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zIGFyZQpAQCAtMzEsNTUgKzMxLDI2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVGVzdFNoZWxsLmgiCiAKLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAi
V2ViVmlldy5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0K
LSNpZiAhT1MoQU5EUk9JRCkKICNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNl
bmRpZgogCiAjaWYgVVNFKEdUSykKICNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jZW5kaWYKLSNpbmNs
dWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KIAotc3RhdGljIHZvaWQgQWxhcm1I
YW5kbGVyKGludCkKK3ZvaWQgb3BlblN0YXJ0dXBEaWFsb2coKQogewotICAgIC8vIElmIHRoZSBh
bGFybSBhbGFybWVkLCBraWxsIHRoZSBwcm9jZXNzIHNpbmNlIHdlIGhhdmUgYSByZWFsbHkgYmFk
IGhhbmcuCi0gICAgcHV0cygiXG4jVEVTVF9USU1FRF9PVVRcbiIpOwotICAgIHB1dHMoIiNFT0Zc
biIpOwotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIGV4aXQoMCk7CisgICAgR3RrV2lkZ2V0KiBk
aWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KAorICAgICAgICAwLCBHVEtfRElBTE9HX01P
REFMLCBHVEtfTUVTU0FHRV9JTkZPLCBHVEtfQlVUVE9OU19PSywgIkF0dGFjaCB0byBtZT8iKTsK
KyAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyksICJEdW1wUmVuZGVy
VHJlZSIpOworICAgIGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9nKSk7IC8vIFJ1bnMg
YSBuZXN0ZWQgbWVzc2FnZSBsb29wLgorICAgIGd0a193aWRnZXRfZGVzdHJveShkaWFsb2cpOwog
fQogCi12b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCitib29sIGNoZWNrTGF5b3V0
VGVzdFN5c3RlbURlcGVuZGVuY2llcygpCiB7Ci0gICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRpbmcp
OwotICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7Ci0KLSAgICAvLyBJbnN0YWxsIGFuIGFsYXJt
IHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxsIHVzIGlmIHdlIHRpbWUgb3V0LgotICAgIHN0
cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Ci0gICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxlciA9
IEFsYXJtSGFuZGxlcjsKLSAgICBzaWdlbXB0eXNldCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7Ci0g
ICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwotCi0gICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRB
Y3Rpb247Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhbGFybUFjdGlvbiwgJm9sZEFjdGlvbik7
Ci0gICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERvZygpIC8gMTAwMCk7Ci0KLSAg
ICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhp
cyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBmaW5pc2hlcyBsb2FkaW5nLgotICAgIHdoaWxl
IChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdlYmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9v
cCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBhbGFybS4KLSAgICBhbGFybSgwKTsKLSAgICBzaWdh
Y3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7CisgICAgcmV0dXJuIHRydWU7CiB9CisjZW5k
aWYgLy8gVVNFKEdUSykKIAotI2lmICFPUyhBTkRST0lEKQogc3RhdGljIGJvb2wgY2hlY2tBbmRM
b2FkRm9udEZpbGUoRmNDb25maWcqIGZvbnRjZmcsIGNvbnN0IGNoYXIqIHBhdGgxLCBjb25zdCBj
aGFyKiBwYXRoMikKIHsKICAgICBjb25zdCBjaGFyKiBmb250ID0gcGF0aDE7CkBAIC0yMDYsNyAr
MTc3LDYgQEAgc3RhdGljIHZvaWQgc2V0dXBGb250Y29uZmlnKCkKICAgICAgICAgZXhpdCgxKTsK
ICAgICB9CiB9Ci0jZW5kaWYgLy8gIU9TKEFORFJPSUQpCiAKIHZvaWQgcGxhdGZvcm1Jbml0KGlu
dCogYXJnYywgY2hhcioqKiBhcmd2KQogewpAQCAtMjE2LDggKzE4Niw1IEBAIHZvaWQgcGxhdGZv
cm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmcKICAgICBndGtfaW5pdChhcmdjLCBhcmd2KTsK
ICNlbmRpZgogCi0jaWYgIU9TKEFORFJPSUQpCiAgICAgc2V0dXBGb250Y29uZmlnKCk7Ci0jZW5k
aWYKIH0KLQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143385</attachid>
            <date>2012-05-22 15:53:51 -0700</date>
            <delta_ts>2012-05-22 16:26:10 -0700</delta_ts>
            <desc>patch v4</desc>
            <filename>86922c</filename>
            <type>text/plain</type>
            <size>42819</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTgwNzMpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDEyLTA1LTIyICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBhcyBhbiBh
cGsgKEMrKyBhbmQgZ3lwIHBhcnQpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NjkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogQWxsLmd5cDogQWRkZWQgRHVtcFJlbmRlclRyZWVfYXBrIGludG8gZGVw
ZW5kZW5jaWVzIGZvciBBbmRyb2lkLgorCiAyMDEyLTA1LTIyICBKb2NoZW4gRWlzaW5nZXIgIDxq
b2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgREVQUy4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQWxsLmd5cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0FsbC5neXAJKHJldmlzaW9uIDExODA2OCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQWxsLmd5cAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTMgQEAK
ICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDpEdW1wUmVuZGVyVHJlZScsCiAgICAgICAgICAg
ICAgICAgJy4uLy4uLy4uL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS5neXAvVGVz
dFdlYktpdEFQSS5neXA6VGVzdFdlYktpdEFQSScsCiAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgJ2NvbmRpdGlvbnMnOiBbCisgICAgICAgICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewor
ICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAgICAgICAgICAg
ICAgICAgJy4uLy4uLy4uL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9E
dW1wUmVuZGVyVHJlZS5neXA6RHVtcFJlbmRlclRyZWVfYXBrJywKKyAgICAgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIF0sCiAgICAgICAgIH0KICAg
ICBdLAogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTE4MDczKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDUtMjIgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW0tQW5kcm9pZF0gUnVuIER1bXBSZW5k
ZXJUcmVlIGFzIGFuIGFwayAoQysrIGFuZCBneXAgcGFydCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2OTIyCisKKyAgICAgICAgQmVjYXVzZSB3ZSBo
YXZlIG5ldyBwbGF0Zm9ybUluaXQoKSBpbiBUZXN0U2hlbGxBbmRyb2lkLmNwcCwgYW5kCisgICAg
ICAgIHdlIHN0aWxsIG5lZWQgdGhlIHRpbWVvdXQgcGFydCBpbiBUZXN0U2hlbGxMaW51eC5jcHAs
IFRlc3RTaGVsbExpbnV4LmNwcAorICAgICAgICBpcyBzcGxpdCBpbnRvIFRlc3RTaGVsbFBvc2l4
LmNwcCBhbmQgVGVzdFNoZWxsWDExLmNwcC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9E
dW1wUmVuZGVyVHJlZS5neXA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRy
b2lkLmNwcDogQWRkZWQuIEhhbmRsZXMgY29tbWFuZCBsaW5lcyB0byByZWRpcmVjdCBzdGRpbi9z
dGRvdXQvc3RkZXJyLgorICAgICAgICAocGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwOiBSZW1vdmVkLiBNZXJnZWQgaW50byBU
ZXN0U2hlbGxYMTEuY3BwCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsTGludXguY3BwOiBSZW1vdmVkLiBTcGxpdCBpbnRvIFRlc3RTaGVsbFBvc2l4LmNwcCBhbmQg
VGVzdFNoZWxsWDExLmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxQb3NpeC5jcHA6IFNwbGl0IGZyb20gVGVzdFNoZWxsTGludXguY3BwLCBjb250YWluaW5n
IHRoZSB0aW1lb3V0IGhhbmRsaW5nIHBhcnQsIGNvbXBpbGVkIHdoZW4gb3NfcG9zaXg9MSAoZXhj
bHVkaW5nIG1hYykuCisgICAgICAgIChBbGFybUhhbmRsZXIpOgorICAgICAgICAoVGVzdFNoZWxs
Ojp3YWl0VGVzdEZpbmlzaGVkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxYMTEuY3BwOiBTcGxpdCBmcm9tIFRlc3RTaGVsbExpbnV4LmNwcCwgY29udGFpbmlu
ZyB0aGUgZm9udGNvbmZpZyBwYXJ0LCBjb21waWxlZCB3aGVuIHVzZV94MTE9MQorICAgICAgICAo
b3BlblN0YXJ0dXBEaWFsb2cpOiBmcm9tIFRlc3RTaGVsbEd0ay5jcHAKKyAgICAgICAgKGNoZWNr
TGF5b3V0VGVzdFN5c3RlbURlcGVuZGVuY2llcyk6IGZyb20gVGVzdFNoZWxsR3RrLmNwcC4KKyAg
ICAgICAgKHNldHVwRm9udGNvbmZpZyk6CisgICAgICAgIChwbGF0Zm9ybUluaXQpOgorCiAyMDEy
LTA1LTIyICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV1RS
IGZpeCBhZnRlciByMTE4MDAxLgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5neXBpCShyZXZpc2lvbiAxMTgwNjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTIgQEAKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFNoZWxsLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNo
ZWxsLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNwcCcsCi0gICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsR3RrLmNwcCcsCisgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVs
bE1hYy5tbScsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3BwJywKKyAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxTdHViLmNwcCcsCiAgICAgICAgICAgICAnY2hy
b21pdW0vVGVzdFNoZWxsV2luLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxs
WDExLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5jcHAnLAogICAg
ICAgICAgICAgJ2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4uaCcsCiAgICAgICAgICAgICAnY2hyb21p
dW0vVGV4dElucHV0Q29udHJvbGxlci5jcHAnLApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29s
cy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCShy
ZXZpc2lvbiAxMTgwNjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXAvRHVtcFJlbmRlclRyZWUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMSArNzgsMTQgQEAK
ICAgICAgICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAogICAgICAgICAgICAgJ21hY19idW5k
bGUnOiAxLAogICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAgICAn
SW1hZ2VEaWZmJywKKyAgICAgICAgICAgICAgICAnY29weV9UZXN0TmV0c2NhcGVQbHVnSW4nLAog
ICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lw
Omluc3BlY3Rvcl9yZXNvdXJjZXMnLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dl
YktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwOndlYmtpdCcsCiAgICAgICAgICAgICAgICAgJzwoc291
cmNlX2RpcikvV1RGL1dURi5neXAvV1RGLmd5cDp3dGYnLAogICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xldXJsJywK
ICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9pY3UvaWN1
Lmd5cDppY3V1YycsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRf
cGFydHkvbWVzYS9tZXNhLmd5cDpvc21lc2EnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL3Y4L3Rvb2xzL2d5cC92OC5neXA6djgnLAogICAgICAgICAgICAgICAgICc8KGNo
cm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAogICAgICAg
ICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3dlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBw
b3J0Lmd5cDpibG9iJywKQEAgLTExMCw3ICsxMTMsNiBAQAogICAgICAgICAgICAgICAgICAgICAg
ICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2J1aWxkX2FuZ2xl
Lmd5cDpsaWJFR0wnLAogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rp
cikvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLmd5cDpsaWJHTEVTdjInLAogICAg
ICAgICAgICAgICAgICAgICBdLAotCiAgICAgICAgICAgICAgICAgICAgICdyZXNvdXJjZV9pbmNs
dWRlX2RpcnMnOiBbJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCddLAogICAgICAg
ICAgICAgICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICc8KFNI
QVJFRF9JTlRFUk1FRElBVEVfRElSKS9uZXQvbmV0X3Jlc291cmNlcy5yYycsCkBAIC0xODcsNiAr
MTg5LDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnTWFjXFwuY3Bw
JCddLAogICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIH1dLAorICAgICAg
ICAgICAgICAgIFsnb3NfcG9zaXghPTEgb3IgT1M9PSJtYWMiJywgeworICAgICAgICAgICAgICAg
ICAgICAnc291cmNlcy8nOiBbCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAn
UG9zaXhcXC5jcHAkJ10sCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAg
fV0sCiAgICAgICAgICAgICAgICAgWyd1c2VfeDExID09IDEnLCB7CiAgICAgICAgICAgICAgICAg
ICAgICdkZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1
bV9zcmNfZGlyKS9idWlsZC9saW51eC9zeXN0ZW0uZ3lwOmZvbnRjb25maWcnLApAQCAtMjEyLDcg
KzIxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgfSx7ICMg
dXNlX3gxMSAhPSAxCiAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdMaW51eFxcLmNwcCQnXQorICAgICAgICAgICAg
ICAgICAgICAgICAgWydleGNsdWRlJywgJ1gxMVxcLmNwcCQnXSwKICAgICAgICAgICAgICAgICAg
ICAgXQogICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgIFsndG9vbGtpdF91c2Vz
X2d0ayA9PSAxJywgewpAQCAtMjI1LDI3ICsyMzIsMzEgQEAKICAgICAgICAgICAgICAgICAgICAg
J2luY2x1ZGVfZGlycyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIp
L1dlYktpdC9jaHJvbWl1bS9wdWJsaWMvZ3RrJywKICAgICAgICAgICAgICAgICAgICAgXSwKLSAg
ICAgICAgICAgICAgICB9LHsgIyB0b29sa2l0X3VzZXNfZ3RrICE9IDEKLSAgICAgICAgICAgICAg
ICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywg
J0d0a1xcLmNwcCQnXQotICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgfV0s
CiAgICAgICAgICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgeworICAgICAgICAgICAgICAgICAg
ICAndHlwZSc6ICdzaGFyZWRfbGlicmFyeScsCiAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRl
bmNpZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnSW1hZ2VEaWZmI2hvc3QnLAorICAg
ICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0
ZXN0X3N1cHBvcnRfYmFzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90b29scy9hbmRyb2lkL2ZvcndhcmRlci9mb3J3YXJkZXIuZ3lwOmZvcndhcmRlcics
CisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2Fu
ZHJvaWQvbmF0aXZlX3Rlc3QuZ3lwOm5hdGl2ZV90ZXN0X25hdGl2ZV9jb2RlJywKICAgICAgICAg
ICAgICAgICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAg
ICAgICAgICAgICAgICAgICAgWydpbmNsdWRlJywgJ2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4XFwu
Y3BwJCddLAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0seyAjIE9T
IT0iYW5kcm9pZCIKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAg
ICAgICAgICAgICAgICAgWydleGNsdWRlJywgJyhBbmRyb2lkKVxcLmNwcCQnXQotICAgICAgICAg
ICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAg
ICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzISc6IFsKICAgICAgICAgICAgICAgICAgICAg
ICAgICdJbWFnZURpZmYnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ2NvcHlfVGVzdE5ldHNj
YXBlUGx1Z0luJywKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIp
L3RoaXJkX3BhcnR5L21lc2EvbWVzYS5neXA6b3NtZXNhJywKICAgICAgICAgICAgICAgICAgICAg
XSwKKyAgICAgICAgICAgICAgICAgICAgJ2NvcGllcyc6IFt7CisgICAgICAgICAgICAgICAgICAg
ICAgICAnZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUiknLAorICAgICAgICAgICAgICAgICAg
ICAgICAgJ2ZpbGVzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFoZW1fcGF0
aCknLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpL3Jl
cGFjay9EdW1wUmVuZGVyVHJlZS5wYWsnLAorICAgICAgICAgICAgICAgICAgICAgICAgXQorICAg
ICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgICB9LCB7ICMgT1MhPSJhbmRyb2lk
IgorICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCisgICAgICAgICAgICAgICAgICAg
ICAgICBbJ2V4Y2x1ZGUnLCAnQW5kcm9pZFxcLmNwcCQnXSwKKyAgICAgICAgICAgICAgICAgICAg
XSwKICAgICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ2luc2lkZV9jaHJvbWl1
bV9idWlsZD09MSBhbmQgY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewogICAgICAgICAg
ICAgICAgICAgICAnc291cmNlcyc6IFsKQEAgLTM4Myw1ICszOTQsNDMgQEAKICAgICAgICAgICAg
ICAgICAnY2ZsYWdzX2NjJzogWyctV25vLWMrKzB4LWNvbXBhdCddLAogICAgICAgICAgICAgfSwK
ICAgICAgICAgfV0sCisgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKKyAgICAgICAgICAgICMg
V3JhcCBsaWJEdW1wUmVuZGVyVHJlZS5zbyBpbnRvIGFuIGFuZHJvaWQgYXBrIGZvciBleGVjdXRp
b24uCisgICAgICAgICAgICAjIFNlZSA8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXAg
Zm9yIFRPRE8oanJnKXMgYWJvdXQgdGhpcyBzdHJhdGVneS4KKyAgICAgICAgICAgICd0YXJnZXRz
JzogW3sKKyAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnRHVtcFJlbmRlclRyZWVfYXBr
JywKKyAgICAgICAgICAgICAgICAndHlwZSc6ICdub25lJywKKyAgICAgICAgICAgICAgICAnZGVw
ZW5kZW5jaWVzJzogWworICAgICAgICAgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWUnLAorICAg
ICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgJ2FjdGlvbnMnOiBbeworICAgICAgICAg
ICAgICAgICAgICAjIEdlbmVyYXRlIGFwayBmaWxlcyAoaW5jbHVkaW5nIHNvdXJjZSBhbmQgYW50
ZmlsZSkgZnJvbQorICAgICAgICAgICAgICAgICAgICAjIGEgdGVtcGxhdGUsIGFuZCBidWlsZHMg
dGhlbS4KKyAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlX2FuZF9i
dWlsZCcsCisgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOiBbCisgICAgICAgICAgICAgICAg
ICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJvaWQvZ2VuZXJhdGVfbmF0
aXZlX3Rlc3QucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2xp
Yi50YXJnZXQvbGliRHVtcFJlbmRlclRyZWUuc28nLAorICAgICAgICAgICAgICAgICAgICAgICAg
IyBGSVhNRTogQnVpbGQgdGhlIGphciBmb3IgbmF0aXZlIHRlc3RzIHdpdGggU0RLLgorICAgICAg
ICAgICAgICAgICAgICAgICAgIyBGb3Igbm93IHdlIGFyZSB1c2luZyBBbmRyb2lkLm1rIHRvIGJ1
aWxkIHRoZSBhcGsuCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAg
ICdvdXRwdXRzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0R1
bXBSZW5kZXJUcmVlX2Fway9DaHJvbWVOYXRpdmVUZXN0cy1kZWJ1Zy5hcGsnLAorICAgICAgICAg
ICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWworICAgICAgICAg
ICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL2dlbmVy
YXRlX25hdGl2ZV90ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICctLW5hdGl2ZV9s
aWJyYXJ5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9saWIudGFy
Z2V0L2xpYkR1bXBSZW5kZXJUcmVlLnNvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRklY
TUU6IEJ1aWxkIHRoZSBqYXIgZm9yIG5hdGl2ZSB0ZXN0cyB3aXRoIFNESy4KKyAgICAgICAgICAg
ICAgICAgICAgICAgICMgJy0tamFyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICMgJ2Zvby9i
YXIuamFyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICctLW91dHB1dCcsCisgICAgICAgICAg
ICAgICAgICAgICAgICAnPChQUk9EVUNUX0RJUikvRHVtcFJlbmRlclRyZWVfYXBrJywKKyAgICAg
ICAgICAgICAgICAgICAgICAgICctLWFudC1hcmdzJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICctRFBST0RVQ1RfRElSPTwoUFJPRFVDVF9ESVIpJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICctLWFudC1jb21waWxlJworICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAg
IH1dLAorICAgICAgICAgICAgfV0sCisgICAgICAgIH1dLAogICAgIF0sICMgY29uZGl0aW9ucwog
fQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
QW5kcm9pZC5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGxBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAg
KiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICog
ZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBu
b3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9S
UworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVS
IE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAq
IFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCisKKyNpbmNsdWRlIDxhbmRy
b2lkL2xvZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNs
dWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVz
Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKwor
bmFtZXNwYWNlIHsKKworY29uc3QgY2hhciBvcHRpb25JbkZJRk9bXSA9ICItLWluLWZpZm89IjsK
K2NvbnN0IGNoYXIgb3B0aW9uT3V0RklGT1tdID0gIi0tb3V0LWZpZm89IjsKK2NvbnN0IGNoYXIg
b3B0aW9uRXJyRmlsZVtdID0gIi0tZXJyLWZpbGU9IjsKKwordm9pZCBhbmRyb2lkTG9nRXJyb3Io
Y29uc3QgY2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOworCit2
b2lkIGFuZHJvaWRMb2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9s
aXN0IGFyZ3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBfX2FuZHJvaWRfbG9n
X3ZwcmludChBTkRST0lEX0xPR19FUlJPUiwgIkR1bXBSZW5kZXJUcmVlIiwgZm9ybWF0LCBhcmdz
KTsKKyAgICB2YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQgcmVtb3ZlQXJnKGludCBpbmRleCwgaW50
KiBhcmdjLCBjaGFyKioqIGFyZ3YpCit7CisgICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgKmFy
Z2M7ICsraSkKKyAgICAgICAgKCphcmd2KVtpXSA9ICgqYXJndilbaSArIDFdOworICAgIC0tKmFy
Z2M7Cit9CisKK3ZvaWQgY3JlYXRlRklGTyhjb25zdCBjaGFyKiBmaWZvUGF0aCkKK3sKKyAgICB1
bmxpbmsoZmlmb1BhdGgpOworICAgIGlmIChta2ZpZm8oZmlmb1BhdGgsIDA2MDApKSB7CisgICAg
ICAgIGFuZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBmaWZvICVzOiAlc1xuIiwgZmlm
b1BhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAg
ICB9Cit9CisKK3ZvaWQgY3JlYXRlRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCkKK3sKKyAgICB1
bmxpbmsoZmlsZVBhdGgpOworICAgIGludCBmZCA9IGNyZWF0KGZpbGVQYXRoLCAwNjAwKTsKKyAg
ICBpZiAoZmQgPCAwKSB7CisgICAgICAgIGFuZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIGNyZWF0
ZSBmaWxlICVzOiAlc1xuIiwgZmlsZVBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4
aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9CisgICAgY2xvc2UoZmQpOworfQorCit2b2lkIHJlZGly
ZWN0VG9GaWxlKEZJTEUqIHN0cmVhbSwgY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciogbW9k
ZSkKK3sKKyAgICBpZiAoIWZyZW9wZW4ocGF0aCwgbW9kZSwgc3RyZWFtKSkgeworICAgICAgICBh
bmRyb2lkTG9nRXJyb3IoIkZhaWxlZCB0byByZWRpcmVjdCBzdHJlYW0gdG8gZmlsZTogJXM6ICVz
XG4iLCBwYXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7
CisgICAgfQorfQorCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFy
Z2MsIGNoYXIqKiogYXJndikKK3sKKyAgICBjb25zdCBjaGFyKiBpbkZJRk8gPSAwOworICAgIGNv
bnN0IGNoYXIqIG91dEZJRk8gPSAwOworICAgIGNvbnN0IGNoYXIqIGVyckZpbGUgPSAwOworICAg
IGZvciAoaW50IGkgPSAxOyBpIDwgKmFyZ2M7ICkgeworICAgICAgICBjb25zdCBjaGFyKiBhcmd1
bWVudCA9ICgqYXJndilbaV07CisgICAgICAgIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbklu
RklGTykgPT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGluRklGTyA9IGFyZ3VtZW50ICsgV1RG
X0FSUkFZX0xFTkdUSChvcHRpb25JbkZJRk8pIC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZJRk8o
aW5GSUZPKTsKKyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKKyAgICAgICAg
fSBlbHNlIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbk91dEZJRk8pID09IGFyZ3VtZW50KSB7
CisgICAgICAgICAgICBvdXRGSUZPID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlv
bk91dEZJRk8pIC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZJRk8ob3V0RklGTyk7CisgICAgICAg
ICAgICByZW1vdmVBcmcoaSwgYXJnYywgYXJndik7CisgICAgICAgIH0gZWxzZSBpZiAoc3Ryc3Ry
KGFyZ3VtZW50LCBvcHRpb25FcnJGaWxlKSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgZXJy
RmlsZSA9IGFyZ3VtZW50ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25FcnJGaWxlKSAtIDE7Cisg
ICAgICAgICAgICBjcmVhdGVGaWxlKGVyckZpbGUpOworICAgICAgICAgICAgcmVtb3ZlQXJnKGks
IGFyZ2MsIGFyZ3YpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICsraTsKKyAgICB9CisK
KyAgICAvLyBUaGUgb3JkZXIgb2YgY3JlYXRlRklGTygpIGFuZCByZWRpcmVjdFRvRklGTygpIGlz
IGltcG9ydGFudCB0byBhdm9pZCBkZWFkbG9jay4KKyAgICBpZiAob3V0RklGTykKKyAgICAgICAg
cmVkaXJlY3RUb0ZpbGUoc3Rkb3V0LCBvdXRGSUZPLCAidyIpOworICAgIGlmIChpbkZJRk8pCisg
ICAgICAgIHJlZGlyZWN0VG9GaWxlKHN0ZGluLCBpbkZJRk8sICJyIik7CisgICAgaWYgKGVyckZp
bGUpCisgICAgICAgIHJlZGlyZWN0VG9GaWxlKHN0ZGVyciwgZXJyRmlsZSwgInciKTsKKyAgICBl
bHNlIHsKKyAgICAgICAgLy8gUmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dC4KKyAgICAgICAgZHVw
MigxLCAyKTsKKyAgICB9Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9EdW1wUmVuZGVy
VHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcApfX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46
ZW9sLXN0eWxlCiAgICsgTEYKCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9t
aXVtL1Rlc3RTaGVsbEd0ay5jcHAJKHJldmlzaW9uIDExODA2OCkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0Ogot
ICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdv
b2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQg
Q09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdI
VAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0U2hlbGwuaCIKLQotI2lu
Y2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0jaW5jbHVkZSA8Zm9udGNv
bmZpZy9mb250Y29uZmlnLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHNpZ25h
bC5oPgotCi0KLXZvaWQgb3BlblN0YXJ0dXBEaWFsb2coKQotewotICAgIEd0a1dpZGdldCogZGlh
bG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldygKLSAgICAgICAgMCwgR1RLX0RJQUxPR19NT0RB
TCwgR1RLX01FU1NBR0VfSU5GTywgR1RLX0JVVFRPTlNfT0ssICJBdHRhY2ggdG8gbWU/Iik7Ci0g
ICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCAiRHVtcFJlbmRlclRy
ZWUiKTsKLSAgICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOyAvLyBSdW5zIGEg
bmVzdGVkIG1lc3NhZ2UgbG9vcC4KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKLX0K
LQotYm9vbCBjaGVja0xheW91dFRlc3RTeXN0ZW1EZXBlbmRlbmNpZXMoKQotewotICAgIHJldHVy
biB0cnVlOwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
TGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbExpbnV4LmNwcAkocmV2aXNpb24gMTE4MDY4KQorKysgVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyMyAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0g
KgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAq
IGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29v
Z2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBD
T05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxB
UiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hU
Ci0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgotCi0jaW5j
bHVkZSAiU2tUeXBlZmFjZS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlICJ3ZWJr
aXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotCi0jaWYgIU9TKEFORFJPSUQpCi0jaW5jbHVk
ZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShHVEspCi0jaW5j
bHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8
dW5pc3RkLmg+Ci0KLXN0YXRpYyB2b2lkIEFsYXJtSGFuZGxlcihpbnQpCi17Ci0gICAgLy8gSWYg
dGhlIGFsYXJtIGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJlYWxs
eSBiYWQgaGFuZy4KLSAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7Ci0gICAgcHV0cygi
I0VPRlxuIik7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgZXhpdCgwKTsKLX0KLQotdm9pZCBU
ZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQoKQotewotICAgIEFTU0VSVCghbV90ZXN0SXNQZW5k
aW5nKTsKLSAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8gSW5zdGFsbCBhbiBh
bGFybSBzaWduYWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KLSAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0aW9uOwotICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRs
ZXIgPSBBbGFybUhhbmRsZXI7Ci0gICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2sp
OwotICAgIGFsYXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKLQotICAgIHN0cnVjdCBzaWdhY3Rpb24g
b2xkQWN0aW9uOwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rp
b24pOwotICAgIGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOwot
Ci0gICAgLy8gVGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFr
IHRoaXMgbG9vcCB3aGVuIHRoZSBwYWdlCi0gICAgLy8gZmluaXNoZXMgbG9hZGluZy4KLSAgICB3
aGlsZSAobV90ZXN0SXNQZW5kaW5nKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2Fn
ZUxvb3AoKTsKLQotICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCi0gICAgYWxhcm0oMCk7Ci0gICAg
c2lnYWN0aW9uKFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOwotfQotCi0jaWYgIU9TKEFORFJPSUQp
Ci1zdGF0aWMgYm9vbCBjaGVja0FuZExvYWRGb250RmlsZShGY0NvbmZpZyogZm9udGNmZywgY29u
c3QgY2hhciogcGF0aDEsIGNvbnN0IGNoYXIqIHBhdGgyKQotewotICAgIGNvbnN0IGNoYXIqIGZv
bnQgPSBwYXRoMTsKLSAgICBpZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkgewotICAgICAgICBm
b250ID0gcGF0aDI7Ci0gICAgICAgIGlmIChhY2Nlc3MoZm9udCwgUl9PSykgPCAwKSB7Ci0gICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcyBvciAlcy4gV2l0aG91
dCB0aGlzLCBzb21lIGxheW91dCB0ZXN0cyBtYXkgZmFpbC4gIgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5
b3V0VGVzdHNMaW51eCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBtb3JlLlxu
IiwgcGF0aDEsIHBhdGgyKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQot
ICAgIH0KLSAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjgg
KikgZm9udCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250
ICVzXG4iLCBmb250KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotc3RhdGljIHZvaWQgc2V0dXBGb250Y29uZmlnKCkKLXsKLSAgICAvLyBXZSB3
aXNoIHRvIG1ha2UgdGhlIGxheW91dCB0ZXN0cyByZXByb2R1Y2FibGUgd2l0aCByZXNwZWN0IHRv
IGZvbnRzLiBTa2lhCi0gICAgLy8gdXNlcyBmb250Y29uZmlnIHRvIHJlc29sdmUgZm9udCBmYW1p
bHkgbmFtZXMgZnJvbSBXZWJLaXQgaW50byBhY3R1YWwgZm9udAotICAgIC8vIGZpbGVzIGZvdW5k
IG9uIHRoZSBjdXJyZW50IHN5c3RlbS4gVGhpcyBtZWFucyB0aGF0IGZvbnRzIHZhcnkgYmFzZWQg
b24gdGhlCi0gICAgLy8gc3lzdGVtIGFuZCBhbHNvIG9uIHRoZSBmb250Y29uZmlnIGNvbmZpZ3Vy
YXRpb24uCi0gICAgLy8KLSAgICAvLyBUbyBhdm9pZCB0aGlzIHdlIGluaXRpYWxpc2UgZm9udGNv
bmZpZyBoZXJlIGFuZCBpbnN0YWxsIGEgY29uZmlndXJhdGlvbgotICAgIC8vIHdoaWNoIG9ubHkg
a25vd3MgYWJvdXQgYSBmZXcsIHNlbGVjdCwgZm9udHMuCi0KLSAgICAvLyBXZSBoYXZlIGZvbnRj
b25maWcgcGFyc2UgYSBjb25maWcgZmlsZSBmcm9tIG91ciByZXNvdXJjZXMgZmlsZS4gVGhpcwot
ICAgIC8vIHNldHMgYSBudW1iZXIgb2YgYWxpYXNlcyAoInNhbnMiLT4iQXJpYWwiIGV0YyksIGJ1
dCBkb2Vzbid0IGluY2x1ZGUgYW55Ci0gICAgLy8gZm9udCBkaXJlY3Rvcmllcy4KLSAgICBGY0lu
aXQoKTsKLQotICAgIGNoYXIgZHJ0UGF0aFtQQVRIX01BWCArIDFdOwotICAgIGludCBkcnRQYXRo
U2l6ZSA9IHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGRydFBhdGgsIFBBVEhfTUFYKTsKLSAg
ICBpZiAoZHJ0UGF0aFNpemUgPCAwIHx8IGRydFBhdGhTaXplID4gUEFUSF9NQVgpIHsKLSAgICAg
ICAgZnB1dHMoIlVuYWJsZSB0byByZXNvbHZlIC9wcm9jL3NlbGYvZXhlLiIsIHN0ZGVycik7Ci0g
ICAgICAgIGV4aXQoMSk7Ci0gICAgfQotICAgIGRydFBhdGhbZHJ0UGF0aFNpemVdID0gMDsKLSAg
ICBzdGQ6OnN0cmluZyBkcnREaXJQYXRoKGRydFBhdGgpOwotICAgIHNpemVfdCBsYXN0UGF0aFBv
cyA9IGRydERpclBhdGgucmZpbmQoIi8iKTsKLSAgICBBU1NFUlQobGFzdFBhdGhQb3MgIT0gc3Rk
OjpzdHJpbmc6Om5wb3MpOwotICAgIGRydERpclBhdGguZXJhc2UobGFzdFBhdGhQb3MgKyAxKTsK
LQotICAgIEZjQ29uZmlnKiBmb250Y2ZnID0gRmNDb25maWdDcmVhdGUoKTsKLSAgICBzdGQ6OnN0
cmluZyBmb250Y29uZmlnUGF0aCA9IGRydERpclBhdGggKyAiZm9udHMuY29uZiI7Ci0gICAgaWYg
KCFGY0NvbmZpZ1BhcnNlQW5kTG9hZChmb250Y2ZnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZj
Q2hhcjgqPihmb250Y29uZmlnUGF0aC5jX3N0cigpKSwgdHJ1ZSkpIHsKLSAgICAgICAgZnB1dHMo
IkZhaWxlZCB0byBwYXJzZSBmb250Y29uZmlnIGNvbmZpZyBmaWxlXG4iLCBzdGRlcnIpOwotICAg
ICAgICBleGl0KDEpOwotICAgIH0KLQotICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZm9udHMg
dGhhdCBmb250Y29uZmlnIHdpbGwga25vdyBhYm91dC4gSXQKLSAgICAvLyB3aWxsIHRyeSBpdHMg
YmVzdCB0byBtYXRjaCBiYXNlZCBvbmx5IG9uIHRoZSBmb250cyBoZXJlIGluLiBUaGUKLSAgICAv
LyBwYXRocyBhcmUgd2hlcmUgdGhlc2UgZm9udHMgYXJlIGZvdW5kIG9uIG91ciBVYnVudHUgYm94
ZXMuCi0gICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZvbnRzW10gPSB7Ci0gICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hpL2tvY2hpLWdvdGhpYy50dGYiLAotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9rb2NoaS9rb2NoaS1taW5jaG8udHRmIiwKLSAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbC50dGYi
LAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFs
X0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9BcmlhbF9Cb2xkX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVMudHRmIiwKLSAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5z
X01TX0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNv
cmVmb250cy9Db3VyaWVyX05ldy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3X0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19Cb2xkX0l0YWxp
Yy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L0NvdXJpZXJfTmV3X0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWEudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGQudHRmIiwKLSAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGRfSXRhbGlj
LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
R2VvcmdpYV9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
bXN0dGNvcmVmb250cy9JbXBhY3QudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfQm9sZC50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hl
dF9NU19Cb2xkX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW4udHRmIiwK
LSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19O
ZXdfUm9tYW5fQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkX0l0YWxpYy50dGYiLAotICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9J
dGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9WZXJkYW5hLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkX0l0YWxpYy50dGYiLAotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfSXRhbGlj
LnR0ZiIsCi0gICAgICAgIC8vIFRoZSBEZWphVnVTYW5zIGZvbnQgaXMgdXNlZCBieSB0aGUgY3Nz
Mi4xIHRlc3RzLgotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1
L0RlamFWdVNhbnMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRm
LWluZGljLWZvbnRzLWNvcmUvbG9oaXRfaGkudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfdGEudHRmIiwKLSAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvTXVrdGlOYXJy
b3cudHRmIiwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGZv
bnRzKTsgKytpKSB7Ci0gICAgICAgIGlmIChhY2Nlc3MoZm9udHNbaV0sIFJfT0spKSB7Ci0gICAg
ICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcy4gVHJ5IHJlLXJ1bm5p
bmcgYnVpbGQvaW5zdGFsbC1idWlsZC1kZXBzLnNoLiBBbHNvIHNlZSAiCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xh
eW91dFRlc3RzTGludXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzW2ldKTsK
LSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFGY0NvbmZpZ0Fw
cEZvbnRBZGRGaWxlKGZvbnRjZmcsIChGY0NoYXI4ICopIGZvbnRzW2ldKSkgewotICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBmb250c1tpXSk7
Ci0gICAgICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFjaGVj
a0FuZExvYWRGb250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90aGFp
L0dhcnVkYS50dGYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvdGx3Zy9HYXJ1ZGEudHRmIikpCi0gICAgICAgIGV4aXQoMSk7Ci0KLSAg
ICAvLyBXZSBzcGVjaWFsIGNhc2UgdGhlc2UgZm9udHMgYmVjYXVzZSB0aGV5J3JlIG9ubHkgbmVl
ZGVkIGluIGEKLSAgICAvLyBmZXcgbGF5b3V0IHRlc3RzLgotICAgIGNoZWNrQW5kTG9hZEZvbnRG
aWxlKGZvbnRjZmcsICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1j
b3JlL2xvaGl0X3BhLnR0ZiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL3R0Zi1wdW5qYWJpLWZvbnRzL2xvaGl0X3BhLnR0ZiIpOwotCi0gICAg
Ly8gQWxzbyBsb2FkIHRoZSBsYXlvdXQtdGVzdC1zcGVjaWZpYyAiQWhlbSIgZm9udC4KLSAgICBz
dGQ6OnN0cmluZyBhaGVtUGF0aCA9IGRydERpclBhdGggKyAiQUhFTV9fX18uVFRGIjsKLSAgICBp
ZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25z
dCBGY0NoYXI4Kj4oYWhlbVBhdGguY19zdHIoKSkpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJy
LCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgYWhlbVBhdGguY19zdHIoKSk7Ci0gICAgICAg
IGV4aXQoMSk7Ci0gICAgfQotCi0gICAgaWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoZm9udGNmZykp
IHsKLSAgICAgICAgZnB1dHMoIkZhaWxlZCB0byBzZXQgdGhlIGRlZmF1bHQgZm9udCBjb25maWd1
cmF0aW9uXG4iLCBzdGRlcnIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLX0KLSNlbmRpZiAv
LyAhT1MoQU5EUk9JRCkKLQotdm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFy
Z3YpCi17Ci0gICAgLy8gRklYTUU6IEl0J3MgYmV0dGVyIGNhbGwgZ3RrX2luaXQoKSBvbmx5IHdo
ZW4gd2UgcnVuIHBsdWdpbiB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cDovL2dyb3Vwcy5nb29nbGUu
Y29tL2EvY2hyb21pdW0ub3JnL2dyb3VwL2Nocm9taXVtLWRldi9icm93c2VfdGhyZWFkL3RocmVh
ZC82MzNlYTE2N2NkZTE5NmNhIwotI2lmIFVTRShHVEspCi0gICAgZ3RrX2luaXQoYXJnYywgYXJn
dik7Ci0jZW5kaWYKLQotI2lmICFPUyhBTkRST0lEKQotICAgIHNldHVwRm9udGNvbmZpZygpOwot
I2VuZGlmCi19Ci0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bFBvc2l4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxQb3NpeC5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxQb3NpeC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAg
ICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhl
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQor
ICogZGlzdHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5j
LiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJV
VE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9X
TkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkK
KyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCisKKyNpbmNsdWRlICJ3
ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCisjaW5jbHVkZSA8c2lnbmFsLmg+Cisj
aW5jbHVkZSA8dW5pc3RkLmg+CisKK3N0YXRpYyB2b2lkIEFsYXJtSGFuZGxlcihpbnQpCit7Cisg
ICAgLy8gSWYgdGhlIGFsYXJtIGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2
ZSBhIHJlYWxseSBiYWQgaGFuZy4KKyAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7Cisg
ICAgcHV0cygiI0VPRlxuIik7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgZXhpdCgwKTsKK30K
Kwordm9pZCBUZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQoKQoreworICAgIEFTU0VSVCghbV90
ZXN0SXNQZW5kaW5nKTsKKyAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOworCisgICAgLy8gSW5z
dGFsbCBhbiBhbGFybSBzaWduYWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1l
IG91dC4KKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0aW9uOworICAgIGFsYXJtQWN0aW9u
LnNhX2hhbmRsZXIgPSBBbGFybUhhbmRsZXI7CisgICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9u
LnNhX21hc2spOworICAgIGFsYXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKKworICAgIHN0cnVjdCBz
aWdhY3Rpb24gb2xkQWN0aW9uOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24s
ICZvbGRBY3Rpb24pOworICAgIGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAv
IDEwMDApOworCisgICAgLy8gVGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdl
IHRvIGJyZWFrIHRoaXMgbG9vcCB3aGVuIHRoZSBwYWdlCisgICAgLy8gZmluaXNoZXMgbG9hZGlu
Zy4KKyAgICB3aGlsZSAobV90ZXN0SXNQZW5kaW5nKQorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6
UnVuTWVzc2FnZUxvb3AoKTsKKworICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCisgICAgYWxhcm0o
MCk7CisgICAgc2lnYWN0aW9uKFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOworfQoKUHJvcGVydHkg
Y2hhbmdlcyBvbjogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsUG9zaXgu
Y3BwCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAkocmV2aXNpb24g
MTE4MDEwKQkoZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51
eC5jcHA6MTE4MDEwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxs
WDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24u
CisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKworI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNp
bmNsdWRlICJXZWJWaWV3LmgiCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBv
cnQuaCIKKworI2lmICFPUyhBTkRST0lEKQorI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZp
Zy5oPgorI2VuZGlmCisKKyNpZiBVU0UoR1RLKQorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNlbmRp
ZgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgdm9p
ZCBBbGFybUhhbmRsZXIoaW50KQoreworICAgIC8vIElmIHRoZSBhbGFybSBhbGFybWVkLCBraWxs
IHRoZSBwcm9jZXNzIHNpbmNlIHdlIGhhdmUgYSByZWFsbHkgYmFkIGhhbmcuCisgICAgcHV0cygi
XG4jVEVTVF9USU1FRF9PVVRcbiIpOworICAgIHB1dHMoIiNFT0ZcbiIpOworICAgIGZmbHVzaChz
dGRvdXQpOworICAgIGV4aXQoMCk7Cit9CisKK3ZvaWQgVGVzdFNoZWxsOjp3YWl0VGVzdEZpbmlz
aGVkKCkKK3sKKyAgICBBU1NFUlQoIW1fdGVzdElzUGVuZGluZyk7CisgICAgbV90ZXN0SXNQZW5k
aW5nID0gdHJ1ZTsKKworICAgIC8vIEluc3RhbGwgYW4gYWxhcm0gc2lnbmFsIGhhbmRsZXIgdGhh
dCB3aWxsIGtpbGwgdXMgaWYgd2UgdGltZSBvdXQuCisgICAgc3RydWN0IHNpZ2FjdGlvbiBhbGFy
bUFjdGlvbjsKKyAgICBhbGFybUFjdGlvbi5zYV9oYW5kbGVyID0gQWxhcm1IYW5kbGVyOworICAg
IHNpZ2VtcHR5c2V0KCZhbGFybUFjdGlvbi5zYV9tYXNrKTsKKyAgICBhbGFybUFjdGlvbi5zYV9m
bGFncyA9IDA7CisKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbjsKKyAgICBzaWdhY3Rp
b24oU0lHQUxSTSwgJmFsYXJtQWN0aW9uLCAmb2xkQWN0aW9uKTsKKyAgICBhbGFybShsYXlvdXRU
ZXN0VGltZW91dEZvcldhdGNoRG9nKCkgLyAxMDAwKTsKKworICAgIC8vIFRlc3RGaW5pc2hlZCgp
IHdpbGwgcG9zdCBhIHF1aXQgbWVzc2FnZSB0byBicmVhayB0aGlzIGxvb3Agd2hlbiB0aGUgcGFn
ZQorICAgIC8vIGZpbmlzaGVzIGxvYWRpbmcuCisgICAgd2hpbGUgKG1fdGVzdElzUGVuZGluZykK
KyAgICAgICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CisKKyAgICAvLyBSZW1v
dmUgdGhlIGFsYXJtLgorICAgIGFsYXJtKDApOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2xk
QWN0aW9uLCAwKTsKK30KKworI2lmICFPUyhBTkRST0lEKQorc3RhdGljIGJvb2wgY2hlY2tBbmRM
b2FkRm9udEZpbGUoRmNDb25maWcqIGZvbnRjZmcsIGNvbnN0IGNoYXIqIHBhdGgxLCBjb25zdCBj
aGFyKiBwYXRoMikKK3sKKyAgICBjb25zdCBjaGFyKiBmb250ID0gcGF0aDE7CisgICAgaWYgKGFj
Y2Vzcyhmb250LCBSX09LKSA8IDApIHsKKyAgICAgICAgZm9udCA9IHBhdGgyOworICAgICAgICBp
ZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJZb3UgYXJlIG1pc3NpbmcgJXMgb3IgJXMuIFdpdGhvdXQgdGhpcywgc29tZSBsYXlvdXQgdGVz
dHMgbWF5IGZhaWwuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VlIGh0dHA6Ly9j
b2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xheW91dFRlc3RzTGludXggIgorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICJmb3IgbW9yZS5cbiIsIHBhdGgxLCBwYXRoMik7CisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFGY0NvbmZp
Z0FwcEZvbnRBZGRGaWxlKGZvbnRjZmcsIChGY0NoYXI4ICopIGZvbnQpKSB7CisgICAgICAgIGZw
cmludGYoc3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgZm9udCk7CisgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lk
IHNldHVwRm9udGNvbmZpZygpCit7CisgICAgLy8gV2Ugd2lzaCB0byBtYWtlIHRoZSBsYXlvdXQg
dGVzdHMgcmVwcm9kdWNhYmxlIHdpdGggcmVzcGVjdCB0byBmb250cy4gU2tpYQorICAgIC8vIHVz
ZXMgZm9udGNvbmZpZyB0byByZXNvbHZlIGZvbnQgZmFtaWx5IG5hbWVzIGZyb20gV2ViS2l0IGlu
dG8gYWN0dWFsIGZvbnQKKyAgICAvLyBmaWxlcyBmb3VuZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0u
IFRoaXMgbWVhbnMgdGhhdCBmb250cyB2YXJ5IGJhc2VkIG9uIHRoZQorICAgIC8vIHN5c3RlbSBh
bmQgYWxzbyBvbiB0aGUgZm9udGNvbmZpZyBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgLy8g
VG8gYXZvaWQgdGhpcyB3ZSBpbml0aWFsaXNlIGZvbnRjb25maWcgaGVyZSBhbmQgaW5zdGFsbCBh
IGNvbmZpZ3VyYXRpb24KKyAgICAvLyB3aGljaCBvbmx5IGtub3dzIGFib3V0IGEgZmV3LCBzZWxl
Y3QsIGZvbnRzLgorCisgICAgLy8gV2UgaGF2ZSBmb250Y29uZmlnIHBhcnNlIGEgY29uZmlnIGZp
bGUgZnJvbSBvdXIgcmVzb3VyY2VzIGZpbGUuIFRoaXMKKyAgICAvLyBzZXRzIGEgbnVtYmVyIG9m
IGFsaWFzZXMgKCJzYW5zIi0+IkFyaWFsIiBldGMpLCBidXQgZG9lc24ndCBpbmNsdWRlIGFueQor
ICAgIC8vIGZvbnQgZGlyZWN0b3JpZXMuCisgICAgRmNJbml0KCk7CisKKyAgICBjaGFyIGRydFBh
dGhbUEFUSF9NQVggKyAxXTsKKyAgICBpbnQgZHJ0UGF0aFNpemUgPSByZWFkbGluaygiL3Byb2Mv
c2VsZi9leGUiLCBkcnRQYXRoLCBQQVRIX01BWCk7CisgICAgaWYgKGRydFBhdGhTaXplIDwgMCB8
fCBkcnRQYXRoU2l6ZSA+IFBBVEhfTUFYKSB7CisgICAgICAgIGZwdXRzKCJVbmFibGUgdG8gcmVz
b2x2ZSAvcHJvYy9zZWxmL2V4ZS4iLCBzdGRlcnIpOworICAgICAgICBleGl0KDEpOworICAgIH0K
KyAgICBkcnRQYXRoW2RydFBhdGhTaXplXSA9IDA7CisgICAgc3RkOjpzdHJpbmcgZHJ0RGlyUGF0
aChkcnRQYXRoKTsKKyAgICBzaXplX3QgbGFzdFBhdGhQb3MgPSBkcnREaXJQYXRoLnJmaW5kKCIv
Iik7CisgICAgQVNTRVJUKGxhc3RQYXRoUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKyAgICBk
cnREaXJQYXRoLmVyYXNlKGxhc3RQYXRoUG9zICsgMSk7CisKKyAgICBGY0NvbmZpZyogZm9udGNm
ZyA9IEZjQ29uZmlnQ3JlYXRlKCk7CisgICAgc3RkOjpzdHJpbmcgZm9udGNvbmZpZ1BhdGggPSBk
cnREaXJQYXRoICsgImZvbnRzLmNvbmYiOworICAgIGlmICghRmNDb25maWdQYXJzZUFuZExvYWQo
Zm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZm9udGNvbmZpZ1BhdGgu
Y19zdHIoKSksIHRydWUpKSB7CisgICAgICAgIGZwdXRzKCJGYWlsZWQgdG8gcGFyc2UgZm9udGNv
bmZpZyBjb25maWcgZmlsZVxuIiwgc3RkZXJyKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisK
KyAgICAvLyBUaGlzIGlzIHRoZSBsaXN0IG9mIGZvbnRzIHRoYXQgZm9udGNvbmZpZyB3aWxsIGtu
b3cgYWJvdXQuIEl0CisgICAgLy8gd2lsbCB0cnkgaXRzIGJlc3QgdG8gbWF0Y2ggYmFzZWQgb25s
eSBvbiB0aGUgZm9udHMgaGVyZSBpbi4gVGhlCisgICAgLy8gcGF0aHMgYXJlIHdoZXJlIHRoZXNl
IGZvbnRzIGFyZSBmb3VuZCBvbiBvdXIgVWJ1bnR1IGJveGVzLgorICAgIHN0YXRpYyBjb25zdCBj
aGFyICpjb25zdCBmb250c1tdID0geworICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9rb2NoaS9rb2NoaS1nb3RoaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUva29jaGkva29jaGktbWluY2hvLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWwudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbF9Cb2xkLnR0ZiIsCisgICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfQm9sZF9JdGFsaWMu
dHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9B
cmlhbF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0
dGNvcmVmb250cy9Db21pY19TYW5zX01TLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ29taWNfU2Fuc19NU19Cb2xkLnR0ZiIsCisgICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXcudHRm
IiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3Vy
aWVyX05ld19Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9sZF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19JdGFsaWMudHRm
IiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9y
Z2lhLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9u
dHMvR2VvcmdpYV9Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvR2VvcmdpYV9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFfSXRhbGljLnR0ZiIsCisg
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvSW1wYWN0LnR0
ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJl
YnVjaGV0X01TLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvVHJlYnVjaGV0X01TX0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfQm9sZF9JdGFsaWMudHRmIiwK
KyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNo
ZXRfTVNfSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21z
dHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2Zv
bnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGQudHRmIiwKKyAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdf
Um9tYW5fQm9sZF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5
cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW5fSXRhbGljLnR0ZiIsCisgICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYS50dGYiLAorICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfQm9s
ZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRz
L1ZlcmRhbmFfQm9sZF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0l0YWxpYy50dGYiLAorICAgICAgICAvLyBUaGUg
RGVqYVZ1U2FucyBmb250IGlzIHVzZWQgYnkgdGhlIGNzczIuMSB0ZXN0cy4KKyAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWRlamF2dS9EZWphVnVTYW5zLnR0ZiIsCisgICAg
ICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL2xvaGl0
X2hpLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1m
b250cy1jb3JlL2xvaGl0X3RhLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL011a3RpTmFycm93LnR0ZiIsCisgICAgfTsKKyAgICBm
b3IgKHNpemVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShmb250cyk7ICsraSkgeworICAgICAgICBp
ZiAoYWNjZXNzKGZvbnRzW2ldLCBSX09LKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIs
ICJZb3UgYXJlIG1pc3NpbmcgJXMuIFRyeSByZS1ydW5uaW5nIGJ1aWxkL2luc3RhbGwtYnVpbGQt
ZGVwcy5zaC4gQWxzbyBzZWUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8v
Y29kZS5nb29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4IiwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmb250c1tpXSk7CisgICAgICAgICAgICBleGl0KDEpOwor
ICAgICAgICB9CisgICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCAo
RmNDaGFyOCAqKSBmb250c1tpXSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFp
bGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgZm9udHNbaV0pOworICAgICAgICAgICAgZXhpdCgxKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIGlmICghY2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNm
ZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdGhhaS9HYXJ1ZGEudHRmIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3Rsd2cvR2Fy
dWRhLnR0ZiIpKQorICAgICAgICBleGl0KDEpOworCisgICAgLy8gV2Ugc3BlY2lhbCBjYXNlIHRo
ZXNlIGZvbnRzIGJlY2F1c2UgdGhleSdyZSBvbmx5IG5lZWRlZCBpbiBhCisgICAgLy8gZmV3IGxh
eW91dCB0ZXN0cy4KKyAgICBjaGVja0FuZExvYWRGb250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF9wYS50dGYiLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtcHVu
amFiaS1mb250cy9sb2hpdF9wYS50dGYiKTsKKworICAgIC8vIEFsc28gbG9hZCB0aGUgbGF5b3V0
LXRlc3Qtc3BlY2lmaWMgIkFoZW0iIGZvbnQuCisgICAgc3RkOjpzdHJpbmcgYWhlbVBhdGggPSBk
cnREaXJQYXRoICsgIkFIRU1fX19fLlRURiI7CisgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRG
aWxlKGZvbnRjZmcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGFoZW1QYXRoLmNf
c3RyKCkpKSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQg
JXNcbiIsIGFoZW1QYXRoLmNfc3RyKCkpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAg
IGlmICghRmNDb25maWdTZXRDdXJyZW50KGZvbnRjZmcpKSB7CisgICAgICAgIGZwdXRzKCJGYWls
ZWQgdG8gc2V0IHRoZSBkZWZhdWx0IGZvbnQgY29uZmlndXJhdGlvblxuIiwgc3RkZXJyKTsKKyAg
ICAgICAgZXhpdCgxKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gIU9TKEFORFJPSUQpCisKK3ZvaWQg
cGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQoreworICAgIC8vIEZJWE1FOiBJ
dCdzIGJldHRlciBjYWxsIGd0a19pbml0KCkgb25seSB3aGVuIHdlIHJ1biBwbHVnaW4gdGVzdHMu
CisgICAgLy8gU2VlIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9yZy9ncm91
cC9jaHJvbWl1bS1kZXYvYnJvd3NlX3RocmVhZC90aHJlYWQvNjMzZWExNjdjZGUxOTZjYSMKKyNp
ZiBVU0UoR1RLKQorICAgIGd0a19pbml0KGFyZ2MsIGFyZ3YpOworI2VuZGlmCisKKyNpZiAhT1Mo
QU5EUk9JRCkKKyAgICBzZXR1cEZvbnRjb25maWcoKTsKKyNlbmRpZgorfQorCkluZGV4OiBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAJKHJldmlzaW9u
IDExODAxMCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucyBhcmUKQEAgLTMxLDU1ICszMSwyNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlRlc3RTaGVsbC5oIgogCi0jaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgotI2luY2x1
ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5o
IgotCi0jaWYgIU9TKEFORFJPSUQpCiAjaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+
Ci0jZW5kaWYKIAogI2lmIFVTRShHVEspCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlmCi0j
aW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+CiAKLXN0YXRpYyB2b2lkIEFs
YXJtSGFuZGxlcihpbnQpCit2b2lkIG9wZW5TdGFydHVwRGlhbG9nKCkKIHsKLSAgICAvLyBJZiB0
aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5
IGJhZCBoYW5nLgotICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VUXG4iKTsKLSAgICBwdXRzKCIj
RU9GXG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBleGl0KDApOworICAgIEd0a1dpZGdl
dCogZGlhbG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldygKKyAgICAgICAgMCwgR1RLX0RJQUxP
R19NT0RBTCwgR1RLX01FU1NBR0VfSU5GTywgR1RLX0JVVFRPTlNfT0ssICJBdHRhY2ggdG8gbWU/
Iik7CisgICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCAiRHVtcFJl
bmRlclRyZWUiKTsKKyAgICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOyAvLyBS
dW5zIGEgbmVzdGVkIG1lc3NhZ2UgbG9vcC4KKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9n
KTsKIH0KIAotdm9pZCBUZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQoKQorYm9vbCBjaGVja0xh
eW91dFRlc3RTeXN0ZW1EZXBlbmRlbmNpZXMoKQogewotICAgIEFTU0VSVCghbV90ZXN0SXNQZW5k
aW5nKTsKLSAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8gSW5zdGFsbCBhbiBh
bGFybSBzaWduYWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KLSAg
ICBzdHJ1Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0aW9uOwotICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRs
ZXIgPSBBbGFybUhhbmRsZXI7Ci0gICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2sp
OwotICAgIGFsYXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKLQotICAgIHN0cnVjdCBzaWdhY3Rpb24g
b2xkQWN0aW9uOwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rp
b24pOwotICAgIGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOwot
Ci0gICAgLy8gVGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFr
IHRoaXMgbG9vcCB3aGVuIHRoZSBwYWdlCi0gICAgLy8gZmluaXNoZXMgbG9hZGluZy4KLSAgICB3
aGlsZSAobV90ZXN0SXNQZW5kaW5nKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2Fn
ZUxvb3AoKTsKLQotICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCi0gICAgYWxhcm0oMCk7Ci0gICAg
c2lnYWN0aW9uKFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOworICAgIHJldHVybiB0cnVlOwogfQor
I2VuZGlmIC8vIFVTRShHVEspCiAKLSNpZiAhT1MoQU5EUk9JRCkKIHN0YXRpYyBib29sIGNoZWNr
QW5kTG9hZEZvbnRGaWxlKEZjQ29uZmlnKiBmb250Y2ZnLCBjb25zdCBjaGFyKiBwYXRoMSwgY29u
c3QgY2hhciogcGF0aDIpCiB7CiAgICAgY29uc3QgY2hhciogZm9udCA9IHBhdGgxOwpAQCAtMjA2
LDcgKzE3Nyw2IEBAIHN0YXRpYyB2b2lkIHNldHVwRm9udGNvbmZpZygpCiAgICAgICAgIGV4aXQo
MSk7CiAgICAgfQogfQotI2VuZGlmIC8vICFPUyhBTkRST0lEKQogCiB2b2lkIHBsYXRmb3JtSW5p
dChpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKIHsKQEAgLTIxNiw4ICsxODYsNSBAQCB2b2lkIHBs
YXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJnCiAgICAgZ3RrX2luaXQoYXJnYywgYXJn
dik7CiAjZW5kaWYKIAotI2lmICFPUyhBTkRST0lEKQogICAgIHNldHVwRm9udGNvbmZpZygpOwot
I2VuZGlmCiB9Ci0K
</data>
<flag name="review"
          id="149949"
          type_id="1"
          status="+"
          setter="tkent"
    />
    <flag name="commit-queue"
          id="149957"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143394</attachid>
            <date>2012-05-22 16:26:10 -0700</date>
            <delta_ts>2012-05-22 17:51:17 -0700</delta_ts>
            <desc>last patch hopefully</desc>
            <filename>86922c</filename>
            <type>text/plain</type>
            <size>42776</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTgwNzMpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDEyLTA1LTIyICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBhcyBhbiBh
cGsgKEMrKyBhbmQgZ3lwIHBhcnQpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NjkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogQWxsLmd5cDogQWRkZWQgRHVtcFJlbmRlclRyZWVfYXBrIGludG8gZGVw
ZW5kZW5jaWVzIGZvciBBbmRyb2lkLgorCiAyMDEyLTA1LTIyICBKb2NoZW4gRWlzaW5nZXIgIDxq
b2NoZW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQuICBSb2xsZWQgREVQUy4K
SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQWxsLmd5cAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0FsbC5neXAJKHJldmlzaW9uIDExODA2OCkKKysrIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vQWxsLmd5cAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiArNDQsMTMgQEAK
ICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDpEdW1wUmVuZGVyVHJlZScsCiAgICAgICAgICAg
ICAgICAgJy4uLy4uLy4uL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQSS5neXAvVGVz
dFdlYktpdEFQSS5neXA6VGVzdFdlYktpdEFQSScsCiAgICAgICAgICAgICBdLAorICAgICAgICAg
ICAgJ2NvbmRpdGlvbnMnOiBbCisgICAgICAgICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewor
ICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAgICAgICAgICAg
ICAgICAgJy4uLy4uLy4uL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9E
dW1wUmVuZGVyVHJlZS5neXA6RHVtcFJlbmRlclRyZWVfYXBrJywKKyAgICAgICAgICAgICAgICAg
ICAgXSwKKyAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIF0sCiAgICAgICAgIH0KICAg
ICBdLAogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTE4MDczKQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDUtMjIgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1
QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW0tQW5kcm9pZF0gUnVuIER1bXBSZW5k
ZXJUcmVlIGFzIGFuIGFwayAoQysrIGFuZCBneXAgcGFydCkKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2OTIyCisKKyAgICAgICAgQmVjYXVzZSB3ZSBo
YXZlIG5ldyBwbGF0Zm9ybUluaXQoKSBpbiBUZXN0U2hlbGxBbmRyb2lkLmNwcCwgYW5kCisgICAg
ICAgIHdlIHN0aWxsIG5lZWQgdGhlIHRpbWVvdXQgcGFydCBpbiBUZXN0U2hlbGxMaW51eC5jcHAs
IFRlc3RTaGVsbExpbnV4LmNwcAorICAgICAgICBpcyBzcGxpdCBpbnRvIFRlc3RTaGVsbFBvc2l4
LmNwcCBhbmQgVGVzdFNoZWxsWDExLmNwcC4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9E
dW1wUmVuZGVyVHJlZS5neXA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRy
ZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxBbmRy
b2lkLmNwcDogQWRkZWQuIEhhbmRsZXMgY29tbWFuZCBsaW5lcyB0byByZWRpcmVjdCBzdGRpbi9z
dGRvdXQvc3RkZXJyLgorICAgICAgICAocGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwOiBSZW1vdmVkLiBNZXJnZWQgaW50byBU
ZXN0U2hlbGxYMTEuY3BwCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNo
ZWxsTGludXguY3BwOiBSZW1vdmVkLiBTcGxpdCBpbnRvIFRlc3RTaGVsbFBvc2l4LmNwcCBhbmQg
VGVzdFNoZWxsWDExLmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxQb3NpeC5jcHA6IFNwbGl0IGZyb20gVGVzdFNoZWxsTGludXguY3BwLCBjb250YWluaW5n
IHRoZSB0aW1lb3V0IGhhbmRsaW5nIHBhcnQsIGNvbXBpbGVkIHdoZW4gb3NfcG9zaXg9MSAoZXhj
bHVkaW5nIG1hYykuCisgICAgICAgIChBbGFybUhhbmRsZXIpOgorICAgICAgICAoVGVzdFNoZWxs
Ojp3YWl0VGVzdEZpbmlzaGVkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxYMTEuY3BwOiBTcGxpdCBmcm9tIFRlc3RTaGVsbExpbnV4LmNwcCwgY29udGFpbmlu
ZyB0aGUgZm9udGNvbmZpZyBwYXJ0LCBjb21waWxlZCB3aGVuIHVzZV94MTE9MQorICAgICAgICAo
b3BlblN0YXJ0dXBEaWFsb2cpOiBmcm9tIFRlc3RTaGVsbEd0ay5jcHAKKyAgICAgICAgKGNoZWNr
TGF5b3V0VGVzdFN5c3RlbURlcGVuZGVuY2llcyk6IGZyb20gVGVzdFNoZWxsR3RrLmNwcC4KKyAg
ICAgICAgKHNldHVwRm9udGNvbmZpZyk6CisgICAgICAgIChwbGF0Zm9ybUluaXQpOgorCiAyMDEy
LTA1LTIyICBKZXNzaWUgQmVybGluICA8amJlcmxpbkBhcHBsZS5jb20+CiAKICAgICAgICAgV1RS
IGZpeCBhZnRlciByMTE4MDAxLgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRl
clRyZWUuZ3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5neXBpCShyZXZpc2lvbiAxMTgwNjgpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1w
UmVuZGVyVHJlZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMCArMzQsMTEgQEAKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFNoZWxsLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNo
ZWxsLmgnLAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNwcCcsCi0gICAg
ICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsR3RrLmNwcCcsCisgICAgICAgICAgICAnY2hyb21p
dW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVs
bE1hYy5tbScsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3BwJywKICAg
ICAgICAgICAgICdjaHJvbWl1bS9UZXN0U2hlbGxXaW4uY3BwJywKKyAgICAgICAgICAgICdjaHJv
bWl1bS9UZXN0U2hlbGxYMTEuY3BwJywKICAgICAgICAgICAgICdjaHJvbWl1bS9UZXN0V2ViUGx1
Z2luLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5oJywKICAgICAg
ICAgICAgICdjaHJvbWl1bS9UZXh0SW5wdXRDb250cm9sbGVyLmNwcCcsCkluZGV4OiBUb29scy9E
dW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVu
ZGVyVHJlZS5neXAJKHJldmlzaW9uIDExODA2OCkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL0R1
bXBSZW5kZXJUcmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXAJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDExICs3OCwxNCBAQAogICAgICAgICAgICAgJ3R5cGUnOiAnZXhlY3V0YWJsZScsCiAgICAgICAg
ICAgICAnbWFjX2J1bmRsZSc6IDEsCiAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAg
ICAgICAgICAgICAgICdJbWFnZURpZmYnLAorICAgICAgICAgICAgICAgICdjb3B5X1Rlc3ROZXRz
Y2FwZVBsdWdJbicsCiAgICAgICAgICAgICAgICAgJzwoc291cmNlX2RpcikvV2ViS2l0L2Nocm9t
aXVtL1dlYktpdC5neXA6aW5zcGVjdG9yX3Jlc291cmNlcycsCiAgICAgICAgICAgICAgICAgJzwo
c291cmNlX2RpcikvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXA6d2Via2l0JywKICAgICAgICAg
ICAgICAgICAnPChzb3VyY2VfZGlyKS9XVEYvV1RGLmd5cC9XVEYuZ3lwOnd0ZicsCiAgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYnVpbGQvdGVtcF9neXAvZ29vZ2xldXJsLmd5
cDpnb29nbGV1cmwnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJk
X3BhcnR5L2ljdS9pY3UuZ3lwOmljdXVjJywKKyAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9z
cmNfZGlyKS90aGlyZF9wYXJ0eS9tZXNhL21lc2EuZ3lwOm9zbWVzYScsCiAgICAgICAgICAgICAg
ICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdjgvdG9vbHMvZ3lwL3Y4Lmd5cDp2OCcsCiAgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1cHBvcnRf
YmFzZScsCiAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2Rpcikvd2Via2l0L3N1cHBv
cnQvd2Via2l0X3N1cHBvcnQuZ3lwOmJsb2InLApAQCAtMTEwLDcgKzExMyw2IEBACiAgICAgICAg
ICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9hbmdsZS9z
cmMvYnVpbGRfYW5nbGUuZ3lwOmxpYkVHTCcsCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChj
aHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9hbmdsZS9zcmMvYnVpbGRfYW5nbGUuZ3lwOmxp
YkdMRVN2MicsCiAgICAgICAgICAgICAgICAgICAgIF0sCi0KICAgICAgICAgICAgICAgICAgICAg
J3Jlc291cmNlX2luY2x1ZGVfZGlycyc6IFsnPChTSEFSRURfSU5URVJNRURJQVRFX0RJUikvd2Vi
a2l0J10sCiAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwogICAgICAgICAgICAgICAg
ICAgICAgICAgJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL25ldC9uZXRfcmVzb3VyY2VzLnJj
JywKQEAgLTE4Nyw2ICsxODksMTEgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIFsnZXhjbHVk
ZScsICdNYWNcXC5jcHAkJ10sCiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAg
ICAgfV0sCisgICAgICAgICAgICAgICAgWydvc19wb3NpeCE9MSBvciBPUz09Im1hYyInLCB7Cisg
ICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAgICAgICAgICAgICAgICAgICAg
IFsnZXhjbHVkZScsICdQb3NpeFxcLmNwcCQnXSwKKyAgICAgICAgICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ3VzZV94MTEgPT0gMScsIHsKICAg
ICAgICAgICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL2J1aWxkL2xpbnV4L3N5c3RlbS5neXA6Zm9udGNvbmZp
ZycsCkBAIC0yMTIsNyArMjE5LDcgQEAKICAgICAgICAgICAgICAgICAgICAgXSwKICAgICAgICAg
ICAgICAgICB9LHsgIyB1c2VfeDExICE9IDEKICAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMv
JzogWwotICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ0xpbnV4XFwuY3BwJCdd
CisgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnWDExXFwuY3BwJCddLAogICAg
ICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgfV0sCiAgICAgICAgICAgICAgICAg
Wyd0b29sa2l0X3VzZXNfZ3RrID09IDEnLCB7CkBAIC0yMjUsMjcgKzIzMiwzMSBAQAogICAgICAg
ICAgICAgICAgICAgICAnaW5jbHVkZV9kaXJzJzogWwogICAgICAgICAgICAgICAgICAgICAgICAg
Jzwoc291cmNlX2RpcikvV2ViS2l0L2Nocm9taXVtL3B1YmxpYy9ndGsnLAogICAgICAgICAgICAg
ICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0seyAjIHRvb2xraXRfdXNlc19ndGsgIT0gMQot
ICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCi0gICAgICAgICAgICAgICAgICAgICAg
ICBbJ2V4Y2x1ZGUnLCAnR3RrXFwuY3BwJCddCi0gICAgICAgICAgICAgICAgICAgIF0KICAgICAg
ICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ09TPT0iYW5kcm9pZCInLCB7CisgICAg
ICAgICAgICAgICAgICAgICd0eXBlJzogJ3NoYXJlZF9saWJyYXJ5JywKICAgICAgICAgICAgICAg
ICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICdJbWFnZURp
ZmYjaG9zdCcsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS9i
YXNlL2Jhc2UuZ3lwOnRlc3Rfc3VwcG9ydF9iYXNlJywKKyAgICAgICAgICAgICAgICAgICAgICAg
ICc8KGNocm9taXVtX3NyY19kaXIpL3Rvb2xzL2FuZHJvaWQvZm9yd2FyZGVyL2ZvcndhcmRlci5n
eXA6Zm9yd2FyZGVyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL3Rlc3RpbmcvYW5kcm9pZC9uYXRpdmVfdGVzdC5neXA6bmF0aXZlX3Rlc3RfbmF0aXZlX2Nv
ZGUnLAogICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnc291cmNl
cy8nOiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2luY2x1ZGUnLCAnY2hyb21pdW0vVGVz
dFNoZWxsTGludXhcXC5jcHAkJ10sCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAg
ICAgICAgfSx7ICMgT1MhPSJhbmRyb2lkIgotICAgICAgICAgICAgICAgICAgICAnc291cmNlcy8n
OiBbCi0gICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnKEFuZHJvaWQpXFwuY3Bw
JCddCi0gICAgICAgICAgICAgICAgICAgIF0sCi0gICAgICAgICAgICAgICAgICAgICdkZXBlbmRl
bmNpZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMhJzogWwogICAgICAg
ICAgICAgICAgICAgICAgICAgJ0ltYWdlRGlmZicsCiAgICAgICAgICAgICAgICAgICAgICAgICAn
Y29weV9UZXN0TmV0c2NhcGVQbHVnSW4nLAogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hy
b21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvbWVzYS9tZXNhLmd5cDpvc21lc2EnLAogICAgICAg
ICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgICAgICAnY29waWVzJzogW3sKKyAgICAg
ICAgICAgICAgICAgICAgICAgICdkZXN0aW5hdGlvbic6ICc8KFBST0RVQ1RfRElSKScsCisgICAg
ICAgICAgICAgICAgICAgICAgICAnZmlsZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgJzwoYWhlbV9wYXRoKScsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJzwoSU5URVJN
RURJQVRFX0RJUikvcmVwYWNrL0R1bXBSZW5kZXJUcmVlLnBhaycsCisgICAgICAgICAgICAgICAg
ICAgICAgICBdCisgICAgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgIH0sIHsg
IyBPUyE9ImFuZHJvaWQiCisgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIFsnZXhjbHVkZScsICdBbmRyb2lkXFwuY3BwJCddLAorICAgICAg
ICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgIFsn
aW5zaWRlX2Nocm9taXVtX2J1aWxkPT0xIGFuZCBjb21wb25lbnQ9PSJzaGFyZWRfbGlicmFyeSIn
LCB7CiAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzJzogWwpAQCAtMzgzLDUgKzM5NCw0MyBA
QAogICAgICAgICAgICAgICAgICdjZmxhZ3NfY2MnOiBbJy1Xbm8tYysrMHgtY29tcGF0J10sCiAg
ICAgICAgICAgICB9LAogICAgICAgICB9XSwKKyAgICAgICAgWydPUz09ImFuZHJvaWQiJywgewor
ICAgICAgICAgICAgIyBXcmFwIGxpYkR1bXBSZW5kZXJUcmVlLnNvIGludG8gYW4gYW5kcm9pZCBh
cGsgZm9yIGV4ZWN1dGlvbi4KKyAgICAgICAgICAgICMgU2VlIDwoY2hyb21pdW1fc3JjX2Rpcikv
YmFzZS9iYXNlLmd5cCBmb3IgVE9ETyhqcmcpcyBhYm91dCB0aGlzIHN0cmF0ZWd5LgorICAgICAg
ICAgICAgJ3RhcmdldHMnOiBbeworICAgICAgICAgICAgICAgICd0YXJnZXRfbmFtZSc6ICdEdW1w
UmVuZGVyVHJlZV9hcGsnLAorICAgICAgICAgICAgICAgICd0eXBlJzogJ25vbmUnLAorICAgICAg
ICAgICAgICAgICdkZXBlbmRlbmNpZXMnOiBbCisgICAgICAgICAgICAgICAgICAgICdEdW1wUmVu
ZGVyVHJlZScsCisgICAgICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICAnYWN0aW9ucyc6
IFt7CisgICAgICAgICAgICAgICAgICAgICMgR2VuZXJhdGUgYXBrIGZpbGVzIChpbmNsdWRpbmcg
c291cmNlIGFuZCBhbnRmaWxlKSBmcm9tCisgICAgICAgICAgICAgICAgICAgICMgYSB0ZW1wbGF0
ZSwgYW5kIGJ1aWxkcyB0aGVtLgorICAgICAgICAgICAgICAgICAgICAnYWN0aW9uX25hbWUnOiAn
Z2VuZXJhdGVfYW5kX2J1aWxkJywKKyAgICAgICAgICAgICAgICAgICAgJ2lucHV0cyc6IFsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3Rlc3RpbmcvYW5kcm9p
ZC9nZW5lcmF0ZV9uYXRpdmVfdGVzdC5weScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChQ
Uk9EVUNUX0RJUikvbGliLnRhcmdldC9saWJEdW1wUmVuZGVyVHJlZS5zbycsCisgICAgICAgICAg
ICAgICAgICAgICAgICAjIEZJWE1FOiBCdWlsZCB0aGUgamFyIGZvciBuYXRpdmUgdGVzdHMgd2l0
aCBTREsuCisgICAgICAgICAgICAgICAgICAgICAgICAjIEZvciBub3cgd2UgYXJlIHVzaW5nIEFu
ZHJvaWQubWsgdG8gYnVpbGQgdGhlIGFway4KKyAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgICAgICAgJ291dHB1dHMnOiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChQ
Uk9EVUNUX0RJUikvRHVtcFJlbmRlclRyZWVfYXBrL0Nocm9tZU5hdGl2ZVRlc3RzLWRlYnVnLmFw
aycsCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdhY3Rpb24n
OiBbCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5n
L2FuZHJvaWQvZ2VuZXJhdGVfbmF0aXZlX3Rlc3QucHknLAorICAgICAgICAgICAgICAgICAgICAg
ICAgJy0tbmF0aXZlX2xpYnJhcnknLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVD
VF9ESVIpL2xpYi50YXJnZXQvbGliRHVtcFJlbmRlclRyZWUuc28nLAorICAgICAgICAgICAgICAg
ICAgICAgICAgIyBGSVhNRTogQnVpbGQgdGhlIGphciBmb3IgbmF0aXZlIHRlc3RzIHdpdGggU0RL
LgorICAgICAgICAgICAgICAgICAgICAgICAgIyAnLS1qYXInLAorICAgICAgICAgICAgICAgICAg
ICAgICAgIyAnZm9vL2Jhci5qYXInLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tb3V0cHV0
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9EdW1wUmVuZGVyVHJl
ZV9hcGsnLAorICAgICAgICAgICAgICAgICAgICAgICAgJy0tYW50LWFyZ3MnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJy1EUFJPRFVDVF9ESVI9PChQUk9EVUNUX0RJUiknLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJy0tYW50LWNvbXBpbGUnCisgICAgICAgICAgICAgICAgICAgIF0sCisg
ICAgICAgICAgICAgICAgfV0sCisgICAgICAgICAgICB9XSwKKyAgICAgICAgfV0sCiAgICAgXSwg
IyBjb25kaXRpb25zCiB9CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxBbmRyb2lkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1bXBSZW5k
ZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCShyZXZpc2lvbiAwKQpAQCAtMCww
ICsxLDEzMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIKKwor
I2luY2x1ZGUgPGFuZHJvaWQvbG9nLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxm
Y250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNs
dWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx3dGYvQXNz
ZXJ0aW9ucy5oPgorCituYW1lc3BhY2UgeworCitjb25zdCBjaGFyIG9wdGlvbkluRklGT1tdID0g
Ii0taW4tZmlmbz0iOworY29uc3QgY2hhciBvcHRpb25PdXRGSUZPW10gPSAiLS1vdXQtZmlmbz0i
OworY29uc3QgY2hhciBvcHRpb25FcnJGaWxlW10gPSAiLS1lcnItZmlsZT0iOworCit2b2lkIGFu
ZHJvaWRMb2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikgV1RGX0FUVFJJQlVURV9QUklO
VEYoMSwgMik7CisKK3ZvaWQgYW5kcm9pZExvZ0Vycm9yKGNvbnN0IGNoYXIqIGZvcm1hdCwgLi4u
KQoreworICAgIHZhX2xpc3QgYXJnczsKKyAgICB2YV9zdGFydChhcmdzLCBmb3JtYXQpOworICAg
IF9fYW5kcm9pZF9sb2dfdnByaW50KEFORFJPSURfTE9HX0VSUk9SLCAiRHVtcFJlbmRlclRyZWUi
LCBmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKK30KKwordm9pZCByZW1vdmVBcmco
aW50IGluZGV4LCBpbnQqIGFyZ2MsIGNoYXIqKiogYXJndikKK3sKKyAgICBmb3IgKGludCBpID0g
aW5kZXg7IGkgPCAqYXJnYzsgKytpKQorICAgICAgICAoKmFyZ3YpW2ldID0gKCphcmd2KVtpICsg
MV07CisgICAgLS0qYXJnYzsKK30KKwordm9pZCBjcmVhdGVGSUZPKGNvbnN0IGNoYXIqIGZpZm9Q
YXRoKQoreworICAgIHVubGluayhmaWZvUGF0aCk7CisgICAgaWYgKG1rZmlmbyhmaWZvUGF0aCwg
MDYwMCkpIHsKKyAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpZm8g
JXM6ICVzXG4iLCBmaWZvUGF0aCwgc3RyZXJyb3IoZXJybm8pKTsKKyAgICAgICAgZXhpdChFWElU
X0ZBSUxVUkUpOworICAgIH0KK30KKwordm9pZCBjcmVhdGVGaWxlKGNvbnN0IGNoYXIqIGZpbGVQ
YXRoKQoreworICAgIHVubGluayhmaWxlUGF0aCk7CisgICAgaW50IGZkID0gY3JlYXQoZmlsZVBh
dGgsIDA2MDApOworICAgIGlmIChmZCA8IDApIHsKKyAgICAgICAgYW5kcm9pZExvZ0Vycm9yKCJG
YWlsZWQgdG8gY3JlYXRlIGZpbGUgJXM6ICVzXG4iLCBmaWxlUGF0aCwgc3RyZXJyb3IoZXJybm8p
KTsKKyAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOworICAgIH0KKyAgICBjbG9zZShmZCk7Cit9
CisKK3ZvaWQgcmVkaXJlY3RUb0ZpbGUoRklMRSogc3RyZWFtLCBjb25zdCBjaGFyKiBwYXRoLCBj
b25zdCBjaGFyKiBtb2RlKQoreworICAgIGlmICghZnJlb3BlbihwYXRoLCBtb2RlLCBzdHJlYW0p
KSB7CisgICAgICAgIGFuZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIHJlZGlyZWN0IHN0cmVhbSB0
byBmaWxlOiAlczogJXNcbiIsIHBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQo
RVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9CisKK30gLy8gbmFtZXNwYWNlCisKK3ZvaWQgcGxhdGZv
cm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQoreworICAgIGNvbnN0IGNoYXIqIGluRklG
TyA9IDA7CisgICAgY29uc3QgY2hhciogb3V0RklGTyA9IDA7CisgICAgY29uc3QgY2hhciogZXJy
RmlsZSA9IDA7CisgICAgZm9yIChpbnQgaSA9IDE7IGkgPCAqYXJnYzsgKSB7CisgICAgICAgIGNv
bnN0IGNoYXIqIGFyZ3VtZW50ID0gKCphcmd2KVtpXTsKKyAgICAgICAgaWYgKHN0cnN0cihhcmd1
bWVudCwgb3B0aW9uSW5GSUZPKSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgaW5GSUZPID0g
YXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlvbkluRklGTykgLSAxOworICAgICAgICAg
ICAgY3JlYXRlRklGTyhpbkZJRk8pOworICAgICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2MsIGFy
Z3YpOworICAgICAgICB9IGVsc2UgaWYgKHN0cnN0cihhcmd1bWVudCwgb3B0aW9uT3V0RklGTykg
PT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIG91dEZJRk8gPSBhcmd1bWVudCArIFdURl9BUlJB
WV9MRU5HVEgob3B0aW9uT3V0RklGTykgLSAxOworICAgICAgICAgICAgY3JlYXRlRklGTyhvdXRG
SUZPKTsKKyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKKyAgICAgICAgfSBl
bHNlIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbkVyckZpbGUpID09IGFyZ3VtZW50KSB7Cisg
ICAgICAgICAgICBlcnJGaWxlID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlvbkVy
ckZpbGUpIC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZpbGUoZXJyRmlsZSk7CisgICAgICAgICAg
ICByZW1vdmVBcmcoaSwgYXJnYywgYXJndik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
KytpOworICAgIH0KKworICAgIC8vIFRoZSBvcmRlciBvZiBjcmVhdGVGSUZPKCkgYW5kIHJlZGly
ZWN0VG9GSUZPKCkgaXMgaW1wb3J0YW50IHRvIGF2b2lkIGRlYWRsb2NrLgorICAgIGlmIChvdXRG
SUZPKQorICAgICAgICByZWRpcmVjdFRvRmlsZShzdGRvdXQsIG91dEZJRk8sICJ3Iik7CisgICAg
aWYgKGluRklGTykKKyAgICAgICAgcmVkaXJlY3RUb0ZpbGUoc3RkaW4sIGluRklGTywgInIiKTsK
KyAgICBpZiAoZXJyRmlsZSkKKyAgICAgICAgcmVkaXJlY3RUb0ZpbGUoc3RkZXJyLCBlcnJGaWxl
LCAidyIpOworICAgIGVsc2UgeworICAgICAgICAvLyBSZWRpcmVjdCBzdGRlcnIgdG8gc3Rkb3V0
LgorICAgICAgICBkdXAyKDEsIDIpOworICAgIH0KK30KClByb3BlcnR5IGNoYW5nZXMgb246IFRv
b2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbEFuZHJvaWQuY3BwCl9fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJl
bmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsR3RrLmNwcAkocmV2aXNpb24gMTE4MDY4KQorKysg
VG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsR3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCi0gKiBtZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
LSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RT
aGVsbC5oIgotCi0jaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIKLSNp
bmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0j
aW5jbHVkZSA8c2lnbmFsLmg+Ci0KLQotdm9pZCBvcGVuU3RhcnR1cERpYWxvZygpCi17Ci0gICAg
R3RrV2lkZ2V0KiBkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KAotICAgICAgICAwLCBH
VEtfRElBTE9HX01PREFMLCBHVEtfTUVTU0FHRV9JTkZPLCBHVEtfQlVUVE9OU19PSywgIkF0dGFj
aCB0byBtZT8iKTsKLSAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRpYWxvZyks
ICJEdW1wUmVuZGVyVHJlZSIpOwotICAgIGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0coZGlhbG9n
KSk7IC8vIFJ1bnMgYSBuZXN0ZWQgbWVzc2FnZSBsb29wLgotICAgIGd0a193aWRnZXRfZGVzdHJv
eShkaWFsb2cpOwotfQotCi1ib29sIGNoZWNrTGF5b3V0VGVzdFN5c3RlbURlcGVuZGVuY2llcygp
Ci17Ci0gICAgcmV0dXJuIHRydWU7Ci19CkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGxMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRy
ZWUvY2hyb21pdW0vVGVzdFNoZWxsTGludXguY3BwCShyZXZpc2lvbiAxMTgwNjgpCisrKyBUb29s
cy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMjIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBh
cmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29w
eXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0
aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZy
b20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgot
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVGVzdFNo
ZWxsLmgiCi0KLSNpbmNsdWRlICJTa1R5cGVmYWNlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgot
I2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0KLSNpZiAhT1MoQU5E
Uk9JRCkKLSNpbmNsdWRlIDxmb250Y29uZmlnL2ZvbnRjb25maWcuaD4KLSNlbmRpZgotCi0jaWYg
VVNFKEdUSykKLSNpbmNsdWRlIDxndGsvZ3RrLmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzaWduYWwu
aD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KLQotc3RhdGljIHZvaWQgQWxhcm1IYW5kbGVyKGludCkK
LXsKLSAgICAvLyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2VzcyBzaW5jZSB3
ZSBoYXZlIGEgcmVhbGx5IGJhZCBoYW5nLgotICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VUXG4i
KTsKLSAgICBwdXRzKCIjRU9GXG4iKTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBleGl0KDAp
OwotfQotCi12b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCi17Ci0gICAgQVNTRVJU
KCFtX3Rlc3RJc1BlbmRpbmcpOwotICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7Ci0KLSAgICAv
LyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxsIHVzIGlmIHdl
IHRpbWUgb3V0LgotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Ci0gICAgYWxhcm1B
Y3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKLSAgICBzaWdlbXB0eXNldCgmYWxhcm1B
Y3Rpb24uc2FfbWFzayk7Ci0gICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwotCi0gICAgc3Ry
dWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhbGFybUFj
dGlvbiwgJm9sZEFjdGlvbik7Ci0gICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERv
ZygpIC8gMTAwMCk7Ci0KLSAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1l
c3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBmaW5pc2hlcyBs
b2FkaW5nLgotICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpSdW5NZXNzYWdlTG9vcCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBhbGFybS4KLSAgICBh
bGFybSgwKTsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7Ci19Ci0KLSNp
ZiAhT1MoQU5EUk9JRCkKLXN0YXRpYyBib29sIGNoZWNrQW5kTG9hZEZvbnRGaWxlKEZjQ29uZmln
KiBmb250Y2ZnLCBjb25zdCBjaGFyKiBwYXRoMSwgY29uc3QgY2hhciogcGF0aDIpCi17Ci0gICAg
Y29uc3QgY2hhciogZm9udCA9IHBhdGgxOwotICAgIGlmIChhY2Nlc3MoZm9udCwgUl9PSykgPCAw
KSB7Ci0gICAgICAgIGZvbnQgPSBwYXRoMjsKLSAgICAgICAgaWYgKGFjY2Vzcyhmb250LCBSX09L
KSA8IDApIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBtaXNzaW5nICVz
IG9yICVzLiBXaXRob3V0IHRoaXMsIHNvbWUgbGF5b3V0IHRlc3RzIG1heSBmYWlsLiAiCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIlNlZSBodHRwOi8vY29kZS5nb29nbGUuY29tL3AvY2hy
b21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4ICIKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiZm9yIG1vcmUuXG4iLCBwYXRoMSwgcGF0aDIpOwotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250
Y2ZnLCAoRmNDaGFyOCAqKSBmb250KSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxl
ZCB0byBsb2FkIGZvbnQgJXNcbiIsIGZvbnQpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIHJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgdm9pZCBzZXR1cEZvbnRjb25maWcoKQot
ewotICAgIC8vIFdlIHdpc2ggdG8gbWFrZSB0aGUgbGF5b3V0IHRlc3RzIHJlcHJvZHVjYWJsZSB3
aXRoIHJlc3BlY3QgdG8gZm9udHMuIFNraWEKLSAgICAvLyB1c2VzIGZvbnRjb25maWcgdG8gcmVz
b2x2ZSBmb250IGZhbWlseSBuYW1lcyBmcm9tIFdlYktpdCBpbnRvIGFjdHVhbCBmb250Ci0gICAg
Ly8gZmlsZXMgZm91bmQgb24gdGhlIGN1cnJlbnQgc3lzdGVtLiBUaGlzIG1lYW5zIHRoYXQgZm9u
dHMgdmFyeSBiYXNlZCBvbiB0aGUKLSAgICAvLyBzeXN0ZW0gYW5kIGFsc28gb24gdGhlIGZvbnRj
b25maWcgY29uZmlndXJhdGlvbi4KLSAgICAvLwotICAgIC8vIFRvIGF2b2lkIHRoaXMgd2UgaW5p
dGlhbGlzZSBmb250Y29uZmlnIGhlcmUgYW5kIGluc3RhbGwgYSBjb25maWd1cmF0aW9uCi0gICAg
Ly8gd2hpY2ggb25seSBrbm93cyBhYm91dCBhIGZldywgc2VsZWN0LCBmb250cy4KLQotICAgIC8v
IFdlIGhhdmUgZm9udGNvbmZpZyBwYXJzZSBhIGNvbmZpZyBmaWxlIGZyb20gb3VyIHJlc291cmNl
cyBmaWxlLiBUaGlzCi0gICAgLy8gc2V0cyBhIG51bWJlciBvZiBhbGlhc2VzICgic2FucyItPiJB
cmlhbCIgZXRjKSwgYnV0IGRvZXNuJ3QgaW5jbHVkZSBhbnkKLSAgICAvLyBmb250IGRpcmVjdG9y
aWVzLgotICAgIEZjSW5pdCgpOwotCi0gICAgY2hhciBkcnRQYXRoW1BBVEhfTUFYICsgMV07Ci0g
ICAgaW50IGRydFBhdGhTaXplID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgZHJ0UGF0aCwg
UEFUSF9NQVgpOwotICAgIGlmIChkcnRQYXRoU2l6ZSA8IDAgfHwgZHJ0UGF0aFNpemUgPiBQQVRI
X01BWCkgewotICAgICAgICBmcHV0cygiVW5hYmxlIHRvIHJlc29sdmUgL3Byb2Mvc2VsZi9leGUu
Iiwgc3RkZXJyKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0gICAgZHJ0UGF0aFtkcnRQYXRo
U2l6ZV0gPSAwOwotICAgIHN0ZDo6c3RyaW5nIGRydERpclBhdGgoZHJ0UGF0aCk7Ci0gICAgc2l6
ZV90IGxhc3RQYXRoUG9zID0gZHJ0RGlyUGF0aC5yZmluZCgiLyIpOwotICAgIEFTU0VSVChsYXN0
UGF0aFBvcyAhPSBzdGQ6OnN0cmluZzo6bnBvcyk7Ci0gICAgZHJ0RGlyUGF0aC5lcmFzZShsYXN0
UGF0aFBvcyArIDEpOwotCi0gICAgRmNDb25maWcqIGZvbnRjZmcgPSBGY0NvbmZpZ0NyZWF0ZSgp
OwotICAgIHN0ZDo6c3RyaW5nIGZvbnRjb25maWdQYXRoID0gZHJ0RGlyUGF0aCArICJmb250cy5j
b25mIjsKLSAgICBpZiAoIUZjQ29uZmlnUGFyc2VBbmRMb2FkKGZvbnRjZmcsIHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGZvbnRjb25maWdQYXRoLmNfc3RyKCkpLCB0cnVlKSkgewot
ICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHBhcnNlIGZvbnRjb25maWcgY29uZmlnIGZpbGVcbiIs
IHN0ZGVycik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAgfQotCi0gICAgLy8gVGhpcyBpcyB0aGUg
bGlzdCBvZiBmb250cyB0aGF0IGZvbnRjb25maWcgd2lsbCBrbm93IGFib3V0LiBJdAotICAgIC8v
IHdpbGwgdHJ5IGl0cyBiZXN0IHRvIG1hdGNoIGJhc2VkIG9ubHkgb24gdGhlIGZvbnRzIGhlcmUg
aW4uIFRoZQotICAgIC8vIHBhdGhzIGFyZSB3aGVyZSB0aGVzZSBmb250cyBhcmUgZm91bmQgb24g
b3VyIFVidW50dSBib3hlcy4KLSAgICBzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgZm9udHNbXSA9
IHsKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUva29jaGkva29jaGktZ290aGlj
LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hpL2tvY2hpLW1p
bmNoby50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZv
bnRzL0FyaWFsLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvQXJpYWxfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfSXRhbGljLnR0ZiIsCi0g
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ29taWNfU2Fu
c19NUy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZv
bnRzL0NvbWljX1NhbnNfTVNfQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90
cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3LnR0ZiIsCi0gICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfQm9sZC50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJf
TmV3X0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvQ291cmllcl9OZXdfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYS50dGYiLAotICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFfQm9sZC50dGYi
LAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3Jn
aWFfQm9sZF9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
bXN0dGNvcmVmb250cy9HZW9yZ2lhX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0ltcGFjdC50dGYiLAotICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NUy50dGYiLAotICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9N
U19Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3Jl
Zm9udHMvVHJlYnVjaGV0X01TX0JvbGRfSXRhbGljLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0X01TX0l0YWxpYy50dGYiLAot
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05l
d19Sb21hbi50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2Zv
bnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGRfSXRhbGljLnR0
ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVGlt
ZXNfTmV3X1JvbWFuX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVl
dHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmEudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0JvbGQudHRmIiwKLSAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJkYW5hX0JvbGRfSXRhbGlj
LnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMv
VmVyZGFuYV9JdGFsaWMudHRmIiwKLSAgICAgICAgLy8gVGhlIERlamFWdVNhbnMgZm9udCBpcyB1
c2VkIGJ5IHRoZSBjc3MyLjEgdGVzdHMuCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL3R0Zi1kZWphdnUvRGVqYVZ1U2Fucy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF9oaS50dGYiLAotICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF90YS50
dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMt
Y29yZS9NdWt0aU5hcnJvdy50dGYiLAotICAgIH07Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkg
PCBhcnJheXNpemUoZm9udHMpOyArK2kpIHsKLSAgICAgICAgaWYgKGFjY2Vzcyhmb250c1tpXSwg
Ul9PSykpIHsKLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiWW91IGFyZSBtaXNzaW5nICVz
LiBUcnkgcmUtcnVubmluZyBidWlsZC9pbnN0YWxsLWJ1aWxkLWRlcHMuc2guIEFsc28gc2VlICIK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2No
cm9taXVtL3dpa2kvTGF5b3V0VGVzdHNMaW51eCIsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZm9udHNbaV0pOwotICAgICAgICAgICAgZXhpdCgxKTsKLSAgICAgICAgfQotICAgICAgICBp
ZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikgZm9udHNbaV0p
KSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNc
biIsIGZvbnRzW2ldKTsKLSAgICAgICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoIWNoZWNrQW5kTG9hZEZvbnRGaWxlKGZvbnRjZmcsICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL3RoYWkvR2FydWRhLnR0ZiIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90bHdnL0dhcnVkYS50dGYiKSkKLSAgICAgICAg
ZXhpdCgxKTsKLQotICAgIC8vIFdlIHNwZWNpYWwgY2FzZSB0aGVzZSBmb250cyBiZWNhdXNlIHRo
ZXkncmUgb25seSBuZWVkZWQgaW4gYQotICAgIC8vIGZldyBsYXlvdXQgdGVzdHMuCi0gICAgY2hl
Y2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRm
LWluZGljLWZvbnRzLWNvcmUvbG9oaXRfcGEudHRmIiwgCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLXB1bmphYmktZm9udHMvbG9oaXRfcGEu
dHRmIik7Ci0KLSAgICAvLyBBbHNvIGxvYWQgdGhlIGxheW91dC10ZXN0LXNwZWNpZmljICJBaGVt
IiBmb250LgotICAgIHN0ZDo6c3RyaW5nIGFoZW1QYXRoID0gZHJ0RGlyUGF0aCArICJBSEVNX19f
Xy5UVEYiOwotICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCByZWludGVy
cHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihhaGVtUGF0aC5jX3N0cigpKSkpIHsKLSAgICAgICAg
ZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBhaGVtUGF0aC5jX3N0
cigpKTsKLSAgICAgICAgZXhpdCgxKTsKLSAgICB9Ci0KLSAgICBpZiAoIUZjQ29uZmlnU2V0Q3Vy
cmVudChmb250Y2ZnKSkgewotICAgICAgICBmcHV0cygiRmFpbGVkIHRvIHNldCB0aGUgZGVmYXVs
dCBmb250IGNvbmZpZ3VyYXRpb25cbiIsIHN0ZGVycik7Ci0gICAgICAgIGV4aXQoMSk7Ci0gICAg
fQotfQotI2VuZGlmIC8vICFPUyhBTkRST0lEKQotCi12b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFy
Z2MsIGNoYXIqKiogYXJndikKLXsKLSAgICAvLyBGSVhNRTogSXQncyBiZXR0ZXIgY2FsbCBndGtf
aW5pdCgpIG9ubHkgd2hlbiB3ZSBydW4gcGx1Z2luIHRlc3RzLgotICAgIC8vIFNlZSBodHRwOi8v
Z3JvdXBzLmdvb2dsZS5jb20vYS9jaHJvbWl1bS5vcmcvZ3JvdXAvY2hyb21pdW0tZGV2L2Jyb3dz
ZV90aHJlYWQvdGhyZWFkLzYzM2VhMTY3Y2RlMTk2Y2EjCi0jaWYgVVNFKEdUSykKLSAgICBndGtf
aW5pdChhcmdjLCBhcmd2KTsKLSNlbmRpZgotCi0jaWYgIU9TKEFORFJPSUQpCi0gICAgc2V0dXBG
b250Y29uZmlnKCk7Ci0jZW5kaWYKLX0KLQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsUG9zaXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJU
cmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcAkocmV2aXNpb24gMCkKKysrIFRvb2xzL0R1
bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4LmNwcAkocmV2aXNpb24gMCkKQEAg
LTAsMCArMSw3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICog
bWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1l
IG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICog
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENP
UFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAq
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJUZXN0U2hlbGwuaCIK
KworI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCisKKyNpbmNsdWRl
IDxzaWduYWwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworc3RhdGljIHZvaWQgQWxhcm1IYW5k
bGVyKGludCkKK3sKKyAgICAvLyBJZiB0aGUgYWxhcm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2Vz
cyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5IGJhZCBoYW5nLgorICAgIHB1dHMoIlxuI1RFU1RfVElN
RURfT1VUXG4iKTsKKyAgICBwdXRzKCIjRU9GXG4iKTsKKyAgICBmZmx1c2goc3Rkb3V0KTsKKyAg
ICBleGl0KDApOworfQorCit2b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgpCit7Cisg
ICAgQVNTRVJUKCFtX3Rlc3RJc1BlbmRpbmcpOworICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7
CisKKyAgICAvLyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxs
IHVzIGlmIHdlIHRpbWUgb3V0LgorICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Cisg
ICAgYWxhcm1BY3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKKyAgICBzaWdlbXB0eXNl
dCgmYWxhcm1BY3Rpb24uc2FfbWFzayk7CisgICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwor
CisgICAgc3RydWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247CisgICAgc2lnYWN0aW9uKFNJR0FMUk0s
ICZhbGFybUFjdGlvbiwgJm9sZEFjdGlvbik7CisgICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRG
b3JXYXRjaERvZygpIC8gMTAwMCk7CisKKyAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3Qg
YSBxdWl0IG1lc3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKKyAgICAvLyBm
aW5pc2hlcyBsb2FkaW5nLgorICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCisgICAgICAgIHdl
YmtpdF9zdXBwb3J0OjpSdW5NZXNzYWdlTG9vcCgpOworCisgICAgLy8gUmVtb3ZlIHRoZSBhbGFy
bS4KKyAgICBhbGFybSgwKTsKKyAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7
Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9U
ZXN0U2hlbGxQb3NpeC5jcHAKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fXwpBZGRlZDogc3ZuOmVvbC1zdHlsZQogICArIExG
CgpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEu
Y3BwCShyZXZpc2lvbiAxMTgwMTApCShmcm9tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVt
L1Rlc3RTaGVsbExpbnV4LmNwcDoxMTgwMTApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGxYMTEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjIzIEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAg
ICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAq
IGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4g
bm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgorCisjaW5jbHVkZSAiU2tU
eXBlZmFjZS5oIgorI2luY2x1ZGUgIldlYlZpZXcuaCIKKyNpbmNsdWRlICJ3ZWJraXQvc3VwcG9y
dC93ZWJraXRfc3VwcG9ydC5oIgorCisjaWYgIU9TKEFORFJPSUQpCisjaW5jbHVkZSA8Zm9udGNv
bmZpZy9mb250Y29uZmlnLmg+CisjZW5kaWYKKworI2lmIFVTRShHVEspCisjaW5jbHVkZSA8Z3Rr
L2d0ay5oPgorI2VuZGlmCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+
CisKK3N0YXRpYyB2b2lkIEFsYXJtSGFuZGxlcihpbnQpCit7CisgICAgLy8gSWYgdGhlIGFsYXJt
IGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJlYWxseSBiYWQgaGFu
Zy4KKyAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7CisgICAgcHV0cygiI0VPRlxuIik7
CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgZXhpdCgwKTsKK30KKwordm9pZCBUZXN0U2hlbGw6
OndhaXRUZXN0RmluaXNoZWQoKQoreworICAgIEFTU0VSVCghbV90ZXN0SXNQZW5kaW5nKTsKKyAg
ICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOworCisgICAgLy8gSW5zdGFsbCBhbiBhbGFybSBzaWdu
YWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KKyAgICBzdHJ1Y3Qg
c2lnYWN0aW9uIGFsYXJtQWN0aW9uOworICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRsZXIgPSBBbGFy
bUhhbmRsZXI7CisgICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2spOworICAgIGFs
YXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKKworICAgIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0aW9u
OworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rpb24pOworICAg
IGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOworCisgICAgLy8g
VGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFrIHRoaXMgbG9v
cCB3aGVuIHRoZSBwYWdlCisgICAgLy8gZmluaXNoZXMgbG9hZGluZy4KKyAgICB3aGlsZSAobV90
ZXN0SXNQZW5kaW5nKQorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3AoKTsK
KworICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCisgICAgYWxhcm0oMCk7CisgICAgc2lnYWN0aW9u
KFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOworfQorCisjaWYgIU9TKEFORFJPSUQpCitzdGF0aWMg
Ym9vbCBjaGVja0FuZExvYWRGb250RmlsZShGY0NvbmZpZyogZm9udGNmZywgY29uc3QgY2hhciog
cGF0aDEsIGNvbnN0IGNoYXIqIHBhdGgyKQoreworICAgIGNvbnN0IGNoYXIqIGZvbnQgPSBwYXRo
MTsKKyAgICBpZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkgeworICAgICAgICBmb250ID0gcGF0
aDI7CisgICAgICAgIGlmIChhY2Nlc3MoZm9udCwgUl9PSykgPCAwKSB7CisgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcyBvciAlcy4gV2l0aG91dCB0aGlzLCBz
b21lIGxheW91dCB0ZXN0cyBtYXkgZmFpbC4gIgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICJTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5b3V0VGVzdHNM
aW51eCAiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBtb3JlLlxuIiwgcGF0aDEs
IHBhdGgyKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAg
ICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikgZm9udCkp
IHsKKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBm
b250KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kworc3RhdGljIHZvaWQgc2V0dXBGb250Y29uZmlnKCkKK3sKKyAgICAvLyBXZSB3aXNoIHRvIG1h
a2UgdGhlIGxheW91dCB0ZXN0cyByZXByb2R1Y2FibGUgd2l0aCByZXNwZWN0IHRvIGZvbnRzLiBT
a2lhCisgICAgLy8gdXNlcyBmb250Y29uZmlnIHRvIHJlc29sdmUgZm9udCBmYW1pbHkgbmFtZXMg
ZnJvbSBXZWJLaXQgaW50byBhY3R1YWwgZm9udAorICAgIC8vIGZpbGVzIGZvdW5kIG9uIHRoZSBj
dXJyZW50IHN5c3RlbS4gVGhpcyBtZWFucyB0aGF0IGZvbnRzIHZhcnkgYmFzZWQgb24gdGhlCisg
ICAgLy8gc3lzdGVtIGFuZCBhbHNvIG9uIHRoZSBmb250Y29uZmlnIGNvbmZpZ3VyYXRpb24uCisg
ICAgLy8KKyAgICAvLyBUbyBhdm9pZCB0aGlzIHdlIGluaXRpYWxpc2UgZm9udGNvbmZpZyBoZXJl
IGFuZCBpbnN0YWxsIGEgY29uZmlndXJhdGlvbgorICAgIC8vIHdoaWNoIG9ubHkga25vd3MgYWJv
dXQgYSBmZXcsIHNlbGVjdCwgZm9udHMuCisKKyAgICAvLyBXZSBoYXZlIGZvbnRjb25maWcgcGFy
c2UgYSBjb25maWcgZmlsZSBmcm9tIG91ciByZXNvdXJjZXMgZmlsZS4gVGhpcworICAgIC8vIHNl
dHMgYSBudW1iZXIgb2YgYWxpYXNlcyAoInNhbnMiLT4iQXJpYWwiIGV0YyksIGJ1dCBkb2Vzbid0
IGluY2x1ZGUgYW55CisgICAgLy8gZm9udCBkaXJlY3Rvcmllcy4KKyAgICBGY0luaXQoKTsKKwor
ICAgIGNoYXIgZHJ0UGF0aFtQQVRIX01BWCArIDFdOworICAgIGludCBkcnRQYXRoU2l6ZSA9IHJl
YWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGRydFBhdGgsIFBBVEhfTUFYKTsKKyAgICBpZiAoZHJ0
UGF0aFNpemUgPCAwIHx8IGRydFBhdGhTaXplID4gUEFUSF9NQVgpIHsKKyAgICAgICAgZnB1dHMo
IlVuYWJsZSB0byByZXNvbHZlIC9wcm9jL3NlbGYvZXhlLiIsIHN0ZGVycik7CisgICAgICAgIGV4
aXQoMSk7CisgICAgfQorICAgIGRydFBhdGhbZHJ0UGF0aFNpemVdID0gMDsKKyAgICBzdGQ6OnN0
cmluZyBkcnREaXJQYXRoKGRydFBhdGgpOworICAgIHNpemVfdCBsYXN0UGF0aFBvcyA9IGRydERp
clBhdGgucmZpbmQoIi8iKTsKKyAgICBBU1NFUlQobGFzdFBhdGhQb3MgIT0gc3RkOjpzdHJpbmc6
Om5wb3MpOworICAgIGRydERpclBhdGguZXJhc2UobGFzdFBhdGhQb3MgKyAxKTsKKworICAgIEZj
Q29uZmlnKiBmb250Y2ZnID0gRmNDb25maWdDcmVhdGUoKTsKKyAgICBzdGQ6OnN0cmluZyBmb250
Y29uZmlnUGF0aCA9IGRydERpclBhdGggKyAiZm9udHMuY29uZiI7CisgICAgaWYgKCFGY0NvbmZp
Z1BhcnNlQW5kTG9hZChmb250Y2ZnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgqPihm
b250Y29uZmlnUGF0aC5jX3N0cigpKSwgdHJ1ZSkpIHsKKyAgICAgICAgZnB1dHMoIkZhaWxlZCB0
byBwYXJzZSBmb250Y29uZmlnIGNvbmZpZyBmaWxlXG4iLCBzdGRlcnIpOworICAgICAgICBleGl0
KDEpOworICAgIH0KKworICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZm9udHMgdGhhdCBmb250
Y29uZmlnIHdpbGwga25vdyBhYm91dC4gSXQKKyAgICAvLyB3aWxsIHRyeSBpdHMgYmVzdCB0byBt
YXRjaCBiYXNlZCBvbmx5IG9uIHRoZSBmb250cyBoZXJlIGluLiBUaGUKKyAgICAvLyBwYXRocyBh
cmUgd2hlcmUgdGhlc2UgZm9udHMgYXJlIGZvdW5kIG9uIG91ciBVYnVudHUgYm94ZXMuCisgICAg
c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZvbnRzW10gPSB7CisgICAgICAgICIvdXNyL3NoYXJl
L2ZvbnRzL3RydWV0eXBlL2tvY2hpL2tvY2hpLWdvdGhpYy50dGYiLAorICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9rb2NoaS9rb2NoaS1taW5jaG8udHRmIiwKKyAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbC50dGYiLAorICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGQudHRm
IiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Bcmlh
bF9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0FyaWFsX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVMudHRmIiwKKyAgICAgICAgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5zX01TX0JvbGQu
dHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9D
b3VyaWVyX05ldy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0
Y29yZWZvbnRzL0NvdXJpZXJfTmV3X0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19Cb2xkX0l0YWxpYy50dGYiLAor
ICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJpZXJf
TmV3X0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0
Y29yZWZvbnRzL0dlb3JnaWEudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5
cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGRfSXRhbGljLnR0ZiIsCisg
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2VvcmdpYV9J
dGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9JbXBhY3QudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0
dGNvcmVmb250cy9UcmVidWNoZXRfTVMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfQm9sZC50dGYiLAorICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19Cb2xk
X0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL1RyZWJ1Y2hldF9NU19JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW4udHRmIiwKKyAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW5f
Qm9sZC50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZv
bnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFy
ZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9JdGFsaWMudHRm
IiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9WZXJk
YW5hLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9u
dHMvVmVyZGFuYV9Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBl
L21zdHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfSXRhbGljLnR0ZiIsCisg
ICAgICAgIC8vIFRoZSBEZWphVnVTYW5zIGZvbnQgaXMgdXNlZCBieSB0aGUgY3NzMi4xIHRlc3Rz
LgorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1L0RlamFWdVNh
bnMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZv
bnRzLWNvcmUvbG9oaXRfaGkudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5
cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfdGEudHRmIiwKKyAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvTXVrdGlOYXJyb3cudHRmIiwK
KyAgICB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGZvbnRzKTsgKytp
KSB7CisgICAgICAgIGlmIChhY2Nlc3MoZm9udHNbaV0sIFJfT0spKSB7CisgICAgICAgICAgICBm
cHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcy4gVHJ5IHJlLXJ1bm5pbmcgYnVpbGQv
aW5zdGFsbC1idWlsZC1kZXBzLnNoLiBBbHNvIHNlZSAiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xheW91dFRlc3Rz
TGludXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzW2ldKTsKKyAgICAgICAg
ICAgIGV4aXQoMSk7CisgICAgICAgIH0KKyAgICAgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRG
aWxlKGZvbnRjZmcsIChGY0NoYXI4ICopIGZvbnRzW2ldKSkgeworICAgICAgICAgICAgZnByaW50
ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBmb250c1tpXSk7CisgICAgICAg
ICAgICBleGl0KDEpOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKCFjaGVja0FuZExvYWRG
b250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90aGFpL0dhcnVkYS50
dGYiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvdGx3Zy9HYXJ1ZGEudHRmIikpCisgICAgICAgIGV4aXQoMSk7CisKKyAgICAvLyBXZSBz
cGVjaWFsIGNhc2UgdGhlc2UgZm9udHMgYmVjYXVzZSB0aGV5J3JlIG9ubHkgbmVlZGVkIGluIGEK
KyAgICAvLyBmZXcgbGF5b3V0IHRlc3RzLgorICAgIGNoZWNrQW5kTG9hZEZvbnRGaWxlKGZvbnRj
ZmcsICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL2xvaGl0
X3BhLnR0ZiIsIAorICAgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL3R0Zi1wdW5qYWJpLWZvbnRzL2xvaGl0X3BhLnR0ZiIpOworCisgICAgLy8gQWxzbyBs
b2FkIHRoZSBsYXlvdXQtdGVzdC1zcGVjaWZpYyAiQWhlbSIgZm9udC4KKyAgICBzdGQ6OnN0cmlu
ZyBhaGVtUGF0aCA9IGRydERpclBhdGggKyAiQUhFTV9fX18uVFRGIjsKKyAgICBpZiAoIUZjQ29u
ZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4
Kj4oYWhlbVBhdGguY19zdHIoKSkpKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVk
IHRvIGxvYWQgZm9udCAlc1xuIiwgYWhlbVBhdGguY19zdHIoKSk7CisgICAgICAgIGV4aXQoMSk7
CisgICAgfQorCisgICAgaWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoZm9udGNmZykpIHsKKyAgICAg
ICAgZnB1dHMoIkZhaWxlZCB0byBzZXQgdGhlIGRlZmF1bHQgZm9udCBjb25maWd1cmF0aW9uXG4i
LCBzdGRlcnIpOworICAgICAgICBleGl0KDEpOworICAgIH0KK30KKyNlbmRpZiAvLyAhT1MoQU5E
Uk9JRCkKKwordm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCit7Cisg
ICAgLy8gRklYTUU6IEl0J3MgYmV0dGVyIGNhbGwgZ3RrX2luaXQoKSBvbmx5IHdoZW4gd2UgcnVu
IHBsdWdpbiB0ZXN0cy4KKyAgICAvLyBTZWUgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2EvY2hy
b21pdW0ub3JnL2dyb3VwL2Nocm9taXVtLWRldi9icm93c2VfdGhyZWFkL3RocmVhZC82MzNlYTE2
N2NkZTE5NmNhIworI2lmIFVTRShHVEspCisgICAgZ3RrX2luaXQoYXJnYywgYXJndik7CisjZW5k
aWYKKworI2lmICFPUyhBTkRST0lEKQorICAgIHNldHVwRm9udGNvbmZpZygpOworI2VuZGlmCit9
CisKSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDEx
LmNwcAkocmV2aXNpb24gMTE4MDEwKQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsWDExLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTEgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENv
cHlyaWdodCAoQykgMjAxMiBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEsNTUgKzMxLDI2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCiAKLSNpbmNsdWRlICJTa1R5cGVm
YWNlLmgiCi0jaW5jbHVkZSAiV2ViVmlldy5oIgotI2luY2x1ZGUgIndlYmtpdC9zdXBwb3J0L3dl
YmtpdF9zdXBwb3J0LmgiCi0KLSNpZiAhT1MoQU5EUk9JRCkKICNpbmNsdWRlIDxmb250Y29uZmln
L2ZvbnRjb25maWcuaD4KLSNlbmRpZgogCiAjaWYgVVNFKEdUSykKICNpbmNsdWRlIDxndGsvZ3Rr
Lmg+Ci0jZW5kaWYKLSNpbmNsdWRlIDxzaWduYWwuaD4KLSNpbmNsdWRlIDx1bmlzdGQuaD4KIAot
c3RhdGljIHZvaWQgQWxhcm1IYW5kbGVyKGludCkKK3ZvaWQgb3BlblN0YXJ0dXBEaWFsb2coKQog
ewotICAgIC8vIElmIHRoZSBhbGFybSBhbGFybWVkLCBraWxsIHRoZSBwcm9jZXNzIHNpbmNlIHdl
IGhhdmUgYSByZWFsbHkgYmFkIGhhbmcuCi0gICAgcHV0cygiXG4jVEVTVF9USU1FRF9PVVRcbiIp
OwotICAgIHB1dHMoIiNFT0ZcbiIpOwotICAgIGZmbHVzaChzdGRvdXQpOwotICAgIGV4aXQoMCk7
CisgICAgR3RrV2lkZ2V0KiBkaWFsb2cgPSBndGtfbWVzc2FnZV9kaWFsb2dfbmV3KAorICAgICAg
ICAwLCBHVEtfRElBTE9HX01PREFMLCBHVEtfTUVTU0FHRV9JTkZPLCBHVEtfQlVUVE9OU19PSywg
IkF0dGFjaCB0byBtZT8iKTsKKyAgICBndGtfd2luZG93X3NldF90aXRsZShHVEtfV0lORE9XKGRp
YWxvZyksICJEdW1wUmVuZGVyVHJlZSIpOworICAgIGd0a19kaWFsb2dfcnVuKEdUS19ESUFMT0co
ZGlhbG9nKSk7IC8vIFJ1bnMgYSBuZXN0ZWQgbWVzc2FnZSBsb29wLgorICAgIGd0a193aWRnZXRf
ZGVzdHJveShkaWFsb2cpOwogfQogCi12b2lkIFRlc3RTaGVsbDo6d2FpdFRlc3RGaW5pc2hlZCgp
Citib29sIGNoZWNrTGF5b3V0VGVzdFN5c3RlbURlcGVuZGVuY2llcygpCiB7Ci0gICAgQVNTRVJU
KCFtX3Rlc3RJc1BlbmRpbmcpOwotICAgIG1fdGVzdElzUGVuZGluZyA9IHRydWU7Ci0KLSAgICAv
LyBJbnN0YWxsIGFuIGFsYXJtIHNpZ25hbCBoYW5kbGVyIHRoYXQgd2lsbCBraWxsIHVzIGlmIHdl
IHRpbWUgb3V0LgotICAgIHN0cnVjdCBzaWdhY3Rpb24gYWxhcm1BY3Rpb247Ci0gICAgYWxhcm1B
Y3Rpb24uc2FfaGFuZGxlciA9IEFsYXJtSGFuZGxlcjsKLSAgICBzaWdlbXB0eXNldCgmYWxhcm1B
Y3Rpb24uc2FfbWFzayk7Ci0gICAgYWxhcm1BY3Rpb24uc2FfZmxhZ3MgPSAwOwotCi0gICAgc3Ry
dWN0IHNpZ2FjdGlvbiBvbGRBY3Rpb247Ci0gICAgc2lnYWN0aW9uKFNJR0FMUk0sICZhbGFybUFj
dGlvbiwgJm9sZEFjdGlvbik7Ci0gICAgYWxhcm0obGF5b3V0VGVzdFRpbWVvdXRGb3JXYXRjaERv
ZygpIC8gMTAwMCk7Ci0KLSAgICAvLyBUZXN0RmluaXNoZWQoKSB3aWxsIHBvc3QgYSBxdWl0IG1l
c3NhZ2UgdG8gYnJlYWsgdGhpcyBsb29wIHdoZW4gdGhlIHBhZ2UKLSAgICAvLyBmaW5pc2hlcyBs
b2FkaW5nLgotICAgIHdoaWxlIChtX3Rlc3RJc1BlbmRpbmcpCi0gICAgICAgIHdlYmtpdF9zdXBw
b3J0OjpSdW5NZXNzYWdlTG9vcCgpOwotCi0gICAgLy8gUmVtb3ZlIHRoZSBhbGFybS4KLSAgICBh
bGFybSgwKTsKLSAgICBzaWdhY3Rpb24oU0lHQUxSTSwgJm9sZEFjdGlvbiwgMCk7CisgICAgcmV0
dXJuIHRydWU7CiB9CisjZW5kaWYgLy8gVVNFKEdUSykKIAotI2lmICFPUyhBTkRST0lEKQogc3Rh
dGljIGJvb2wgY2hlY2tBbmRMb2FkRm9udEZpbGUoRmNDb25maWcqIGZvbnRjZmcsIGNvbnN0IGNo
YXIqIHBhdGgxLCBjb25zdCBjaGFyKiBwYXRoMikKIHsKICAgICBjb25zdCBjaGFyKiBmb250ID0g
cGF0aDE7CkBAIC0yMDYsNyArMTc3LDYgQEAgc3RhdGljIHZvaWQgc2V0dXBGb250Y29uZmlnKCkK
ICAgICAgICAgZXhpdCgxKTsKICAgICB9CiB9Ci0jZW5kaWYgLy8gIU9TKEFORFJPSUQpCiAKIHZv
aWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQogewpAQCAtMjE2LDggKzE4
Niw1IEBAIHZvaWQgcGxhdGZvcm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmcKICAgICBndGtf
aW5pdChhcmdjLCBhcmd2KTsKICNlbmRpZgogCi0jaWYgIU9TKEFORFJPSUQpCiAgICAgc2V0dXBG
b250Y29uZmlnKCk7Ci0jZW5kaWYKIH0KLQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143418</attachid>
            <date>2012-05-22 17:51:17 -0700</date>
            <delta_ts>2012-05-22 21:13:28 -0700</delta_ts>
            <desc>Yet another last patch (resolved conflicts)</desc>
            <filename>86922d</filename>
            <type>text/plain</type>
            <size>42870</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTgwODkpCisrKyBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEy
IEBACisyMDEyLTA1LTIyICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBhcyBhbiBh
cGsgKEMrKyBhbmQgZ3lwIHBhcnQpCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD04NjkyMgorCisgICAgICAgIFJldmlld2VkIGJ5IEtlbnQgVGFtdXJhLgor
CisgICAgICAgICogQWxsLmd5cDogQWRkZWQgRHVtcFJlbmRlclRyZWVfYXBrIGludG8gZGVwZW5k
ZW5jaWVzIGZvciBBbmRyb2lkLgorCiAyMDEyLTA1LTIyICBNYXJrIFBpbGdyaW0gIDxwaWxncmlt
QGNocm9taXVtLm9yZz4KIAogICAgICAgICBbQ2hyb21pdW1dIE1vdmUgY29va2llSmFyIHRvIFBs
YXRmb3JtLmgKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQWxsLmd5cAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0FsbC5neXAJKHJldmlzaW9uIDExODA4OSkKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQWxsLmd5cAkod29ya2luZyBjb3B5KQpAQCAtNDQsNiAr
NDQsMTMgQEAKICAgICAgICAgICAgICAgICAnLi4vLi4vLi4vVG9vbHMvRHVtcFJlbmRlclRyZWUv
RHVtcFJlbmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cDpEdW1wUmVuZGVyVHJlZScsCiAg
ICAgICAgICAgICAgICAgJy4uLy4uLy4uL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvVGVzdFdlYktpdEFQ
SS5neXAvVGVzdFdlYktpdEFQSS5neXA6VGVzdFdlYktpdEFQSScsCiAgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgJ2NvbmRpdGlvbnMnOiBbCisgICAgICAgICAgICAgICAgWydPUz09ImFuZHJv
aWQiJywgeworICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAg
ICAgICAgICAgICAgICAgJy4uLy4uLy4uL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJU
cmVlLmd5cC9EdW1wUmVuZGVyVHJlZS5neXA6RHVtcFJlbmRlclRyZWVfYXBrJywKKyAgICAgICAg
ICAgICAgICAgICAgXSwKKyAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgIF0sCiAgICAg
ICAgIH0KICAgICBdLAogfQpJbmRleDogVG9vbHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRv
b2xzL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MDg5KQorKysgVG9vbHMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjkgQEAKKzIwMTItMDUtMjIgIFhpYW56aHUgV2FuZyAgPHdh
bmd4aWFuemh1QGNocm9taXVtLm9yZz4KKworICAgICAgICBbQ2hyb21pdW0tQW5kcm9pZF0gUnVu
IER1bXBSZW5kZXJUcmVlIGFzIGFuIGFwayAoQysrIGFuZCBneXAgcGFydCkKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2OTIyCisKKyAgICAgICAgQmVj
YXVzZSB3ZSBoYXZlIG5ldyBwbGF0Zm9ybUluaXQoKSBpbiBUZXN0U2hlbGxBbmRyb2lkLmNwcCwg
YW5kCisgICAgICAgIHdlIHN0aWxsIG5lZWQgdGhlIHRpbWVvdXQgcGFydCBpbiBUZXN0U2hlbGxM
aW51eC5jcHAsIFRlc3RTaGVsbExpbnV4LmNwcAorICAgICAgICBpcyBzcGxpdCBpbnRvIFRlc3RT
aGVsbFBvc2l4LmNwcCBhbmQgVGVzdFNoZWxsWDExLmNwcC4KKworICAgICAgICBSZXZpZXdlZCBi
eSBLZW50IFRhbXVyYS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL0R1bXBSZW5kZXJUcmVl
Lmd5cC9EdW1wUmVuZGVyVHJlZS5neXA6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwaToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGxBbmRyb2lkLmNwcDogQWRkZWQuIEhhbmRsZXMgY29tbWFuZCBsaW5lcyB0byByZWRpcmVjdCBz
dGRpbi9zdGRvdXQvc3RkZXJyLgorICAgICAgICAocGxhdGZvcm1Jbml0KToKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxHdGsuY3BwOiBSZW1vdmVkLiBNZXJnZWQg
aW50byBUZXN0U2hlbGxYMTEuY3BwCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvY2hyb21pdW0v
VGVzdFNoZWxsTGludXguY3BwOiBSZW1vdmVkLiBTcGxpdCBpbnRvIFRlc3RTaGVsbFBvc2l4LmNw
cCBhbmQgVGVzdFNoZWxsWDExLmNwcC4KKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGxQb3NpeC5jcHA6IFNwbGl0IGZyb20gVGVzdFNoZWxsTGludXguY3BwLCBjb250
YWluaW5nIHRoZSB0aW1lb3V0IGhhbmRsaW5nIHBhcnQsIGNvbXBpbGVkIHdoZW4gb3NfcG9zaXg9
MSAoZXhjbHVkaW5nIG1hYykuCisgICAgICAgIChBbGFybUhhbmRsZXIpOgorICAgICAgICAoVGVz
dFNoZWxsOjp3YWl0VGVzdEZpbmlzaGVkKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9jaHJv
bWl1bS9UZXN0U2hlbGxYMTEuY3BwOiBTcGxpdCBmcm9tIFRlc3RTaGVsbExpbnV4LmNwcCwgY29u
dGFpbmluZyB0aGUgZm9udGNvbmZpZyBwYXJ0LCBjb21waWxlZCB3aGVuIHVzZV94MTE9MQorICAg
ICAgICAob3BlblN0YXJ0dXBEaWFsb2cpOiBmcm9tIFRlc3RTaGVsbEd0ay5jcHAKKyAgICAgICAg
KGNoZWNrTGF5b3V0VGVzdFN5c3RlbURlcGVuZGVuY2llcyk6IGZyb20gVGVzdFNoZWxsR3RrLmNw
cC4KKyAgICAgICAgKHNldHVwRm9udGNvbmZpZyk6CisgICAgICAgIChwbGF0Zm9ybUluaXQpOgor
CiAyMDEyLTA1LTIyICBYaWFuemh1IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgW0Nocm9taXVtLUFuZHJvaWRdIFJ1biBEdW1wUmVuZGVyVHJlZSBhcyBhbiBhcGsg
KHB5dGhvbiBwYXJ0KQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJlbmRlclRyZWUu
Z3lwaQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5n
eXBpCShyZXZpc2lvbiAxMTgwODkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVy
VHJlZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxMSArMzQsMTIgQEAKICAgICAgICAgICAg
ICdjaHJvbWl1bS9UZXN0TmF2aWdhdGlvbkNvbnRyb2xsZXIuaCcsCiAgICAgICAgICAgICAnY2hy
b21pdW0vVGVzdFNoZWxsLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsLmgn
LAotICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4LmNwcCcsCi0gICAgICAgICAg
ICAnY2hyb21pdW0vVGVzdFNoZWxsR3RrLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVz
dFNoZWxsQW5kcm9pZC5jcHAnLAogICAgICAgICAgICAgJ2Nocm9taXVtL1Rlc3RTaGVsbE1hYy5t
bScsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3BwJywKICAgICAgICAg
ICAgICdjaHJvbWl1bS9UZXN0U2hlbGxTdHViLmNwcCcsCiAgICAgICAgICAgICAnY2hyb21pdW0v
VGVzdFNoZWxsV2luLmNwcCcsCisgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFNoZWxsWDExLmNw
cCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGVzdFdlYlBsdWdpbi5jcHAnLAogICAgICAgICAg
ICAgJ2Nocm9taXVtL1Rlc3RXZWJQbHVnaW4uaCcsCiAgICAgICAgICAgICAnY2hyb21pdW0vVGV4
dElucHV0Q29udHJvbGxlci5jcHAnLApJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvRHVtcFJl
bmRlclRyZWUuZ3lwL0R1bXBSZW5kZXJUcmVlLmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1w
UmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVtcFJlbmRlclRyZWUuZ3lwCShyZXZpc2lv
biAxMTgwODkpCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9EdW1wUmVuZGVyVHJlZS5neXAvRHVt
cFJlbmRlclRyZWUuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC03OCwxMSArNzgsMTQgQEAKICAgICAg
ICAgICAgICd0eXBlJzogJ2V4ZWN1dGFibGUnLAogICAgICAgICAgICAgJ21hY19idW5kbGUnOiAx
LAogICAgICAgICAgICAgJ2RlcGVuZGVuY2llcyc6IFsKKyAgICAgICAgICAgICAgICAnSW1hZ2VE
aWZmJywKKyAgICAgICAgICAgICAgICAnY29weV9UZXN0TmV0c2NhcGVQbHVnSW4nLAogICAgICAg
ICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwOmluc3Bl
Y3Rvcl9yZXNvdXJjZXMnLAogICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwOndlYmtpdCcsCiAgICAgICAgICAgICAgICAgJzwoc291cmNlX2Rp
cikvV1RGL1dURi5neXAvV1RGLmd5cDp3dGYnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL2J1aWxkL3RlbXBfZ3lwL2dvb2dsZXVybC5neXA6Z29vZ2xldXJsJywKICAgICAg
ICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90aGlyZF9wYXJ0eS9pY3UvaWN1Lmd5cDpp
Y3V1YycsCisgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkv
bWVzYS9tZXNhLmd5cDpvc21lc2EnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19k
aXIpL3Y4L3Rvb2xzL2d5cC92OC5neXA6djgnLAogICAgICAgICAgICAgICAgICc8KGNocm9taXVt
X3NyY19kaXIpL2Jhc2UvYmFzZS5neXA6dGVzdF9zdXBwb3J0X2Jhc2UnLAogICAgICAgICAgICAg
ICAgICc8KGNocm9taXVtX3NyY19kaXIpL3dlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0Lmd5
cDpibG9iJywKQEAgLTExNyw3ICsxMjAsNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgJzwo
Y2hyb21pdW1fc3JjX2RpcikvdGhpcmRfcGFydHkvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLmd5cDps
aWJFR0wnLAogICAgICAgICAgICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGhp
cmRfcGFydHkvYW5nbGUvc3JjL2J1aWxkX2FuZ2xlLmd5cDpsaWJHTEVTdjInLAogICAgICAgICAg
ICAgICAgICAgICBdLAotCiAgICAgICAgICAgICAgICAgICAgICdyZXNvdXJjZV9pbmNsdWRlX2Rp
cnMnOiBbJzwoU0hBUkVEX0lOVEVSTUVESUFURV9ESVIpL3dlYmtpdCddLAogICAgICAgICAgICAg
ICAgICAgICAnc291cmNlcyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICc8KFNIQVJFRF9J
TlRFUk1FRElBVEVfRElSKS9uZXQvbmV0X3Jlc291cmNlcy5yYycsCkBAIC0xOTQsNiArMTk2LDEx
IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnTWFjXFwuY3BwJCddLAog
ICAgICAgICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAgICAg
ICAgIFsnb3NfcG9zaXghPTEgb3IgT1M9PSJtYWMiJywgeworICAgICAgICAgICAgICAgICAgICAn
c291cmNlcy8nOiBbCisgICAgICAgICAgICAgICAgICAgICAgICBbJ2V4Y2x1ZGUnLCAnUG9zaXhc
XC5jcHAkJ10sCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgfV0sCiAg
ICAgICAgICAgICAgICAgWyd1c2VfeDExID09IDEnLCB7CiAgICAgICAgICAgICAgICAgICAgICdk
ZXBlbmRlbmNpZXMnOiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNf
ZGlyKS9idWlsZC9saW51eC9zeXN0ZW0uZ3lwOmZvbnRjb25maWcnLApAQCAtMjE5LDcgKzIyNiw3
IEBACiAgICAgICAgICAgICAgICAgICAgIF0sCiAgICAgICAgICAgICAgICAgfSx7ICMgdXNlX3gx
MSAhPSAxCiAgICAgICAgICAgICAgICAgICAgICdzb3VyY2VzLyc6IFsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFsnZXhjbHVkZScsICdMaW51eFxcLmNwcCQnXQorICAgICAgICAgICAgICAgICAg
ICAgICAgWydleGNsdWRlJywgJ1gxMVxcLmNwcCQnXSwKICAgICAgICAgICAgICAgICAgICAgXQog
ICAgICAgICAgICAgICAgIH1dLAogICAgICAgICAgICAgICAgIFsndG9vbGtpdF91c2VzX2d0ayA9
PSAxJywgewpAQCAtMjMyLDI3ICsyMzksMzEgQEAKICAgICAgICAgICAgICAgICAgICAgJ2luY2x1
ZGVfZGlycyc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICc8KHNvdXJjZV9kaXIpL1dlYktp
dC9jaHJvbWl1bS9wdWJsaWMvZ3RrJywKICAgICAgICAgICAgICAgICAgICAgXSwKLSAgICAgICAg
ICAgICAgICB9LHsgIyB0b29sa2l0X3VzZXNfZ3RrICE9IDEKLSAgICAgICAgICAgICAgICAgICAg
J3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAgICAgICAgICAgWydleGNsdWRlJywgJ0d0a1xc
LmNwcCQnXQotICAgICAgICAgICAgICAgICAgICBdCiAgICAgICAgICAgICAgICAgfV0sCiAgICAg
ICAgICAgICAgICAgWydPUz09ImFuZHJvaWQiJywgeworICAgICAgICAgICAgICAgICAgICAndHlw
ZSc6ICdzaGFyZWRfbGlicmFyeScsCiAgICAgICAgICAgICAgICAgICAgICdkZXBlbmRlbmNpZXMn
OiBbCiAgICAgICAgICAgICAgICAgICAgICAgICAnSW1hZ2VEaWZmI2hvc3QnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvYmFzZS9iYXNlLmd5cDp0ZXN0X3N1
cHBvcnRfYmFzZScsCisgICAgICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGly
KS90b29scy9hbmRyb2lkL2ZvcndhcmRlci9mb3J3YXJkZXIuZ3lwOmZvcndhcmRlcicsCisgICAg
ICAgICAgICAgICAgICAgICAgICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJvaWQv
bmF0aXZlX3Rlc3QuZ3lwOm5hdGl2ZV90ZXN0X25hdGl2ZV9jb2RlJywKICAgICAgICAgICAgICAg
ICAgICAgXSwKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAg
ICAgICAgICAgICAgWydpbmNsdWRlJywgJ2Nocm9taXVtL1Rlc3RTaGVsbExpbnV4XFwuY3BwJCdd
LAotICAgICAgICAgICAgICAgICAgICBdLAotICAgICAgICAgICAgICAgIH0seyAjIE9TIT0iYW5k
cm9pZCIKLSAgICAgICAgICAgICAgICAgICAgJ3NvdXJjZXMvJzogWwotICAgICAgICAgICAgICAg
ICAgICAgICAgWydleGNsdWRlJywgJyhBbmRyb2lkKVxcLmNwcCQnXQotICAgICAgICAgICAgICAg
ICAgICBdLAotICAgICAgICAgICAgICAgICAgICAnZGVwZW5kZW5jaWVzJzogWworICAgICAgICAg
ICAgICAgICAgICAnZGVwZW5kZW5jaWVzISc6IFsKICAgICAgICAgICAgICAgICAgICAgICAgICdJ
bWFnZURpZmYnLAogICAgICAgICAgICAgICAgICAgICAgICAgJ2NvcHlfVGVzdE5ldHNjYXBlUGx1
Z0luJywKICAgICAgICAgICAgICAgICAgICAgICAgICc8KGNocm9taXVtX3NyY19kaXIpL3RoaXJk
X3BhcnR5L21lc2EvbWVzYS5neXA6b3NtZXNhJywKICAgICAgICAgICAgICAgICAgICAgXSwKKyAg
ICAgICAgICAgICAgICAgICAgJ2NvcGllcyc6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICAn
ZGVzdGluYXRpb24nOiAnPChQUk9EVUNUX0RJUiknLAorICAgICAgICAgICAgICAgICAgICAgICAg
J2ZpbGVzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KGFoZW1fcGF0aCknLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICc8KElOVEVSTUVESUFURV9ESVIpL3JlcGFjay9E
dW1wUmVuZGVyVHJlZS5wYWsnLAorICAgICAgICAgICAgICAgICAgICAgICAgXQorICAgICAgICAg
ICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAgICB9LCB7ICMgT1MhPSJhbmRyb2lkIgorICAg
ICAgICAgICAgICAgICAgICAnc291cmNlcy8nOiBbCisgICAgICAgICAgICAgICAgICAgICAgICBb
J2V4Y2x1ZGUnLCAnQW5kcm9pZFxcLmNwcCQnXSwKKyAgICAgICAgICAgICAgICAgICAgXSwKICAg
ICAgICAgICAgICAgICB9XSwKICAgICAgICAgICAgICAgICBbJ2luc2lkZV9jaHJvbWl1bV9idWls
ZD09MSBhbmQgY29tcG9uZW50PT0ic2hhcmVkX2xpYnJhcnkiJywgewogICAgICAgICAgICAgICAg
ICAgICAnc291cmNlcyc6IFsKQEAgLTM5MCw1ICs0MDEsNDMgQEAKICAgICAgICAgICAgICAgICAn
Y2ZsYWdzX2NjJzogWyctV25vLWMrKzB4LWNvbXBhdCddLAogICAgICAgICAgICAgfSwKICAgICAg
ICAgfV0sCisgICAgICAgIFsnT1M9PSJhbmRyb2lkIicsIHsKKyAgICAgICAgICAgICMgV3JhcCBs
aWJEdW1wUmVuZGVyVHJlZS5zbyBpbnRvIGFuIGFuZHJvaWQgYXBrIGZvciBleGVjdXRpb24uCisg
ICAgICAgICAgICAjIFNlZSA8KGNocm9taXVtX3NyY19kaXIpL2Jhc2UvYmFzZS5neXAgZm9yIFRP
RE8oanJnKXMgYWJvdXQgdGhpcyBzdHJhdGVneS4KKyAgICAgICAgICAgICd0YXJnZXRzJzogW3sK
KyAgICAgICAgICAgICAgICAndGFyZ2V0X25hbWUnOiAnRHVtcFJlbmRlclRyZWVfYXBrJywKKyAg
ICAgICAgICAgICAgICAndHlwZSc6ICdub25lJywKKyAgICAgICAgICAgICAgICAnZGVwZW5kZW5j
aWVzJzogWworICAgICAgICAgICAgICAgICAgICAnRHVtcFJlbmRlclRyZWUnLAorICAgICAgICAg
ICAgICAgIF0sCisgICAgICAgICAgICAgICAgJ2FjdGlvbnMnOiBbeworICAgICAgICAgICAgICAg
ICAgICAjIEdlbmVyYXRlIGFwayBmaWxlcyAoaW5jbHVkaW5nIHNvdXJjZSBhbmQgYW50ZmlsZSkg
ZnJvbQorICAgICAgICAgICAgICAgICAgICAjIGEgdGVtcGxhdGUsIGFuZCBidWlsZHMgdGhlbS4K
KyAgICAgICAgICAgICAgICAgICAgJ2FjdGlvbl9uYW1lJzogJ2dlbmVyYXRlX2FuZF9idWlsZCcs
CisgICAgICAgICAgICAgICAgICAgICdpbnB1dHMnOiBbCisgICAgICAgICAgICAgICAgICAgICAg
ICAnPChjaHJvbWl1bV9zcmNfZGlyKS90ZXN0aW5nL2FuZHJvaWQvZ2VuZXJhdGVfbmF0aXZlX3Rl
c3QucHknLAorICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL2xpYi50YXJn
ZXQvbGliRHVtcFJlbmRlclRyZWUuc28nLAorICAgICAgICAgICAgICAgICAgICAgICAgIyBGSVhN
RTogQnVpbGQgdGhlIGphciBmb3IgbmF0aXZlIHRlc3RzIHdpdGggU0RLLgorICAgICAgICAgICAg
ICAgICAgICAgICAgIyBGb3Igbm93IHdlIGFyZSB1c2luZyBBbmRyb2lkLm1rIHRvIGJ1aWxkIHRo
ZSBhcGsuCisgICAgICAgICAgICAgICAgICAgIF0sCisgICAgICAgICAgICAgICAgICAgICdvdXRw
dXRzJzogWworICAgICAgICAgICAgICAgICAgICAgICAgJzwoUFJPRFVDVF9ESVIpL0R1bXBSZW5k
ZXJUcmVlX2Fway9DaHJvbWVOYXRpdmVUZXN0cy1kZWJ1Zy5hcGsnLAorICAgICAgICAgICAgICAg
ICAgICBdLAorICAgICAgICAgICAgICAgICAgICAnYWN0aW9uJzogWworICAgICAgICAgICAgICAg
ICAgICAgICAgJzwoY2hyb21pdW1fc3JjX2RpcikvdGVzdGluZy9hbmRyb2lkL2dlbmVyYXRlX25h
dGl2ZV90ZXN0LnB5JywKKyAgICAgICAgICAgICAgICAgICAgICAgICctLW5hdGl2ZV9saWJyYXJ5
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICc8KFBST0RVQ1RfRElSKS9saWIudGFyZ2V0L2xp
YkR1bXBSZW5kZXJUcmVlLnNvJywKKyAgICAgICAgICAgICAgICAgICAgICAgICMgRklYTUU6IEJ1
aWxkIHRoZSBqYXIgZm9yIG5hdGl2ZSB0ZXN0cyB3aXRoIFNESy4KKyAgICAgICAgICAgICAgICAg
ICAgICAgICMgJy0tamFyJywKKyAgICAgICAgICAgICAgICAgICAgICAgICMgJ2Zvby9iYXIuamFy
JywKKyAgICAgICAgICAgICAgICAgICAgICAgICctLW91dHB1dCcsCisgICAgICAgICAgICAgICAg
ICAgICAgICAnPChQUk9EVUNUX0RJUikvRHVtcFJlbmRlclRyZWVfYXBrJywKKyAgICAgICAgICAg
ICAgICAgICAgICAgICctLWFudC1hcmdzJywKKyAgICAgICAgICAgICAgICAgICAgICAgICctRFBS
T0RVQ1RfRElSPTwoUFJPRFVDVF9ESVIpJywKKyAgICAgICAgICAgICAgICAgICAgICAgICctLWFu
dC1jb21waWxlJworICAgICAgICAgICAgICAgICAgICBdLAorICAgICAgICAgICAgICAgIH1dLAor
ICAgICAgICAgICAgfV0sCisgICAgICAgIH1dLAogICAgIF0sICMgY29uZGl0aW9ucwogfQpJbmRl
eDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9pZC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsQW5kcm9p
ZC5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0
U2hlbGxBbmRyb2lkLmNwcAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwxMzAgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlzdHJp
YnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhl
IG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICog
IkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCisKKyNpbmNsdWRlIDxhbmRyb2lkL2xv
Zy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxz
dGRpby5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Cisj
aW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNw
YWNlIHsKKworY29uc3QgY2hhciBvcHRpb25JbkZJRk9bXSA9ICItLWluLWZpZm89IjsKK2NvbnN0
IGNoYXIgb3B0aW9uT3V0RklGT1tdID0gIi0tb3V0LWZpZm89IjsKK2NvbnN0IGNoYXIgb3B0aW9u
RXJyRmlsZVtdID0gIi0tZXJyLWZpbGU9IjsKKwordm9pZCBhbmRyb2lkTG9nRXJyb3IoY29uc3Qg
Y2hhciogZm9ybWF0LCAuLi4pIFdURl9BVFRSSUJVVEVfUFJJTlRGKDEsIDIpOworCit2b2lkIGFu
ZHJvaWRMb2dFcnJvcihjb25zdCBjaGFyKiBmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFy
Z3M7CisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICBfX2FuZHJvaWRfbG9nX3Zwcmlu
dChBTkRST0lEX0xPR19FUlJPUiwgIkR1bXBSZW5kZXJUcmVlIiwgZm9ybWF0LCBhcmdzKTsKKyAg
ICB2YV9lbmQoYXJncyk7Cit9CisKK3ZvaWQgcmVtb3ZlQXJnKGludCBpbmRleCwgaW50KiBhcmdj
LCBjaGFyKioqIGFyZ3YpCit7CisgICAgZm9yIChpbnQgaSA9IGluZGV4OyBpIDwgKmFyZ2M7ICsr
aSkKKyAgICAgICAgKCphcmd2KVtpXSA9ICgqYXJndilbaSArIDFdOworICAgIC0tKmFyZ2M7Cit9
CisKK3ZvaWQgY3JlYXRlRklGTyhjb25zdCBjaGFyKiBmaWZvUGF0aCkKK3sKKyAgICB1bmxpbmso
Zmlmb1BhdGgpOworICAgIGlmIChta2ZpZm8oZmlmb1BhdGgsIDA2MDApKSB7CisgICAgICAgIGFu
ZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBmaWZvICVzOiAlc1xuIiwgZmlmb1BhdGgs
IHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJVF9GQUlMVVJFKTsKKyAgICB9Cit9
CisKK3ZvaWQgY3JlYXRlRmlsZShjb25zdCBjaGFyKiBmaWxlUGF0aCkKK3sKKyAgICB1bmxpbmso
ZmlsZVBhdGgpOworICAgIGludCBmZCA9IGNyZWF0KGZpbGVQYXRoLCAwNjAwKTsKKyAgICBpZiAo
ZmQgPCAwKSB7CisgICAgICAgIGFuZHJvaWRMb2dFcnJvcigiRmFpbGVkIHRvIGNyZWF0ZSBmaWxl
ICVzOiAlc1xuIiwgZmlsZVBhdGgsIHN0cmVycm9yKGVycm5vKSk7CisgICAgICAgIGV4aXQoRVhJ
VF9GQUlMVVJFKTsKKyAgICB9CisgICAgY2xvc2UoZmQpOworfQorCit2b2lkIHJlZGlyZWN0VG9G
aWxlKEZJTEUqIHN0cmVhbSwgY29uc3QgY2hhciogcGF0aCwgY29uc3QgY2hhciogbW9kZSkKK3sK
KyAgICBpZiAoIWZyZW9wZW4ocGF0aCwgbW9kZSwgc3RyZWFtKSkgeworICAgICAgICBhbmRyb2lk
TG9nRXJyb3IoIkZhaWxlZCB0byByZWRpcmVjdCBzdHJlYW0gdG8gZmlsZTogJXM6ICVzXG4iLCBw
YXRoLCBzdHJlcnJvcihlcnJubykpOworICAgICAgICBleGl0KEVYSVRfRkFJTFVSRSk7CisgICAg
fQorfQorCit9IC8vIG5hbWVzcGFjZQorCit2b2lkIHBsYXRmb3JtSW5pdChpbnQqIGFyZ2MsIGNo
YXIqKiogYXJndikKK3sKKyAgICBjb25zdCBjaGFyKiBpbkZJRk8gPSAwOworICAgIGNvbnN0IGNo
YXIqIG91dEZJRk8gPSAwOworICAgIGNvbnN0IGNoYXIqIGVyckZpbGUgPSAwOworICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgKmFyZ2M7ICkgeworICAgICAgICBjb25zdCBjaGFyKiBhcmd1bWVudCA9
ICgqYXJndilbaV07CisgICAgICAgIGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbkluRklGTykg
PT0gYXJndW1lbnQpIHsKKyAgICAgICAgICAgIGluRklGTyA9IGFyZ3VtZW50ICsgV1RGX0FSUkFZ
X0xFTkdUSChvcHRpb25JbkZJRk8pIC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZJRk8oaW5GSUZP
KTsKKyAgICAgICAgICAgIHJlbW92ZUFyZyhpLCBhcmdjLCBhcmd2KTsKKyAgICAgICAgfSBlbHNl
IGlmIChzdHJzdHIoYXJndW1lbnQsIG9wdGlvbk91dEZJRk8pID09IGFyZ3VtZW50KSB7CisgICAg
ICAgICAgICBvdXRGSUZPID0gYXJndW1lbnQgKyBXVEZfQVJSQVlfTEVOR1RIKG9wdGlvbk91dEZJ
Rk8pIC0gMTsKKyAgICAgICAgICAgIGNyZWF0ZUZJRk8ob3V0RklGTyk7CisgICAgICAgICAgICBy
ZW1vdmVBcmcoaSwgYXJnYywgYXJndik7CisgICAgICAgIH0gZWxzZSBpZiAoc3Ryc3RyKGFyZ3Vt
ZW50LCBvcHRpb25FcnJGaWxlKSA9PSBhcmd1bWVudCkgeworICAgICAgICAgICAgZXJyRmlsZSA9
IGFyZ3VtZW50ICsgV1RGX0FSUkFZX0xFTkdUSChvcHRpb25FcnJGaWxlKSAtIDE7CisgICAgICAg
ICAgICBjcmVhdGVGaWxlKGVyckZpbGUpOworICAgICAgICAgICAgcmVtb3ZlQXJnKGksIGFyZ2Ms
IGFyZ3YpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICsraTsKKyAgICB9CisKKyAgICAv
LyBUaGUgb3JkZXIgb2YgY3JlYXRlRklGTygpIGFuZCByZWRpcmVjdFRvRklGTygpIGlzIGltcG9y
dGFudCB0byBhdm9pZCBkZWFkbG9jay4KKyAgICBpZiAob3V0RklGTykKKyAgICAgICAgcmVkaXJl
Y3RUb0ZpbGUoc3Rkb3V0LCBvdXRGSUZPLCAidyIpOworICAgIGlmIChpbkZJRk8pCisgICAgICAg
IHJlZGlyZWN0VG9GaWxlKHN0ZGluLCBpbkZJRk8sICJyIik7CisgICAgaWYgKGVyckZpbGUpCisg
ICAgICAgIHJlZGlyZWN0VG9GaWxlKHN0ZGVyciwgZXJyRmlsZSwgInciKTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gUmVkaXJlY3Qgc3RkZXJyIHRvIHN0ZG91dC4KKyAgICAgICAgZHVwMigxLCAy
KTsKKyAgICB9Cit9CgpQcm9wZXJ0eSBjaGFuZ2VzIG9uOiBUb29scy9EdW1wUmVuZGVyVHJlZS9j
aHJvbWl1bS9UZXN0U2hlbGxBbmRyb2lkLmNwcApfX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkFkZGVkOiBzdm46ZW9sLXN0
eWxlCiAgICsgTEYKCkluZGV4OiBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGxHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rl
c3RTaGVsbEd0ay5jcHAJKHJldmlzaW9uIDExODA4OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVl
L2Nocm9taXVtL1Rlc3RTaGVsbEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
Ci0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJ
bmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJ
QlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICog
T1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJUZXN0U2hlbGwuaCIKLQotI2luY2x1ZGUg
IndlYmtpdC9zdXBwb3J0L3dlYmtpdF9zdXBwb3J0LmgiCi0jaW5jbHVkZSA8Zm9udGNvbmZpZy9m
b250Y29uZmlnLmg+Ci0jaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2luY2x1ZGUgPHNpZ25hbC5oPgot
Ci0KLXZvaWQgb3BlblN0YXJ0dXBEaWFsb2coKQotewotICAgIEd0a1dpZGdldCogZGlhbG9nID0g
Z3RrX21lc3NhZ2VfZGlhbG9nX25ldygKLSAgICAgICAgMCwgR1RLX0RJQUxPR19NT0RBTCwgR1RL
X01FU1NBR0VfSU5GTywgR1RLX0JVVFRPTlNfT0ssICJBdHRhY2ggdG8gbWU/Iik7Ci0gICAgZ3Rr
X3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCAiRHVtcFJlbmRlclRyZWUiKTsK
LSAgICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOyAvLyBSdW5zIGEgbmVzdGVk
IG1lc3NhZ2UgbG9vcC4KLSAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKLX0KLQotYm9v
bCBjaGVja0xheW91dFRlc3RTeXN0ZW1EZXBlbmRlbmNpZXMoKQotewotICAgIHJldHVybiB0cnVl
OwotfQpJbmRleDogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsTGludXgu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVs
bExpbnV4LmNwcAkocmV2aXNpb24gMTE4MDg5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hy
b21pdW0vVGVzdFNoZWxsTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDIyMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6Ci0gKgotICog
ICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKLSAqIGluIHRo
ZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUK
LSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIElu
Yy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
Ci0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIlRlc3RTaGVsbC5oIgotCi0jaW5jbHVkZSAi
U2tUeXBlZmFjZS5oIgotI2luY2x1ZGUgIldlYlZpZXcuaCIKLSNpbmNsdWRlICJ3ZWJraXQvc3Vw
cG9ydC93ZWJraXRfc3VwcG9ydC5oIgotCi0jaWYgIU9TKEFORFJPSUQpCi0jaW5jbHVkZSA8Zm9u
dGNvbmZpZy9mb250Y29uZmlnLmg+Ci0jZW5kaWYKLQotI2lmIFVTRShHVEspCi0jaW5jbHVkZSA8
Z3RrL2d0ay5oPgotI2VuZGlmCi0jaW5jbHVkZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8dW5pc3Rk
Lmg+Ci0KLXN0YXRpYyB2b2lkIEFsYXJtSGFuZGxlcihpbnQpCi17Ci0gICAgLy8gSWYgdGhlIGFs
YXJtIGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJlYWxseSBiYWQg
aGFuZy4KLSAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7Ci0gICAgcHV0cygiI0VPRlxu
Iik7Ci0gICAgZmZsdXNoKHN0ZG91dCk7Ci0gICAgZXhpdCgwKTsKLX0KLQotdm9pZCBUZXN0U2hl
bGw6OndhaXRUZXN0RmluaXNoZWQoKQotewotICAgIEFTU0VSVCghbV90ZXN0SXNQZW5kaW5nKTsK
LSAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8gSW5zdGFsbCBhbiBhbGFybSBz
aWduYWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KLSAgICBzdHJ1
Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0aW9uOwotICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRsZXIgPSBB
bGFybUhhbmRsZXI7Ci0gICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2spOwotICAg
IGFsYXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKLQotICAgIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0
aW9uOwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rpb24pOwot
ICAgIGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOwotCi0gICAg
Ly8gVGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFrIHRoaXMg
bG9vcCB3aGVuIHRoZSBwYWdlCi0gICAgLy8gZmluaXNoZXMgbG9hZGluZy4KLSAgICB3aGlsZSAo
bV90ZXN0SXNQZW5kaW5nKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3Ao
KTsKLQotICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCi0gICAgYWxhcm0oMCk7Ci0gICAgc2lnYWN0
aW9uKFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOwotfQotCi0jaWYgIU9TKEFORFJPSUQpCi1zdGF0
aWMgYm9vbCBjaGVja0FuZExvYWRGb250RmlsZShGY0NvbmZpZyogZm9udGNmZywgY29uc3QgY2hh
ciogcGF0aDEsIGNvbnN0IGNoYXIqIHBhdGgyKQotewotICAgIGNvbnN0IGNoYXIqIGZvbnQgPSBw
YXRoMTsKLSAgICBpZiAoYWNjZXNzKGZvbnQsIFJfT0spIDwgMCkgewotICAgICAgICBmb250ID0g
cGF0aDI7Ci0gICAgICAgIGlmIChhY2Nlc3MoZm9udCwgUl9PSykgPCAwKSB7Ci0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcyBvciAlcy4gV2l0aG91dCB0aGlz
LCBzb21lIGxheW91dCB0ZXN0cyBtYXkgZmFpbC4gIgotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJTZWUgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9wL2Nocm9taXVtL3dpa2kvTGF5b3V0VGVz
dHNMaW51eCAiCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgImZvciBtb3JlLlxuIiwgcGF0
aDEsIHBhdGgyKTsKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAoIUZjQ29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgKEZjQ2hhcjggKikgZm9u
dCkpIHsKLSAgICAgICAgZnByaW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4i
LCBmb250KTsKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotc3RhdGljIHZvaWQgc2V0dXBGb250Y29uZmlnKCkKLXsKLSAgICAvLyBXZSB3aXNoIHRv
IG1ha2UgdGhlIGxheW91dCB0ZXN0cyByZXByb2R1Y2FibGUgd2l0aCByZXNwZWN0IHRvIGZvbnRz
LiBTa2lhCi0gICAgLy8gdXNlcyBmb250Y29uZmlnIHRvIHJlc29sdmUgZm9udCBmYW1pbHkgbmFt
ZXMgZnJvbSBXZWJLaXQgaW50byBhY3R1YWwgZm9udAotICAgIC8vIGZpbGVzIGZvdW5kIG9uIHRo
ZSBjdXJyZW50IHN5c3RlbS4gVGhpcyBtZWFucyB0aGF0IGZvbnRzIHZhcnkgYmFzZWQgb24gdGhl
Ci0gICAgLy8gc3lzdGVtIGFuZCBhbHNvIG9uIHRoZSBmb250Y29uZmlnIGNvbmZpZ3VyYXRpb24u
Ci0gICAgLy8KLSAgICAvLyBUbyBhdm9pZCB0aGlzIHdlIGluaXRpYWxpc2UgZm9udGNvbmZpZyBo
ZXJlIGFuZCBpbnN0YWxsIGEgY29uZmlndXJhdGlvbgotICAgIC8vIHdoaWNoIG9ubHkga25vd3Mg
YWJvdXQgYSBmZXcsIHNlbGVjdCwgZm9udHMuCi0KLSAgICAvLyBXZSBoYXZlIGZvbnRjb25maWcg
cGFyc2UgYSBjb25maWcgZmlsZSBmcm9tIG91ciByZXNvdXJjZXMgZmlsZS4gVGhpcwotICAgIC8v
IHNldHMgYSBudW1iZXIgb2YgYWxpYXNlcyAoInNhbnMiLT4iQXJpYWwiIGV0YyksIGJ1dCBkb2Vz
bid0IGluY2x1ZGUgYW55Ci0gICAgLy8gZm9udCBkaXJlY3Rvcmllcy4KLSAgICBGY0luaXQoKTsK
LQotICAgIGNoYXIgZHJ0UGF0aFtQQVRIX01BWCArIDFdOwotICAgIGludCBkcnRQYXRoU2l6ZSA9
IHJlYWRsaW5rKCIvcHJvYy9zZWxmL2V4ZSIsIGRydFBhdGgsIFBBVEhfTUFYKTsKLSAgICBpZiAo
ZHJ0UGF0aFNpemUgPCAwIHx8IGRydFBhdGhTaXplID4gUEFUSF9NQVgpIHsKLSAgICAgICAgZnB1
dHMoIlVuYWJsZSB0byByZXNvbHZlIC9wcm9jL3NlbGYvZXhlLiIsIHN0ZGVycik7Ci0gICAgICAg
IGV4aXQoMSk7Ci0gICAgfQotICAgIGRydFBhdGhbZHJ0UGF0aFNpemVdID0gMDsKLSAgICBzdGQ6
OnN0cmluZyBkcnREaXJQYXRoKGRydFBhdGgpOwotICAgIHNpemVfdCBsYXN0UGF0aFBvcyA9IGRy
dERpclBhdGgucmZpbmQoIi8iKTsKLSAgICBBU1NFUlQobGFzdFBhdGhQb3MgIT0gc3RkOjpzdHJp
bmc6Om5wb3MpOwotICAgIGRydERpclBhdGguZXJhc2UobGFzdFBhdGhQb3MgKyAxKTsKLQotICAg
IEZjQ29uZmlnKiBmb250Y2ZnID0gRmNDb25maWdDcmVhdGUoKTsKLSAgICBzdGQ6OnN0cmluZyBm
b250Y29uZmlnUGF0aCA9IGRydERpclBhdGggKyAiZm9udHMuY29uZiI7Ci0gICAgaWYgKCFGY0Nv
bmZpZ1BhcnNlQW5kTG9hZChmb250Y2ZnLCByZWludGVycHJldF9jYXN0PGNvbnN0IEZjQ2hhcjgq
Pihmb250Y29uZmlnUGF0aC5jX3N0cigpKSwgdHJ1ZSkpIHsKLSAgICAgICAgZnB1dHMoIkZhaWxl
ZCB0byBwYXJzZSBmb250Y29uZmlnIGNvbmZpZyBmaWxlXG4iLCBzdGRlcnIpOwotICAgICAgICBl
eGl0KDEpOwotICAgIH0KLQotICAgIC8vIFRoaXMgaXMgdGhlIGxpc3Qgb2YgZm9udHMgdGhhdCBm
b250Y29uZmlnIHdpbGwga25vdyBhYm91dC4gSXQKLSAgICAvLyB3aWxsIHRyeSBpdHMgYmVzdCB0
byBtYXRjaCBiYXNlZCBvbmx5IG9uIHRoZSBmb250cyBoZXJlIGluLiBUaGUKLSAgICAvLyBwYXRo
cyBhcmUgd2hlcmUgdGhlc2UgZm9udHMgYXJlIGZvdW5kIG9uIG91ciBVYnVudHUgYm94ZXMuCi0g
ICAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGZvbnRzW10gPSB7Ci0gICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL2tvY2hpL2tvY2hpLWdvdGhpYy50dGYiLAotICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS9rb2NoaS9rb2NoaS1taW5jaG8udHRmIiwKLSAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbC50dGYiLAotICAg
ICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0JvbGQu
dHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9B
cmlhbF9Cb2xkX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlw
ZS9tc3R0Y29yZWZvbnRzL0FyaWFsX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvbWljX1NhbnNfTVMudHRmIiwKLSAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db21pY19TYW5zX01TX0Jv
bGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250
cy9Db3VyaWVyX05ldy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0NvdXJpZXJfTmV3X0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19Cb2xkX0l0YWxpYy50dGYi
LAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0NvdXJp
ZXJfTmV3X0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9t
c3R0Y29yZWZvbnRzL0dlb3JnaWEudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGQudHRmIiwKLSAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhX0JvbGRfSXRhbGljLnR0ZiIs
Ci0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2Vvcmdp
YV9JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNv
cmVmb250cy9JbXBhY3QudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
bXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9u
dHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfQm9sZC50dGYiLAotICAgICAg
ICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19C
b2xkX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0
Y29yZWZvbnRzL1RyZWJ1Y2hldF9NU19JdGFsaWMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW4udHRmIiwKLSAgICAg
ICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9t
YW5fQm9sZC50dGYiLAotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29y
ZWZvbnRzL1RpbWVzX05ld19Sb21hbl9Cb2xkX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vzci9z
aGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1RpbWVzX05ld19Sb21hbl9JdGFsaWMu
dHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9W
ZXJkYW5hLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3Jl
Zm9udHMvVmVyZGFuYV9Cb2xkLnR0ZiIsCi0gICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYV9Cb2xkX0l0YWxpYy50dGYiLAotICAgICAgICAiL3Vz
ci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfSXRhbGljLnR0ZiIs
Ci0gICAgICAgIC8vIFRoZSBEZWphVnVTYW5zIGZvbnQgaXMgdXNlZCBieSB0aGUgY3NzMi4xIHRl
c3RzLgotICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtZGVqYXZ1L0RlamFW
dVNhbnMudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGlj
LWZvbnRzLWNvcmUvbG9oaXRfaGkudHRmIiwKLSAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvbG9oaXRfdGEudHRmIiwKLSAgICAgICAgIi91c3Iv
c2hhcmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWluZGljLWZvbnRzLWNvcmUvTXVrdGlOYXJyb3cudHRm
IiwKLSAgICB9OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgYXJyYXlzaXplKGZvbnRzKTsg
KytpKSB7Ci0gICAgICAgIGlmIChhY2Nlc3MoZm9udHNbaV0sIFJfT0spKSB7Ci0gICAgICAgICAg
ICBmcHJpbnRmKHN0ZGVyciwgIllvdSBhcmUgbWlzc2luZyAlcy4gVHJ5IHJlLXJ1bm5pbmcgYnVp
bGQvaW5zdGFsbC1idWlsZC1kZXBzLnNoLiBBbHNvIHNlZSAiCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgImh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xheW91dFRl
c3RzTGludXgiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvbnRzW2ldKTsKLSAgICAg
ICAgICAgIGV4aXQoMSk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRB
ZGRGaWxlKGZvbnRjZmcsIChGY0NoYXI4ICopIGZvbnRzW2ldKSkgewotICAgICAgICAgICAgZnBy
aW50ZihzdGRlcnIsICJGYWlsZWQgdG8gbG9hZCBmb250ICVzXG4iLCBmb250c1tpXSk7Ci0gICAg
ICAgICAgICBleGl0KDEpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFjaGVja0FuZExv
YWRGb250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90aGFpL0dhcnVk
YS50dGYiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvdGx3Zy9HYXJ1ZGEudHRmIikpCi0gICAgICAgIGV4aXQoMSk7Ci0KLSAgICAvLyBX
ZSBzcGVjaWFsIGNhc2UgdGhlc2UgZm9udHMgYmVjYXVzZSB0aGV5J3JlIG9ubHkgbmVlZGVkIGlu
IGEKLSAgICAvLyBmZXcgbGF5b3V0IHRlc3RzLgotICAgIGNoZWNrQW5kTG9hZEZvbnRGaWxlKGZv
bnRjZmcsICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL2xv
aGl0X3BhLnR0ZiIsIAotICAgICAgICAgICAgICAgICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRz
L3RydWV0eXBlL3R0Zi1wdW5qYWJpLWZvbnRzL2xvaGl0X3BhLnR0ZiIpOwotCi0gICAgLy8gQWxz
byBsb2FkIHRoZSBsYXlvdXQtdGVzdC1zcGVjaWZpYyAiQWhlbSIgZm9udC4KLSAgICBzdGQ6OnN0
cmluZyBhaGVtUGF0aCA9IGRydERpclBhdGggKyAiQUhFTV9fX18uVFRGIjsKLSAgICBpZiAoIUZj
Q29uZmlnQXBwRm9udEFkZEZpbGUoZm9udGNmZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0No
YXI4Kj4oYWhlbVBhdGguY19zdHIoKSkpKSB7Ci0gICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFp
bGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgYWhlbVBhdGguY19zdHIoKSk7Ci0gICAgICAgIGV4aXQo
MSk7Ci0gICAgfQotCi0gICAgaWYgKCFGY0NvbmZpZ1NldEN1cnJlbnQoZm9udGNmZykpIHsKLSAg
ICAgICAgZnB1dHMoIkZhaWxlZCB0byBzZXQgdGhlIGRlZmF1bHQgZm9udCBjb25maWd1cmF0aW9u
XG4iLCBzdGRlcnIpOwotICAgICAgICBleGl0KDEpOwotICAgIH0KLX0KLSNlbmRpZiAvLyAhT1Mo
QU5EUk9JRCkKLQotdm9pZCBwbGF0Zm9ybUluaXQoaW50KiBhcmdjLCBjaGFyKioqIGFyZ3YpCi17
Ci0gICAgLy8gRklYTUU6IEl0J3MgYmV0dGVyIGNhbGwgZ3RrX2luaXQoKSBvbmx5IHdoZW4gd2Ug
cnVuIHBsdWdpbiB0ZXN0cy4KLSAgICAvLyBTZWUgaHR0cDovL2dyb3Vwcy5nb29nbGUuY29tL2Ev
Y2hyb21pdW0ub3JnL2dyb3VwL2Nocm9taXVtLWRldi9icm93c2VfdGhyZWFkL3RocmVhZC82MzNl
YTE2N2NkZTE5NmNhIwotI2lmIFVTRShHVEspCi0gICAgZ3RrX2luaXQoYXJnYywgYXJndik7Ci0j
ZW5kaWYKLQotI2lmICFPUyhBTkRST0lEKQotICAgIHNldHVwRm9udGNvbmZpZygpOwotI2VuZGlm
Ci19Ci0KSW5kZXg6IFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFBvc2l4
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hl
bGxQb3NpeC5jcHAJKHJldmlzaW9uIDApCisrKyBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1
bS9UZXN0U2hlbGxQb3NpeC5jcHAJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAqIG1ldDoKKyAqCisgKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgorICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogZGlz
dHJpYnV0aW9uLgorICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cworICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVGVzdFNoZWxsLmgiCisKKyNpbmNsdWRlICJ3ZWJraXQv
c3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVk
ZSA8dW5pc3RkLmg+CisKK3N0YXRpYyB2b2lkIEFsYXJtSGFuZGxlcihpbnQpCit7CisgICAgLy8g
SWYgdGhlIGFsYXJtIGFsYXJtZWQsIGtpbGwgdGhlIHByb2Nlc3Mgc2luY2Ugd2UgaGF2ZSBhIHJl
YWxseSBiYWQgaGFuZy4KKyAgICBwdXRzKCJcbiNURVNUX1RJTUVEX09VVFxuIik7CisgICAgcHV0
cygiI0VPRlxuIik7CisgICAgZmZsdXNoKHN0ZG91dCk7CisgICAgZXhpdCgwKTsKK30KKwordm9p
ZCBUZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQoKQoreworICAgIEFTU0VSVCghbV90ZXN0SXNQ
ZW5kaW5nKTsKKyAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOworCisgICAgLy8gSW5zdGFsbCBh
biBhbGFybSBzaWduYWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4K
KyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0aW9uOworICAgIGFsYXJtQWN0aW9uLnNhX2hh
bmRsZXIgPSBBbGFybUhhbmRsZXI7CisgICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21h
c2spOworICAgIGFsYXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKKworICAgIHN0cnVjdCBzaWdhY3Rp
b24gb2xkQWN0aW9uOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRB
Y3Rpb24pOworICAgIGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDAp
OworCisgICAgLy8gVGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJy
ZWFrIHRoaXMgbG9vcCB3aGVuIHRoZSBwYWdlCisgICAgLy8gZmluaXNoZXMgbG9hZGluZy4KKyAg
ICB3aGlsZSAobV90ZXN0SXNQZW5kaW5nKQorICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVz
c2FnZUxvb3AoKTsKKworICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCisgICAgYWxhcm0oMCk7Cisg
ICAgc2lnYWN0aW9uKFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOworfQoKUHJvcGVydHkgY2hhbmdl
cyBvbjogVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsUG9zaXguY3BwCl9f
X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f
X19fX19fX18KQWRkZWQ6IHN2bjplb2wtc3R5bGUKICAgKyBMRgoKSW5kZXg6IFRvb2xzL0R1bXBS
ZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gVG9vbHMv
RHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNwcAkocmV2aXNpb24gMTE4MDg5
KQkoZnJvbSBUb29scy9EdW1wUmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxMaW51eC5jcHA6
MTE4MDg5KQorKysgVG9vbHMvRHVtcFJlbmRlclRyZWUvY2hyb21pdW0vVGVzdFNoZWxsWDExLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIyMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxMSBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAg
ICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRz
CisgKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQgZnJvbQorICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBB
TlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICog
TElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJUZXN0U2hlbGwuaCIKKworI2luY2x1ZGUgIlNrVHlwZWZhY2UuaCIKKyNpbmNsdWRl
ICJXZWJWaWV3LmgiCisjaW5jbHVkZSAid2Via2l0L3N1cHBvcnQvd2Via2l0X3N1cHBvcnQuaCIK
KworI2lmICFPUyhBTkRST0lEKQorI2luY2x1ZGUgPGZvbnRjb25maWcvZm9udGNvbmZpZy5oPgor
I2VuZGlmCisKKyNpZiBVU0UoR1RLKQorI2luY2x1ZGUgPGd0ay9ndGsuaD4KKyNlbmRpZgorI2lu
Y2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgdm9pZCBBbGFy
bUhhbmRsZXIoaW50KQoreworICAgIC8vIElmIHRoZSBhbGFybSBhbGFybWVkLCBraWxsIHRoZSBw
cm9jZXNzIHNpbmNlIHdlIGhhdmUgYSByZWFsbHkgYmFkIGhhbmcuCisgICAgcHV0cygiXG4jVEVT
VF9USU1FRF9PVVRcbiIpOworICAgIHB1dHMoIiNFT0ZcbiIpOworICAgIGZmbHVzaChzdGRvdXQp
OworICAgIGV4aXQoMCk7Cit9CisKK3ZvaWQgVGVzdFNoZWxsOjp3YWl0VGVzdEZpbmlzaGVkKCkK
K3sKKyAgICBBU1NFUlQoIW1fdGVzdElzUGVuZGluZyk7CisgICAgbV90ZXN0SXNQZW5kaW5nID0g
dHJ1ZTsKKworICAgIC8vIEluc3RhbGwgYW4gYWxhcm0gc2lnbmFsIGhhbmRsZXIgdGhhdCB3aWxs
IGtpbGwgdXMgaWYgd2UgdGltZSBvdXQuCisgICAgc3RydWN0IHNpZ2FjdGlvbiBhbGFybUFjdGlv
bjsKKyAgICBhbGFybUFjdGlvbi5zYV9oYW5kbGVyID0gQWxhcm1IYW5kbGVyOworICAgIHNpZ2Vt
cHR5c2V0KCZhbGFybUFjdGlvbi5zYV9tYXNrKTsKKyAgICBhbGFybUFjdGlvbi5zYV9mbGFncyA9
IDA7CisKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uIG9sZEFjdGlvbjsKKyAgICBzaWdhY3Rpb24oU0lH
QUxSTSwgJmFsYXJtQWN0aW9uLCAmb2xkQWN0aW9uKTsKKyAgICBhbGFybShsYXlvdXRUZXN0VGlt
ZW91dEZvcldhdGNoRG9nKCkgLyAxMDAwKTsKKworICAgIC8vIFRlc3RGaW5pc2hlZCgpIHdpbGwg
cG9zdCBhIHF1aXQgbWVzc2FnZSB0byBicmVhayB0aGlzIGxvb3Agd2hlbiB0aGUgcGFnZQorICAg
IC8vIGZpbmlzaGVzIGxvYWRpbmcuCisgICAgd2hpbGUgKG1fdGVzdElzUGVuZGluZykKKyAgICAg
ICAgd2Via2l0X3N1cHBvcnQ6OlJ1bk1lc3NhZ2VMb29wKCk7CisKKyAgICAvLyBSZW1vdmUgdGhl
IGFsYXJtLgorICAgIGFsYXJtKDApOworICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmb2xkQWN0aW9u
LCAwKTsKK30KKworI2lmICFPUyhBTkRST0lEKQorc3RhdGljIGJvb2wgY2hlY2tBbmRMb2FkRm9u
dEZpbGUoRmNDb25maWcqIGZvbnRjZmcsIGNvbnN0IGNoYXIqIHBhdGgxLCBjb25zdCBjaGFyKiBw
YXRoMikKK3sKKyAgICBjb25zdCBjaGFyKiBmb250ID0gcGF0aDE7CisgICAgaWYgKGFjY2Vzcyhm
b250LCBSX09LKSA8IDApIHsKKyAgICAgICAgZm9udCA9IHBhdGgyOworICAgICAgICBpZiAoYWNj
ZXNzKGZvbnQsIFJfT0spIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3Ug
YXJlIG1pc3NpbmcgJXMgb3IgJXMuIFdpdGhvdXQgdGhpcywgc29tZSBsYXlvdXQgdGVzdHMgbWF5
IGZhaWwuICIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU2VlIGh0dHA6Ly9jb2RlLmdv
b2dsZS5jb20vcC9jaHJvbWl1bS93aWtpL0xheW91dFRlc3RzTGludXggIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICJmb3IgbW9yZS5cbiIsIHBhdGgxLCBwYXRoMik7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKCFGY0NvbmZpZ0FwcEZv
bnRBZGRGaWxlKGZvbnRjZmcsIChGY0NoYXI4ICopIGZvbnQpKSB7CisgICAgICAgIGZwcmludGYo
c3RkZXJyLCAiRmFpbGVkIHRvIGxvYWQgZm9udCAlc1xuIiwgZm9udCk7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVw
Rm9udGNvbmZpZygpCit7CisgICAgLy8gV2Ugd2lzaCB0byBtYWtlIHRoZSBsYXlvdXQgdGVzdHMg
cmVwcm9kdWNhYmxlIHdpdGggcmVzcGVjdCB0byBmb250cy4gU2tpYQorICAgIC8vIHVzZXMgZm9u
dGNvbmZpZyB0byByZXNvbHZlIGZvbnQgZmFtaWx5IG5hbWVzIGZyb20gV2ViS2l0IGludG8gYWN0
dWFsIGZvbnQKKyAgICAvLyBmaWxlcyBmb3VuZCBvbiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoaXMg
bWVhbnMgdGhhdCBmb250cyB2YXJ5IGJhc2VkIG9uIHRoZQorICAgIC8vIHN5c3RlbSBhbmQgYWxz
byBvbiB0aGUgZm9udGNvbmZpZyBjb25maWd1cmF0aW9uLgorICAgIC8vCisgICAgLy8gVG8gYXZv
aWQgdGhpcyB3ZSBpbml0aWFsaXNlIGZvbnRjb25maWcgaGVyZSBhbmQgaW5zdGFsbCBhIGNvbmZp
Z3VyYXRpb24KKyAgICAvLyB3aGljaCBvbmx5IGtub3dzIGFib3V0IGEgZmV3LCBzZWxlY3QsIGZv
bnRzLgorCisgICAgLy8gV2UgaGF2ZSBmb250Y29uZmlnIHBhcnNlIGEgY29uZmlnIGZpbGUgZnJv
bSBvdXIgcmVzb3VyY2VzIGZpbGUuIFRoaXMKKyAgICAvLyBzZXRzIGEgbnVtYmVyIG9mIGFsaWFz
ZXMgKCJzYW5zIi0+IkFyaWFsIiBldGMpLCBidXQgZG9lc24ndCBpbmNsdWRlIGFueQorICAgIC8v
IGZvbnQgZGlyZWN0b3JpZXMuCisgICAgRmNJbml0KCk7CisKKyAgICBjaGFyIGRydFBhdGhbUEFU
SF9NQVggKyAxXTsKKyAgICBpbnQgZHJ0UGF0aFNpemUgPSByZWFkbGluaygiL3Byb2Mvc2VsZi9l
eGUiLCBkcnRQYXRoLCBQQVRIX01BWCk7CisgICAgaWYgKGRydFBhdGhTaXplIDwgMCB8fCBkcnRQ
YXRoU2l6ZSA+IFBBVEhfTUFYKSB7CisgICAgICAgIGZwdXRzKCJVbmFibGUgdG8gcmVzb2x2ZSAv
cHJvYy9zZWxmL2V4ZS4iLCBzdGRlcnIpOworICAgICAgICBleGl0KDEpOworICAgIH0KKyAgICBk
cnRQYXRoW2RydFBhdGhTaXplXSA9IDA7CisgICAgc3RkOjpzdHJpbmcgZHJ0RGlyUGF0aChkcnRQ
YXRoKTsKKyAgICBzaXplX3QgbGFzdFBhdGhQb3MgPSBkcnREaXJQYXRoLnJmaW5kKCIvIik7Cisg
ICAgQVNTRVJUKGxhc3RQYXRoUG9zICE9IHN0ZDo6c3RyaW5nOjpucG9zKTsKKyAgICBkcnREaXJQ
YXRoLmVyYXNlKGxhc3RQYXRoUG9zICsgMSk7CisKKyAgICBGY0NvbmZpZyogZm9udGNmZyA9IEZj
Q29uZmlnQ3JlYXRlKCk7CisgICAgc3RkOjpzdHJpbmcgZm9udGNvbmZpZ1BhdGggPSBkcnREaXJQ
YXRoICsgImZvbnRzLmNvbmYiOworICAgIGlmICghRmNDb25maWdQYXJzZUFuZExvYWQoZm9udGNm
ZywgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBGY0NoYXI4Kj4oZm9udGNvbmZpZ1BhdGguY19zdHIo
KSksIHRydWUpKSB7CisgICAgICAgIGZwdXRzKCJGYWlsZWQgdG8gcGFyc2UgZm9udGNvbmZpZyBj
b25maWcgZmlsZVxuIiwgc3RkZXJyKTsKKyAgICAgICAgZXhpdCgxKTsKKyAgICB9CisKKyAgICAv
LyBUaGlzIGlzIHRoZSBsaXN0IG9mIGZvbnRzIHRoYXQgZm9udGNvbmZpZyB3aWxsIGtub3cgYWJv
dXQuIEl0CisgICAgLy8gd2lsbCB0cnkgaXRzIGJlc3QgdG8gbWF0Y2ggYmFzZWQgb25seSBvbiB0
aGUgZm9udHMgaGVyZSBpbi4gVGhlCisgICAgLy8gcGF0aHMgYXJlIHdoZXJlIHRoZXNlIGZvbnRz
IGFyZSBmb3VuZCBvbiBvdXIgVWJ1bnR1IGJveGVzLgorICAgIHN0YXRpYyBjb25zdCBjaGFyICpj
b25zdCBmb250c1tdID0geworICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9rb2No
aS9rb2NoaS1nb3RoaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
a29jaGkva29jaGktbWluY2hvLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvQXJpYWwudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMv
dHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbF9Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQXJpYWxfQm9sZF9JdGFsaWMudHRmIiwK
KyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9BcmlhbF9J
dGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVm
b250cy9Db21pY19TYW5zX01TLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0
eXBlL21zdHRjb3JlZm9udHMvQ29taWNfU2Fuc19NU19Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNy
L3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvQ291cmllcl9OZXcudHRmIiwKKyAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05l
d19Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3Jl
Zm9udHMvQ291cmllcl9OZXdfQm9sZF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUv
Zm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9Db3VyaWVyX05ld19JdGFsaWMudHRmIiwKKyAg
ICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9HZW9yZ2lhLnR0
ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvR2Vv
cmdpYV9Cb2xkLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRj
b3JlZm9udHMvR2VvcmdpYV9Cb2xkX0l0YWxpYy50dGYiLAorICAgICAgICAiL3Vzci9zaGFyZS9m
b250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL0dlb3JnaWFfSXRhbGljLnR0ZiIsCisgICAgICAg
ICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvSW1wYWN0LnR0ZiIsCisg
ICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVHJlYnVjaGV0
X01TLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9u
dHMvVHJlYnVjaGV0X01TX0JvbGQudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1
ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNfQm9sZF9JdGFsaWMudHRmIiwKKyAgICAg
ICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UcmVidWNoZXRfTVNf
SXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3Jl
Zm9udHMvVGltZXNfTmV3X1JvbWFuLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3Ry
dWV0eXBlL21zdHRjb3JlZm9udHMvVGltZXNfTmV3X1JvbWFuX0JvbGQudHRmIiwKKyAgICAgICAg
Ii91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW5f
Qm9sZF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvbXN0
dGNvcmVmb250cy9UaW1lc19OZXdfUm9tYW5fSXRhbGljLnR0ZiIsCisgICAgICAgICIvdXNyL3No
YXJlL2ZvbnRzL3RydWV0eXBlL21zdHRjb3JlZm9udHMvVmVyZGFuYS50dGYiLAorICAgICAgICAi
L3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRhbmFfQm9sZC50dGYi
LAorICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS9tc3R0Y29yZWZvbnRzL1ZlcmRh
bmFfQm9sZF9JdGFsaWMudHRmIiwKKyAgICAgICAgIi91c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUv
bXN0dGNvcmVmb250cy9WZXJkYW5hX0l0YWxpYy50dGYiLAorICAgICAgICAvLyBUaGUgRGVqYVZ1
U2FucyBmb250IGlzIHVzZWQgYnkgdGhlIGNzczIuMSB0ZXN0cy4KKyAgICAgICAgIi91c3Ivc2hh
cmUvZm9udHMvdHJ1ZXR5cGUvdHRmLWRlamF2dS9EZWphVnVTYW5zLnR0ZiIsCisgICAgICAgICIv
dXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1jb3JlL2xvaGl0X2hpLnR0
ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0Zi1pbmRpYy1mb250cy1j
b3JlL2xvaGl0X3RhLnR0ZiIsCisgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3R0
Zi1pbmRpYy1mb250cy1jb3JlL011a3RpTmFycm93LnR0ZiIsCisgICAgfTsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFycmF5c2l6ZShmb250cyk7ICsraSkgeworICAgICAgICBpZiAoYWNj
ZXNzKGZvbnRzW2ldLCBSX09LKSkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJZb3Ug
YXJlIG1pc3NpbmcgJXMuIFRyeSByZS1ydW5uaW5nIGJ1aWxkL2luc3RhbGwtYnVpbGQtZGVwcy5z
aC4gQWxzbyBzZWUgIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodHRwOi8vY29kZS5n
b29nbGUuY29tL3AvY2hyb21pdW0vd2lraS9MYXlvdXRUZXN0c0xpbnV4IiwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb250c1tpXSk7CisgICAgICAgICAgICBleGl0KDEpOworICAgICAg
ICB9CisgICAgICAgIGlmICghRmNDb25maWdBcHBGb250QWRkRmlsZShmb250Y2ZnLCAoRmNDaGFy
OCAqKSBmb250c1tpXSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiRmFpbGVkIHRv
IGxvYWQgZm9udCAlc1xuIiwgZm9udHNbaV0pOworICAgICAgICAgICAgZXhpdCgxKTsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIGlmICghY2hlY2tBbmRMb2FkRm9udEZpbGUoZm9udGNmZywgIi91
c3Ivc2hhcmUvZm9udHMvdHJ1ZXR5cGUvdGhhaS9HYXJ1ZGEudHRmIiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICIvdXNyL3NoYXJlL2ZvbnRzL3RydWV0eXBlL3Rsd2cvR2FydWRhLnR0
ZiIpKQorICAgICAgICBleGl0KDEpOworCisgICAgLy8gV2Ugc3BlY2lhbCBjYXNlIHRoZXNlIGZv
bnRzIGJlY2F1c2UgdGhleSdyZSBvbmx5IG5lZWRlZCBpbiBhCisgICAgLy8gZmV3IGxheW91dCB0
ZXN0cy4KKyAgICBjaGVja0FuZExvYWRGb250RmlsZShmb250Y2ZnLCAiL3Vzci9zaGFyZS9mb250
cy90cnVldHlwZS90dGYtaW5kaWMtZm9udHMtY29yZS9sb2hpdF9wYS50dGYiLCAKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAiL3Vzci9zaGFyZS9mb250cy90cnVldHlwZS90dGYtcHVuamFiaS1m
b250cy9sb2hpdF9wYS50dGYiKTsKKworICAgIC8vIEFsc28gbG9hZCB0aGUgbGF5b3V0LXRlc3Qt
c3BlY2lmaWMgIkFoZW0iIGZvbnQuCisgICAgc3RkOjpzdHJpbmcgYWhlbVBhdGggPSBkcnREaXJQ
YXRoICsgIkFIRU1fX19fLlRURiI7CisgICAgaWYgKCFGY0NvbmZpZ0FwcEZvbnRBZGRGaWxlKGZv
bnRjZmcsIHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgRmNDaGFyOCo+KGFoZW1QYXRoLmNfc3RyKCkp
KSkgeworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkZhaWxlZCB0byBsb2FkIGZvbnQgJXNcbiIs
IGFoZW1QYXRoLmNfc3RyKCkpOworICAgICAgICBleGl0KDEpOworICAgIH0KKworICAgIGlmICgh
RmNDb25maWdTZXRDdXJyZW50KGZvbnRjZmcpKSB7CisgICAgICAgIGZwdXRzKCJGYWlsZWQgdG8g
c2V0IHRoZSBkZWZhdWx0IGZvbnQgY29uZmlndXJhdGlvblxuIiwgc3RkZXJyKTsKKyAgICAgICAg
ZXhpdCgxKTsKKyAgICB9Cit9CisjZW5kaWYgLy8gIU9TKEFORFJPSUQpCisKK3ZvaWQgcGxhdGZv
cm1Jbml0KGludCogYXJnYywgY2hhcioqKiBhcmd2KQoreworICAgIC8vIEZJWE1FOiBJdCdzIGJl
dHRlciBjYWxsIGd0a19pbml0KCkgb25seSB3aGVuIHdlIHJ1biBwbHVnaW4gdGVzdHMuCisgICAg
Ly8gU2VlIGh0dHA6Ly9ncm91cHMuZ29vZ2xlLmNvbS9hL2Nocm9taXVtLm9yZy9ncm91cC9jaHJv
bWl1bS1kZXYvYnJvd3NlX3RocmVhZC90aHJlYWQvNjMzZWExNjdjZGUxOTZjYSMKKyNpZiBVU0Uo
R1RLKQorICAgIGd0a19pbml0KGFyZ2MsIGFyZ3YpOworI2VuZGlmCisKKyNpZiAhT1MoQU5EUk9J
RCkKKyAgICBzZXR1cEZvbnRjb25maWcoKTsKKyNlbmRpZgorfQorCkluZGV4OiBUb29scy9EdW1w
UmVuZGVyVHJlZS9jaHJvbWl1bS9UZXN0U2hlbGxYMTEuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFRvb2xz
L0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAJKHJldmlzaW9uIDExODA4
OSkKKysrIFRvb2xzL0R1bXBSZW5kZXJUcmVlL2Nocm9taXVtL1Rlc3RTaGVsbFgxMS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDExIEdv
b2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgR29v
Z2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucyBhcmUKQEAgLTMxLDU1ICszMSwyNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlRlc3RTaGVsbC5oIgogCi0jaW5jbHVkZSAiU2tUeXBlZmFjZS5oIgotI2luY2x1ZGUgIldl
YlZpZXcuaCIKLSNpbmNsdWRlICJ3ZWJraXQvc3VwcG9ydC93ZWJraXRfc3VwcG9ydC5oIgotCi0j
aWYgIU9TKEFORFJPSUQpCiAjaW5jbHVkZSA8Zm9udGNvbmZpZy9mb250Y29uZmlnLmg+Ci0jZW5k
aWYKIAogI2lmIFVTRShHVEspCiAjaW5jbHVkZSA8Z3RrL2d0ay5oPgotI2VuZGlmCi0jaW5jbHVk
ZSA8c2lnbmFsLmg+Ci0jaW5jbHVkZSA8dW5pc3RkLmg+CiAKLXN0YXRpYyB2b2lkIEFsYXJtSGFu
ZGxlcihpbnQpCit2b2lkIG9wZW5TdGFydHVwRGlhbG9nKCkKIHsKLSAgICAvLyBJZiB0aGUgYWxh
cm0gYWxhcm1lZCwga2lsbCB0aGUgcHJvY2VzcyBzaW5jZSB3ZSBoYXZlIGEgcmVhbGx5IGJhZCBo
YW5nLgotICAgIHB1dHMoIlxuI1RFU1RfVElNRURfT1VUXG4iKTsKLSAgICBwdXRzKCIjRU9GXG4i
KTsKLSAgICBmZmx1c2goc3Rkb3V0KTsKLSAgICBleGl0KDApOworICAgIEd0a1dpZGdldCogZGlh
bG9nID0gZ3RrX21lc3NhZ2VfZGlhbG9nX25ldygKKyAgICAgICAgMCwgR1RLX0RJQUxPR19NT0RB
TCwgR1RLX01FU1NBR0VfSU5GTywgR1RLX0JVVFRPTlNfT0ssICJBdHRhY2ggdG8gbWU/Iik7Cisg
ICAgZ3RrX3dpbmRvd19zZXRfdGl0bGUoR1RLX1dJTkRPVyhkaWFsb2cpLCAiRHVtcFJlbmRlclRy
ZWUiKTsKKyAgICBndGtfZGlhbG9nX3J1bihHVEtfRElBTE9HKGRpYWxvZykpOyAvLyBSdW5zIGEg
bmVzdGVkIG1lc3NhZ2UgbG9vcC4KKyAgICBndGtfd2lkZ2V0X2Rlc3Ryb3koZGlhbG9nKTsKIH0K
IAotdm9pZCBUZXN0U2hlbGw6OndhaXRUZXN0RmluaXNoZWQoKQorYm9vbCBjaGVja0xheW91dFRl
c3RTeXN0ZW1EZXBlbmRlbmNpZXMoKQogewotICAgIEFTU0VSVCghbV90ZXN0SXNQZW5kaW5nKTsK
LSAgICBtX3Rlc3RJc1BlbmRpbmcgPSB0cnVlOwotCi0gICAgLy8gSW5zdGFsbCBhbiBhbGFybSBz
aWduYWwgaGFuZGxlciB0aGF0IHdpbGwga2lsbCB1cyBpZiB3ZSB0aW1lIG91dC4KLSAgICBzdHJ1
Y3Qgc2lnYWN0aW9uIGFsYXJtQWN0aW9uOwotICAgIGFsYXJtQWN0aW9uLnNhX2hhbmRsZXIgPSBB
bGFybUhhbmRsZXI7Ci0gICAgc2lnZW1wdHlzZXQoJmFsYXJtQWN0aW9uLnNhX21hc2spOwotICAg
IGFsYXJtQWN0aW9uLnNhX2ZsYWdzID0gMDsKLQotICAgIHN0cnVjdCBzaWdhY3Rpb24gb2xkQWN0
aW9uOwotICAgIHNpZ2FjdGlvbihTSUdBTFJNLCAmYWxhcm1BY3Rpb24sICZvbGRBY3Rpb24pOwot
ICAgIGFsYXJtKGxheW91dFRlc3RUaW1lb3V0Rm9yV2F0Y2hEb2coKSAvIDEwMDApOwotCi0gICAg
Ly8gVGVzdEZpbmlzaGVkKCkgd2lsbCBwb3N0IGEgcXVpdCBtZXNzYWdlIHRvIGJyZWFrIHRoaXMg
bG9vcCB3aGVuIHRoZSBwYWdlCi0gICAgLy8gZmluaXNoZXMgbG9hZGluZy4KLSAgICB3aGlsZSAo
bV90ZXN0SXNQZW5kaW5nKQotICAgICAgICB3ZWJraXRfc3VwcG9ydDo6UnVuTWVzc2FnZUxvb3Ao
KTsKLQotICAgIC8vIFJlbW92ZSB0aGUgYWxhcm0uCi0gICAgYWxhcm0oMCk7Ci0gICAgc2lnYWN0
aW9uKFNJR0FMUk0sICZvbGRBY3Rpb24sIDApOworICAgIHJldHVybiB0cnVlOwogfQorI2VuZGlm
IC8vIFVTRShHVEspCiAKLSNpZiAhT1MoQU5EUk9JRCkKIHN0YXRpYyBib29sIGNoZWNrQW5kTG9h
ZEZvbnRGaWxlKEZjQ29uZmlnKiBmb250Y2ZnLCBjb25zdCBjaGFyKiBwYXRoMSwgY29uc3QgY2hh
ciogcGF0aDIpCiB7CiAgICAgY29uc3QgY2hhciogZm9udCA9IHBhdGgxOwpAQCAtMjA2LDcgKzE3
Nyw2IEBAIHN0YXRpYyB2b2lkIHNldHVwRm9udGNvbmZpZygpCiAgICAgICAgIGV4aXQoMSk7CiAg
ICAgfQogfQotI2VuZGlmIC8vICFPUyhBTkRST0lEKQogCiB2b2lkIHBsYXRmb3JtSW5pdChpbnQq
IGFyZ2MsIGNoYXIqKiogYXJndikKIHsKQEAgLTIxNiw4ICsxODYsNSBAQCB2b2lkIHBsYXRmb3Jt
SW5pdChpbnQqIGFyZ2MsIGNoYXIqKiogYXJnCiAgICAgZ3RrX2luaXQoYXJnYywgYXJndik7CiAj
ZW5kaWYKIAotI2lmICFPUyhBTkRST0lEKQogICAgIHNldHVwRm9udGNvbmZpZygpOwotI2VuZGlm
CiB9Ci0K
</data>

          </attachment>
      

    </bug>

</bugzilla>