<?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>95812</bug_id>
          
          <creation_ts>2012-09-04 18:30:50 -0700</creation_ts>
          <short_desc>Add 8 bit string data path to TextRun</short_desc>
          <delta_ts>2014-02-12 15:02:27 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Text</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>128698</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>dglazkov</cc>
    
    <cc>eric</cc>
    
    <cc>esprehn</cc>
    
    <cc>gustavo</cc>
    
    <cc>inferno</cc>
    
    <cc>jochen</cc>
    
    <cc>noam</cc>
    
    <cc>peter+ews</cc>
    
    <cc>philn</cc>
    
    <cc>tonyg</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>711643</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-04 18:30:50 -0700</bug_when>
    <thetext>As part of adding an 8 bit path to the text rendering code, the TextRun class and code using it need to handle 8 bit strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712368</commentid>
    <comment_count>1</comment_count>
      <attachid>162296</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-05 11:38:39 -0700</bug_when>
    <thetext>Created attachment 162296
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712415</commentid>
    <comment_count>2</comment_count>
      <attachid>162296</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-09-05 12:23:53 -0700</bug_when>
    <thetext>Comment on attachment 162296
Patch

Attachment 162296 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13757692</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712418</commentid>
    <comment_count>3</comment_count>
      <attachid>162296</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-05 12:27:16 -0700</bug_when>
    <thetext>Comment on attachment 162296
Patch

Attachment 162296 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13770031</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712439</commentid>
    <comment_count>4</comment_count>
      <attachid>162296</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-05 12:51:50 -0700</bug_when>
    <thetext>Comment on attachment 162296
Patch

Attachment 162296 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13770035</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712448</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2012-09-05 13:00:26 -0700</bug_when>
    <thetext>Very exciting.

Isn&apos;t this a perf change?  Do we have perf data?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712466</commentid>
    <comment_count>6</comment_count>
      <attachid>162296</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-05 13:19:39 -0700</bug_when>
    <thetext>Comment on attachment 162296
Patch

Attachment 162296 did not pass qt-wk2-ews (qt):
Output: http://queues.webkit.org/results/13754933</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712510</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-05 13:57:35 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Very exciting.
&gt; 
&gt; Isn&apos;t this a perf change?  Do we have perf data?

I don&apos;t have data yet.  I expect that tho should have little impact as it is mostly renaming for the current 16 bit paths.  The TextRun::operator[] is the big concern.  If that is an issue, I&apos;ll refactor to separate 8 and 16 bit accessors methods.

I&apos;ll be running test and posting results.  In addition to the Layout tests, do you have others you&apos;d like to see?

Now to fix all of the platform specific code from EWS failures.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712589</commentid>
    <comment_count>8</comment_count>
      <attachid>162296</attachid>
    <who name="Peter Beverloo (cr-android ews)">peter+ews</who>
    <bug_when>2012-09-05 15:28:51 -0700</bug_when>
    <thetext>Comment on attachment 162296
Patch

Attachment 162296 did not pass cr-android-ews (chromium-android):
Output: http://queues.webkit.org/results/13755917</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>712829</commentid>
    <comment_count>9</comment_count>
      <attachid>162296</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-05 20:52:23 -0700</bug_when>
    <thetext>Comment on attachment 162296
Patch

Attachment 162296 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/13771163</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713332</commentid>
    <comment_count>10</comment_count>
      <attachid>162515</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-06 08:47:27 -0700</bug_when>
    <thetext>Created attachment 162515
Patch with fixes for failing platforms

Fixed the non-Mac platforms by changing the calls to characters() and data() to characters16() and data16() and by disallowing the creation of 8 bit text runs via compile switches.  These other platforms will have to make the appropriate changes after the patch lands.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713334</commentid>
    <comment_count>11</comment_count>
      <attachid>162516</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-06 08:50:31 -0700</bug_when>
    <thetext>Created attachment 162516
Performance results from last posted patch

Results of Performance/Layout tests before and after the latest patch.  Ran tests 8 times and averaged the results.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713335</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-09-06 08:51:22 -0700</bug_when>
    <thetext>Attachment 162515 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/platform/graphics/Font.cpp:269:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Total errors found: 1 in 17 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713341</commentid>
    <comment_count>13</comment_count>
      <attachid>162518</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-06 08:57:17 -0700</bug_when>
    <thetext>Created attachment 162518
Fixed indent style issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713349</commentid>
    <comment_count>14</comment_count>
      <attachid>162518</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-09-06 09:11:04 -0700</bug_when>
    <thetext>Comment on attachment 162518
Fixed indent style issue.

Attachment 162518 did not pass mac-ews (mac):
Output: http://queues.webkit.org/results/13772327</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713363</commentid>
    <comment_count>15</comment_count>
      <attachid>162518</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2012-09-06 09:25:59 -0700</bug_when>
    <thetext>Comment on attachment 162518
Fixed indent style issue.

Attachment 162518 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/13776314</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713382</commentid>
    <comment_count>16</comment_count>
      <attachid>162527</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-06 09:51:32 -0700</bug_when>
    <thetext>Created attachment 162527
Patch to fix truncation compile error

Reverted templated normalizeSpaces() in Font.h to UChar only as it isn&apos;t on fast path.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713748</commentid>
    <comment_count>17</comment_count>
      <attachid>162527</attachid>
    <who name="">mitz</who>
    <bug_when>2012-09-06 15:06:49 -0700</bug_when>
    <thetext>Comment on attachment 162527
Patch to fix truncation compile error

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

&gt; Source/WebCore/ChangeLog:11
&gt; +        been renamed and the creation of 8 bit tet runs has been disabled via compilation

Typo: tet.

&gt; Source/WebCore/ChangeLog:12
&gt; +        flags.  Someone knowledgible in those platforms will need to make corresponding changes

Typo: knowledgible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>713856</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-09-06 16:52:27 -0700</bug_when>
    <thetext>Committed r127801: &lt;http://trac.webkit.org/changeset/127801&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162296</attachid>
            <date>2012-09-05 11:38:39 -0700</date>
            <delta_ts>2012-09-06 08:47:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>95812.patch</filename>
            <type>text/plain</type>
            <size>20818</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzYwOSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU2IEBACisyMDEyLTA5LTA1ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCA4IGJpdCBzdHJpbmcg
ZGF0YSBwYXRoIHRvIFRleHRSdW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk1ODEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgOCBiaXQgc3RyaW5nIHBhdGggdG8gVGV4dFJ1bi4gIFJlZmFjdG9y
ZWQgVGV4dFJ1bjo6ZGF0YSgpIGFuZCA6OmNoYXJhY3RlcnMgaW50bworICAgICAgICA4IGFuZCAx
NiBiaXQgdmVyc2lvbnMuICBNYWRlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB1c2VycyBvZiBU
ZXh0UnVuLgorCisgICAgICAgIE5vIGNoYW5nZXMgdG8gZnVuY3Rpb25hbGl0eSAtIGJlaGF2aW9y
IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKToK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyk6CisgICAgICAgIChXZWJD
b3JlOjpGb250Ojpjb2RlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9Gb250Lmg6Cisg
ICAgICAgIChGb250KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmNoYXJhY3RlclJhbmdlQ29k
ZVBhdGgpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHA6CisgICAgICAgIChFeHBlY3RlZFRl
eHRSdW5TaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFRleHRSdW4pOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c3ViUnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW46Om9wZXJhdG9yW10pOgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6ZGF0YTgpOgorICAg
ICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6ZGF0YTE2KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW46OmNoYXJhY3RlcnM4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmNoYXJhY3RlcnMx
Nik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjppczhCaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJ1bjo6c2V0VGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpzZXRDaGFy
YWN0ZXJzTGVuZ3RoKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IpOgor
ICAgICAgICAoV2ViQ29yZTo6V2lkdGhJdGVyYXRvcjo6YWR2YW5jZSk6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4
dFJ1bnMpOgorICAgICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RH
bHlwaHNBbmRBZHZhbmNlcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBsZUZvbnRDb2Rl
UGF0aCk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpTVkdUZXh0TWV0cmljczo6U1ZHVGV4dE1ldHJpY3MpOgorICAgICAgICAq
IHJlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSZW5kZXJlcik6
CisgICAgICAgICogc3ZnL1NWR0ZvbnREYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNWR0Zv
bnREYXRhOjphcHBseVNWR0dseXBoU2VsZWN0aW9uKToKKwogMjAxMi0wOS0wMSAgRGlyayBTY2h1
bHplICA8a3JpdEB3ZWJraXQub3JnPgogCiAgICAgICAgIFVzZSAtd2Via2l0LWNsaXAtcGF0aCBz
aGFwZXMgdG8gY2xpcCBIVE1MIGVsZW1lbnRzCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9Gb250LmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0NCwxNyArMjQ0
LDI4IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbihjb25zdCBUZXh0UnUKICAgICByZXR1
cm4gb2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChydW4sIHgsIGluY2x1ZGVQYXJ0aWFs
R2x5cGhzKTsKIH0KIAotU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQordGVtcGxhdGUgPHR5cGVuYW1lIENoYXJhY3Rl
clR5cGU+CitzdGF0aWMgaW5saW5lIFN0cmluZyBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjb25z
dCBDaGFyYWN0ZXJUeXBlKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgU3Ry
aW5nQnVpbGRlciBub3JtYWxpemVkOwogICAgIG5vcm1hbGl6ZWQucmVzZXJ2ZUNhcGFjaXR5KGxl
bmd0aCk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCi0gICAg
ICAgIG5vcm1hbGl6ZWQuYXBwZW5kKG5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJzW2ldKSk7Cisg
ICAgICAgIG5vcm1hbGl6ZWQuYXBwZW5kKEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjaGFyYWN0ZXJz
W2ldKSk7CiAKICAgICByZXR1cm4gbm9ybWFsaXplZC50b1N0cmluZygpOwogfQogCitTdHJpbmcg
Rm9udDo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBs
ZW5ndGgpCit7CisgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0ludGVybmFsKGNoYXJhY3RlcnMs
IGxlbmd0aCk7Cit9CisKK1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3Bh
Y2VzSW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKwogc3RhdGljIGJvb2wgc2hvdWxk
VXNlRm9udFNtb290aGluZyA9IHRydWU7CiAKIHZvaWQgRm9udDo6c2V0U2hvdWxkVXNlU21vb3Ro
aW5nKGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKQpAQCAtMjk3LDggKzMwOCwxMSBAQCBGb250OjpD
b2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0CiAgICAgaWYgKCFydW4uY2hhcmFjdGVy
U2NhbkZvckNvZGVQYXRoKCkpCiAgICAgICAgIHJldHVybiBTaW1wbGU7CiAKKyAgICBpZiAocnVu
LmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gU2ltcGxlOworCiAgICAgLy8gU3RhcnQgZnJvbSAw
IHNpbmNlIGRyYXdpbmcgYW5kIGhpZ2hsaWdodGluZyBhbHNvIG1lYXN1cmUgdGhlIGNoYXJhY3Rl
cnMgYmVmb3JlIHJ1bi0+ZnJvbS4KLSAgICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChy
dW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIHJldHVybiBjaGFyYWN0ZXJSYW5n
ZUNvZGVQYXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKIH0KIAogRm9udDo6
Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgdW5zaWduZWQgbGVuKQpAQCAtNTU3LDYgKzU3MSwyOSBAQCBib29sIEZvbnQ6OmlzQ0pL
SWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgcmV0dXJuIGlzQ0pLSWRlb2dyYXBoKGMpOwog
fQogCit1bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IExDaGFy
KiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9v
bCYgaXNBZnRlckV4cGFuc2lvbikKK3sKKyAgICB1bnNpZ25lZCBjb3VudCA9IDA7CisgICAgaWYg
KGRpcmVjdGlvbiA9PSBMVFIpIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBsZW5n
dGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2ldKSkg
eworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFu
c2lvbiA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpc0FmdGVy
RXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3Ig
KHNpemVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7CisgICAgICAgICAgICBpZiAodHJlYXRB
c1NwYWNlKGNoYXJhY3RlcnNbaSAtIDFdKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7Cisg
ICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCiB1bnNpZ25lZCBGb250OjpleHBhbnNpb25P
cHBvcnR1bml0eUNvdW50KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBU
ZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKIHsKICAgICBz
dGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2FuRXhwYW5kQXJvdW5kSWRlb2dy
YXBoc0luQ29tcGxleFRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9Gb250LmgJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYgKzE4Myw3IEBAIHB1YmxpYzoK
ICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMyKTsKICAgICBzdGF0aWMgYm9v
bCBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIpOwogCisgICAgc3RhdGljIHVuc2lnbmVk
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgTENoYXIqLCBzaXplX3QgbGVuZ3RoLCBU
ZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICBzdGF0aWMgdW5zaWdu
ZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBVQ2hhciosIHNpemVfdCBsZW5ndGgs
IFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pOwogCiAjaWYgUExBVEZPUk0o
UVQpCkBAIC0xOTUsNiArMTk2LDcgQEAgcHVibGljOgogCiAgICAgZW51bSBDb2RlUGF0aCB7IEF1
dG8sIFNpbXBsZSwgQ29tcGxleCwgU2ltcGxlV2l0aEdseXBoT3ZlcmZsb3cgfTsKICAgICBDb2Rl
UGF0aCBjb2RlUGF0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7CisgICAgc3RhdGljIENvZGVQYXRo
IGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1bnNpZ25lZCkgeyByZXR1cm4g
U2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29u
c3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogICAgIAogcHJpdmF0ZToKQEAgLTI1Niw2ICsyNTgs
NyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjaGFyYWN0ZXI7CiAgICAgfQogCisgICAgc3Rh
dGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqLCB1bnNpZ25lZCBsZW5ndGgp
OwogICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IFVDaGFyKiwgdW5zaWdu
ZWQgbGVuZ3RoKTsKIAogICAgIGJvb2wgbmVlZHNUcmFuc2NvZGluZygpIGNvbnN0IHsgcmV0dXJu
IG1fbmVlZHNUcmFuc2NvZGluZzsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MTMsOCArNDEzLDcgQEAgdm9pZCBHcmFwaGljc0NvbnRleHQ6OmRy
YXdCaWRpVGV4dChjb25zdAogICAgIEZsb2F0UG9pbnQgY3VyclBvaW50ID0gcG9pbnQ7CiAgICAg
QmlkaUNoYXJhY3RlclJ1biogYmlkaVJ1biA9IGJpZGlSdW5zLmZpcnN0UnVuKCk7CiAgICAgd2hp
bGUgKGJpZGlSdW4pIHsKLSAgICAgICAgVGV4dFJ1biBzdWJydW4gPSBydW47Ci0gICAgICAgIHN1
YnJ1bi5zZXRUZXh0KHJ1bi5kYXRhKGJpZGlSdW4tPnN0YXJ0KCkpLCBiaWRpUnVuLT5zdG9wKCkg
LSBiaWRpUnVuLT5zdGFydCgpKTsKKyAgICAgICAgVGV4dFJ1biBzdWJydW4gPSBydW4uc3ViUnVu
KGJpZGlSdW4tPnN0YXJ0KCksIGJpZGlSdW4tPnN0b3AoKSAtIGJpZGlSdW4tPnN0YXJ0KCkpOwog
ICAgICAgICBib29sIGlzUlRMID0gYmlkaVJ1bi0+bGV2ZWwoKSAlIDI7CiAgICAgICAgIHN1YnJ1
bi5zZXREaXJlY3Rpb24oaXNSVEwgPyBSVEwgOiBMVFIpOwogICAgICAgICBzdWJydW4uc2V0RGly
ZWN0aW9uYWxPdmVycmlkZShiaWRpUnVuLT5kaXJPdmVycmlkZShmYWxzZSkpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAJKHJldmlzaW9uIDEy
NzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHN0cnVjdCBFeHBlY3RlZFRleHRSdW5TaXpl
IHsKICAgICBmbG9hdCBmbG9hdDI7CiAjZW5kaWYKICAgICBmbG9hdCBmbG9hdDM7Ci0gICAgdWlu
dDMyX3QgYml0ZmllbGRzIDogOTsKKyAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAxMDsKICAgICB1
bnNpZ25lZCBhblVuc2lnbmVkOwogICAgIFJlZlB0cjxUZXh0UnVuOjpSZW5kZXJpbmdDb250ZXh0
PiByZW5kZXJpbmdDb250ZXh0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTgsOSArNTgsOCBA
QCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIHVuc2lnbmVkIFJvdW5kaW5nSGFja3M7CiAKLSAgICBU
ZXh0UnVuKGNvbnN0IFVDaGFyKiBjLCBpbnQgbGVuLCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhw
YW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBBbGxvd1Ry
YWlsaW5nRXhwYW5zaW9uIHwgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dERpcmVjdGlvbiBk
aXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNo
YXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWUsIFJvdW5kaW5nSGFja3Mgcm91bmRpbmdIYWNr
cyA9IFJ1blJvdW5kaW5nIHwgV29yZFJvdW5kaW5nKQotICAgICAgICA6IG1fY2hhcmFjdGVycyhj
KQotICAgICAgICAsIG1fY2hhcmFjdGVyc0xlbmd0aChsZW4pCisgICAgVGV4dFJ1bihjb25zdCBM
Q2hhciogYywgdW5zaWduZWQgbGVuLCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0g
MCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBBbGxvd1RyYWlsaW5nRXhw
YW5zaW9uIHwgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24g
PSBMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNj
YW5Gb3JDb2RlUGF0aCA9IHRydWUsIFJvdW5kaW5nSGFja3Mgcm91bmRpbmdIYWNrcyA9IFJ1blJv
dW5kaW5nIHwgV29yZFJvdW5kaW5nKQorICAgICAgICA6IG1fY2hhcmFjdGVyc0xlbmd0aChsZW4p
CiAgICAgICAgICwgbV9sZW4obGVuKQogICAgICAgICAsIG1feHBvcyh4cG9zKQogI2lmIEVOQUJM
RShTVkcpCkBAIC02OCw2ICs2Nyw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAsIG1fZXhw
YW5zaW9uKGV4cGFuc2lvbikKICAgICAgICAgLCBtX2V4cGFuc2lvbkJlaGF2aW9yKGV4cGFuc2lv
bkJlaGF2aW9yKQorICAgICAgICAsIG1faXM4Qml0KHRydWUpCiAgICAgICAgICwgbV9hbGxvd1Rh
YnMoZmFsc2UpCiAgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgICAgICAsIG1f
ZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rpb25hbE92ZXJyaWRlKQpAQCAtNzcsMTEgKzc3LDMz
IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Rpc2FibGVTcGFjaW5nKGZhbHNlKQogICAgICAgICAs
IG1fdGFiU2l6ZSgwKQogICAgIHsKKyAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnM4ID0gYzsKICAg
ICB9CiAKKyAgICBUZXh0UnVuKGNvbnN0IFVDaGFyKiBjLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhw
b3MgPSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25C
ZWhhdmlvciA9IEFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBGb3JiaWRMZWFkaW5nRXhwYW5zaW9u
LCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRl
ID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSwgUm91bmRpbmdI
YWNrcyByb3VuZGluZ0hhY2tzID0gUnVuUm91bmRpbmcgfCBXb3JkUm91bmRpbmcpCisgICAgICAg
IDogbV9jaGFyYWN0ZXJzTGVuZ3RoKGxlbikKKyAgICAgICAgLCBtX2xlbihsZW4pCisgICAgICAg
ICwgbV94cG9zKHhwb3MpCisjaWYgRU5BQkxFKFNWRykKKyAgICAgICAgLCBtX2hvcml6b250YWxH
bHlwaFN0cmV0Y2goMSkKKyNlbmRpZgorICAgICAgICAsIG1fZXhwYW5zaW9uKGV4cGFuc2lvbikK
KyAgICAgICAgLCBtX2V4cGFuc2lvbkJlaGF2aW9yKGV4cGFuc2lvbkJlaGF2aW9yKQorICAgICAg
ICAsIG1faXM4Qml0KGZhbHNlKQorICAgICAgICAsIG1fYWxsb3dUYWJzKGZhbHNlKQorICAgICAg
ICAsIG1fZGlyZWN0aW9uKGRpcmVjdGlvbikKKyAgICAgICAgLCBtX2RpcmVjdGlvbmFsT3ZlcnJp
ZGUoZGlyZWN0aW9uYWxPdmVycmlkZSkKKyAgICAgICAgLCBtX2NoYXJhY3RlclNjYW5Gb3JDb2Rl
UGF0aChjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgpCisgICAgICAgICwgbV9hcHBseVJ1blJvdW5k
aW5nKChyb3VuZGluZ0hhY2tzICYgUnVuUm91bmRpbmcpICYmIHNfYWxsb3dzUm91bmRpbmdIYWNr
cykKKyAgICAgICAgLCBtX2FwcGx5V29yZFJvdW5kaW5nKChyb3VuZGluZ0hhY2tzICYgV29yZFJv
dW5kaW5nKSAmJiBzX2FsbG93c1JvdW5kaW5nSGFja3MpCisgICAgICAgICwgbV9kaXNhYmxlU3Bh
Y2luZyhmYWxzZSkKKyAgICAgICAgLCBtX3RhYlNpemUoMCkKKyAgICB7CisgICAgICAgIG1fZGF0
YS5jaGFyYWN0ZXJzMTYgPSBjOworICAgIH0KKyAgICAKICAgICBUZXh0UnVuKGNvbnN0IFN0cmlu
ZyYgcywgZmxvYXQgeHBvcyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJlaGF2
aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gQWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IEZvcmJpZExl
YWRpbmdFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSLCBib29sIGRpcmVj
dGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0
cnVlLCBSb3VuZGluZ0hhY2tzIHJvdW5kaW5nSGFja3MgPSBSdW5Sb3VuZGluZyB8IFdvcmRSb3Vu
ZGluZykKLSAgICAgICAgOiBtX2NoYXJhY3RlcnMocy5jaGFyYWN0ZXJzKCkpCi0gICAgICAgICwg
bV9jaGFyYWN0ZXJzTGVuZ3RoKHMubGVuZ3RoKCkpCisgICAgICAgIDogbV9jaGFyYWN0ZXJzTGVu
Z3RoKHMubGVuZ3RoKCkpCiAgICAgICAgICwgbV9sZW4ocy5sZW5ndGgoKSkKICAgICAgICAgLCBt
X3hwb3MoeHBvcykKICNpZiBFTkFCTEUoU1ZHKQpAQCAtOTgsMTcgKzEyMCw0NyBAQCBwdWJsaWM6
CiAgICAgICAgICwgbV9kaXNhYmxlU3BhY2luZyhmYWxzZSkKICAgICAgICAgLCBtX3RhYlNpemUo
MCkKICAgICB7CisgICAgICAgIGlmIChtX2NoYXJhY3RlcnNMZW5ndGggJiYgcy5pczhCaXQoKSkg
eworICAgICAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnMxNiA9IHMuY2hhcmFjdGVycygpOworICAg
ICAgICAgICAgbV9pczhCaXQgPSBmYWxzZTsKKy8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0bzoKKy8v
ICAgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzOCA9IHMuY2hhcmFjdGVyczgoKTsKKy8vICAgICAg
ICAgIG1faXM4Qml0ID0gdHJ1ZTsKKy8vIHdoZW4gb3RoZXIgOCBiaXQgcmVuZGVyaW5nIGNoYW5n
ZXMgYXJlIGxhbmRlZC4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZGF0YS5jaGFy
YWN0ZXJzMTYgPSBzLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIG1faXM4Qml0ID0gZmFsc2U7
CisgICAgICAgIH0KICAgICB9CiAKLSAgICBVQ2hhciBvcGVyYXRvcltdKGludCBpKSBjb25zdCB7
IEFTU0VSVChpID49IDAgJiYgaSA8IG1fbGVuKTsgcmV0dXJuIG1fY2hhcmFjdGVyc1tpXTsgfQot
ICAgIGNvbnN0IFVDaGFyKiBkYXRhKGludCBpKSBjb25zdCB7IEFTU0VSVChpID49IDAgJiYgaSA8
IG1fbGVuKTsgcmV0dXJuICZtX2NoYXJhY3RlcnNbaV07IH0KKyAgICBUZXh0UnVuIHN1YlJ1bih1
bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWduZWQgbGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgQVNTRVJUKHN0YXJ0T2Zmc2V0IDwgbV9sZW4pOworCisgICAgICAgIFRleHRSdW4gcmVzdWx0
ID0gKnRoaXM7CisKKyAgICAgICAgaWYgKGlzOEJpdCgpKQorICAgICAgICAgICAgcmVzdWx0LnNl
dFRleHQoZGF0YTgoc3RhcnRPZmZzZXQpLCBsZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICByZXN1bHQuc2V0VGV4dChkYXRhMTYoc3RhcnRPZmZzZXQpLCBsZW5ndGgpOworCisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQogCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMo
KSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3RlcnM7IH0KKyAgICBVQ2hhciBvcGVyYXRvcltdKHVu
c2lnbmVkIGkpIGNvbnN0IHsgQVNTRVJUKGkgPCBtX2xlbik7IHJldHVybiBpczhCaXQoKSA/IG1f
ZGF0YS5jaGFyYWN0ZXJzOFtpXSA6IG1fZGF0YS5jaGFyYWN0ZXJzMTZbaV07IH0KKyAgICBjb25z
dCBMQ2hhciogZGF0YTgodW5zaWduZWQgaSkgY29uc3QgeyBBU1NFUlQoaSA8IG1fbGVuKTsgQVNT
RVJUKGlzOEJpdCgpKTsgcmV0dXJuICZtX2RhdGEuY2hhcmFjdGVyczhbaV07IH0KKyAgICBjb25z
dCBVQ2hhciogZGF0YTE2KHVuc2lnbmVkIGkpIGNvbnN0IHsgQVNTRVJUKGkgPCBtX2xlbik7IEFT
U0VSVCghaXM4Qml0KCkpOyByZXR1cm4gJm1fZGF0YS5jaGFyYWN0ZXJzMTZbaV07IH0KKworICAg
IGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzOCgpIGNvbnN0IHsgQVNTRVJUKGlzOEJpdCgpKTsgcmV0
dXJuIG1fZGF0YS5jaGFyYWN0ZXJzODsgfQorICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzMTYo
KSBjb25zdCB7IEFTU0VSVCghaXM4Qml0KCkpOyByZXR1cm4gbV9kYXRhLmNoYXJhY3RlcnMxNjsg
fQorICAgIAorICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pczhCaXQ7IH0KICAg
ICBpbnQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW47IH0KICAgICBpbnQgY2hhcmFjdGVy
c0xlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyc0xlbmd0aDsgfQogCi0gICAgdm9p
ZCBzZXRUZXh0KGNvbnN0IFVDaGFyKiBjLCBpbnQgbGVuKSB7IG1fY2hhcmFjdGVycyA9IGM7IG1f
bGVuID0gbGVuOyB9Ci0gICAgdm9pZCBzZXRDaGFyYWN0ZXJzTGVuZ3RoKGludCBjaGFyYWN0ZXJz
TGVuZ3RoKSB7IG1fY2hhcmFjdGVyc0xlbmd0aCA9IGNoYXJhY3RlcnNMZW5ndGg7IH0KKyAgICB2
b2lkIHNldFRleHQoY29uc3QgTENoYXIqIGMsIHVuc2lnbmVkIGxlbikgeyBtX2RhdGEuY2hhcmFj
dGVyczggPSBjOyBtX2xlbiA9IGxlbjsgbV9pczhCaXQgPSB0cnVlO30KKyAgICB2b2lkIHNldFRl
eHQoY29uc3QgVUNoYXIqIGMsIHVuc2lnbmVkIGxlbikgeyBtX2RhdGEuY2hhcmFjdGVyczE2ID0g
YzsgbV9sZW4gPSBsZW47IG1faXM4Qml0ID0gZmFsc2U7fQorICAgIHZvaWQgc2V0Q2hhcmFjdGVy
c0xlbmd0aCh1bnNpZ25lZCBjaGFyYWN0ZXJzTGVuZ3RoKSB7IG1fY2hhcmFjdGVyc0xlbmd0aCA9
IGNoYXJhY3RlcnNMZW5ndGg7IH0KIAogI2lmIEVOQUJMRShTVkcpCiAgICAgZmxvYXQgaG9yaXpv
bnRhbEdseXBoU3RyZXRjaCgpIGNvbnN0IHsgcmV0dXJuIG1faG9yaXpvbnRhbEdseXBoU3RyZXRj
aDsgfQpAQCAtMTU5LDkgKzIxMSwxMiBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIHN0YXRpYyBi
b29sIHNfYWxsb3dzUm91bmRpbmdIYWNrczsKIAotICAgIGNvbnN0IFVDaGFyKiBtX2NoYXJhY3Rl
cnM7Ci0gICAgaW50IG1fY2hhcmFjdGVyc0xlbmd0aDsgLy8gTWFya3MgdGhlIGVuZCBvZiB0aGUg
bV9jaGFyYWN0ZXJzIGJ1ZmZlci4gRGVmYXVsdCBlcXVhbHMgdG8gbV9sZW4uCi0gICAgaW50IG1f
bGVuOworICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4OworICAg
ICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2OworICAgIH0gbV9kYXRhOworICAgIHVuc2ln
bmVkIG1fY2hhcmFjdGVyc0xlbmd0aDsgLy8gTWFya3MgdGhlIGVuZCBvZiB0aGUgY2hhcmFjdGVy
cyBidWZmZXIuIERlZmF1bHQgZXF1YWxzIHRvIG1fbGVuLgorICAgIHVuc2lnbmVkIG1fbGVuOwog
CiAgICAgLy8gbV94cG9zIGlzIHRoZSB4IHBvc2l0aW9uIHJlbGF0aXZlIHRvIHRoZSBsZWZ0IHN0
YXJ0IG9mIHRoZSB0ZXh0IGxpbmUsIG5vdCByZWxhdGl2ZSB0byB0aGUgbGVmdAogICAgIC8vIHN0
YXJ0IG9mIHRoZSBjb250YWluaW5nIGJsb2NrLiBJbiB0aGUgY2FzZSBvZiByaWdodCBhbGlnbm1l
bnQgb3IgY2VudGVyIGFsaWdubWVudCwgbGVmdCBzdGFydCBvZgpAQCAtMTczLDYgKzIyOCw3IEBA
IHByaXZhdGU6CiAKICAgICBmbG9hdCBtX2V4cGFuc2lvbjsKICAgICBFeHBhbnNpb25CZWhhdmlv
ciBtX2V4cGFuc2lvbkJlaGF2aW9yIDogMjsKKyAgICB1bnNpZ25lZCBtX2lzOEJpdCA6IDE7CiAg
ICAgdW5zaWduZWQgbV9hbGxvd1RhYnMgOiAxOwogICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9uIDog
MTsKICAgICB1bnNpZ25lZCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGUgOiAxOyAvLyBXYXMgdGhpcyBk
aXJlY3Rpb24gc2V0IGJ5IGFuIG92ZXJyaWRlIGNoYXJhY3Rlci4KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCShyZXZpc2lv
biAxMjc1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJh
dG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcsNyArNTcsNyBAQCBXaWR0aEl0ZXJhdG9yOjpX
aWR0aEl0ZXJhdG9yKGNvbnN0IEZvbnQqCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5p
dHkgPSAwOwogICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2lz
QWZ0ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQgPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLmNoYXJhY3RlcnMoKSwg
bV9ydW4ubGVuZ3RoKCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9u
KTsKKyAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IG1fcnVuLmlz
OEJpdCgpID8gRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi5jaGFyYWN0ZXJz
OCgpLCBtX3J1bi5sZW5ndGgoKSwgbV9ydW4ubHRyKCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBh
bnNpb24pIDogRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi5jaGFyYWN0ZXJz
MTYoKSwgbV9ydW4ubGVuZ3RoKCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhw
YW5zaW9uKTsKICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1fcnVuLmFsbG93c1Ry
YWlsaW5nRXhwYW5zaW9uKCkpCiAgICAgICAgICAgICBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50
LS07CiAKQEAgLTEwNiw3ICsxMDYsNyBAQCB1bnNpZ25lZCBXaWR0aEl0ZXJhdG9yOjphZHZhbmNl
KGludCBvZmZzCiAKICAgICBVQ2hhcjMyIGNoYXJhY3RlciA9IDA7CiAgICAgdW5zaWduZWQgY2x1
c3Rlckxlbmd0aCA9IDA7Ci0gICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0ZXJhdG9yIHRleHRJ
dGVyYXRvcihtX3J1bi5kYXRhKG1fY3VycmVudENoYXJhY3RlciksIG1fY3VycmVudENoYXJhY3Rl
ciwgb2Zmc2V0LCBtX3J1bi5sZW5ndGgoKSk7CisgICAgU3Vycm9nYXRlUGFpckF3YXJlVGV4dEl0
ZXJhdG9yIHRleHRJdGVyYXRvcihtX3J1bi5kYXRhMTYobV9jdXJyZW50Q2hhcmFjdGVyKSwgbV9j
dXJyZW50Q2hhcmFjdGVyLCBvZmZzZXQsIG1fcnVuLmxlbmd0aCgpKTsKICAgICB3aGlsZSAodGV4
dEl0ZXJhdG9yLmNvbnN1bWUoY2hhcmFjdGVyLCBjbHVzdGVyTGVuZ3RoKSkgewogICAgICAgICB1
bnNpZ25lZCBhZHZhbmNlTGVuZ3RoID0gY2x1c3Rlckxlbmd0aDsKICAgICAgICAgY29uc3QgR2x5
cGhEYXRhJiBnbHlwaERhdGEgPSBnbHlwaERhdGFGb3JDaGFyYWN0ZXIoY2hhcmFjdGVyLCBydGws
IHRleHRJdGVyYXRvci5jdXJyZW50Q2hhcmFjdGVyKCksIGFkdmFuY2VMZW5ndGgpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFj
L0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDcsNyArMTQ3LDcgQEAgQ29tcGxleFRleHRDb250cm9sbGVyOjpD
b21wbGV4VGV4dENvbnRybwogICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsK
ICAgICBlbHNlIHsKICAgICAgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gbV9hZnRlckV4cGFu
c2lvbjsKLSAgICAgICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnQ6
OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4uY2hhcmFjdGVycygpLCBtX2VuZCwgbV9y
dW4ubHRyKCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25l
ZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudChtX3J1bi5jaGFyYWN0ZXJzMTYoKSwgbV9lbmQsIG1fcnVuLmx0cigpID8gTFRSIDogUlRM
LCBpc0FmdGVyRXhwYW5zaW9uKTsKICAgICAgICAgaWYgKGlzQWZ0ZXJFeHBhbnNpb24gJiYgIW1f
cnVuLmFsbG93c1RyYWlsaW5nRXhwYW5zaW9uKCkpCiAgICAgICAgICAgICBleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50LS07CiAKQEAgLTI4OSw3ICsyODksNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Y29sbGVjdENvbXBsCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGJyZWFr
IHVwIGdseXBoIHJ1biBnZW5lcmF0aW9uIGZvciB0aGUgc3RyaW5nIGJ5IEZvbnREYXRhLgotICAg
IGNvbnN0IFVDaGFyKiBjcCA9IG1fcnVuLmNoYXJhY3RlcnMoKTsKKyAgICBjb25zdCBVQ2hhciog
Y3AgPSBtX3J1bi5jaGFyYWN0ZXJzMTYoKTsKIAogICAgIGlmIChtX2ZvbnQuaXNTbWFsbENhcHMo
KSkKICAgICAgICAgbV9zbWFsbENhcHNCdWZmZXIucmVzaXplKG1fZW5kKTsKQEAgLTYzNSw3ICs2
MzUsNyBAQCB2b2lkIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6YWRqdXN0R2x5cGhzCiAgICAgICAg
ICAgICAgICAgICAgICAgICBtX2FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CiAKICAgICAgICAgICAg
ICAgICAgICAgLy8gQWNjb3VudCBmb3Igd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgICAgICAg
ICBpZiAodHJlYXRBc1NwYWNlICYmIGNoYXJhY3RlckluZGV4ID4gMCAmJiAhRm9udDo6dHJlYXRB
c1NwYWNlKCptX3J1bi5kYXRhKGNoYXJhY3RlckluZGV4IC0gMSkpICYmIG1fZm9udC53b3JkU3Bh
Y2luZygpKQorICAgICAgICAgICAgICAgICAgICBpZiAodHJlYXRBc1NwYWNlICYmIGNoYXJhY3Rl
ckluZGV4ID4gMCAmJiAhRm9udDo6dHJlYXRBc1NwYWNlKG1fcnVuW2NoYXJhY3RlckluZGV4IC0g
MV0pICYmIG1fZm9udC53b3JkU3BhY2luZygpKQogICAgICAgICAgICAgICAgICAgICAgICAgYWR2
YW5jZS53aWR0aCArPSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKICAgICAgICAgICAgICAgICB9IGVs
c2UKICAgICAgICAgICAgICAgICAgICAgbV9hZnRlckV4cGFuc2lvbiA9IGZhbHNlOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTI3NTI1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xODc5LDcgKzE4NzksNyBAQCBpbnQgUmVuZGVyVGV4dDo6bmV4dE9mZnNldChpbnQgY3Vy
cmVudCkgCiAKIGJvb2wgUmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBsZUZvbnRDb2RlUGF0
aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQWxsQVNDSUkoKSkKKyAgICBpZiAoaXNBbGxBU0NJSSgp
IHx8IG1fdGV4dC5pczhCaXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIEZv
bnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY2hhcmFjdGVycygpLCBsZW5ndGgoKSkgPT0gRm9u
dDo6U2ltcGxlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0
TWV0cmljcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljcy5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1
Niw3IEBAIFNWR1RleHRNZXRyaWNzOjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkcKICAgICBtX3dp
ZHRoID0gc2NhbGVkRm9udC53aWR0aChydW4sIGxlbmd0aCwgbV9nbHlwaC5uYW1lKSAvIHNjYWxp
bmdGYWN0b3I7CiAgICAgbV9oZWlnaHQgPSBzY2FsZWRGb250LmZvbnRNZXRyaWNzKCkuZmxvYXRI
ZWlnaHQoKSAvIHNjYWxpbmdGYWN0b3I7CiAKLSAgICBtX2dseXBoLnVuaWNvZGVTdHJpbmcgPSBT
dHJpbmcocnVuLmNoYXJhY3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBtX2dseXBoLnVuaWNvZGVTdHJp
bmcgPSBydW4uaXM4Qml0KCkgPyBTdHJpbmcocnVuLmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBT
dHJpbmcocnVuLmNoYXJhY3RlcnMxNigpLCBsZW5ndGgpOwogICAgIG1fZ2x5cGguaXNWYWxpZCA9
IHRydWU7CiAKICAgICBBU1NFUlQobGVuZ3RoID49IDApOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkocmV2
aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0
cmljc0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogU1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjpTVkdUZXh0TWV0cmljc0J1aWxk
ZXIoKQogICAgIDogbV90ZXh0KDApCi0gICAgLCBtX3J1bigwLCAwKQorICAgICwgbV9ydW4oc3Rh
dGljX2Nhc3Q8Y29uc3QgVUNoYXIqPigwKSwgMCkKICAgICAsIG1fdGV4dFBvc2l0aW9uKDApCiAg
ICAgLCBtX2lzQ29tcGxleFRleHQoZmFsc2UpCiAgICAgLCBtX3RvdGFsV2lkdGgoMCkKQEAgLTE0
OCw3ICsxNDgsNyBAQCB2b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSCiAg
ICAgaW50IHN1cnJvZ2F0ZVBhaXJDaGFyYWN0ZXJzID0gMDsKIAogICAgIHdoaWxlIChhZHZhbmNl
KCkpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIgPSBtX3J1bi5kYXRh
KG1fdGV4dFBvc2l0aW9uKTsKKyAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIg
PSBtX3J1bi5kYXRhMTYobV90ZXh0UG9zaXRpb24pOwogICAgICAgICBpZiAoKmN1cnJlbnRDaGFy
YWN0ZXIgPT0gJyAnICYmICFwcmVzZXJ2ZVdoaXRlU3BhY2UgJiYgKCFkYXRhLT5sYXN0Q2hhcmFj
dGVyIHx8ICpkYXRhLT5sYXN0Q2hhcmFjdGVyID09ICcgJykpIHsKICAgICAgICAgICAgIGlmIChk
YXRhLT5wcm9jZXNzUmVuZGVyZXIpCiAgICAgICAgICAgICAgICAgdGV4dE1ldHJpY3NWYWx1ZXMt
PmFwcGVuZChTVkdUZXh0TWV0cmljcyhTVkdUZXh0TWV0cmljczo6U2tpcHBlZFNwYWNlTWV0cmlj
cykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCShyZXZpc2lvbiAxMjc1MjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xMzQsNyArMTM0LDcgQEAgYm9vbCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlv
bgogICAgIEFTU0VSVChpbnQocnVuLmNoYXJhY3RlcnNMZW5ndGgoKSkgPj0gY3VycmVudENoYXJh
Y3Rlcik7CiAKICAgICAvLyBBc3NvY2lhdGUgdGV4dCB3aXRoIGFyYWJpYyBmb3JtcywgaWYgbmVl
ZGVkLgotICAgIFN0cmluZyByZW1haW5pbmdUZXh0SW5SdW4ocnVuLmRhdGEoY3VycmVudENoYXJh
Y3RlciksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkgLSBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICBT
dHJpbmcgcmVtYWluaW5nVGV4dEluUnVuKHJ1bi5kYXRhMTYoY3VycmVudENoYXJhY3RlciksIHJ1
bi5jaGFyYWN0ZXJzTGVuZ3RoKCkgLSBjdXJyZW50Q2hhcmFjdGVyKTsKICAgICByZW1haW5pbmdU
ZXh0SW5SdW4gPSBGb250Ojpub3JtYWxpemVTcGFjZXMocmVtYWluaW5nVGV4dEluUnVuLmNoYXJh
Y3RlcnMoKSwgcmVtYWluaW5nVGV4dEluUnVuLmxlbmd0aCgpKTsKICAgICBpZiAobWlycm9yKQog
ICAgICAgICByZW1haW5pbmdUZXh0SW5SdW4gPSBjcmVhdGVTdHJpbmdXaXRoTWlycm9yZWRDaGFy
YWN0ZXJzKHJlbWFpbmluZ1RleHRJblJ1bi5jaGFyYWN0ZXJzKCksIHJlbWFpbmluZ1RleHRJblJ1
bi5sZW5ndGgoKSk7Cg==
</data>
<flag name="review"
          id="173364"
          type_id="1"
          status="+"
          setter="mitz"
    />
    <flag name="commit-queue"
          id="173375"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162515</attachid>
            <date>2012-09-06 08:47:27 -0700</date>
            <delta_ts>2012-09-06 08:57:17 -0700</delta_ts>
            <desc>Patch with fixes for failing platforms</desc>
            <filename>95812-2.patch</filename>
            <type>text/plain</type>
            <size>30368</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzY1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDEyLTA5LTA1ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCA4IGJpdCBzdHJpbmcg
