<?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>95470</bug_id>
          
          <creation_ts>2012-08-30 09:46:16 -0700</creation_ts>
          <short_desc>[CG] ImageCG.cpp contains a mix of Image and BitmapImage functions</short_desc>
          <delta_ts>2012-08-30 13:56:28 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to>mitz</assigned_to>
          <cc>dbates</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>708732</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-08-30 09:46:16 -0700</bug_when>
    <thetext>[CG] ImageCG.cpp contains a mix of Image and BitmapImage functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708735</commentid>
    <comment_count>1</comment_count>
      <attachid>161498</attachid>
    <who name="">mitz</who>
    <bug_when>2012-08-30 09:48:41 -0700</bug_when>
    <thetext>Created attachment 161498
Split BitmapImage functions out into BitmapImageCG.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708744</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 09:53:51 -0700</bug_when>
    <thetext>Attachment 161498 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/cg/BitmapImageCG.cpp:120:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp:152:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 4 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>708800</commentid>
    <comment_count>3</comment_count>
      <attachid>161498</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-08-30 10:32:37 -0700</bug_when>
    <thetext>Comment on attachment 161498
Split BitmapImage functions out into BitmapImageCG.cpp

Attachment 161498 did not pass win-ews (win):
Output: http://queues.webkit.org/results/13690775</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708821</commentid>
    <comment_count>4</comment_count>
      <attachid>161515</attachid>
    <who name="">mitz</who>
    <bug_when>2012-08-30 10:45:01 -0700</bug_when>
    <thetext>Created attachment 161515
Split BitmapImage functions out into BitmapImageCG.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708823</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 10:47:19 -0700</bug_when>
    <thetext>Attachment 161515 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/cg/BitmapImageCG.cpp:120:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp:152:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 5 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>708826</commentid>
    <comment_count>6</comment_count>
      <attachid>161516</attachid>
    <who name="">mitz</who>
    <bug_when>2012-08-30 10:48:13 -0700</bug_when>
    <thetext>Created attachment 161516
Split BitmapImage functions out into BitmapImageCG.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708830</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-08-30 10:51:00 -0700</bug_when>
    <thetext>Attachment 161516 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/cg/BitmapImageCG.cpp:120:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp:152:  Use 0 instead of NULL.  [readability/null] [5]
Total errors found: 2 in 6 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>708883</commentid>
    <comment_count>8</comment_count>
      <attachid>161516</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2012-08-30 11:58:07 -0700</bug_when>
    <thetext>Comment on attachment 161516
Split BitmapImage functions out into BitmapImageCG.cpp

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

&gt; Source/WebCore/ChangeLog:144
&gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r127158