ZGF0YSBwYXRoIHRvIFRleHRSdW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk1ODEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgOCBiaXQgc3RyaW5nIHBhdGggdG8gVGV4dFJ1bi4gIFJlZmFjdG9y
ZWQgVGV4dFJ1bjo6ZGF0YSgpIGFuZCA6OmNoYXJhY3RlcnMgaW50bworICAgICAgICA4IGFuZCAx
NiBiaXQgdmVyc2lvbnMuICBNYWRlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB1c2VycyBvZiBU
ZXh0UnVuLgorICAgICAgICBGb3IgZWZsLCBndGssIHF0IGFuZCB3aW4gcGxhdGZvcm0gc3BlY2lm
aWMgY29kZSB1c2luZyBUZXh0UnVuLCBvbmx5IHRoZSBtZXRob2RzIGhhdmUKKyAgICAgICAgYmVl
biByZW5hbWVkIGFuZCB0aGUgY3JlYXRpb24gb2YgOCBiaXQgdGV0IHJ1bnMgaGFzIGJlZW4gZGlz
YWJsZWQgdmlhIGNvbXBpbGF0aW9uCisgICAgICAgIGZsYWdzLiAgU29tZW9uZSBrbm93bGVkZ2li
bGUgaW4gdGhvc2UgcGxhdGZvcm1zIHdpbGwgbmVlZCB0byBtYWtlIGNvcnJlc3BvbmRpbmcgY2hh
bmdlcworICAgICAgICB0byBlbmFibGUgOCBiaXQgcHJvY2Vzc2luZyBvZiBUZXh0UnVucy4KKwor
ICAgICAgICBObyBjaGFuZ2VzIHRvIGZ1bmN0aW9uYWxpdHkgLSBiZWhhdmlvciBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVTcGFjZXNJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Ojpub3JtYWxpemVTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDpu
b3JtYWxpemVTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y29kZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2hh
cmFjdGVyUmFuZ2VDb2RlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpub3JtYWxpemVT
cGFjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHA6CisgICAgICAgIChFeHBlY3RlZFRl
eHRSdW5TaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW46OnN1YlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpvcGVyYXRvcltdKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmRhdGE4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW46OmRhdGExNik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpjaGFyYWN0ZXJzOCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpjaGFyYWN0ZXJzMTYpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJ1bjo6aXM4Qml0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNldFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c2V0Q2hhcmFjdGVyc0xlbmd0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZHRoSXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlckJhc2U6OnNldE5vcm1hbGl6ZWRCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhh
cmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21w
bGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHNBbmRBZHZh
bmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29t
cGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVt
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpjb21wdXRlQ2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRNZXRyaWNzOjpTVkdUZXh0TWV0cmljcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyOjpTVkdUZXh0TWV0cmljc0J1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcv
U1ZHRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZH
R2x5cGhTZWxlY3Rpb24pOgorCiAyMDEyLTA5LTA1ICBCcnVubyBkZSBPbGl2ZWlyYSBBYmluYWRl
ciAgPGJydW5vLmFiaW5hZGVyQGJhc3lza29tLmNvbT4KIAogICAgICAgICBNYWtlIFJlbmRlclN0
eWxlOjpjb2xvckluY2x1ZGluZ0ZhbGxiYWNrIHVzZSBwcml2YXRlIGdldHRlcnMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxMjc1MjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDE3ICsyNDQsMzUgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdQogICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KHJ1
biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1TdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6
ZVNwYWNlc0ludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7CiAgICAgbm9ybWFsaXpl
ZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQobm9ybWFsaXplU3BhY2Vz
KGNoYXJhY3RlcnNbaV0pKTsKKyAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFs
aXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKIAogICAgIHJldHVybiBub3JtYWxpemVkLnRvU3Ry
aW5nKCk7CiB9CiAKK1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2Vz
SW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworU3RyaW5nIEZvbnQ6Om5vcm1hbGl6
ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQor
CisgICAgU3RyaW5nIEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhjb25zdCBUZXh0UnVuJiBydW4pCit7
CisgICAgaWYgKHJ1bi5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZVNwYWNlc0lu
dGVybmFsKHJ1bi5jaGFyYWN0ZXJzOCgpLCBydW4ubGVuZ3RoKCkpOworICAgIHJldHVybiBub3Jt
YWxpemVTcGFjZXNJbnRlcm5hbChydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7Cit9
CisKIHN0YXRpYyBib29sIHNob3VsZFVzZUZvbnRTbW9vdGhpbmcgPSB0cnVlOwogCiB2b2lkIEZv
bnQ6OnNldFNob3VsZFVzZVNtb290aGluZyhib29sIHNob3VsZFVzZVNtb290aGluZykKQEAgLTI5
Nyw4ICszMTUsMTEgQEAgRm9udDo6Q29kZVBhdGggRm9udDo6Y29kZVBhdGgoY29uc3QgVGV4dAog
ICAgIGlmICghcnVuLmNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCgpKQogICAgICAgICByZXR1cm4g
U2ltcGxlOwogCisgICAgaWYgKHJ1bi5pczhCaXQoKSkKKyAgICAgICAgcmV0dXJuIFNpbXBsZTsK
KwogICAgIC8vIFN0YXJ0IGZyb20gMCBzaW5jZSBkcmF3aW5nIGFuZCBoaWdobGlnaHRpbmcgYWxz
byBtZWFzdXJlIHRoZSBjaGFyYWN0ZXJzIGJlZm9yZSBydW4tPmZyb20uCi0gICAgcmV0dXJuIGNo
YXJhY3RlclJhbmdlQ29kZVBhdGgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAg
ICByZXR1cm4gY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5s
ZW5ndGgoKSk7CiB9CiAKIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBh
dGgoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbikKQEAgLTU1Nyw2ICs1Nzgs
MjkgQEAgYm9vbCBGb250Ojppc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMwogICAgIHJldHVy
biBpc0NKS0lkZW9ncmFwaChjKTsKIH0KIAordW5zaWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0
dW5pdHlDb3VudChjb25zdCBMQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24pCit7CisgICAgdW5zaWdu
ZWQgY291bnQgPSAwOworICAgIGlmIChkaXJlY3Rpb24gPT0gTFRSKSB7CisgICAgICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGlmICh0cmVhdEFz
U3BhY2UoY2hhcmFjdGVyc1tpXSkpIHsKKyAgICAgICAgICAgICAgICBjb3VudCsrOworICAgICAg
ICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0cnVlOworICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IGZhbHNlOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IGxlbmd0aDsgaSA+IDA7IC0taSkgewor
ICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZShjaGFyYWN0ZXJzW2kgLSAxXSkpIHsKKyAgICAg
ICAgICAgICAgICBjb3VudCsrOworICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSB0
cnVlOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lv
biA9IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBjb3VudDsKK30KKwogdW5z
aWduZWQgRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBVQ2hhciogY2hhcmFj
dGVycywgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24sIGJvb2wmIGlzQWZ0
ZXJFeHBhbnNpb24pCiB7CiAgICAgc3RhdGljIGJvb2wgZXhwYW5kQXJvdW5kSWRlb2dyYXBocyA9
IGNhbkV4cGFuZEFyb3VuZElkZW9ncmFwaHNJbkNvbXBsZXhUZXh0KCk7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCShyZXZpc2lvbiAxMjc1MjUpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHdvcmtpbmcgY29weSkKQEAgLTE4
Myw2ICsxODMsNyBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGgoVUNo
YXIzMik7CiAgICAgc3RhdGljIGJvb2wgaXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMyKTsK
IAorICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IExD
aGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lv
bik7CiAgICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3Qg
VUNoYXIqLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5z
aW9uKTsKIAogI2lmIFBMQVRGT1JNKFFUKQpAQCAtMTk1LDYgKzE5Niw3IEBAIHB1YmxpYzoKIAog
ICAgIGVudW0gQ29kZVBhdGggeyBBdXRvLCBTaW1wbGUsIENvbXBsZXgsIFNpbXBsZVdpdGhHbHlw
aE92ZXJmbG93IH07CiAgICAgQ29kZVBhdGggY29kZVBhdGgoY29uc3QgVGV4dFJ1biYpIGNvbnN0
OworICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IExDaGFy
KiwgdW5zaWduZWQpIHsgcmV0dXJuIFNpbXBsZTsgfQogICAgIHN0YXRpYyBDb2RlUGF0aCBjaGFy
YWN0ZXJSYW5nZUNvZGVQYXRoKGNvbnN0IFVDaGFyKiwgdW5zaWduZWQgbGVuKTsKICAgICAKIHBy
aXZhdGU6CkBAIC0yNDUsNyArMjQ3LDggQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIHRyZWF0
QXNaZXJvV2lkdGhTcGFjZUluQ29tcGxleFNjcmlwdChVQ2hhciBjKSB7IHJldHVybiBjIDwgMHgy
MCB8fCAoYyA+PSAweDdGICYmIGMgPCAweEEwKSB8fCBjID09IHNvZnRIeXBoZW4gfHwgYyA9PSB6
ZXJvV2lkdGhTcGFjZSB8fCAoYyA+PSAweDIwMGUgJiYgYyA8PSAweDIwMGYpIHx8IChjID49IDB4
MjAyYSAmJiBjIDw9IDB4MjAyZSkgfHwgYyA9PSB6ZXJvV2lkdGhOb0JyZWFrU3BhY2UgfHwgYyA9
PSBvYmplY3RSZXBsYWNlbWVudENoYXJhY3RlcjsgfQogICAgIHN0YXRpYyBib29sIGNhblJlY2Vp
dmVUZXh0RW1waGFzaXMoVUNoYXIzMiBjKTsKIAotICAgIHN0YXRpYyBpbmxpbmUgVUNoYXIgbm9y
bWFsaXplU3BhY2VzKFVDaGFyIGNoYXJhY3RlcikKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgQ2hh
cmFjdGVyVHlwZT4KKyAgICBzdGF0aWMgaW5saW5lIENoYXJhY3RlclR5cGUgbm9ybWFsaXplU3Bh
Y2VzKENoYXJhY3RlclR5cGUgY2hhcmFjdGVyKQogICAgIHsKICAgICAgICAgaWYgKHRyZWF0QXNT
cGFjZShjaGFyYWN0ZXIpKQogICAgICAgICAgICAgcmV0dXJuIHNwYWNlOwpAQCAtMjU2LDcgKzI1
OSw5IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNoYXJhY3RlcjsKICAgICB9CiAKKyAgICBz
dGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hhciosIHVuc2lnbmVkIGxlbmd0
aCk7CiAgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3QgVUNoYXIqLCB1bnNp
Z25lZCBsZW5ndGgpOworICAgIHN0YXRpYyBTdHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IFRl
eHRSdW4mKTsKIAogICAgIGJvb2wgbmVlZHNUcmFuc2NvZGluZygpIGNvbnN0IHsgcmV0dXJuIG1f
bmVlZHNUcmFuc2NvZGluZzsgfQogICAgIEZvbnRGYWxsYmFja0xpc3QqIGZvbnRMaXN0KCkgY29u
c3QgeyByZXR1cm4gbV9mb250TGlzdC5nZXQoKTsgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NDb250ZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCShyZXZpc2lvbiAx
Mjc1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRl
eHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTMsOCArNDEzLDcgQEAgdm9pZCBHcmFwaGljc0Nv
bnRleHQ6OmRyYXdCaWRpVGV4dChjb25zdAogICAgIEZsb2F0UG9pbnQgY3VyclBvaW50ID0gcG9p
bnQ7CiAgICAgQmlkaUNoYXJhY3RlclJ1biogYmlkaVJ1biA9IGJpZGlSdW5zLmZpcnN0UnVuKCk7
CiAgICAgd2hpbGUgKGJpZGlSdW4pIHsKLSAgICAgICAgVGV4dFJ1biBzdWJydW4gPSBydW47Ci0g
ICAgICAgIHN1YnJ1bi5zZXRUZXh0KHJ1bi5kYXRhKGJpZGlSdW4tPnN0YXJ0KCkpLCBiaWRpUnVu
LT5zdG9wKCkgLSBiaWRpUnVuLT5zdGFydCgpKTsKKyAgICAgICAgVGV4dFJ1biBzdWJydW4gPSBy
dW4uc3ViUnVuKGJpZGlSdW4tPnN0YXJ0KCksIGJpZGlSdW4tPnN0b3AoKSAtIGJpZGlSdW4tPnN0
YXJ0KCkpOwogICAgICAgICBib29sIGlzUlRMID0gYmlkaVJ1bi0+bGV2ZWwoKSAlIDI7CiAgICAg
ICAgIHN1YnJ1bi5zZXREaXJlY3Rpb24oaXNSVEwgPyBSVEwgOiBMVFIpOwogICAgICAgICBzdWJy
dW4uc2V0RGlyZWN0aW9uYWxPdmVycmlkZShiaWRpUnVuLT5kaXJPdmVycmlkZShmYWxzZSkpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHAJKHJl
dmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRS
dW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3ICszNiw3IEBAIHN0cnVjdCBFeHBlY3RlZFRl
eHRSdW5TaXplIHsKICAgICBmbG9hdCBmbG9hdDI7CiAjZW5kaWYKICAgICBmbG9hdCBmbG9hdDM7
Ci0gICAgdWludDMyX3QgYml0ZmllbGRzIDogOTsKKyAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiAx
MDsKICAgICB1bnNpZ25lZCBhblVuc2lnbmVkOwogICAgIFJlZlB0cjxUZXh0UnVuOjpSZW5kZXJp
bmdDb250ZXh0PiByZW5kZXJpbmdDb250ZXh0OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmgJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkod29ya2luZyBjb3B5KQpAQCAtNTgs
OSArNTgsOSBAQCBwdWJsaWM6CiAKICAgICB0eXBlZGVmIHVuc2lnbmVkIFJvdW5kaW5nSGFja3M7
CiAKLSAgICBUZXh0UnVuKGNvbnN0IFVDaGFyKiBjLCBpbnQgbGVuLCBmbG9hdCB4cG9zID0gMCwg
ZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3Ig
PSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dERp
cmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNl
LCBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWUsIFJvdW5kaW5nSGFja3Mgcm91
bmRpbmdIYWNrcyA9IFJ1blJvdW5kaW5nIHwgV29yZFJvdW5kaW5nKQotICAgICAgICA6IG1fY2hh
cmFjdGVycyhjKQotICAgICAgICAsIG1fY2hhcmFjdGVyc0xlbmd0aChsZW4pCisjaWYgUExBVEZP
Uk0oTUFDKQorICAgIFRleHRSdW4oY29uc3QgTENoYXIqIGMsIHVuc2lnbmVkIGxlbiwgZmxvYXQg
eHBvcyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lv
bkJlaGF2aW9yID0gQWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IEZvcmJpZExlYWRpbmdFeHBhbnNp
b24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJp
ZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlLCBSb3VuZGlu
Z0hhY2tzIHJvdW5kaW5nSGFja3MgPSBSdW5Sb3VuZGluZyB8IFdvcmRSb3VuZGluZykKKyAgICAg
ICAgOiBtX2NoYXJhY3RlcnNMZW5ndGgobGVuKQogICAgICAgICAsIG1fbGVuKGxlbikKICAgICAg
ICAgLCBtX3hwb3MoeHBvcykKICNpZiBFTkFCTEUoU1ZHKQpAQCAtNjgsNiArNjgsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKICAgICAgICAgLCBtX2V4cGFuc2lvbihleHBhbnNpb24pCiAgICAgICAgICwg
bV9leHBhbnNpb25CZWhhdmlvcihleHBhbnNpb25CZWhhdmlvcikKKyAgICAgICAgLCBtX2lzOEJp
dCh0cnVlKQogICAgICAgICAsIG1fYWxsb3dUYWJzKGZhbHNlKQogICAgICAgICAsIG1fZGlyZWN0
aW9uKGRpcmVjdGlvbikKICAgICAgICAgLCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGUoZGlyZWN0aW9u
YWxPdmVycmlkZSkKQEAgLTc3LDExICs3OCwzNCBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXNh
YmxlU3BhY2luZyhmYWxzZSkKICAgICAgICAgLCBtX3RhYlNpemUoMCkKICAgICB7CisgICAgICAg
IG1fZGF0YS5jaGFyYWN0ZXJzOCA9IGM7CiAgICAgfQorI2VuZGlmCiAKKyAgICBUZXh0UnVuKGNv
bnN0IFVDaGFyKiBjLCB1bnNpZ25lZCBsZW4sIGZsb2F0IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNp
b24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IEFsbG93VHJhaWxp
bmdFeHBhbnNpb24gfCBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVj
dGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJvb2wgY2hhcmFj
dGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSwgUm91bmRpbmdIYWNrcyByb3VuZGluZ0hhY2tzID0g
UnVuUm91bmRpbmcgfCBXb3JkUm91bmRpbmcpCisgICAgICAgIDogbV9jaGFyYWN0ZXJzTGVuZ3Ro
KGxlbikKKyAgICAgICAgLCBtX2xlbihsZW4pCisgICAgICAgICwgbV94cG9zKHhwb3MpCisjaWYg
RU5BQkxFKFNWRykKKyAgICAgICAgLCBtX2hvcml6b250YWxHbHlwaFN0cmV0Y2goMSkKKyNlbmRp
ZgorICAgICAgICAsIG1fZXhwYW5zaW9uKGV4cGFuc2lvbikKKyAgICAgICAgLCBtX2V4cGFuc2lv
bkJlaGF2aW9yKGV4cGFuc2lvbkJlaGF2aW9yKQorICAgICAgICAsIG1faXM4Qml0KGZhbHNlKQor
ICAgICAgICAsIG1fYWxsb3dUYWJzKGZhbHNlKQorICAgICAgICAsIG1fZGlyZWN0aW9uKGRpcmVj
dGlvbikKKyAgICAgICAgLCBtX2RpcmVjdGlvbmFsT3ZlcnJpZGUoZGlyZWN0aW9uYWxPdmVycmlk
ZSkKKyAgICAgICAgLCBtX2NoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aChjaGFyYWN0ZXJTY2FuRm9y
Q29kZVBhdGgpCisgICAgICAgICwgbV9hcHBseVJ1blJvdW5kaW5nKChyb3VuZGluZ0hhY2tzICYg
UnVuUm91bmRpbmcpICYmIHNfYWxsb3dzUm91bmRpbmdIYWNrcykKKyAgICAgICAgLCBtX2FwcGx5
V29yZFJvdW5kaW5nKChyb3VuZGluZ0hhY2tzICYgV29yZFJvdW5kaW5nKSAmJiBzX2FsbG93c1Jv
dW5kaW5nSGFja3MpCisgICAgICAgICwgbV9kaXNhYmxlU3BhY2luZyhmYWxzZSkKKyAgICAgICAg
LCBtX3RhYlNpemUoMCkKKyAgICB7CisgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzMTYgPSBjOwor
ICAgIH0KKyAgICAKICAgICBUZXh0UnVuKGNvbnN0IFN0cmluZyYgcywgZmxvYXQgeHBvcyA9IDAs
IGZsb2F0IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9y
ID0gQWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IEZvcmJpZExlYWRpbmdFeHBhbnNpb24sIFRleHRE
aXJlY3Rpb24gZGlyZWN0aW9uID0gTFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxz
ZSwgYm9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlLCBSb3VuZGluZ0hhY2tzIHJv
dW5kaW5nSGFja3MgPSBSdW5Sb3VuZGluZyB8IFdvcmRSb3VuZGluZykKLSAgICAgICAgOiBtX2No
YXJhY3RlcnMocy5jaGFyYWN0ZXJzKCkpCi0gICAgICAgICwgbV9jaGFyYWN0ZXJzTGVuZ3RoKHMu
bGVuZ3RoKCkpCisgICAgICAgIDogbV9jaGFyYWN0ZXJzTGVuZ3RoKHMubGVuZ3RoKCkpCiAgICAg
ICAgICwgbV9sZW4ocy5sZW5ndGgoKSkKICAgICAgICAgLCBtX3hwb3MoeHBvcykKICNpZiBFTkFC
TEUoU1ZHKQpAQCAtOTgsMTcgKzEyMiw1MiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9kaXNhYmxl
U3BhY2luZyhmYWxzZSkKICAgICAgICAgLCBtX3RhYlNpemUoMCkKICAgICB7CisjaWYgUExBVEZP
Uk0oTUFDKQorICAgICAgICBpZiAobV9jaGFyYWN0ZXJzTGVuZ3RoICYmIHMuaXM4Qml0KCkpIHsK
KyAgICAgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzMTYgPSBzLmNoYXJhY3RlcnMoKTsKKyAgICAg
ICAgICAgIG1faXM4Qml0ID0gZmFsc2U7CisvLyBGSVhNRTogQ2hhbmdlIHRoaXMgdG86CisvLyAg
ICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczggPSBzLmNoYXJhY3RlcnM4KCk7CisvLyAgICAgICAg
ICBtX2lzOEJpdCA9IHRydWU7CisvLyB3aGVuIG90aGVyIDggYml0IHJlbmRlcmluZyBjaGFuZ2Vz
IGFyZSBsYW5kZWQuCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2RhdGEuY2hhcmFj
dGVyczE2ID0gcy5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICBtX2lzOEJpdCA9IGZhbHNlOwor
ICAgICAgICB9CisjZWxzZQorICAgICAgICBtX2RhdGEuY2hhcmFjdGVyczE2ID0gcy5jaGFyYWN0
ZXJzKCk7CisgICAgICAgIG1faXM4Qml0ID0gZmFsc2U7CisjZW5kaWYKICAgICB9CiAKLSAgICBV
Q2hhciBvcGVyYXRvcltdKGludCBpKSBjb25zdCB7IEFTU0VSVChpID49IDAgJiYgaSA8IG1fbGVu
KTsgcmV0dXJuIG1fY2hhcmFjdGVyc1tpXTsgfQotICAgIGNvbnN0IFVDaGFyKiBkYXRhKGludCBp
KSBjb25zdCB7IEFTU0VSVChpID49IDAgJiYgaSA8IG1fbGVuKTsgcmV0dXJuICZtX2NoYXJhY3Rl
cnNbaV07IH0KKyAgICBUZXh0UnVuIHN1YlJ1bih1bnNpZ25lZCBzdGFydE9mZnNldCwgdW5zaWdu
ZWQgbGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKHN0YXJ0T2Zmc2V0IDwgbV9s
ZW4pOworCisgICAgICAgIFRleHRSdW4gcmVzdWx0ID0gKnRoaXM7CisKKyAgICAgICAgaWYgKGlz
OEJpdCgpKQorICAgICAgICAgICAgcmVzdWx0LnNldFRleHQoZGF0YTgoc3RhcnRPZmZzZXQpLCBs
ZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHQuc2V0VGV4dChkYXRhMTYo
c3RhcnRPZmZzZXQpLCBsZW5ndGgpOworCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQog
Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiBtX2NoYXJhY3Rl
cnM7IH0KKyAgICBVQ2hhciBvcGVyYXRvcltdKHVuc2lnbmVkIGkpIGNvbnN0IHsgQVNTRVJUKGkg
PCBtX2xlbik7IHJldHVybiBpczhCaXQoKSA/IG1fZGF0YS5jaGFyYWN0ZXJzOFtpXSA6bV9kYXRh
LmNoYXJhY3RlcnMxNltpXTsgfQorICAgIGNvbnN0IExDaGFyKiBkYXRhOCh1bnNpZ25lZCBpKSBj
b25zdCB7IEFTU0VSVChpIDwgbV9sZW4pOyBBU1NFUlQoaXM4Qml0KCkpOyByZXR1cm4gJm1fZGF0
YS5jaGFyYWN0ZXJzOFtpXTsgfQorICAgIGNvbnN0IFVDaGFyKiBkYXRhMTYodW5zaWduZWQgaSkg
Y29uc3QgeyBBU1NFUlQoaSA8IG1fbGVuKTsgQVNTRVJUKCFpczhCaXQoKSk7IHJldHVybiAmbV9k
YXRhLmNoYXJhY3RlcnMxNltpXTsgfQorCisgICAgY29uc3QgTENoYXIqIGNoYXJhY3RlcnM4KCkg
Y29uc3QgeyBBU1NFUlQoaXM4Qml0KCkpOyByZXR1cm4gbV9kYXRhLmNoYXJhY3RlcnM4OyB9Cisg
ICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNigpIGNvbnN0IHsgQVNTRVJUKCFpczhCaXQoKSk7
IHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczE2OyB9CisgICAgCisgICAgYm9vbCBpczhCaXQoKSBj
b25zdCB7IHJldHVybiBtX2lzOEJpdDsgfQogICAgIGludCBsZW5ndGgoKSBjb25zdCB7IHJldHVy
biBtX2xlbjsgfQogICAgIGludCBjaGFyYWN0ZXJzTGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9j
aGFyYWN0ZXJzTGVuZ3RoOyB9CiAKLSAgICB2b2lkIHNldFRleHQoY29uc3QgVUNoYXIqIGMsIGlu
dCBsZW4pIHsgbV9jaGFyYWN0ZXJzID0gYzsgbV9sZW4gPSBsZW47IH0KLSAgICB2b2lkIHNldENo
YXJhY3RlcnNMZW5ndGgoaW50IGNoYXJhY3RlcnNMZW5ndGgpIHsgbV9jaGFyYWN0ZXJzTGVuZ3Ro
ID0gY2hhcmFjdGVyc0xlbmd0aDsgfQorICAgIHZvaWQgc2V0VGV4dChjb25zdCBMQ2hhciogYywg
dW5zaWduZWQgbGVuKSB7IG1fZGF0YS5jaGFyYWN0ZXJzOCA9IGM7IG1fbGVuID0gbGVuOyBtX2lz
OEJpdCA9IHRydWU7fQorICAgIHZvaWQgc2V0VGV4dChjb25zdCBVQ2hhciogYywgdW5zaWduZWQg
bGVuKSB7IG1fZGF0YS5jaGFyYWN0ZXJzMTYgPSBjOyBtX2xlbiA9IGxlbjsgbV9pczhCaXQgPSBm
YWxzZTt9CisgICAgdm9pZCBzZXRDaGFyYWN0ZXJzTGVuZ3RoKHVuc2lnbmVkIGNoYXJhY3RlcnNM
ZW5ndGgpIHsgbV9jaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVyc0xlbmd0aDsgfQogCiAjaWYg
RU5BQkxFKFNWRykKICAgICBmbG9hdCBob3Jpem9udGFsR2x5cGhTdHJldGNoKCkgY29uc3QgeyBy
ZXR1cm4gbV9ob3Jpem9udGFsR2x5cGhTdHJldGNoOyB9CkBAIC0xNTksOSArMjE4LDEyIEBAIHB1
YmxpYzoKIHByaXZhdGU6CiAgICAgc3RhdGljIGJvb2wgc19hbGxvd3NSb3VuZGluZ0hhY2tzOwog
Ci0gICAgY29uc3QgVUNoYXIqIG1fY2hhcmFjdGVyczsKLSAgICBpbnQgbV9jaGFyYWN0ZXJzTGVu
Z3RoOyAvLyBNYXJrcyB0aGUgZW5kIG9mIHRoZSBtX2NoYXJhY3RlcnMgYnVmZmVyLiBEZWZhdWx0
IGVxdWFscyB0byBtX2xlbi4KLSAgICBpbnQgbV9sZW47CisgICAgdW5pb24geworICAgICAgICBj
b25zdCBMQ2hhciogY2hhcmFjdGVyczg7CisgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
MTY7CisgICAgfSBtX2RhdGE7CisgICAgdW5zaWduZWQgbV9jaGFyYWN0ZXJzTGVuZ3RoOyAvLyBN
YXJrcyB0aGUgZW5kIG9mIHRoZSBjaGFyYWN0ZXJzIGJ1ZmZlci4gRGVmYXVsdCBlcXVhbHMgdG8g
bV9sZW4uCisgICAgdW5zaWduZWQgbV9sZW47CiAKICAgICAvLyBtX3hwb3MgaXMgdGhlIHggcG9z
aXRpb24gcmVsYXRpdmUgdG8gdGhlIGxlZnQgc3RhcnQgb2YgdGhlIHRleHQgbGluZSwgbm90IHJl
bGF0aXZlIHRvIHRoZSBsZWZ0CiAgICAgLy8gc3RhcnQgb2YgdGhlIGNvbnRhaW5pbmcgYmxvY2su
IEluIHRoZSBjYXNlIG9mIHJpZ2h0IGFsaWdubWVudCBvciBjZW50ZXIgYWxpZ25tZW50LCBsZWZ0
IHN0YXJ0IG9mCkBAIC0xNzMsNiArMjM1LDcgQEAgcHJpdmF0ZToKIAogICAgIGZsb2F0IG1fZXhw
YW5zaW9uOwogICAgIEV4cGFuc2lvbkJlaGF2aW9yIG1fZXhwYW5zaW9uQmVoYXZpb3IgOiAyOwor
ICAgIHVuc2lnbmVkIG1faXM4Qml0IDogMTsKICAgICB1bnNpZ25lZCBtX2FsbG93VGFicyA6IDE7
CiAgICAgdW5zaWduZWQgbV9kaXJlY3Rpb24gOiAxOwogICAgIHVuc2lnbmVkIG1fZGlyZWN0aW9u
YWxPdmVycmlkZSA6IDE7IC8vIFdhcyB0aGlzIGRpcmVjdGlvbiBzZXQgYnkgYW4gb3ZlcnJpZGUg
Y2hhcmFjdGVyLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJ
dGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvV2lkdGhJdGVyYXRvci5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL1dpZHRoSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
Nyw3ICs1Nyw3IEBAIFdpZHRoSXRlcmF0b3I6OldpZHRoSXRlcmF0b3IoY29uc3QgRm9udCoKICAg
ICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAgICAgZWxzZSB7CiAgICAgICAg
IGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IG1faXNBZnRlckV4cGFuc2lvbjsKLSAgICAgICAgdW5z
aWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQobV9ydW4uY2hhcmFjdGVycygpLCBtX3J1bi5sZW5ndGgoKSwgbV9ydW4ubHRyKCkg
PyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOworICAgICAgICB1bnNpZ25lZCBleHBhbnNp
b25PcHBvcnR1bml0eUNvdW50ID0gbV9ydW4uaXM4Qml0KCkgPyBGb250OjpleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KG1fcnVuLmNoYXJhY3RlcnM4KCksIG1fcnVuLmxlbmd0aCgpLCBtX3J1bi5s
dHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbikgOiBGb250OjpleHBhbnNpb25PcHBv
cnR1bml0eUNvdW50KG1fcnVuLmNoYXJhY3RlcnMxNigpLCBtX3J1bi5sZW5ndGgoKSwgbV9ydW4u
bHRyKCkgPyBMVFIgOiBSVEwsIGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgICAgICBpZiAoaXNBZnRl
ckV4cGFuc2lvbiAmJiAhbV9ydW4uYWxsb3dzVHJhaWxpbmdFeHBhbnNpb24oKSkKICAgICAgICAg
ICAgIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQtLTsKIApAQCAtMTA2LDcgKzEwNiw3IEBAIHVu
c2lnbmVkIFdpZHRoSXRlcmF0b3I6OmFkdmFuY2UoaW50IG9mZnMKIAogICAgIFVDaGFyMzIgY2hh
cmFjdGVyID0gMDsKICAgICB1bnNpZ25lZCBjbHVzdGVyTGVuZ3RoID0gMDsKLSAgICBTdXJyb2dh
dGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgdGV4dEl0ZXJhdG9yKG1fcnVuLmRhdGEobV9jdXJyZW50
Q2hhcmFjdGVyKSwgbV9jdXJyZW50Q2hhcmFjdGVyLCBvZmZzZXQsIG1fcnVuLmxlbmd0aCgpKTsK
KyAgICBTdXJyb2dhdGVQYWlyQXdhcmVUZXh0SXRlcmF0b3IgdGV4dEl0ZXJhdG9yKG1fcnVuLmRh
dGExNihtX2N1cnJlbnRDaGFyYWN0ZXIpLCBtX2N1cnJlbnRDaGFyYWN0ZXIsIG9mZnNldCwgbV9y
dW4ubGVuZ3RoKCkpOwogICAgIHdoaWxlICh0ZXh0SXRlcmF0b3IuY29uc3VtZShjaGFyYWN0ZXIs
IGNsdXN0ZXJMZW5ndGgpKSB7CiAgICAgICAgIHVuc2lnbmVkIGFkdmFuY2VMZW5ndGggPSBjbHVz
dGVyTGVuZ3RoOwogICAgICAgICBjb25zdCBHbHlwaERhdGEmIGdseXBoRGF0YSA9IGdseXBoRGF0
YUZvckNoYXJhY3RlcihjaGFyYWN0ZXIsIHJ0bCwgdGV4dEl0ZXJhdG9yLmN1cnJlbnRDaGFyYWN0
ZXIoKSwgYWR2YW5jZUxlbmd0aCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9oYXJmYnV6ei9IYXJmQnV6elNoYXBlckJhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5j
cHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcg
Kzk3LDcgQEAgdm9pZCBIYXJmQnV6elNoYXBlckJhc2U6OnNldE5vcm1hbGl6ZWRCdQogICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9ydW4ubGVuZ3RoKCk7ICsraSkgewogICAgICAgICBVQ2hhciBj
aCA9IG1fcnVuW2ldOwogICAgICAgICBpZiAoOjp1YmxvY2tfZ2V0Q29kZShjaCkgPT0gVUJMT0NL
X0NPTUJJTklOR19ESUFDUklUSUNBTF9NQVJLUykgewotICAgICAgICAgICAgaWN1OjpOb3JtYWxp
emVyOjpub3JtYWxpemUoaWN1OjpVbmljb2RlU3RyaW5nKG1fcnVuLmNoYXJhY3RlcnMoKSwKKyAg
ICAgICAgICAgIGljdTo6Tm9ybWFsaXplcjo6bm9ybWFsaXplKGljdTo6VW5pY29kZVN0cmluZyht
X3J1bi5jaGFyYWN0ZXJzMTYoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIG1fcnVuLmxlbmd0aCgpKSwgVU5PUk1fTkZDLCAwIC8qIG5vIG9wdGlvbnMgKi8sCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3JtYWxpemVkU3RyaW5nLCBlcnJv
cik7CiAgICAgICAgICAgICBpZiAoVV9GQUlMVVJFKGVycm9yKSkKQEAgLTEwOSw3ICsxMDksNyBA
QCB2b2lkIEhhcmZCdXp6U2hhcGVyQmFzZTo6c2V0Tm9ybWFsaXplZEJ1CiAgICAgY29uc3QgVUNo
YXIqIHNvdXJjZVRleHQ7CiAgICAgaWYgKG5vcm1hbGl6ZWRTdHJpbmcuaXNFbXB0eSgpKSB7CiAg
ICAgICAgIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCA9IG1fcnVuLmxlbmd0aCgpOwotICAgICAg
ICBzb3VyY2VUZXh0ID0gbV9ydW4uY2hhcmFjdGVycygpOworICAgICAgICBzb3VyY2VUZXh0ID0g
bV9ydW4uY2hhcmFjdGVyczE2KCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgbV9ub3JtYWxpemVk
QnVmZmVyTGVuZ3RoID0gbm9ybWFsaXplZFN0cmluZy5sZW5ndGgoKTsKICAgICAgICAgc291cmNl
VGV4dCA9IG5vcm1hbGl6ZWRTdHJpbmcuZ2V0QnVmZmVyKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovbmcvSGFy
ZkJ1enpTaGFwZXIuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3Miw3ICsxNzIsNyBAQCBIYXJmQnV6elNoYXBlcjo6SGFyZkJ1enpTaGFwZXIoY29u
c3QgRm9uCiB7CiAgICAgbV9ub3JtYWxpemVkQnVmZmVyID0gYWRvcHRBcnJheVB0cihuZXcgVUNo
YXJbbV9ydW4ubGVuZ3RoKCkgKyAxXSk7CiAgICAgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoID0g
bV9ydW4ubGVuZ3RoKCk7Ci0gICAgbm9ybWFsaXplQ2hhcmFjdGVycyhtX3J1bi5jaGFyYWN0ZXJz
KCksIG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsK
KyAgICBub3JtYWxpemVDaGFyYWN0ZXJzKG1fcnVuLmNoYXJhY3RlcnMxNigpLCBtX25vcm1hbGl6
ZWRCdWZmZXIuZ2V0KCksIG1fbm9ybWFsaXplZEJ1ZmZlckxlbmd0aCk7CiAgICAgc2V0UGFkZGlu
ZyhtX3J1bi5leHBhbnNpb24oKSk7CiAgICAgc2V0Rm9udEZlYXR1cmVzKCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMv
Q29tcGxleFRleHRDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE0Nyw3ICsxNDcsNyBAQCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OkNv
bXBsZXhUZXh0Q29udHJvCiAgICAgICAgIG1fZXhwYW5zaW9uUGVyT3Bwb3J0dW5pdHkgPSAwOwog
ICAgIGVsc2UgewogICAgICAgICBib29sIGlzQWZ0ZXJFeHBhbnNpb24gPSBtX2FmdGVyRXhwYW5z
aW9uOwotICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udDo6
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi5jaGFyYWN0ZXJzKCksIG1fZW5kLCBtX3J1
bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAgIHVuc2lnbmVk
IGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNv
dW50KG1fcnVuLmNoYXJhY3RlcnMxNigpLCBtX2VuZCwgbV9ydW4ubHRyKCkgPyBMVFIgOiBSVEws
IGlzQWZ0ZXJFeHBhbnNpb24pOwogICAgICAgICBpZiAoaXNBZnRlckV4cGFuc2lvbiAmJiAhbV9y
dW4uYWxsb3dzVHJhaWxpbmdFeHBhbnNpb24oKSkKICAgICAgICAgICAgIGV4cGFuc2lvbk9wcG9y
dHVuaXR5Q291bnQtLTsKIApAQCAtMjg5LDcgKzI4OSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250
cm9sbGVyOjpjb2xsZWN0Q29tcGwKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2UgYnJlYWsg
dXAgZ2x5cGggcnVuIGdlbmVyYXRpb24gZm9yIHRoZSBzdHJpbmcgYnkgRm9udERhdGEuCi0gICAg
Y29uc3QgVUNoYXIqIGNwID0gbV9ydW4uY2hhcmFjdGVycygpOworICAgIGNvbnN0IFVDaGFyKiBj
cCA9IG1fcnVuLmNoYXJhY3RlcnMxNigpOwogCiAgICAgaWYgKG1fZm9udC5pc1NtYWxsQ2Fwcygp
KQogICAgICAgICBtX3NtYWxsQ2Fwc0J1ZmZlci5yZXNpemUobV9lbmQpOwpAQCAtNjM1LDcgKzYz
NSw3IEBAIHZvaWQgQ29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHMKICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKIAogICAgICAgICAgICAg
ICAgICAgICAvLyBBY2NvdW50IGZvciB3b3JkLXNwYWNpbmcuCi0gICAgICAgICAgICAgICAgICAg
IGlmICh0cmVhdEFzU3BhY2UgJiYgY2hhcmFjdGVySW5kZXggPiAwICYmICFGb250Ojp0cmVhdEFz
U3BhY2UoKm1fcnVuLmRhdGEoY2hhcmFjdGVySW5kZXggLSAxKSkgJiYgbV9mb250LndvcmRTcGFj
aW5nKCkpCisgICAgICAgICAgICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UgJiYgY2hhcmFjdGVy
SW5kZXggPiAwICYmICFGb250Ojp0cmVhdEFzU3BhY2UobV9ydW5bY2hhcmFjdGVySW5kZXggLSAx
XSkgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBhZHZh
bmNlLndpZHRoICs9IG1fZm9udC53b3JkU3BhY2luZygpOwogICAgICAgICAgICAgICAgIH0gZWxz
ZQogICAgICAgICAgICAgICAgICAgICBtX2FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9wYW5nby9Gb250UGFuZ28uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5n
by5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5Miw3ICsyOTIsNyBA
QCB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRlCiAgICAgUGFuZ29MYXlv
dXQqIGxheW91dCA9IHBhbmdvX2NhaXJvX2NyZWF0ZV9sYXlvdXQoY3IpOwogICAgIHNldFBhbmdv
QXR0cmlidXRlcyh0aGlzLCBydW4sIGxheW91dCk7CiAKLSAgICBnY2hhciogdXRmOCA9IGNvbnZl
cnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVuLmxl
bmd0aCgpKTsKKyAgICBnY2hhciogdXRmOCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFy
YWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOwogICAgIHBhbmdvX2xh
eW91dF9zZXRfdGV4dChsYXlvdXQsIHV0ZjgsIC0xKTsKIAogICAgIC8vIE91ciBsYXlvdXRzIGFy
ZSBzaW5nbGUgbGluZQpAQCAtMzgwLDcgKzM4MCw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhG
b3JDb21wbGV4VGV4dChjb24KICAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBh
bmdvTGF5b3V0KHJ1bik7CiAgICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0
KTsKIAotICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3Rl
cnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOworICAgIGdjaGFyKiB1dGY4ID0g
Y29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCksIDAs
IHJ1bi5sZW5ndGgoKSk7CiAgICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwg
LTEpOwogCiAgICAgaW50IHdpZHRoOwpAQCAtNDA1LDcgKzQwNSw3IEBAIGludCBGb250OjpvZmZz
ZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXgKICAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0
RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7CiAgICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1
biwgbGF5b3V0KTsKIAotICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVu
LmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOworICAgIGdjaGFy
KiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVu
Z3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CiAgICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91
dCwgdXRmOCwgLTEpOwogCiAgICAgaW50IGluZGV4LCB0cmFpbGluZzsKQEAgLTQzMCw3ICs0MzAs
NyBAQCBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUCiAgICAgUGFuZ29M
YXlvdXQqIGxheW91dCA9IGdldERlZmF1bHRQYW5nb0xheW91dChydW4pOwogICAgIHNldFBhbmdv
QXR0cmlidXRlcyh0aGlzLCBydW4sIGxheW91dCk7CiAKLSAgICBnY2hhciogdXRmOCA9IGNvbnZl
cnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVuLmxl
bmd0aCgpKTsKKyAgICBnY2hhciogdXRmOCA9IGNvbnZlcnRVbmlDaGFyVG9VVEY4KHJ1bi5jaGFy
YWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3RoKCkpOwogICAgIHBhbmdvX2xh
eW91dF9zZXRfdGV4dChsYXlvdXQsIHV0ZjgsIC0xKTsKIAogICAgIGNoYXIqIHN0YXJ0ID0gZ191
dGY4X29mZnNldF90b19wb2ludGVyKHV0ZjgsIGZyb20pOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvcXQvRm9udFF0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgc3RhdGljIHZvaWQgZHJhd1F0R2x5cGhSdW4oR3Jh
cGhpY3NDb250ZQogCiB2b2lkIEZvbnQ6OmRyYXdDb21wbGV4VGV4dChHcmFwaGljc0NvbnRleHQq
IGN0eCwgY29uc3QgVGV4dFJ1biYgcnVuLCBjb25zdCBGbG9hdFBvaW50JiBwb2ludCwgaW50IGZy
b20sIGludCB0bykgY29uc3QKIHsKLSAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFs
aXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgU3RyaW5nIHNh
bml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5s
ZW5ndGgoKSk7CiAgICAgY29uc3QgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRS
ZWYoc2FuaXRpemVkKTsKICAgICBRVGV4dExheW91dCBsYXlvdXQoc3RyaW5nKTsKICAgICBsYXlv
dXQuc2V0UmF3Rm9udChyYXdGb250KCkpOwpAQCAtMjAxLDcgKzIwMSw3IEBAIGZsb2F0IEZvbnQ6
OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChjb24KIAogICAgIGlmIChydW4ubGVuZ3RoKCkgPT0g
MSAmJiB0cmVhdEFzU3BhY2UocnVuWzBdKSkKICAgICAgICAgcmV0dXJuIHByaW1hcnlGb250KCkt
PnNwYWNlV2lkdGgoKSArIHJ1bi5leHBhbnNpb24oKTsKLSAgICBTdHJpbmcgc2FuaXRpemVkID0g
Rm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7Cisg
ICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVy
czE2KCksIHJ1bi5sZW5ndGgoKSk7CiAgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdp
dGhvdXRSZWYoc2FuaXRpemVkKTsKIAogICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcpOwpA
QCAtMjE3LDcgKzIxNyw3IEBAIGZsb2F0IEZvbnQ6OmZsb2F0V2lkdGhGb3JDb21wbGV4VGV4dChj
b24KIAogaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleHQoY29uc3QgVGV4
dFJ1biYgcnVuLCBmbG9hdCBwb3NpdGlvbiwgYm9vbCkgY29uc3QKIHsKLSAgICBTdHJpbmcgc2Fu
aXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5n
dGgoKSk7CisgICAgU3RyaW5nIHNhbml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4u
Y2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgoKSk7CiAgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9t
UmF3RGF0YVdpdGhvdXRSZWYoc2FuaXRpemVkKTsKIAogICAgIFFUZXh0TGF5b3V0IGxheW91dChz
dHJpbmcpOwpAQCAtMjI5LDcgKzIyOSw3IEBAIGludCBGb250OjpvZmZzZXRGb3JQb3NpdGlvbkZv
ckNvbXBsZXhUZXgKIAogRmxvYXRSZWN0IEZvbnQ6OnNlbGVjdGlvblJlY3RGb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHB0LCBpbnQgaCwgaW50IGZy
b20sIGludCB0bykgY29uc3QKIHsKLSAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFs
aXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAgU3RyaW5nIHNh
bml0aXplZCA9IEZvbnQ6Om5vcm1hbGl6ZVNwYWNlcyhydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5s
ZW5ndGgoKSk7CiAgICAgUVN0cmluZyBzdHJpbmcgPSBmcm9tUmF3RGF0YVdpdGhvdXRSZWYoc2Fu
aXRpemVkKTsKIAogICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcpOwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9VbmlzY3Jp
YmVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDksNyArMTA5LDcgQEAgdm9pZCBVbmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKHVu
c2lnbgogICAgICAgICByZXR1cm47CiAKICAgICAvLyBJdGVtaXplIHRoZSBzdHJpbmcuCi0gICAg
Y29uc3QgVUNoYXIqIGNwID0gbV9ydW4uZGF0YShtX2N1cnJlbnRDaGFyYWN0ZXIpOworICAgIGNv
bnN0IFVDaGFyKiBjcCA9IG1fcnVuLmRhdGExNihtX2N1cnJlbnRDaGFyYWN0ZXIpOwogICAgIHVu
c2lnbmVkIGJhc2VDaGFyYWN0ZXIgPSBtX2N1cnJlbnRDaGFyYWN0ZXI7CiAKICAgICAvLyBXZSBi
cmVhayB1cCBpdGVtaXphdGlvbiBvZiB0aGUgc3RyaW5nIGJ5IGZvbnREYXRhIGFuZCAoaWYgbmVl
ZGVkKSB0aGUgdXNlIG9mIHNtYWxsIGNhcHMuCkBAIC0zMzAsNyArMzMwLDcgQEAgYm9vbCBVbmlz
Y3JpYmVDb250cm9sbGVyOjpzaGFwZUFuZFBsYWNlSQogICAgICAgICAgICAgICAgIH0KIAogICAg
ICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAgICAg
ICBpZiAoY2hhcmFjdGVySW5kZXggPiAwICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKm1fcnVuLmRh
dGEoY2hhcmFjdGVySW5kZXggLSAxKSkgJiYgbV9mb250LndvcmRTcGFjaW5nKCkpCisgICAgICAg
ICAgICAgICAgaWYgKGNoYXJhY3RlckluZGV4ID4gMCAmJiAhRm9udDo6dHJlYXRBc1NwYWNlKCpt
X3J1bi5kYXRhMTYoY2hhcmFjdGVySW5kZXggLSAxKSkgJiYgbV9mb250LndvcmRTcGFjaW5nKCkp
CiAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2UgKz0gbV9mb250LndvcmRTcGFjaW5nKCk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyVGV4dC5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg3OSw3ICsxODc5LDcgQEAgaW50
IFJlbmRlclRleHQ6Om5leHRPZmZzZXQoaW50IGN1cnJlbnQpIAogCiBib29sIFJlbmRlclRleHQ6
OmNvbXB1dGVDYW5Vc2VTaW1wbGVGb250Q29kZVBhdGgoKSBjb25zdAogewotICAgIGlmIChpc0Fs
bEFTQ0lJKCkpCisgICAgaWYgKGlzQWxsQVNDSUkoKSB8fCBtX3RleHQuaXM4Qml0KCkpCiAgICAg
ICAgIHJldHVybiB0cnVlOwogICAgIHJldHVybiBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRo
KGNoYXJhY3RlcnMoKSwgbGVuZ3RoKCkpID09IEZvbnQ6OlNpbXBsZTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3BwCShyZXZpc2lv
biAxMjc1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTYsNyArNTYsNyBAQCBTVkdUZXh0TWV0cmljczo6U1ZH
VGV4dE1ldHJpY3MoUmVuZGVyU1ZHCiAgICAgbV93aWR0aCA9IHNjYWxlZEZvbnQud2lkdGgocnVu
LCBsZW5ndGgsIG1fZ2x5cGgubmFtZSkgLyBzY2FsaW5nRmFjdG9yOwogICAgIG1faGVpZ2h0ID0g
c2NhbGVkRm9udC5mb250TWV0cmljcygpLmZsb2F0SGVpZ2h0KCkgLyBzY2FsaW5nRmFjdG9yOwog
Ci0gICAgbV9nbHlwaC51bmljb2RlU3RyaW5nID0gU3RyaW5nKHJ1bi5jaGFyYWN0ZXJzKCksIGxl
bmd0aCk7CisgICAgbV9nbHlwaC51bmljb2RlU3RyaW5nID0gcnVuLmlzOEJpdCgpID8gU3RyaW5n
KHJ1bi5jaGFyYWN0ZXJzOCgpLCBsZW5ndGgpIDogU3RyaW5nKHJ1bi5jaGFyYWN0ZXJzMTYoKSwg
bGVuZ3RoKTsKICAgICBtX2dseXBoLmlzVmFsaWQgPSB0cnVlOwogCiAgICAgQVNTRVJUKGxlbmd0
aCA+PSAwKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvc3Zn
L1NWR1RleHRNZXRyaWNzQnVpbGRlci5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzAsNyArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFNWR1RleHRNZXRy
aWNzQnVpbGRlcjo6U1ZHVGV4dE1ldHJpY3NCdWlsZGVyKCkKICAgICA6IG1fdGV4dCgwKQotICAg
ICwgbV9ydW4oMCwgMCkKKyAgICAsIG1fcnVuKHN0YXRpY19jYXN0PGNvbnN0IFVDaGFyKj4oMCks
IDApCiAgICAgLCBtX3RleHRQb3NpdGlvbigwKQogICAgICwgbV9pc0NvbXBsZXhUZXh0KGZhbHNl
KQogICAgICwgbV90b3RhbFdpZHRoKDApCkBAIC0xNDgsNyArMTQ4LDcgQEAgdm9pZCBTVkdUZXh0
TWV0cmljc0J1aWxkZXI6Om1lYXN1cmVUZXh0UgogICAgIGludCBzdXJyb2dhdGVQYWlyQ2hhcmFj
dGVycyA9IDA7CiAKICAgICB3aGlsZSAoYWR2YW5jZSgpKSB7Ci0gICAgICAgIGNvbnN0IFVDaGFy
KiBjdXJyZW50Q2hhcmFjdGVyID0gbV9ydW4uZGF0YShtX3RleHRQb3NpdGlvbik7CisgICAgICAg
IGNvbnN0IFVDaGFyKiBjdXJyZW50Q2hhcmFjdGVyID0gbV9ydW4uZGF0YTE2KG1fdGV4dFBvc2l0
aW9uKTsKICAgICAgICAgaWYgKCpjdXJyZW50Q2hhcmFjdGVyID09ICcgJyAmJiAhcHJlc2VydmVX
aGl0ZVNwYWNlICYmICghZGF0YS0+bGFzdENoYXJhY3RlciB8fCAqZGF0YS0+bGFzdENoYXJhY3Rl
ciA9PSAnICcpKSB7CiAgICAgICAgICAgICBpZiAoZGF0YS0+cHJvY2Vzc1JlbmRlcmVyKQogICAg
ICAgICAgICAgICAgIHRleHRNZXRyaWNzVmFsdWVzLT5hcHBlbmQoU1ZHVGV4dE1ldHJpY3MoU1ZH
VGV4dE1ldHJpY3M6OlNraXBwZWRTcGFjZU1ldHJpY3MpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3N2Zy9TVkdGb250RGF0YS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnREYXRhLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvc3ZnL1NW
R0ZvbnREYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM0LDcgKzEzNCw3IEBAIGJvb2wgU1ZH
Rm9udERhdGE6OmFwcGx5U1ZHR2x5cGhTZWxlY3Rpb24KICAgICBBU1NFUlQoaW50KHJ1bi5jaGFy
YWN0ZXJzTGVuZ3RoKCkpID49IGN1cnJlbnRDaGFyYWN0ZXIpOwogCiAgICAgLy8gQXNzb2NpYXRl
IHRleHQgd2l0aCBhcmFiaWMgZm9ybXMsIGlmIG5lZWRlZC4KLSAgICBTdHJpbmcgcmVtYWluaW5n
VGV4dEluUnVuKHJ1bi5kYXRhKGN1cnJlbnRDaGFyYWN0ZXIpLCBydW4uY2hhcmFjdGVyc0xlbmd0
aCgpIC0gY3VycmVudENoYXJhY3Rlcik7CisgICAgU3RyaW5nIHJlbWFpbmluZ1RleHRJblJ1bihy
dW4uZGF0YTE2KGN1cnJlbnRDaGFyYWN0ZXIpLCBydW4uY2hhcmFjdGVyc0xlbmd0aCgpIC0gY3Vy
cmVudENoYXJhY3Rlcik7CiAgICAgcmVtYWluaW5nVGV4dEluUnVuID0gRm9udDo6bm9ybWFsaXpl
U3BhY2VzKHJlbWFpbmluZ1RleHRJblJ1bi5jaGFyYWN0ZXJzKCksIHJlbWFpbmluZ1RleHRJblJ1
bi5sZW5ndGgoKSk7CiAgICAgaWYgKG1pcnJvcikKICAgICAgICAgcmVtYWluaW5nVGV4dEluUnVu
ID0gY3JlYXRlU3RyaW5nV2l0aE1pcnJvcmVkQ2hhcmFjdGVycyhyZW1haW5pbmdUZXh0SW5SdW4u
Y2hhcmFjdGVycygpLCByZW1haW5pbmdUZXh0SW5SdW4ubGVuZ3RoKCkpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>162516</attachid>
            <date>2012-09-06 08:50:31 -0700</date>
            <delta_ts>2012-09-06 08:50:31 -0700</delta_ts>
            <desc>Performance results from last posted patch</desc>
            <filename>95812 Perf.pdf</filename>
            <type>application/pdf</type>
            <size>24818</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">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
WtlsdymhTpBIA7aIOvasKHIXLfW2DXb79FcoTfUQ/w5ftJHeePw4UJa+1MMPw6HcBg4zZ18ySNpx
5z9fR7tO2Q6sq11r5U3vutp5pcyuq52r5ZHTutpxZyVfRzvuBOTLaHc9e/fUmF2uUe+fG6fLNeJO
w62rEXeubV2NuBNq62rEnTVbVyPu1Ni6GtETYKvqw540KtUo4nykwR+QHdkTQ2vqw538WVMf7gTP
mvpwJ3HW1IeeqVlTG+5szJr6mOGl9GHPUTymz3IduBMQn60Dd3rhs3Vo/fo6+B+c+5drEP5Br5V1
aMz9E5EfpQP3nv0Tdfgf1AvqxQplbmRzdHJlYW0KZW5kb2JqCgozIDAgb2JqCjIwMDAKZW5kb2Jq
Cgo1IDAgb2JqCjw8L0xlbmd0aCA2IDAgUi9GaWx0ZXIvRmxhdGVEZWNvZGU+PgpzdHJlYW0KeJzN
m8mO2zgQhu9+Cp0HiEbctAANA4mXw9wCGJjDYG6z3AZILnn9kUW6TaU2Li3BCEB03Oi/qj4VySJL
7lrV/Dh8a7r5X690M0y6+f734fdfmv8OXxv/edd8//fw5XZQvWpdM+ihHZvbX82vV9WMbd/c/vnj
rbPHT+pNDUf11rn7j92wjNdlvGiz/Hr5TfjZ/8Hn5+g/78Zl1P7vwt8v/9P2+Oftt8Pldvh6WPul
p7G1uF9qEVDnZbws45enK7NhQtL03QyGk1x8UqdIUvOSgZ4aWvOK9DC/VvRcFOopiR4j6VmpSPKS
RK/r2+kV6WF+kfRsEj1G0tMzkeSZl9T2Tq+f+nn8SVJ3x0/mEfQQMLDBojJksC74ygbLScKJpsJI
SFpt2oGQ/AxklrzTpJjPu37sPzrreMTQ3vuK9cSc9OgDYEHwmjsT+8G1OzPBLJJUBMlAJUtSAB24
9K7V+3LBLJJBmCQuoqTO3fd6Z+dJuSsXzCLJJWlHy5MUUAcu1n58PcBzwSxWziNRMs6XtHlkzMfv
9DwXzCIZRFq+ZEmmrbvz5mb35YJZrMwXUTLmck3ionaeRdAeuaGmrbmCYEamhGqv03BzK6j2MBnh
8UvVniiZsVyEag+VjKs99yQnVXtu0rOX5dkUnyk+/qyBehco2WhtinPvwj8QTjJ+LBn7vRtV1X6/
MUPMuxXD+GiatKZ9qGRgOKiq2mBjhph3ZB4+PuEZipLxmTctD2fhmtuqjRli3q0Czii0A0NRMj8P
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
R4XH70fzq2bN3T9faxzfOUobVRWuH19zYOK0krIr2rq7v62SaT9Q2TRaWQlta2LZD2SX0eyJtK0y
2lYZbWuiNpG1hRiPT5u7X4/G1oybnwwPEJMR+LXOn1kz1iW3jGbMOyrTc5v/CGgre5ApWhOTwmNj
ZnA0a8iYIWNoFswpmmWh/x0mleW5bVSm/wjek8qSIVkJj0XR9jVta5Cnqml88q8NPpDUvoYiPOlH
2/7VB/KqYlr9ePq/9qpj+TOrY5XT583dr9NBah0dUmxkOs1kqupO9CQTh0LiSJrIcf0FaVoFTTMY
UgX/O/3XpEJ2gtxBjh7AWhC3o7YaLhasnkVAFMxK/RuOI6BL0eWhrQYG2IajuC1dR6rb6Xv/UUTH
nHbta1JQChftqTD5JrzSlkZJ/4ciK9qPsXaoEP0/GNwfOwplbmRzdHJlYW0KZW5kb2JqCgo5IDAg
b2JqCjE4NDEwCmVuZG9iagoKMTAgMCBvYmoKPDwvVHlwZS9Gb250RGVzY3JpcHRvci9Gb250TmFt
ZS9CQUFBQUErQXJpYWxNVAovRmxhZ3MgNAovRm9udEJCb3hbLTY2NCAtMzI0IDIwMDAgMTAwNl0v
SXRhbGljQW5nbGUgMAovQXNjZW50IDkwNQovRGVzY2VudCAtMjExCi9DYXBIZWlnaHQgMTAwNQov
U3RlbVYgODAKL0ZvbnRGaWxlMiA4IDAgUgo+PgplbmRvYmoKCjExIDAgb2JqCjw8L0xlbmd0aCA0
MDUvRmlsdGVyL0ZsYXRlRGVjb2RlPj4Kc3RyZWFtCnicXZLPbsIwDIfvfYoc2QG1SVoKEqrEgEoc
9kdje4DSGlZpTatQDrz9Yv+6TdqB6otjJ1+M4+1hd3DtGL/6vj7SqM6tazxd+5uvSZ3o0rpIG9W0
9Tit5Ft31RDFofZ4v47UHdy5X6+j+C3sXUd/V7NN05/oIYpffEO+dRc1+9gew/p4G4Yv6siNKomK
QjV0Duc8VcNz1VEsVfNDE7bb8T4PJX8J7/eBlJG1hkrdN3Qdqpp85S4UrZOkUOuyLCJyzb+9dCo5
nevPyodUHVKTJEuKwEZ4kTFb4dwwp4gvmDNwybwA75hzsGZegvfMK7Bl3ggbuetROJX4FndJfIf8
FfMecckpwWlgnSBnyQx/y/ka/pb9Nfyt5MDfspuGv+V3afinwpP/lhn+Wc4M/1Tuhb9lTw1/w2/U
8LeSD3/LvdLwt+yv4W/5HAP/lPtm4G/Y2cDfSBz+GffZTP2XWvjn/C4z9Z/9DfxzOQf+OfsY+Ocr
GYbpX+ex4Ln9GTdV37wPoybDLTPG09U6+p3/oR+4Sn7fB/zK4wplbmRzdHJlYW0KZW5kb2JqCgox
MiAwIG9iago8PC9UeXBlL0ZvbnQvU3VidHlwZS9UcnVlVHlwZS9CYXNlRm9udC9CQUFBQUErQXJp
YWxNVAovRmlyc3RDaGFyIDAKL0xhc3RDaGFyIDQxCi9XaWR0aHNbNzUwIDY2NiA1NTYgMzMzIDI3
NyA1NTYgODMzIDU1NiA1NTYgNTAwIDI3NyA3MjIgNTU2IDIyMiA1MDAgMjc3CjU1NiA1NTYgNTU2
IDU1NiA1NTYgNTU2IDY2NiAyMjIgOTQzIDcyMiA1NTYgMjc3IDU1NiA1NTYgNTU2IDU1Ngo4MzMg
ODg5IDMzMyA1NTYgNTU2IDUwMCA1NTYgNTU2IDcyMiA1MDAgXQovRm9udERlc2NyaXB0b3IgMTAg
MCBSCi9Ub1VuaWNvZGUgMTEgMCBSCj4+CmVuZG9iagoKMTMgMCBvYmoKPDwvRjEgMTIgMCBSCj4+
CmVuZG9iagoKMTQgMCBvYmoKPDwvRm9udCAxMyAwIFIKL1Byb2NTZXRbL1BERi9UZXh0XQo+Pgpl
bmRvYmoKCjEgMCBvYmoKPDwvVHlwZS9QYWdlL1BhcmVudCA3IDAgUi9SZXNvdXJjZXMgMTQgMCBS
L01lZGlhQm94WzAgMCA2MTIgNzkyXS9Hcm91cDw8L1MvVHJhbnNwYXJlbmN5L0NTL0RldmljZVJH
Qi9JIHRydWU+Pi9Db250ZW50cyAyIDAgUj4+CmVuZG9iagoKNCAwIG9iago8PC9UeXBlL1BhZ2Uv
UGFyZW50IDcgMCBSL1Jlc291cmNlcyAxNCAwIFIvTWVkaWFCb3hbMCAwIDYxMiA3OTJdL0dyb3Vw
PDwvUy9UcmFuc3BhcmVuY3kvQ1MvRGV2aWNlUkdCL0kgdHJ1ZT4+L0NvbnRlbnRzIDUgMCBSPj4K
ZW5kb2JqCgoxNSAwIG9iago8PC9Db3VudCAxL0ZpcnN0IDE2IDAgUi9MYXN0IDE2IDAgUgo+Pgpl
bmRvYmoKCjE2IDAgb2JqCjw8L0NvdW50IDAvVGl0bGU8RkVGRjAwMzkwMDM1MDAzODAwMzEwMDMy
MDAyMDAwNzYwMDMyMDAyMDAwMzgwMDIwMDA3MjAwNzUwMDZFMDA3Mz4KL1BhcmVudCAxNSAwIFI+
PgplbmRvYmoKCjcgMCBvYmoKPDwvVHlwZS9QYWdlcwovUmVzb3VyY2VzIDE0IDAgUgovTWVkaWFC
b3hbIDAgMCA2MTIgNzkyIF0KL0tpZHNbIDEgMCBSIDQgMCBSIF0KL0NvdW50IDI+PgplbmRvYmoK
CjE3IDAgb2JqCjw8L1R5cGUvQ2F0YWxvZy9QYWdlcyA3IDAgUgovT3BlbkFjdGlvblsxIDAgUiAv
WFlaIG51bGwgbnVsbCAwXQovT3V0bGluZXMgMTUgMCBSCj4+CmVuZG9iagoKMTggMCBvYmoKPDwv
QXV0aG9yPEZFRkYwMDREMDA2OTAwNjMwMDY4MDA2MTAwNjUwMDZDMDAyMDAwNTMwMDYxMDA2MjAw
NkYwMDY2MDA2Nj4KL0NyZWF0b3I8RkVGRjAwNDMwMDYxMDA2QzAwNjM+Ci9Qcm9kdWNlcjxGRUZG
MDA0RjAwNzAwMDY1MDA2RTAwNEYwMDY2MDA2NjAwNjkwMDYzMDA2NTAwMkUwMDZGMDA3MjAwNjcw
MDIwMDAzMzAwMkUwMDMzPgovQ3JlYXRpb25EYXRlKEQ6MjAxMjA5MDYwODQyNTctMDcnMDAnKT4+
CmVuZG9iagoKeHJlZgowIDE5CjAwMDAwMDAwMDAgNjU1MzUgZiAKMDAwMDAyMzMyMCAwMDAwMCBu
IAowMDAwMDAwMDE5IDAwMDAwIG4gCjAwMDAwMDIwOTAgMDAwMDAgbiAKMDAwMDAyMzQ2MyAwMDAw
MCBuIAowMDAwMDAyMTExIDAwMDAwIG4gCjAwMDAwMDM3MTAgMDAwMDAgbiAKMDAwMDAyMzc3OSAw
MDAwMCBuIAowMDAwMDAzNzMxIDAwMDAwIG4gCjAwMDAwMjIyMjYgMDAwMDAgbiAKMDAwMDAyMjI0
OCAwMDAwMCBuIAowMDAwMDIyNDM4IDAwMDAwIG4gCjAwMDAwMjI5MTMgMDAwMDAgbiAKMDAwMDAy
MzIzMiAwMDAwMCBuIAowMDAwMDIzMjY1IDAwMDAwIG4gCjAwMDAwMjM2MDYgMDAwMDAgbiAKMDAw
MDAyMzY2MiAwMDAwMCBuIAowMDAwMDIzODg0IDAwMDAwIG4gCjAwMDAwMjM5ODUgMDAwMDAgbiAK
dHJhaWxlcgo8PC9TaXplIDE5L1Jvb3QgMTcgMCBSCi9JbmZvIDE4IDAgUgovSUQgWyA8OEM5MDk5
NzIzRDVBMTExNzE5MUY0MEM2QUZCRTA2MkY+Cjw4QzkwOTk3MjNENUExMTE3MTkxRjQwQzZBRkJF
MDYyRj4gXQovRG9jQ2hlY2tzdW0gLzJFOTFENkZFN0QwMjgzMTU1NEI1ODI5NUNCRTAyMkMwCj4+
CnN0YXJ0eHJlZgoyNDIzNAolJUVPRgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162518</attachid>
            <date>2012-09-06 08:57:17 -0700</date>
            <delta_ts>2012-09-06 09:51:32 -0700</delta_ts>
            <desc>Fixed indent style issue.</desc>
            <filename>95812-3.patch</filename>
            <type>text/plain</type>
            <size>30364</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzY1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDEyLTA5LTA1ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCA4IGJpdCBzdHJpbmcg