Hmm.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708892</commentid>
    <comment_count>9</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-08-30 12:10:57 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (From update of attachment 161516 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=161516&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/ChangeLog:144
&gt; &gt; +&gt;&gt;&gt;&gt;&gt;&gt;&gt; .r127158
&gt; 
&gt; Hmm.

Noted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708913</commentid>
    <comment_count>10</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-08-30 12:45:49 -0700</bug_when>
    <thetext>Fixed in &lt;http://trac.webkit.org/r127170&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>708926</commentid>
    <comment_count>11</comment_count>
      <attachid>161498</attachid>
    <who name="Daniel Bates">dbates</who>
    <bug_when>2012-08-30 12:52:53 -0700</bug_when>
    <thetext>Comment on attachment 161498
Split BitmapImage functions out into BitmapImageCG.cpp

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

I know that this patch was already reviewed and committed. I noticed some minor nits in the license block in the file WebCore/platform/graphics/cg/BitmapImageCG.cpp.

&gt; Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp:2
&gt; + * Copyright (C) 2004, 2005, 2006 Apple Inc. All rights reserved.

Nit: Shouldn&apos;t we update the copyright line?

&gt; Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp:13
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY

Nit: APPLE COMPUTER, INC =&gt; APPLE INC.

&gt; Source/WebCore/platform/graphics/cg/BitmapImageCG.cpp:16
&gt; + * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>709005</commentid>
    <comment_count>12</comment_count>
    <who name="">mitz</who>
    <bug_when>2012-08-30 13:56:28 -0700</bug_when>
    <thetext>We could update the license blocks, though we normally do this when making changes to the code, not when just moving existing code around.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161498</attachid>
            <date>2012-08-30 09:48:41 -0700</date>
            <delta_ts>2012-08-30 12:52:53 -0700</delta_ts>
            <desc>Split BitmapImage functions out into BitmapImageCG.cpp</desc>
            <filename>bug-95470-20120830094832.patch</filename>
            <type>text/plain</type>
            <size>30999</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzE1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEyLTA4LTMwICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgW0NHXSBJbWFnZUNHLmNwcCBjb250
YWlucyBhIG1peCBvZiBJbWFnZSBhbmQgQml0bWFwSW1hZ2UgZnVuY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ov
cHJvamVjdC5wYnhwcm9qOiBBZGRlZCBCaXRtYXBJbWFnZUNHLmNwcC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcDogQ29waWVkIGZyb20gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKKyAgICAgICAgdGhlbiBkZWxl
dGVkIEltYWdlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4KKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUNHLmNwcDogRGVsZXRlZCBCaXRtYXBJbWFnZSBhbmQgRnJhbWVEYXRh
IGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4KKwogMjAxMi0wOC0zMCAgT3R0byBEZXJlayBDaGV1
bmcgIDxvdGNoZXVuZ0ByaW0uY29tPgogCiAgICAgICAgIFtCbGFja0JlcnJ5XSBNb2RpZnlpbmcg
aG93IElQIGRvbWFpbnMgYXJlIGhhbmRsZWQgaW4gQ29va2llcwpJbmRleDogU291cmNlL1dlYkNv
cmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTI3
MTQ4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CSh3b3JraW5nIGNvcHkpCkBAIC05ODYsNiArOTg2LDcgQEAKIAkJMzc1Q0QyM0IxMTlENDRFQTAw
QTJBODU5IC8qIEh5cGhlbmF0aW9uTWFjLm1tIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzc1Q0QyMzkxMTlENDRFQTAwQTJBODU5IC8qIEh5cGhlbmF0aW9u
TWFjLm1tICovOyB9OwogCQkzNzZEQ0NFMTEzQjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzZEQ0NFMDEz
QjRGOTY2MDAyRUJFRkMgLyogVGV4dFJ1bi5jcHAgKi87IH07CiAJCTM3NzRBQkE1MEZBMjFFQjQw
MEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBP
dmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0bWFwSW1h
Z2VDRy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAz
NzdBM0E4RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi87IH07CiAJCTM3
N0M0Q0RGMTAxNEU5RjYwMEI5QUU0MiAvKiBQbGFjZWhvbGRlckRvY3VtZW50LmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzdDNENERDEwMTRFOUY2MDBC
OUFFNDIgLyogUGxhY2Vob2xkZXJEb2N1bWVudC5oICovOyB9OwogCQkzNzdDNENFMDEwMTRFOUY2
MDBCOUFFNDIgLyogUGxhY2Vob2xkZXJEb2N1bWVudC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzdDNENERTEwMTRFOUY2MDBCOUFFNDIgLyogUGxh
Y2Vob2xkZXJEb2N1bWVudC5jcHAgKi87IH07CiAJCTM3ODRDMzRCMEUxMUFBMzQwMDdEOEQ0OCAv
KiBGb250VHJhaXRzTWFzay5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMzc4NEMzNEEwRTExQUEzNDAwN0Q4RDQ4IC8qIEZvbnRUcmFpdHNNYXNrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTgwNzgsNiAr
ODA3OSw3IEBACiAJCTM3NUNEMjM5MTE5RDQ0RUEwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbk1hYy5t
bSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IEh5cGhlbmF0aW9uTWFj
Lm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzZEQ0NFMDEzQjRGOTY2MDAyRUJF
RkMgLyogVGV4dFJ1bi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBU
ZXh0UnVuLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc3NEFCQTMwRkEyMUVC
NDAwQUQ3REU5IC8qIE92ZXJsYXBUZXN0UmVxdWVzdENsaWVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdl
Q0cuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQml0bWFwSW1hZ2VD
Ry5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3N0M0Q0REMTAxNEU5RjYwMEI5
QUU0MiAvKiBQbGFjZWhvbGRlckRvY3VtZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFBsYWNlaG9sZGVyRG9jdW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzc3QzRDREUxMDE0RTlGNjAwQjlBRTQyIC8qIFBsYWNlaG9sZGVyRG9jdW1lbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gUGxhY2Vob2xkZXJEb2N1bWVudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3ODRDMzRBMEUxMUFBMzQwMDdEOEQ0
OCAvKiBGb250VHJhaXRzTWFzay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBG
b250VHJhaXRzTWFzay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTk3MjAsNiAr
MTk3MjIsNyBAQAogCQlCMjc1MzUyOTBCMDUzODE0MDAyQ0U2NEYgLyogY2cgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAorCQkJCTM3N0EzQThGMTVFRkNFOUEwMDU5
RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNwcCAqLywKIAkJCQkwRkNGMzMyMzBGMkI5NzE1MDA0QjY3
OTUgLyogQ29sb3JDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkIwQjA1MzgxNDAwMkNFNjRGIC8qIEZs
b2F0UG9pbnRDRy5jcHAgKi8sCiAJCQkJQjI3NTM1MkMwQjA1MzgxNDAwMkNFNjRGIC8qIEZsb2F0
UmVjdENHLmNwcCAqLywKQEAgLTI4NTc1LDYgKzI4NTc4LDcgQEAKIAkJCQlGQkQ2QUY4QjE1RUYy
NUU1MDA4QjcxMTAgLyogQ1NTQmFzaWNTaGFwZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRkJE
NkFGOEQxNUVGMjYwQTAwOEI3MTEwIC8qIEJhc2ljU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTRGQjM5MEFEMTVFRjYxRjMwMDdBRDUxRiAvKiBHZW5lcmF0ZWRJbWFnZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkzNzdBM0E5MDE1RUZDRTlCMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5j
cHAgaW4gU291cmNlcyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9j
ZXNzaW5nID0gMDsKIAkJfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0JpdG1hcEltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCShyZXZpc2lvbiAxMjcxNDgpCShmcm9t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwOjEyNzE0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA0LCAyMDA1LCAyMDA2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisKKyNpZiBVU0Uo
Q0cpCisKKyNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKKyNpbmNsdWRlICJGbG9hdENvbnZl
cnNpb24uaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRl
eHRDRy5oIgorI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKKyNpbmNsdWRlICJQREZEb2N1bWVu
dEltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlIDxBcHBsaWNh
dGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KKyNpbmNsdWRlIDxDb3JlRm91bmRh
dGlvbi9DRkFycmF5Lmg+CisjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgorCisjaWYgUExBVEZP
Uk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkKKyNpbmNsdWRlICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCisjZW5kaWYKKworI2lmIFBMQVRGT1JNKFdJTikKKyNpbmNsdWRlIDxXZWJLaXRT
eXN0ZW1JbnRlcmZhY2UvV2ViS2l0U3lzdGVtSW50ZXJmYWNlLmg+CisjZW5kaWYKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitib29sIEZyYW1lRGF0YTo6Y2xlYXIoYm9vbCBjbGVhck1ldGFkYXRh
KQoreworICAgIGlmIChjbGVhck1ldGFkYXRhKQorICAgICAgICBtX2hhdmVNZXRhZGF0YSA9IGZh
bHNlOworCisgICAgbV9vcmllbnRhdGlvbiA9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOworCisg
ICAgaWYgKG1fZnJhbWUpIHsKKyAgICAgICAgQ0dJbWFnZVJlbGVhc2UobV9mcmFtZSk7CisgICAg
ICAgIG1fZnJhbWUgPSAwOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJu
IGZhbHNlOworfQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KKy8vIEltYWdlIENsYXNzCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KKworQml0bWFwSW1hZ2U6OkJpdG1hcEltYWdlKENHSW1hZ2VS
ZWYgY2dJbWFnZSwgSW1hZ2VPYnNlcnZlciogb2JzZXJ2ZXIpCisgICAgOiBJbWFnZShvYnNlcnZl
cikKKyAgICAsIG1fY3VycmVudEZyYW1lKDApCisgICAgLCBtX2ZyYW1lcygwKQorICAgICwgbV9m
cmFtZVRpbWVyKDApCisgICAgLCBtX3JlcGV0aXRpb25Db3VudChjQW5pbWF0aW9uTm9uZSkKKyAg
ICAsIG1fcmVwZXRpdGlvbkNvdW50U3RhdHVzKFVua25vd24pCisgICAgLCBtX3JlcGV0aXRpb25z
Q29tcGxldGUoMCkKKyAgICAsIG1fZGVjb2RlZFNpemUoMCkKKyAgICAsIG1fZGVjb2RlZFByb3Bl
cnRpZXNTaXplKDApCisgICAgLCBtX2ZyYW1lQ291bnQoMSkKKyAgICAsIG1faXNTb2xpZENvbG9y
KGZhbHNlKQorICAgICwgbV9jaGVja2VkRm9yU29saWRDb2xvcihmYWxzZSkKKyAgICAsIG1fYW5p
bWF0aW9uRmluaXNoZWQodHJ1ZSkKKyAgICAsIG1fYWxsRGF0YVJlY2VpdmVkKHRydWUpCisgICAg
LCBtX2hhdmVTaXplKHRydWUpCisgICAgLCBtX3NpemVBdmFpbGFibGUodHJ1ZSkKKyAgICAsIG1f
aGF2ZUZyYW1lQ291bnQodHJ1ZSkKK3sKKyAgICBDR0Zsb2F0IHdpZHRoID0gQ0dJbWFnZUdldFdp
ZHRoKGNnSW1hZ2UpOworICAgIENHRmxvYXQgaGVpZ2h0ID0gQ0dJbWFnZUdldEhlaWdodChjZ0lt
YWdlKTsKKyAgICBtX2RlY29kZWRTaXplID0gd2lkdGggKiBoZWlnaHQgKiA0OworICAgIG1fc2l6
ZSA9IEludFNpemUod2lkdGgsIGhlaWdodCk7CisKKyAgICAvLyBTaW5jZSB3ZSBkb24ndCBoYXZl
IGEgZGVjb2Rlciwgd2UgY2FuJ3QgZmlndXJlIG91dCB0aGUgaW1hZ2Ugb3JpZW50YXRpb24uCisg
ICAgLy8gU2V0IG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiB0byBiZSB0aGUgc2FtZSBhcyBt
X3NpemUgc28gaXQncyBub3QgMHgwLgorICAgIG1fc2l6ZVJlc3BlY3RpbmdPcmllbnRhdGlvbiA9
IEludFNpemUod2lkdGgsIGhlaWdodCk7CisKKyAgICBtX2ZyYW1lcy5ncm93KDEpOworICAgIG1f
ZnJhbWVzWzBdLm1fZnJhbWUgPSBjZ0ltYWdlOworICAgIG1fZnJhbWVzWzBdLm1faGFzQWxwaGEg
PSB0cnVlOworICAgIG1fZnJhbWVzWzBdLm1faGF2ZU1ldGFkYXRhID0gdHJ1ZTsKKworICAgIGNo
ZWNrRm9yU29saWRDb2xvcigpOworfQorCisvLyBEcmF3aW5nIFJvdXRpbmVzCisKK3ZvaWQgQml0
bWFwSW1hZ2U6OmNoZWNrRm9yU29saWRDb2xvcigpCit7CisgICAgbV9jaGVja2VkRm9yU29saWRD
b2xvciA9IHRydWU7CisgICAgaWYgKGZyYW1lQ291bnQoKSA+IDEpIHsKKyAgICAgICAgbV9pc1Nv
bGlkQ29sb3IgPSBmYWxzZTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENHSW1hZ2VS
ZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgoMCk7CisgICAgCisgICAgLy8gQ3VycmVudGx5IHdlIG9u
bHkgY2hlY2sgZm9yIHNvbGlkIGNvbG9yIGluIHRoZSBpbXBvcnRhbnQgc3BlY2lhbCBjYXNlIG9m
IGEgMXgxIGltYWdlLgorICAgIGlmIChpbWFnZSAmJiBDR0ltYWdlR2V0V2lkdGgoaW1hZ2UpID09
IDEgJiYgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkgPT0gMSkgeworICAgICAgICB1bnNpZ25lZCBj
aGFyIHBpeGVsWzRdOyAvLyBSR0JBCisgICAgICAgIFJldGFpblB0cjxDR0NvbnRleHRSZWY+IGJt
YXAoQWRvcHRDRiwgQ0dCaXRtYXBDb250ZXh0Q3JlYXRlKHBpeGVsLCAxLCAxLCA4LCBzaXplb2Yo
cGl4ZWwpLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCksCisgICAgICAgICAgICBrQ0dJbWFnZUFs
cGhhUHJlbXVsdGlwbGllZExhc3QgfCBrQ0dCaXRtYXBCeXRlT3JkZXIzMkJpZykpOworICAgICAg
ICBpZiAoIWJtYXApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdyYXBoaWNzQ29udGV4
dChibWFwLmdldCgpKS5zZXRDb21wb3NpdGVPcGVyYXRpb24oQ29tcG9zaXRlQ29weSk7CisgICAg
ICAgIENHUmVjdCBkc3QgPSB7IHswLCAwfSwgezEsIDF9IH07CisgICAgICAgIENHQ29udGV4dERy
YXdJbWFnZShibWFwLmdldCgpLCBkc3QsIGltYWdlKTsKKyAgICAgICAgaWYgKHBpeGVsWzNdID09
IDApCisgICAgICAgICAgICBtX3NvbGlkQ29sb3IgPSBDb2xvcigwLCAwLCAwLCAwKTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IocGl4ZWxbMF0gKiAyNTUg
LyBwaXhlbFszXSwgcGl4ZWxbMV0gKiAyNTUgLyBwaXhlbFszXSwgcGl4ZWxbMl0gKiAyNTUgLyBw
aXhlbFszXSwgcGl4ZWxbM10pOworICAgICAgICBtX2lzU29saWRDb2xvciA9IHRydWU7CisgICAg
fQorfQorCitSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2U6OmltYWdlV2l0aENvbG9yU3BhY2Uo
Q0dJbWFnZVJlZiBvcmlnaW5hbEltYWdlLCBDb2xvclNwYWNlIGNvbG9yU3BhY2UpCit7CisgICAg
Q0dDb2xvclNwYWNlUmVmIG9yaWdpbmFsQ29sb3JTcGFjZSA9IENHSW1hZ2VHZXRDb2xvclNwYWNl
KG9yaWdpbmFsSW1hZ2UpOworCisgICAgLy8gSWYgdGhlIGltYWdlIGFscmVhZHkgaGFzIGEgKG5v
bi1kZXZpY2UpIGNvbG9yIHNwYWNlLCB3ZSBkb24ndCB3YW50IHRvCisgICAgLy8gb3ZlcnJpZGUg
aXQsIHNvIHJldHVybi4KKyAgICBpZiAoIW9yaWdpbmFsQ29sb3JTcGFjZSB8fCAhQ0ZFcXVhbChv
cmlnaW5hbENvbG9yU3BhY2UsIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSkpCisgICAgICAgIHJl
dHVybiBvcmlnaW5hbEltYWdlOworCisgICAgc3dpdGNoIChjb2xvclNwYWNlKSB7CisgICAgY2Fz
ZSBDb2xvclNwYWNlRGV2aWNlUkdCOgorICAgICAgICByZXR1cm4gb3JpZ2luYWxJbWFnZTsKKyAg
ICBjYXNlIENvbG9yU3BhY2VTUkdCOgorICAgICAgICByZXR1cm4gUmV0YWluUHRyPENHSW1hZ2VS
ZWY+KEFkb3B0Q0YsIENHSW1hZ2VDcmVhdGVDb3B5V2l0aENvbG9yU3BhY2Uob3JpZ2luYWxJbWFn
ZSwgc1JHQkNvbG9yU3BhY2VSZWYoKSkpOworICAgIGNhc2UgQ29sb3JTcGFjZUxpbmVhclJHQjoK
KyAgICAgICAgcmV0dXJuIFJldGFpblB0cjxDR0ltYWdlUmVmPihBZG9wdENGLCBDR0ltYWdlQ3Jl
YXRlQ29weVdpdGhDb2xvclNwYWNlKG9yaWdpbmFsSW1hZ2UsIGxpbmVhclJHQkNvbG9yU3BhY2VS
ZWYoKSkpOworICAgIH0KKworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBv
cmlnaW5hbEltYWdlOworfQorCitDR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVm
KCkKK3sKKyAgICByZXR1cm4gZnJhbWVBdEluZGV4KDApOworfQorCitDR0ltYWdlUmVmIEJpdG1h
cEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKK3sK
KyAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCBjb3VudDsgKytpKSB7CisgICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lQXRJ
bmRleChpKTsKKyAgICAgICAgaWYgKGNnSW1hZ2UgJiYgSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgo
Y2dJbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSkpID09IHNpemUpCisgICAgICAgICAg
ICByZXR1cm4gY2dJbWFnZTsKKyAgICB9CisKKyAgICAvLyBGYWxsYmFjayB0byB0aGUgZGVmYXVs
dCBDR0ltYWdlUmVmIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKKyAgICByZXR1cm4g
Z2V0Q0dJbWFnZVJlZigpOworfQorCitSZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6
OmdldENHSW1hZ2VBcnJheSgpCit7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwor
ICAgIGlmICghY291bnQpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIENGTXV0YWJsZUFy
cmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBl
QXJyYXlDYWxsQmFja3MpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkg
eworICAgICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJyRnJhbWUgPSBmcmFtZUF0SW5kZXgoaSkpCisg
ICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7CisgICAgfQor
ICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4oQWRvcHRDRiwgYXJyYXkpOworfQorCit2
b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBGbG9hdFJl
Y3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNv
bG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQoreworICAgIGRyYXcoY3R4LCBkc3RSZWN0
LCBzcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0
aW9uKTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29s
b3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBS
ZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24p
Cit7CisgICAgc3RhcnRBbmltYXRpb24oKTsKKworICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBmcmFt
ZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9v
IGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0LgorICAgICAgICByZXR1cm47CisgICAg
CisgICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7CisgICAgICAgIGZpbGxXaXRoU29s
aWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2UsIGNv
bXBvc2l0ZU9wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIEZsb2F0U2l6ZSBzZWxm
U2l6ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsKKyAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0
aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247CisKKyAgICBpZiAoc2hvdWxkUmVzcGVjdElt
YWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCisgICAgICAgIG9yaWVu
dGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOworCisgICAg
Y3R4dC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLCBzZWxmU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBk
ZXN0UmVjdCwgc3JjUmVjdCwgY29tcG9zaXRlT3AsIG9yaWVudGF0aW9uKTsKKworICAgIGlmIChp
bWFnZU9ic2VydmVyKCkpCisgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsK
K30KKworc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRl
eHRSZWYgY29udGV4dCkKK3sKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gKENHSW1hZ2VSZWYpaW5m
bzsKKyAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRl
eHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChp
bWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKSksIGltYWdlKTsKK30KKwordm9pZCBJbWFn
ZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRp
bGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCisgICAgICAg
ICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHls
ZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RS
ZWN0KQoreworICAgIGlmICghbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN0eHQtPnBsYXRmb3Jt
Q29udGV4dCgpOworICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY3R4
dCk7CisgICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0UmVjdCk7CisgICAgY3R4
dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKKyAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0o
Y29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7
CisgICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOworICAgIAorICAgIC8vIENv
bXB1dGUgdGhlIHNjYWxlZCB0aWxlIHNpemUuCisgICAgZmxvYXQgc2NhbGVkVGlsZUhlaWdodCA9
IHRpbGVSZWN0LmhlaWdodCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNm
b3JtLmQoKSk7CisgICAgCisgICAgLy8gV2UgaGF2ZSB0byBhZGp1c3QgdGhlIHBoYXNlIHRvIGRl
YWwgd2l0aCB0aGUgZmFjdCB3ZSdyZSBpbiBDYXJ0ZXNpYW4gc3BhY2Ugbm93ICh3aXRoIHRoZSBi
b3R0b20gbGVmdCBjb3JuZXIgb2YgZGVzdFJlY3QgYmVpbmcKKyAgICAvLyB0aGUgb3JpZ2luKS4K
KyAgICBmbG9hdCBhZGp1c3RlZFggPSBwaGFzZS54KCkgLSBkZXN0UmVjdC54KCkgKyB0aWxlUmVj
dC54KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsgLy8g
V2UgdHJhbnNsYXRlZCB0aGUgY29udGV4dCBzbyB0aGF0IGRlc3RSZWN0LngoKSBpcyB0aGUgb3Jp
Z2luLCBzbyBzdWJ0cmFjdCBpdCBvdXQuCisgICAgZmxvYXQgYWRqdXN0ZWRZID0gZGVzdFJlY3Qu
aGVpZ2h0KCkgLSAocGhhc2UueSgpIC0gZGVzdFJlY3QueSgpICsgdGlsZVJlY3QueSgpICogbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSkgKyBzY2FsZWRUaWxlSGVp
Z2h0KTsKKworICAgIENHSW1hZ2VSZWYgdGlsZUltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKKyAgICBmbG9hdCBoID0gQ0dJbWFnZUdldEhlaWdodCh0aWxlSW1hZ2UpOworCisg
ICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHN1YkltYWdlOworICAgIGlmICh0aWxlUmVjdC5zaXpl
KCkgPT0gc2l6ZSgpKQorICAgICAgICBzdWJJbWFnZSA9IHRpbGVJbWFnZTsKKyAgICBlbHNlIHsK
KyAgICAgICAgLy8gQ29weWluZyBhIHN1Yi1pbWFnZSBvdXQgb2YgYSBwYXJ0aWFsbHktZGVjb2Rl
ZCBpbWFnZSBzdG9wcyB0aGUgZGVjb2Rpbmcgb2YgdGhlIG9yaWdpbmFsIGltYWdlLiBJdCBzaG91
bGQgbmV2ZXIgaGFwcGVuCisgICAgICAgIC8vIGJlY2F1c2Ugc3ViLWltYWdlcyBhcmUgb25seSB1
c2VkIGZvciBib3JkZXItaW1hZ2UsIHdoaWNoIG9ubHkgcmVuZGVycyB3aGVuIHRoZSBpbWFnZSBp
cyBmdWxseSBkZWNvZGVkLgorICAgICAgICBBU1NFUlQoaCA9PSBoZWlnaHQoKSk7CisgICAgICAg
IHN1YkltYWdlLmFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUluUmVjdCh0aWxlSW1hZ2Us
IHRpbGVSZWN0KSk7CisgICAgfQorCisgICAgLy8gQWRqdXN0IHRoZSBjb2xvciBzcGFjZS4KKyAg
ICBzdWJJbWFnZSA9IEltYWdlOjppbWFnZVdpdGhDb2xvclNwYWNlKHN1YkltYWdlLmdldCgpLCBz
dHlsZUNvbG9yU3BhY2UpOworICAgIAorICAgIC8vIExlb3BhcmQgaGFzIGFuIG9wdGltaXplZCBj
YWxsIGZvciB0aGUgdGlsaW5nIG9mIGltYWdlIHBhdHRlcm5zLCBidXQgd2UgY2FuIG9ubHkgdXNl
IGl0IGlmIHRoZSBpbWFnZSBoYXMgYmVlbiBkZWNvZGVkIGVub3VnaCB0aGF0CisgICAgLy8gaXRz
IGJ1ZmZlciBpcyB0aGUgc2FtZSBzaXplIGFzIHRoZSBvdmVyYWxsIGltYWdlLiAgQmVjYXVzZSBh
IHBhcnRpYWxseSBkZWNvZGVkIENHSW1hZ2VSZWYgd2l0aCBhIHNtYWxsZXIgd2lkdGggb3IgaGVp
Z2h0IHRoYW4gdGhlCisgICAgLy8gb3ZlcmFsbCBpbWFnZSBidWZmZXIgbmVlZHMgdG8gdGlsZSB3
aXRoICJnYXBzIiwgd2UgY2FuJ3QgdXNlIHRoZSBvcHRpbWl6ZWQgdGlsaW5nIGNhbGwgaW4gdGhh
dCBjYXNlLgorICAgIC8vIEZJWE1FOiBXZSBjYW5ub3QgdXNlIENHQ29udGV4dERyYXdUaWxlZElt
YWdlIHdpdGggc2NhbGVkIHRpbGVzIG9uIExlb3BhcmQsIGJlY2F1c2UgaXQgc3VmZmVycyBmcm9t
IHJvdW5kaW5nIGVycm9ycy4gIFNub3cgTGVvcGFyZCBpcyBvay4KKyAgICBmbG9hdCBzY2FsZWRU
aWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0
ZXJuVHJhbnNmb3JtLmEoKSk7CisgICAgZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1h
Z2UpOworI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlS
RUQgPT0gMTA1MAorICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhl
aWdodCgpICYmIHNjYWxlZFRpbGVXaWR0aCA9PSB0aWxlUmVjdC53aWR0aCgpICYmIHNjYWxlZFRp
bGVIZWlnaHQgPT0gdGlsZVJlY3QuaGVpZ2h0KCkpCisjZWxzZQorICAgIGlmICh3ID09IHNpemUo
KS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpKQorI2VuZGlmCisgICAgICAgIENHQ29u
dGV4dERyYXdUaWxlZEltYWdlKGNvbnRleHQsIEZsb2F0UmVjdChhZGp1c3RlZFgsIGFkanVzdGVk
WSwgc2NhbGVkVGlsZVdpZHRoLCBzY2FsZWRUaWxlSGVpZ2h0KSwgc3ViSW1hZ2UuZ2V0KCkpOwor
ICAgIGVsc2UgeworCisgICAgLy8gT24gTGVvcGFyZCBhbmQgbmV3ZXIsIHRoaXMgY29kZSBub3cg
b25seSBydW5zIGZvciBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZXMgd2hvc2UgYnVmZmVycyBkbyBu
b3QgeWV0IG1hdGNoIHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGltYWdlLgorICAgIHN0YXRpYyBj
b25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9IHsgMCwgZHJhd1BhdHRl
cm5DYWxsYmFjaywgTlVMTCB9OworICAgIENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZm
aW5lVHJhbnNmb3JtTWFrZShuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQocGF0dGVyblRyYW5zZm9y
bS5hKCkpLCAwLCAwLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQocGF0dGVyblRyYW5zZm9ybS5k
KCkpLCBhZGp1c3RlZFgsIGFkanVzdGVkWSk7CisgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zv
cm1Db25jYXQobWF0cml4LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkpOworICAgIC8vIFRoZSB0
b3Agb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBpcyBkcmF3biBhdCB0aGUgYm90dG9tIG9m
IHRoZSB0aWxlLiBNYXAgaXQgdG8gdGhlIHRvcC4KKyAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5z
Zm9ybVRyYW5zbGF0ZShtYXRyaXgsIDAsIHNpemUoKS5oZWlnaHQoKSAtIGgpOworICAgIFJldGFp
blB0cjxDR1BhdHRlcm5SZWY+IHBhdHRlcm4oQWRvcHRDRiwgQ0dQYXR0ZXJuQ3JlYXRlKHN1Yklt
YWdlLmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0Lmhl
aWdodCgpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1h
dHJpeCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCksIAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50
U3BhY2luZywgdHJ1ZSwgJnBhdHRlcm5DYWxsYmFja3MpKTsKKyAgICBpZiAoIXBhdHRlcm4pCisg
ICAgICAgIHJldHVybjsKKworICAgIFJldGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IHBhdHRlcm5T
cGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDApKTsKKyAgICAKKyAgICBD
R0Zsb2F0IGFscGhhID0gMTsKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IoQWRvcHRD
RiwgQ0dDb2xvckNyZWF0ZVdpdGhQYXR0ZXJuKHBhdHRlcm5TcGFjZS5nZXQoKSwgcGF0dGVybi5n
ZXQoKSwgJmFscGhhKSk7CisgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yU3BhY2UoY29udGV4dCwg
cGF0dGVyblNwYWNlLmdldCgpKTsKKworICAgIC8vIEZJWE1FOiBSZWFsbHkgd2FudCBhIHB1Ymxp
YyBBUEkgZm9yIHRoaXMuICBJdCBpcyBqdXN0IENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwg
Q0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl5KS4KKyAgICB3a1NldEJhc2VDVE0oY29udGV4dCwgQ0dB
ZmZpbmVUcmFuc2Zvcm1JZGVudGl0eSk7CisgICAgQ0dDb250ZXh0U2V0UGF0dGVyblBoYXNlKGNv
bnRleHQsIENHU2l6ZVplcm8pOworCisgICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9y
KGNvbnRleHQsIGNvbG9yLmdldCgpKTsKKyAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBD
R0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCkpOworCisgICAgfQorCisgICAgc3Rh
dGVTYXZlci5yZXN0b3JlKCk7CisKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBp
bWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Cit9CisKKworfQorCisjZW5kaWYgLy8gVVNF
KENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvQml0bWFwSW1h
Z2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvQml0bWFwSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDEyNzE0OCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0yOCwxNSArMjgsMTAgQEAKIAogI2lmIFVTRShDRykKIAotI2luY2x1ZGUgIkFmZmluZVRyYW5z
Zm9ybS5oIgogI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dENHLmgiCiAjaW5jbHVkZSAiSW1hZ2VPYnNl
cnZlci5oIgotI2luY2x1ZGUgIlBERkRvY3VtZW50SW1hZ2UuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bVN0cmluZy5oIgogI2luY2x1ZGUgPEFwcGxpY2F0aW9uU2VydmljZXMvQXBwbGljYXRpb25TZXJ2
aWNlcy5oPgotI2luY2x1ZGUgPENvcmVGb3VuZGF0aW9uL0NGQXJyYXkuaD4KICNpbmNsdWRlIDx3
dGYvUmV0YWluUHRyLmg+CiAKICNpZiBQTEFURk9STShNQUMpIHx8IFBMQVRGT1JNKENIUk9NSVVN
KQpAQCAtNjQsMTAgKzU5LDYgQEAgYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRh
ZGF0YQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotLy8gPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0vLyBJbWFnZSBDbGFzcwotLy8gPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0KIEJpdG1hcEltYWdlOjpCaXRt
YXBJbWFnZShDR0ltYWdlUmVmIGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQogICAg
IDogSW1hZ2Uob2JzZXJ2ZXIpCiAgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQpAQCAtMTM0LDI4ICsx
MjUsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQogICAgIH0KIH0K
IAotUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlOjppbWFnZVdpdGhDb2xvclNwYWNlKENHSW1h
Z2VSZWYgb3JpZ2luYWxJbWFnZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQotewotICAgIENHQ29s
b3JTcGFjZVJlZiBvcmlnaW5hbENvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFjZShvcmln
aW5hbEltYWdlKTsKLQotICAgIC8vIElmIHRoZSBpbWFnZSBhbHJlYWR5IGhhcyBhIChub24tZGV2
aWNlKSBjb2xvciBzcGFjZSwgd2UgZG9uJ3Qgd2FudCB0bwotICAgIC8vIG92ZXJyaWRlIGl0LCBz
byByZXR1cm4uCi0gICAgaWYgKCFvcmlnaW5hbENvbG9yU3BhY2UgfHwgIUNGRXF1YWwob3JpZ2lu
YWxDb2xvclNwYWNlLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCkpKQotICAgICAgICByZXR1cm4g
b3JpZ2luYWxJbWFnZTsKLQotICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgewotICAgIGNhc2UgQ29s
b3JTcGFjZURldmljZVJHQjoKLSAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW1hZ2U7Ci0gICAgY2Fz
ZSBDb2xvclNwYWNlU1JHQjoKLSAgICAgICAgcmV0dXJuIFJldGFpblB0cjxDR0ltYWdlUmVmPihB
ZG9wdENGLCBDR0ltYWdlQ3JlYXRlQ29weVdpdGhDb2xvclNwYWNlKG9yaWdpbmFsSW1hZ2UsIHNS
R0JDb2xvclNwYWNlUmVmKCkpKTsKLSAgICBjYXNlIENvbG9yU3BhY2VMaW5lYXJSR0I6Ci0gICAg
ICAgIHJldHVybiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4oQWRvcHRDRiwgQ0dJbWFnZUNyZWF0ZUNv
cHlXaXRoQ29sb3JTcGFjZShvcmlnaW5hbEltYWdlLCBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkp
KTsKLSAgICB9Ci0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4gb3JpZ2lu
YWxJbWFnZTsKLX0KLQogQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCiB7
CiAgICAgcmV0dXJuIGZyYW1lQXRJbmRleCgwKTsKQEAgLTIxOCwxMDAgKzE4Nyw2IEBAIHZvaWQg
Qml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiAKICAgICAgICAgaW1hZ2VPYnNlcnZl
cigpLT5kaWREcmF3KHRoaXMpOwogfQogCi1zdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNhbGxiYWNr
KHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQotewotICAgIENHSW1hZ2VSZWYgaW1h
Z2UgPSAoQ0dJbWFnZVJlZilpbmZvOwotICAgIENHQ29udGV4dERyYXdJbWFnZShjb250ZXh0LCBH
cmFwaGljc0NvbnRleHQoY29udGV4dCkucm91bmRUb0RldmljZVBpeGVscyhGbG9hdFJlY3QoMCwg
MCwgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChpbWFnZSkpKSwgaW1h
Z2UpOwotfQotCi12b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqIGN0eHQs
IGNvbnN0IEZsb2F0UmVjdCYgdGlsZVJlY3QsIGNvbnN0IEFmZmluZVRyYW5zZm9ybSYgcGF0dGVy
blRyYW5zZm9ybSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEZsb2F0UG9pbnQmIHBo
YXNlLCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3AsIGNv
bnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QpCi17Ci0gICAgaWYgKCFuYXRpdmVJbWFnZUZvckN1cnJl
bnRGcmFtZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIXBhdHRlcm5UcmFuc2Zvcm0u
aXNJbnZlcnRpYmxlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIENHQ29udGV4dFJlZiBjb250
ZXh0ID0gY3R4dC0+cGxhdGZvcm1Db250ZXh0KCk7Ci0gICAgR3JhcGhpY3NDb250ZXh0U3RhdGVT
YXZlciBzdGF0ZVNhdmVyKCpjdHh0KTsKLSAgICBDR0NvbnRleHRDbGlwVG9SZWN0KGNvbnRleHQs
IGRlc3RSZWN0KTsKLSAgICBjdHh0LT5zZXRDb21wb3NpdGVPcGVyYXRpb24ob3ApOwotICAgIENH
Q29udGV4dFRyYW5zbGF0ZUNUTShjb250ZXh0LCBkZXN0UmVjdC54KCksIGRlc3RSZWN0LnkoKSAr
IGRlc3RSZWN0LmhlaWdodCgpKTsKLSAgICBDR0NvbnRleHRTY2FsZUNUTShjb250ZXh0LCAxLCAt
MSk7Ci0gICAgCi0gICAgLy8gQ29tcHV0ZSB0aGUgc2NhbGVkIHRpbGUgc2l6ZS4KLSAgICBmbG9h
dCBzY2FsZWRUaWxlSGVpZ2h0ID0gdGlsZVJlY3QuaGVpZ2h0KCkgKiBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKTsKLSAgICAKLSAgICAvLyBXZSBoYXZlIHRvIGFk
anVzdCB0aGUgcGhhc2UgdG8gZGVhbCB3aXRoIHRoZSBmYWN0IHdlJ3JlIGluIENhcnRlc2lhbiBz
cGFjZSBub3cgKHdpdGggdGhlIGJvdHRvbSBsZWZ0IGNvcm5lciBvZiBkZXN0UmVjdCBiZWluZwot
ICAgIC8vIHRoZSBvcmlnaW4pLgotICAgIGZsb2F0IGFkanVzdGVkWCA9IHBoYXNlLngoKSAtIGRl
c3RSZWN0LngoKSArIHRpbGVSZWN0LngoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVy
blRyYW5zZm9ybS5hKCkpOyAvLyBXZSB0cmFuc2xhdGVkIHRoZSBjb250ZXh0IHNvIHRoYXQgZGVz
dFJlY3QueCgpIGlzIHRoZSBvcmlnaW4sIHNvIHN1YnRyYWN0IGl0IG91dC4KLSAgICBmbG9hdCBh
ZGp1c3RlZFkgPSBkZXN0UmVjdC5oZWlnaHQoKSAtIChwaGFzZS55KCkgLSBkZXN0UmVjdC55KCkg
KyB0aWxlUmVjdC55KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0u
ZCgpKSArIHNjYWxlZFRpbGVIZWlnaHQpOwotCi0gICAgQ0dJbWFnZVJlZiB0aWxlSW1hZ2UgPSBu
YXRpdmVJbWFnZUZvckN1cnJlbnRGcmFtZSgpOwotICAgIGZsb2F0IGggPSBDR0ltYWdlR2V0SGVp
Z2h0KHRpbGVJbWFnZSk7Ci0KLSAgICBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gc3ViSW1hZ2U7Ci0g
ICAgaWYgKHRpbGVSZWN0LnNpemUoKSA9PSBzaXplKCkpCi0gICAgICAgIHN1YkltYWdlID0gdGls
ZUltYWdlOwotICAgIGVsc2UgewotICAgICAgICAvLyBDb3B5aW5nIGEgc3ViLWltYWdlIG91dCBv
ZiBhIHBhcnRpYWxseS1kZWNvZGVkIGltYWdlIHN0b3BzIHRoZSBkZWNvZGluZyBvZiB0aGUgb3Jp
Z2luYWwgaW1hZ2UuIEl0IHNob3VsZCBuZXZlciBoYXBwZW4KLSAgICAgICAgLy8gYmVjYXVzZSBz
dWItaW1hZ2VzIGFyZSBvbmx5IHVzZWQgZm9yIGJvcmRlci1pbWFnZSwgd2hpY2ggb25seSByZW5k
ZXJzIHdoZW4gdGhlIGltYWdlIGlzIGZ1bGx5IGRlY29kZWQuCi0gICAgICAgIEFTU0VSVChoID09
IGhlaWdodCgpKTsKLSAgICAgICAgc3ViSW1hZ2UuYWRvcHRDRihDR0ltYWdlQ3JlYXRlV2l0aElt
YWdlSW5SZWN0KHRpbGVJbWFnZSwgdGlsZVJlY3QpKTsKLSAgICB9Ci0KLSAgICAvLyBBZGp1c3Qg
dGhlIGNvbG9yIHNwYWNlLgotICAgIHN1YkltYWdlID0gSW1hZ2U6OmltYWdlV2l0aENvbG9yU3Bh
Y2Uoc3ViSW1hZ2UuZ2V0KCksIHN0eWxlQ29sb3JTcGFjZSk7Ci0gICAgCi0gICAgLy8gTGVvcGFy
ZCBoYXMgYW4gb3B0aW1pemVkIGNhbGwgZm9yIHRoZSB0aWxpbmcgb2YgaW1hZ2UgcGF0dGVybnMs
IGJ1dCB3ZSBjYW4gb25seSB1c2UgaXQgaWYgdGhlIGltYWdlIGhhcyBiZWVuIGRlY29kZWQgZW5v
dWdoIHRoYXQKLSAgICAvLyBpdHMgYnVmZmVyIGlzIHRoZSBzYW1lIHNpemUgYXMgdGhlIG92ZXJh
bGwgaW1hZ2UuICBCZWNhdXNlIGEgcGFydGlhbGx5IGRlY29kZWQgQ0dJbWFnZVJlZiB3aXRoIGEg
c21hbGxlciB3aWR0aCBvciBoZWlnaHQgdGhhbiB0aGUKLSAgICAvLyBvdmVyYWxsIGltYWdlIGJ1
ZmZlciBuZWVkcyB0byB0aWxlIHdpdGggImdhcHMiLCB3ZSBjYW4ndCB1c2UgdGhlIG9wdGltaXpl
ZCB0aWxpbmcgY2FsbCBpbiB0aGF0IGNhc2UuCi0gICAgLy8gRklYTUU6IFdlIGNhbm5vdCB1c2Ug
Q0dDb250ZXh0RHJhd1RpbGVkSW1hZ2Ugd2l0aCBzY2FsZWQgdGlsZXMgb24gTGVvcGFyZCwgYmVj
YXVzZSBpdCBzdWZmZXJzIGZyb20gcm91bmRpbmcgZXJyb3JzLiAgU25vdyBMZW9wYXJkIGlzIG9r
LgotICAgIGZsb2F0IHNjYWxlZFRpbGVXaWR0aCA9IHRpbGVSZWN0LndpZHRoKCkgKiBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsKLSAgICBmbG9hdCB3ID0gQ0dJ
bWFnZUdldFdpZHRoKHRpbGVJbWFnZSk7Ci0jaWYgIVBMQVRGT1JNKElPUykgJiYgX19NQUNfT1Nf
WF9WRVJTSU9OX01JTl9SRVFVSVJFRCA9PSAxMDUwCi0gICAgaWYgKHcgPT0gc2l6ZSgpLndpZHRo
KCkgJiYgaCA9PSBzaXplKCkuaGVpZ2h0KCkgJiYgc2NhbGVkVGlsZVdpZHRoID09IHRpbGVSZWN0
LndpZHRoKCkgJiYgc2NhbGVkVGlsZUhlaWdodCA9PSB0aWxlUmVjdC5oZWlnaHQoKSkKLSNlbHNl
Ci0gICAgaWYgKHcgPT0gc2l6ZSgpLndpZHRoKCkgJiYgaCA9PSBzaXplKCkuaGVpZ2h0KCkpCi0j
ZW5kaWYKLSAgICAgICAgQ0dDb250ZXh0RHJhd1RpbGVkSW1hZ2UoY29udGV4dCwgRmxvYXRSZWN0
KGFkanVzdGVkWCwgYWRqdXN0ZWRZLCBzY2FsZWRUaWxlV2lkdGgsIHNjYWxlZFRpbGVIZWlnaHQp
LCBzdWJJbWFnZS5nZXQoKSk7Ci0gICAgZWxzZSB7Ci0KLSAgICAvLyBPbiBMZW9wYXJkIGFuZCBu
ZXdlciwgdGhpcyBjb2RlIG5vdyBvbmx5IHJ1bnMgZm9yIHBhcnRpYWxseSBkZWNvZGVkIGltYWdl
cyB3aG9zZSBidWZmZXJzIGRvIG5vdCB5ZXQgbWF0Y2ggdGhlIG92ZXJhbGwgc2l6ZSBvZiB0aGUg
aW1hZ2UuCi0gICAgc3RhdGljIGNvbnN0IENHUGF0dGVybkNhbGxiYWNrcyBwYXR0ZXJuQ2FsbGJh
Y2tzID0geyAwLCBkcmF3UGF0dGVybkNhbGxiYWNrLCBOVUxMIH07Ci0gICAgQ0dBZmZpbmVUcmFu
c2Zvcm0gbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1NYWtlKG5hcnJvd1ByZWNpc2lvblRvQ0dG
bG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSksIDAsIDAsIG5hcnJvd1ByZWNpc2lvblRvQ0dGbG9h
dChwYXR0ZXJuVHJhbnNmb3JtLmQoKSksIGFkanVzdGVkWCwgYWRqdXN0ZWRZKTsKLSAgICBtYXRy
aXggPSBDR0FmZmluZVRyYW5zZm9ybUNvbmNhdChtYXRyaXgsIENHQ29udGV4dEdldENUTShjb250
ZXh0KSk7Ci0gICAgLy8gVGhlIHRvcCBvZiBhIHBhcnRpYWxseS1kZWNvZGVkIGltYWdlIGlzIGRy
YXduIGF0IHRoZSBib3R0b20gb2YgdGhlIHRpbGUuIE1hcCBpdCB0byB0aGUgdG9wLgotICAgIG1h
dHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtVHJhbnNsYXRlKG1hdHJpeCwgMCwgc2l6ZSgpLmhlaWdo
dCgpIC0gaCk7Ci0gICAgUmV0YWluUHRyPENHUGF0dGVyblJlZj4gcGF0dGVybihBZG9wdENGLCBD
R1BhdHRlcm5DcmVhdGUoc3ViSW1hZ2UuZ2V0KCksIENHUmVjdE1ha2UoMCwgMCwgdGlsZVJlY3Qu
d2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbWF0cml4LCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWln
aHQoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBrQ0dQ
YXR0ZXJuVGlsaW5nQ29uc3RhbnRTcGFjaW5nLCB0cnVlLCAmcGF0dGVybkNhbGxiYWNrcykpOwot
ICAgIGlmICghcGF0dGVybikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgUmV0YWluUHRyPENHQ29s
b3JTcGFjZVJlZj4gcGF0dGVyblNwYWNlKEFkb3B0Q0YsIENHQ29sb3JTcGFjZUNyZWF0ZVBhdHRl
cm4oMCkpOwotICAgIAotICAgIENHRmxvYXQgYWxwaGEgPSAxOwotICAgIFJldGFpblB0cjxDR0Nv
bG9yUmVmPiBjb2xvcihBZG9wdENGLCBDR0NvbG9yQ3JlYXRlV2l0aFBhdHRlcm4ocGF0dGVyblNw
YWNlLmdldCgpLCBwYXR0ZXJuLmdldCgpLCAmYWxwaGEpKTsKLSAgICBDR0NvbnRleHRTZXRGaWxs
Q29sb3JTcGFjZShjb250ZXh0LCBwYXR0ZXJuU3BhY2UuZ2V0KCkpOwotCi0gICAgLy8gRklYTUU6
IFJlYWxseSB3YW50IGEgcHVibGljIEFQSSBmb3IgdGhpcy4gIEl0IGlzIGp1c3QgQ0dDb250ZXh0
U2V0QmFzZUNUTShjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXkpLgotICAgIHdrU2V0
QmFzZUNUTShjb250ZXh0LCBDR0FmZmluZVRyYW5zZm9ybUlkZW50aXR5KTsKLSAgICBDR0NvbnRl
eHRTZXRQYXR0ZXJuUGhhc2UoY29udGV4dCwgQ0dTaXplWmVybyk7Ci0KLSAgICBDR0NvbnRleHRT
ZXRGaWxsQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY29sb3IuZ2V0KCkpOwotICAgIENHQ29udGV4
dEZpbGxSZWN0KGNvbnRleHQsIENHQ29udGV4dEdldENsaXBCb3VuZGluZ0JveChjb250ZXh0KSk7
Ci0KLSAgICB9Ci0KLSAgICBzdGF0ZVNhdmVyLnJlc3RvcmUoKTsKLQotICAgIGlmIChpbWFnZU9i
c2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQot
CiB9CiAKICNlbmRpZiAvLyBVU0UoQ0cpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9JbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcAkocmV2aXNpb24gMTI3MTQ4KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI0LDE5ICsyNCwxNSBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJCaXRtYXBJbWFnZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCiAKICNpZiBVU0UoQ0cpCiAKLSNp
bmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIK
ICNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgog
I2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQREZEb2N1bWVudEltYWdlLmgi
Ci0jaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZp
Y2VzL0FwcGxpY2F0aW9uU2VydmljZXMuaD4KLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkFy
cmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKSB8
fCBQTEFURk9STShDSFJPTUlVTSkKQEAgLTQ5LDkxICs0NSw2IEBACiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKLXsKLSAg
ICBpZiAoY2xlYXJNZXRhZGF0YSkKLSAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsKLQot
ICAgIG1fb3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKLQotICAgIGlmICht
X2ZyYW1lKSB7Ci0gICAgICAgIENHSW1hZ2VSZWxlYXNlKG1fZnJhbWUpOwotICAgICAgICBtX2Zy
YW1lID0gMDsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0vLyBJbWFnZSBDbGFzcwotLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0KLUJpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShDR0ltYWdlUmVmIGNnSW1h
Z2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQotICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCi0gICAg
LCBtX2N1cnJlbnRGcmFtZSgwKQotICAgICwgbV9mcmFtZXMoMCkKLSAgICAsIG1fZnJhbWVUaW1l
cigwKQotICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCi0gICAgLCBtX3Jl
cGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQotICAgICwgbV9yZXBldGl0aW9uc0NvbXBsZXRl
KDApCi0gICAgLCBtX2RlY29kZWRTaXplKDApCi0gICAgLCBtX2RlY29kZWRQcm9wZXJ0aWVzU2l6
ZSgwKQotICAgICwgbV9mcmFtZUNvdW50KDEpCi0gICAgLCBtX2lzU29saWRDb2xvcihmYWxzZSkK
LSAgICAsIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IoZmFsc2UpCi0gICAgLCBtX2FuaW1hdGlvbkZp
bmlzaGVkKHRydWUpCi0gICAgLCBtX2FsbERhdGFSZWNlaXZlZCh0cnVlKQotICAgICwgbV9oYXZl
U2l6ZSh0cnVlKQotICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCi0gICAgLCBtX2hhdmVGcmFt
ZUNvdW50KHRydWUpCi17Ci0gICAgQ0dGbG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChjZ0lt
YWdlKTsKLSAgICBDR0Zsb2F0IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7Ci0g
ICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDsKLSAgICBtX3NpemUgPSBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpOwotCi0gICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRlY29k
ZXIsIHdlIGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgotICAgIC8vIFNl
dCBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXplIHNv
IGl0J3Mgbm90IDB4MC4KLSAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBJbnRTaXpl
KHdpZHRoLCBoZWlnaHQpOwotCi0gICAgbV9mcmFtZXMuZ3JvdygxKTsKLSAgICBtX2ZyYW1lc1sw
XS5tX2ZyYW1lID0gY2dJbWFnZTsKLSAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gdHJ1ZTsK
LSAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7Ci0KLSAgICBjaGVja0ZvclNv
bGlkQ29sb3IoKTsKLX0KLQotLy8gRHJhd2luZyBSb3V0aW5lcwotCi12b2lkIEJpdG1hcEltYWdl
OjpjaGVja0ZvclNvbGlkQ29sb3IoKQotewotICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IgPSB0
cnVlOwotICAgIGlmIChmcmFtZUNvdW50KCkgPiAxKSB7Ci0gICAgICAgIG1faXNTb2xpZENvbG9y
ID0gZmFsc2U7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBDR0ltYWdlUmVmIGltYWdl
ID0gZnJhbWVBdEluZGV4KDApOwotICAgIAotICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGNoZWNr
IGZvciBzb2xpZCBjb2xvciBpbiB0aGUgaW1wb3J0YW50IHNwZWNpYWwgY2FzZSBvZiBhIDF4MSBp
bWFnZS4KLSAgICBpZiAoaW1hZ2UgJiYgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSA9PSAxICYmIENH
SW1hZ2VHZXRIZWlnaHQoaW1hZ2UpID09IDEpIHsKLSAgICAgICAgdW5zaWduZWQgY2hhciBwaXhl
bFs0XTsgLy8gUkdCQQotICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBibWFwKEFkb3B0
Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVsKSwg
ZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLAotICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVByZW11
bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKLSAgICAgICAgaWYgKCFi
bWFwKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBHcmFwaGljc0NvbnRleHQoYm1hcC5n
ZXQoKSkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOwotICAgICAgICBDR1Jl
Y3QgZHN0ID0geyB7MCwgMH0sIHsxLCAxfSB9OwotICAgICAgICBDR0NvbnRleHREcmF3SW1hZ2Uo
Ym1hcC5nZXQoKSwgZHN0LCBpbWFnZSk7Ci0gICAgICAgIGlmIChwaXhlbFszXSA9PSAwKQotICAg
ICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoMCwgMCwgMCwgMCk7Ci0gICAgICAgIGVsc2UK
LSAgICAgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4ZWxb
M10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxbM10s
IHBpeGVsWzNdKTsKLSAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOwotICAgIH0KLX0KLQog
UmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlOjppbWFnZVdpdGhDb2xvclNwYWNlKENHSW1hZ2VS
ZWYgb3JpZ2luYWxJbWFnZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQogewogICAgIENHQ29sb3JT
cGFjZVJlZiBvcmlnaW5hbENvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFjZShvcmlnaW5h
bEltYWdlKTsKQEAgLTE1Niw2OCArNjcsNiBAQCBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4gSW1hZ2U6
OmltYWdlV2l0aENvCiAgICAgcmV0dXJuIG9yaWdpbmFsSW1hZ2U7CiB9CiAKLUNHSW1hZ2VSZWYg
Qml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYoKQotewotICAgIHJldHVybiBmcmFtZUF0SW5kZXgo
MCk7Ci19Ci0KLUNHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldEZpcnN0Q0dJbWFnZVJlZk9mU2l6
ZShjb25zdCBJbnRTaXplJiBzaXplKQotewotICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQo
KTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKLSAgICAgICAgQ0dJ
bWFnZVJlZiBjZ0ltYWdlID0gZnJhbWVBdEluZGV4KGkpOwotICAgICAgICBpZiAoY2dJbWFnZSAm
JiBJbnRTaXplKENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKSwgQ0dJbWFnZUdldEhlaWdodChjZ0lt
YWdlKSkgPT0gc2l6ZSkKLSAgICAgICAgICAgIHJldHVybiBjZ0ltYWdlOwotICAgIH0KLQotICAg
IC8vIEZhbGxiYWNrIHRvIHRoZSBkZWZhdWx0IENHSW1hZ2VSZWYgaWYgd2UgY2FuJ3QgZmluZCB0
aGUgcmlnaHQgc2l6ZQotICAgIHJldHVybiBnZXRDR0ltYWdlUmVmKCk7Ci19Ci0KLVJldGFpblB0
cjxDRkFycmF5UmVmPiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZUFycmF5KCkKLXsKLSAgICBzaXpl
X3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0gICAgaWYgKCFjb3VudCkKLSAgICAgICAgcmV0dXJu
IDA7Ci0gICAgCi0gICAgQ0ZNdXRhYmxlQXJyYXlSZWYgYXJyYXkgPSBDRkFycmF5Q3JlYXRlTXV0
YWJsZShOVUxMLCBjb3VudCwgJmtDRlR5cGVBcnJheUNhbGxCYWNrcyk7Ci0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIGlmIChDR0ltYWdlUmVmIGN1cnJG
cmFtZSA9IGZyYW1lQXRJbmRleChpKSkKLSAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShh
cnJheSwgY3VyckZyYW1lKTsKLSAgICB9Ci0gICAgcmV0dXJuIFJldGFpblB0cjxDRkFycmF5UmVm
PihBZG9wdENGLCBhcnJheSk7Ci19Ci0KLXZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjdHgsIGNvbnN0IEZsb2F0UmVjdCYgZHN0UmVjdCwgY29uc3QgRmxvYXRSZWN0JiBz
cmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9zaXRlT3BlcmF0b3Igb3Ap
Ci17Ci0gICAgZHJhdyhjdHgsIGRzdFJlY3QsIHNyY1JlY3QsIHN0eWxlQ29sb3JTcGFjZSwgb3As
IERvTm90UmVzcGVjdEltYWdlT3JpZW50YXRpb24pOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCwgY29u
c3QgRmxvYXRSZWN0JiBzcmNSZWN0LCBDb2xvclNwYWNlIHN0eWxlQ29sb3JTcGFjZSwgQ29tcG9z
aXRlT3BlcmF0b3IgY29tcG9zaXRlT3AsIFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uRW51bSBzaG91
bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbikKLXsKLSAgICBzdGFydEFuaW1hdGlvbigpOwotCi0g
ICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZyYW1lQXRJbmRleChtX2N1cnJlbnRGcmFtZSk7Ci0gICAg
aWYgKCFpbWFnZSkgLy8gSWYgaXQncyB0b28gZWFybHkgd2Ugd29uJ3QgaGF2ZSBhbiBpbWFnZSB5
ZXQuCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBpZiAobWF5RmlsbFdpdGhTb2xpZENvbG9y
KCkpIHsKLSAgICAgICAgZmlsbFdpdGhTb2xpZENvbG9yKGN0eHQsIGRlc3RSZWN0LCBzb2xpZENv
bG9yKCksIHN0eWxlQ29sb3JTcGFjZSwgY29tcG9zaXRlT3ApOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgRmxvYXRTaXplIHNlbGZTaXplID0gY3VycmVudEZyYW1lU2l6ZSgpOwotICAg
IEltYWdlT3JpZW50YXRpb24gb3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsK
LQotICAgIGlmIChzaG91bGRSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbiA9PSBSZXNwZWN0SW1hZ2VP
cmllbnRhdGlvbikKLSAgICAgICAgb3JpZW50YXRpb24gPSBmcmFtZU9yaWVudGF0aW9uQXRJbmRl
eChtX2N1cnJlbnRGcmFtZSk7Ci0KLSAgICBjdHh0LT5kcmF3TmF0aXZlSW1hZ2UoaW1hZ2UsIHNl
bGZTaXplLCBzdHlsZUNvbG9yU3BhY2UsIGRlc3RSZWN0LCBzcmNSZWN0LCBjb21wb3NpdGVPcCwg
b3JpZW50YXRpb24pOwotCi0gICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKLSAgICAgICAgaW1hZ2VP
YnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOwotfQotCiBzdGF0aWMgdm9pZCBkcmF3UGF0dGVybkNh
bGxiYWNrKHZvaWQqIGluZm8sIENHQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIENHSW1hZ2VS
ZWYgaW1hZ2UgPSAoQ0dJbWFnZVJlZilpbmZvOwpAQCAtMzExLDcgKzE2MCw2IEBAIHZvaWQgSW1h
Z2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCoKICAgICAgICAgaW1hZ2VPYnNlcnZlcigp
LT5kaWREcmF3KHRoaXMpOwogfQogCi0KIH0KIAogI2VuZGlmIC8vIFVTRShDRykK
</data>
<flag name="review"
          id="172330"
          type_id="1"
          status="+"
          setter="darin"
    />
    <flag name="commit-queue"
          id="172344"
          type_id="3"
          status="-"
          setter="buildbot"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161515</attachid>
            <date>2012-08-30 10:45:01 -0700</date>
            <delta_ts>2012-08-30 10:47:59 -0700</delta_ts>
            <desc>Split BitmapImage functions out into BitmapImageCG.cpp</desc>
            <filename>95470_r2.diff</filename>
            <type>text/plain</type>
            <size>32191</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzE1OCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEyLTA4LTMwICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgW0NHXSBJbWFnZUNHLmNwcCBjb250
YWlucyBhIG1peCBvZiBJbWFnZSBhbmQgQml0bWFwSW1hZ2UgZnVuY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2Vi
Q29yZS52Y3Byb2o6IEFkZGVkIEJpdG1hcEltYWdlQ0cuY3BwLgorICAgICAgICAqIFdlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajogRGl0dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2cvQml0bWFwSW1hZ2VDRy5jcHA6IENvcGllZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCisgICAgICAgIHRoZW4gZGVsZXRlZCBJbWFn
ZSBmdW5jdGlvbiBpbXBsZW1lbnRhdGlvbnMuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvSW1hZ2VDRy5jcHA6IERlbGV0ZWQgQml0bWFwSW1hZ2UgYW5kIEZyYW1lRGF0YSBmdW5jdGlv
biBpbXBsZW1lbnRhdGlvbnMuCisKIDIwMTItMDgtMzAgIFRvbnkgQ2hhbmcgIDx0b255QGNocm9t
aXVtLm9yZz4KIAogICAgICAgICBNYWtlIFJlbmRlckJveDo6Y29tcHV0ZUlubGluZURpcmVjdGlv
bk1hcmdpbnMgY29uc3QKQEAgLTEyNyw2ICsxNDAsNyBAQAogICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzb3VyY2UvU291cmNlQnVmZmVyTGlzdC5jcHA6CiAgICAgICAgIChXZWJDb3JlOjpTb3VyY2VC
dWZmZXJMaXN0OjpyZW1vdmUpOgogCis+Pj4+Pj4+IC5yMTI3MTU4CiAyMDEyLTA4LTMwICBPdHRv
IERlcmVrIENoZXVuZyAgPG90Y2hldW5nQHJpbS5jb20+CiAKICAgICAgICAgW0JsYWNrQmVycnld
IE1vZGlmeWluZyBob3cgSVAgZG9tYWlucyBhcmUgaGFuZGxlZCBpbiBDb29raWVzCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvago9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkocmV2aXNpb24g
MTI3MTQ4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTMwNDI5LDYgKzMwNDI5LDI2IEBACiAJCQkJCU5hbWU9ImNnIgog
CQkJCQk+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHBsYXRmb3JtXGdyYXBo
aWNzXGNnXEJpdG1hcEltYWdlQ0cuY3BwIgorCQkJCQkJPgorCQkJCQkJPEZpbGVDb25maWd1cmF0
aW9uCisJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdpbjMyIgorCQkJCQkJCUV4Y2x1
ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJCT4KKwkJCQkJCQk8VG9vbAorCQkJCQkJCQlOYW1l
PSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJCS8+CisJCQkJCQk8L0ZpbGVDb25maWd1cmF0aW9u
PgorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQkJTmFtZT0iUmVsZWFzZV9DYWlyb19D
RkxpdGV8V2luMzIiCisJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9InRydWUiCisJCQkJCQkJPgor
CQkJCQkJCTxUb29sCisJCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCQkJLz4K
KwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTwvRmlsZT4KKwkJCQkJPEZpbGUKIAkJ
CQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3NcY2dcQ29sb3JDRy5jcHAiCiAJ
CQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dl
YkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDEyNzE0OCkK
KysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtOTg2LDYgKzk4Niw3IEBACiAJCTM3NUNEMjNCMTE5RDQ0RUEwMEEyQTg1
OSAvKiBIeXBoZW5hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDM3NUNEMjM5MTE5RDQ0RUEwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbk1hYy5t
bSAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc2RENDRTAxM0I0Rjk2
NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0QUJBNTBGQTIxRUI0MDBBRDdE
RTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0MDBBRDdERTkgLyogT3Zlcmxh
cFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKKwkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QTNB
OEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwICovOyB9OwogCQkzNzdDNENE
RjEwMTRFOUY2MDBCOUFFNDIgLyogUGxhY2Vob2xkZXJEb2N1bWVudC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QzRDREQxMDE0RTlGNjAwQjlBRTQy
IC8qIFBsYWNlaG9sZGVyRG9jdW1lbnQuaCAqLzsgfTsKIAkJMzc3QzRDRTAxMDE0RTlGNjAwQjlB
RTQyIC8qIFBsYWNlaG9sZGVyRG9jdW1lbnQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QzRDREUxMDE0RTlGNjAwQjlBRTQyIC8qIFBsYWNlaG9s
ZGVyRG9jdW1lbnQuY3BwICovOyB9OwogCQkzNzg0QzM0QjBFMTFBQTM0MDA3RDhENDggLyogRm9u
dFRyYWl0c01hc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDM3ODRDMzRBMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJhaXRzTWFzay5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC04MDc4LDYgKzgwNzks
NyBAQAogCQkzNzVDRDIzOTExOUQ0NEVBMDBBMkE4NTkgLyogSHlwaGVuYXRpb25NYWMubW0gKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBIeXBoZW5hdGlvbk1hYy5tbTsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVGV4dFJ1
bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3NzRBQkEzMEZBMjFFQjQwMEFE
N0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAvKiBCaXRtYXBJbWFnZUNHLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEJpdG1hcEltYWdlQ0cuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzdDNENERDEwMTRFOUY2MDBCOUFFNDIg
LyogUGxhY2Vob2xkZXJEb2N1bWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBQbGFjZWhvbGRlckRvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3
N0M0Q0RFMTAxNEU5RjYwMEI5QUU0MiAvKiBQbGFjZWhvbGRlckRvY3VtZW50LmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYWNlaG9sZGVyRG9jdW1lbnQuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzg0QzM0QTBFMTFBQTM0MDA3RDhENDggLyog
Rm9udFRyYWl0c01hc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRm9udFRy
YWl0c01hc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5NzIwLDYgKzE5NzIy
LDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNnICovID0gewogCQkJaXNhID0g
UEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzNzdBM0E4RjE1RUZDRTlBMDA1OUY1Qzcg
LyogQml0bWFwSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMEZDRjMzMjMwRjJCOTcxNTAwNEI2Nzk1IC8q
IENvbG9yQ0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFBv
aW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJDRTY0RiAvKiBGbG9hdFJlY3RD
Ry5jcHAgKi8sCkBAIC0yODU3NSw2ICsyODU3OCw3IEBACiAJCQkJRkJENkFGOEIxNUVGMjVFNTAw
OEI3MTEwIC8qIENTU0Jhc2ljU2hhcGVzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUZCRDZBRjhE
MTVFRjI2MEEwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk0
RkIzOTBBRDE1RUY2MUYzMDA3QUQ1MUYgLyogR2VuZXJhdGVkSW1hZ2UuY3BwIGluIFNvdXJjZXMg
Ki8sCisJCQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2lu
ZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9C
aXRtYXBJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAkocmV2aXNpb24gMTI3MTQ4KQkoZnJvbSBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcDoxMjcxNDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNCwg
MjAwNSwgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgorCisjaWYgVVNFKENHKQor
CisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9u
LmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cu
aCIKKyNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisjaW5jbHVkZSAiUERGRG9jdW1lbnRJbWFn
ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSA8QXBwbGljYXRpb25T
ZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24v
Q0ZBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KKworI2lmIFBMQVRGT1JNKE1B
QykgfHwgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiV2ViQ29yZVN5c3RlbUludGVyZmFj
ZS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5jbHVkZSA8V2ViS2l0U3lzdGVt
SW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2VuZGlmCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wgY2xlYXJNZXRhZGF0YSkKK3sK
KyAgICBpZiAoY2xlYXJNZXRhZGF0YSkKKyAgICAgICAgbV9oYXZlTWV0YWRhdGEgPSBmYWxzZTsK
KworICAgIG1fb3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmllbnRhdGlvbjsKKworICAgIGlm
IChtX2ZyYW1lKSB7CisgICAgICAgIENHSW1hZ2VSZWxlYXNlKG1fZnJhbWUpOworICAgICAgICBt
X2ZyYW1lID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBmYWxz
ZTsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CisvLyBJbWFnZSBDbGFzcworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CisKK0JpdG1hcEltYWdlOjpCaXRtYXBJbWFnZShDR0ltYWdlUmVmIGNn
SW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQorICAgIDogSW1hZ2Uob2JzZXJ2ZXIpCisg
ICAgLCBtX2N1cnJlbnRGcmFtZSgwKQorICAgICwgbV9mcmFtZXMoMCkKKyAgICAsIG1fZnJhbWVU
aW1lcigwKQorICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1hdGlvbk5vbmUpCisgICAgLCBt
X3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQorICAgICwgbV9yZXBldGl0aW9uc0NvbXBs
ZXRlKDApCisgICAgLCBtX2RlY29kZWRTaXplKDApCisgICAgLCBtX2RlY29kZWRQcm9wZXJ0aWVz
U2l6ZSgwKQorICAgICwgbV9mcmFtZUNvdW50KDEpCisgICAgLCBtX2lzU29saWRDb2xvcihmYWxz
ZSkKKyAgICAsIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IoZmFsc2UpCisgICAgLCBtX2FuaW1hdGlv
bkZpbmlzaGVkKHRydWUpCisgICAgLCBtX2FsbERhdGFSZWNlaXZlZCh0cnVlKQorICAgICwgbV9o
YXZlU2l6ZSh0cnVlKQorICAgICwgbV9zaXplQXZhaWxhYmxlKHRydWUpCisgICAgLCBtX2hhdmVG
cmFtZUNvdW50KHRydWUpCit7CisgICAgQ0dGbG9hdCB3aWR0aCA9IENHSW1hZ2VHZXRXaWR0aChj
Z0ltYWdlKTsKKyAgICBDR0Zsb2F0IGhlaWdodCA9IENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSk7
CisgICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICogNDsKKyAgICBtX3NpemUgPSBJ
bnRTaXplKHdpZHRoLCBoZWlnaHQpOworCisgICAgLy8gU2luY2Ugd2UgZG9uJ3QgaGF2ZSBhIGRl
Y29kZXIsIHdlIGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9yaWVudGF0aW9uLgorICAgIC8v
IFNldCBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUgdGhlIHNhbWUgYXMgbV9zaXpl
IHNvIGl0J3Mgbm90IDB4MC4KKyAgICBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gPSBJbnRT
aXplKHdpZHRoLCBoZWlnaHQpOworCisgICAgbV9mcmFtZXMuZ3JvdygxKTsKKyAgICBtX2ZyYW1l
c1swXS5tX2ZyYW1lID0gY2dJbWFnZTsKKyAgICBtX2ZyYW1lc1swXS5tX2hhc0FscGhhID0gdHJ1
ZTsKKyAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRydWU7CisKKyAgICBjaGVja0Zv
clNvbGlkQ29sb3IoKTsKK30KKworLy8gRHJhd2luZyBSb3V0aW5lcworCit2b2lkIEJpdG1hcElt
YWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQoreworICAgIG1fY2hlY2tlZEZvclNvbGlkQ29sb3Ig
PSB0cnVlOworICAgIGlmIChmcmFtZUNvdW50KCkgPiAxKSB7CisgICAgICAgIG1faXNTb2xpZENv
bG9yID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBDR0ltYWdlUmVmIGlt
YWdlID0gZnJhbWVBdEluZGV4KDApOworICAgIAorICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGNo
ZWNrIGZvciBzb2xpZCBjb2xvciBpbiB0aGUgaW1wb3J0YW50IHNwZWNpYWwgY2FzZSBvZiBhIDF4
MSBpbWFnZS4KKyAgICBpZiAoaW1hZ2UgJiYgQ0dJbWFnZUdldFdpZHRoKGltYWdlKSA9PSAxICYm
IENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpID09IDEpIHsKKyAgICAgICAgdW5zaWduZWQgY2hhciBw
aXhlbFs0XTsgLy8gUkdCQQorICAgICAgICBSZXRhaW5QdHI8Q0dDb250ZXh0UmVmPiBibWFwKEFk
b3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwgMSwgOCwgc2l6ZW9mKHBpeGVs
KSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLAorICAgICAgICAgICAga0NHSW1hZ2VBbHBoYVBy
ZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJCaWcpKTsKKyAgICAgICAgaWYg
KCFibWFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHcmFwaGljc0NvbnRleHQoYm1h
cC5nZXQoKSkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0ZUNvcHkpOworICAgICAgICBD
R1JlY3QgZHN0ID0geyB7MCwgMH0sIHsxLCAxfSB9OworICAgICAgICBDR0NvbnRleHREcmF3SW1h
Z2UoYm1hcC5nZXQoKSwgZHN0LCBpbWFnZSk7CisgICAgICAgIGlmIChwaXhlbFszXSA9PSAwKQor
ICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoMCwgMCwgMCwgMCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKHBpeGVsWzBdICogMjU1IC8gcGl4
ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzJdICogMjU1IC8gcGl4ZWxb
M10sIHBpeGVsWzNdKTsKKyAgICAgICAgbV9pc1NvbGlkQ29sb3IgPSB0cnVlOworICAgIH0KK30K
KworUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlOjppbWFnZVdpdGhDb2xvclNwYWNlKENHSW1h
Z2VSZWYgb3JpZ2luYWxJbWFnZSwgQ29sb3JTcGFjZSBjb2xvclNwYWNlKQoreworICAgIENHQ29s
b3JTcGFjZVJlZiBvcmlnaW5hbENvbG9yU3BhY2UgPSBDR0ltYWdlR2V0Q29sb3JTcGFjZShvcmln
aW5hbEltYWdlKTsKKworICAgIC8vIElmIHRoZSBpbWFnZSBhbHJlYWR5IGhhcyBhIChub24tZGV2
aWNlKSBjb2xvciBzcGFjZSwgd2UgZG9uJ3Qgd2FudCB0bworICAgIC8vIG92ZXJyaWRlIGl0LCBz
byByZXR1cm4uCisgICAgaWYgKCFvcmlnaW5hbENvbG9yU3BhY2UgfHwgIUNGRXF1YWwob3JpZ2lu
YWxDb2xvclNwYWNlLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCkpKQorICAgICAgICByZXR1cm4g
b3JpZ2luYWxJbWFnZTsKKworICAgIHN3aXRjaCAoY29sb3JTcGFjZSkgeworICAgIGNhc2UgQ29s
b3JTcGFjZURldmljZVJHQjoKKyAgICAgICAgcmV0dXJuIG9yaWdpbmFsSW1hZ2U7CisgICAgY2Fz
ZSBDb2xvclNwYWNlU1JHQjoKKyAgICAgICAgcmV0dXJuIFJldGFpblB0cjxDR0ltYWdlUmVmPihB
ZG9wdENGLCBDR0ltYWdlQ3JlYXRlQ29weVdpdGhDb2xvclNwYWNlKG9yaWdpbmFsSW1hZ2UsIHNS
R0JDb2xvclNwYWNlUmVmKCkpKTsKKyAgICBjYXNlIENvbG9yU3BhY2VMaW5lYXJSR0I6CisgICAg
ICAgIHJldHVybiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4oQWRvcHRDRiwgQ0dJbWFnZUNyZWF0ZUNv
cHlXaXRoQ29sb3JTcGFjZShvcmlnaW5hbEltYWdlLCBsaW5lYXJSR0JDb2xvclNwYWNlUmVmKCkp
KTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gb3JpZ2lu
YWxJbWFnZTsKK30KKworQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Q0dJbWFnZVJlZigpCit7
CisgICAgcmV0dXJuIGZyYW1lQXRJbmRleCgwKTsKK30KKworQ0dJbWFnZVJlZiBCaXRtYXBJbWFn
ZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNpemUmIHNpemUpCit7CisgICAg
c2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
Y291bnQ7ICsraSkgeworICAgICAgICBDR0ltYWdlUmVmIGNnSW1hZ2UgPSBmcmFtZUF0SW5kZXgo
aSk7CisgICAgICAgIGlmIChjZ0ltYWdlICYmIEludFNpemUoQ0dJbWFnZUdldFdpZHRoKGNnSW1h
Z2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpKSA9PSBzaXplKQorICAgICAgICAgICAgcmV0
dXJuIGNnSW1hZ2U7CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sgdG8gdGhlIGRlZmF1bHQgQ0dJ
bWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRoZSByaWdodCBzaXplCisgICAgcmV0dXJuIGdldENH
SW1hZ2VSZWYoKTsKK30KKworUmV0YWluUHRyPENGQXJyYXlSZWY+IEJpdG1hcEltYWdlOjpnZXRD
R0ltYWdlQXJyYXkoKQoreworICAgIHNpemVfdCBjb3VudCA9IGZyYW1lQ291bnQoKTsKKyAgICBp
ZiAoIWNvdW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAgICBDRk11dGFibGVBcnJheVJl
ZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKE5VTEwsIGNvdW50LCAma0NGVHlwZUFycmF5
Q2FsbEJhY2tzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGNvdW50OyArK2kpIHsKKyAg
ICAgICAgaWYgKENHSW1hZ2VSZWYgY3VyckZyYW1lID0gZnJhbWVBdEluZGV4KGkpKQorICAgICAg
ICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJhbWUpOworICAgIH0KKyAgICBy
ZXR1cm4gUmV0YWluUHRyPENGQXJyYXlSZWY+KEFkb3B0Q0YsIGFycmF5KTsKK30KKwordm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eCwgY29uc3QgRmxvYXRSZWN0JiBk
c3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNw
YWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBkcmF3KGN0eCwgZHN0UmVjdCwgc3Jj
UmVjdCwgc3R5bGVDb2xvclNwYWNlLCBvcCwgRG9Ob3RSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbik7
Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9yU3Bh
Y2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcCwgUmVzcGVj
dEltYWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQorewor
ICAgIHN0YXJ0QW5pbWF0aW9uKCk7CisKKyAgICBDR0ltYWdlUmVmIGltYWdlID0gZnJhbWVBdElu
ZGV4KG1fY3VycmVudEZyYW1lKTsKKyAgICBpZiAoIWltYWdlKSAvLyBJZiBpdCdzIHRvbyBlYXJs
eSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgeworICAgICAgICBmaWxsV2l0aFNvbGlkQ29s
b3IoY3R4dCwgZGVzdFJlY3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVDb2xvclNwYWNlLCBjb21wb3Np
dGVPcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBGbG9hdFNpemUgc2VsZlNpemUg
PSBjdXJyZW50RnJhbWVTaXplKCk7CisgICAgSW1hZ2VPcmllbnRhdGlvbiBvcmllbnRhdGlvbiA9
IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOworCisgICAgaWYgKHNob3VsZFJlc3BlY3RJbWFnZU9y
aWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQorICAgICAgICBvcmllbnRhdGlv
biA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZyYW1lKTsKKworICAgIGN0eHQt
PmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgc2VsZlNpemUsIHN0eWxlQ29sb3JTcGFjZSwgZGVzdFJl
Y3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBvcmllbnRhdGlvbik7CisKKyAgICBpZiAoaW1hZ2VP
YnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Cit9CisK
K3N0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCogaW5mbywgQ0dDb250ZXh0UmVm
IGNvbnRleHQpCit7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IChDR0ltYWdlUmVmKWluZm87Cisg
ICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNzQ29udGV4dChjb250ZXh0KS5y
b3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBDR0ltYWdlR2V0V2lkdGgoaW1hZ2Up
LCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSkpLCBpbWFnZSk7Cit9CisKK3ZvaWQgSW1hZ2U6OmRy
YXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3QgRmxvYXRSZWN0JiB0aWxlUmVj
dCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNmb3JtLAorICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENvbG9yU3BhY2Ugc3R5bGVDb2xv
clNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxvYXRSZWN0JiBkZXN0UmVjdCkK
K3sKKyAgICBpZiAoIW5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1lKCkpCisgICAgICAgIHJldHVy
bjsKKworICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVydGlibGUoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdHh0LT5wbGF0Zm9ybUNvbnRl
eHQoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0YXRlU2F2ZXIoKmN0eHQpOwor
ICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJlY3QpOworICAgIGN0eHQtPnNl
dENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CisgICAgQ0dDb250ZXh0VHJhbnNsYXRlQ1RNKGNvbnRl
eHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpICsgZGVzdFJlY3QuaGVpZ2h0KCkpOworICAg
IENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAgICAKKyAgICAvLyBDb21wdXRl
IHRoZSBzY2FsZWQgdGlsZSBzaXplLgorICAgIGZsb2F0IHNjYWxlZFRpbGVIZWlnaHQgPSB0aWxl
UmVjdC5oZWlnaHQoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5k
KCkpOworICAgIAorICAgIC8vIFdlIGhhdmUgdG8gYWRqdXN0IHRoZSBwaGFzZSB0byBkZWFsIHdp
dGggdGhlIGZhY3Qgd2UncmUgaW4gQ2FydGVzaWFuIHNwYWNlIG5vdyAod2l0aCB0aGUgYm90dG9t
IGxlZnQgY29ybmVyIG9mIGRlc3RSZWN0IGJlaW5nCisgICAgLy8gdGhlIG9yaWdpbikuCisgICAg
ZmxvYXQgYWRqdXN0ZWRYID0gcGhhc2UueCgpIC0gZGVzdFJlY3QueCgpICsgdGlsZVJlY3QueCgp
ICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7IC8vIFdlIHRy
YW5zbGF0ZWQgdGhlIGNvbnRleHQgc28gdGhhdCBkZXN0UmVjdC54KCkgaXMgdGhlIG9yaWdpbiwg
c28gc3VidHJhY3QgaXQgb3V0LgorICAgIGZsb2F0IGFkanVzdGVkWSA9IGRlc3RSZWN0LmhlaWdo
dCgpIC0gKHBoYXNlLnkoKSAtIGRlc3RSZWN0LnkoKSArIHRpbGVSZWN0LnkoKSAqIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5kKCkpICsgc2NhbGVkVGlsZUhlaWdodCk7
CisKKyAgICBDR0ltYWdlUmVmIHRpbGVJbWFnZSA9IG5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCk7CisgICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGlsZUltYWdlKTsKKworICAgIFJl
dGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsKKyAgICBpZiAodGlsZVJlY3Quc2l6ZSgpID09
IHNpemUoKSkKKyAgICAgICAgc3ViSW1hZ2UgPSB0aWxlSW1hZ2U7CisgICAgZWxzZSB7CisgICAg
ICAgIC8vIENvcHlpbmcgYSBzdWItaW1hZ2Ugb3V0IG9mIGEgcGFydGlhbGx5LWRlY29kZWQgaW1h
Z2Ugc3RvcHMgdGhlIGRlY29kaW5nIG9mIHRoZSBvcmlnaW5hbCBpbWFnZS4gSXQgc2hvdWxkIG5l
dmVyIGhhcHBlbgorICAgICAgICAvLyBiZWNhdXNlIHN1Yi1pbWFnZXMgYXJlIG9ubHkgdXNlZCBm
b3IgYm9yZGVyLWltYWdlLCB3aGljaCBvbmx5IHJlbmRlcnMgd2hlbiB0aGUgaW1hZ2UgaXMgZnVs
bHkgZGVjb2RlZC4KKyAgICAgICAgQVNTRVJUKGggPT0gaGVpZ2h0KCkpOworICAgICAgICBzdWJJ
bWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJlY3QodGlsZUltYWdlLCB0aWxl
UmVjdCkpOworICAgIH0KKworICAgIC8vIEFkanVzdCB0aGUgY29sb3Igc3BhY2UuCisgICAgc3Vi
SW1hZ2UgPSBJbWFnZTo6aW1hZ2VXaXRoQ29sb3JTcGFjZShzdWJJbWFnZS5nZXQoKSwgc3R5bGVD
b2xvclNwYWNlKTsKKyAgICAKKyAgICAvLyBMZW9wYXJkIGhhcyBhbiBvcHRpbWl6ZWQgY2FsbCBm
b3IgdGhlIHRpbGluZyBvZiBpbWFnZSBwYXR0ZXJucywgYnV0IHdlIGNhbiBvbmx5IHVzZSBpdCBp
ZiB0aGUgaW1hZ2UgaGFzIGJlZW4gZGVjb2RlZCBlbm91Z2ggdGhhdAorICAgIC8vIGl0cyBidWZm
ZXIgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgb3ZlcmFsbCBpbWFnZS4gIEJlY2F1c2UgYSBwYXJ0
aWFsbHkgZGVjb2RlZCBDR0ltYWdlUmVmIHdpdGggYSBzbWFsbGVyIHdpZHRoIG9yIGhlaWdodCB0
aGFuIHRoZQorICAgIC8vIG92ZXJhbGwgaW1hZ2UgYnVmZmVyIG5lZWRzIHRvIHRpbGUgd2l0aCAi
Z2FwcyIsIHdlIGNhbid0IHVzZSB0aGUgb3B0aW1pemVkIHRpbGluZyBjYWxsIGluIHRoYXQgY2Fz
ZS4KKyAgICAvLyBGSVhNRTogV2UgY2Fubm90IHVzZSBDR0NvbnRleHREcmF3VGlsZWRJbWFnZSB3
aXRoIHNjYWxlZCB0aWxlcyBvbiBMZW9wYXJkLCBiZWNhdXNlIGl0IHN1ZmZlcnMgZnJvbSByb3Vu
ZGluZyBlcnJvcnMuICBTbm93IExlb3BhcmQgaXMgb2suCisgICAgZmxvYXQgc2NhbGVkVGlsZVdp
ZHRoID0gdGlsZVJlY3Qud2lkdGgoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRy
YW5zZm9ybS5hKCkpOworICAgIGZsb2F0IHcgPSBDR0ltYWdlR2V0V2lkdGgodGlsZUltYWdlKTsK
KyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID09
IDEwNTAKKyAgICBpZiAodyA9PSBzaXplKCkud2lkdGgoKSAmJiBoID09IHNpemUoKS5oZWlnaHQo
KSAmJiBzY2FsZWRUaWxlV2lkdGggPT0gdGlsZVJlY3Qud2lkdGgoKSAmJiBzY2FsZWRUaWxlSGVp
Z2h0ID09IHRpbGVSZWN0LmhlaWdodCgpKQorI2Vsc2UKKyAgICBpZiAodyA9PSBzaXplKCkud2lk
dGgoKSAmJiBoID09IHNpemUoKS5oZWlnaHQoKSkKKyNlbmRpZgorICAgICAgICBDR0NvbnRleHRE
cmF3VGlsZWRJbWFnZShjb250ZXh0LCBGbG9hdFJlY3QoYWRqdXN0ZWRYLCBhZGp1c3RlZFksIHNj
YWxlZFRpbGVXaWR0aCwgc2NhbGVkVGlsZUhlaWdodCksIHN1YkltYWdlLmdldCgpKTsKKyAgICBl
bHNlIHsKKworICAgIC8vIE9uIExlb3BhcmQgYW5kIG5ld2VyLCB0aGlzIGNvZGUgbm93IG9ubHkg
cnVucyBmb3IgcGFydGlhbGx5IGRlY29kZWQgaW1hZ2VzIHdob3NlIGJ1ZmZlcnMgZG8gbm90IHll
dCBtYXRjaCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBpbWFnZS4KKyAgICBzdGF0aWMgY29uc3Qg
Q0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7IDAsIGRyYXdQYXR0ZXJuQ2Fs
bGJhY2ssIE5VTEwgfTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBtYXRyaXggPSBDR0FmZmluZVRy
YW5zZm9ybU1ha2UobmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgp
KSwgMCwgMCwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uZCgpKSwg
YWRqdXN0ZWRYLCBhZGp1c3RlZFkpOworICAgIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtQ29u
Y2F0KG1hdHJpeCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKTsKKyAgICAvLyBUaGUgdG9wIG9m
IGEgcGFydGlhbGx5LWRlY29kZWQgaW1hZ2UgaXMgZHJhd24gYXQgdGhlIGJvdHRvbSBvZiB0aGUg
dGlsZS4gTWFwIGl0IHRvIHRoZSB0b3AuCisgICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1U
cmFuc2xhdGUobWF0cml4LCAwLCBzaXplKCkuaGVpZ2h0KCkgLSBoKTsKKyAgICBSZXRhaW5QdHI8
Q0dQYXR0ZXJuUmVmPiBwYXR0ZXJuKEFkb3B0Q0YsIENHUGF0dGVybkNyZWF0ZShzdWJJbWFnZS5n
ZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCB0aWxlUmVjdC53aWR0aCgpLCB0aWxlUmVjdC5oZWlnaHQo
KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXRyaXgs
IHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCAKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR1BhdHRlcm5UaWxpbmdDb25zdGFudFNwYWNp
bmcsIHRydWUsICZwYXR0ZXJuQ2FsbGJhY2tzKSk7CisgICAgaWYgKCFwYXR0ZXJuKQorICAgICAg
ICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNlUmVmPiBwYXR0ZXJuU3BhY2Uo
QWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKSk7CisgICAgCisgICAgQ0dGbG9h
dCBhbHBoYSA9IDE7CisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+IGNvbG9yKEFkb3B0Q0YsIENH
Q29sb3JDcmVhdGVXaXRoUGF0dGVybihwYXR0ZXJuU3BhY2UuZ2V0KCksIHBhdHRlcm4uZ2V0KCks
ICZhbHBoYSkpOworICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNwYWNlKGNvbnRleHQsIHBhdHRl
cm5TcGFjZS5nZXQoKSk7CisKKyAgICAvLyBGSVhNRTogUmVhbGx5IHdhbnQgYSBwdWJsaWMgQVBJ
IGZvciB0aGlzLiAgSXQgaXMganVzdCBDR0NvbnRleHRTZXRCYXNlQ1RNKGNvbnRleHQsIENHQWZm
aW5lVHJhbnNmb3JtSWRlbnRpeSkuCisgICAgd2tTZXRCYXNlQ1RNKGNvbnRleHQsIENHQWZmaW5l
VHJhbnNmb3JtSWRlbnRpdHkpOworICAgIENHQ29udGV4dFNldFBhdHRlcm5QaGFzZShjb250ZXh0
LCBDR1NpemVaZXJvKTsKKworICAgIENHQ29udGV4dFNldEZpbGxDb2xvcldpdGhDb2xvcihjb250
ZXh0LCBjb2xvci5nZXQoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgQ0dDb250
ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpKTsKKworICAgIH0KKworICAgIHN0YXRlU2F2
ZXIucmVzdG9yZSgpOworCisgICAgaWYgKGltYWdlT2JzZXJ2ZXIoKSkKKyAgICAgICAgaW1hZ2VP
YnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOworfQorCisKK30KKworI2VuZGlmIC8vIFVTRShDRykK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Jp
dG1hcEltYWdlQ0cuY3BwCShyZXZpc2lvbiAxMjcxNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgs
MTUgKzI4LDEwIEBACiAKICNpZiBVU0UoQ0cpCiAKLSNpbmNsdWRlICJBZmZpbmVUcmFuc2Zvcm0u
aCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGbG9hdFJlY3QuaCIK
ICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1ZGUgIkltYWdlT2JzZXJ2ZXIu
aCIKLSNpbmNsdWRlICJQREZEb2N1bWVudEltYWdlLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1TdHJp
bmcuaCIKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0FwcGxpY2F0aW9uU2VydmljZXMu
aD4KLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkFycmF5Lmg+CiAjaW5jbHVkZSA8d3RmL1Jl
dGFpblB0ci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFURk9STShDSFJPTUlVTSkKQEAg
LTY0LDEwICs1OSw2IEBAIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLy8gSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCiBCaXRtYXBJbWFnZTo6Qml0bWFwSW1h
Z2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKICAgICA6IElt
YWdlKG9ic2VydmVyKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkKQEAgLTEzNCwyOCArMTI1LDYg
QEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKICAgICB9CiB9CiAKLVJl
dGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1hZ2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVm
IG9yaWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKLXsKLSAgICBDR0NvbG9yU3Bh
Y2VSZWYgb3JpZ2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9yU3BhY2Uob3JpZ2luYWxJ
bWFnZSk7Ci0KLSAgICAvLyBJZiB0aGUgaW1hZ2UgYWxyZWFkeSBoYXMgYSAobm9uLWRldmljZSkg
Y29sb3Igc3BhY2UsIHdlIGRvbid0IHdhbnQgdG8KLSAgICAvLyBvdmVycmlkZSBpdCwgc28gcmV0
dXJuLgotICAgIGlmICghb3JpZ2luYWxDb2xvclNwYWNlIHx8ICFDRkVxdWFsKG9yaWdpbmFsQ29s
b3JTcGFjZSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpKSkKLSAgICAgICAgcmV0dXJuIG9yaWdp
bmFsSW1hZ2U7Ci0KLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsKLSAgICBjYXNlIENvbG9yU3Bh
Y2VEZXZpY2VSR0I6Ci0gICAgICAgIHJldHVybiBvcmlnaW5hbEltYWdlOwotICAgIGNhc2UgQ29s
b3JTcGFjZVNSR0I6Ci0gICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4oQWRvcHRD
RiwgQ0dJbWFnZUNyZWF0ZUNvcHlXaXRoQ29sb3JTcGFjZShvcmlnaW5hbEltYWdlLCBzUkdCQ29s
b3JTcGFjZVJlZigpKSk7Ci0gICAgY2FzZSBDb2xvclNwYWNlTGluZWFyUkdCOgotICAgICAgICBy
ZXR1cm4gUmV0YWluUHRyPENHSW1hZ2VSZWY+KEFkb3B0Q0YsIENHSW1hZ2VDcmVhdGVDb3B5V2l0
aENvbG9yU3BhY2Uob3JpZ2luYWxJbWFnZSwgbGluZWFyUkdCQ29sb3JTcGFjZVJlZigpKSk7Ci0g
ICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIG9yaWdpbmFsSW1h
Z2U7Ci19Ci0KIENHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VSZWYoKQogewogICAg
IHJldHVybiBmcmFtZUF0SW5kZXgoMCk7CkBAIC0yMTgsMTAwICsxODcsNiBAQCB2b2lkIEJpdG1h
cEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+
ZGlkRHJhdyh0aGlzKTsKIH0KIAotc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lk
KiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBDR0ltYWdlUmVmIGltYWdlID0g
KENHSW1hZ2VSZWYpaW5mbzsKLSAgICBDR0NvbnRleHREcmF3SW1hZ2UoY29udGV4dCwgR3JhcGhp
Y3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMoRmxvYXRSZWN0KDAsIDAsIENH
SW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpKSksIGltYWdlKTsK
LX0KLQotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3NDb250ZXh0KiBjdHh0LCBjb25z
dCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFuc2Zvcm0mIHBhdHRlcm5UcmFu
c2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBGbG9hdFBvaW50JiBwaGFzZSwg
Q29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wLCBjb25zdCBG
bG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIGlmICghbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJh
bWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFwYXR0ZXJuVHJhbnNmb3JtLmlzSW52
ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9
IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEdyYXBoaWNzQ29udGV4dFN0YXRlU2F2ZXIg
c3RhdGVTYXZlcigqY3R4dCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRvUmVjdChjb250ZXh0LCBkZXN0
UmVjdCk7Ci0gICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9uKG9wKTsKLSAgICBDR0NvbnRl
eHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBkZXN0UmVjdC55KCkgKyBkZXN0
UmVjdC5oZWlnaHQoKSk7Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0oY29udGV4dCwgMSwgLTEpOwot
ICAgIAotICAgIC8vIENvbXB1dGUgdGhlIHNjYWxlZCB0aWxlIHNpemUuCi0gICAgZmxvYXQgc2Nh
bGVkVGlsZUhlaWdodCA9IHRpbGVSZWN0LmhlaWdodCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9h
dChwYXR0ZXJuVHJhbnNmb3JtLmQoKSk7Ci0gICAgCi0gICAgLy8gV2UgaGF2ZSB0byBhZGp1c3Qg
dGhlIHBoYXNlIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB3ZSdyZSBpbiBDYXJ0ZXNpYW4gc3BhY2Ug
bm93ICh3aXRoIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2YgZGVzdFJlY3QgYmVpbmcKLSAgICAv
LyB0aGUgb3JpZ2luKS4KLSAgICBmbG9hdCBhZGp1c3RlZFggPSBwaGFzZS54KCkgLSBkZXN0UmVj
dC54KCkgKyB0aWxlUmVjdC54KCkgKiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBhdHRlcm5UcmFu
c2Zvcm0uYSgpKTsgLy8gV2UgdHJhbnNsYXRlZCB0aGUgY29udGV4dCBzbyB0aGF0IGRlc3RSZWN0
LngoKSBpcyB0aGUgb3JpZ2luLCBzbyBzdWJ0cmFjdCBpdCBvdXQuCi0gICAgZmxvYXQgYWRqdXN0
ZWRZID0gZGVzdFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgpIC0gZGVzdFJlY3QueSgpICsgdGls
ZVJlY3QueSgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSkg
KyBzY2FsZWRUaWxlSGVpZ2h0KTsKLQotICAgIENHSW1hZ2VSZWYgdGlsZUltYWdlID0gbmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBmbG9hdCBoID0gQ0dJbWFnZUdldEhlaWdodCh0
aWxlSW1hZ2UpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IHN1YkltYWdlOwotICAgIGlm
ICh0aWxlUmVjdC5zaXplKCkgPT0gc2l6ZSgpKQotICAgICAgICBzdWJJbWFnZSA9IHRpbGVJbWFn
ZTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQ29weWluZyBhIHN1Yi1pbWFnZSBvdXQgb2YgYSBw
YXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBzdG9wcyB0aGUgZGVjb2Rpbmcgb2YgdGhlIG9yaWdpbmFs
IGltYWdlLiBJdCBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAgIC8vIGJlY2F1c2Ugc3ViLWlt
YWdlcyBhcmUgb25seSB1c2VkIGZvciBib3JkZXItaW1hZ2UsIHdoaWNoIG9ubHkgcmVuZGVycyB3
aGVuIHRoZSBpbWFnZSBpcyBmdWxseSBkZWNvZGVkLgotICAgICAgICBBU1NFUlQoaCA9PSBoZWln
aHQoKSk7Ci0gICAgICAgIHN1YkltYWdlLmFkb3B0Q0YoQ0dJbWFnZUNyZWF0ZVdpdGhJbWFnZUlu
UmVjdCh0aWxlSW1hZ2UsIHRpbGVSZWN0KSk7Ci0gICAgfQotCi0gICAgLy8gQWRqdXN0IHRoZSBj
b2xvciBzcGFjZS4KLSAgICBzdWJJbWFnZSA9IEltYWdlOjppbWFnZVdpdGhDb2xvclNwYWNlKHN1
YkltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UpOwotICAgIAotICAgIC8vIExlb3BhcmQgaGFz
IGFuIG9wdGltaXplZCBjYWxsIGZvciB0aGUgdGlsaW5nIG9mIGltYWdlIHBhdHRlcm5zLCBidXQg
d2UgY2FuIG9ubHkgdXNlIGl0IGlmIHRoZSBpbWFnZSBoYXMgYmVlbiBkZWNvZGVkIGVub3VnaCB0
aGF0Ci0gICAgLy8gaXRzIGJ1ZmZlciBpcyB0aGUgc2FtZSBzaXplIGFzIHRoZSBvdmVyYWxsIGlt
YWdlLiAgQmVjYXVzZSBhIHBhcnRpYWxseSBkZWNvZGVkIENHSW1hZ2VSZWYgd2l0aCBhIHNtYWxs
ZXIgd2lkdGggb3IgaGVpZ2h0IHRoYW4gdGhlCi0gICAgLy8gb3ZlcmFsbCBpbWFnZSBidWZmZXIg
bmVlZHMgdG8gdGlsZSB3aXRoICJnYXBzIiwgd2UgY2FuJ3QgdXNlIHRoZSBvcHRpbWl6ZWQgdGls
aW5nIGNhbGwgaW4gdGhhdCBjYXNlLgotICAgIC8vIEZJWE1FOiBXZSBjYW5ub3QgdXNlIENHQ29u
dGV4dERyYXdUaWxlZEltYWdlIHdpdGggc2NhbGVkIHRpbGVzIG9uIExlb3BhcmQsIGJlY2F1c2Ug
aXQgc3VmZmVycyBmcm9tIHJvdW5kaW5nIGVycm9ycy4gIFNub3cgTGVvcGFyZCBpcyBvay4KLSAg
ICBmbG9hdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0aCgpICogbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7Ci0gICAgZmxvYXQgdyA9IENHSW1hZ2VH
ZXRXaWR0aCh0aWxlSW1hZ2UpOwotI2lmICFQTEFURk9STShJT1MpICYmIF9fTUFDX09TX1hfVkVS
U0lPTl9NSU5fUkVRVUlSRUQgPT0gMTA1MAotICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYm
IGggPT0gc2l6ZSgpLmhlaWdodCgpICYmIHNjYWxlZFRpbGVXaWR0aCA9PSB0aWxlUmVjdC53aWR0
aCgpICYmIHNjYWxlZFRpbGVIZWlnaHQgPT0gdGlsZVJlY3QuaGVpZ2h0KCkpCi0jZWxzZQotICAg
IGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpKQotI2VuZGlm
Ci0gICAgICAgIENHQ29udGV4dERyYXdUaWxlZEltYWdlKGNvbnRleHQsIEZsb2F0UmVjdChhZGp1
c3RlZFgsIGFkanVzdGVkWSwgc2NhbGVkVGlsZVdpZHRoLCBzY2FsZWRUaWxlSGVpZ2h0KSwgc3Vi
SW1hZ2UuZ2V0KCkpOwotICAgIGVsc2UgewotCi0gICAgLy8gT24gTGVvcGFyZCBhbmQgbmV3ZXIs
IHRoaXMgY29kZSBub3cgb25seSBydW5zIGZvciBwYXJ0aWFsbHkgZGVjb2RlZCBpbWFnZXMgd2hv
c2UgYnVmZmVycyBkbyBub3QgeWV0IG1hdGNoIHRoZSBvdmVyYWxsIHNpemUgb2YgdGhlIGltYWdl
LgotICAgIHN0YXRpYyBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3MgcGF0dGVybkNhbGxiYWNrcyA9
IHsgMCwgZHJhd1BhdHRlcm5DYWxsYmFjaywgTlVMTCB9OwotICAgIENHQWZmaW5lVHJhbnNmb3Jt
IG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZShuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQo
cGF0dGVyblRyYW5zZm9ybS5hKCkpLCAwLCAwLCBuYXJyb3dQcmVjaXNpb25Ub0NHRmxvYXQocGF0
dGVyblRyYW5zZm9ybS5kKCkpLCBhZGp1c3RlZFgsIGFkanVzdGVkWSk7Ci0gICAgbWF0cml4ID0g
Q0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0NvbnRleHRHZXRDVE0oY29udGV4dCkp
OwotICAgIC8vIFRoZSB0b3Agb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBpcyBkcmF3biBh
dCB0aGUgYm90dG9tIG9mIHRoZSB0aWxlLiBNYXAgaXQgdG8gdGhlIHRvcC4KLSAgICBtYXRyaXgg
PSBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShtYXRyaXgsIDAsIHNpemUoKS5oZWlnaHQoKSAt
IGgpOwotICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBhdHRlcm4oQWRvcHRDRiwgQ0dQYXR0
ZXJuQ3JlYXRlKHN1YkltYWdlLmdldCgpLCBDR1JlY3RNYWtlKDAsIDAsIHRpbGVSZWN0LndpZHRo
KCksIHRpbGVSZWN0LmhlaWdodCgpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1hdHJpeCwgdGlsZVJlY3Qud2lkdGgoKSwgdGlsZVJlY3QuaGVpZ2h0KCks
IAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga0NHUGF0dGVy
blRpbGluZ0NvbnN0YW50U3BhY2luZywgdHJ1ZSwgJnBhdHRlcm5DYWxsYmFja3MpKTsKLSAgICBp
ZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIFJldGFpblB0cjxDR0NvbG9yU3Bh
Y2VSZWY+IHBhdHRlcm5TcGFjZShBZG9wdENGLCBDR0NvbG9yU3BhY2VDcmVhdGVQYXR0ZXJuKDAp
KTsKLSAgICAKLSAgICBDR0Zsb2F0IGFscGhhID0gMTsKLSAgICBSZXRhaW5QdHI8Q0dDb2xvclJl
Zj4gY29sb3IoQWRvcHRDRiwgQ0dDb2xvckNyZWF0ZVdpdGhQYXR0ZXJuKHBhdHRlcm5TcGFjZS5n
ZXQoKSwgcGF0dGVybi5nZXQoKSwgJmFscGhhKSk7Ci0gICAgQ0dDb250ZXh0U2V0RmlsbENvbG9y
U3BhY2UoY29udGV4dCwgcGF0dGVyblNwYWNlLmdldCgpKTsKLQotICAgIC8vIEZJWE1FOiBSZWFs
bHkgd2FudCBhIHB1YmxpYyBBUEkgZm9yIHRoaXMuICBJdCBpcyBqdXN0IENHQ29udGV4dFNldEJh
c2VDVE0oY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl5KS4KLSAgICB3a1NldEJhc2VD
VE0oY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eSk7Ci0gICAgQ0dDb250ZXh0U2V0
UGF0dGVyblBoYXNlKGNvbnRleHQsIENHU2l6ZVplcm8pOwotCi0gICAgQ0dDb250ZXh0U2V0Rmls
bENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNvbG9yLmdldCgpKTsKLSAgICBDR0NvbnRleHRGaWxs
UmVjdChjb250ZXh0LCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdCb3goY29udGV4dCkpOwotCi0g
ICAgfQotCi0gICAgc3RhdGVTYXZlci5yZXN0b3JlKCk7Ci0KLSAgICBpZiAoaW1hZ2VPYnNlcnZl
cigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXcodGhpcyk7Ci19Ci0KLQogfQog
CiAjZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2cvSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDEyNzE0OCkKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NCwxOSArMjQsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQml0
bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgogCiAjaWYgVVNFKENHKQogCi0jaW5jbHVk
ZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCiAjaW5j
bHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0Q0cuaCIKICNpbmNs
dWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUERGRG9jdW1lbnRJbWFnZS5oIgotI2lu
Y2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9B
cHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jaW5jbHVkZSA8Q29yZUZvdW5kYXRpb24vQ0ZBcnJheS5o
PgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBMQVRGT1JNKE1BQykgfHwgUExB
VEZPUk0oQ0hST01JVU0pCkBAIC00OSw5MSArNDUsNiBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0YWRhdGEpCi17Ci0gICAgaWYg
KGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRhID0gZmFsc2U7Ci0KLSAgICBt
X29yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Ci0KLSAgICBpZiAobV9mcmFt
ZSkgewotICAgICAgICBDR0ltYWdlUmVsZWFzZShtX2ZyYW1lKTsKLSAgICAgICAgbV9mcmFtZSA9
IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8g
SW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotCi1CaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJ
bWFnZU9ic2VydmVyKiBvYnNlcnZlcikKLSAgICA6IEltYWdlKG9ic2VydmVyKQotICAgICwgbV9j
dXJyZW50RnJhbWUoMCkKLSAgICAsIG1fZnJhbWVzKDApCi0gICAgLCBtX2ZyYW1lVGltZXIoMCkK
LSAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25lKQotICAgICwgbV9yZXBldGl0
aW9uQ291bnRTdGF0dXMoVW5rbm93bikKLSAgICAsIG1fcmVwZXRpdGlvbnNDb21wbGV0ZSgwKQot
ICAgICwgbV9kZWNvZGVkU2l6ZSgwKQotICAgICwgbV9kZWNvZGVkUHJvcGVydGllc1NpemUoMCkK
LSAgICAsIG1fZnJhbWVDb3VudCgxKQotICAgICwgbV9pc1NvbGlkQ29sb3IoZmFsc2UpCi0gICAg
LCBtX2NoZWNrZWRGb3JTb2xpZENvbG9yKGZhbHNlKQotICAgICwgbV9hbmltYXRpb25GaW5pc2hl
ZCh0cnVlKQotICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQodHJ1ZSkKLSAgICAsIG1faGF2ZVNpemUo
dHJ1ZSkKLSAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVlKQotICAgICwgbV9oYXZlRnJhbWVDb3Vu
dCh0cnVlKQotewotICAgIENHRmxvYXQgd2lkdGggPSBDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSk7
Ci0gICAgQ0dGbG9hdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpOwotICAgIG1f
ZGVjb2RlZFNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0gICAgbV9zaXplID0gSW50U2l6ZSh3
aWR0aCwgaGVpZ2h0KTsKLQotICAgIC8vIFNpbmNlIHdlIGRvbid0IGhhdmUgYSBkZWNvZGVyLCB3
ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSBpbWFnZSBvcmllbnRhdGlvbi4KLSAgICAvLyBTZXQgbV9z
aXplUmVzcGVjdGluZ09yaWVudGF0aW9uIHRvIGJlIHRoZSBzYW1lIGFzIG1fc2l6ZSBzbyBpdCdz
IG5vdCAweDAuCi0gICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uID0gSW50U2l6ZSh3aWR0
aCwgaGVpZ2h0KTsKLQotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0gICAgbV9mcmFtZXNbMF0ubV9m
cmFtZSA9IGNnSW1hZ2U7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXNBbHBoYSA9IHRydWU7Ci0gICAg
bV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotCi0gICAgY2hlY2tGb3JTb2xpZENv
bG9yKCk7Ci19Ci0KLS8vIERyYXdpbmcgUm91dGluZXMKLQotdm9pZCBCaXRtYXBJbWFnZTo6Y2hl
Y2tGb3JTb2xpZENvbG9yKCkKLXsKLSAgICBtX2NoZWNrZWRGb3JTb2xpZENvbG9yID0gdHJ1ZTsK
LSAgICBpZiAoZnJhbWVDb3VudCgpID4gMSkgewotICAgICAgICBtX2lzU29saWRDb2xvciA9IGZh
bHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ0dJbWFnZVJlZiBpbWFnZSA9IGZy
YW1lQXRJbmRleCgwKTsKLSAgICAKLSAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBjaGVjayBmb3Ig
c29saWQgY29sb3IgaW4gdGhlIGltcG9ydGFudCBzcGVjaWFsIGNhc2Ugb2YgYSAxeDEgaW1hZ2Uu
Ci0gICAgaWYgKGltYWdlICYmIENHSW1hZ2VHZXRXaWR0aChpbWFnZSkgPT0gMSAmJiBDR0ltYWdl
R2V0SGVpZ2h0KGltYWdlKSA9PSAxKSB7Ci0gICAgICAgIHVuc2lnbmVkIGNoYXIgcGl4ZWxbNF07
IC8vIFJHQkEKLSAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJlZj4gYm1hcChBZG9wdENGLCBD
R0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNpemVvZihwaXhlbCksIGRldmlj
ZVJHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAgICAgIGtDR0ltYWdlQWxwaGFQcmVtdWx0aXBs
aWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0gICAgICAgIGlmICghYm1hcCkK
LSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgR3JhcGhpY3NDb250ZXh0KGJtYXAuZ2V0KCkp
LnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsKLSAgICAgICAgQ0dSZWN0IGRz
dCA9IHsgezAsIDB9LCB7MSwgMX0gfTsKLSAgICAgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGJtYXAu
Z2V0KCksIGRzdCwgaW1hZ2UpOwotICAgICAgICBpZiAocGl4ZWxbM10gPT0gMCkKLSAgICAgICAg
ICAgIG1fc29saWRDb2xvciA9IENvbG9yKDAsIDAsIDAsIDApOwotICAgICAgICBlbHNlCi0gICAg
ICAgICAgICBtX3NvbGlkQ29sb3IgPSBDb2xvcihwaXhlbFswXSAqIDI1NSAvIHBpeGVsWzNdLCBw
aXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhl
bFszXSk7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsKLSAgICB9Ci19Ci0KIFJldGFp
blB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1hZ2VXaXRoQ29sb3JTcGFjZShDR0ltYWdlUmVmIG9y
aWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsKICAgICBDR0NvbG9yU3BhY2VS
ZWYgb3JpZ2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9yU3BhY2Uob3JpZ2luYWxJbWFn
ZSk7CkBAIC0xNTYsNjggKzY3LDYgQEAgUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlOjppbWFn
ZVdpdGhDbwogICAgIHJldHVybiBvcmlnaW5hbEltYWdlOwogfQogCi1DR0ltYWdlUmVmIEJpdG1h
cEltYWdlOjpnZXRDR0ltYWdlUmVmKCkKLXsKLSAgICByZXR1cm4gZnJhbWVBdEluZGV4KDApOwot
fQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJzdENHSW1hZ2VSZWZPZlNpemUoY29u
c3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291bnQgPSBmcmFtZUNvdW50KCk7Ci0g
ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7Ci0gICAgICAgIENHSW1hZ2VS
ZWYgY2dJbWFnZSA9IGZyYW1lQXRJbmRleChpKTsKLSAgICAgICAgaWYgKGNnSW1hZ2UgJiYgSW50
U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQoY2dJbWFnZSkp
ID09IHNpemUpCi0gICAgICAgICAgICByZXR1cm4gY2dJbWFnZTsKLSAgICB9Ci0KLSAgICAvLyBG
YWxsYmFjayB0byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdlIGNhbid0IGZpbmQgdGhlIHJp
Z2h0IHNpemUKLSAgICByZXR1cm4gZ2V0Q0dJbWFnZVJlZigpOwotfQotCi1SZXRhaW5QdHI8Q0ZB
cnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgpCi17Ci0gICAgc2l6ZV90IGNv
dW50ID0gZnJhbWVDb3VudCgpOwotICAgIGlmICghY291bnQpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIAotICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZBcnJheUNyZWF0ZU11dGFibGUo
TlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoQ0dJbWFnZVJlZiBjdXJyRnJhbWUg
PSBmcmFtZUF0SW5kZXgoaSkpCi0gICAgICAgICAgICBDRkFycmF5QXBwZW5kVmFsdWUoYXJyYXks
IGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBSZXRhaW5QdHI8Q0ZBcnJheVJlZj4oQWRv
cHRDRiwgYXJyYXkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4
dCogY3R4LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVj
dCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIG9wKQotewot
ICAgIGRyYXcoY3R4LCBkc3RSZWN0LCBzcmNSZWN0LCBzdHlsZUNvbG9yU3BhY2UsIG9wLCBEb05v
dFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKTsKLX0KLQotdm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhH
cmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYgZGVzdFJlY3QsIGNvbnN0IEZs
b2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIGNvbXBvc2l0ZU9wLCBSZXNwZWN0SW1hZ2VPcmllbnRhdGlvbkVudW0gc2hvdWxkUmVz
cGVjdEltYWdlT3JpZW50YXRpb24pCi17Ci0gICAgc3RhcnRBbmltYXRpb24oKTsKLQotICAgIENH
SW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotICAgIGlmICgh
aW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhhdmUgYW4gaW1hZ2UgeWV0Lgot
ICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1heUZpbGxXaXRoU29saWRDb2xvcigpKSB7
Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0UmVjdCwgc29saWRDb2xvcigp
LCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIEZsb2F0U2l6ZSBzZWxmU2l6ZSA9IGN1cnJlbnRGcmFtZVNpemUoKTsKLSAgICBJbWFn
ZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247Ci0KLSAg
ICBpZiAoc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gPT0gUmVzcGVjdEltYWdlT3JpZW50
YXRpb24pCi0gICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmllbnRhdGlvbkF0SW5kZXgobV9j
dXJyZW50RnJhbWUpOwotCi0gICAgY3R4dC0+ZHJhd05hdGl2ZUltYWdlKGltYWdlLCBzZWxmU2l6
ZSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwgY29tcG9zaXRlT3AsIG9yaWVu
dGF0aW9uKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0gICAgICAgIGltYWdlT2JzZXJ2
ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQogc3RhdGljIHZvaWQgZHJhd1BhdHRlcm5DYWxsYmFj
ayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICBDR0ltYWdlUmVmIGlt
YWdlID0gKENHSW1hZ2VSZWYpaW5mbzsKQEAgLTMxMSw3ICsxNjAsNiBAQCB2b2lkIEltYWdlOjpk
cmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlk
RHJhdyh0aGlzKTsKIH0KIAotCiB9CiAKICNlbmRpZiAvLyBVU0UoQ0cpCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>161516</attachid>
            <date>2012-08-30 10:48:13 -0700</date>
            <delta_ts>2012-08-30 11:58:07 -0700</delta_ts>
            <desc>Split BitmapImage functions out into BitmapImageCG.cpp</desc>
            <filename>95470_r3.diff</filename>
            <type>text/plain</type>
            <size>32836</size>
            <attacher>mitz</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEyNzE2MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE3IEBACisyMDEyLTA4LTMwICBEYW4gQmVy
bnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CisKKyAgICAgICAgW0NHXSBJbWFnZUNHLmNwcCBjb250
YWlucyBhIG1peCBvZiBJbWFnZSBhbmQgQml0bWFwSW1hZ2UgZnVuY3Rpb25zCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD05NTQ3MAorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViQ29yZS5neXBpOiBBZGRl
ZCBCaXRtYXBJbWFnZUNHLmNwcC4KKyAgICAgICAgKiBXZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvajogRGl0dG8uCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OiBEaXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNw
cDogQ29waWVkIGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VD
Ry5jcHAKKyAgICAgICAgdGhlbiBkZWxldGVkIEltYWdlIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9u
cy4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNHLmNwcDogRGVsZXRlZCBC
aXRtYXBJbWFnZSBhbmQgRnJhbWVEYXRhIGZ1bmN0aW9uIGltcGxlbWVudGF0aW9ucy4KKwogMjAx
Mi0wOC0zMCAgVG9ueSBDaGFuZyAgPHRvbnlAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIE1ha2Ug
UmVuZGVyQm94Ojpjb21wdXRlSW5saW5lRGlyZWN0aW9uTWFyZ2lucyBjb25zdApAQCAtMTI3LDYg
KzE0MSw3IEBACiAgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXJMaXN0
LmNwcDoKICAgICAgICAgKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlckxpc3Q6OnJlbW92ZSk6CiAKKz4+
Pj4+Pj4gLnIxMjcxNTgKIDIwMTItMDgtMzAgIE90dG8gRGVyZWsgQ2hldW5nICA8b3RjaGV1bmdA
cmltLmNvbT4KIAogICAgICAgICBbQmxhY2tCZXJyeV0gTW9kaWZ5aW5nIGhvdyBJUCBkb21haW5z
IGFyZSBoYW5kbGVkIGluIENvb2tpZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lw
aQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDEy
NzE0OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQkod29ya2luZyBjb3B5KQpAQCAt
MzYyNCw2ICszNjI0LDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9S
ZWZQdHJDYWlyby5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1Jl
ZlB0ckNhaXJvLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL1RyYW5z
Zm9ybWF0aW9uTWF0cml4Q2Fpcm8uY3BwJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9ncmFwaGlj
cy9jZy9CaXRtYXBJbWFnZUNHLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vZ3JhcGhpY3Mv
Y2cvQ29sb3JDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0
UG9pbnRDRy5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2dyYXBoaWNzL2NnL0Zsb2F0UmVj
dENHLmNwcCcsCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZj
cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3Jl
LnZjcHJvagkocmV2aXNpb24gMTI3MTQ4KQorKysgU291cmNlL1dlYkNvcmUvV2ViQ29yZS52Y3By
b2ovV2ViQ29yZS52Y3Byb2oJKHdvcmtpbmcgY29weSkKQEAgLTMwNDI5LDYgKzMwNDI5LDI2IEBA
CiAJCQkJCU5hbWU9ImNnIgogCQkJCQk+CiAJCQkJCTxGaWxlCisJCQkJCQlSZWxhdGl2ZVBhdGg9
Ii4uXHBsYXRmb3JtXGdyYXBoaWNzXGNnXEJpdG1hcEltYWdlQ0cuY3BwIgorCQkJCQkJPgorCQkJ
CQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQkJTmFtZT0iRGVidWdfQ2Fpcm9fQ0ZMaXRlfFdp
bjMyIgorCQkJCQkJCUV4Y2x1ZGVkRnJvbUJ1aWxkPSJ0cnVlIgorCQkJCQkJCT4KKwkJCQkJCQk8
VG9vbAorCQkJCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQkJCS8+CisJCQkJCQk8
L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJCQkJTmFt
ZT0iUmVsZWFzZV9DYWlyb19DRkxpdGV8V2luMzIiCisJCQkJCQkJRXhjbHVkZWRGcm9tQnVpbGQ9
InRydWUiCisJCQkJCQkJPgorCQkJCQkJCTxUb29sCisJCQkJCQkJCU5hbWU9IlZDQ0xDb21waWxl
clRvb2wiCisJCQkJCQkJLz4KKwkJCQkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQkJCTwvRmls
ZT4KKwkJCQkJPEZpbGUKIAkJCQkJCVJlbGF0aXZlUGF0aD0iLi5ccGxhdGZvcm1cZ3JhcGhpY3Nc
Y2dcQ29sb3JDRy5jcHAiCiAJCQkJCQk+CiAJCQkJCQk8RmlsZUNvbmZpZ3VyYXRpb24KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDEyNzE0OCkKKysrIFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtOTg2LDYgKzk4Niw3IEBACiAJCTM3NUNE
MjNCMTE5RDQ0RUEwMEEyQTg1OSAvKiBIeXBoZW5hdGlvbk1hYy5tbSBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3NUNEMjM5MTE5RDQ0RUEwMEEyQTg1OSAv
KiBIeXBoZW5hdGlvbk1hYy5tbSAqLzsgfTsKIAkJMzc2RENDRTExM0I0Rjk2NjAwMkVCRUZDIC8q
IFRleHRSdW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzc2RENDRTAxM0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovOyB9OwogCQkzNzc0
QUJBNTBGQTIxRUI0MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzNzc0QUJBMzBGQTIxRUI0
MDBBRDdERTkgLyogT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3
IC8qIEJpdG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMzc3QTNBOEYxNUVGQ0U5QTAwNTlGNUM3IC8qIEJpdG1hcEltYWdlQ0cuY3Bw
ICovOyB9OwogCQkzNzdDNENERjEwMTRFOUY2MDBCOUFFNDIgLyogUGxhY2Vob2xkZXJEb2N1bWVu
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QzRD
REQxMDE0RTlGNjAwQjlBRTQyIC8qIFBsYWNlaG9sZGVyRG9jdW1lbnQuaCAqLzsgfTsKIAkJMzc3
QzRDRTAxMDE0RTlGNjAwQjlBRTQyIC8qIFBsYWNlaG9sZGVyRG9jdW1lbnQuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzc3QzRDREUxMDE0RTlGNjAw
QjlBRTQyIC8qIFBsYWNlaG9sZGVyRG9jdW1lbnQuY3BwICovOyB9OwogCQkzNzg0QzM0QjBFMTFB
QTM0MDA3RDhENDggLyogRm9udFRyYWl0c01hc2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDM3ODRDMzRBMEUxMUFBMzQwMDdEOEQ0OCAvKiBGb250VHJh
aXRzTWFzay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC04MDc4LDYgKzgwNzksNyBAQAogCQkzNzVDRDIzOTExOUQ0NEVBMDBBMkE4NTkgLyogSHlw
aGVuYXRpb25NYWMubW0gKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBI
eXBoZW5hdGlvbk1hYy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzc2RENDRTAx
M0I0Rjk2NjAwMkVCRUZDIC8qIFRleHRSdW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gVGV4dFJ1bi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTM3
NzRBQkEzMEZBMjFFQjQwMEFEN0RFOSAvKiBPdmVybGFwVGVzdFJlcXVlc3RDbGllbnQuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gT3ZlcmxhcFRlc3RSZXF1ZXN0Q2xpZW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTM3N0EzQThGMTVFRkNFOUEwMDU5RjVDNyAv
KiBCaXRtYXBJbWFnZUNHLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEJpdG1hcEltYWdlQ0cuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzdDNENE
RDEwMTRFOUY2MDBCOUFFNDIgLyogUGxhY2Vob2xkZXJEb2N1bWVudC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGFjZWhvbGRlckRvY3VtZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTM3N0M0Q0RFMTAxNEU5RjYwMEI5QUU0MiAvKiBQbGFjZWhvbGRlckRv
Y3VtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBsYWNlaG9s
ZGVyRG9jdW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzNzg0QzM0QTBF
MTFBQTM0MDA3RDhENDggLyogRm9udFRyYWl0c01hc2suaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gRm9udFRyYWl0c01hc2suaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTE5NzIwLDYgKzE5NzIyLDcgQEAKIAkJQjI3NTM1MjkwQjA1MzgxNDAwMkNFNjRGIC8qIGNn
ICovID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKKwkJCQkzNzdBM0E4
RjE1RUZDRTlBMDA1OUY1QzcgLyogQml0bWFwSW1hZ2VDRy5jcHAgKi8sCiAJCQkJMEZDRjMzMjMw
RjJCOTcxNTAwNEI2Nzk1IC8qIENvbG9yQ0cuY3BwICovLAogCQkJCUIyNzUzNTJCMEIwNTM4MTQw
MDJDRTY0RiAvKiBGbG9hdFBvaW50Q0cuY3BwICovLAogCQkJCUIyNzUzNTJDMEIwNTM4MTQwMDJD
RTY0RiAvKiBGbG9hdFJlY3RDRy5jcHAgKi8sCkBAIC0yODU3NSw2ICsyODU3OCw3IEBACiAJCQkJ
RkJENkFGOEIxNUVGMjVFNTAwOEI3MTEwIC8qIENTU0Jhc2ljU2hhcGVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUZCRDZBRjhEMTVFRjI2MEEwMDhCNzExMCAvKiBCYXNpY1NoYXBlcy5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQk0RkIzOTBBRDE1RUY2MUYzMDA3QUQ1MUYgLyogR2VuZXJhdGVkSW1h
Z2UuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzc3QTNBOTAxNUVGQ0U5QjAwNTlGNUM3IC8qIEJp
dG1hcEltYWdlQ0cuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRlcGxv
eW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAkocmV2aXNpb24g
MTI3MTQ4KQkoZnJvbSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9JbWFnZUNH
LmNwcDoxMjcxNDgpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRt
YXBJbWFnZUNHLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMxNyBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAwNCwgMjAwNSwgMjAwNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBD
T01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENP
TVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgorCisjaWYgVVNFKENHKQorCisjaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCisjaW5jbHVk
ZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0Q0cuaCIKKyNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCisjaW5jbHVk
ZSAiUERGRG9jdW1lbnRJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5j
bHVkZSA8QXBwbGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+CisjaW5jbHVk
ZSA8Q29yZUZvdW5kYXRpb24vQ0ZBcnJheS5oPgorI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4K
KworI2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pCisjaW5jbHVkZSAiV2Vi
Q29yZVN5c3RlbUludGVyZmFjZS5oIgorI2VuZGlmCisKKyNpZiBQTEFURk9STShXSU4pCisjaW5j
bHVkZSA8V2ViS2l0U3lzdGVtSW50ZXJmYWNlL1dlYktpdFN5c3RlbUludGVyZmFjZS5oPgorI2Vu
ZGlmCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworYm9vbCBGcmFtZURhdGE6OmNsZWFyKGJvb2wg
Y2xlYXJNZXRhZGF0YSkKK3sKKyAgICBpZiAoY2xlYXJNZXRhZGF0YSkKKyAgICAgICAgbV9oYXZl
TWV0YWRhdGEgPSBmYWxzZTsKKworICAgIG1fb3JpZW50YXRpb24gPSBEZWZhdWx0SW1hZ2VPcmll
bnRhdGlvbjsKKworICAgIGlmIChtX2ZyYW1lKSB7CisgICAgICAgIENHSW1hZ2VSZWxlYXNlKG1f
ZnJhbWUpOworICAgICAgICBtX2ZyYW1lID0gMDsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
fQorICAgIHJldHVybiBmYWxzZTsKK30KKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CisvLyBJbWFnZSBDbGFzcworLy8gPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0JpdG1hcEltYWdlOjpCaXRtYXBJ
bWFnZShDR0ltYWdlUmVmIGNnSW1hZ2UsIEltYWdlT2JzZXJ2ZXIqIG9ic2VydmVyKQorICAgIDog
SW1hZ2Uob2JzZXJ2ZXIpCisgICAgLCBtX2N1cnJlbnRGcmFtZSgwKQorICAgICwgbV9mcmFtZXMo
MCkKKyAgICAsIG1fZnJhbWVUaW1lcigwKQorICAgICwgbV9yZXBldGl0aW9uQ291bnQoY0FuaW1h
dGlvbk5vbmUpCisgICAgLCBtX3JlcGV0aXRpb25Db3VudFN0YXR1cyhVbmtub3duKQorICAgICwg
bV9yZXBldGl0aW9uc0NvbXBsZXRlKDApCisgICAgLCBtX2RlY29kZWRTaXplKDApCisgICAgLCBt
X2RlY29kZWRQcm9wZXJ0aWVzU2l6ZSgwKQorICAgICwgbV9mcmFtZUNvdW50KDEpCisgICAgLCBt
X2lzU29saWRDb2xvcihmYWxzZSkKKyAgICAsIG1fY2hlY2tlZEZvclNvbGlkQ29sb3IoZmFsc2Up
CisgICAgLCBtX2FuaW1hdGlvbkZpbmlzaGVkKHRydWUpCisgICAgLCBtX2FsbERhdGFSZWNlaXZl
ZCh0cnVlKQorICAgICwgbV9oYXZlU2l6ZSh0cnVlKQorICAgICwgbV9zaXplQXZhaWxhYmxlKHRy
dWUpCisgICAgLCBtX2hhdmVGcmFtZUNvdW50KHRydWUpCit7CisgICAgQ0dGbG9hdCB3aWR0aCA9
IENHSW1hZ2VHZXRXaWR0aChjZ0ltYWdlKTsKKyAgICBDR0Zsb2F0IGhlaWdodCA9IENHSW1hZ2VH
ZXRIZWlnaHQoY2dJbWFnZSk7CisgICAgbV9kZWNvZGVkU2l6ZSA9IHdpZHRoICogaGVpZ2h0ICog
NDsKKyAgICBtX3NpemUgPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworCisgICAgLy8gU2luY2Ug
d2UgZG9uJ3QgaGF2ZSBhIGRlY29kZXIsIHdlIGNhbid0IGZpZ3VyZSBvdXQgdGhlIGltYWdlIG9y
aWVudGF0aW9uLgorICAgIC8vIFNldCBtX3NpemVSZXNwZWN0aW5nT3JpZW50YXRpb24gdG8gYmUg
dGhlIHNhbWUgYXMgbV9zaXplIHNvIGl0J3Mgbm90IDB4MC4KKyAgICBtX3NpemVSZXNwZWN0aW5n
T3JpZW50YXRpb24gPSBJbnRTaXplKHdpZHRoLCBoZWlnaHQpOworCisgICAgbV9mcmFtZXMuZ3Jv
dygxKTsKKyAgICBtX2ZyYW1lc1swXS5tX2ZyYW1lID0gY2dJbWFnZTsKKyAgICBtX2ZyYW1lc1sw
XS5tX2hhc0FscGhhID0gdHJ1ZTsKKyAgICBtX2ZyYW1lc1swXS5tX2hhdmVNZXRhZGF0YSA9IHRy
dWU7CisKKyAgICBjaGVja0ZvclNvbGlkQ29sb3IoKTsKK30KKworLy8gRHJhd2luZyBSb3V0aW5l
cworCit2b2lkIEJpdG1hcEltYWdlOjpjaGVja0ZvclNvbGlkQ29sb3IoKQoreworICAgIG1fY2hl
Y2tlZEZvclNvbGlkQ29sb3IgPSB0cnVlOworICAgIGlmIChmcmFtZUNvdW50KCkgPiAxKSB7Cisg
ICAgICAgIG1faXNTb2xpZENvbG9yID0gZmFsc2U7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBDR0ltYWdlUmVmIGltYWdlID0gZnJhbWVBdEluZGV4KDApOworICAgIAorICAgIC8vIEN1
cnJlbnRseSB3ZSBvbmx5IGNoZWNrIGZvciBzb2xpZCBjb2xvciBpbiB0aGUgaW1wb3J0YW50IHNw
ZWNpYWwgY2FzZSBvZiBhIDF4MSBpbWFnZS4KKyAgICBpZiAoaW1hZ2UgJiYgQ0dJbWFnZUdldFdp
ZHRoKGltYWdlKSA9PSAxICYmIENHSW1hZ2VHZXRIZWlnaHQoaW1hZ2UpID09IDEpIHsKKyAgICAg
ICAgdW5zaWduZWQgY2hhciBwaXhlbFs0XTsgLy8gUkdCQQorICAgICAgICBSZXRhaW5QdHI8Q0dD
b250ZXh0UmVmPiBibWFwKEFkb3B0Q0YsIENHQml0bWFwQ29udGV4dENyZWF0ZShwaXhlbCwgMSwg
MSwgOCwgc2l6ZW9mKHBpeGVsKSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpLAorICAgICAgICAg
ICAga0NHSW1hZ2VBbHBoYVByZW11bHRpcGxpZWRMYXN0IHwga0NHQml0bWFwQnl0ZU9yZGVyMzJC
aWcpKTsKKyAgICAgICAgaWYgKCFibWFwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBH
cmFwaGljc0NvbnRleHQoYm1hcC5nZXQoKSkuc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENvbXBvc2l0
ZUNvcHkpOworICAgICAgICBDR1JlY3QgZHN0ID0geyB7MCwgMH0sIHsxLCAxfSB9OworICAgICAg
ICBDR0NvbnRleHREcmF3SW1hZ2UoYm1hcC5nZXQoKSwgZHN0LCBpbWFnZSk7CisgICAgICAgIGlm
IChwaXhlbFszXSA9PSAwKQorICAgICAgICAgICAgbV9zb2xpZENvbG9yID0gQ29sb3IoMCwgMCwg
MCwgMCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKHBp
eGVsWzBdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzFdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVs
WzJdICogMjU1IC8gcGl4ZWxbM10sIHBpeGVsWzNdKTsKKyAgICAgICAgbV9pc1NvbGlkQ29sb3Ig
PSB0cnVlOworICAgIH0KK30KKworUmV0YWluUHRyPENHSW1hZ2VSZWY+IEltYWdlOjppbWFnZVdp
dGhDb2xvclNwYWNlKENHSW1hZ2VSZWYgb3JpZ2luYWxJbWFnZSwgQ29sb3JTcGFjZSBjb2xvclNw
YWNlKQoreworICAgIENHQ29sb3JTcGFjZVJlZiBvcmlnaW5hbENvbG9yU3BhY2UgPSBDR0ltYWdl
R2V0Q29sb3JTcGFjZShvcmlnaW5hbEltYWdlKTsKKworICAgIC8vIElmIHRoZSBpbWFnZSBhbHJl
YWR5IGhhcyBhIChub24tZGV2aWNlKSBjb2xvciBzcGFjZSwgd2UgZG9uJ3Qgd2FudCB0bworICAg
IC8vIG92ZXJyaWRlIGl0LCBzbyByZXR1cm4uCisgICAgaWYgKCFvcmlnaW5hbENvbG9yU3BhY2Ug
fHwgIUNGRXF1YWwob3JpZ2luYWxDb2xvclNwYWNlLCBkZXZpY2VSR0JDb2xvclNwYWNlUmVmKCkp
KQorICAgICAgICByZXR1cm4gb3JpZ2luYWxJbWFnZTsKKworICAgIHN3aXRjaCAoY29sb3JTcGFj
ZSkgeworICAgIGNhc2UgQ29sb3JTcGFjZURldmljZVJHQjoKKyAgICAgICAgcmV0dXJuIG9yaWdp
bmFsSW1hZ2U7CisgICAgY2FzZSBDb2xvclNwYWNlU1JHQjoKKyAgICAgICAgcmV0dXJuIFJldGFp
blB0cjxDR0ltYWdlUmVmPihBZG9wdENGLCBDR0ltYWdlQ3JlYXRlQ29weVdpdGhDb2xvclNwYWNl
KG9yaWdpbmFsSW1hZ2UsIHNSR0JDb2xvclNwYWNlUmVmKCkpKTsKKyAgICBjYXNlIENvbG9yU3Bh
Y2VMaW5lYXJSR0I6CisgICAgICAgIHJldHVybiBSZXRhaW5QdHI8Q0dJbWFnZVJlZj4oQWRvcHRD
RiwgQ0dJbWFnZUNyZWF0ZUNvcHlXaXRoQ29sb3JTcGFjZShvcmlnaW5hbEltYWdlLCBsaW5lYXJS
R0JDb2xvclNwYWNlUmVmKCkpKTsKKyAgICB9CisKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gb3JpZ2luYWxJbWFnZTsKK30KKworQ0dJbWFnZVJlZiBCaXRtYXBJbWFnZTo6
Z2V0Q0dJbWFnZVJlZigpCit7CisgICAgcmV0dXJuIGZyYW1lQXRJbmRleCgwKTsKK30KKworQ0dJ
bWFnZVJlZiBCaXRtYXBJbWFnZTo6Z2V0Rmlyc3RDR0ltYWdlUmVmT2ZTaXplKGNvbnN0IEludFNp
emUmIHNpemUpCit7CisgICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICBDR0ltYWdlUmVmIGNnSW1h
Z2UgPSBmcmFtZUF0SW5kZXgoaSk7CisgICAgICAgIGlmIChjZ0ltYWdlICYmIEludFNpemUoQ0dJ
bWFnZUdldFdpZHRoKGNnSW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGNnSW1hZ2UpKSA9PSBzaXpl
KQorICAgICAgICAgICAgcmV0dXJuIGNnSW1hZ2U7CisgICAgfQorCisgICAgLy8gRmFsbGJhY2sg
dG8gdGhlIGRlZmF1bHQgQ0dJbWFnZVJlZiBpZiB3ZSBjYW4ndCBmaW5kIHRoZSByaWdodCBzaXpl
CisgICAgcmV0dXJuIGdldENHSW1hZ2VSZWYoKTsKK30KKworUmV0YWluUHRyPENGQXJyYXlSZWY+
IEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlQXJyYXkoKQoreworICAgIHNpemVfdCBjb3VudCA9IGZy
YW1lQ291bnQoKTsKKyAgICBpZiAoIWNvdW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICAKKyAg
ICBDRk11dGFibGVBcnJheVJlZiBhcnJheSA9IENGQXJyYXlDcmVhdGVNdXRhYmxlKE5VTEwsIGNv
dW50LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IGNvdW50OyArK2kpIHsKKyAgICAgICAgaWYgKENHSW1hZ2VSZWYgY3VyckZyYW1lID0gZnJhbWVB
dEluZGV4KGkpKQorICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LCBjdXJyRnJh
bWUpOworICAgIH0KKyAgICByZXR1cm4gUmV0YWluUHRyPENGQXJyYXlSZWY+KEFkb3B0Q0YsIGFy
cmF5KTsKK30KKwordm9pZCBCaXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eCwg
Y29uc3QgRmxvYXRSZWN0JiBkc3RSZWN0LCBjb25zdCBGbG9hdFJlY3QmIHNyY1JlY3QsIENvbG9y
U3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCkKK3sKKyAgICBkcmF3
KGN0eCwgZHN0UmVjdCwgc3JjUmVjdCwgc3R5bGVDb2xvclNwYWNlLCBvcCwgRG9Ob3RSZXNwZWN0
SW1hZ2VPcmllbnRhdGlvbik7Cit9CisKK3ZvaWQgQml0bWFwSW1hZ2U6OmRyYXcoR3JhcGhpY3ND
b250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0LCBjb25zdCBGbG9hdFJlY3Qm
IHNyY1JlY3QsIENvbG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBj
b21wb3NpdGVPcCwgUmVzcGVjdEltYWdlT3JpZW50YXRpb25FbnVtIHNob3VsZFJlc3BlY3RJbWFn
ZU9yaWVudGF0aW9uKQoreworICAgIHN0YXJ0QW5pbWF0aW9uKCk7CisKKyAgICBDR0ltYWdlUmVm
IGltYWdlID0gZnJhbWVBdEluZGV4KG1fY3VycmVudEZyYW1lKTsKKyAgICBpZiAoIWltYWdlKSAv
LyBJZiBpdCdzIHRvbyBlYXJseSB3ZSB3b24ndCBoYXZlIGFuIGltYWdlIHlldC4KKyAgICAgICAg
cmV0dXJuOworICAgIAorICAgIGlmIChtYXlGaWxsV2l0aFNvbGlkQ29sb3IoKSkgeworICAgICAg
ICBmaWxsV2l0aFNvbGlkQ29sb3IoY3R4dCwgZGVzdFJlY3QsIHNvbGlkQ29sb3IoKSwgc3R5bGVD
b2xvclNwYWNlLCBjb21wb3NpdGVPcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBG
bG9hdFNpemUgc2VsZlNpemUgPSBjdXJyZW50RnJhbWVTaXplKCk7CisgICAgSW1hZ2VPcmllbnRh
dGlvbiBvcmllbnRhdGlvbiA9IERlZmF1bHRJbWFnZU9yaWVudGF0aW9uOworCisgICAgaWYgKHNo
b3VsZFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uID09IFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKQor
ICAgICAgICBvcmllbnRhdGlvbiA9IGZyYW1lT3JpZW50YXRpb25BdEluZGV4KG1fY3VycmVudEZy
YW1lKTsKKworICAgIGN0eHQtPmRyYXdOYXRpdmVJbWFnZShpbWFnZSwgc2VsZlNpemUsIHN0eWxl
Q29sb3JTcGFjZSwgZGVzdFJlY3QsIHNyY1JlY3QsIGNvbXBvc2l0ZU9wLCBvcmllbnRhdGlvbik7
CisKKyAgICBpZiAoaW1hZ2VPYnNlcnZlcigpKQorICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRp
ZERyYXcodGhpcyk7Cit9CisKK3N0YXRpYyB2b2lkIGRyYXdQYXR0ZXJuQ2FsbGJhY2sodm9pZCog
aW5mbywgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgQ0dJbWFnZVJlZiBpbWFnZSA9IChD
R0ltYWdlUmVmKWluZm87CisgICAgQ0dDb250ZXh0RHJhd0ltYWdlKGNvbnRleHQsIEdyYXBoaWNz
Q29udGV4dChjb250ZXh0KS5yb3VuZFRvRGV2aWNlUGl4ZWxzKEZsb2F0UmVjdCgwLCAwLCBDR0lt
YWdlR2V0V2lkdGgoaW1hZ2UpLCBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSkpLCBpbWFnZSk7Cit9
CisKK3ZvaWQgSW1hZ2U6OmRyYXdQYXR0ZXJuKEdyYXBoaWNzQ29udGV4dCogY3R4dCwgY29uc3Qg
RmxvYXRSZWN0JiB0aWxlUmVjdCwgY29uc3QgQWZmaW5lVHJhbnNmb3JtJiBwYXR0ZXJuVHJhbnNm
b3JtLAorICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgRmxvYXRQb2ludCYgcGhhc2UsIENv
bG9yU3BhY2Ugc3R5bGVDb2xvclNwYWNlLCBDb21wb3NpdGVPcGVyYXRvciBvcCwgY29uc3QgRmxv
YXRSZWN0JiBkZXN0UmVjdCkKK3sKKyAgICBpZiAoIW5hdGl2ZUltYWdlRm9yQ3VycmVudEZyYW1l
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghcGF0dGVyblRyYW5zZm9ybS5pc0ludmVy
dGlibGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBj
dHh0LT5wbGF0Zm9ybUNvbnRleHQoKTsKKyAgICBHcmFwaGljc0NvbnRleHRTdGF0ZVNhdmVyIHN0
YXRlU2F2ZXIoKmN0eHQpOworICAgIENHQ29udGV4dENsaXBUb1JlY3QoY29udGV4dCwgZGVzdFJl
Y3QpOworICAgIGN0eHQtPnNldENvbXBvc2l0ZU9wZXJhdGlvbihvcCk7CisgICAgQ0dDb250ZXh0
VHJhbnNsYXRlQ1RNKGNvbnRleHQsIGRlc3RSZWN0LngoKSwgZGVzdFJlY3QueSgpICsgZGVzdFJl
Y3QuaGVpZ2h0KCkpOworICAgIENHQ29udGV4dFNjYWxlQ1RNKGNvbnRleHQsIDEsIC0xKTsKKyAg
ICAKKyAgICAvLyBDb21wdXRlIHRoZSBzY2FsZWQgdGlsZSBzaXplLgorICAgIGZsb2F0IHNjYWxl
ZFRpbGVIZWlnaHQgPSB0aWxlUmVjdC5oZWlnaHQoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQo
cGF0dGVyblRyYW5zZm9ybS5kKCkpOworICAgIAorICAgIC8vIFdlIGhhdmUgdG8gYWRqdXN0IHRo
ZSBwaGFzZSB0byBkZWFsIHdpdGggdGhlIGZhY3Qgd2UncmUgaW4gQ2FydGVzaWFuIHNwYWNlIG5v
dyAod2l0aCB0aGUgYm90dG9tIGxlZnQgY29ybmVyIG9mIGRlc3RSZWN0IGJlaW5nCisgICAgLy8g
dGhlIG9yaWdpbikuCisgICAgZmxvYXQgYWRqdXN0ZWRYID0gcGhhc2UueCgpIC0gZGVzdFJlY3Qu
eCgpICsgdGlsZVJlY3QueCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNm
b3JtLmEoKSk7IC8vIFdlIHRyYW5zbGF0ZWQgdGhlIGNvbnRleHQgc28gdGhhdCBkZXN0UmVjdC54
KCkgaXMgdGhlIG9yaWdpbiwgc28gc3VidHJhY3QgaXQgb3V0LgorICAgIGZsb2F0IGFkanVzdGVk
WSA9IGRlc3RSZWN0LmhlaWdodCgpIC0gKHBoYXNlLnkoKSAtIGRlc3RSZWN0LnkoKSArIHRpbGVS
ZWN0LnkoKSAqIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5kKCkpICsg
c2NhbGVkVGlsZUhlaWdodCk7CisKKyAgICBDR0ltYWdlUmVmIHRpbGVJbWFnZSA9IG5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7CisgICAgZmxvYXQgaCA9IENHSW1hZ2VHZXRIZWlnaHQodGls
ZUltYWdlKTsKKworICAgIFJldGFpblB0cjxDR0ltYWdlUmVmPiBzdWJJbWFnZTsKKyAgICBpZiAo
dGlsZVJlY3Quc2l6ZSgpID09IHNpemUoKSkKKyAgICAgICAgc3ViSW1hZ2UgPSB0aWxlSW1hZ2U7
CisgICAgZWxzZSB7CisgICAgICAgIC8vIENvcHlpbmcgYSBzdWItaW1hZ2Ugb3V0IG9mIGEgcGFy
dGlhbGx5LWRlY29kZWQgaW1hZ2Ugc3RvcHMgdGhlIGRlY29kaW5nIG9mIHRoZSBvcmlnaW5hbCBp
bWFnZS4gSXQgc2hvdWxkIG5ldmVyIGhhcHBlbgorICAgICAgICAvLyBiZWNhdXNlIHN1Yi1pbWFn
ZXMgYXJlIG9ubHkgdXNlZCBmb3IgYm9yZGVyLWltYWdlLCB3aGljaCBvbmx5IHJlbmRlcnMgd2hl
biB0aGUgaW1hZ2UgaXMgZnVsbHkgZGVjb2RlZC4KKyAgICAgICAgQVNTRVJUKGggPT0gaGVpZ2h0
KCkpOworICAgICAgICBzdWJJbWFnZS5hZG9wdENGKENHSW1hZ2VDcmVhdGVXaXRoSW1hZ2VJblJl
Y3QodGlsZUltYWdlLCB0aWxlUmVjdCkpOworICAgIH0KKworICAgIC8vIEFkanVzdCB0aGUgY29s
b3Igc3BhY2UuCisgICAgc3ViSW1hZ2UgPSBJbWFnZTo6aW1hZ2VXaXRoQ29sb3JTcGFjZShzdWJJ
bWFnZS5nZXQoKSwgc3R5bGVDb2xvclNwYWNlKTsKKyAgICAKKyAgICAvLyBMZW9wYXJkIGhhcyBh
biBvcHRpbWl6ZWQgY2FsbCBmb3IgdGhlIHRpbGluZyBvZiBpbWFnZSBwYXR0ZXJucywgYnV0IHdl
IGNhbiBvbmx5IHVzZSBpdCBpZiB0aGUgaW1hZ2UgaGFzIGJlZW4gZGVjb2RlZCBlbm91Z2ggdGhh
dAorICAgIC8vIGl0cyBidWZmZXIgaXMgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgb3ZlcmFsbCBpbWFn
ZS4gIEJlY2F1c2UgYSBwYXJ0aWFsbHkgZGVjb2RlZCBDR0ltYWdlUmVmIHdpdGggYSBzbWFsbGVy
IHdpZHRoIG9yIGhlaWdodCB0aGFuIHRoZQorICAgIC8vIG92ZXJhbGwgaW1hZ2UgYnVmZmVyIG5l
ZWRzIHRvIHRpbGUgd2l0aCAiZ2FwcyIsIHdlIGNhbid0IHVzZSB0aGUgb3B0aW1pemVkIHRpbGlu
ZyBjYWxsIGluIHRoYXQgY2FzZS4KKyAgICAvLyBGSVhNRTogV2UgY2Fubm90IHVzZSBDR0NvbnRl
eHREcmF3VGlsZWRJbWFnZSB3aXRoIHNjYWxlZCB0aWxlcyBvbiBMZW9wYXJkLCBiZWNhdXNlIGl0
IHN1ZmZlcnMgZnJvbSByb3VuZGluZyBlcnJvcnMuICBTbm93IExlb3BhcmQgaXMgb2suCisgICAg
ZmxvYXQgc2NhbGVkVGlsZVdpZHRoID0gdGlsZVJlY3Qud2lkdGgoKSAqIG5hcnJvd1ByZWNpc2lv
blRvRmxvYXQocGF0dGVyblRyYW5zZm9ybS5hKCkpOworICAgIGZsb2F0IHcgPSBDR0ltYWdlR2V0
V2lkdGgodGlsZUltYWdlKTsKKyNpZiAhUExBVEZPUk0oSU9TKSAmJiBfX01BQ19PU19YX1ZFUlNJ
T05fTUlOX1JFUVVJUkVEID09IDEwNTAKKyAgICBpZiAodyA9PSBzaXplKCkud2lkdGgoKSAmJiBo
ID09IHNpemUoKS5oZWlnaHQoKSAmJiBzY2FsZWRUaWxlV2lkdGggPT0gdGlsZVJlY3Qud2lkdGgo
KSAmJiBzY2FsZWRUaWxlSGVpZ2h0ID09IHRpbGVSZWN0LmhlaWdodCgpKQorI2Vsc2UKKyAgICBp
ZiAodyA9PSBzaXplKCkud2lkdGgoKSAmJiBoID09IHNpemUoKS5oZWlnaHQoKSkKKyNlbmRpZgor
ICAgICAgICBDR0NvbnRleHREcmF3VGlsZWRJbWFnZShjb250ZXh0LCBGbG9hdFJlY3QoYWRqdXN0
ZWRYLCBhZGp1c3RlZFksIHNjYWxlZFRpbGVXaWR0aCwgc2NhbGVkVGlsZUhlaWdodCksIHN1Yklt
YWdlLmdldCgpKTsKKyAgICBlbHNlIHsKKworICAgIC8vIE9uIExlb3BhcmQgYW5kIG5ld2VyLCB0
aGlzIGNvZGUgbm93IG9ubHkgcnVucyBmb3IgcGFydGlhbGx5IGRlY29kZWQgaW1hZ2VzIHdob3Nl
IGJ1ZmZlcnMgZG8gbm90IHlldCBtYXRjaCB0aGUgb3ZlcmFsbCBzaXplIG9mIHRoZSBpbWFnZS4K
KyAgICBzdGF0aWMgY29uc3QgQ0dQYXR0ZXJuQ2FsbGJhY2tzIHBhdHRlcm5DYWxsYmFja3MgPSB7
IDAsIGRyYXdQYXR0ZXJuQ2FsbGJhY2ssIE5VTEwgfTsKKyAgICBDR0FmZmluZVRyYW5zZm9ybSBt
YXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybU1ha2UobmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHBh
dHRlcm5UcmFuc2Zvcm0uYSgpKSwgMCwgMCwgbmFycm93UHJlY2lzaW9uVG9DR0Zsb2F0KHBhdHRl
cm5UcmFuc2Zvcm0uZCgpKSwgYWRqdXN0ZWRYLCBhZGp1c3RlZFkpOworICAgIG1hdHJpeCA9IENH
QWZmaW5lVHJhbnNmb3JtQ29uY2F0KG1hdHJpeCwgQ0dDb250ZXh0R2V0Q1RNKGNvbnRleHQpKTsK
KyAgICAvLyBUaGUgdG9wIG9mIGEgcGFydGlhbGx5LWRlY29kZWQgaW1hZ2UgaXMgZHJhd24gYXQg
dGhlIGJvdHRvbSBvZiB0aGUgdGlsZS4gTWFwIGl0IHRvIHRoZSB0b3AuCisgICAgbWF0cml4ID0g
Q0dBZmZpbmVUcmFuc2Zvcm1UcmFuc2xhdGUobWF0cml4LCAwLCBzaXplKCkuaGVpZ2h0KCkgLSBo
KTsKKyAgICBSZXRhaW5QdHI8Q0dQYXR0ZXJuUmVmPiBwYXR0ZXJuKEFkb3B0Q0YsIENHUGF0dGVy
bkNyZWF0ZShzdWJJbWFnZS5nZXQoKSwgQ0dSZWN0TWFrZSgwLCAwLCB0aWxlUmVjdC53aWR0aCgp
LCB0aWxlUmVjdC5oZWlnaHQoKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBtYXRyaXgsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpLCAK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGtDR1BhdHRlcm5U
aWxpbmdDb25zdGFudFNwYWNpbmcsIHRydWUsICZwYXR0ZXJuQ2FsbGJhY2tzKSk7CisgICAgaWYg
KCFwYXR0ZXJuKQorICAgICAgICByZXR1cm47CisKKyAgICBSZXRhaW5QdHI8Q0dDb2xvclNwYWNl
UmVmPiBwYXR0ZXJuU3BhY2UoQWRvcHRDRiwgQ0dDb2xvclNwYWNlQ3JlYXRlUGF0dGVybigwKSk7
CisgICAgCisgICAgQ0dGbG9hdCBhbHBoYSA9IDE7CisgICAgUmV0YWluUHRyPENHQ29sb3JSZWY+
IGNvbG9yKEFkb3B0Q0YsIENHQ29sb3JDcmVhdGVXaXRoUGF0dGVybihwYXR0ZXJuU3BhY2UuZ2V0
KCksIHBhdHRlcm4uZ2V0KCksICZhbHBoYSkpOworICAgIENHQ29udGV4dFNldEZpbGxDb2xvclNw
YWNlKGNvbnRleHQsIHBhdHRlcm5TcGFjZS5nZXQoKSk7CisKKyAgICAvLyBGSVhNRTogUmVhbGx5
IHdhbnQgYSBwdWJsaWMgQVBJIGZvciB0aGlzLiAgSXQgaXMganVzdCBDR0NvbnRleHRTZXRCYXNl
Q1RNKGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpeSkuCisgICAgd2tTZXRCYXNlQ1RN
KGNvbnRleHQsIENHQWZmaW5lVHJhbnNmb3JtSWRlbnRpdHkpOworICAgIENHQ29udGV4dFNldFBh
dHRlcm5QaGFzZShjb250ZXh0LCBDR1NpemVaZXJvKTsKKworICAgIENHQ29udGV4dFNldEZpbGxD
b2xvcldpdGhDb2xvcihjb250ZXh0LCBjb2xvci5nZXQoKSk7CisgICAgQ0dDb250ZXh0RmlsbFJl
Y3QoY29udGV4dCwgQ0dDb250ZXh0R2V0Q2xpcEJvdW5kaW5nQm94KGNvbnRleHQpKTsKKworICAg
IH0KKworICAgIHN0YXRlU2F2ZXIucmVzdG9yZSgpOworCisgICAgaWYgKGltYWdlT2JzZXJ2ZXIo
KSkKKyAgICAgICAgaW1hZ2VPYnNlcnZlcigpLT5kaWREcmF3KHRoaXMpOworfQorCisKK30KKwor
I2VuZGlmIC8vIFVTRShDRykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NnL0JpdG1hcEltYWdlQ0cuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NnL0JpdG1hcEltYWdlQ0cuY3BwCShyZXZpc2lvbiAxMjcxNDgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jZy9CaXRtYXBJbWFnZUNHLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjgsMTUgKzI4LDEwIEBACiAKICNpZiBVU0UoQ0cpCiAKLSNpbmNsdWRl
ICJBZmZpbmVUcmFuc2Zvcm0uaCIKICNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNs
dWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHRDRy5oIgogI2luY2x1
ZGUgIkltYWdlT2JzZXJ2ZXIuaCIKLSNpbmNsdWRlICJQREZEb2N1bWVudEltYWdlLmgiCi0jaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0Fw
cGxpY2F0aW9uU2VydmljZXMuaD4KLSNpbmNsdWRlIDxDb3JlRm91bmRhdGlvbi9DRkFycmF5Lmg+
CiAjaW5jbHVkZSA8d3RmL1JldGFpblB0ci5oPgogCiAjaWYgUExBVEZPUk0oTUFDKSB8fCBQTEFU
Rk9STShDSFJPTUlVTSkKQEAgLTY0LDEwICs1OSw2IEBAIGJvb2wgRnJhbWVEYXRhOjpjbGVhcihi
b29sIGNsZWFyTWV0YWRhdGEKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLS8vID09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLy8gSW1hZ2UgQ2xhc3MKLS8v
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotCiBCaXRt
YXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJbWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBv
YnNlcnZlcikKICAgICA6IEltYWdlKG9ic2VydmVyKQogICAgICwgbV9jdXJyZW50RnJhbWUoMCkK
QEAgLTEzNCwyOCArMTI1LDYgQEAgdm9pZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9y
KCkKICAgICB9CiB9CiAKLVJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1hZ2VXaXRoQ29s
b3JTcGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkK
LXsKLSAgICBDR0NvbG9yU3BhY2VSZWYgb3JpZ2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdldENv
bG9yU3BhY2Uob3JpZ2luYWxJbWFnZSk7Ci0KLSAgICAvLyBJZiB0aGUgaW1hZ2UgYWxyZWFkeSBo
YXMgYSAobm9uLWRldmljZSkgY29sb3Igc3BhY2UsIHdlIGRvbid0IHdhbnQgdG8KLSAgICAvLyBv
dmVycmlkZSBpdCwgc28gcmV0dXJuLgotICAgIGlmICghb3JpZ2luYWxDb2xvclNwYWNlIHx8ICFD
RkVxdWFsKG9yaWdpbmFsQ29sb3JTcGFjZSwgZGV2aWNlUkdCQ29sb3JTcGFjZVJlZigpKSkKLSAg
ICAgICAgcmV0dXJuIG9yaWdpbmFsSW1hZ2U7Ci0KLSAgICBzd2l0Y2ggKGNvbG9yU3BhY2UpIHsK
LSAgICBjYXNlIENvbG9yU3BhY2VEZXZpY2VSR0I6Ci0gICAgICAgIHJldHVybiBvcmlnaW5hbElt
YWdlOwotICAgIGNhc2UgQ29sb3JTcGFjZVNSR0I6Ci0gICAgICAgIHJldHVybiBSZXRhaW5QdHI8
Q0dJbWFnZVJlZj4oQWRvcHRDRiwgQ0dJbWFnZUNyZWF0ZUNvcHlXaXRoQ29sb3JTcGFjZShvcmln
aW5hbEltYWdlLCBzUkdCQ29sb3JTcGFjZVJlZigpKSk7Ci0gICAgY2FzZSBDb2xvclNwYWNlTGlu
ZWFyUkdCOgotICAgICAgICByZXR1cm4gUmV0YWluUHRyPENHSW1hZ2VSZWY+KEFkb3B0Q0YsIENH
SW1hZ2VDcmVhdGVDb3B5V2l0aENvbG9yU3BhY2Uob3JpZ2luYWxJbWFnZSwgbGluZWFyUkdCQ29s
b3JTcGFjZVJlZigpKSk7Ci0gICAgfQotCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAg
cmV0dXJuIG9yaWdpbmFsSW1hZ2U7Ci19Ci0KIENHSW1hZ2VSZWYgQml0bWFwSW1hZ2U6OmdldENH
SW1hZ2VSZWYoKQogewogICAgIHJldHVybiBmcmFtZUF0SW5kZXgoMCk7CkBAIC0yMTgsMTAwICsx
ODcsNiBAQCB2b2lkIEJpdG1hcEltYWdlOjpkcmF3KEdyYXBoaWNzQ29udGV4dCogCiAgICAgICAg
IGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotc3RhdGljIHZvaWQgZHJhd1Bh
dHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKLXsKLSAgICBD
R0ltYWdlUmVmIGltYWdlID0gKENHSW1hZ2VSZWYpaW5mbzsKLSAgICBDR0NvbnRleHREcmF3SW1h
Z2UoY29udGV4dCwgR3JhcGhpY3NDb250ZXh0KGNvbnRleHQpLnJvdW5kVG9EZXZpY2VQaXhlbHMo
RmxvYXRSZWN0KDAsIDAsIENHSW1hZ2VHZXRXaWR0aChpbWFnZSksIENHSW1hZ2VHZXRIZWlnaHQo
aW1hZ2UpKSksIGltYWdlKTsKLX0KLQotdm9pZCBJbWFnZTo6ZHJhd1BhdHRlcm4oR3JhcGhpY3ND
b250ZXh0KiBjdHh0LCBjb25zdCBGbG9hdFJlY3QmIHRpbGVSZWN0LCBjb25zdCBBZmZpbmVUcmFu
c2Zvcm0mIHBhdHRlcm5UcmFuc2Zvcm0sCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBG
bG9hdFBvaW50JiBwaGFzZSwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0ZU9w
ZXJhdG9yIG9wLCBjb25zdCBGbG9hdFJlY3QmIGRlc3RSZWN0KQotewotICAgIGlmICghbmF0aXZl
SW1hZ2VGb3JDdXJyZW50RnJhbWUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFwYXR0
ZXJuVHJhbnNmb3JtLmlzSW52ZXJ0aWJsZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IGN0eHQtPnBsYXRmb3JtQ29udGV4dCgpOwotICAgIEdyYXBoaWNz
Q29udGV4dFN0YXRlU2F2ZXIgc3RhdGVTYXZlcigqY3R4dCk7Ci0gICAgQ0dDb250ZXh0Q2xpcFRv
UmVjdChjb250ZXh0LCBkZXN0UmVjdCk7Ci0gICAgY3R4dC0+c2V0Q29tcG9zaXRlT3BlcmF0aW9u
KG9wKTsKLSAgICBDR0NvbnRleHRUcmFuc2xhdGVDVE0oY29udGV4dCwgZGVzdFJlY3QueCgpLCBk
ZXN0UmVjdC55KCkgKyBkZXN0UmVjdC5oZWlnaHQoKSk7Ci0gICAgQ0dDb250ZXh0U2NhbGVDVE0o
Y29udGV4dCwgMSwgLTEpOwotICAgIAotICAgIC8vIENvbXB1dGUgdGhlIHNjYWxlZCB0aWxlIHNp
emUuCi0gICAgZmxvYXQgc2NhbGVkVGlsZUhlaWdodCA9IHRpbGVSZWN0LmhlaWdodCgpICogbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmQoKSk7Ci0gICAgCi0gICAgLy8g
V2UgaGF2ZSB0byBhZGp1c3QgdGhlIHBoYXNlIHRvIGRlYWwgd2l0aCB0aGUgZmFjdCB3ZSdyZSBp
biBDYXJ0ZXNpYW4gc3BhY2Ugbm93ICh3aXRoIHRoZSBib3R0b20gbGVmdCBjb3JuZXIgb2YgZGVz
dFJlY3QgYmVpbmcKLSAgICAvLyB0aGUgb3JpZ2luKS4KLSAgICBmbG9hdCBhZGp1c3RlZFggPSBw
aGFzZS54KCkgLSBkZXN0UmVjdC54KCkgKyB0aWxlUmVjdC54KCkgKiBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KHBhdHRlcm5UcmFuc2Zvcm0uYSgpKTsgLy8gV2UgdHJhbnNsYXRlZCB0aGUgY29udGV4
dCBzbyB0aGF0IGRlc3RSZWN0LngoKSBpcyB0aGUgb3JpZ2luLCBzbyBzdWJ0cmFjdCBpdCBvdXQu
Ci0gICAgZmxvYXQgYWRqdXN0ZWRZID0gZGVzdFJlY3QuaGVpZ2h0KCkgLSAocGhhc2UueSgpIC0g
ZGVzdFJlY3QueSgpICsgdGlsZVJlY3QueSgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0
ZXJuVHJhbnNmb3JtLmQoKSkgKyBzY2FsZWRUaWxlSGVpZ2h0KTsKLQotICAgIENHSW1hZ2VSZWYg
dGlsZUltYWdlID0gbmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBmbG9hdCBoID0g
Q0dJbWFnZUdldEhlaWdodCh0aWxlSW1hZ2UpOwotCi0gICAgUmV0YWluUHRyPENHSW1hZ2VSZWY+
IHN1YkltYWdlOwotICAgIGlmICh0aWxlUmVjdC5zaXplKCkgPT0gc2l6ZSgpKQotICAgICAgICBz
dWJJbWFnZSA9IHRpbGVJbWFnZTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gQ29weWluZyBhIHN1
Yi1pbWFnZSBvdXQgb2YgYSBwYXJ0aWFsbHktZGVjb2RlZCBpbWFnZSBzdG9wcyB0aGUgZGVjb2Rp
bmcgb2YgdGhlIG9yaWdpbmFsIGltYWdlLiBJdCBzaG91bGQgbmV2ZXIgaGFwcGVuCi0gICAgICAg
IC8vIGJlY2F1c2Ugc3ViLWltYWdlcyBhcmUgb25seSB1c2VkIGZvciBib3JkZXItaW1hZ2UsIHdo
aWNoIG9ubHkgcmVuZGVycyB3aGVuIHRoZSBpbWFnZSBpcyBmdWxseSBkZWNvZGVkLgotICAgICAg
ICBBU1NFUlQoaCA9PSBoZWlnaHQoKSk7Ci0gICAgICAgIHN1YkltYWdlLmFkb3B0Q0YoQ0dJbWFn
ZUNyZWF0ZVdpdGhJbWFnZUluUmVjdCh0aWxlSW1hZ2UsIHRpbGVSZWN0KSk7Ci0gICAgfQotCi0g
ICAgLy8gQWRqdXN0IHRoZSBjb2xvciBzcGFjZS4KLSAgICBzdWJJbWFnZSA9IEltYWdlOjppbWFn
ZVdpdGhDb2xvclNwYWNlKHN1YkltYWdlLmdldCgpLCBzdHlsZUNvbG9yU3BhY2UpOwotICAgIAot
ICAgIC8vIExlb3BhcmQgaGFzIGFuIG9wdGltaXplZCBjYWxsIGZvciB0aGUgdGlsaW5nIG9mIGlt
YWdlIHBhdHRlcm5zLCBidXQgd2UgY2FuIG9ubHkgdXNlIGl0IGlmIHRoZSBpbWFnZSBoYXMgYmVl
biBkZWNvZGVkIGVub3VnaCB0aGF0Ci0gICAgLy8gaXRzIGJ1ZmZlciBpcyB0aGUgc2FtZSBzaXpl
IGFzIHRoZSBvdmVyYWxsIGltYWdlLiAgQmVjYXVzZSBhIHBhcnRpYWxseSBkZWNvZGVkIENHSW1h
Z2VSZWYgd2l0aCBhIHNtYWxsZXIgd2lkdGggb3IgaGVpZ2h0IHRoYW4gdGhlCi0gICAgLy8gb3Zl
cmFsbCBpbWFnZSBidWZmZXIgbmVlZHMgdG8gdGlsZSB3aXRoICJnYXBzIiwgd2UgY2FuJ3QgdXNl
IHRoZSBvcHRpbWl6ZWQgdGlsaW5nIGNhbGwgaW4gdGhhdCBjYXNlLgotICAgIC8vIEZJWE1FOiBX
ZSBjYW5ub3QgdXNlIENHQ29udGV4dERyYXdUaWxlZEltYWdlIHdpdGggc2NhbGVkIHRpbGVzIG9u
IExlb3BhcmQsIGJlY2F1c2UgaXQgc3VmZmVycyBmcm9tIHJvdW5kaW5nIGVycm9ycy4gIFNub3cg
TGVvcGFyZCBpcyBvay4KLSAgICBmbG9hdCBzY2FsZWRUaWxlV2lkdGggPSB0aWxlUmVjdC53aWR0
aCgpICogbmFycm93UHJlY2lzaW9uVG9GbG9hdChwYXR0ZXJuVHJhbnNmb3JtLmEoKSk7Ci0gICAg
ZmxvYXQgdyA9IENHSW1hZ2VHZXRXaWR0aCh0aWxlSW1hZ2UpOwotI2lmICFQTEFURk9STShJT1Mp
ICYmIF9fTUFDX09TX1hfVkVSU0lPTl9NSU5fUkVRVUlSRUQgPT0gMTA1MAotICAgIGlmICh3ID09
IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgpLmhlaWdodCgpICYmIHNjYWxlZFRpbGVXaWR0
aCA9PSB0aWxlUmVjdC53aWR0aCgpICYmIHNjYWxlZFRpbGVIZWlnaHQgPT0gdGlsZVJlY3QuaGVp
Z2h0KCkpCi0jZWxzZQotICAgIGlmICh3ID09IHNpemUoKS53aWR0aCgpICYmIGggPT0gc2l6ZSgp
LmhlaWdodCgpKQotI2VuZGlmCi0gICAgICAgIENHQ29udGV4dERyYXdUaWxlZEltYWdlKGNvbnRl
eHQsIEZsb2F0UmVjdChhZGp1c3RlZFgsIGFkanVzdGVkWSwgc2NhbGVkVGlsZVdpZHRoLCBzY2Fs
ZWRUaWxlSGVpZ2h0KSwgc3ViSW1hZ2UuZ2V0KCkpOwotICAgIGVsc2UgewotCi0gICAgLy8gT24g
TGVvcGFyZCBhbmQgbmV3ZXIsIHRoaXMgY29kZSBub3cgb25seSBydW5zIGZvciBwYXJ0aWFsbHkg
ZGVjb2RlZCBpbWFnZXMgd2hvc2UgYnVmZmVycyBkbyBub3QgeWV0IG1hdGNoIHRoZSBvdmVyYWxs
IHNpemUgb2YgdGhlIGltYWdlLgotICAgIHN0YXRpYyBjb25zdCBDR1BhdHRlcm5DYWxsYmFja3Mg
cGF0dGVybkNhbGxiYWNrcyA9IHsgMCwgZHJhd1BhdHRlcm5DYWxsYmFjaywgTlVMTCB9OwotICAg
IENHQWZmaW5lVHJhbnNmb3JtIG1hdHJpeCA9IENHQWZmaW5lVHJhbnNmb3JtTWFrZShuYXJyb3dQ
cmVjaXNpb25Ub0NHRmxvYXQocGF0dGVyblRyYW5zZm9ybS5hKCkpLCAwLCAwLCBuYXJyb3dQcmVj
aXNpb25Ub0NHRmxvYXQocGF0dGVyblRyYW5zZm9ybS5kKCkpLCBhZGp1c3RlZFgsIGFkanVzdGVk
WSk7Ci0gICAgbWF0cml4ID0gQ0dBZmZpbmVUcmFuc2Zvcm1Db25jYXQobWF0cml4LCBDR0NvbnRl
eHRHZXRDVE0oY29udGV4dCkpOwotICAgIC8vIFRoZSB0b3Agb2YgYSBwYXJ0aWFsbHktZGVjb2Rl
ZCBpbWFnZSBpcyBkcmF3biBhdCB0aGUgYm90dG9tIG9mIHRoZSB0aWxlLiBNYXAgaXQgdG8gdGhl
IHRvcC4KLSAgICBtYXRyaXggPSBDR0FmZmluZVRyYW5zZm9ybVRyYW5zbGF0ZShtYXRyaXgsIDAs
IHNpemUoKS5oZWlnaHQoKSAtIGgpOwotICAgIFJldGFpblB0cjxDR1BhdHRlcm5SZWY+IHBhdHRl
cm4oQWRvcHRDRiwgQ0dQYXR0ZXJuQ3JlYXRlKHN1YkltYWdlLmdldCgpLCBDR1JlY3RNYWtlKDAs
IDAsIHRpbGVSZWN0LndpZHRoKCksIHRpbGVSZWN0LmhlaWdodCgpKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hdHJpeCwgdGlsZVJlY3Qud2lkdGgoKSwg
dGlsZVJlY3QuaGVpZ2h0KCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAga0NHUGF0dGVyblRpbGluZ0NvbnN0YW50U3BhY2luZywgdHJ1ZSwgJnBhdHRlcm5D
YWxsYmFja3MpKTsKLSAgICBpZiAoIXBhdHRlcm4pCi0gICAgICAgIHJldHVybjsKLQotICAgIFJl
dGFpblB0cjxDR0NvbG9yU3BhY2VSZWY+IHBhdHRlcm5TcGFjZShBZG9wdENGLCBDR0NvbG9yU3Bh
Y2VDcmVhdGVQYXR0ZXJuKDApKTsKLSAgICAKLSAgICBDR0Zsb2F0IGFscGhhID0gMTsKLSAgICBS
ZXRhaW5QdHI8Q0dDb2xvclJlZj4gY29sb3IoQWRvcHRDRiwgQ0dDb2xvckNyZWF0ZVdpdGhQYXR0
ZXJuKHBhdHRlcm5TcGFjZS5nZXQoKSwgcGF0dGVybi5nZXQoKSwgJmFscGhhKSk7Ci0gICAgQ0dD
b250ZXh0U2V0RmlsbENvbG9yU3BhY2UoY29udGV4dCwgcGF0dGVyblNwYWNlLmdldCgpKTsKLQot
ICAgIC8vIEZJWE1FOiBSZWFsbHkgd2FudCBhIHB1YmxpYyBBUEkgZm9yIHRoaXMuICBJdCBpcyBq
dXN0IENHQ29udGV4dFNldEJhc2VDVE0oY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl5
KS4KLSAgICB3a1NldEJhc2VDVE0oY29udGV4dCwgQ0dBZmZpbmVUcmFuc2Zvcm1JZGVudGl0eSk7
Ci0gICAgQ0dDb250ZXh0U2V0UGF0dGVyblBoYXNlKGNvbnRleHQsIENHU2l6ZVplcm8pOwotCi0g
ICAgQ0dDb250ZXh0U2V0RmlsbENvbG9yV2l0aENvbG9yKGNvbnRleHQsIGNvbG9yLmdldCgpKTsK
LSAgICBDR0NvbnRleHRGaWxsUmVjdChjb250ZXh0LCBDR0NvbnRleHRHZXRDbGlwQm91bmRpbmdC
b3goY29udGV4dCkpOwotCi0gICAgfQotCi0gICAgc3RhdGVTYXZlci5yZXN0b3JlKCk7Ci0KLSAg
ICBpZiAoaW1hZ2VPYnNlcnZlcigpKQotICAgICAgICBpbWFnZU9ic2VydmVyKCktPmRpZERyYXco
dGhpcyk7Ci19Ci0KLQogfQogCiAjZW5kaWYgLy8gVVNFKENHKQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2cvSW1hZ2VDRy5jcHAJKHJldmlzaW9uIDEyNzE0
OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NnL0ltYWdlQ0cuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCwxOSArMjQsMTUgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJJbWFnZS5oIgogCiAjaWYg
VVNFKENHKQogCi0jaW5jbHVkZSAiQWZmaW5lVHJhbnNmb3JtLmgiCiAjaW5jbHVkZSAiRmxvYXRD
b252ZXJzaW9uLmgiCiAjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0Q0cuaCIKICNpbmNsdWRlICJJbWFnZU9ic2VydmVyLmgiCi0jaW5jbHVkZSAiUERGRG9j
dW1lbnRJbWFnZS5oIgotI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSA8QXBw
bGljYXRpb25TZXJ2aWNlcy9BcHBsaWNhdGlvblNlcnZpY2VzLmg+Ci0jaW5jbHVkZSA8Q29yZUZv
dW5kYXRpb24vQ0ZBcnJheS5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIAogI2lmIFBM
QVRGT1JNKE1BQykgfHwgUExBVEZPUk0oQ0hST01JVU0pCkBAIC00OSw5MSArNDUsNiBAQAogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKLWJvb2wgRnJhbWVEYXRhOjpjbGVhcihib29sIGNsZWFyTWV0
YWRhdGEpCi17Ci0gICAgaWYgKGNsZWFyTWV0YWRhdGEpCi0gICAgICAgIG1faGF2ZU1ldGFkYXRh
ID0gZmFsc2U7Ci0KLSAgICBtX29yaWVudGF0aW9uID0gRGVmYXVsdEltYWdlT3JpZW50YXRpb247
Ci0KLSAgICBpZiAobV9mcmFtZSkgewotICAgICAgICBDR0ltYWdlUmVsZWFzZShtX2ZyYW1lKTsK
LSAgICAgICAgbV9mcmFtZSA9IDA7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICBy
ZXR1cm4gZmFsc2U7Ci19Ci0KLS8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLy8gSW1hZ2UgQ2xhc3MKLS8vID09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotCi1CaXRtYXBJbWFnZTo6Qml0bWFwSW1hZ2UoQ0dJ
bWFnZVJlZiBjZ0ltYWdlLCBJbWFnZU9ic2VydmVyKiBvYnNlcnZlcikKLSAgICA6IEltYWdlKG9i
c2VydmVyKQotICAgICwgbV9jdXJyZW50RnJhbWUoMCkKLSAgICAsIG1fZnJhbWVzKDApCi0gICAg
LCBtX2ZyYW1lVGltZXIoMCkKLSAgICAsIG1fcmVwZXRpdGlvbkNvdW50KGNBbmltYXRpb25Ob25l
KQotICAgICwgbV9yZXBldGl0aW9uQ291bnRTdGF0dXMoVW5rbm93bikKLSAgICAsIG1fcmVwZXRp
dGlvbnNDb21wbGV0ZSgwKQotICAgICwgbV9kZWNvZGVkU2l6ZSgwKQotICAgICwgbV9kZWNvZGVk
UHJvcGVydGllc1NpemUoMCkKLSAgICAsIG1fZnJhbWVDb3VudCgxKQotICAgICwgbV9pc1NvbGlk
Q29sb3IoZmFsc2UpCi0gICAgLCBtX2NoZWNrZWRGb3JTb2xpZENvbG9yKGZhbHNlKQotICAgICwg
bV9hbmltYXRpb25GaW5pc2hlZCh0cnVlKQotICAgICwgbV9hbGxEYXRhUmVjZWl2ZWQodHJ1ZSkK
LSAgICAsIG1faGF2ZVNpemUodHJ1ZSkKLSAgICAsIG1fc2l6ZUF2YWlsYWJsZSh0cnVlKQotICAg
ICwgbV9oYXZlRnJhbWVDb3VudCh0cnVlKQotewotICAgIENHRmxvYXQgd2lkdGggPSBDR0ltYWdl
R2V0V2lkdGgoY2dJbWFnZSk7Ci0gICAgQ0dGbG9hdCBoZWlnaHQgPSBDR0ltYWdlR2V0SGVpZ2h0
KGNnSW1hZ2UpOwotICAgIG1fZGVjb2RlZFNpemUgPSB3aWR0aCAqIGhlaWdodCAqIDQ7Ci0gICAg
bV9zaXplID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIC8vIFNpbmNlIHdlIGRvbid0
IGhhdmUgYSBkZWNvZGVyLCB3ZSBjYW4ndCBmaWd1cmUgb3V0IHRoZSBpbWFnZSBvcmllbnRhdGlv
bi4KLSAgICAvLyBTZXQgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0aW9uIHRvIGJlIHRoZSBzYW1l
IGFzIG1fc2l6ZSBzbyBpdCdzIG5vdCAweDAuCi0gICAgbV9zaXplUmVzcGVjdGluZ09yaWVudGF0
aW9uID0gSW50U2l6ZSh3aWR0aCwgaGVpZ2h0KTsKLQotICAgIG1fZnJhbWVzLmdyb3coMSk7Ci0g
ICAgbV9mcmFtZXNbMF0ubV9mcmFtZSA9IGNnSW1hZ2U7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXNB
bHBoYSA9IHRydWU7Ci0gICAgbV9mcmFtZXNbMF0ubV9oYXZlTWV0YWRhdGEgPSB0cnVlOwotCi0g
ICAgY2hlY2tGb3JTb2xpZENvbG9yKCk7Ci19Ci0KLS8vIERyYXdpbmcgUm91dGluZXMKLQotdm9p
ZCBCaXRtYXBJbWFnZTo6Y2hlY2tGb3JTb2xpZENvbG9yKCkKLXsKLSAgICBtX2NoZWNrZWRGb3JT
b2xpZENvbG9yID0gdHJ1ZTsKLSAgICBpZiAoZnJhbWVDb3VudCgpID4gMSkgewotICAgICAgICBt
X2lzU29saWRDb2xvciA9IGZhbHNlOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgQ0dJ
bWFnZVJlZiBpbWFnZSA9IGZyYW1lQXRJbmRleCgwKTsKLSAgICAKLSAgICAvLyBDdXJyZW50bHkg
d2Ugb25seSBjaGVjayBmb3Igc29saWQgY29sb3IgaW4gdGhlIGltcG9ydGFudCBzcGVjaWFsIGNh
c2Ugb2YgYSAxeDEgaW1hZ2UuCi0gICAgaWYgKGltYWdlICYmIENHSW1hZ2VHZXRXaWR0aChpbWFn
ZSkgPT0gMSAmJiBDR0ltYWdlR2V0SGVpZ2h0KGltYWdlKSA9PSAxKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGNoYXIgcGl4ZWxbNF07IC8vIFJHQkEKLSAgICAgICAgUmV0YWluUHRyPENHQ29udGV4dFJl
Zj4gYm1hcChBZG9wdENGLCBDR0JpdG1hcENvbnRleHRDcmVhdGUocGl4ZWwsIDEsIDEsIDgsIHNp
emVvZihwaXhlbCksIGRldmljZVJHQkNvbG9yU3BhY2VSZWYoKSwKLSAgICAgICAgICAgIGtDR0lt
YWdlQWxwaGFQcmVtdWx0aXBsaWVkTGFzdCB8IGtDR0JpdG1hcEJ5dGVPcmRlcjMyQmlnKSk7Ci0g
ICAgICAgIGlmICghYm1hcCkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgR3JhcGhpY3ND
b250ZXh0KGJtYXAuZ2V0KCkpLnNldENvbXBvc2l0ZU9wZXJhdGlvbihDb21wb3NpdGVDb3B5KTsK
LSAgICAgICAgQ0dSZWN0IGRzdCA9IHsgezAsIDB9LCB7MSwgMX0gfTsKLSAgICAgICAgQ0dDb250
ZXh0RHJhd0ltYWdlKGJtYXAuZ2V0KCksIGRzdCwgaW1hZ2UpOwotICAgICAgICBpZiAocGl4ZWxb
M10gPT0gMCkKLSAgICAgICAgICAgIG1fc29saWRDb2xvciA9IENvbG9yKDAsIDAsIDAsIDApOwot
ICAgICAgICBlbHNlCi0gICAgICAgICAgICBtX3NvbGlkQ29sb3IgPSBDb2xvcihwaXhlbFswXSAq
IDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsxXSAqIDI1NSAvIHBpeGVsWzNdLCBwaXhlbFsyXSAqIDI1
NSAvIHBpeGVsWzNdLCBwaXhlbFszXSk7Ci0gICAgICAgIG1faXNTb2xpZENvbG9yID0gdHJ1ZTsK
LSAgICB9Ci19Ci0KIFJldGFpblB0cjxDR0ltYWdlUmVmPiBJbWFnZTo6aW1hZ2VXaXRoQ29sb3JT
cGFjZShDR0ltYWdlUmVmIG9yaWdpbmFsSW1hZ2UsIENvbG9yU3BhY2UgY29sb3JTcGFjZSkKIHsK
ICAgICBDR0NvbG9yU3BhY2VSZWYgb3JpZ2luYWxDb2xvclNwYWNlID0gQ0dJbWFnZUdldENvbG9y
U3BhY2Uob3JpZ2luYWxJbWFnZSk7CkBAIC0xNTYsNjggKzY3LDYgQEAgUmV0YWluUHRyPENHSW1h
Z2VSZWY+IEltYWdlOjppbWFnZVdpdGhDbwogICAgIHJldHVybiBvcmlnaW5hbEltYWdlOwogfQog
Ci1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRDR0ltYWdlUmVmKCkKLXsKLSAgICByZXR1cm4g
ZnJhbWVBdEluZGV4KDApOwotfQotCi1DR0ltYWdlUmVmIEJpdG1hcEltYWdlOjpnZXRGaXJzdENH
SW1hZ2VSZWZPZlNpemUoY29uc3QgSW50U2l6ZSYgc2l6ZSkKLXsKLSAgICBzaXplX3QgY291bnQg
PSBmcmFtZUNvdW50KCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBjb3VudDsgKytpKSB7
Ci0gICAgICAgIENHSW1hZ2VSZWYgY2dJbWFnZSA9IGZyYW1lQXRJbmRleChpKTsKLSAgICAgICAg
aWYgKGNnSW1hZ2UgJiYgSW50U2l6ZShDR0ltYWdlR2V0V2lkdGgoY2dJbWFnZSksIENHSW1hZ2VH
ZXRIZWlnaHQoY2dJbWFnZSkpID09IHNpemUpCi0gICAgICAgICAgICByZXR1cm4gY2dJbWFnZTsK
LSAgICB9Ci0KLSAgICAvLyBGYWxsYmFjayB0byB0aGUgZGVmYXVsdCBDR0ltYWdlUmVmIGlmIHdl
IGNhbid0IGZpbmQgdGhlIHJpZ2h0IHNpemUKLSAgICByZXR1cm4gZ2V0Q0dJbWFnZVJlZigpOwot
fQotCi1SZXRhaW5QdHI8Q0ZBcnJheVJlZj4gQml0bWFwSW1hZ2U6OmdldENHSW1hZ2VBcnJheSgp
Ci17Ci0gICAgc2l6ZV90IGNvdW50ID0gZnJhbWVDb3VudCgpOwotICAgIGlmICghY291bnQpCi0g
ICAgICAgIHJldHVybiAwOwotICAgIAotICAgIENGTXV0YWJsZUFycmF5UmVmIGFycmF5ID0gQ0ZB
cnJheUNyZWF0ZU11dGFibGUoTlVMTCwgY291bnQsICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewotICAgICAgICBpZiAoQ0dJ
bWFnZVJlZiBjdXJyRnJhbWUgPSBmcmFtZUF0SW5kZXgoaSkpCi0gICAgICAgICAgICBDRkFycmF5
QXBwZW5kVmFsdWUoYXJyYXksIGN1cnJGcmFtZSk7Ci0gICAgfQotICAgIHJldHVybiBSZXRhaW5Q
dHI8Q0ZBcnJheVJlZj4oQWRvcHRDRiwgYXJyYXkpOwotfQotCi12b2lkIEJpdG1hcEltYWdlOjpk
cmF3KEdyYXBoaWNzQ29udGV4dCogY3R4LCBjb25zdCBGbG9hdFJlY3QmIGRzdFJlY3QsIGNvbnN0
IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9yU3BhY2UsIENvbXBvc2l0
ZU9wZXJhdG9yIG9wKQotewotICAgIGRyYXcoY3R4LCBkc3RSZWN0LCBzcmNSZWN0LCBzdHlsZUNv
bG9yU3BhY2UsIG9wLCBEb05vdFJlc3BlY3RJbWFnZU9yaWVudGF0aW9uKTsKLX0KLQotdm9pZCBC
aXRtYXBJbWFnZTo6ZHJhdyhHcmFwaGljc0NvbnRleHQqIGN0eHQsIGNvbnN0IEZsb2F0UmVjdCYg
ZGVzdFJlY3QsIGNvbnN0IEZsb2F0UmVjdCYgc3JjUmVjdCwgQ29sb3JTcGFjZSBzdHlsZUNvbG9y
U3BhY2UsIENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wLCBSZXNwZWN0SW1hZ2VPcmllbnRh
dGlvbkVudW0gc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi17Ci0gICAgc3RhcnRBbmlt
YXRpb24oKTsKLQotICAgIENHSW1hZ2VSZWYgaW1hZ2UgPSBmcmFtZUF0SW5kZXgobV9jdXJyZW50
RnJhbWUpOwotICAgIGlmICghaW1hZ2UpIC8vIElmIGl0J3MgdG9vIGVhcmx5IHdlIHdvbid0IGhh
dmUgYW4gaW1hZ2UgeWV0LgotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgaWYgKG1heUZpbGxX
aXRoU29saWRDb2xvcigpKSB7Ci0gICAgICAgIGZpbGxXaXRoU29saWRDb2xvcihjdHh0LCBkZXN0
UmVjdCwgc29saWRDb2xvcigpLCBzdHlsZUNvbG9yU3BhY2UsIGNvbXBvc2l0ZU9wKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLQotICAgIEZsb2F0U2l6ZSBzZWxmU2l6ZSA9IGN1cnJlbnRGcmFt
ZVNpemUoKTsKLSAgICBJbWFnZU9yaWVudGF0aW9uIG9yaWVudGF0aW9uID0gRGVmYXVsdEltYWdl
T3JpZW50YXRpb247Ci0KLSAgICBpZiAoc2hvdWxkUmVzcGVjdEltYWdlT3JpZW50YXRpb24gPT0g
UmVzcGVjdEltYWdlT3JpZW50YXRpb24pCi0gICAgICAgIG9yaWVudGF0aW9uID0gZnJhbWVPcmll
bnRhdGlvbkF0SW5kZXgobV9jdXJyZW50RnJhbWUpOwotCi0gICAgY3R4dC0+ZHJhd05hdGl2ZUlt
YWdlKGltYWdlLCBzZWxmU2l6ZSwgc3R5bGVDb2xvclNwYWNlLCBkZXN0UmVjdCwgc3JjUmVjdCwg
Y29tcG9zaXRlT3AsIG9yaWVudGF0aW9uKTsKLQotICAgIGlmIChpbWFnZU9ic2VydmVyKCkpCi0g
ICAgICAgIGltYWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKLX0KLQogc3RhdGljIHZvaWQg
ZHJhd1BhdHRlcm5DYWxsYmFjayh2b2lkKiBpbmZvLCBDR0NvbnRleHRSZWYgY29udGV4dCkKIHsK
ICAgICBDR0ltYWdlUmVmIGltYWdlID0gKENHSW1hZ2VSZWYpaW5mbzsKQEAgLTMxMSw3ICsxNjAs
NiBAQCB2b2lkIEltYWdlOjpkcmF3UGF0dGVybihHcmFwaGljc0NvbnRleHQqCiAgICAgICAgIGlt
YWdlT2JzZXJ2ZXIoKS0+ZGlkRHJhdyh0aGlzKTsKIH0KIAotCiB9CiAKICNlbmRpZiAvLyBVU0Uo
Q0cpCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>