ZGF0YSBwYXRoIHRvIFRleHRSdW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk1ODEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgOCBiaXQgc3RyaW5nIHBhdGggdG8gVGV4dFJ1bi4gIFJlZmFjdG9y
ZWQgVGV4dFJ1bjo6ZGF0YSgpIGFuZCA6OmNoYXJhY3RlcnMgaW50bworICAgICAgICA4IGFuZCAx
NiBiaXQgdmVyc2lvbnMuICBNYWRlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB1c2VycyBvZiBU
ZXh0UnVuLgorICAgICAgICBGb3IgZWZsLCBndGssIHF0IGFuZCB3aW4gcGxhdGZvcm0gc3BlY2lm
aWMgY29kZSB1c2luZyBUZXh0UnVuLCBvbmx5IHRoZSBtZXRob2RzIGhhdmUKKyAgICAgICAgYmVl
biByZW5hbWVkIGFuZCB0aGUgY3JlYXRpb24gb2YgOCBiaXQgdGV0IHJ1bnMgaGFzIGJlZW4gZGlz
YWJsZWQgdmlhIGNvbXBpbGF0aW9uCisgICAgICAgIGZsYWdzLiAgU29tZW9uZSBrbm93bGVkZ2li
bGUgaW4gdGhvc2UgcGxhdGZvcm1zIHdpbGwgbmVlZCB0byBtYWtlIGNvcnJlc3BvbmRpbmcgY2hh
bmdlcworICAgICAgICB0byBlbmFibGUgOCBiaXQgcHJvY2Vzc2luZyBvZiBUZXh0UnVucy4KKwor
ICAgICAgICBObyBjaGFuZ2VzIHRvIGZ1bmN0aW9uYWxpdHkgLSBiZWhhdmlvciBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVTcGFjZXNJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Ojpub3JtYWxpemVTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDpu
b3JtYWxpemVTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y29kZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2hh
cmFjdGVyUmFuZ2VDb2RlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpub3JtYWxpemVT
cGFjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHA6CisgICAgICAgIChFeHBlY3RlZFRl
eHRSdW5TaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW46OnN1YlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpvcGVyYXRvcltdKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmRhdGE4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW46OmRhdGExNik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpjaGFyYWN0ZXJzOCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpjaGFyYWN0ZXJzMTYpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJ1bjo6aXM4Qml0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNldFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c2V0Q2hhcmFjdGVyc0xlbmd0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZHRoSXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlckJhc2U6OnNldE5vcm1hbGl6ZWRCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhh
cmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21w
bGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHNBbmRBZHZh
bmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29t
cGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVt
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpjb21wdXRlQ2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRNZXRyaWNzOjpTVkdUZXh0TWV0cmljcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyOjpTVkdUZXh0TWV0cmljc0J1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcv
U1ZHRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZH
R2x5cGhTZWxlY3Rpb24pOgorCiAyMDEyLTA5LTA1ICBCcnVubyBkZSBPbGl2ZWlyYSBBYmluYWRl
ciAgPGJydW5vLmFiaW5hZGVyQGJhc3lza29tLmNvbT4KIAogICAgICAgICBNYWtlIFJlbmRlclN0
eWxlOjpjb2xvckluY2x1ZGluZ0ZhbGxiYWNrIHVzZSBwcml2YXRlIGdldHRlcnMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxMjc1MjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDE3ICsyNDQsMzUgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdQogICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KHJ1
biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1TdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6
ZVNwYWNlc0ludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7CiAgICAgbm9ybWFsaXpl
ZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQobm9ybWFsaXplU3BhY2Vz
KGNoYXJhY3RlcnNbaV0pKTsKKyAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFs
aXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKIAogICAgIHJldHVybiBub3JtYWxpemVkLnRvU3Ry
aW5nKCk7CiB9CiAKK1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2Vz
SW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworU3RyaW5nIEZvbnQ6Om5vcm1hbGl6
ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQor
CitTdHJpbmcgRm9udDo6bm9ybWFsaXplU3BhY2VzKGNvbnN0IFRleHRSdW4mIHJ1bikKK3sKKyAg
ICBpZiAocnVuLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gbm9ybWFsaXplU3BhY2VzSW50ZXJu
YWwocnVuLmNoYXJhY3RlcnM4KCksIHJ1bi5sZW5ndGgoKSk7CisgICAgcmV0dXJuIG5vcm1hbGl6
ZVNwYWNlc0ludGVybmFsKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKK30KKwog
c3RhdGljIGJvb2wgc2hvdWxkVXNlRm9udFNtb290aGluZyA9IHRydWU7CiAKIHZvaWQgRm9udDo6
c2V0U2hvdWxkVXNlU21vb3RoaW5nKGJvb2wgc2hvdWxkVXNlU21vb3RoaW5nKQpAQCAtMjk3LDgg
KzMxNSwxMSBAQCBGb250OjpDb2RlUGF0aCBGb250Ojpjb2RlUGF0aChjb25zdCBUZXh0CiAgICAg
aWYgKCFydW4uY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKCkpCiAgICAgICAgIHJldHVybiBTaW1w
bGU7CiAKKyAgICBpZiAocnVuLmlzOEJpdCgpKQorICAgICAgICByZXR1cm4gU2ltcGxlOworCiAg
ICAgLy8gU3RhcnQgZnJvbSAwIHNpbmNlIGRyYXdpbmcgYW5kIGhpZ2hsaWdodGluZyBhbHNvIG1l
YXN1cmUgdGhlIGNoYXJhY3RlcnMgYmVmb3JlIHJ1bi0+ZnJvbS4KLSAgICByZXR1cm4gY2hhcmFj
dGVyUmFuZ2VDb2RlUGF0aChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCkpOworICAgIHJl
dHVybiBjaGFyYWN0ZXJSYW5nZUNvZGVQYXRoKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0
aCgpKTsKIH0KIAogRm9udDo6Q29kZVBhdGggRm9udDo6Y2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChj
b25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuKQpAQCAtNTU3LDYgKzU3OCwyOSBA
QCBib29sIEZvbnQ6OmlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzCiAgICAgcmV0dXJuIGlz
Q0pLSWRlb2dyYXBoKGMpOwogfQogCit1bnNpZ25lZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0
eUNvdW50KGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lvbikKK3sKKyAgICB1bnNpZ25lZCBj
b3VudCA9IDA7CisgICAgaWYgKGRpcmVjdGlvbiA9PSBMVFIpIHsKKyAgICAgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFj
ZShjaGFyYWN0ZXJzW2ldKSkgeworICAgICAgICAgICAgICAgIGNvdW50Kys7CisgICAgICAgICAg
ICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAg
ICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBmb3IgKHNpemVfdCBpID0gbGVuZ3RoOyBpID4gMDsgLS1pKSB7CisgICAg
ICAgICAgICBpZiAodHJlYXRBc1NwYWNlKGNoYXJhY3RlcnNbaSAtIDFdKSkgeworICAgICAgICAg
ICAgICAgIGNvdW50Kys7CisgICAgICAgICAgICAgICAgaXNBZnRlckV4cGFuc2lvbiA9IHRydWU7
CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0g
ZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGNvdW50OworfQorCiB1bnNpZ25l
ZCBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
LCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4
cGFuc2lvbikKIHsKICAgICBzdGF0aWMgYm9vbCBleHBhbmRBcm91bmRJZGVvZ3JhcGhzID0gY2Fu
RXhwYW5kQXJvdW5kSWRlb2dyYXBoc0luQ29tcGxleFRleHQoKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmgJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTgzLDYg
KzE4Myw3IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaChVQ2hhcjMy
KTsKICAgICBzdGF0aWMgYm9vbCBpc0NKS0lkZW9ncmFwaE9yU3ltYm9sKFVDaGFyMzIpOwogCisg
ICAgc3RhdGljIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgTENoYXIq
LCBzaXplX3QgbGVuZ3RoLCBUZXh0RGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKTsK
ICAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBVQ2hh
ciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24p
OwogCiAjaWYgUExBVEZPUk0oUVQpCkBAIC0xOTUsNiArMTk2LDcgQEAgcHVibGljOgogCiAgICAg
ZW51bSBDb2RlUGF0aCB7IEF1dG8sIFNpbXBsZSwgQ29tcGxleCwgU2ltcGxlV2l0aEdseXBoT3Zl
cmZsb3cgfTsKICAgICBDb2RlUGF0aCBjb2RlUGF0aChjb25zdCBUZXh0UnVuJikgY29uc3Q7Cisg
ICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY29uc3QgTENoYXIqLCB1
bnNpZ25lZCkgeyByZXR1cm4gU2ltcGxlOyB9CiAgICAgc3RhdGljIENvZGVQYXRoIGNoYXJhY3Rl
clJhbmdlQ29kZVBhdGgoY29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW4pOwogICAgIAogcHJpdmF0
ZToKQEAgLTI0NSw3ICsyNDcsOCBAQCBwdWJsaWM6CiAgICAgc3RhdGljIGJvb2wgdHJlYXRBc1pl
cm9XaWR0aFNwYWNlSW5Db21wbGV4U2NyaXB0KFVDaGFyIGMpIHsgcmV0dXJuIGMgPCAweDIwIHx8
IChjID49IDB4N0YgJiYgYyA8IDB4QTApIHx8IGMgPT0gc29mdEh5cGhlbiB8fCBjID09IHplcm9X
aWR0aFNwYWNlIHx8IChjID49IDB4MjAwZSAmJiBjIDw9IDB4MjAwZikgfHwgKGMgPj0gMHgyMDJh
ICYmIGMgPD0gMHgyMDJlKSB8fCBjID09IHplcm9XaWR0aE5vQnJlYWtTcGFjZSB8fCBjID09IG9i
amVjdFJlcGxhY2VtZW50Q2hhcmFjdGVyOyB9CiAgICAgc3RhdGljIGJvb2wgY2FuUmVjZWl2ZVRl
eHRFbXBoYXNpcyhVQ2hhcjMyIGMpOwogCi0gICAgc3RhdGljIGlubGluZSBVQ2hhciBub3JtYWxp
emVTcGFjZXMoVUNoYXIgY2hhcmFjdGVyKQorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBDaGFyYWN0
ZXJUeXBlPgorICAgIHN0YXRpYyBpbmxpbmUgQ2hhcmFjdGVyVHlwZSBub3JtYWxpemVTcGFjZXMo
Q2hhcmFjdGVyVHlwZSBjaGFyYWN0ZXIpCiAgICAgewogICAgICAgICBpZiAodHJlYXRBc1NwYWNl
KGNoYXJhY3RlcikpCiAgICAgICAgICAgICByZXR1cm4gc3BhY2U7CkBAIC0yNTYsNyArMjU5LDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gY2hhcmFjdGVyOwogICAgIH0KIAorICAgIHN0YXRp
YyBTdHJpbmcgbm9ybWFsaXplU3BhY2VzKGNvbnN0IExDaGFyKiwgdW5zaWduZWQgbGVuZ3RoKTsK
ICAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBVQ2hhciosIHVuc2lnbmVk
IGxlbmd0aCk7CisgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMoY29uc3QgVGV4dFJ1
biYpOwogCiAgICAgYm9vbCBuZWVkc1RyYW5zY29kaW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZWVk
c1RyYW5zY29kaW5nOyB9CiAgICAgRm9udEZhbGxiYWNrTGlzdCogZm9udExpc3QoKSBjb25zdCB7
IHJldHVybiBtX2ZvbnRMaXN0LmdldCgpOyB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJKHJldmlzaW9uIDEyNzUy
NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMyw4ICs0MTMsNyBAQCB2b2lkIEdyYXBoaWNzQ29udGV4
dDo6ZHJhd0JpZGlUZXh0KGNvbnN0CiAgICAgRmxvYXRQb2ludCBjdXJyUG9pbnQgPSBwb2ludDsK
ICAgICBCaWRpQ2hhcmFjdGVyUnVuKiBiaWRpUnVuID0gYmlkaVJ1bnMuZmlyc3RSdW4oKTsKICAg
ICB3aGlsZSAoYmlkaVJ1bikgewotICAgICAgICBUZXh0UnVuIHN1YnJ1biA9IHJ1bjsKLSAgICAg
ICAgc3VicnVuLnNldFRleHQocnVuLmRhdGEoYmlkaVJ1bi0+c3RhcnQoKSksIGJpZGlSdW4tPnN0
b3AoKSAtIGJpZGlSdW4tPnN0YXJ0KCkpOworICAgICAgICBUZXh0UnVuIHN1YnJ1biA9IHJ1bi5z
dWJSdW4oYmlkaVJ1bi0+c3RhcnQoKSwgYmlkaVJ1bi0+c3RvcCgpIC0gYmlkaVJ1bi0+c3RhcnQo
KSk7CiAgICAgICAgIGJvb2wgaXNSVEwgPSBiaWRpUnVuLT5sZXZlbCgpICUgMjsKICAgICAgICAg
c3VicnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFJUTCA6IExUUik7CiAgICAgICAgIHN1YnJ1bi5z
ZXREaXJlY3Rpb25hbE92ZXJyaWRlKGJpZGlSdW4tPmRpck92ZXJyaWRlKGZhbHNlKSk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmNwcAkocmV2aXNp
b24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgc3RydWN0IEV4cGVjdGVkVGV4dFJ1
blNpemUgewogICAgIGZsb2F0IGZsb2F0MjsKICNlbmRpZgogICAgIGZsb2F0IGZsb2F0MzsKLSAg
ICB1aW50MzJfdCBiaXRmaWVsZHMgOiA5OworICAgIHVpbnQzMl90IGJpdGZpZWxkcyA6IDEwOwog
ICAgIHVuc2lnbmVkIGFuVW5zaWduZWQ7CiAgICAgUmVmUHRyPFRleHRSdW46OlJlbmRlcmluZ0Nv
bnRleHQ+IHJlbmRlcmluZ0NvbnRleHQ7CiB9OwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw5ICs1
OCw5IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgdW5zaWduZWQgUm91bmRpbmdIYWNrczsKIAot
ICAgIFRleHRSdW4oY29uc3QgVUNoYXIqIGMsIGludCBsZW4sIGZsb2F0IHhwb3MgPSAwLCBmbG9h
dCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNpb25CZWhhdmlvciA9IEFs
bG93VHJhaWxpbmdFeHBhbnNpb24gfCBGb3JiaWRMZWFkaW5nRXhwYW5zaW9uLCBUZXh0RGlyZWN0
aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJyaWRlID0gZmFsc2UsIGJv
b2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSwgUm91bmRpbmdIYWNrcyByb3VuZGlu
Z0hhY2tzID0gUnVuUm91bmRpbmcgfCBXb3JkUm91bmRpbmcpCi0gICAgICAgIDogbV9jaGFyYWN0
ZXJzKGMpCi0gICAgICAgICwgbV9jaGFyYWN0ZXJzTGVuZ3RoKGxlbikKKyNpZiBQTEFURk9STShN
QUMpCisgICAgVGV4dFJ1bihjb25zdCBMQ2hhciogYywgdW5zaWduZWQgbGVuLCBmbG9hdCB4cG9z
ID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVo
YXZpb3IgPSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwg
VGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9
IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWUsIFJvdW5kaW5nSGFj
a3Mgcm91bmRpbmdIYWNrcyA9IFJ1blJvdW5kaW5nIHwgV29yZFJvdW5kaW5nKQorICAgICAgICA6
IG1fY2hhcmFjdGVyc0xlbmd0aChsZW4pCiAgICAgICAgICwgbV9sZW4obGVuKQogICAgICAgICAs
IG1feHBvcyh4cG9zKQogI2lmIEVOQUJMRShTVkcpCkBAIC02OCw2ICs2OCw3IEBAIHB1YmxpYzoK
ICNlbmRpZgogICAgICAgICAsIG1fZXhwYW5zaW9uKGV4cGFuc2lvbikKICAgICAgICAgLCBtX2V4
cGFuc2lvbkJlaGF2aW9yKGV4cGFuc2lvbkJlaGF2aW9yKQorICAgICAgICAsIG1faXM4Qml0KHRy
dWUpCiAgICAgICAgICwgbV9hbGxvd1RhYnMoZmFsc2UpCiAgICAgICAgICwgbV9kaXJlY3Rpb24o
ZGlyZWN0aW9uKQogICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rpb25hbE92
ZXJyaWRlKQpAQCAtNzcsMTEgKzc4LDM0IEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Rpc2FibGVT
cGFjaW5nKGZhbHNlKQogICAgICAgICAsIG1fdGFiU2l6ZSgwKQogICAgIHsKKyAgICAgICAgbV9k
YXRhLmNoYXJhY3RlcnM4ID0gYzsKICAgICB9CisjZW5kaWYKIAorICAgIFRleHRSdW4oY29uc3Qg
VUNoYXIqIGMsIHVuc2lnbmVkIGxlbiwgZmxvYXQgeHBvcyA9IDAsIGZsb2F0IGV4cGFuc2lvbiA9
IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0gQWxsb3dUcmFpbGluZ0V4
cGFuc2lvbiB8IEZvcmJpZExlYWRpbmdFeHBhbnNpb24sIFRleHREaXJlY3Rpb24gZGlyZWN0aW9u
ID0gTFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwgYm9vbCBjaGFyYWN0ZXJT
Y2FuRm9yQ29kZVBhdGggPSB0cnVlLCBSb3VuZGluZ0hhY2tzIHJvdW5kaW5nSGFja3MgPSBSdW5S
b3VuZGluZyB8IFdvcmRSb3VuZGluZykKKyAgICAgICAgOiBtX2NoYXJhY3RlcnNMZW5ndGgobGVu
KQorICAgICAgICAsIG1fbGVuKGxlbikKKyAgICAgICAgLCBtX3hwb3MoeHBvcykKKyNpZiBFTkFC
TEUoU1ZHKQorICAgICAgICAsIG1faG9yaXpvbnRhbEdseXBoU3RyZXRjaCgxKQorI2VuZGlmCisg
ICAgICAgICwgbV9leHBhbnNpb24oZXhwYW5zaW9uKQorICAgICAgICAsIG1fZXhwYW5zaW9uQmVo
YXZpb3IoZXhwYW5zaW9uQmVoYXZpb3IpCisgICAgICAgICwgbV9pczhCaXQoZmFsc2UpCisgICAg
ICAgICwgbV9hbGxvd1RhYnMoZmFsc2UpCisgICAgICAgICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9u
KQorICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rpb25hbE92ZXJyaWRlKQor
ICAgICAgICAsIG1fY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKGNoYXJhY3RlclNjYW5Gb3JDb2Rl
UGF0aCkKKyAgICAgICAgLCBtX2FwcGx5UnVuUm91bmRpbmcoKHJvdW5kaW5nSGFja3MgJiBSdW5S
b3VuZGluZykgJiYgc19hbGxvd3NSb3VuZGluZ0hhY2tzKQorICAgICAgICAsIG1fYXBwbHlXb3Jk
Um91bmRpbmcoKHJvdW5kaW5nSGFja3MgJiBXb3JkUm91bmRpbmcpICYmIHNfYWxsb3dzUm91bmRp
bmdIYWNrcykKKyAgICAgICAgLCBtX2Rpc2FibGVTcGFjaW5nKGZhbHNlKQorICAgICAgICAsIG1f
dGFiU2l6ZSgwKQorICAgIHsKKyAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnMxNiA9IGM7CisgICAg
fQorICAgIAogICAgIFRleHRSdW4oY29uc3QgU3RyaW5nJiBzLCBmbG9hdCB4cG9zID0gMCwgZmxv
YXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBB
bGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgRm9yYmlkTGVhZGluZ0V4cGFuc2lvbiwgVGV4dERpcmVj
dGlvbiBkaXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBi
b29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWUsIFJvdW5kaW5nSGFja3Mgcm91bmRp
bmdIYWNrcyA9IFJ1blJvdW5kaW5nIHwgV29yZFJvdW5kaW5nKQotICAgICAgICA6IG1fY2hhcmFj
dGVycyhzLmNoYXJhY3RlcnMoKSkKLSAgICAgICAgLCBtX2NoYXJhY3RlcnNMZW5ndGgocy5sZW5n
dGgoKSkKKyAgICAgICAgOiBtX2NoYXJhY3RlcnNMZW5ndGgocy5sZW5ndGgoKSkKICAgICAgICAg
LCBtX2xlbihzLmxlbmd0aCgpKQogICAgICAgICAsIG1feHBvcyh4cG9zKQogI2lmIEVOQUJMRShT
VkcpCkBAIC05OCwxNyArMTIyLDUyIEBAIHB1YmxpYzoKICAgICAgICAgLCBtX2Rpc2FibGVTcGFj
aW5nKGZhbHNlKQogICAgICAgICAsIG1fdGFiU2l6ZSgwKQogICAgIHsKKyNpZiBQTEFURk9STShN
QUMpCisgICAgICAgIGlmIChtX2NoYXJhY3RlcnNMZW5ndGggJiYgcy5pczhCaXQoKSkgeworICAg
ICAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnMxNiA9IHMuY2hhcmFjdGVycygpOworICAgICAgICAg
ICAgbV9pczhCaXQgPSBmYWxzZTsKKy8vIEZJWE1FOiBDaGFuZ2UgdGhpcyB0bzoKKy8vICAgICAg
ICAgIG1fZGF0YS5jaGFyYWN0ZXJzOCA9IHMuY2hhcmFjdGVyczgoKTsKKy8vICAgICAgICAgIG1f
aXM4Qml0ID0gdHJ1ZTsKKy8vIHdoZW4gb3RoZXIgOCBiaXQgcmVuZGVyaW5nIGNoYW5nZXMgYXJl
IGxhbmRlZC4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJz
MTYgPSBzLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIG1faXM4Qml0ID0gZmFsc2U7CisgICAg
ICAgIH0KKyNlbHNlCisgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzMTYgPSBzLmNoYXJhY3RlcnMo
KTsKKyAgICAgICAgbV9pczhCaXQgPSBmYWxzZTsKKyNlbmRpZgogICAgIH0KIAotICAgIFVDaGFy
IG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgQVNTRVJUKGkgPj0gMCAmJiBpIDwgbV9sZW4pOyBy
ZXR1cm4gbV9jaGFyYWN0ZXJzW2ldOyB9Ci0gICAgY29uc3QgVUNoYXIqIGRhdGEoaW50IGkpIGNv
bnN0IHsgQVNTRVJUKGkgPj0gMCAmJiBpIDwgbV9sZW4pOyByZXR1cm4gJm1fY2hhcmFjdGVyc1tp
XTsgfQorICAgIFRleHRSdW4gc3ViUnVuKHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBs
ZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoc3RhcnRPZmZzZXQgPCBtX2xlbik7
CisKKyAgICAgICAgVGV4dFJ1biByZXN1bHQgPSAqdGhpczsKKworICAgICAgICBpZiAoaXM4Qml0
KCkpCisgICAgICAgICAgICByZXN1bHQuc2V0VGV4dChkYXRhOChzdGFydE9mZnNldCksIGxlbmd0
aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5zZXRUZXh0KGRhdGExNihzdGFy
dE9mZnNldCksIGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CiAKLSAg
ICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fY2hhcmFjdGVyczsg
fQorICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3QgeyBBU1NFUlQoaSA8IG1f
bGVuKTsgcmV0dXJuIGlzOEJpdCgpID8gbV9kYXRhLmNoYXJhY3RlcnM4W2ldIDptX2RhdGEuY2hh
cmFjdGVyczE2W2ldOyB9CisgICAgY29uc3QgTENoYXIqIGRhdGE4KHVuc2lnbmVkIGkpIGNvbnN0
IHsgQVNTRVJUKGkgPCBtX2xlbik7IEFTU0VSVChpczhCaXQoKSk7IHJldHVybiAmbV9kYXRhLmNo
YXJhY3RlcnM4W2ldOyB9CisgICAgY29uc3QgVUNoYXIqIGRhdGExNih1bnNpZ25lZCBpKSBjb25z
dCB7IEFTU0VSVChpIDwgbV9sZW4pOyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0dXJuICZtX2RhdGEu
Y2hhcmFjdGVyczE2W2ldOyB9CisKKyAgICBjb25zdCBMQ2hhciogY2hhcmFjdGVyczgoKSBjb25z
dCB7IEFTU0VSVChpczhCaXQoKSk7IHJldHVybiBtX2RhdGEuY2hhcmFjdGVyczg7IH0KKyAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3QgeyBBU1NFUlQoIWlzOEJpdCgpKTsgcmV0
dXJuIG1fZGF0YS5jaGFyYWN0ZXJzMTY7IH0KKyAgICAKKyAgICBib29sIGlzOEJpdCgpIGNvbnN0
IHsgcmV0dXJuIG1faXM4Qml0OyB9CiAgICAgaW50IGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1f
bGVuOyB9CiAgICAgaW50IGNoYXJhY3RlcnNMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX2NoYXJh
Y3RlcnNMZW5ndGg7IH0KIAotICAgIHZvaWQgc2V0VGV4dChjb25zdCBVQ2hhciogYywgaW50IGxl
bikgeyBtX2NoYXJhY3RlcnMgPSBjOyBtX2xlbiA9IGxlbjsgfQotICAgIHZvaWQgc2V0Q2hhcmFj
dGVyc0xlbmd0aChpbnQgY2hhcmFjdGVyc0xlbmd0aCkgeyBtX2NoYXJhY3RlcnNMZW5ndGggPSBj
aGFyYWN0ZXJzTGVuZ3RoOyB9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IExDaGFyKiBjLCB1bnNp
Z25lZCBsZW4pIHsgbV9kYXRhLmNoYXJhY3RlcnM4ID0gYzsgbV9sZW4gPSBsZW47IG1faXM4Qml0
ID0gdHJ1ZTt9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFVDaGFyKiBjLCB1bnNpZ25lZCBsZW4p
IHsgbV9kYXRhLmNoYXJhY3RlcnMxNiA9IGM7IG1fbGVuID0gbGVuOyBtX2lzOEJpdCA9IGZhbHNl
O30KKyAgICB2b2lkIHNldENoYXJhY3RlcnNMZW5ndGgodW5zaWduZWQgY2hhcmFjdGVyc0xlbmd0
aCkgeyBtX2NoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzTGVuZ3RoOyB9CiAKICNpZiBFTkFC
TEUoU1ZHKQogICAgIGZsb2F0IGhvcml6b250YWxHbHlwaFN0cmV0Y2goKSBjb25zdCB7IHJldHVy
biBtX2hvcml6b250YWxHbHlwaFN0cmV0Y2g7IH0KQEAgLTE1OSw5ICsyMTgsMTIgQEAgcHVibGlj
OgogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzX2FsbG93c1JvdW5kaW5nSGFja3M7CiAKLSAg
ICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwotICAgIGludCBtX2NoYXJhY3RlcnNMZW5ndGg7
IC8vIE1hcmtzIHRoZSBlbmQgb2YgdGhlIG1fY2hhcmFjdGVycyBidWZmZXIuIERlZmF1bHQgZXF1
YWxzIHRvIG1fbGVuLgotICAgIGludCBtX2xlbjsKKyAgICB1bmlvbiB7CisgICAgICAgIGNvbnN0
IExDaGFyKiBjaGFyYWN0ZXJzODsKKyAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMxNjsK
KyAgICB9IG1fZGF0YTsKKyAgICB1bnNpZ25lZCBtX2NoYXJhY3RlcnNMZW5ndGg7IC8vIE1hcmtz
IHRoZSBlbmQgb2YgdGhlIGNoYXJhY3RlcnMgYnVmZmVyLiBEZWZhdWx0IGVxdWFscyB0byBtX2xl
bi4KKyAgICB1bnNpZ25lZCBtX2xlbjsKIAogICAgIC8vIG1feHBvcyBpcyB0aGUgeCBwb3NpdGlv
biByZWxhdGl2ZSB0byB0aGUgbGVmdCBzdGFydCBvZiB0aGUgdGV4dCBsaW5lLCBub3QgcmVsYXRp
dmUgdG8gdGhlIGxlZnQKICAgICAvLyBzdGFydCBvZiB0aGUgY29udGFpbmluZyBibG9jay4gSW4g
dGhlIGNhc2Ugb2YgcmlnaHQgYWxpZ25tZW50IG9yIGNlbnRlciBhbGlnbm1lbnQsIGxlZnQgc3Rh
cnQgb2YKQEAgLTE3Myw2ICsyMzUsNyBAQCBwcml2YXRlOgogCiAgICAgZmxvYXQgbV9leHBhbnNp
b247CiAgICAgRXhwYW5zaW9uQmVoYXZpb3IgbV9leHBhbnNpb25CZWhhdmlvciA6IDI7CisgICAg
dW5zaWduZWQgbV9pczhCaXQgOiAxOwogICAgIHVuc2lnbmVkIG1fYWxsb3dUYWJzIDogMTsKICAg
ICB1bnNpZ25lZCBtX2RpcmVjdGlvbiA6IDE7CiAgICAgdW5zaWduZWQgbV9kaXJlY3Rpb25hbE92
ZXJyaWRlIDogMTsgLy8gV2FzIHRoaXMgZGlyZWN0aW9uIHNldCBieSBhbiBvdmVycmlkZSBjaGFy
YWN0ZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9X
aWR0aEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDcg
KzU3LDcgQEAgV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25zdCBGb250KgogICAgICAg
ICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKICAgICBlbHNlIHsKICAgICAgICAgYm9v
bCBpc0FmdGVyRXhwYW5zaW9uID0gbV9pc0FmdGVyRXhwYW5zaW9uOwotICAgICAgICB1bnNpZ25l
ZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlD
b3VudChtX3J1bi5jaGFyYWN0ZXJzKCksIG1fcnVuLmxlbmd0aCgpLCBtX3J1bi5sdHIoKSA/IExU
UiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQgPSBtX3J1bi5pczhCaXQoKSA/IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQobV9ydW4uY2hhcmFjdGVyczgoKSwgbV9ydW4ubGVuZ3RoKCksIG1fcnVuLmx0cigp
ID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKSA6IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQobV9ydW4uY2hhcmFjdGVyczE2KCksIG1fcnVuLmxlbmd0aCgpLCBtX3J1bi5sdHIo
KSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhw
YW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAg
ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOwogCkBAIC0xMDYsNyArMTA2LDcgQEAgdW5zaWdu
ZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2ZmcwogCiAgICAgVUNoYXIzMiBjaGFyYWN0
ZXIgPSAwOwogICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAwOwotICAgIFN1cnJvZ2F0ZVBh
aXJBd2FyZVRleHRJdGVyYXRvciB0ZXh0SXRlcmF0b3IobV9ydW4uZGF0YShtX2N1cnJlbnRDaGFy
YWN0ZXIpLCBtX2N1cnJlbnRDaGFyYWN0ZXIsIG9mZnNldCwgbV9ydW4ubGVuZ3RoKCkpOworICAg
IFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB0ZXh0SXRlcmF0b3IobV9ydW4uZGF0YTE2
KG1fY3VycmVudENoYXJhY3RlciksIG1fY3VycmVudENoYXJhY3Rlciwgb2Zmc2V0LCBtX3J1bi5s
ZW5ndGgoKSk7CiAgICAgd2hpbGUgKHRleHRJdGVyYXRvci5jb25zdW1lKGNoYXJhY3RlciwgY2x1
c3Rlckxlbmd0aCkpIHsKICAgICAgICAgdW5zaWduZWQgYWR2YW5jZUxlbmd0aCA9IGNsdXN0ZXJM
ZW5ndGg7CiAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRhID0gZ2x5cGhEYXRhRm9y
Q2hhcmFjdGVyKGNoYXJhY3RlciwgcnRsLCB0ZXh0SXRlcmF0b3IuY3VycmVudENoYXJhY3Rlcigp
LCBhZHZhbmNlTGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlLmNwcAko
cmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFy
ZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTcsNyArOTcs
NyBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyQmFzZTo6c2V0Tm9ybWFsaXplZEJ1CiAgICAgZm9yIChp
bnQgaSA9IDA7IGkgPCBtX3J1bi5sZW5ndGgoKTsgKytpKSB7CiAgICAgICAgIFVDaGFyIGNoID0g
bV9ydW5baV07CiAgICAgICAgIGlmICg6OnVibG9ja19nZXRDb2RlKGNoKSA9PSBVQkxPQ0tfQ09N
QklOSU5HX0RJQUNSSVRJQ0FMX01BUktTKSB7Ci0gICAgICAgICAgICBpY3U6Ok5vcm1hbGl6ZXI6
Om5vcm1hbGl6ZShpY3U6OlVuaWNvZGVTdHJpbmcobV9ydW4uY2hhcmFjdGVycygpLAorICAgICAg
ICAgICAgaWN1OjpOb3JtYWxpemVyOjpub3JtYWxpemUoaWN1OjpVbmljb2RlU3RyaW5nKG1fcnVu
LmNoYXJhY3RlcnMxNigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
bV9ydW4ubGVuZ3RoKCkpLCBVTk9STV9ORkMsIDAgLyogbm8gb3B0aW9ucyAqLywKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRTdHJpbmcsIGVycm9yKTsK
ICAgICAgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQpAQCAtMTA5LDcgKzEwOSw3IEBAIHZv
aWQgSGFyZkJ1enpTaGFwZXJCYXNlOjpzZXROb3JtYWxpemVkQnUKICAgICBjb25zdCBVQ2hhciog
c291cmNlVGV4dDsKICAgICBpZiAobm9ybWFsaXplZFN0cmluZy5pc0VtcHR5KCkpIHsKICAgICAg
ICAgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoID0gbV9ydW4ubGVuZ3RoKCk7Ci0gICAgICAgIHNv
dXJjZVRleHQgPSBtX3J1bi5jaGFyYWN0ZXJzKCk7CisgICAgICAgIHNvdXJjZVRleHQgPSBtX3J1
bi5jaGFyYWN0ZXJzMTYoKTsKICAgICB9IGVsc2UgewogICAgICAgICBtX25vcm1hbGl6ZWRCdWZm
ZXJMZW5ndGggPSBub3JtYWxpemVkU3RyaW5nLmxlbmd0aCgpOwogICAgICAgICBzb3VyY2VUZXh0
ID0gbm9ybWFsaXplZFN0cmluZy5nZXRCdWZmZXIoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJmYnV6ei9uZy9IYXJmQnV6
elNoYXBlci5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTcyLDcgKzE3Miw3IEBAIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcihjb25zdCBG
b24KIHsKICAgICBtX25vcm1hbGl6ZWRCdWZmZXIgPSBhZG9wdEFycmF5UHRyKG5ldyBVQ2hhcltt
X3J1bi5sZW5ndGgoKSArIDFdKTsKICAgICBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggPSBtX3J1
bi5sZW5ndGgoKTsKLSAgICBub3JtYWxpemVDaGFyYWN0ZXJzKG1fcnVuLmNoYXJhY3RlcnMoKSwg
bV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZmZXJMZW5ndGgpOworICAg
IG5vcm1hbGl6ZUNoYXJhY3RlcnMobV9ydW4uY2hhcmFjdGVyczE2KCksIG1fbm9ybWFsaXplZEJ1
ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKICAgICBzZXRQYWRkaW5nKG1f
cnVuLmV4cGFuc2lvbigpKTsKICAgICBzZXRGb250RmVhdHVyZXMoKTsKIH0KSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21w
bGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9sbGVyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIENvbXBsZXhUZXh0Q29udHJvbGxlcjo6Q29tcGxl
eFRleHRDb250cm8KICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1bml0eSA9IDA7CiAgICAg
ZWxzZSB7CiAgICAgICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IG1fYWZ0ZXJFeHBhbnNpb247
Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBGb250OjpleHBh
bnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLmNoYXJhY3RlcnMoKSwgbV9lbmQsIG1fcnVuLmx0
cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAgICAgdW5zaWduZWQgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQo
bV9ydW4uY2hhcmFjdGVyczE2KCksIG1fZW5kLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNB
ZnRlckV4cGFuc2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5h
bGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5p
dHlDb3VudC0tOwogCkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xs
ZXI6OmNvbGxlY3RDb21wbAogICAgICAgICByZXR1cm47CiAKICAgICAvLyBXZSBicmVhayB1cCBn
bHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBieSBGb250RGF0YS4KLSAgICBjb25z
dCBVQ2hhciogY3AgPSBtX3J1bi5jaGFyYWN0ZXJzKCk7CisgICAgY29uc3QgVUNoYXIqIGNwID0g
bV9ydW4uY2hhcmFjdGVyczE2KCk7CiAKICAgICBpZiAobV9mb250LmlzU21hbGxDYXBzKCkpCiAg
ICAgICAgIG1fc21hbGxDYXBzQnVmZmVyLnJlc2l6ZShtX2VuZCk7CkBAIC02MzUsNyArNjM1LDcg
QEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBocwogICAgICAgICAgICAg
ICAgICAgICAgICAgbV9hZnRlckV4cGFuc2lvbiA9IGZhbHNlOwogCiAgICAgICAgICAgICAgICAg
ICAgIC8vIEFjY291bnQgZm9yIHdvcmQtc3BhY2luZy4KLSAgICAgICAgICAgICAgICAgICAgaWYg
KHRyZWF0QXNTcGFjZSAmJiBjaGFyYWN0ZXJJbmRleCA+IDAgJiYgIUZvbnQ6OnRyZWF0QXNTcGFj
ZSgqbV9ydW4uZGF0YShjaGFyYWN0ZXJJbmRleCAtIDEpKSAmJiBtX2ZvbnQud29yZFNwYWNpbmco
KSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSAmJiBjaGFyYWN0ZXJJbmRl
eCA+IDAgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZShtX3J1bltjaGFyYWN0ZXJJbmRleCAtIDFdKSAm
JiBtX2ZvbnQud29yZFNwYWNpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGFkdmFuY2Uu
d2lkdGggKz0gbV9mb250LndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIG1fYWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5nby5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNw
cAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
cGFuZ28vRm9udFBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDcgKzI5Miw3IEBAIHZv
aWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAgICBQYW5nb0xheW91dCog
bGF5b3V0ID0gcGFuZ29fY2Fpcm9fY3JlYXRlX2xheW91dChjcik7CiAgICAgc2V0UGFuZ29BdHRy
aWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKIAotICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVu
aUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3Ro
KCkpOworICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3Rl
cnMxNigpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CiAgICAgcGFuZ29fbGF5b3V0
X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwogCiAgICAgLy8gT3VyIGxheW91dHMgYXJlIHNp
bmdsZSBsaW5lCkBAIC0zODAsNyArMzgwLDcgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KGNvbgogICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZhdWx0UGFuZ29M
YXlvdXQocnVuKTsKICAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBsYXlvdXQpOwog
Ci0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVycygp
LCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgZ2NoYXIqIHV0ZjggPSBjb252
ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVu
Lmxlbmd0aCgpKTsKICAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0LCB1dGY4LCAtMSk7
CiAKICAgICBpbnQgd2lkdGg7CkBAIC00MDUsNyArNDA1LDcgQEAgaW50IEZvbnQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleAogICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBnZXREZWZh
dWx0UGFuZ29MYXlvdXQocnVuKTsKICAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywgcnVuLCBs
YXlvdXQpOwogCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hh
cmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgZ2NoYXIqIHV0
ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5sZW5ndGgo
KSwgMCwgcnVuLmxlbmd0aCgpKTsKICAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5b3V0LCB1
dGY4LCAtMSk7CiAKICAgICBpbnQgaW5kZXgsIHRyYWlsaW5nOwpAQCAtNDMwLDcgKzQzMCw3IEBA
IEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFQKICAgICBQYW5nb0xheW91
dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7CiAgICAgc2V0UGFuZ29BdHRy
aWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKIAotICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVu
aUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpLCAwLCBydW4ubGVuZ3Ro
KCkpOworICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3Rl
cnMxNigpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CiAgICAgcGFuZ29fbGF5b3V0
X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwogCiAgICAgY2hhciogc3RhcnQgPSBnX3V0Zjhf
b2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UXRHbHlwaFJ1bihHcmFwaGlj
c0NvbnRlCiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGV4dCogY3R4
LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50LCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVT
cGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgc2FuaXRp
emVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0
aCgpKTsKICAgICBjb25zdCBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihz
YW5pdGl6ZWQpOwogICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcpOwogICAgIGxheW91dC5z
ZXRSYXdGb250KHJhd0ZvbnQoKSk7CkBAIC0yMDEsNyArMjAxLDcgQEAgZmxvYXQgRm9udDo6Zmxv
YXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbgogCiAgICAgaWYgKHJ1bi5sZW5ndGgoKSA9PSAxICYm
IHRyZWF0QXNTcGFjZShydW5bMF0pKQogICAgICAgICByZXR1cm4gcHJpbWFyeUZvbnQoKS0+c3Bh
Y2VXaWR0aCgpICsgcnVuLmV4cGFuc2lvbigpOwotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250
Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAgICBT
dHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzMTYo
KSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91
dFJlZihzYW5pdGl6ZWQpOwogCiAgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZyk7CkBAIC0y
MTcsNyArMjE3LDcgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbgog
CiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dChjb25zdCBUZXh0UnVu
JiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sKSBjb25zdAogewotICAgIFN0cmluZyBzYW5pdGl6
ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgp
KTsKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFy
YWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdE
YXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCiAgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmlu
Zyk7CkBAIC0yMjksNyArMjI5LDcgQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29t
cGxleFRleAogCiBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhUZXh0KGNv
bnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQsIGludCBoLCBpbnQgZnJvbSwg
aW50IHRvKSBjb25zdAogewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVT
cGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgc2FuaXRp
emVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0
aCgpKTsKICAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6
ZWQpOwogCiAgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZyk7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL1VuaXNjcmliZUNv
bnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwOSw3ICsxMDksNyBAQCB2b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6OmFkdmFuY2UodW5zaWdu
CiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEl0ZW1pemUgdGhlIHN0cmluZy4KLSAgICBjb25z
dCBVQ2hhciogY3AgPSBtX3J1bi5kYXRhKG1fY3VycmVudENoYXJhY3Rlcik7CisgICAgY29uc3Qg
VUNoYXIqIGNwID0gbV9ydW4uZGF0YTE2KG1fY3VycmVudENoYXJhY3Rlcik7CiAgICAgdW5zaWdu
ZWQgYmFzZUNoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3RlcjsKIAogICAgIC8vIFdlIGJyZWFr
IHVwIGl0ZW1pemF0aW9uIG9mIHRoZSBzdHJpbmcgYnkgZm9udERhdGEgYW5kIChpZiBuZWVkZWQp
IHRoZSB1c2Ugb2Ygc21hbGwgY2Fwcy4KQEAgLTMzMCw3ICszMzAsNyBAQCBib29sIFVuaXNjcmli
ZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJCiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAg
ICAgICAgICAgLy8gQWNjb3VudCBmb3Igd29yZC1zcGFjaW5nLgotICAgICAgICAgICAgICAgIGlm
IChjaGFyYWN0ZXJJbmRleCA+IDAgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZSgqbV9ydW4uZGF0YShj
aGFyYWN0ZXJJbmRleCAtIDEpKSAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkKKyAgICAgICAgICAg
ICAgICBpZiAoY2hhcmFjdGVySW5kZXggPiAwICYmICFGb250Ojp0cmVhdEFzU3BhY2UoKm1fcnVu
LmRhdGExNihjaGFyYWN0ZXJJbmRleCAtIDEpKSAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkKICAg
ICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2ZvbnQud29yZFNwYWNpbmcoKTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
clRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODc5LDcgKzE4NzksNyBAQCBpbnQgUmVu
ZGVyVGV4dDo6bmV4dE9mZnNldChpbnQgY3VycmVudCkgCiAKIGJvb2wgUmVuZGVyVGV4dDo6Y29t
cHV0ZUNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpIGNvbnN0CiB7Ci0gICAgaWYgKGlzQWxsQVND
SUkoKSkKKyAgICBpZiAoaXNBbGxBU0NJSSgpIHx8IG1fdGV4dC5pczhCaXQoKSkKICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIEZvbnQ6OmNoYXJhY3RlclJhbmdlQ29kZVBhdGgoY2hh
cmFjdGVycygpLCBsZW5ndGgoKSkgPT0gRm9udDo6U2ltcGxlOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAJKHJldmlzaW9uIDEy
NzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3MuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFNWR1RleHRNZXRyaWNzOjpTVkdUZXh0
TWV0cmljcyhSZW5kZXJTVkcKICAgICBtX3dpZHRoID0gc2NhbGVkRm9udC53aWR0aChydW4sIGxl
bmd0aCwgbV9nbHlwaC5uYW1lKSAvIHNjYWxpbmdGYWN0b3I7CiAgICAgbV9oZWlnaHQgPSBzY2Fs
ZWRGb250LmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKSAvIHNjYWxpbmdGYWN0b3I7CiAKLSAg
ICBtX2dseXBoLnVuaWNvZGVTdHJpbmcgPSBTdHJpbmcocnVuLmNoYXJhY3RlcnMoKSwgbGVuZ3Ro
KTsKKyAgICBtX2dseXBoLnVuaWNvZGVTdHJpbmcgPSBydW4uaXM4Qml0KCkgPyBTdHJpbmcocnVu
LmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBTdHJpbmcocnVuLmNoYXJhY3RlcnMxNigpLCBsZW5n
dGgpOwogICAgIG1fZ2x5cGguaXNWYWxpZCA9IHRydWU7CiAKICAgICBBU1NFUlQobGVuZ3RoID49
IDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1
aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU1ZHVGV4dE1ldHJpY3NC
dWlsZGVyOjpTVkdUZXh0TWV0cmljc0J1aWxkZXIoKQogICAgIDogbV90ZXh0KDApCi0gICAgLCBt
X3J1bigwLCAwKQorICAgICwgbV9ydW4oc3RhdGljX2Nhc3Q8Y29uc3QgVUNoYXIqPigwKSwgMCkK
ICAgICAsIG1fdGV4dFBvc2l0aW9uKDApCiAgICAgLCBtX2lzQ29tcGxleFRleHQoZmFsc2UpCiAg
ICAgLCBtX3RvdGFsV2lkdGgoMCkKQEAgLTE0OCw3ICsxNDgsNyBAQCB2b2lkIFNWR1RleHRNZXRy
aWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSCiAgICAgaW50IHN1cnJvZ2F0ZVBhaXJDaGFyYWN0ZXJz
ID0gMDsKIAogICAgIHdoaWxlIChhZHZhbmNlKCkpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGN1
cnJlbnRDaGFyYWN0ZXIgPSBtX3J1bi5kYXRhKG1fdGV4dFBvc2l0aW9uKTsKKyAgICAgICAgY29u
c3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIgPSBtX3J1bi5kYXRhMTYobV90ZXh0UG9zaXRpb24p
OwogICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXIgPT0gJyAnICYmICFwcmVzZXJ2ZVdoaXRl
U3BhY2UgJiYgKCFkYXRhLT5sYXN0Q2hhcmFjdGVyIHx8ICpkYXRhLT5sYXN0Q2hhcmFjdGVyID09
ICcgJykpIHsKICAgICAgICAgICAgIGlmIChkYXRhLT5wcm9jZXNzUmVuZGVyZXIpCiAgICAgICAg
ICAgICAgICAgdGV4dE1ldHJpY3NWYWx1ZXMtPmFwcGVuZChTVkdUZXh0TWV0cmljcyhTVkdUZXh0
TWV0cmljczo6U2tpcHBlZFNwYWNlTWV0cmljcykpOwpJbmRleDogU291cmNlL1dlYkNvcmUvc3Zn
L1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisrKyBTb3VyY2UvV2ViQ29yZS9zdmcvU1ZHRm9u
dERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcgQEAgYm9vbCBTVkdGb250
RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlvbgogICAgIEFTU0VSVChpbnQocnVuLmNoYXJhY3Rl
cnNMZW5ndGgoKSkgPj0gY3VycmVudENoYXJhY3Rlcik7CiAKICAgICAvLyBBc3NvY2lhdGUgdGV4
dCB3aXRoIGFyYWJpYyBmb3JtcywgaWYgbmVlZGVkLgotICAgIFN0cmluZyByZW1haW5pbmdUZXh0
SW5SdW4ocnVuLmRhdGEoY3VycmVudENoYXJhY3RlciksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkg
LSBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICBTdHJpbmcgcmVtYWluaW5nVGV4dEluUnVuKHJ1bi5k
YXRhMTYoY3VycmVudENoYXJhY3RlciksIHJ1bi5jaGFyYWN0ZXJzTGVuZ3RoKCkgLSBjdXJyZW50
Q2hhcmFjdGVyKTsKICAgICByZW1haW5pbmdUZXh0SW5SdW4gPSBGb250Ojpub3JtYWxpemVTcGFj
ZXMocmVtYWluaW5nVGV4dEluUnVuLmNoYXJhY3RlcnMoKSwgcmVtYWluaW5nVGV4dEluUnVuLmxl
bmd0aCgpKTsKICAgICBpZiAobWlycm9yKQogICAgICAgICByZW1haW5pbmdUZXh0SW5SdW4gPSBj
cmVhdGVTdHJpbmdXaXRoTWlycm9yZWRDaGFyYWN0ZXJzKHJlbWFpbmluZ1RleHRJblJ1bi5jaGFy
YWN0ZXJzKCksIHJlbWFpbmluZ1RleHRJblJ1bi5sZW5ndGgoKSk7Cg==
</data>
<flag name="commit-queue"
          id="173658"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>162527</attachid>
            <date>2012-09-06 09:51:32 -0700</date>
            <delta_ts>2012-09-06 15:06:48 -0700</delta_ts>
            <desc>Patch to fix truncation compile error</desc>
            <filename>95812-4.patch</filename>
            <type>text/plain</type>
            <size>29410</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzY1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc3IEBACisyMDEyLTA5LTA2ICBNaWNoYWVs
IFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAgICAgIEFkZCA4IGJpdCBzdHJpbmcg
ZGF0YSBwYXRoIHRvIFRleHRSdW4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTk1ODEyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgQWRkZWQgOCBiaXQgc3RyaW5nIHBhdGggdG8gVGV4dFJ1bi4gIFJlZmFjdG9y
ZWQgVGV4dFJ1bjo6ZGF0YSgpIGFuZCA6OmNoYXJhY3RlcnMgaW50bworICAgICAgICA4IGFuZCAx
NiBiaXQgdmVyc2lvbnMuICBNYWRlIGNvcnJlc3BvbmRpbmcgY2hhbmdlcyB0byB1c2VycyBvZiBU
ZXh0UnVuLgorICAgICAgICBGb3IgZWZsLCBndGssIHF0IGFuZCB3aW4gcGxhdGZvcm0gc3BlY2lm
aWMgY29kZSB1c2luZyBUZXh0UnVuLCBvbmx5IHRoZSBtZXRob2RzIGhhdmUKKyAgICAgICAgYmVl
biByZW5hbWVkIGFuZCB0aGUgY3JlYXRpb24gb2YgOCBiaXQgdGV0IHJ1bnMgaGFzIGJlZW4gZGlz
YWJsZWQgdmlhIGNvbXBpbGF0aW9uCisgICAgICAgIGZsYWdzLiAgU29tZW9uZSBrbm93bGVkZ2li
bGUgaW4gdGhvc2UgcGxhdGZvcm1zIHdpbGwgbmVlZCB0byBtYWtlIGNvcnJlc3BvbmRpbmcgY2hh
bmdlcworICAgICAgICB0byBlbmFibGUgOCBiaXQgcHJvY2Vzc2luZyBvZiBUZXh0UnVucy4KKwor
ICAgICAgICBObyBjaGFuZ2VzIHRvIGZ1bmN0aW9uYWxpdHkgLSBiZWhhdmlvciBjb3ZlcmVkIGJ5
IGV4aXN0aW5nIHRlc3RzLgorCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpub3JtYWxpemVTcGFjZXNJbnRlcm5hbCk6CisgICAgICAgIChX
ZWJDb3JlOjpGb250Ojpub3JtYWxpemVTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDpu
b3JtYWxpemVTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y29kZVBhdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udDo6ZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6Y2hh
cmFjdGVyUmFuZ2VDb2RlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpGb250Ojpub3JtYWxpemVT
cGFjZXMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0NvbnRleHQ6OmRyYXdCaWRpVGV4dCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5jcHA6CisgICAgICAgIChFeHBlY3RlZFRl
eHRSdW5TaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVuLmg6CisgICAg
ICAgIChXZWJDb3JlOjpUZXh0UnVuOjpUZXh0UnVuKToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW46OnN1YlJ1bik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpvcGVyYXRvcltdKToKKyAg
ICAgICAgKFdlYkNvcmU6OlRleHRSdW46OmRhdGE4KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRS
dW46OmRhdGExNik6CisgICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpjaGFyYWN0ZXJzOCk6Cisg
ICAgICAgIChXZWJDb3JlOjpUZXh0UnVuOjpjaGFyYWN0ZXJzMTYpOgorICAgICAgICAoV2ViQ29y
ZTo6VGV4dFJ1bjo6aXM4Qml0KToKKyAgICAgICAgKFdlYkNvcmU6OlRleHRSdW46OnNldFRleHQp
OgorICAgICAgICAoV2ViQ29yZTo6VGV4dFJ1bjo6c2V0Q2hhcmFjdGVyc0xlbmd0aCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpXaWR0aEl0ZXJhdG9yOjpXaWR0aEl0ZXJhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6Oldp
ZHRoSXRlcmF0b3I6OmFkdmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2hhcmZi
dXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIYXJmQnV6elNo
YXBlckJhc2U6OnNldE5vcm1hbGl6ZWRCdWZmZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okhh
cmZCdXp6U2hhcGVyOjpIYXJmQnV6elNoYXBlcik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvbWFjL0NvbXBsZXhUZXh0Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDb21w
bGV4VGV4dENvbnRyb2xsZXI6OkNvbXBsZXhUZXh0Q29udHJvbGxlcik6CisgICAgICAgIChXZWJD
b3JlOjpDb21wbGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbGV4VGV4dFJ1bnMpOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcGxleFRleHRDb250cm9sbGVyOjphZGp1c3RHbHlwaHNBbmRBZHZh
bmNlcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJD
b3JlOjpGb250OjpmbG9hdFdpZHRoRm9yQ29tcGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
Rm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4dCk6CisgICAgICAgIChXZWJDb3Jl
OjpGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3Q29t
cGxleFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxl
eFRleHQpOgorICAgICAgICAoV2ViQ29yZTo6Rm9udDo6c2VsZWN0aW9uUmVjdEZvckNvbXBsZXhU
ZXh0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVDb250cm9sbGVyOjphZHZhbmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJdGVt
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUZXh0Ojpjb21wdXRlQ2FuVXNlU2ltcGxlRm9udENvZGVQYXRoKToKKyAgICAgICAg
KiByZW5kZXJpbmcvc3ZnL1NWR1RleHRNZXRyaWNzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1RleHRNZXRyaWNzOjpTVkdUZXh0TWV0cmljcyk6CisgICAgICAgICogcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHVGV4dE1ldHJp
Y3NCdWlsZGVyOjpTVkdUZXh0TWV0cmljc0J1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZH
VGV4dE1ldHJpY3NCdWlsZGVyOjptZWFzdXJlVGV4dFJlbmRlcmVyKToKKyAgICAgICAgKiBzdmcv
U1ZHRm9udERhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1ZHRm9udERhdGE6OmFwcGx5U1ZH
R2x5cGhTZWxlY3Rpb24pOgorCiAyMDEyLTA5LTA1ICBCcnVubyBkZSBPbGl2ZWlyYSBBYmluYWRl
ciAgPGJydW5vLmFiaW5hZGVyQGJhc3lza29tLmNvbT4KIAogICAgICAgICBNYWtlIFJlbmRlclN0
eWxlOjpjb2xvckluY2x1ZGluZ0ZhbGxiYWNrIHVzZSBwcml2YXRlIGdldHRlcnMKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuY3BwCShyZXZpc2lvbiAxMjc1MjUp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Gb250LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjQ0LDE3ICsyNDQsMjggQEAgaW50IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uKGNv
bnN0IFRleHRSdQogICAgIHJldHVybiBvZmZzZXRGb3JQb3NpdGlvbkZvckNvbXBsZXhUZXh0KHJ1
biwgeCwgaW5jbHVkZVBhcnRpYWxHbHlwaHMpOwogfQogCi1TdHJpbmcgRm9udDo6bm9ybWFsaXpl
U3BhY2VzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgQ2hhcmFjdGVyVHlwZT4KK3N0YXRpYyBpbmxpbmUgU3RyaW5nIG5vcm1hbGl6
ZVNwYWNlc0ludGVybmFsKGNvbnN0IENoYXJhY3RlclR5cGUqIGNoYXJhY3RlcnMsIHVuc2lnbmVk
IGxlbmd0aCkKIHsKICAgICBTdHJpbmdCdWlsZGVyIG5vcm1hbGl6ZWQ7CiAgICAgbm9ybWFsaXpl
ZC5yZXNlcnZlQ2FwYWNpdHkobGVuZ3RoKTsKIAogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBsZW5ndGg7ICsraSkKLSAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQobm9ybWFsaXplU3BhY2Vz
KGNoYXJhY3RlcnNbaV0pKTsKKyAgICAgICAgbm9ybWFsaXplZC5hcHBlbmQoRm9udDo6bm9ybWFs
aXplU3BhY2VzKGNoYXJhY3RlcnNbaV0pKTsKIAogICAgIHJldHVybiBub3JtYWxpemVkLnRvU3Ry
aW5nKCk7CiB9CiAKK1N0cmluZyBGb250Ojpub3JtYWxpemVTcGFjZXMoY29uc3QgTENoYXIqIGNo
YXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICByZXR1cm4gbm9ybWFsaXplU3BhY2Vz
SW50ZXJuYWwoY2hhcmFjdGVycywgbGVuZ3RoKTsKK30KKworU3RyaW5nIEZvbnQ6Om5vcm1hbGl6
ZVNwYWNlcyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQoreworICAg
IHJldHVybiBub3JtYWxpemVTcGFjZXNJbnRlcm5hbChjaGFyYWN0ZXJzLCBsZW5ndGgpOworfQor
CiBzdGF0aWMgYm9vbCBzaG91bGRVc2VGb250U21vb3RoaW5nID0gdHJ1ZTsKIAogdm9pZCBGb250
OjpzZXRTaG91bGRVc2VTbW9vdGhpbmcoYm9vbCBzaG91bGRVc2VTbW9vdGhpbmcpCkBAIC0yOTcs
OCArMzA4LDExIEBAIEZvbnQ6OkNvZGVQYXRoIEZvbnQ6OmNvZGVQYXRoKGNvbnN0IFRleHQKICAg
ICBpZiAoIXJ1bi5jaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGgoKSkKICAgICAgICAgcmV0dXJuIFNp
bXBsZTsKIAorICAgIGlmIChydW4uaXM4Qml0KCkpCisgICAgICAgIHJldHVybiBTaW1wbGU7CisK
ICAgICAvLyBTdGFydCBmcm9tIDAgc2luY2UgZHJhd2luZyBhbmQgaGlnaGxpZ2h0aW5nIGFsc28g
bWVhc3VyZSB0aGUgY2hhcmFjdGVycyBiZWZvcmUgcnVuLT5mcm9tLgotICAgIHJldHVybiBjaGFy
YWN0ZXJSYW5nZUNvZGVQYXRoKHJ1bi5jaGFyYWN0ZXJzKCksIHJ1bi5sZW5ndGgoKSk7CisgICAg
cmV0dXJuIGNoYXJhY3RlclJhbmdlQ29kZVBhdGgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVu
Z3RoKCkpOwogfQogCiBGb250OjpDb2RlUGF0aCBGb250OjpjaGFyYWN0ZXJSYW5nZUNvZGVQYXRo
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW4pCkBAIC01NTcsNiArNTcxLDI5
IEBAIGJvb2wgRm9udDo6aXNDSktJZGVvZ3JhcGhPclN5bWJvbChVQ2hhcjMKICAgICByZXR1cm4g
aXNDSktJZGVvZ3JhcGgoYyk7CiB9CiAKK3Vuc2lnbmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVu
aXR5Q291bnQoY29uc3QgTENoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVyRXhwYW5zaW9uKQoreworICAgIHVuc2lnbmVk
IGNvdW50ID0gMDsKKyAgICBpZiAoZGlyZWN0aW9uID09IExUUikgeworICAgICAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBpZiAodHJlYXRBc1Nw
YWNlKGNoYXJhY3RlcnNbaV0pKSB7CisgICAgICAgICAgICAgICAgY291bnQrKzsKKyAgICAgICAg
ICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAg
ICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24gPSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSBsZW5ndGg7IGkgPiAwOyAtLWkpIHsKKyAg
ICAgICAgICAgIGlmICh0cmVhdEFzU3BhY2UoY2hhcmFjdGVyc1tpIC0gMV0pKSB7CisgICAgICAg
ICAgICAgICAgY291bnQrKzsKKyAgICAgICAgICAgICAgICBpc0FmdGVyRXhwYW5zaW9uID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGlzQWZ0ZXJFeHBhbnNpb24g
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gY291bnQ7Cit9CisKIHVuc2ln
bmVkIEZvbnQ6OmV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBib29sJiBpc0FmdGVy
RXhwYW5zaW9uKQogewogICAgIHN0YXRpYyBib29sIGV4cGFuZEFyb3VuZElkZW9ncmFwaHMgPSBj
YW5FeHBhbmRBcm91bmRJZGVvZ3JhcGhzSW5Db21wbGV4VGV4dCgpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0ZvbnQuaAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvRm9udC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
NiArMTgzLDcgQEAgcHVibGljOgogICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoKFVDaGFy
MzIpOwogICAgIHN0YXRpYyBib29sIGlzQ0pLSWRlb2dyYXBoT3JTeW1ib2woVUNoYXIzMik7CiAK
KyAgICBzdGF0aWMgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudChjb25zdCBMQ2hh
ciosIHNpemVfdCBsZW5ndGgsIFRleHREaXJlY3Rpb24sIGJvb2wmIGlzQWZ0ZXJFeHBhbnNpb24p
OwogICAgIHN0YXRpYyB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KGNvbnN0IFVD
aGFyKiwgc2l6ZV90IGxlbmd0aCwgVGV4dERpcmVjdGlvbiwgYm9vbCYgaXNBZnRlckV4cGFuc2lv
bik7CiAKICNpZiBQTEFURk9STShRVCkKQEAgLTE5NSw2ICsxOTYsNyBAQCBwdWJsaWM6CiAKICAg
ICBlbnVtIENvZGVQYXRoIHsgQXV0bywgU2ltcGxlLCBDb21wbGV4LCBTaW1wbGVXaXRoR2x5cGhP
dmVyZmxvdyB9OwogICAgIENvZGVQYXRoIGNvZGVQYXRoKGNvbnN0IFRleHRSdW4mKSBjb25zdDsK
KyAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFjdGVyUmFuZ2VDb2RlUGF0aChjb25zdCBMQ2hhcios
IHVuc2lnbmVkKSB7IHJldHVybiBTaW1wbGU7IH0KICAgICBzdGF0aWMgQ29kZVBhdGggY2hhcmFj
dGVyUmFuZ2VDb2RlUGF0aChjb25zdCBVQ2hhciosIHVuc2lnbmVkIGxlbik7CiAgICAgCiBwcml2
YXRlOgpAQCAtMjU2LDYgKzI1OCw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGNoYXJhY3Rl
cjsKICAgICB9CiAKKyAgICBzdGF0aWMgU3RyaW5nIG5vcm1hbGl6ZVNwYWNlcyhjb25zdCBMQ2hh
ciosIHVuc2lnbmVkIGxlbmd0aCk7CiAgICAgc3RhdGljIFN0cmluZyBub3JtYWxpemVTcGFjZXMo
Y29uc3QgVUNoYXIqLCB1bnNpZ25lZCBsZW5ndGgpOwogCiAgICAgYm9vbCBuZWVkc1RyYW5zY29k
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9uZWVkc1RyYW5zY29kaW5nOyB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0NvbnRleHQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzQ29udGV4dC5jcHAJ
KHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dy
YXBoaWNzQ29udGV4dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxMyw4ICs0MTMsNyBAQCB2b2lk
IEdyYXBoaWNzQ29udGV4dDo6ZHJhd0JpZGlUZXh0KGNvbnN0CiAgICAgRmxvYXRQb2ludCBjdXJy
UG9pbnQgPSBwb2ludDsKICAgICBCaWRpQ2hhcmFjdGVyUnVuKiBiaWRpUnVuID0gYmlkaVJ1bnMu
Zmlyc3RSdW4oKTsKICAgICB3aGlsZSAoYmlkaVJ1bikgewotICAgICAgICBUZXh0UnVuIHN1YnJ1
biA9IHJ1bjsKLSAgICAgICAgc3VicnVuLnNldFRleHQocnVuLmRhdGEoYmlkaVJ1bi0+c3RhcnQo
KSksIGJpZGlSdW4tPnN0b3AoKSAtIGJpZGlSdW4tPnN0YXJ0KCkpOworICAgICAgICBUZXh0UnVu
IHN1YnJ1biA9IHJ1bi5zdWJSdW4oYmlkaVJ1bi0+c3RhcnQoKSwgYmlkaVJ1bi0+c3RvcCgpIC0g
YmlkaVJ1bi0+c3RhcnQoKSk7CiAgICAgICAgIGJvb2wgaXNSVEwgPSBiaWRpUnVuLT5sZXZlbCgp
ICUgMjsKICAgICAgICAgc3VicnVuLnNldERpcmVjdGlvbihpc1JUTCA/IFJUTCA6IExUUik7CiAg
ICAgICAgIHN1YnJ1bi5zZXREaXJlY3Rpb25hbE92ZXJyaWRlKGJpZGlSdW4tPmRpck92ZXJyaWRl
KGZhbHNlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0UnVu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9UZXh0
UnVuLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvVGV4dFJ1bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgc3RydWN0
IEV4cGVjdGVkVGV4dFJ1blNpemUgewogICAgIGZsb2F0IGZsb2F0MjsKICNlbmRpZgogICAgIGZs
b2F0IGZsb2F0MzsKLSAgICB1aW50MzJfdCBiaXRmaWVsZHMgOiA5OworICAgIHVpbnQzMl90IGJp
dGZpZWxkcyA6IDEwOwogICAgIHVuc2lnbmVkIGFuVW5zaWduZWQ7CiAgICAgUmVmUHRyPFRleHRS
dW46OlJlbmRlcmluZ0NvbnRleHQ+IHJlbmRlcmluZ0NvbnRleHQ7CiB9OwpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL1RleHRSdW4uaAkocmV2aXNpb24gMTI3NTI1KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvVGV4dFJ1bi5oCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw5ICs1OCw5IEBAIHB1YmxpYzoKIAogICAgIHR5cGVkZWYgdW5zaWduZWQgUm91
bmRpbmdIYWNrczsKIAotICAgIFRleHRSdW4oY29uc3QgVUNoYXIqIGMsIGludCBsZW4sIGZsb2F0
IHhwb3MgPSAwLCBmbG9hdCBleHBhbnNpb24gPSAwLCBFeHBhbnNpb25CZWhhdmlvciBleHBhbnNp
b25CZWhhdmlvciA9IEFsbG93VHJhaWxpbmdFeHBhbnNpb24gfCBGb3JiaWRMZWFkaW5nRXhwYW5z
aW9uLCBUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IExUUiwgYm9vbCBkaXJlY3Rpb25hbE92ZXJy
aWRlID0gZmFsc2UsIGJvb2wgY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoID0gdHJ1ZSwgUm91bmRp
bmdIYWNrcyByb3VuZGluZ0hhY2tzID0gUnVuUm91bmRpbmcgfCBXb3JkUm91bmRpbmcpCi0gICAg
ICAgIDogbV9jaGFyYWN0ZXJzKGMpCi0gICAgICAgICwgbV9jaGFyYWN0ZXJzTGVuZ3RoKGxlbikK
KyNpZiBQTEFURk9STShNQUMpCisgICAgVGV4dFJ1bihjb25zdCBMQ2hhciogYywgdW5zaWduZWQg
bGVuLCBmbG9hdCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZp
b3IgZXhwYW5zaW9uQmVoYXZpb3IgPSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgRm9yYmlkTGVh
ZGluZ0V4cGFuc2lvbiwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0
aW9uYWxPdmVycmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRy
dWUsIFJvdW5kaW5nSGFja3Mgcm91bmRpbmdIYWNrcyA9IFJ1blJvdW5kaW5nIHwgV29yZFJvdW5k
aW5nKQorICAgICAgICA6IG1fY2hhcmFjdGVyc0xlbmd0aChsZW4pCiAgICAgICAgICwgbV9sZW4o
bGVuKQogICAgICAgICAsIG1feHBvcyh4cG9zKQogI2lmIEVOQUJMRShTVkcpCkBAIC02OCw2ICs2
OCw3IEBAIHB1YmxpYzoKICNlbmRpZgogICAgICAgICAsIG1fZXhwYW5zaW9uKGV4cGFuc2lvbikK
ICAgICAgICAgLCBtX2V4cGFuc2lvbkJlaGF2aW9yKGV4cGFuc2lvbkJlaGF2aW9yKQorICAgICAg
ICAsIG1faXM4Qml0KHRydWUpCiAgICAgICAgICwgbV9hbGxvd1RhYnMoZmFsc2UpCiAgICAgICAg
ICwgbV9kaXJlY3Rpb24oZGlyZWN0aW9uKQogICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlk
ZShkaXJlY3Rpb25hbE92ZXJyaWRlKQpAQCAtNzcsMTEgKzc4LDM0IEBAIHB1YmxpYzoKICAgICAg
ICAgLCBtX2Rpc2FibGVTcGFjaW5nKGZhbHNlKQogICAgICAgICAsIG1fdGFiU2l6ZSgwKQogICAg
IHsKKyAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnM4ID0gYzsKICAgICB9CisjZW5kaWYKIAorICAg
IFRleHRSdW4oY29uc3QgVUNoYXIqIGMsIHVuc2lnbmVkIGxlbiwgZmxvYXQgeHBvcyA9IDAsIGZs
b2F0IGV4cGFuc2lvbiA9IDAsIEV4cGFuc2lvbkJlaGF2aW9yIGV4cGFuc2lvbkJlaGF2aW9yID0g
QWxsb3dUcmFpbGluZ0V4cGFuc2lvbiB8IEZvcmJpZExlYWRpbmdFeHBhbnNpb24sIFRleHREaXJl
Y3Rpb24gZGlyZWN0aW9uID0gTFRSLCBib29sIGRpcmVjdGlvbmFsT3ZlcnJpZGUgPSBmYWxzZSwg
Ym9vbCBjaGFyYWN0ZXJTY2FuRm9yQ29kZVBhdGggPSB0cnVlLCBSb3VuZGluZ0hhY2tzIHJvdW5k
aW5nSGFja3MgPSBSdW5Sb3VuZGluZyB8IFdvcmRSb3VuZGluZykKKyAgICAgICAgOiBtX2NoYXJh
Y3RlcnNMZW5ndGgobGVuKQorICAgICAgICAsIG1fbGVuKGxlbikKKyAgICAgICAgLCBtX3hwb3Mo
eHBvcykKKyNpZiBFTkFCTEUoU1ZHKQorICAgICAgICAsIG1faG9yaXpvbnRhbEdseXBoU3RyZXRj
aCgxKQorI2VuZGlmCisgICAgICAgICwgbV9leHBhbnNpb24oZXhwYW5zaW9uKQorICAgICAgICAs
IG1fZXhwYW5zaW9uQmVoYXZpb3IoZXhwYW5zaW9uQmVoYXZpb3IpCisgICAgICAgICwgbV9pczhC
aXQoZmFsc2UpCisgICAgICAgICwgbV9hbGxvd1RhYnMoZmFsc2UpCisgICAgICAgICwgbV9kaXJl
Y3Rpb24oZGlyZWN0aW9uKQorICAgICAgICAsIG1fZGlyZWN0aW9uYWxPdmVycmlkZShkaXJlY3Rp
b25hbE92ZXJyaWRlKQorICAgICAgICAsIG1fY2hhcmFjdGVyU2NhbkZvckNvZGVQYXRoKGNoYXJh
Y3RlclNjYW5Gb3JDb2RlUGF0aCkKKyAgICAgICAgLCBtX2FwcGx5UnVuUm91bmRpbmcoKHJvdW5k
aW5nSGFja3MgJiBSdW5Sb3VuZGluZykgJiYgc19hbGxvd3NSb3VuZGluZ0hhY2tzKQorICAgICAg
ICAsIG1fYXBwbHlXb3JkUm91bmRpbmcoKHJvdW5kaW5nSGFja3MgJiBXb3JkUm91bmRpbmcpICYm
IHNfYWxsb3dzUm91bmRpbmdIYWNrcykKKyAgICAgICAgLCBtX2Rpc2FibGVTcGFjaW5nKGZhbHNl
KQorICAgICAgICAsIG1fdGFiU2l6ZSgwKQorICAgIHsKKyAgICAgICAgbV9kYXRhLmNoYXJhY3Rl
cnMxNiA9IGM7CisgICAgfQorICAgIAogICAgIFRleHRSdW4oY29uc3QgU3RyaW5nJiBzLCBmbG9h
dCB4cG9zID0gMCwgZmxvYXQgZXhwYW5zaW9uID0gMCwgRXhwYW5zaW9uQmVoYXZpb3IgZXhwYW5z
aW9uQmVoYXZpb3IgPSBBbGxvd1RyYWlsaW5nRXhwYW5zaW9uIHwgRm9yYmlkTGVhZGluZ0V4cGFu
c2lvbiwgVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBMVFIsIGJvb2wgZGlyZWN0aW9uYWxPdmVy
cmlkZSA9IGZhbHNlLCBib29sIGNoYXJhY3RlclNjYW5Gb3JDb2RlUGF0aCA9IHRydWUsIFJvdW5k
aW5nSGFja3Mgcm91bmRpbmdIYWNrcyA9IFJ1blJvdW5kaW5nIHwgV29yZFJvdW5kaW5nKQotICAg
ICAgICA6IG1fY2hhcmFjdGVycyhzLmNoYXJhY3RlcnMoKSkKLSAgICAgICAgLCBtX2NoYXJhY3Rl
cnNMZW5ndGgocy5sZW5ndGgoKSkKKyAgICAgICAgOiBtX2NoYXJhY3RlcnNMZW5ndGgocy5sZW5n
dGgoKSkKICAgICAgICAgLCBtX2xlbihzLmxlbmd0aCgpKQogICAgICAgICAsIG1feHBvcyh4cG9z
KQogI2lmIEVOQUJMRShTVkcpCkBAIC05OCwxNyArMTIyLDUyIEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2Rpc2FibGVTcGFjaW5nKGZhbHNlKQogICAgICAgICAsIG1fdGFiU2l6ZSgwKQogICAgIHsK
KyNpZiBQTEFURk9STShNQUMpCisgICAgICAgIGlmIChtX2NoYXJhY3RlcnNMZW5ndGggJiYgcy5p
czhCaXQoKSkgeworICAgICAgICAgICAgbV9kYXRhLmNoYXJhY3RlcnMxNiA9IHMuY2hhcmFjdGVy
cygpOworICAgICAgICAgICAgbV9pczhCaXQgPSBmYWxzZTsKKy8vIEZJWE1FOiBDaGFuZ2UgdGhp
cyB0bzoKKy8vICAgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzOCA9IHMuY2hhcmFjdGVyczgoKTsK
Ky8vICAgICAgICAgIG1faXM4Qml0ID0gdHJ1ZTsKKy8vIHdoZW4gb3RoZXIgOCBiaXQgcmVuZGVy
aW5nIGNoYW5nZXMgYXJlIGxhbmRlZC4KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
ZGF0YS5jaGFyYWN0ZXJzMTYgPSBzLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgIG1faXM4Qml0
ID0gZmFsc2U7CisgICAgICAgIH0KKyNlbHNlCisgICAgICAgIG1fZGF0YS5jaGFyYWN0ZXJzMTYg
PSBzLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgbV9pczhCaXQgPSBmYWxzZTsKKyNlbmRpZgogICAg
IH0KIAotICAgIFVDaGFyIG9wZXJhdG9yW10oaW50IGkpIGNvbnN0IHsgQVNTRVJUKGkgPj0gMCAm
JiBpIDwgbV9sZW4pOyByZXR1cm4gbV9jaGFyYWN0ZXJzW2ldOyB9Ci0gICAgY29uc3QgVUNoYXIq
IGRhdGEoaW50IGkpIGNvbnN0IHsgQVNTRVJUKGkgPj0gMCAmJiBpIDwgbV9sZW4pOyByZXR1cm4g
Jm1fY2hhcmFjdGVyc1tpXTsgfQorICAgIFRleHRSdW4gc3ViUnVuKHVuc2lnbmVkIHN0YXJ0T2Zm
c2V0LCB1bnNpZ25lZCBsZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICBBU1NFUlQoc3RhcnRP
ZmZzZXQgPCBtX2xlbik7CisKKyAgICAgICAgVGV4dFJ1biByZXN1bHQgPSAqdGhpczsKKworICAg
ICAgICBpZiAoaXM4Qml0KCkpCisgICAgICAgICAgICByZXN1bHQuc2V0VGV4dChkYXRhOChzdGFy
dE9mZnNldCksIGxlbmd0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdC5zZXRU
ZXh0KGRhdGExNihzdGFydE9mZnNldCksIGxlbmd0aCk7CisKKyAgICAgICAgcmV0dXJuIHJlc3Vs
dDsKKyAgICB9CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJu
IG1fY2hhcmFjdGVyczsgfQorICAgIFVDaGFyIG9wZXJhdG9yW10odW5zaWduZWQgaSkgY29uc3Qg
eyBBU1NFUlQoaSA8IG1fbGVuKTsgcmV0dXJuIGlzOEJpdCgpID8gbV9kYXRhLmNoYXJhY3RlcnM4
W2ldIDptX2RhdGEuY2hhcmFjdGVyczE2W2ldOyB9CisgICAgY29uc3QgTENoYXIqIGRhdGE4KHVu
c2lnbmVkIGkpIGNvbnN0IHsgQVNTRVJUKGkgPCBtX2xlbik7IEFTU0VSVChpczhCaXQoKSk7IHJl
dHVybiAmbV9kYXRhLmNoYXJhY3RlcnM4W2ldOyB9CisgICAgY29uc3QgVUNoYXIqIGRhdGExNih1
bnNpZ25lZCBpKSBjb25zdCB7IEFTU0VSVChpIDwgbV9sZW4pOyBBU1NFUlQoIWlzOEJpdCgpKTsg
cmV0dXJuICZtX2RhdGEuY2hhcmFjdGVyczE2W2ldOyB9CisKKyAgICBjb25zdCBMQ2hhciogY2hh
cmFjdGVyczgoKSBjb25zdCB7IEFTU0VSVChpczhCaXQoKSk7IHJldHVybiBtX2RhdGEuY2hhcmFj
dGVyczg7IH0KKyAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVyczE2KCkgY29uc3QgeyBBU1NFUlQo
IWlzOEJpdCgpKTsgcmV0dXJuIG1fZGF0YS5jaGFyYWN0ZXJzMTY7IH0KKyAgICAKKyAgICBib29s
IGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9CiAgICAgaW50IGxlbmd0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fbGVuOyB9CiAgICAgaW50IGNoYXJhY3RlcnNMZW5ndGgoKSBjb25zdCB7
IHJldHVybiBtX2NoYXJhY3RlcnNMZW5ndGg7IH0KIAotICAgIHZvaWQgc2V0VGV4dChjb25zdCBV
Q2hhciogYywgaW50IGxlbikgeyBtX2NoYXJhY3RlcnMgPSBjOyBtX2xlbiA9IGxlbjsgfQotICAg
IHZvaWQgc2V0Q2hhcmFjdGVyc0xlbmd0aChpbnQgY2hhcmFjdGVyc0xlbmd0aCkgeyBtX2NoYXJh
Y3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzTGVuZ3RoOyB9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0
IExDaGFyKiBjLCB1bnNpZ25lZCBsZW4pIHsgbV9kYXRhLmNoYXJhY3RlcnM4ID0gYzsgbV9sZW4g
PSBsZW47IG1faXM4Qml0ID0gdHJ1ZTt9CisgICAgdm9pZCBzZXRUZXh0KGNvbnN0IFVDaGFyKiBj
LCB1bnNpZ25lZCBsZW4pIHsgbV9kYXRhLmNoYXJhY3RlcnMxNiA9IGM7IG1fbGVuID0gbGVuOyBt
X2lzOEJpdCA9IGZhbHNlO30KKyAgICB2b2lkIHNldENoYXJhY3RlcnNMZW5ndGgodW5zaWduZWQg
Y2hhcmFjdGVyc0xlbmd0aCkgeyBtX2NoYXJhY3RlcnNMZW5ndGggPSBjaGFyYWN0ZXJzTGVuZ3Ro
OyB9CiAKICNpZiBFTkFCTEUoU1ZHKQogICAgIGZsb2F0IGhvcml6b250YWxHbHlwaFN0cmV0Y2go
KSBjb25zdCB7IHJldHVybiBtX2hvcml6b250YWxHbHlwaFN0cmV0Y2g7IH0KQEAgLTE1OSw5ICsy
MTgsMTIgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBzdGF0aWMgYm9vbCBzX2FsbG93c1JvdW5k
aW5nSGFja3M7CiAKLSAgICBjb25zdCBVQ2hhciogbV9jaGFyYWN0ZXJzOwotICAgIGludCBtX2No
YXJhY3RlcnNMZW5ndGg7IC8vIE1hcmtzIHRoZSBlbmQgb2YgdGhlIG1fY2hhcmFjdGVycyBidWZm
ZXIuIERlZmF1bHQgZXF1YWxzIHRvIG1fbGVuLgotICAgIGludCBtX2xlbjsKKyAgICB1bmlvbiB7
CisgICAgICAgIGNvbnN0IExDaGFyKiBjaGFyYWN0ZXJzODsKKyAgICAgICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMxNjsKKyAgICB9IG1fZGF0YTsKKyAgICB1bnNpZ25lZCBtX2NoYXJhY3RlcnNM
ZW5ndGg7IC8vIE1hcmtzIHRoZSBlbmQgb2YgdGhlIGNoYXJhY3RlcnMgYnVmZmVyLiBEZWZhdWx0
IGVxdWFscyB0byBtX2xlbi4KKyAgICB1bnNpZ25lZCBtX2xlbjsKIAogICAgIC8vIG1feHBvcyBp
cyB0aGUgeCBwb3NpdGlvbiByZWxhdGl2ZSB0byB0aGUgbGVmdCBzdGFydCBvZiB0aGUgdGV4dCBs
aW5lLCBub3QgcmVsYXRpdmUgdG8gdGhlIGxlZnQKICAgICAvLyBzdGFydCBvZiB0aGUgY29udGFp
bmluZyBibG9jay4gSW4gdGhlIGNhc2Ugb2YgcmlnaHQgYWxpZ25tZW50IG9yIGNlbnRlciBhbGln
bm1lbnQsIGxlZnQgc3RhcnQgb2YKQEAgLTE3Myw2ICsyMzUsNyBAQCBwcml2YXRlOgogCiAgICAg
ZmxvYXQgbV9leHBhbnNpb247CiAgICAgRXhwYW5zaW9uQmVoYXZpb3IgbV9leHBhbnNpb25CZWhh
dmlvciA6IDI7CisgICAgdW5zaWduZWQgbV9pczhCaXQgOiAxOwogICAgIHVuc2lnbmVkIG1fYWxs
b3dUYWJzIDogMTsKICAgICB1bnNpZ25lZCBtX2RpcmVjdGlvbiA6IDE7CiAgICAgdW5zaWduZWQg
bV9kaXJlY3Rpb25hbE92ZXJyaWRlIDogMTsgLy8gV2FzIHRoaXMgZGlyZWN0aW9uIHNldCBieSBh
biBvdmVycmlkZSBjaGFyYWN0ZXIuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9XaWR0aEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9XaWR0aEl0ZXJhdG9yLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvV2lkdGhJdGVyYXRvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTU3LDcgKzU3LDcgQEAgV2lkdGhJdGVyYXRvcjo6V2lkdGhJdGVyYXRvcihjb25z
dCBGb250KgogICAgICAgICBtX2V4cGFuc2lvblBlck9wcG9ydHVuaXR5ID0gMDsKICAgICBlbHNl
IHsKICAgICAgICAgYm9vbCBpc0FmdGVyRXhwYW5zaW9uID0gbV9pc0FmdGVyRXhwYW5zaW9uOwot
ICAgICAgICB1bnNpZ25lZCBleHBhbnNpb25PcHBvcnR1bml0eUNvdW50ID0gRm9udDo6ZXhwYW5z
aW9uT3Bwb3J0dW5pdHlDb3VudChtX3J1bi5jaGFyYWN0ZXJzKCksIG1fcnVuLmxlbmd0aCgpLCBt
X3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CisgICAgICAgIHVuc2ln
bmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQgPSBtX3J1bi5pczhCaXQoKSA/IEZvbnQ6OmV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4uY2hhcmFjdGVyczgoKSwgbV9ydW4ubGVuZ3Ro
KCksIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKSA6IEZvbnQ6OmV4
cGFuc2lvbk9wcG9ydHVuaXR5Q291bnQobV9ydW4uY2hhcmFjdGVyczE2KCksIG1fcnVuLmxlbmd0
aCgpLCBtX3J1bi5sdHIoKSA/IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgICAg
IGlmIChpc0FmdGVyRXhwYW5zaW9uICYmICFtX3J1bi5hbGxvd3NUcmFpbGluZ0V4cGFuc2lvbigp
KQogICAgICAgICAgICAgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOwogCkBAIC0xMDYsNyAr
MTA2LDcgQEAgdW5zaWduZWQgV2lkdGhJdGVyYXRvcjo6YWR2YW5jZShpbnQgb2ZmcwogCiAgICAg
VUNoYXIzMiBjaGFyYWN0ZXIgPSAwOwogICAgIHVuc2lnbmVkIGNsdXN0ZXJMZW5ndGggPSAwOwot
ICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB0ZXh0SXRlcmF0b3IobV9ydW4uZGF0
YShtX2N1cnJlbnRDaGFyYWN0ZXIpLCBtX2N1cnJlbnRDaGFyYWN0ZXIsIG9mZnNldCwgbV9ydW4u
bGVuZ3RoKCkpOworICAgIFN1cnJvZ2F0ZVBhaXJBd2FyZVRleHRJdGVyYXRvciB0ZXh0SXRlcmF0
b3IobV9ydW4uZGF0YTE2KG1fY3VycmVudENoYXJhY3RlciksIG1fY3VycmVudENoYXJhY3Rlciwg
b2Zmc2V0LCBtX3J1bi5sZW5ndGgoKSk7CiAgICAgd2hpbGUgKHRleHRJdGVyYXRvci5jb25zdW1l
KGNoYXJhY3RlciwgY2x1c3Rlckxlbmd0aCkpIHsKICAgICAgICAgdW5zaWduZWQgYWR2YW5jZUxl
bmd0aCA9IGNsdXN0ZXJMZW5ndGg7CiAgICAgICAgIGNvbnN0IEdseXBoRGF0YSYgZ2x5cGhEYXRh
ID0gZ2x5cGhEYXRhRm9yQ2hhcmFjdGVyKGNoYXJhY3RlciwgcnRsLCB0ZXh0SXRlcmF0b3IuY3Vy
cmVudENoYXJhY3RlcigpLCBhZHZhbmNlTGVuZ3RoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L0hhcmZCdXp6U2hhcGVyQmFzZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpT
aGFwZXJCYXNlLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvaGFyZmJ1enovSGFyZkJ1enpTaGFwZXJCYXNlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIEhhcmZCdXp6U2hhcGVyQmFzZTo6c2V0Tm9ybWFsaXpl
ZEJ1CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX3J1bi5sZW5ndGgoKTsgKytpKSB7CiAgICAg
ICAgIFVDaGFyIGNoID0gbV9ydW5baV07CiAgICAgICAgIGlmICg6OnVibG9ja19nZXRDb2RlKGNo
KSA9PSBVQkxPQ0tfQ09NQklOSU5HX0RJQUNSSVRJQ0FMX01BUktTKSB7Ci0gICAgICAgICAgICBp
Y3U6Ok5vcm1hbGl6ZXI6Om5vcm1hbGl6ZShpY3U6OlVuaWNvZGVTdHJpbmcobV9ydW4uY2hhcmFj
dGVycygpLAorICAgICAgICAgICAgaWN1OjpOb3JtYWxpemVyOjpub3JtYWxpemUoaWN1OjpVbmlj
b2RlU3RyaW5nKG1fcnVuLmNoYXJhY3RlcnMxNigpLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ydW4ubGVuZ3RoKCkpLCBVTk9STV9ORkMsIDAgLyogbm8gb3B0aW9u
cyAqLywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vcm1hbGl6ZWRT
dHJpbmcsIGVycm9yKTsKICAgICAgICAgICAgIGlmIChVX0ZBSUxVUkUoZXJyb3IpKQpAQCAtMTA5
LDcgKzEwOSw3IEBAIHZvaWQgSGFyZkJ1enpTaGFwZXJCYXNlOjpzZXROb3JtYWxpemVkQnUKICAg
ICBjb25zdCBVQ2hhciogc291cmNlVGV4dDsKICAgICBpZiAobm9ybWFsaXplZFN0cmluZy5pc0Vt
cHR5KCkpIHsKICAgICAgICAgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoID0gbV9ydW4ubGVuZ3Ro
KCk7Ci0gICAgICAgIHNvdXJjZVRleHQgPSBtX3J1bi5jaGFyYWN0ZXJzKCk7CisgICAgICAgIHNv
dXJjZVRleHQgPSBtX3J1bi5jaGFyYWN0ZXJzMTYoKTsKICAgICB9IGVsc2UgewogICAgICAgICBt
X25vcm1hbGl6ZWRCdWZmZXJMZW5ndGggPSBub3JtYWxpemVkU3RyaW5nLmxlbmd0aCgpOwogICAg
ICAgICBzb3VyY2VUZXh0ID0gbm9ybWFsaXplZFN0cmluZy5nZXRCdWZmZXIoKTsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9oYXJm
YnV6ei9uZy9IYXJmQnV6elNoYXBlci5jcHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2hhcmZidXp6L25nL0hhcmZCdXp6U2hhcGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIEhhcmZCdXp6U2hhcGVyOjpIYXJmQnV6
elNoYXBlcihjb25zdCBGb24KIHsKICAgICBtX25vcm1hbGl6ZWRCdWZmZXIgPSBhZG9wdEFycmF5
UHRyKG5ldyBVQ2hhclttX3J1bi5sZW5ndGgoKSArIDFdKTsKICAgICBtX25vcm1hbGl6ZWRCdWZm
ZXJMZW5ndGggPSBtX3J1bi5sZW5ndGgoKTsKLSAgICBub3JtYWxpemVDaGFyYWN0ZXJzKG1fcnVu
LmNoYXJhY3RlcnMoKSwgbV9ub3JtYWxpemVkQnVmZmVyLmdldCgpLCBtX25vcm1hbGl6ZWRCdWZm
ZXJMZW5ndGgpOworICAgIG5vcm1hbGl6ZUNoYXJhY3RlcnMobV9ydW4uY2hhcmFjdGVyczE2KCks
IG1fbm9ybWFsaXplZEJ1ZmZlci5nZXQoKSwgbV9ub3JtYWxpemVkQnVmZmVyTGVuZ3RoKTsKICAg
ICBzZXRQYWRkaW5nKG1fcnVuLmV4cGFuc2lvbigpKTsKICAgICBzZXRGb250RmVhdHVyZXMoKTsK
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL21hYy9Db21wbGV4VGV4
dENvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL21hYy9Db21wbGV4VGV4dENvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9tYWMvQ29tcGxleFRleHRDb250cm9s
bGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQ3LDcgKzE0Nyw3IEBAIENvbXBsZXhUZXh0Q29u
dHJvbGxlcjo6Q29tcGxleFRleHRDb250cm8KICAgICAgICAgbV9leHBhbnNpb25QZXJPcHBvcnR1
bml0eSA9IDA7CiAgICAgZWxzZSB7CiAgICAgICAgIGJvb2wgaXNBZnRlckV4cGFuc2lvbiA9IG1f
YWZ0ZXJFeHBhbnNpb247Ci0gICAgICAgIHVuc2lnbmVkIGV4cGFuc2lvbk9wcG9ydHVuaXR5Q291
bnQgPSBGb250OjpleHBhbnNpb25PcHBvcnR1bml0eUNvdW50KG1fcnVuLmNoYXJhY3RlcnMoKSwg
bV9lbmQsIG1fcnVuLmx0cigpID8gTFRSIDogUlRMLCBpc0FmdGVyRXhwYW5zaW9uKTsKKyAgICAg
ICAgdW5zaWduZWQgZXhwYW5zaW9uT3Bwb3J0dW5pdHlDb3VudCA9IEZvbnQ6OmV4cGFuc2lvbk9w
cG9ydHVuaXR5Q291bnQobV9ydW4uY2hhcmFjdGVyczE2KCksIG1fZW5kLCBtX3J1bi5sdHIoKSA/
IExUUiA6IFJUTCwgaXNBZnRlckV4cGFuc2lvbik7CiAgICAgICAgIGlmIChpc0FmdGVyRXhwYW5z
aW9uICYmICFtX3J1bi5hbGxvd3NUcmFpbGluZ0V4cGFuc2lvbigpKQogICAgICAgICAgICAgZXhw
YW5zaW9uT3Bwb3J0dW5pdHlDb3VudC0tOwogCkBAIC0yODksNyArMjg5LDcgQEAgdm9pZCBDb21w
bGV4VGV4dENvbnRyb2xsZXI6OmNvbGxlY3RDb21wbAogICAgICAgICByZXR1cm47CiAKICAgICAv
LyBXZSBicmVhayB1cCBnbHlwaCBydW4gZ2VuZXJhdGlvbiBmb3IgdGhlIHN0cmluZyBieSBGb250
RGF0YS4KLSAgICBjb25zdCBVQ2hhciogY3AgPSBtX3J1bi5jaGFyYWN0ZXJzKCk7CisgICAgY29u
c3QgVUNoYXIqIGNwID0gbV9ydW4uY2hhcmFjdGVyczE2KCk7CiAKICAgICBpZiAobV9mb250Lmlz
U21hbGxDYXBzKCkpCiAgICAgICAgIG1fc21hbGxDYXBzQnVmZmVyLnJlc2l6ZShtX2VuZCk7CkBA
IC02MzUsNyArNjM1LDcgQEAgdm9pZCBDb21wbGV4VGV4dENvbnRyb2xsZXI6OmFkanVzdEdseXBo
cwogICAgICAgICAgICAgICAgICAgICAgICAgbV9hZnRlckV4cGFuc2lvbiA9IGZhbHNlOwogCiAg
ICAgICAgICAgICAgICAgICAgIC8vIEFjY291bnQgZm9yIHdvcmQtc3BhY2luZy4KLSAgICAgICAg
ICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSAmJiBjaGFyYWN0ZXJJbmRleCA+IDAgJiYgIUZv
bnQ6OnRyZWF0QXNTcGFjZSgqbV9ydW4uZGF0YShjaGFyYWN0ZXJJbmRleCAtIDEpKSAmJiBtX2Zv
bnQud29yZFNwYWNpbmcoKSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRyZWF0QXNTcGFjZSAm
JiBjaGFyYWN0ZXJJbmRleCA+IDAgJiYgIUZvbnQ6OnRyZWF0QXNTcGFjZShtX3J1bltjaGFyYWN0
ZXJJbmRleCAtIDFdKSAmJiBtX2ZvbnQud29yZFNwYWNpbmcoKSkKICAgICAgICAgICAgICAgICAg
ICAgICAgIGFkdmFuY2Uud2lkdGggKz0gbV9mb250LndvcmRTcGFjaW5nKCk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIG1fYWZ0ZXJFeHBhbnNpb24gPSBmYWxz
ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3BhbmdvL0ZvbnRQYW5n
by5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvcGFu
Z28vRm9udFBhbmdvLmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvcGFuZ28vRm9udFBhbmdvLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjky
LDcgKzI5Miw3IEBAIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBoaWNzQ29udGUKICAg
ICBQYW5nb0xheW91dCogbGF5b3V0ID0gcGFuZ29fY2Fpcm9fY3JlYXRlX2xheW91dChjcik7CiAg
ICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKIAotICAgIGdjaGFyKiB1
dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgp
LCAwLCBydW4ubGVuZ3RoKCkpOworICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VU
RjgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CiAg
ICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwogCiAgICAgLy8gT3Vy
IGxheW91dHMgYXJlIHNpbmdsZSBsaW5lCkBAIC0zODAsNyArMzgwLDcgQEAgZmxvYXQgRm9udDo6
ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbgogICAgIFBhbmdvTGF5b3V0KiBsYXlvdXQgPSBn
ZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKICAgICBzZXRQYW5nb0F0dHJpYnV0ZXModGhpcywg
cnVuLCBsYXlvdXQpOwogCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChy
dW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CisgICAgZ2No
YXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVyczE2KCksIHJ1bi5s
ZW5ndGgoKSwgMCwgcnVuLmxlbmd0aCgpKTsKICAgICBwYW5nb19sYXlvdXRfc2V0X3RleHQobGF5
b3V0LCB1dGY4LCAtMSk7CiAKICAgICBpbnQgd2lkdGg7CkBAIC00MDUsNyArNDA1LDcgQEAgaW50
IEZvbnQ6Om9mZnNldEZvclBvc2l0aW9uRm9yQ29tcGxleFRleAogICAgIFBhbmdvTGF5b3V0KiBs
YXlvdXQgPSBnZXREZWZhdWx0UGFuZ29MYXlvdXQocnVuKTsKICAgICBzZXRQYW5nb0F0dHJpYnV0
ZXModGhpcywgcnVuLCBsYXlvdXQpOwogCi0gICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hh
clRvVVRGOChydW4uY2hhcmFjdGVycygpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7
CisgICAgZ2NoYXIqIHV0ZjggPSBjb252ZXJ0VW5pQ2hhclRvVVRGOChydW4uY2hhcmFjdGVyczE2
KCksIHJ1bi5sZW5ndGgoKSwgMCwgcnVuLmxlbmd0aCgpKTsKICAgICBwYW5nb19sYXlvdXRfc2V0
X3RleHQobGF5b3V0LCB1dGY4LCAtMSk7CiAKICAgICBpbnQgaW5kZXgsIHRyYWlsaW5nOwpAQCAt
NDMwLDcgKzQzMCw3IEBAIEZsb2F0UmVjdCBGb250OjpzZWxlY3Rpb25SZWN0Rm9yQ29tcGxleFQK
ICAgICBQYW5nb0xheW91dCogbGF5b3V0ID0gZ2V0RGVmYXVsdFBhbmdvTGF5b3V0KHJ1bik7CiAg
ICAgc2V0UGFuZ29BdHRyaWJ1dGVzKHRoaXMsIHJ1biwgbGF5b3V0KTsKIAotICAgIGdjaGFyKiB1
dGY4ID0gY29udmVydFVuaUNoYXJUb1VURjgocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgp
LCAwLCBydW4ubGVuZ3RoKCkpOworICAgIGdjaGFyKiB1dGY4ID0gY29udmVydFVuaUNoYXJUb1VU
RjgocnVuLmNoYXJhY3RlcnMxNigpLCBydW4ubGVuZ3RoKCksIDAsIHJ1bi5sZW5ndGgoKSk7CiAg
ICAgcGFuZ29fbGF5b3V0X3NldF90ZXh0KGxheW91dCwgdXRmOCwgLTEpOwogCiAgICAgY2hhciog
c3RhcnQgPSBnX3V0Zjhfb2Zmc2V0X3RvX3BvaW50ZXIodXRmOCwgZnJvbSk7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9xdC9Gb250UXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5jcHAJKHJldmlzaW9u
IDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3F0L0ZvbnRRdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBzdGF0aWMgdm9pZCBkcmF3UXRH
bHlwaFJ1bihHcmFwaGljc0NvbnRlCiAKIHZvaWQgRm9udDo6ZHJhd0NvbXBsZXhUZXh0KEdyYXBo
aWNzQ29udGV4dCogY3R4LCBjb25zdCBUZXh0UnVuJiBydW4sIGNvbnN0IEZsb2F0UG9pbnQmIHBv
aW50LCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBG
b250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAg
ICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJz
MTYoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBjb25zdCBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdE
YXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogICAgIFFUZXh0TGF5b3V0IGxheW91dChzdHJpbmcp
OwogICAgIGxheW91dC5zZXRSYXdGb250KHJhd0ZvbnQoKSk7CkBAIC0yMDEsNyArMjAxLDcgQEAg
ZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNvbXBsZXhUZXh0KGNvbgogCiAgICAgaWYgKHJ1bi5s
ZW5ndGgoKSA9PSAxICYmIHRyZWF0QXNTcGFjZShydW5bMF0pKQogICAgICAgICByZXR1cm4gcHJp
bWFyeUZvbnQoKS0+c3BhY2VXaWR0aCgpICsgcnVuLmV4cGFuc2lvbigpOwotICAgIFN0cmluZyBz
YW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxl
bmd0aCgpKTsKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1
bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5nIHN0cmluZyA9IGZy
b21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCiAgICAgUVRleHRMYXlvdXQgbGF5b3V0
KHN0cmluZyk7CkBAIC0yMTcsNyArMjE3LDcgQEAgZmxvYXQgRm9udDo6ZmxvYXRXaWR0aEZvckNv
bXBsZXhUZXh0KGNvbgogCiBpbnQgRm9udDo6b2Zmc2V0Rm9yUG9zaXRpb25Gb3JDb21wbGV4VGV4
dChjb25zdCBUZXh0UnVuJiBydW4sIGZsb2F0IHBvc2l0aW9uLCBib29sKSBjb25zdAogewotICAg
IFN0cmluZyBzYW5pdGl6ZWQgPSBGb250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMo
KSwgcnVuLmxlbmd0aCgpKTsKKyAgICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXpl
U3BhY2VzKHJ1bi5jaGFyYWN0ZXJzMTYoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5nIHN0
cmluZyA9IGZyb21SYXdEYXRhV2l0aG91dFJlZihzYW5pdGl6ZWQpOwogCiAgICAgUVRleHRMYXlv
dXQgbGF5b3V0KHN0cmluZyk7CkBAIC0yMjksNyArMjI5LDcgQEAgaW50IEZvbnQ6Om9mZnNldEZv
clBvc2l0aW9uRm9yQ29tcGxleFRleAogCiBGbG9hdFJlY3QgRm9udDo6c2VsZWN0aW9uUmVjdEZv
ckNvbXBsZXhUZXh0KGNvbnN0IFRleHRSdW4mIHJ1biwgY29uc3QgRmxvYXRQb2ludCYgcHQsIGlu
dCBoLCBpbnQgZnJvbSwgaW50IHRvKSBjb25zdAogewotICAgIFN0cmluZyBzYW5pdGl6ZWQgPSBG
b250Ojpub3JtYWxpemVTcGFjZXMocnVuLmNoYXJhY3RlcnMoKSwgcnVuLmxlbmd0aCgpKTsKKyAg
ICBTdHJpbmcgc2FuaXRpemVkID0gRm9udDo6bm9ybWFsaXplU3BhY2VzKHJ1bi5jaGFyYWN0ZXJz
MTYoKSwgcnVuLmxlbmd0aCgpKTsKICAgICBRU3RyaW5nIHN0cmluZyA9IGZyb21SYXdEYXRhV2l0
aG91dFJlZihzYW5pdGl6ZWQpOwogCiAgICAgUVRleHRMYXlvdXQgbGF5b3V0KHN0cmluZyk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
d2luL1VuaXNjcmliZUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vVW5pc2NyaWJlQ29udHJvbGxlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBAQCB2b2lkIFVuaXNjcmliZUNvbnRyb2xsZXI6
OmFkdmFuY2UodW5zaWduCiAgICAgICAgIHJldHVybjsKIAogICAgIC8vIEl0ZW1pemUgdGhlIHN0
cmluZy4KLSAgICBjb25zdCBVQ2hhciogY3AgPSBtX3J1bi5kYXRhKG1fY3VycmVudENoYXJhY3Rl
cik7CisgICAgY29uc3QgVUNoYXIqIGNwID0gbV9ydW4uZGF0YTE2KG1fY3VycmVudENoYXJhY3Rl
cik7CiAgICAgdW5zaWduZWQgYmFzZUNoYXJhY3RlciA9IG1fY3VycmVudENoYXJhY3RlcjsKIAog
ICAgIC8vIFdlIGJyZWFrIHVwIGl0ZW1pemF0aW9uIG9mIHRoZSBzdHJpbmcgYnkgZm9udERhdGEg
YW5kIChpZiBuZWVkZWQpIHRoZSB1c2Ugb2Ygc21hbGwgY2Fwcy4KQEAgLTMzMCw3ICszMzAsNyBA
QCBib29sIFVuaXNjcmliZUNvbnRyb2xsZXI6OnNoYXBlQW5kUGxhY2VJCiAgICAgICAgICAgICAg
ICAgfQogCiAgICAgICAgICAgICAgICAgLy8gQWNjb3VudCBmb3Igd29yZC1zcGFjaW5nLgotICAg
ICAgICAgICAgICAgIGlmIChjaGFyYWN0ZXJJbmRleCA+IDAgJiYgIUZvbnQ6OnRyZWF0QXNTcGFj
ZSgqbV9ydW4uZGF0YShjaGFyYWN0ZXJJbmRleCAtIDEpKSAmJiBtX2ZvbnQud29yZFNwYWNpbmco
KSkKKyAgICAgICAgICAgICAgICBpZiAoY2hhcmFjdGVySW5kZXggPiAwICYmICFGb250Ojp0cmVh
dEFzU3BhY2UoKm1fcnVuLmRhdGExNihjaGFyYWN0ZXJJbmRleCAtIDEpKSAmJiBtX2ZvbnQud29y
ZFNwYWNpbmcoKSkKICAgICAgICAgICAgICAgICAgICAgYWR2YW5jZSArPSBtX2ZvbnQud29yZFNw
YWNpbmcoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAkocmV2aXNpb24gMTI3NTI1KQorKysgU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODc5LDcgKzE4
NzksNyBAQCBpbnQgUmVuZGVyVGV4dDo6bmV4dE9mZnNldChpbnQgY3VycmVudCkgCiAKIGJvb2wg
UmVuZGVyVGV4dDo6Y29tcHV0ZUNhblVzZVNpbXBsZUZvbnRDb2RlUGF0aCgpIGNvbnN0CiB7Ci0g
ICAgaWYgKGlzQWxsQVNDSUkoKSkKKyAgICBpZiAoaXNBbGxBU0NJSSgpIHx8IG1fdGV4dC5pczhC
aXQoKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIEZvbnQ6OmNoYXJhY3RlclJh
bmdlQ29kZVBhdGgoY2hhcmFjdGVycygpLCBsZW5ndGgoKSkgPT0gRm9udDo6U2ltcGxlOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljcy5j
cHAJKHJldmlzaW9uIDEyNzUyNSkKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9zdmcvU1ZH
VGV4dE1ldHJpY3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Niw3ICs1Niw3IEBAIFNWR1RleHRN
ZXRyaWNzOjpTVkdUZXh0TWV0cmljcyhSZW5kZXJTVkcKICAgICBtX3dpZHRoID0gc2NhbGVkRm9u
dC53aWR0aChydW4sIGxlbmd0aCwgbV9nbHlwaC5uYW1lKSAvIHNjYWxpbmdGYWN0b3I7CiAgICAg
bV9oZWlnaHQgPSBzY2FsZWRGb250LmZvbnRNZXRyaWNzKCkuZmxvYXRIZWlnaHQoKSAvIHNjYWxp
bmdGYWN0b3I7CiAKLSAgICBtX2dseXBoLnVuaWNvZGVTdHJpbmcgPSBTdHJpbmcocnVuLmNoYXJh
Y3RlcnMoKSwgbGVuZ3RoKTsKKyAgICBtX2dseXBoLnVuaWNvZGVTdHJpbmcgPSBydW4uaXM4Qml0
KCkgPyBTdHJpbmcocnVuLmNoYXJhY3RlcnM4KCksIGxlbmd0aCkgOiBTdHJpbmcocnVuLmNoYXJh
Y3RlcnMxNigpLCBsZW5ndGgpOwogICAgIG1fZ2x5cGguaXNWYWxpZCA9IHRydWU7CiAKICAgICBB
U1NFUlQobGVuZ3RoID49IDApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9T
VkdUZXh0TWV0cmljc0J1aWxkZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9zdmcvU1ZHVGV4dE1ldHJpY3NCdWlsZGVyLmNwcAkocmV2aXNpb24gMTI3NTI1KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3N2Zy9TVkdUZXh0TWV0cmljc0J1aWxkZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
U1ZHVGV4dE1ldHJpY3NCdWlsZGVyOjpTVkdUZXh0TWV0cmljc0J1aWxkZXIoKQogICAgIDogbV90
ZXh0KDApCi0gICAgLCBtX3J1bigwLCAwKQorICAgICwgbV9ydW4oc3RhdGljX2Nhc3Q8Y29uc3Qg
VUNoYXIqPigwKSwgMCkKICAgICAsIG1fdGV4dFBvc2l0aW9uKDApCiAgICAgLCBtX2lzQ29tcGxl
eFRleHQoZmFsc2UpCiAgICAgLCBtX3RvdGFsV2lkdGgoMCkKQEAgLTE0OCw3ICsxNDgsNyBAQCB2
b2lkIFNWR1RleHRNZXRyaWNzQnVpbGRlcjo6bWVhc3VyZVRleHRSCiAgICAgaW50IHN1cnJvZ2F0
ZVBhaXJDaGFyYWN0ZXJzID0gMDsKIAogICAgIHdoaWxlIChhZHZhbmNlKCkpIHsKLSAgICAgICAg
Y29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIgPSBtX3J1bi5kYXRhKG1fdGV4dFBvc2l0aW9u
KTsKKyAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnRDaGFyYWN0ZXIgPSBtX3J1bi5kYXRhMTYo
bV90ZXh0UG9zaXRpb24pOwogICAgICAgICBpZiAoKmN1cnJlbnRDaGFyYWN0ZXIgPT0gJyAnICYm
ICFwcmVzZXJ2ZVdoaXRlU3BhY2UgJiYgKCFkYXRhLT5sYXN0Q2hhcmFjdGVyIHx8ICpkYXRhLT5s
YXN0Q2hhcmFjdGVyID09ICcgJykpIHsKICAgICAgICAgICAgIGlmIChkYXRhLT5wcm9jZXNzUmVu
ZGVyZXIpCiAgICAgICAgICAgICAgICAgdGV4dE1ldHJpY3NWYWx1ZXMtPmFwcGVuZChTVkdUZXh0
TWV0cmljcyhTVkdUZXh0TWV0cmljczo6U2tpcHBlZFNwYWNlTWV0cmljcykpOwpJbmRleDogU291
cmNlL1dlYkNvcmUvc3ZnL1NWR0ZvbnREYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCShyZXZpc2lvbiAxMjc1MjUpCisrKyBTb3VyY2UvV2Vi
Q29yZS9zdmcvU1ZHRm9udERhdGEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQsNyArMTM0LDcg
QEAgYm9vbCBTVkdGb250RGF0YTo6YXBwbHlTVkdHbHlwaFNlbGVjdGlvbgogICAgIEFTU0VSVChp
bnQocnVuLmNoYXJhY3RlcnNMZW5ndGgoKSkgPj0gY3VycmVudENoYXJhY3Rlcik7CiAKICAgICAv
LyBBc3NvY2lhdGUgdGV4dCB3aXRoIGFyYWJpYyBmb3JtcywgaWYgbmVlZGVkLgotICAgIFN0cmlu
ZyByZW1haW5pbmdUZXh0SW5SdW4ocnVuLmRhdGEoY3VycmVudENoYXJhY3RlciksIHJ1bi5jaGFy
YWN0ZXJzTGVuZ3RoKCkgLSBjdXJyZW50Q2hhcmFjdGVyKTsKKyAgICBTdHJpbmcgcmVtYWluaW5n
VGV4dEluUnVuKHJ1bi5kYXRhMTYoY3VycmVudENoYXJhY3RlciksIHJ1bi5jaGFyYWN0ZXJzTGVu
Z3RoKCkgLSBjdXJyZW50Q2hhcmFjdGVyKTsKICAgICByZW1haW5pbmdUZXh0SW5SdW4gPSBGb250
Ojpub3JtYWxpemVTcGFjZXMocmVtYWluaW5nVGV4dEluUnVuLmNoYXJhY3RlcnMoKSwgcmVtYWlu
aW5nVGV4dEluUnVuLmxlbmd0aCgpKTsKICAgICBpZiAobWlycm9yKQogICAgICAgICByZW1haW5p
bmdUZXh0SW5SdW4gPSBjcmVhdGVTdHJpbmdXaXRoTWlycm9yZWRDaGFyYWN0ZXJzKHJlbWFpbmlu
Z1RleHRJblJ1bi5jaGFyYWN0ZXJzKCksIHJlbWFpbmluZ1RleHRJblJ1bi5sZW5ndGgoKSk7Cg==
</data>
<flag name="review"
          id="173668"
          type_id="1"
          status="+"
          setter="mitz"
    />
          </attachment>
      

    </bug>

</bugzilla>