<?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>52471</bug_id>
          
          <creation_ts>2011-01-14 13:03:09 -0800</creation_ts>
          <short_desc>[chromium] Rename ChromiumBridge to PlatformBridge</short_desc>
          <delta_ts>2011-01-21 03:31:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>52784</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Fisher (:fishd, Google)">fishd</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>adamk</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dimich</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>334538</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-14 13:03:09 -0800</bug_when>
    <thetext>[chromium] Rename ChromiumBridge to PlatformBridge

WebCore/platform/chromium/ChromiumBridge.h should be renamed PlatformBridge.  There is already a typedef in platform/chromium/PlatformBridge.h.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336205</commentid>
    <comment_count>1</comment_count>
      <attachid>79354</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-01-18 16:46:06 -0800</bug_when>
    <thetext>Created attachment 79354
Not yet tested</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336248</commentid>
    <comment_count>2</comment_count>
      <attachid>79367</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-01-18 17:36:54 -0800</bug_when>
    <thetext>Created attachment 79367
Now with PlatformBridge.cpp</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336339</commentid>
    <comment_count>3</comment_count>
      <attachid>79367</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2011-01-18 22:12:59 -0800</bug_when>
    <thetext>Comment on attachment 79367
Now with PlatformBridge.cpp

And then one more change to get rid of ChromiumBridge.h and put it in PlatformBridge.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336646</commentid>
    <comment_count>4</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-01-19 10:58:56 -0800</bug_when>
    <thetext>That was supposed to be in this patch, actually; somehow, I seem to be missing everything under Source/WebCore.  I suspect it&apos;s something to do with the fact that I had to switch from git to svn when generating this patch.  Will try to get a fixed patch up soon.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336651</commentid>
    <comment_count>5</comment_count>
      <attachid>79453</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-01-19 11:06:54 -0800</bug_when>
    <thetext>Created attachment 79453
WebCore + WebKit changes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336652</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-01-19 11:07:57 -0800</bug_when>
    <thetext>Now with WebCore changes included in patch.  &quot;ChromiumBridge&quot; no longer appears anywhere in the source tree.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336655</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-19 11:08:40 -0800</bug_when>
    <thetext>Attachment 79453 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/chromium/SuddenTerminationChromium.cpp:34:  One or more unexpected \r (^M) found; better to use only a \n  [whitespace/carriage_return] [1]
Suppressing further [whitespace/carriage_return] reports for this file.
Source/WebCore/platform/graphics/chromium/GlyphPageTreeNodeChromiumWin.cpp:83:  An else statement can be removed when the prior &quot;if&quot; concludes with a return, break, continue or goto statement.  [readability/control_flow] [4]
Source/WebCore/platform/graphics/chromium/FontCacheChromiumWin.cpp:291:  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/chromium/PlatformBridge.h:69:  Code inside a namespace should not be indented.  [whitespace/indent] [4]
Source/WebCore/platform/chromium/PlatformBridge.h:94:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/chromium/PlatformBridge.h:120:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/chromium/PlatformBridge.h:121:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/chromium/PlatformBridge.h:149:  The parameter name &quot;font&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/chromium/PlatformBridge.h:183:  The parameter name &quot;url&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/chromium/PlatformBridge.h:217:  The parameter name &quot;size&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/chromium/PlatformBridge.h:232:  The parameter name &quot;fireTime&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/chromium/PlatformBridge.h:342:  The parameter name &quot;id&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/chromium/PlatformBridge.h:343:  The parameter name &quot;id&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Source/WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 16 in 55 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>336680</commentid>
    <comment_count>8</comment_count>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-01-19 11:51:29 -0800</bug_when>
    <thetext>None of these style violations was added by me; what&apos;s the usual policy for such things?  My instinct would be to avoid making unrelated changes in this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336869</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-19 15:20:19 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; None of these style violations was added by me; what&apos;s the usual policy for such things?  My instinct would be to avoid making unrelated changes in this patch.

The issue here is that the style rules have changed over time.  Instead of fixing all of the code when the style rules change, we have the convention of fixing up files as they are modified.  So, you may go ahead and do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>336883</commentid>
    <comment_count>10</comment_count>
      <attachid>79505</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-01-19 15:44:30 -0800</bug_when>
    <thetext>Created attachment 79505
Fixed style errors</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337104</commentid>
    <comment_count>11</comment_count>
      <attachid>79505</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-19 21:18:12 -0800</bug_when>
    <thetext>Comment on attachment 79505
Fixed style errors

Clearing flags on attachment: 79505

Committed r76203: &lt;http://trac.webkit.org/changeset/76203&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337105</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-19 21:18:17 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337126</commentid>
    <comment_count>13</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2011-01-19 22:02:36 -0800</bug_when>
    <thetext>This change broke compile on Chromium bots. Reverting.

Sample: http://build.chromium.org/p/chromium/builders/Webkit%20Win%20Builder/builds/5657</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337135</commentid>
    <comment_count>14</comment_count>
    <who name="Darin Fisher (:fishd, Google)">fishd</who>
    <bug_when>2011-01-19 22:38:58 -0800</bug_when>
    <thetext>Bummer, it looks like the change made to fix the style issue in Source/WebCore/platform/graphics/chromium/FontPlatformDataChromiumWin.cpp is to blame :-(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337434</commentid>
    <comment_count>15</comment_count>
      <attachid>79615</attachid>
    <who name="Adam Klein">adamk</who>
    <bug_when>2011-01-20 10:38:11 -0800</bug_when>
    <thetext>Created attachment 79615
Reverted style fixes in FontPlatformDataChromiumWin.cpp to fix Chromium/Windows build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337439</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-01-20 10:41:51 -0800</bug_when>
    <thetext>Attachment 79615 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/chromium/FontPlatformDataChromiumWin.cpp:39:  Alphabetical sorting problem.  [build/include_order] [4]
Total errors found: 1 in 55 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>337981</commentid>
    <comment_count>17</comment_count>
      <attachid>79615</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2011-01-21 03:16:43 -0800</bug_when>
    <thetext>Comment on attachment 79615
Reverted style fixes in FontPlatformDataChromiumWin.cpp to fix Chromium/Windows build

Looks sane.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337990</commentid>
    <comment_count>18</comment_count>
      <attachid>79615</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-21 03:31:24 -0800</bug_when>
    <thetext>Comment on attachment 79615
Reverted style fixes in FontPlatformDataChromiumWin.cpp to fix Chromium/Windows build

Clearing flags on attachment: 79615

Committed r76340: &lt;http://trac.webkit.org/changeset/76340&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>337991</commentid>
    <comment_count>19</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2011-01-21 03:31:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79354</attachid>
            <date>2011-01-18 16:46:06 -0800</date>
            <delta_ts>2011-01-18 17:36:51 -0800</delta_ts>
            <desc>Not yet tested</desc>
            <filename>bug-52471-20110118164605.patch</filename>
            <type>text/plain</type>
            <size>133144</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA2ZWZjMWU5YzNkNDViNzU1ZWFhNGRiOTgyYTk0N2NlZDg4MDBjNGQxLi5k
ODQyZGQ2YmYwNjgwOWE4YzIwZmY2MTY1MGUzYTZlMjdiY2YxNDAzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTY4IEBACisyMDExLTAxLTE4ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3Jn
PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJv
bWl1bV0gUmVuYW1lIENocm9taXVtQnJpZGdlIHRvIFBsYXRmb3JtQnJpZGdlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjQ3MQorCisgICAgICAgICog
V2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0RmF0YWxFcnJvckluVjgpOgorICAgICAgICAqIHBh
Z2UvUGFnZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBhZ2VHcm91cDo6aXNMaW5rVmlz
aXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oOgorICAg
ICAgICAqIHBsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVtb3J5QXVkaW9GaWxlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oOiBSZW1vdmVkLgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmdldERhdGEpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lz
dGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlRmlsZSk6CisgICAgICAg
IChXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRG
aWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpyZXZlYWxGb2xkZXJJbk9TKToKKyAgICAgICAgKFdlYkNvcmU6OmRp
cmVjdG9yeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VBbGxEaXJlY3Rvcmllcyk6CisgICAgICAgIChXZWJD
b3JlOjpmaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNvcmU6Om9wZW5GaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OmNsb3NlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpzZWVrRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0cnVuY2F0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6cmVhZEZyb21G
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVG9GaWxlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9MYW5ndWFnZUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBsYXRm
b3JtRGVmYXVsdExhbmd1YWdlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFz
aENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9u
KToKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dGVu
c2lvbkZvck1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lz
dHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpN
SU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3
cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNhblNtYXJ0UmVwbGFjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjpwbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxh
dGZvcm1CcmlkZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVl
bkNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoKToKKyAgICAgICAg
KFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnNj
cmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5SZWN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgorICAgICAgICAqIHBsYXRmb3JtL2No
cm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJs
ZURhdGFPYmplY3Q6OmdldERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2Jq
ZWN0Ojp1cmxUaXRsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6Omh0
bWxCYXNlVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZW5h
bWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6ZW5zdXJlVHlwZUNh
Y2hlSW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVy
YXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZyk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bS5jcHA6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hy
b21pdW1MaW51eDo6c2Nyb2xsYmFyVGhpY2tuZXNzKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9s
bGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFja1BpZWNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludFRodW1iKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6YnV0dG9uU2l6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6Om1pbmltdW1UaHVt
Ykxlbmd0aCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWM6OnBhaW50KToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnNjcm9sbGJh
clRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2lu
OjpwYWludFRyYWNrUGllY2UpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bVdpbjo6cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bVdpbjo6cGFpbnRUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVt
ZUNocm9taXVtV2luOjpidXR0b25TaXplKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9T
aGFyZWRUaW1lckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnNldFNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVUaW1l
KToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3BTaGFyZWRUaW1lcik6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpkaXNhYmxlU3VkZGVuVGVybWluYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZW5hYmxl
U3VkZGVuVGVybWluYXRpb24pOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1N5c3RlbVRp
bWVDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjdXJyZW50VGltZSk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW06CisgICAgICAgICog
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Zm9udENvbnRhaW5zQ2hhcmFjdGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkZpbGxMb2dGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250
Q2FjaGVMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250Q2FjaGU6OmdldEZvbnREYXRh
Rm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dENocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJv
bWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpzY3JpcHRG
b250UHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9u
dFBsYXRmb3JtRGF0YUxpbnV4LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURh
dGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZmlsbEJNUEdseXBocyk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hy
b21pdW0vSW1hZ2VDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFBs
YXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0lt
YWdlQ2hyb21pdW1NYWMubW06CisgICAgICAgIChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3Jt
UmVzb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZv
bnREYXRhQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJt
aW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lk
dGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2Ny
aWJlSGVscGVyVGV4dFJ1bi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXJU
ZXh0UnVuOjp0cnlUb1ByZWxvYWRGb250KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Rm9udEN1
c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0YSk6CisgICAgICAgICogcGxhdGZvcm0v
bmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6
Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0UmF3Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsv
Y2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6cHJlZmV0Y2hETlMp
OgorICAgICAgICAqIHBsYXRmb3JtL3F0L1BsYXRmb3JtQnJpZGdlLmg6CisgICAgICAgICogcGxh
dGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUpOgorICAgICAg
ICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZSk6CisgICAg
ICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4
LmNwcDoKKyAgICAgICAgKGNocm9taXVtT3Blbik6CisgICAgICAgIChjaHJvbWl1bURlbGV0ZSk6
CisgICAgICAgIChjaHJvbWl1bUFjY2Vzcyk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9t
aXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5jcHA6CisgICAgICAgICogcGx1Z2lucy9j
aHJvbWl1bS9QbHVnaW5EYXRhQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGx1Z2lu
Q2FjaGU6OnBsdWdpbnMpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVt
TWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6dXNlc1Rl
c3RNb2RlRm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUaGVtZUNo
cm9taXVtU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6Y2FyZXRCbGlua0ludGVydmFsKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2lu
OjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46
OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN5c3RlbUNvbG9yKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2xpZGVyVHJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6bWVudUxpc3RCdXR0b25XaWR0aCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUNocm9taXVtV2luOjpwYWludE1lbnVMaXN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50VGV4dEZpZWxkSW50ZXJuYWwpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRQcm9ncmVzc0Jhcik6
CisgICAgICAgICogc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6Y3JlYXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjp+SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2UpOgorICAgICAgICAqIHN0b3JhZ2UvY2hyb21pdW0vSURCS2V5
UGF0aEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OklEQktleVBhdGhCYWNrZW5k
SW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCk6CisKIDIw
MTEtMDEtMTggIEtlbm5ldGggUnVzc2VsbCAgPGtickBnb29nbGUuY29tPgogCiAgICAgICAgIFJl
dmlld2VkIGJ5IERhdmlkIExldmluLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCmluZGV4IDgyNzhlMmJjNTI0ZGMw
OTg4NWVhZWQ4OTZmMjBkNzA0MGU1ZmMwNWQuLjg4NDhkMDQ0N2Q2ZTFiYmZlODZiZTkwOTI4Yzdj
OTVkN2M2MDkwZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTI0MzcsNyArMjQzNyw2IEBACiAgICAg
ICAgICAgICAncGxhdGZvcm0vY2YvU2NoZWR1bGVQYWlyLmNwcCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2YvU2NoZWR1bGVQYWlyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL1NoYXJl
ZEJ1ZmZlckNGLmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1C
cmlkZ2UuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2Jq
ZWN0LmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVj
dExlZ2FjeS5jcHAnLApAQCAtMjQ3NCw2ICsyNDczLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9y
bS9jaHJvbWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdw
bGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkUHJpdmF0ZS5oJywKKyAgICAgICAgICAgICdwbGF0
Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybUJyaWRnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9QbGF0Zm9ybUN1cnNvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9QbGF0Zm9ybUtleWJvYXJkRXZlbnRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRm
b3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwJywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwIGIvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvdjgvVjhET01XaW5kb3dTaGVsbC5jcHAKaW5kZXggODIwNWZlNTAyMTYy
YjE5YzUwYjdhNDNlNGFjYzRkNzI4N2RlNTViYS4uOWQ2NjVkYjE5MjUzMDM1OGMyZDUwMGNlZThi
Yjc5YzU0NTI3ZjBjNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhE
T01XaW5kb3dTaGVsbC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvVjhET01X
aW5kb3dTaGVsbC5jcHAKQEAgLTg0LDcgKzg0LDcgQEAgc3RhdGljIHZvaWQgcmVwb3J0RmF0YWxF
cnJvckluVjgoY29uc3QgY2hhciogbG9jYXRpb24sIGNvbnN0IGNoYXIqIG1lc3NhZ2UpCiAgICAg
Ly8gRklYTUU6IGNsZWFuIHVwIFY4UHJveHkgYW5kIGRpc2FibGUgSmF2YVNjcmlwdC4KICAgICBp
bnQgbWVtb3J5VXNhZ2VNQiA9IC0xOwogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQotICAgIG1lbW9y
eVVzYWdlTUIgPSBDaHJvbWl1bUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpOworICAgIG1l
bW9yeVVzYWdlTUIgPSBQbGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpOwogI2Vu
ZGlmCiAgICAgcHJpbnRmKCJWOCBlcnJvcjogJXMgKCVzKS4gIEN1cnJlbnQgbWVtb3J5IHVzYWdl
OiAlZCBNQlxuIiwgbWVzc2FnZSwgbG9jYXRpb24sIG1lbW9yeVVzYWdlTUIpOwogICAgIGhhbmRs
ZUZhdGFsRXJyb3JJblY4KCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKaW5kZXggOGI5MDJj
MDI2ZWQyNTVlMDFhOTBjZDAxYjdmNzRhYzFhNTE0YWNiMi4uYjliMGUzNDkyYzUzN2NmNGFkZDIz
ZTk0MjcxYjVlNTJkZDlmMWUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
R3JvdXAuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZUdyb3VwLmNwcApAQCAtMzcs
NyArMzcsNyBAQAogI2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKIAogI2lmIFBMQVRGT1JN
KENIUk9NSVVNKQotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZv
cm1CcmlkZ2UuaCIKICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjgsNyArMTI4
LDcgQEAgYm9vbCBQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtI
YXNoKQogewogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQogICAgIC8vIFVzZSBDaHJvbWl1bSdzIGJ1
aWx0LWluIHZpc2l0ZWQgbGluayBkYXRhYmFzZS4KLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6
OmlzTGlua1Zpc2l0ZWQodmlzaXRlZExpbmtIYXNoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1Ccmlk
Z2U6OmlzTGlua1Zpc2l0ZWQodmlzaXRlZExpbmtIYXNoKTsKICNlbHNlCiAgICAgaWYgKCFtX3Zp
c2l0ZWRMaW5rc1BvcHVsYXRlZCkgewogICAgICAgICBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZCA9
IHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1BsYXRm
b3JtQnJpZGdlLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hbmRyb2lkL1BsYXRmb3JtQnJp
ZGdlLmgKaW5kZXggNDI2OWVmOGU0OGRiYWEyN2ZlN2MxZjk2MjBiNDIyM2E5MzM4NjUzZS4uODFk
OWExZjczYzhkMTRjNzFlYmE4MjJkZTgzMTRiMmUwYjliYzA5OSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUGxhdGZvcm1CcmlkZ2UuaApAQCAtODYsNyArODYsNyBA
QCBjbGFzcyBXaWRnZXQ7CiAKIC8vIEFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxheWVy
LCB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8gYW5zd2VyCiAvLyBxdWVzdGlvbnMgYWJvdXQgdGhl
IHN5c3RlbSBhbmQgc28gb24uLi4KLS8vIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIENocm9taXVt
QnJpZGdlIGFuZCB0aGUgdHdvIGFyZSBsaWtlbHkgdG8gY29udmVyZ2UKKy8vIFRoaXMgaXMgdmVy
eSBzaW1pbGFyIHRvIGNocm9taXVtL1BsYXRmb3JtQnJpZGdlIGFuZCB0aGUgdHdvIGFyZSBsaWtl
bHkgdG8gY29udmVyZ2UKIC8vIGluIHRoZSBmdXR1cmUuCiAvLwogLy8gVGhlIG1ldGhvZHMgaW4g
dGhpcyBjbGFzcyBhbGwgbmVlZCB0byByZWFjaCBhY3Jvc3MgYSBKTkkgbGF5ZXIgdG8gdGhlIEph
dmEgVk0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nocm9taXVt
L0F1ZGlvQnVzQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hy
b21pdW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAKaW5kZXggYTkzNzAzZGY1NmFmOGMwM2M3YzBmMjVm
ZmI3MGE4ZDQ5NDNkZGJjOS4uOWVlZjg0ZThjZjY4YTVjY2I0NTQwMDUwZDMyYjQ5NTNiNTM3NTNk
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVk
aW9CdXNDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hy
b21pdW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlICJB
dWRpb0J1cy5oIgogCiAjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAiQ2hy
b21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgPHd0
Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEyICszOCwxMiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFBhc3NPd25QdHI8QXVkaW9CdXM+IEF1ZGlvQnVz
Ojpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0
ZSkKIC8vIHsKLS8vICAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUF1ZGlv
UmVzb3VyY2UobmFtZSwgc2FtcGxlUmF0ZSk7CisvLyAgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdl
Ojpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKG5hbWUsIHNhbXBsZVJhdGUpOwogLy8gfQogCiBQ
YXNzT3duUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29uc3Qg
dm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZG91YmxlIHNhbXBs
ZVJhdGUpCiB7Ci0gICAgT3duUHRyPEF1ZGlvQnVzPiBhdWRpb0J1cyA9IENocm9taXVtQnJpZGdl
OjpkZWNvZGVBdWRpb0ZpbGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwgZGF0
YVNpemUsIHNhbXBsZVJhdGUpOworICAgIE93blB0cjxBdWRpb0J1cz4gYXVkaW9CdXMgPSBQbGF0
Zm9ybUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFyKj4o
ZGF0YSksIGRhdGFTaXplLCBzYW1wbGVSYXRlKTsKICAgICBpZiAoYXVkaW9CdXMtPm51bWJlck9m
Q2hhbm5lbHMoKSA9PSAyICYmIG1peFRvTW9ubykgewogICAgICAgICBPd25QdHI8QXVkaW9CdXM+
IG1vbm9BdWRpb0J1cyA9IGFkb3B0UHRyKG5ldyBBdWRpb0J1cygxLCBhdWRpb0J1cy0+bGVuZ3Ro
KCkpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hy
b21pdW1CcmlkZ2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
QnJpZGdlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGYxMDRiMmM1Mzc0NGYxZTIx
OTY3MjUyYTE1NmEwYjFiNGExOGIwY2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1C
cmlkZ2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDM1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlCi0gKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24u
Ci0gKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMg
b2YgaXRzCi0gKiBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMi
IEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2hyb21pdW1C
cmlkZ2VfaAotI2RlZmluZSBDaHJvbWl1bUJyaWRnZV9oCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElP
KQotI2luY2x1ZGUgIkF1ZGlvQnVzLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0u
aCIKLSNpbmNsdWRlICJJbWFnZVNvdXJjZS5oIgotI2luY2x1ZGUgIkxpbmtIYXNoLmgiCi0jaW5j
bHVkZSAiUGFzc1JlZlB0ci5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRlLmgiCi0jaW5j
bHVkZSAiUGx1Z2luRGF0YS5oIgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1
Y3QgTlBPYmplY3QgTlBPYmplY3Q7Ci10eXBlZGVmIHN0cnVjdCBfTlBQIE5QUF90OwotdHlwZWRl
ZiBOUFBfdCogTlBQOwotCi0jaWYgT1MoREFSV0lOKQotdHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBD
R0ZvbnRSZWY7Ci10eXBlZGVmIHVpbnRwdHJfdCBBVFNGb250Q29udGFpbmVyUmVmOwotI2lmZGVm
IF9fT0JKQ19fCi1AY2xhc3MgTlNGb250OwotI2Vsc2UKLWNsYXNzIE5TRm9udDsKLSNlbmRpZgot
I2VuZGlmIC8vIE9TKERBUldJTikKLQotI2lmIE9TKFdJTkRPV1MpCi10eXBlZGVmIHN0cnVjdCBI
Rk9OVF9fKiBIRk9OVDsKLSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFz
cyBDbGlwYm9hcmREYXRhOwotICAgIGNsYXNzIENvbG9yOwotICAgIGNsYXNzIEN1cnNvcjsKLSAg
ICBjbGFzcyBEb2N1bWVudDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBHZW9sb2NhdGlv
blNlcnZpY2VCcmlkZ2U7Ci0gICAgY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Ci0g
ICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OwotICAgIGNsYXNzIEltYWdlOwotICAgIGNsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOwotICAgIGNsYXNzIElEQktleTsKLSAgICBjbGFzcyBJ
bnRSZWN0OwotICAgIGNsYXNzIEtVUkw7Ci0gICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVl
OwotICAgIGNsYXNzIFdpZGdldDsKLQotICAgIHN0cnVjdCBDb29raWU7Ci0gICAgc3RydWN0IEZv
bnRSZW5kZXJTdHlsZTsKLQotICAgIC8vIEFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxh
eWVyLCB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8gYW5zd2VyCi0gICAgLy8gcXVlc3Rpb25zIGFi
b3V0IHRoZSBzeXN0ZW0gYW5kIHNvIG9uLi4uCi0KLSAgICBjbGFzcyBDaHJvbWl1bUJyaWRnZSB7
Ci0gICAgcHVibGljOgotICAgICAgICAvLyBDYWNoZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgdm9p
ZCBjYWNoZU1ldGFkYXRhKGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHJlc3BvbnNlVGltZSwgY29u
c3QgVmVjdG9yPGNoYXI+Jik7Ci0KLSAgICAgICAgLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3Rh
dGljIGJvb2wgY2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkNs
aXBib2FyZEZvcm1hdCwgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0KLSAg
ICAgICAgc3RhdGljIFN0cmluZyBjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFk
SFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7
Ci0KLSAgICAgICAgLy8gT25seSB0aGUgY2xpcGJvYXJkUmVhZCBmdW5jdGlvbnMgdGFrZSBhIGJ1
ZmZlciBhcmd1bWVudCBiZWNhdXNlCi0gICAgICAgIC8vIENocm9taXVtIGN1cnJlbnRseSB1c2Vz
IGEgZGlmZmVyZW50IHRlY2huaXF1ZSB0byB3cml0ZSB0byBhbHRlcm5hdGUKLSAgICAgICAgLy8g
Y2xpcGJvYXJkIGJ1ZmZlcnMuCi0gICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlU2Vs
ZWN0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBib29sKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5n
Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmLCBj
b25zdCBTdHJpbmcmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVJbWFnZShO
YXRpdmVJbWFnZVB0ciwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0
aWMgdm9pZCBjbGlwYm9hcmRXcml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJp
bmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWV0YWRhdGEpOwotCi0gICAgICAgIC8vIEludGVyZmFj
ZSBmb3IgaGFuZGxpbmcgY29weSBhbmQgcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBzZWxlY3Rp
b24gY29weS4KLSAgICAgICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBjbGlwYm9hcmRSZWFkQXZh
aWxhYmxlVHlwZXMoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgYm9vbCogY29u
dGFpbnNGaWxlbmFtZXMpOwotICAgICAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRSZWFkRGF0YShQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUsIFN0
cmluZyYgZGF0YSwgU3RyaW5nJiBtZXRhZGF0YSk7Ci0gICAgICAgIHN0YXRpYyBWZWN0b3I8U3Ry
aW5nPiBjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIpOwotCi0gICAgICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIHNl
dENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1
ZSk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICAgICAgc3RhdGljIGJvb2wg
cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tp
ZT4mKTsKLSAgICAgICAgc3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgICAgICBzdGF0
aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotCi0gICAgICAgIC8vIERO
UyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpOwotCi0gICAgICAgIC8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lk
IHJldmVhbEZvbGRlckluT1MoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGZp
bGVFeGlzdHMoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZUZpbGUo
Y29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5
KGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBT
dHJpbmcmLCBsb25nIGxvbmcmIHJlc3VsdCk7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldEZpbGVN
b2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKLSAgICAgICAg
c3RhdGljIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgICAg
IHN0YXRpYyBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0
aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpOwotICAgICAgICBzdGF0aWMgYm9vbCBtYWtlQWxs
RGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBn
ZXRBYnNvbHV0ZVBhdGgoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgS1VSTCBmaWxlUGF0aFRvVVJM
KGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKLSAgICAgICAgc3RhdGljIHZv
aWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYpOwotICAgICAgICBzdGF0aWMgbG9uZyBs
b25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNl
ZWtPcmlnaW4pOwotICAgICAgICBzdGF0aWMgYm9vbCB0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxl
SGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KTsKLSAgICAgICAgc3RhdGljIGludCByZWFkRnJvbUZp
bGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICAgICAg
c3RhdGljIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpOwotCi0gICAgICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgT1MoV0lORE9X
UykKLSAgICAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChIRk9OVCBmb250KTsKLSNl
bmRpZgotI2lmIE9TKExJTlVYKSB8fCBPUyhGUkVFQlNEKQotICAgICAgICBzdGF0aWMgdm9pZCBn
ZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFyKiBmYW1pbHksIGludCBzaXplQW5kU3R5
bGUsIEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0KTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBnZXRG
b250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciosIHNpemVfdCBudW1DaGFyYWN0ZXJz
KTsKLSNlbmRpZgotI2lmIE9TKERBUldJTikKLSAgICAgICAgc3RhdGljIGJvb2wgbG9hZEZvbnQo
TlNGb250KiBzcmNGb250LCBBVFNGb250Q29udGFpbmVyUmVmKiBvdXQpOwotI2VuZGlmCi0KLSAg
ICAgICAgLy8gRm9ybXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQgbm90aWZ5Rm9ybVN0YXRl
Q2hhbmdlZChjb25zdCBEb2N1bWVudCopOwotCi0gICAgICAgIC8vIERhdGFiYXNlcyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
ICAgIC8vIFJldHVybnMgYSBoYW5kbGUgdG8gdGhlIERCIGZpbGUgYW5kIG9vcHRpb25hbGx5IGEg
aGFuZGxlIHRvIGl0cyBjb250YWluaW5nIGRpcmVjdG9yeQotICAgICAgICBzdGF0aWMgUGxhdGZv
cm1GaWxlSGFuZGxlIGRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGbGVOYW1lLCBp
bnQgZGVzaXJlZEZsYWdzKTsKLSAgICAgICAgLy8gUmV0dXJucyBhIFNRTGl0ZSBjb2RlIChTUUxJ
VEVfT0sgPSAwLCBvbiBzdWNjZXNzKQotICAgICAgICBzdGF0aWMgaW50IGRhdGFiYXNlRGVsZXRl
RmlsZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lLCBib29sIHN5bmNEaXIgPSBmYWxzZSk7Ci0g
ICAgICAgIC8vIFJldHVybnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIERCIGZpbGUKLSAgICAgICAg
c3RhdGljIGxvbmcgZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0Zp
bGVOYW1lKTsKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgREIgZmlsZQotICAg
ICAgICBzdGF0aWMgbG9uZyBsb25nIGRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2
ZnNGaWxlTmFtZSk7Ci0KLSAgICAgICAgLy8gSW5kZXhlZERCIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFBh
c3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IGlkYkZhY3RvcnkoKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgaWRiU2h1dGRvd24oKTsKLSAgICAgICAgLy8gRXh0cmFjdHMga2V5UGF0
aCBmcm9tIHZhbHVlcyBhbmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBrZXlzLgotICAgICAg
ICBzdGF0aWMgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRo
KGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2YWx1ZXMsIGNv
bnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMpOwotCi0g
ICAgICAgIC8vIEphdmFTY3JpcHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIG5vdGlmeUpTT3V0T2ZN
ZW1vcnkoRnJhbWUqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgYWxsb3dTY3JpcHREZXNwaXRlU2V0
dGluZ3MoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpOwotCi0gICAgICAgIC8vIEtleWdlbiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5n
KHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2UsIGNvbnN0IEtV
UkwmIHVybCk7Ci0KLSAgICAgICAgLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFN0cmlu
ZyBjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgpOwotCi0gICAgICAgIC8vIExheW91dFRlc3RNb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0g
ICAgICAgIHN0YXRpYyBib29sIGxheW91dFRlc3RNb2RlKCk7Ci0KLSAgICAgICAgLy8gTWVtb3J5
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgLy8gUmV0dXJucyB0aGUgY3VycmVudCBzcGFjZSBhbGxvY2F0ZWQgZm9y
IHRoZSBwYWdlZmlsZSwgaW4gTUIuCi0gICAgICAgIC8vIFRoYXQgaXMgY29tbWl0dGVkIHNpemUg
Zm9yIFdpbmRvd3MgYW5kIHZpcnR1YWwgbWVtb3J5IHNpemUgZm9yIFBPU0lYCi0gICAgICAgIHN0
YXRpYyBpbnQgbWVtb3J5VXNhZ2VNQigpOwotCi0gICAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1
dCBhbHdheXMgcmV0dXJucyBhY3R1YWwgdmFsdWUsIHdpdGhvdXQgYW55IGNhY2hlcy4KLSAgICAg
ICAgc3RhdGljIGludCBhY3R1YWxNZW1vcnlVc2FnZU1CKCk7Ci0KLSAgICAgICAgLy8gTWltZVR5
cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFT
Y3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgc3RhdGljIGJv
b2wgaXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwot
ICAgICAgICBzdGF0aWMgU3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
ZmlsZUV4dGVuc2lvbik7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShj
b25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBwcmVmZXJyZWRF
eHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLQotICAgICAgICAv
LyBQbHVnaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgYm9vbCBwbHVnaW5zKGJvb2wgcmVmcmVzaCwg
VmVjdG9yPFBsdWdpbkluZm8+Kik7Ci0gICAgICAgIHN0YXRpYyBOUE9iamVjdCogcGx1Z2luU2Ny
aXB0YWJsZU9iamVjdChXaWRnZXQqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcG9wdXBzQWxsb3dl
ZChOUFApOwotCi0gICAgICAgIC8vIFJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBQYXNzUmVm
UHRyPEltYWdlPiBsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpOwot
Ci0jaWYgRU5BQkxFKFdFQl9BVURJTykKLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8QXVkaW9C
dXM+IGxvYWRQbGF0Zm9ybUF1ZGlvUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHNh
bXBsZVJhdGUpOwotICAgICAgICBzdGF0aWMgUGFzc093blB0cjxBdWRpb0J1cz4gZGVjb2RlQXVk
aW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJh
dGUpOwotI2VuZGlmCi0KLSAgICAgICAgLy8gU2FuZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIGJv
b2wgc2FuZGJveEVuYWJsZWQoKTsKLQotICAgICAgICAvLyBTY3JlZW4gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBz
dGF0aWMgaW50IHNjcmVlbkRlcHRoKFdpZGdldCopOwotICAgICAgICBzdGF0aWMgaW50IHNjcmVl
bkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopOwotICAgICAgICBzdGF0aWMgYm9vbCBzY3JlZW5J
c01vbm9jaHJvbWUoV2lkZ2V0Kik7Ci0gICAgICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlblJlY3Qo
V2lkZ2V0Kik7Ci0gICAgICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lk
Z2V0Kik7Ci0KLSAgICAgICAgLy8gU2hhcmVkVGltZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQgc2V0
U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpOwotICAgICAgICBz
dGF0aWMgdm9pZCBzdG9wU2hhcmVkVGltZXIoKTsKLQotICAgICAgICAvLyBTdGF0c0NvdW50ZXJz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICBzdGF0aWMgdm9pZCBkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFt
ZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFy
KiBuYW1lKTsKLSAgICAgICAgc3RhdGljIHZvaWQgaGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0
IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3Vu
dCk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIq
IG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKTsKLQotICAgICAgICAvLyBTdWRk
ZW4gVGVybWluYXRpb24KLSAgICAgICAgc3RhdGljIHZvaWQgc3VkZGVuVGVybWluYXRpb25DaGFu
Z2VkKGJvb2wgZW5hYmxlZCk7Ci0KLSAgICAgICAgLy8gU3lzdGVtVGltZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3Rh
dGljIGRvdWJsZSBjdXJyZW50VGltZSgpOwotCi0gICAgICAgIC8vIFRoZW1pbmcgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYg
T1MoV0lORE9XUykKLSAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oCi0gICAgICAgICAg
ICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRl
LCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50TWVudUxpc3QoCi0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50U2Ny
b2xsYmFyQXJyb3coCi0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgc3RhdGUsIGlu
dCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFp
bnRTY3JvbGxiYXJUaHVtYigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAg
c3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJUcmFjaygKLSAgICAgICAgICAgIEdyYXBoaWNzQ29u
dGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJl
Y3QmLCBjb25zdCBJbnRSZWN0JiBhbGlnblJlY3QpOwotICAgICAgICBzdGF0aWMgdm9pZCBwYWlu
dFNwaW5CdXR0b24oCi0gICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50
IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRp
YyB2b2lkIHBhaW50VGV4dEZpZWxkKAotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50
IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0
IENvbG9yJiwgYm9vbCBmaWxsQ29udGVudEFyZWEsIGJvb2wgZHJhd0VkZ2VzKTsKLSAgICAgICAg
c3RhdGljIHZvaWQgcGFpbnRUcmFja2JhcigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCos
IGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRQcm9ncmVzc0JhcigKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0IEludFJlY3QmIHZhbHVl
UmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25kcyk7Ci0jZWxpZiBP
UyhMSU5VWCkKLSAgICAgICAgLy8gVGhlIFVJIHBhcnQgd2hpY2ggaXMgYmVpbmcgYWNjZXNzZWQu
Ci0gICAgICAgIGVudW0gVGhlbWVQYXJ0IHsKLSAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJEb3du
QXJyb3csCi0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyTGVmdEFycm93LAotICAgICAgICAgICAg
UGFydFNjcm9sbGJhclJpZ2h0QXJyb3csCi0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJv
dywKLSAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWIsCi0gICAgICAgICAg
ICBQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYiwKLSAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJI
b3Jpem9udGFsVHJhY2ssCi0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaywK
LSAgICAgICAgfTsKLQotICAgICAgICAvLyBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXNzb2Np
YXRlZCBQYXJ0LgotICAgICAgICBlbnVtIFRoZW1lUGFpbnRTdGF0ZSB7Ci0gICAgICAgICAgICBT
dGF0ZURpc2FibGVkLAotICAgICAgICAgICAgU3RhdGVIb3ZlciwKLSAgICAgICAgICAgIFN0YXRl
Tm9ybWFsLAotICAgICAgICAgICAgU3RhdGVQcmVzc2VkLAotICAgICAgICB9OwotCi0gICAgICAg
IHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHsKLSAgICAgICAgICAgIC8vIFRoZSBi
b3VuZHMgb2YgdGhlIGVudGlyZSB0cmFjaywgYXMgb3Bwb3NlZCB0byB0aGUgcGFydCBiZWluZyBw
YWludGVkLgotICAgICAgICAgICAgaW50IHRyYWNrWDsKLSAgICAgICAgICAgIGludCB0cmFja1k7
Ci0gICAgICAgICAgICBpbnQgdHJhY2tXaWR0aDsKLSAgICAgICAgICAgIGludCB0cmFja0hlaWdo
dDsKLSAgICAgICAgfTsKLQotICAgICAgICB1bmlvbiBUaGVtZVBhaW50RXh0cmFQYXJhbXMgewot
ICAgICAgICAgICAgU2Nyb2xsYmFyVHJhY2tFeHRyYVBhcmFtcyBzY3JvbGxiYXJUcmFjazsKLSAg
ICAgICAgfTsKLQotICAgICAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBw
YXJ0LiBGb3IgdmFyaWFibGUgc2l6ZWQgaXRlbXMKLSAgICAgICAgLy8gbGlrZSB2ZXJ0aWNhbCBz
Y3JvbGxiYXIgdGh1bWJzLCB0aGUgd2lkdGggd2lsbCBiZSB0aGUgcmVxdWlyZWQgd2lkdGggb2YK
LSAgICAgICAgLy8gdGhlIHRyYWNrIHdoaWxlIHRoZSBoZWlnaHQgd2lsbCBiZSB0aGUgbWluaW11
bSBoZWlnaHQuCi0gICAgICAgIHN0YXRpYyBJbnRTaXplIGdldFRoZW1lUGFydFNpemUoVGhlbWVQ
YXJ0KTsKLSAgICAgICAgLy8gUGFpbnQgdGhlIGdpdmVuIHRoZSBnaXZlbiB0aGVtZSBwYXJ0Lgot
ICAgICAgICBzdGF0aWMgdm9pZCBwYWludFRoZW1lUGFydChHcmFwaGljc0NvbnRleHQqLCBUaGVt
ZVBhcnQsIFRoZW1lUGFpbnRTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFRoZW1lUGFpbnRF
eHRyYVBhcmFtcyopOwotI2VsaWYgT1MoREFSV0lOKQotICAgICAgICBlbnVtIFRoZW1lUGFpbnRT
dGF0ZSB7Ci0gICAgICAgICAgICBTdGF0ZURpc2FibGVkLAotICAgICAgICAgICAgU3RhdGVJbmFj
dGl2ZSwKLSAgICAgICAgICAgIFN0YXRlQWN0aXZlLAotICAgICAgICAgICAgU3RhdGVQcmVzc2Vk
LAotICAgICAgICB9OwotCi0gICAgICAgIGVudW0gVGhlbWVQYWludFNpemUgewotICAgICAgICAg
ICAgU2l6ZVJlZ3VsYXIsCi0gICAgICAgICAgICBTaXplU21hbGwsCi0gICAgICAgIH07Ci0KLSAg
ICAgICAgZW51bSBUaGVtZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24gewotICAgICAgICAgICAg
U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsLAotICAgICAgICAgICAgU2Nyb2xsYmFyT3Jp
ZW50YXRpb25WZXJ0aWNhbCwKLSAgICAgICAgfTsKLQotICAgICAgICBlbnVtIFRoZW1lUGFpbnRT
Y3JvbGxiYXJQYXJlbnQgewotICAgICAgICAgICAgU2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldywK
LSAgICAgICAgICAgIFNjcm9sbGJhclBhcmVudFJlbmRlckxheWVyLAotICAgICAgICB9OwotCi0g
ICAgICAgIHN0cnVjdCBUaGVtZVBhaW50U2Nyb2xsYmFySW5mbyB7Ci0gICAgICAgICAgICBUaGVt
ZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgICAgICAgICBUaGVt
ZVBhaW50U2Nyb2xsYmFyUGFyZW50IHBhcmVudDsKLSAgICAgICAgICAgIGludCBtYXhWYWx1ZTsK
LSAgICAgICAgICAgIGludCBjdXJyZW50VmFsdWU7Ci0gICAgICAgICAgICBpbnQgdmlzaWJsZVNp
emU7Ci0gICAgICAgICAgICBpbnQgdG90YWxTaXplOwotICAgICAgICB9OwotCi0gICAgICAgIHN0
YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyVGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgVGhlbWVQYWlu
dFN0YXRlLCBUaGVtZVBhaW50U2l6ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFRoZW1lUGFpbnRT
Y3JvbGxiYXJJbmZvJik7Ci0jZW5kaWYKLQotICAgICAgICAvLyBUcmFjZSBFdmVudCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAg
ICBzdGF0aWMgdm9pZCB0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQs
IGNvbnN0IGNoYXIqIGV4dHJhKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEVuZChj
b25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOwotCi0gICAgICAg
IC8vIFZpc2l0ZWQgbGlua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2go
Y29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIExpbmtI
YXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcm
IGF0dHJpYnV0ZVVSTCk7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTGlua1Zpc2l0ZWQoTGlua0hh
c2gpOwotICAgIH07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RM
ZWdhY3kuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRh
T2JqZWN0TGVnYWN5LmNwcAppbmRleCBhMjk1MmMwMWIzYTRjYzc5MDAzMmNkNGI2OTMyNTViODAx
OWZkM2Q1Li44MmU0N2UyZTcwZDllNDYxZWI1ODIxNzkzYzk4ZTcxN2U1YTFjMWEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RM
ZWdhY3kuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdExlZ2FjeS5jcHAKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuaCIKIAotI2luY2x1ZGUgIkNo
cm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIApAQCAtMTMyLDcgKzEzMiw3IEBAIFN0cmluZyBDaHJvbWl1bURhdGFPYmpl
Y3RMZWdhY3k6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBib29sJiBzdWNjZXNzKQogICAg
ICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9u
TW9kZSgpID8KICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVm
ZmVyIDoKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7
Ci0gICAgICAgICAgICBTdHJpbmcgdGV4dCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFk
UGxhaW5UZXh0KGJ1ZmZlcik7CisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IFBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7CiAgICAgICAgICAgICBzdWNjZXNz
ID0gIXRleHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIHRleHQ7CiAgICAgICAgIH0K
QEAgLTE1OCw3ICsxNTgsNyBAQCBTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpnZXRE
YXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgYm9vbCYgc3VjY2VzcykKICAgICAgICAgICAgICAgICBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAgICBTdHJpbmcgaHRt
bFRleHQ7CiAgICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIENocm9taXVt
QnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7
CisgICAgICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAm
aHRtbFRleHQsICZzb3VyY2VVUkwpOwogICAgICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5p
c0VtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gaHRtbFRleHQ7CiAgICAgICAgIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5j
cHAKaW5kZXggOGMyMGEwMGMwOWY5NWU4OTQyYzAzYWQyZTM4ZTAzZGMyNmYwNjMxYS4uOTMxMjUw
NTYxZWNmZDY4ZGQ1MTczNjRkYTFhMWVhNTI5YTUxMDlhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRHJhZ0RhdGFDaHJvbWl1bS5jcHAKQEAgLTMwLDE2
ICszMCwxNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCiAK
LSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9iamVj
dC5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKICNpbmNsdWRlICJGaWxlU3lzdGVtLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIK
ICNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCiAjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtU3RyaW5nLmgiCisjaW5jbHVkZSAibWFya3VwLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IApAQCAtNjMsNyArNjMsNyBAQCBTdHJpbmcgRHJhZ0RhdGE6OmFzVVJMKEZyYW1lKiwgRmlsZW5h
bWVDb252ZXJzaW9uUG9saWN5IGZpbGVuYW1lUG9saWN5LCBTdHJpbmcqCiAgICAgICAgIGlmICh0
aXRsZSkKICAgICAgICAgICAgICp0aXRsZSA9IG1fcGxhdGZvcm1EcmFnRGF0YS0+dXJsVGl0bGUo
KTsKICAgICB9IGVsc2UgaWYgKGZpbGVuYW1lUG9saWN5ID09IENvbnZlcnRGaWxlbmFtZXMgJiYg
Y29udGFpbnNGaWxlcygpKSB7Ci0gICAgICAgIHVybCA9IENocm9taXVtQnJpZGdlOjpmaWxlUGF0
aFRvVVJMKENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgobV9wbGF0Zm9ybURyYWdEYXRh
LT5maWxlbmFtZXMoKVswXSkpOworICAgICAgICB1cmwgPSBQbGF0Zm9ybUJyaWRnZTo6ZmlsZVBh
dGhUb1VSTChQbGF0Zm9ybUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKG1fcGxhdGZvcm1EcmFnRGF0
YS0+ZmlsZW5hbWVzKClbMF0pKTsKICAgICB9CiAgICAgcmV0dXJuIHVybDsKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCmluZGV4IGQ4YTFlM2YxMDYzMGY2ODM0ZGIwZTI2YTEyMGU0OWE5ZWQyZjMxOTQuLmZhZjVl
OTJhN2ZkMWY0ZGVmYjI4ODM2MTJmZWY0Y2FmMDA4MDhiYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcApAQCAt
MzEsODUgKzMxLDg1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmlsZVN5c3Rl
bS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1T
dHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIGRlbGV0ZUZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRmlsZShw
YXRoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUZpbGUocGF0aCk7CiB9CiAK
IGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJl
dHVybiBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7CisgICAgcmV0
dXJuIFBsYXRmb3JtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKIH0KIAogYm9v
bCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0KQogewot
ICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0KTsKKyAg
ICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmdldEZpbGVTaXplKHBhdGgsIHJlc3VsdCk7CiB9CiAK
IGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3Qm
IHJlc3VsdCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVNb2RpZmljYXRp
b25UaW1lKHBhdGgsIHJlc3VsdCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxl
TW9kaWZpY2F0aW9uVGltZShwYXRoLCByZXN1bHQpOwogfQogCiB2b2lkIHJldmVhbEZvbGRlcklu
T1MoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIENocm9taXVtQnJpZGdlOjpyZXZlYWxGb2xk
ZXJJbk9TKHBhdGgpOworICAgIFBsYXRmb3JtQnJpZGdlOjpyZXZlYWxGb2xkZXJJbk9TKHBhdGgp
OwogfQogCiBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7Ci0gICAg
cmV0dXJuIENocm9taXVtQnJpZGdlOjpkaXJlY3RvcnlOYW1lKHBhdGgpOworICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6ZGlyZWN0b3J5TmFtZShwYXRoKTsKIH0KIAogU3RyaW5nIHBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9u
ZW50KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9u
ZW50KHBhdGgsIGNvbXBvbmVudCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpwYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocGF0aCwgY29tcG9uZW50KTsKIH0KIAogYm9vbCBtYWtlQWxsRGly
ZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRn
ZTo6bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6
bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOwogfQogCiBib29sIGZpbGVFeGlzdHMoY29uc3QgU3Ry
aW5nJiBwYXRoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZmlsZUV4aXN0cyhwYXRo
KTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmZpbGVFeGlzdHMocGF0aCk7CiB9CiAKIFBs
YXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9k
ZSBtb2RlKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6b3BlbkZpbGUocGF0aCwgbW9k
ZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpvcGVuRmlsZShwYXRoLCBtb2RlKTsKIH0K
IAogdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7Ci0gICAgcmV0
dXJuIENocm9taXVtQnJpZGdlOjpjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1cm4gUGxhdGZv
cm1CcmlkZ2U6OmNsb3NlRmlsZShoYW5kbGUpOwogfQogCiBsb25nIGxvbmcgc2Vla0ZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4g
b3JpZ2luKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6c2Vla0ZpbGUoaGFuZGxlLCBv
ZmZzZXQsIG9yaWdpbik7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzZWVrRmlsZShoYW5k
bGUsIG9mZnNldCwgb3JpZ2luKTsKIH0KIAogYm9vbCB0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxl
SGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1C
cmlkZ2U6OnRydW5jYXRlRmlsZShoYW5kbGUsIG9mZnNldCk7CisgICAgcmV0dXJuIFBsYXRmb3Jt
QnJpZGdlOjp0cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQpOwogfQogCiBpbnQgcmVhZEZyb21G
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7
Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpyZWFkRnJvbUZpbGUoaGFuZGxlLCBkYXRhLCBs
ZW5ndGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6cmVhZEZyb21GaWxlKGhhbmRsZSwg
ZGF0YSwgbGVuZ3RoKTsKIH0KIAogaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBo
YW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIENocm9t
aXVtQnJpZGdlOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CisgICAgcmV0dXJu
IFBsYXRmb3JtQnJpZGdlOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0xhbmd1YWdlQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vTGFuZ3VhZ2VDaHJvbWl1bS5jcHAKaW5kZXggNjlmZTM3MmRlZGMzNWIxZDI4
N2IxYjRiZjc1MTYwOWE5MjVjZTdjNC4uZmVkYzRkNTZlMDk2YWUxZWY5YjY4MTdlYjEzOTI1Njg2
YWEzZDIxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTGFu
Z3VhZ2VDaHJvbWl1bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
TGFuZ3VhZ2VDaHJvbWl1bS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJMYW5ndWFnZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTQwLDcgKzQwLDcgQEAgU3RyaW5nIHBsYXRmb3Jt
RGVmYXVsdExhbmd1YWdlKCkKIHsKICAgICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVkRGVmYXVsdExh
bmd1YWdlOwogICAgIGlmIChjb21wdXRlZERlZmF1bHRMYW5ndWFnZS5pc0VtcHR5KCkpCi0gICAg
ICAgIGNvbXB1dGVkRGVmYXVsdExhbmd1YWdlID0gQ2hyb21pdW1CcmlkZ2U6OmNvbXB1dGVkRGVm
YXVsdExhbmd1YWdlKCk7CisgICAgICAgIGNvbXB1dGVkRGVmYXVsdExhbmd1YWdlID0gUGxhdGZv
cm1CcmlkZ2U6OmNvbXB1dGVkRGVmYXVsdExhbmd1YWdlKCk7CiAgICAgcmV0dXJuIGNvbXB1dGVk
RGVmYXVsdExhbmd1YWdlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCmluZGV4IDljYjkzZWE5MzRmN2Y3Mjc5MmJm
MzkzZjY5NWU1YzZhYzYyMTUzY2EuLjVlMWZmYTQ5ZWUyYjQ5YWVjMzM2MzdkMDA2NjgwMDdjZmFi
NzI0ZWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtI
YXNoQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xp
bmtIYXNoQ2hyb21pdW0uY3BwCkBAIC0zMSwxOCArMzEsMTggQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIExp
bmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgp
CiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2godXJsLCBsZW5n
dGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKHVybCwgbGVu
Z3RoKTsKIH0KIAogTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNv
bnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewotICAgIHJldHVybiBDaHJvbWl1bUJy
aWRnZTo6dmlzaXRlZExpbmtIYXNoKGJhc2UsIGF0dHJpYnV0ZVVSTCk7CisgICAgcmV0dXJuIFBs
YXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goYmFzZSwgYXR0cmlidXRlVVJMKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAKaW5kZXggOWRm
ODg0N2VhYmZhNzAyNGQyZjc0N2IxYTdmNjg1ZDRjMmUwMTlkZi4uZmVjMGU5YmUxOTg2MDVmYTE2
NmJmNzVhNjIwNGFkNWMyODA3MTM2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwCkBAIC0z
MSwyMCArMzEsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIk1lZGlh
UGxheWVyLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbHVnaW5E
YXRhQ2hyb21pdW0uaCIKICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CiAKIC8vIE5PVEU6
IFVubGlrZSBvdGhlciBwb3J0cywgd2UgZG9uJ3QgdXNlIHRoZSBzaGFyZWQgaW1wbGVtZW50YXRp
b24gYml0cyBpbgogLy8gTUlNRVR5cGVSZWdpc3RyeS5jcHAuICBJbnN0ZWFkLCB3ZSBuZWVkIHRv
IHJvdXRlIG1vc3QgZnVuY3Rpb25zIHZpYSB0aGUKLS8vIENocm9taXVtQnJpZGdlIHRvIHRoZSBl
bWJlZGRlci4KKy8vIFBsYXRmb3JtQnJpZGdlIHRvIHRoZSBlbWJlZGRlci4KIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRl
bnNpb24oY29uc3QgU3RyaW5nICZleHQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpt
aW1lVHlwZUZvckV4dGVuc2lvbihleHQpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6bWlt
ZVR5cGVGb3JFeHRlbnNpb24oZXh0KTsKIH0KIAogLy8gUmV0dXJucyB0aGUgZmlsZSBleHRlbnNp
b24gaWYgb25lIGlzIGZvdW5kLiAgRG9lcyBub3QgaW5jbHVkZSB0aGUgZG90IGluIHRoZQpAQCAt
NTUsNyArNTUsNyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0UHJlZmVycmVkRXh0ZW5z
aW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIC8vIEZJWE1FOiBJcyB0aGlz
IHJlYWxseSBuZWNlc3Nhcnk/PwogICAgIFN0cmluZyBtaW1lVHlwZSA9IHR5cGUuc3Vic3RyaW5n
KDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlLmZpbmQoJzsnKSkpOwogCi0gICAgU3RyaW5n
IGV4dCA9IENocm9taXVtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSh0eXBl
KTsKKyAgICBTdHJpbmcgZXh0ID0gUGxhdGZvcm1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lvbkZv
ck1JTUVUeXBlKHR5cGUpOwogICAgIGlmICghZXh0LmlzRW1wdHkoKSAmJiBleHRbMF0gPT0gJy4n
KQogICAgICAgICBleHQgPSBleHQuc3Vic3RyaW5nKDEpOwogCkBAIC04MSw3ICs4MSw3IEBAIFN0
cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoY29uc3QgU3RyaW5nJiBw
YXRoKQogCiBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQogeyAKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6Omlz
U3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJp
ZGdlOjppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUobWltZVR5cGUpOwogfQogCiBib29sIE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VSZXNvdXJjZU1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpCkBAIC05NiwxMiArOTYsMTIgQEAgYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojpp
c1N1cHBvcnRlZEltYWdlTUlNRVR5cGVGb3JFbmNvZGluZyhjb25zdCBTdHJpbmcmIG1pbWVUeXAK
IAogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6aXNT
dXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUobWltZVR5cGUpOworICAgIHJldHVybiBQbGF0Zm9y
bUJyaWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUobWltZVR5cGUpOwogfQogICAg
IAogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmlzU3Vw
cG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJp
ZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpOwogfQogCiBib29sIE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFz
dGVib2FyZENocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bh
c3RlYm9hcmRDaHJvbWl1bS5jcHAKaW5kZXggOTA3YTRiOTMxNTc1YzIwM2ViMjg0OTFjNTYzMTU5
YTE2MmM4YTQ2NS4uNmJlYjAxN2E1NmJhYWUwOTYyZWI2ZTgwYWM4Yzc1ZTk4ZGIzMTAyZiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9t
aXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJk
Q2hyb21pdW0uY3BwCkBAIC0zMSwyMCArMzEsMjAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnRG
cmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRGcmFn
bWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1
ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRl
ICJJbWFnZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNs
dWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRlICJtYXJr
dXAuaCIKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAgLTkxLDcg
KzkxLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogc2VsZWN0ZWRS
YW5nZSwgYm9vbCBjYW5TbWFydENvcHlPckRlbGV0ZSwKICNlbmRpZgogICAgIHJlcGxhY2VOQlNQ
V2l0aFNwYWNlKHBsYWluVGV4dCk7CiAKLSAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3Jp
dGVTZWxlY3Rpb24oaHRtbCwgdXJsLCBwbGFpblRleHQsIGNhblNtYXJ0Q29weU9yRGVsZXRlKTsK
KyAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oaHRtbCwgdXJsLCBw
bGFpblRleHQsIGNhblNtYXJ0Q29weU9yRGVsZXRlKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3
cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQpCkBAIC05OSw5ICs5OSw5IEBAIHZvaWQg
UGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQogI2lmIE9TKFdJ
TkRPV1MpCiAgICAgU3RyaW5nIHBsYWluVGV4dCh0ZXh0KTsKICAgICByZXBsYWNlTmV3bGluZXNX
aXRoV2luZG93c1N0eWxlTmV3bGluZXMocGxhaW5UZXh0KTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKICNlbHNlCi0gICAgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KHRleHQpOworICAgIFBsYXRmb3JtQnJpZGdl
OjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dCh0ZXh0KTsKICNlbmRpZgogfQogCkBAIC0xMTYsNyAr
MTE2LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0
IFN0cmluZyYgdGl0bGVTdHIsIEZyYW1lKiBmcmFtZSkKICAgICAgICAgICAgIHRpdGxlID0gdXJs
Lmhvc3QoKTsKICAgICB9CiAKLSAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVVUkwo
dXJsLCB0aXRsZSk7CisgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlVVJMKHVybCwg
dGl0bGUpOwogfQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0bGUpCkBAIC0xNTAsMTcgKzE1MCwxNyBAQCB2b2lk
IFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNvbnN0IFN0
cmluZyYgdGl0bGUpCiAgICAgfQogICAgIEtVUkwgdXJsID0gdXJsU3RyaW5nLmlzRW1wdHkoKSA/
IEtVUkwoKSA6IG5vZGUtPmRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGluZ0FuZFRy
YWlsaW5nSFRNTFNwYWNlcyh1cmxTdHJpbmcpKTsKIAotICAgIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZUltYWdlKGJpdG1hcCwgdXJsLCB0aXRsZSk7CisgICAgUGxhdGZvcm1CcmlkZ2U6
OmNsaXBib2FyZFdyaXRlSW1hZ2UoYml0bWFwLCB1cmwsIHRpdGxlKTsKIH0KIAogYm9vbCBQYXN0
ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OldlYlNtYXJ0UGFz
dGVGb3JtYXQsIG1fc2VsZWN0aW9uTW9kZSA/IFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25C
dWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIpOworICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZh
dGU6OldlYlNtYXJ0UGFzdGVGb3JtYXQsIG1fc2VsZWN0aW9uTW9kZSA/IFBhc3RlYm9hcmRQcml2
YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIp
OwogfQogCiBTdHJpbmcgUGFzdGVib2FyZDo6cGxhaW5UZXh0KEZyYW1lKiBmcmFtZSkKIHsKLSAg
ICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQobV9zZWxlY3Rp
b25Nb2RlID8gUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZlciA6IFBhc3RlYm9hcmRQ
cml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjbGlw
Ym9hcmRSZWFkUGxhaW5UZXh0KG1fc2VsZWN0aW9uTW9kZSA/IFBhc3RlYm9hcmRQcml2YXRlOjpT
ZWxlY3Rpb25CdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXIpOwogfQog
CiBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21l
bnQoRnJhbWUqIGZyYW1lLCBQYXNzUmVmUHRyPFJhbmdlPiBjb250ZXh0LCBib29sIGFsbG93UGxh
aW5UZXh0LCBib29sJiBjaG9zZVBsYWluVGV4dCkKQEAgLTE2OCwxMCArMTY4LDEwIEBAIFBhc3NS
ZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFt
ZSogZnJhbWUsIFBhc3NSZWZQCiAgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKICAgICBQYXN0
ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9IG1fc2VsZWN0aW9uTW9kZSA/
IFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6
U3RhbmRhcmRCdWZmZXI7CiAKLSAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZElzRm9y
bWF0QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpIVE1MRm9ybWF0LCBidWZmZXIpKSB7Cisg
ICAgaWYgKFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJv
YXJkUHJpdmF0ZTo6SFRNTEZvcm1hdCwgYnVmZmVyKSkgewogICAgICAgICBTdHJpbmcgbWFya3Vw
OwogICAgICAgICBLVVJMIHNyY1VSTDsKLSAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2Fy
ZFJlYWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VSTCk7CisgICAgICAgIFBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwpOwogCiAgICAg
ICAgIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9CiAgICAgICAgICAgICBjcmVh
dGVGcmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cCwgc3JjVVJMLCBG
cmFnbWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIFBhc3NSZWZQ
dHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChGcmFtZSog
ZnJhbWUsIFBhc3NSZWZQCiAgICAgfQogCiAgICAgaWYgKGFsbG93UGxhaW5UZXh0KSB7Ci0gICAg
ICAgIFN0cmluZyBtYXJrdXAgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4
dChidWZmZXIpOworICAgICAgICBTdHJpbmcgbWFya3VwID0gUGxhdGZvcm1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKICAgICAgICAgaWYgKCFtYXJrdXAuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtQnJpZGdlLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybUJyaWRnZS5oCmluZGV4IGVjYjdiNDVh
NzIxMWRkZTUxYjU0MmI3MTc2OTZmZTgzMmQ2MmQ5MGQuLjM2NjJkMTViNTQ0OTVjNDgwOTMyZTk2
Mzc0ZTc2MDFlZDZhY2U1MTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL1BsYXRmb3JtQnJpZGdlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1CcmlkZ2UuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQg
KGMpIDIwMTAgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
YykgMjAxMCwgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucyBhcmUKQEAgLTMxLDE3ICszMSwzMjMgQEAKICNpZm5kZWYgUGxhdGZv
cm1CcmlkZ2VfaAogI2RlZmluZSBQbGF0Zm9ybUJyaWRnZV9oCiAKLSNpbmNsdWRlICJDaHJvbWl1
bUJyaWRnZS5oIgorI2lmIEVOQUJMRShXRUJfQVVESU8pCisjaW5jbHVkZSAiQXVkaW9CdXMuaCIK
KyNlbmRpZgorCisjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgorI2luY2x1ZGUgIkltYWdlU291cmNl
LmgiCisjaW5jbHVkZSAiTGlua0hhc2guaCIKKyNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCisjaW5j
bHVkZSAiUGFzdGVib2FyZFByaXZhdGUuaCIKKyNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCisKKyNp
bmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCit0eXBlZGVmIHN0cnVjdCBOUE9iamVjdCBOUE9iamVjdDsKK3R5
cGVkZWYgc3RydWN0IF9OUFAgTlBQX3Q7Cit0eXBlZGVmIE5QUF90KiBOUFA7CisKKyNpZiBPUyhE
QVJXSU4pCit0eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIENHRm9udFJlZjsKK3R5cGVkZWYgdWludHB0
cl90IEFUU0ZvbnRDb250YWluZXJSZWY7CisjaWZkZWYgX19PQkpDX18KK0BjbGFzcyBOU0ZvbnQ7
CisjZWxzZQorY2xhc3MgTlNGb250OworI2VuZGlmCisjZW5kaWYgLy8gT1MoREFSV0lOKQorCisj
aWYgT1MoV0lORE9XUykKK3R5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOworI2VuZGlmCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotLy8gRklYTUU6IEEgYmV0dGVyIG5hbWUgZm9yIENocm9t
aXVtQnJpZGdlIGlzIFBsYXRmb3JtQnJpZGdlLiBBbmRyb2lkIGFscmVhZHkKLS8vIHVzZXMgUGxh
dGZvcm1CcmlkZ2Ugc28gdGhlIGNvZGUgdGhhdCBpcyBzaGFyZWQgYW1vbmcgdGhlIEFuZHJvaWQg
YW5kIENocm9taXVtCi0vLyBwb3J0cyBpcyBncmFkdWFsbHkgbW92aW5nIHRvd2FyZHMgdXNpbmcg
UGxhdGZvcm1CcmlkZ2UuIE9uY2UgdGhlIEFuZHJvaWQKLS8vIHVuZm9ya2luZyBpcyBkb25lLCB3
ZSB3aWxsIGNoYW5nZSB0aGUgbmFtZSBvZiBDaHJvbWl1bUJyaWRnZSB0byBQbGF0Zm9ybUJyaWRn
ZQotLy8gYW5kIG1lcmdlIHRoZSB0d28gY2xhc3NlcyBpbnRvIG9uZSB0aGF0IHdpbGwgYmUgc2hh
cmVkIGJ5IGJvdGggcG9ydHMuCi10eXBlZGVmIENocm9taXVtQnJpZGdlIFBsYXRmb3JtQnJpZGdl
OworICAgIGNsYXNzIENsaXBib2FyZERhdGE7CisgICAgY2xhc3MgQ29sb3I7CisgICAgY2xhc3Mg
Q3Vyc29yOworICAgIGNsYXNzIERvY3VtZW50OworICAgIGNsYXNzIEZyYW1lOworICAgIGNsYXNz
IEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKKyAgICBjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VD
aHJvbWl1bTsKKyAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CisgICAgY2xhc3MgSW1hZ2U7Cisg
ICAgY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7CisgICAgY2xhc3MgSURCS2V5Owor
ICAgIGNsYXNzIEludFJlY3Q7CisgICAgY2xhc3MgS1VSTDsKKyAgICBjbGFzcyBTZXJpYWxpemVk
U2NyaXB0VmFsdWU7CisgICAgY2xhc3MgV2lkZ2V0OworCisgICAgc3RydWN0IENvb2tpZTsKKyAg
ICBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOworCisgICAgLy8gQW4gaW50ZXJmYWNlIHRvIHRoZSBl
bWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUgYWJpbGl0eSB0byBhbnN3ZXIKKyAgICAvLyBx
dWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQgc28gb24uLi4KKworICAgIGNsYXNzIFBsYXRm
b3JtQnJpZGdlIHsKKyAgICBwdWJsaWM6CisgICAgICAgIC8vIENhY2hlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAg
IHN0YXRpYyB2b2lkIGNhY2hlTWV0YWRhdGEoY29uc3QgS1VSTCYgdXJsLCBkb3VibGUgcmVzcG9u
c2VUaW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsKKworICAgICAgICAvLyBDbGlwYm9hcmQgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgICAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVm
ZmVyKTsKKworICAgICAgICBzdGF0aWMgU3RyaW5nIGNsaXBib2FyZFJlYWRQbGFpblRleHQoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7CisgICAgICAgIHN0YXRpYyB2b2lkIGNs
aXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIFN0cmlu
ZyosIEtVUkwqKTsKKworICAgICAgICAvLyBPbmx5IHRoZSBjbGlwYm9hcmRSZWFkIGZ1bmN0aW9u
cyB0YWtlIGEgYnVmZmVyIGFyZ3VtZW50IGJlY2F1c2UKKyAgICAgICAgLy8gQ2hyb21pdW0gY3Vy
cmVudGx5IHVzZXMgYSBkaWZmZXJlbnQgdGVjaG5pcXVlIHRvIHdyaXRlIHRvIGFsdGVybmF0ZQor
ICAgICAgICAvLyBjbGlwYm9hcmQgYnVmZmVycy4KKyAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJv
YXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmlu
ZyYsIGJvb2wpOworICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRXcml0ZVBsYWluVGV4dChj
b25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVVUkwoY29u
c3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOworICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRX
cml0ZUltYWdlKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7Cisg
ICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBtZXRhZGF0YSk7CisKKyAgICAgICAg
Ly8gSW50ZXJmYWNlIGZvciBoYW5kbGluZyBjb3B5IGFuZCBwYXN0ZSwgZHJhZyBhbmQgZHJvcCwg
YW5kIHNlbGVjdGlvbiBjb3B5LgorICAgICAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IGNsaXBi
b2FyZFJlYWRBdmFpbGFibGVUeXBlcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
LCBib29sKiBjb250YWluc0ZpbGVuYW1lcyk7CisgICAgICAgIHN0YXRpYyBib29sIGNsaXBib2Fy
ZFJlYWREYXRhKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIsIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgU3RyaW5nJiBkYXRhLCBTdHJpbmcmIG1ldGFkYXRhKTsKKyAgICAgICAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IGNsaXBib2FyZFJlYWRGaWxlbmFtZXMoUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlcik7CisKKyAgICAgICAgLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgc3Rh
dGljIHZvaWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmLCBjb25zdCBT
dHJpbmcmIHZhbHVlKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3Vt
ZW50KiwgY29uc3QgS1VSTCYpOworICAgICAgICBzdGF0aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOworICAgICAgICBz
dGF0aWMgYm9vbCByYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBW
ZWN0b3I8Q29va2llPiYpOworICAgICAgICBzdGF0aWMgdm9pZCBkZWxldGVDb29raWUoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSk7Cisg
ICAgICAgIHN0YXRpYyBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50Kik7CisKKyAg
ICAgICAgLy8gRE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgc3RhdGljIHZvaWQgcHJlZmV0Y2hETlMoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSk7CisKKyAgICAgICAgLy8gRmlsZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAg
c3RhdGljIHZvaWQgcmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3Rh
dGljIGJvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGljIGJvb2wg
ZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGljIGJvb2wgZGVsZXRlRW1w
dHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBib29sIGdldEZpbGVT
aXplKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmVzdWx0KTsKKyAgICAgICAgc3RhdGljIGJv
b2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiwgdGltZV90JiByZXN1bHQp
OworICAgICAgICBzdGF0aWMgU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRo
KTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCk7CisgICAgICAgIHN0YXRpYyBi
b29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpOworICAgICAgICBzdGF0
aWMgU3RyaW5nIGdldEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGlj
IGJvb2wgaXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBLVVJMIGZp
bGVQYXRoVG9VUkwoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBQbGF0Zm9ybUZpbGVI
YW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUpOworICAgICAg
ICBzdGF0aWMgdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJik7CisgICAgICAgIHN0
YXRpYyBsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zm
c2V0LCBGaWxlU2Vla09yaWdpbik7CisgICAgICAgIHN0YXRpYyBib29sIHRydW5jYXRlRmlsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQpOworICAgICAgICBzdGF0aWMgaW50
IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
OworICAgICAgICBzdGF0aWMgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisKKyAgICAgICAgLy8gRm9udCAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNp
ZiBPUyhXSU5ET1dTKQorICAgICAgICBzdGF0aWMgYm9vbCBlbnN1cmVGb250TG9hZGVkKEhGT05U
IGZvbnQpOworI2VuZGlmCisjaWYgT1MoTElOVVgpIHx8IE9TKEZSRUVCU0QpCisgICAgICAgIHN0
YXRpYyB2b2lkIGdldFJlbmRlclN0eWxlRm9yU3RyaWtlKGNvbnN0IGNoYXIqIGZhbWlseSwgaW50
IHNpemVBbmRTdHlsZSwgRm9udFJlbmRlclN0eWxlKiByZXN1bHQpOworICAgICAgICBzdGF0aWMg
U3RyaW5nIGdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiwgc2l6ZV90IG51
bUNoYXJhY3RlcnMpOworI2VuZGlmCisjaWYgT1MoREFSV0lOKQorICAgICAgICBzdGF0aWMgYm9v
bCBsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWluZXJSZWYqIG91dCk7Cisj
ZW5kaWYKKworICAgICAgICAvLyBGb3JtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBzdGF0aWMgdm9pZCBub3Rp
ZnlGb3JtU3RhdGVDaGFuZ2VkKGNvbnN0IERvY3VtZW50Kik7CisKKyAgICAgICAgLy8gRGF0YWJh
c2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgLy8gUmV0dXJucyBhIGhhbmRsZSB0byB0aGUgREIgZmlsZSBhbmQgb29w
dGlvbmFsbHkgYSBoYW5kbGUgdG8gaXRzIGNvbnRhaW5pbmcgZGlyZWN0b3J5CisgICAgICAgIHN0
YXRpYyBQbGF0Zm9ybUZpbGVIYW5kbGUgZGF0YWJhc2VPcGVuRmlsZShjb25zdCBTdHJpbmcmIHZm
c0ZsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpOworICAgICAgICAvLyBSZXR1cm5zIGEgU1FMaXRl
IGNvZGUgKFNRTElURV9PSyA9IDAsIG9uIHN1Y2Nlc3MpCisgICAgICAgIHN0YXRpYyBpbnQgZGF0
YWJhc2VEZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpciA9
IGZhbHNlKTsKKyAgICAgICAgLy8gUmV0dXJucyB0aGUgYXR0cmlidXRlcyBvZiB0aGUgREIgZmls
ZQorICAgICAgICBzdGF0aWMgbG9uZyBkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0
cmluZyYgdmZzRmlsZU5hbWUpOworICAgICAgICAvLyBSZXR1cm5zIHRoZSBzaXplIG9mIHRoZSBE
QiBmaWxlCisgICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25z
dCBTdHJpbmcmIHZmc0ZpbGVOYW1lKTsKKworICAgICAgICAvLyBJbmRleGVkREIgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gaWRiRmFjdG9y
eSgpOworICAgICAgICBzdGF0aWMgdm9pZCBpZGJTaHV0ZG93bigpOworICAgICAgICAvLyBFeHRy
YWN0cyBrZXlQYXRoIGZyb20gdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGtl
eXMuCisgICAgICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVl
c0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4m
IHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYg
a2V5cyk7CisKKyAgICAgICAgLy8gSmF2YVNjcmlwdCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgc3RhdGljIHZvaWQgbm90
aWZ5SlNPdXRPZk1lbW9yeShGcmFtZSopOworICAgICAgICBzdGF0aWMgYm9vbCBhbGxvd1Njcmlw
dERlc3BpdGVTZXR0aW5ncyhjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7CisKKyAgICAgICAgLy8g
S2V5Z2VuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgICAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5n
ZSwgY29uc3QgS1VSTCYgdXJsKTsKKworICAgICAgICAvLyBMYW5ndWFnZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBz
dGF0aWMgU3RyaW5nIGNvbXB1dGVkRGVmYXVsdExhbmd1YWdlKCk7CisKKyAgICAgICAgLy8gTGF5
b3V0VGVzdE1vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKyAgICAgICAgc3RhdGljIGJvb2wgbGF5b3V0VGVzdE1vZGUoKTsKKworICAgICAg
ICAvLyBNZW1vcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAvLyBSZXR1cm5zIHRoZSBjdXJyZW50IHNwYWNlIGFs
bG9jYXRlZCBmb3IgdGhlIHBhZ2VmaWxlLCBpbiBNQi4KKyAgICAgICAgLy8gVGhhdCBpcyBjb21t
aXR0ZWQgc2l6ZSBmb3IgV2luZG93cyBhbmQgdmlydHVhbCBtZW1vcnkgc2l6ZSBmb3IgUE9TSVgK
KyAgICAgICAgc3RhdGljIGludCBtZW1vcnlVc2FnZU1CKCk7CisKKyAgICAgICAgLy8gU2FtZSBh
cyBhYm92ZSwgYnV0IGFsd2F5cyByZXR1cm5zIGFjdHVhbCB2YWx1ZSwgd2l0aG91dCBhbnkgY2Fj
aGVzLgorICAgICAgICBzdGF0aWMgaW50IGFjdHVhbE1lbW9yeVVzYWdlTUIoKTsKKworICAgICAg
ICAvLyBNaW1lVHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgICAgIHN0YXRpYyBib29sIGlzU3Vw
cG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAg
ICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVGb3JFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBtaW1lVHlw
ZUZyb21GaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOworICAgICAgICBzdGF0aWMgU3RyaW5n
IHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwor
CisgICAgICAgIC8vIFBsdWdpbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0YXRpYyBib29sIHBsdWdpbnMoYm9v
bCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4qKTsKKyAgICAgICAgc3RhdGljIE5QT2JqZWN0
KiBwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCopOworICAgICAgICBzdGF0aWMgYm9vbCBw
b3B1cHNBbGxvd2VkKE5QUCk7CisKKyAgICAgICAgLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hh
ciogbmFtZSk7CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgICAgICBzdGF0aWMgUGFzc093
blB0cjxBdWRpb0J1cz4gbG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1l
LCBkb3VibGUgc2FtcGxlUmF0ZSk7CisgICAgICAgIHN0YXRpYyBQYXNzT3duUHRyPEF1ZGlvQnVz
PiBkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3Vi
bGUgc2FtcGxlUmF0ZSk7CisjZW5kaWYKKworICAgICAgICAvLyBTYW5kYm94IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAg
ICBzdGF0aWMgYm9vbCBzYW5kYm94RW5hYmxlZCgpOworCisgICAgICAgIC8vIFNjcmVlbiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgICAgIHN0YXRpYyBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0Kik7CisgICAgICAgIHN0YXRp
YyBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0Kik7CisgICAgICAgIHN0YXRpYyBi
b29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKTsKKyAgICAgICAgc3RhdGljIEludFJlY3Qg
c2NyZWVuUmVjdChXaWRnZXQqKTsKKyAgICAgICAgc3RhdGljIEludFJlY3Qgc2NyZWVuQXZhaWxh
YmxlUmVjdChXaWRnZXQqKTsKKworICAgICAgICAvLyBTaGFyZWRUaW1lcnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBzdGF0
aWMgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmZ1bmMpKCkpOworICAg
ICAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSk7
CisgICAgICAgIHN0YXRpYyB2b2lkIHN0b3BTaGFyZWRUaW1lcigpOworCisgICAgICAgIC8vIFN0
YXRzQ291bnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisgICAgICAgIHN0YXRpYyB2b2lkIGRlY3JlbWVudFN0YXRzQ291bnRlcihjb25z
dCBjaGFyKiBuYW1lKTsKKyAgICAgICAgc3RhdGljIHZvaWQgaW5jcmVtZW50U3RhdHNDb3VudGVy
KGNvbnN0IGNoYXIqIG5hbWUpOworICAgICAgICBzdGF0aWMgdm9pZCBoaXN0b2dyYW1DdXN0b21D
b3VudHMoY29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IG1pbiwgaW50IG1heCwgaW50
IGJ1Y2tldENvdW50KTsKKyAgICAgICAgc3RhdGljIHZvaWQgaGlzdG9ncmFtRW51bWVyYXRpb24o
Y29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpOworCisgICAg
ICAgIC8vIFN1ZGRlbiBUZXJtaW5hdGlvbgorICAgICAgICBzdGF0aWMgdm9pZCBzdWRkZW5UZXJt
aW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKTsKKworICAgICAgICAvLyBTeXN0ZW1UaW1lIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor
ICAgICAgICBzdGF0aWMgZG91YmxlIGN1cnJlbnRUaW1lKCk7CisKKyAgICAgICAgLy8gVGhlbWlu
ZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyNpZiBPUyhXSU5ET1dTKQorICAgICAgICBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbigK
KyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBj
bGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRN
ZW51TGlzdCgKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3Rh
dGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgcGFpbnRTY3JvbGxiYXJBcnJvdygKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGlu
dCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOworICAgICAgICBzdGF0
aWMgdm9pZCBwYWludFNjcm9sbGJhclRodW1iKAorICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0
KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYp
OworICAgICAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJhclRyYWNrKAorICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwg
Y29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmIGFsaWduUmVjdCk7CisgICAgICAgIHN0YXRp
YyB2b2lkIHBhaW50U3BpbkJ1dHRvbigKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGlu
dCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAg
ICAgICAgc3RhdGljIHZvaWQgcGFpbnRUZXh0RmllbGQoCisgICAgICAgICAgICBHcmFwaGljc0Nv
bnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRS
ZWN0JiwgY29uc3QgQ29sb3ImLCBib29sIGZpbGxDb250ZW50QXJlYSwgYm9vbCBkcmF3RWRnZXMp
OworICAgICAgICBzdGF0aWMgdm9pZCBwYWludFRyYWNrYmFyKAorICAgICAgICAgICAgR3JhcGhp
Y3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3Qg
SW50UmVjdCYpOworICAgICAgICBzdGF0aWMgdm9pZCBwYWludFByb2dyZXNzQmFyKAorICAgICAg
ICAgICAgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29uc3QgSW50
UmVjdCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNvbmRz
KTsKKyNlbGlmIE9TKExJTlVYKQorICAgICAgICAvLyBUaGUgVUkgcGFydCB3aGljaCBpcyBiZWlu
ZyBhY2Nlc3NlZC4KKyAgICAgICAgZW51bSBUaGVtZVBhcnQgeworICAgICAgICAgICAgUGFydFNj
cm9sbGJhckRvd25BcnJvdywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCisg
ICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdywKKyAgICAgICAgICAgIFBhcnRTY3Jv
bGxiYXJVcEFycm93LAorICAgICAgICAgICAgUGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiwK
KyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iLAorICAgICAgICAgICAgUGFy
dFNjcm9sbGJhckhvcml6b250YWxUcmFjaywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0
aWNhbFRyYWNrLAorICAgICAgICB9OworCisgICAgICAgIC8vIFRoZSBjdXJyZW50IHN0YXRlIG9m
IHRoZSBhc3NvY2lhdGVkIFBhcnQuCisgICAgICAgIGVudW0gVGhlbWVQYWludFN0YXRlIHsKKyAg
ICAgICAgICAgIFN0YXRlRGlzYWJsZWQsCisgICAgICAgICAgICBTdGF0ZUhvdmVyLAorICAgICAg
ICAgICAgU3RhdGVOb3JtYWwsCisgICAgICAgICAgICBTdGF0ZVByZXNzZWQsCisgICAgICAgIH07
CisKKyAgICAgICAgc3RydWN0IFNjcm9sbGJhclRyYWNrRXh0cmFQYXJhbXMgeworICAgICAgICAg
ICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgZW50aXJlIHRyYWNrLCBhcyBvcHBvc2VkIHRvIHRoZSBw
YXJ0IGJlaW5nIHBhaW50ZWQuCisgICAgICAgICAgICBpbnQgdHJhY2tYOworICAgICAgICAgICAg
aW50IHRyYWNrWTsKKyAgICAgICAgICAgIGludCB0cmFja1dpZHRoOworICAgICAgICAgICAgaW50
IHRyYWNrSGVpZ2h0OworICAgICAgICB9OworCisgICAgICAgIHVuaW9uIFRoZW1lUGFpbnRFeHRy
YVBhcmFtcyB7CisgICAgICAgICAgICBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1zIHNjcm9sbGJh
clRyYWNrOworICAgICAgICB9OworCisgICAgICAgIC8vIEdldHMgdGhlIHNpemUgb2YgdGhlIGdp
dmVuIHRoZW1lIHBhcnQuIEZvciB2YXJpYWJsZSBzaXplZCBpdGVtcworICAgICAgICAvLyBsaWtl
IHZlcnRpY2FsIHNjcm9sbGJhciB0aHVtYnMsIHRoZSB3aWR0aCB3aWxsIGJlIHRoZSByZXF1aXJl
ZCB3aWR0aCBvZgorICAgICAgICAvLyB0aGUgdHJhY2sgd2hpbGUgdGhlIGhlaWdodCB3aWxsIGJl
IHRoZSBtaW5pbXVtIGhlaWdodC4KKyAgICAgICAgc3RhdGljIEludFNpemUgZ2V0VGhlbWVQYXJ0
U2l6ZShUaGVtZVBhcnQpOworICAgICAgICAvLyBQYWludCB0aGUgZ2l2ZW4gdGhlIGdpdmVuIHRo
ZW1lIHBhcnQuCisgICAgICAgIHN0YXRpYyB2b2lkIHBhaW50VGhlbWVQYXJ0KEdyYXBoaWNzQ29u
dGV4dCosIFRoZW1lUGFydCwgVGhlbWVQYWludFN0YXRlLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
VGhlbWVQYWludEV4dHJhUGFyYW1zKik7CisjZWxpZiBPUyhEQVJXSU4pCisgICAgICAgIGVudW0g
VGhlbWVQYWludFN0YXRlIHsKKyAgICAgICAgICAgIFN0YXRlRGlzYWJsZWQsCisgICAgICAgICAg
ICBTdGF0ZUluYWN0aXZlLAorICAgICAgICAgICAgU3RhdGVBY3RpdmUsCisgICAgICAgICAgICBT
dGF0ZVByZXNzZWQsCisgICAgICAgIH07CisKKyAgICAgICAgZW51bSBUaGVtZVBhaW50U2l6ZSB7
CisgICAgICAgICAgICBTaXplUmVndWxhciwKKyAgICAgICAgICAgIFNpemVTbWFsbCwKKyAgICAg
ICAgfTsKKworICAgICAgICBlbnVtIFRoZW1lUGFpbnRTY3JvbGxiYXJPcmllbnRhdGlvbiB7Cisg
ICAgICAgICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbkhvcml6b250YWwsCisgICAgICAgICAgICBT
Y3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsLAorICAgICAgICB9OworCisgICAgICAgIGVudW0g
VGhlbWVQYWludFNjcm9sbGJhclBhcmVudCB7CisgICAgICAgICAgICBTY3JvbGxiYXJQYXJlbnRT
Y3JvbGxWaWV3LAorICAgICAgICAgICAgU2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5ZXIsCisgICAg
ICAgIH07CisKKyAgICAgICAgc3RydWN0IFRoZW1lUGFpbnRTY3JvbGxiYXJJbmZvIHsKKyAgICAg
ICAgICAgIFRoZW1lUGFpbnRTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmllbnRhdGlvbjsKKyAgICAg
ICAgICAgIFRoZW1lUGFpbnRTY3JvbGxiYXJQYXJlbnQgcGFyZW50OworICAgICAgICAgICAgaW50
IG1heFZhbHVlOworICAgICAgICAgICAgaW50IGN1cnJlbnRWYWx1ZTsKKyAgICAgICAgICAgIGlu
dCB2aXNpYmxlU2l6ZTsKKyAgICAgICAgICAgIGludCB0b3RhbFNpemU7CisgICAgICAgIH07CisK
KyAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJUaHVtYihHcmFwaGljc0NvbnRleHQq
LCBUaGVtZVBhaW50U3RhdGUsIFRoZW1lUGFpbnRTaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3Qg
VGhlbWVQYWludFNjcm9sbGJhckluZm8mKTsKKyNlbmRpZgorCisgICAgICAgIC8vIFRyYWNlIEV2
ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgICAgIHN0YXRpYyB2b2lkIHRyYWNlRXZlbnRCZWdpbihjb25zdCBjaGFyKiBuYW1l
LCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOworICAgICAgICBzdGF0aWMgdm9pZCB0cmFj
ZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSk7
CisKKyAgICAgICAgLy8gVmlzaXRlZCBsaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0
ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpOworICAgICAgICBz
dGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNMaW5rVmlz
aXRlZChMaW5rSGFzaCk7CisgICAgfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0jZW5k
aWYgLy8gUGxhdGZvcm1CcmlkZ2VfaAorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVlbkNocm9taXVtLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwCmluZGV4
IGU2NTllZjVlNjllOTQ1MjMzNjMwMjNkZWQ5ZTA2YjgxMWNmNDczY2UuLjM1ZDUwMTg5ZTA4Zjdk
NzYwM2U5YzY0NDkxZDUwN2U1MWUzMzkxNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwCkBAIC0z
MSwzNCArMzEsMzQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVNj
cmVlbi5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJJbnRSZWN0
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVt
QnJpZGdlOjpzY3JlZW5EZXB0aCh3aWRnZXQpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6
c2NyZWVuRGVwdGgod2lkZ2V0KTsKIH0KIAogaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdp
ZGdldCogd2lkZ2V0KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGhQ
ZXJDb21wb25lbnQod2lkZ2V0KTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KHdpZGdldCk7CiB9CiAKIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdp
ZGdldCogd2lkZ2V0KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuSXNNb25v
Y2hyb21lKHdpZGdldCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5Jc01vbm9j
aHJvbWUod2lkZ2V0KTsKIH0KIAogRmxvYXRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQp
CiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5SZWN0KHdpZGdldCk7CisgICAg
cmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5SZWN0KHdpZGdldCk7CiB9CiAKIEZsb2F0UmVj
dCBzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQogewotICAgIHJldHVybiBDaHJv
bWl1bUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCh3aWRnZXQpOworICAgIHJldHVybiBQbGF0
Zm9ybUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCh3aWRnZXQpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcAppbmRleCA5N2M0ODFiNzUyNjg5NWU2NDk0MWJiOTk1
OWFmOGQwMDBkYTc4NGM2Li5kYmY0NzM5MGQ2OWY5YmM3NWY3NjEwNmJiMmFmMDU1M2M0Mjc2OGM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURh
dGFPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRh
YmxlRGF0YU9iamVjdC5jcHAKQEAgLTMxLDEwICszMSwxMCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlJlYWRhYmxlRGF0YU9iamVjdC5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJQYXN0
ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZFByaXZhdGUuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDE5ICs4MCwxOSBA
QCBTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0OjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Ym9vbCYgc3VjY2VlZGVkKSBjb25zdAogICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVy
YWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KICAgICAgICAgICAgICAgICBQYXN0
ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKICAgICAgICAgICAgICAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBkYXRhID0gQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAgICAgICAgICAgIGRhdGEg
PSBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwogICAgICAg
ICB9IGVsc2UgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewogICAgICAgICAgICAgUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPQogICAgICAgICAgICAgICAg
IFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KICAg
ICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKICAgICAg
ICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAg
ICBLVVJMIGlnbm9yZWRTb3VyY2VVUkw7Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xp
cGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmZGF0YSwgJmlnbm9yZWRTb3VyY2VVUkwpOworICAgICAg
ICAgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJmRhdGEsICZp
Z25vcmVkU291cmNlVVJMKTsKICAgICAgICAgfQogICAgICAgICBzdWNjZWVkZWQgPSAhZGF0YS5p
c0VtcHR5KCk7CiAgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KLSAgICBzdWNjZWVkZWQgPSBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgc3VjY2VlZGVkID0gUGxhdGZv
cm1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9j
bGlwYm9hcmRUeXBlKSwgdHlwZSwgZGF0YSwgaWdub3JlZE1ldGFkYXRhKTsKICAgICByZXR1cm4g
ZGF0YTsKIH0KQEAgLTEwMSw3ICsxMDEsNyBAQCBTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0Ojp1
cmxUaXRsZSgpIGNvbnN0CiB7CiAgICAgU3RyaW5nIGlnbm9yZWREYXRhOwogICAgIFN0cmluZyB1
cmxUaXRsZTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgUGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAgICAgICBjbGlwYm9hcmRCdWZmZXIo
bV9jbGlwYm9hcmRUeXBlKSwgbWltZVR5cGVUZXh0VVJJTGlzdCwgaWdub3JlZERhdGEsIHVybFRp
dGxlKTsKICAgICByZXR1cm4gdXJsVGl0bGU7CiB9CkBAIC0xMTAsNyArMTEwLDcgQEAgS1VSTCBS
ZWFkYWJsZURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKCkgY29uc3QKIHsKICAgICBTdHJpbmcgaWdu
b3JlZERhdGE7CiAgICAgU3RyaW5nIGh0bWxCYXNlVXJsOwotICAgIENocm9taXVtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkRGF0YSgKKyAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEo
CiAgICAgICAgIGNsaXBib2FyZEJ1ZmZlcihtX2NsaXBib2FyZFR5cGUpLCBtaW1lVHlwZVRleHRI
VE1MLCBpZ25vcmVkRGF0YSwgaHRtbEJhc2VVcmwpOwogICAgIHJldHVybiBLVVJMKFBhcnNlZFVS
TFN0cmluZywgaHRtbEJhc2VVcmwpOwogfQpAQCAtMTIzLDcgKzEyMyw3IEBAIGJvb2wgUmVhZGFi
bGVEYXRhT2JqZWN0Ojpjb250YWluc0ZpbGVuYW1lcygpIGNvbnN0CiAKIFZlY3RvcjxTdHJpbmc+
IFJlYWRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKCkgY29uc3QKIHsKLSAgICByZXR1cm4gQ2hy
b21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMoY2xpcGJvYXJkQnVmZmVyKG1fY2xp
cGJvYXJkVHlwZSkpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZp
bGVuYW1lcyhjbGlwYm9hcmRCdWZmZXIobV9jbGlwYm9hcmRUeXBlKSk7CiB9CiAKIHZvaWQgUmVh
ZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGVJbml0aWFsaXplZCgpIGNvbnN0CkBAIC0x
MzEsNyArMTMxLDcgQEAgdm9pZCBSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUlu
aXRpYWxpemVkKCkgY29uc3QKICAgICBpZiAobV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKQogICAg
ICAgICByZXR1cm47CiAKLSAgICBtX3R5cGVzID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJl
YWRBdmFpbGFibGVUeXBlcygKKyAgICBtX3R5cGVzID0gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJk
VHlwZSksICZtX2NvbnRhaW5zRmlsZW5hbWVzKTsKICAgICBtX2lzVHlwZUNhY2hlSW5pdGlhbGl6
ZWQgPSB0cnVlOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwCmluZGV4IDQ5ZDk1MTcxNzM4OTcw
MmExMTM3ZjMxMjA5Y2MyYmE0OWE0YTAwNDYuLjY0Njc3NjRkM2YxYThlOGE2MzZiZDU0MzA5YTJm
ZjdiMGUxZTFiMDQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAKQEAgLTMxLDcgKzMxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKIAotI2lu
Y2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01MSw3
ICs1MSw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWdu
ZWQga2V5U2l6ZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiBDaHJvbWl1
bUJyaWRnZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtleVNpemVJbmRleCwK
KyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0
cmluZyhrZXlTaXplSW5kZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY2hhbGxlbmdlU3RyaW5nLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybCk7CiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJh
clRoZW1lQ2hyb21pdW0uY3BwCmluZGV4IDIzNGQwZWUyY2NjYzMyY2Q5ZmYwOWFmNGRlZTI2Mjhm
YmViMjg5YzQuLmZlMDk1NTM3MDVmYjk4ZTNkOWY0YTE0MDM5MGQyMDc4ZGQ1MWJjZTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hy
b21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJh
clRoZW1lQ2hyb21pdW0uY3BwCkBAIC0yNyw3ICsyNyw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogI2luY2x1ZGUgIlNjcm9s
bGJhckNsaWVudC5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAKaW5kZXggYmExMDk1
MzA4MGIwNDhmNTkwNmYyZGQzZjU1NDE3MDY5ZjZiNzVjNS4uZTE3M2RmZjljZGRjYjAzY2YzNWM1
MGYxZmQ5MzJmNTQ3YTU5MTIzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCkBA
IC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bUxpbnV4LmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50Lmgi
CiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAKQEAgLTQ2LDIyICs0NiwyMiBAQCBTY3JvbGxiYXJU
aGVtZSogU2Nyb2xsYmFyVGhlbWU6Om5hdGl2ZVRoZW1lKCkKIGludCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTGludXg6OnNjcm9sbGJhclRoaWNrbmVzcyhTY3JvbGxiYXJDb250cm9sU2l6ZSBjb250
cm9sU2l6ZSkKIHsKICAgICAvLyBIb3JpeiBhbmQgVmVydCBzY3JvbGxiYXJzIGFyZSB0aGUgc2Ft
ZSB0aGlja25lc3MuCi0gICAgSW50U2l6ZSBzY3JvbGxiYXJTaXplID0gQ2hyb21pdW1CcmlkZ2U6
OmdldFRoZW1lUGFydFNpemUoQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRy
YWNrKTsKKyAgICBJbnRTaXplIHNjcm9sbGJhclNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhl
bWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2spOwog
ICAgIHJldHVybiBzY3JvbGxiYXJTaXplLndpZHRoKCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bUxpbnV4OjpwYWludFRyYWNrUGllY2UoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Ny
b2xsYmFyKiBzY3JvbGxiYXIsIGNvbnN0IEludFJlY3QmIHJlY3QsIFNjcm9sbGJhclBhcnQgcGFy
dFR5cGUpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSA9IHNj
cm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9PSBwYXJ0VHlwZSA/IENocm9taXVtQnJpZGdlOjpTdGF0
ZUhvdmVyIDogQ2hyb21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFsOworICAgIFBsYXRmb3JtQnJpZGdl
OjpUaGVtZVBhaW50U3RhdGUgc3RhdGUgPSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkgPT0gcGFy
dFR5cGUgPyBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVIb3ZlciA6IFBsYXRmb3JtQnJpZGdlOjpTdGF0
ZU5vcm1hbDsKICAgICBJbnRSZWN0IGFsaWduUmVjdCA9IHRyYWNrUmVjdChzY3JvbGxiYXIsIGZh
bHNlKTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFyYW1zIGV4dHJhUGFy
YW1zOworICAgIFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMgZXh0cmFQYXJh
bXM7CiAgICAgZXh0cmFQYXJhbXMuc2Nyb2xsYmFyVHJhY2sudHJhY2tYID0gYWxpZ25SZWN0Lngo
KTsKICAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50cmFja1kgPSBhbGlnblJlY3QueSgp
OwogICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGggPSBhbGlnblJlY3Qu
d2lkdGgoKTsKICAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50cmFja0hlaWdodCA9IGFs
aWduUmVjdC5oZWlnaHQoKTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCisg
ICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAogICAgICAgICBnYywKLSAgICAgICAg
c2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBDaHJvbWl1
bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjayA6IENocm9taXVtQnJpZGdlOjpQ
YXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaywKKyAgICAgICAgc2Nyb2xsYmFyLT5vcmllbnRhdGlv
bigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJh
ckhvcml6b250YWxUcmFjayA6IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxU
cmFjaywKICAgICAgICAgc3RhdGUsCiAgICAgICAgIHJlY3QsCiAgICAgICAgICZleHRyYVBhcmFt
cyk7CkBAIC02OSw1MiArNjksNTIgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6
OnBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIKIAogdm9pZCBT
Y3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCog
Z2MsIFNjcm9sbGJhciogc2Nyb2xsYmFyLCBjb25zdCBJbnRSZWN0JiByZWN0LCBTY3JvbGxiYXJQ
YXJ0IHBhcnQpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFydCBwYWludFBhcnQ7Ci0g
ICAgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSA9IENocm9taXVtQnJpZGdl
OjpTdGF0ZU5vcm1hbDsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQYXJ0IHBhaW50UGFydDsK
KyAgICBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlID0gUGxhdGZvcm1Ccmlk
Z2U6OlN0YXRlTm9ybWFsOwogICAgIGJvb2wgY2hlY2tNaW4gPSBmYWxzZTsKICAgICBib29sIGNo
ZWNrTWF4ID0gZmFsc2U7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jp
em9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGlmIChwYXJ0ID09IEJhY2tCdXR0b25TdGFydFBh
cnQpIHsKLSAgICAgICAgICAgIHBhaW50UGFydCA9IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xs
YmFyTGVmdEFycm93OworICAgICAgICAgICAgcGFpbnRQYXJ0ID0gUGxhdGZvcm1CcmlkZ2U6OlBh
cnRTY3JvbGxiYXJMZWZ0QXJyb3c7CiAgICAgICAgICAgICBjaGVja01pbiA9IHRydWU7CiAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYWludFBhcnQgPSBDaHJvbWl1bUJyaWRnZTo6UGFy
dFNjcm9sbGJhclJpZ2h0QXJyb3c7CisgICAgICAgICAgICBwYWludFBhcnQgPSBQbGF0Zm9ybUJy
aWRnZTo6UGFydFNjcm9sbGJhclJpZ2h0QXJyb3c7CiAgICAgICAgICAgICBjaGVja01heCA9IHRy
dWU7CiAgICAgICAgIH0KICAgICB9IGVsc2UgewogICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0
dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAgICAgICBwYWludFBhcnQgPSBDaHJvbWl1bUJyaWRnZTo6
UGFydFNjcm9sbGJhclVwQXJyb3c7CisgICAgICAgICAgICBwYWludFBhcnQgPSBQbGF0Zm9ybUJy
aWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3c7CiAgICAgICAgICAgICBjaGVja01pbiA9IHRydWU7
CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBwYWludFBhcnQgPSBDaHJvbWl1bUJyaWRn
ZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsKKyAgICAgICAgICAgIHBhaW50UGFydCA9IFBsYXRm
b3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OwogICAgICAgICAgICAgY2hlY2tNYXgg
PSB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIGlmICgoY2hlY2tNaW4gJiYgKHNjcm9sbGJh
ci0+Y3VycmVudFBvcygpIDw9IDApKQogICAgICAgICB8fCAoY2hlY2tNYXggJiYgc2Nyb2xsYmFy
LT5jdXJyZW50UG9zKCkgPT0gc2Nyb2xsYmFyLT5tYXhpbXVtKCkpKSB7Ci0gICAgICAgIHN0YXRl
ID0gQ2hyb21pdW1CcmlkZ2U6OlN0YXRlRGlzYWJsZWQ7CisgICAgICAgIHN0YXRlID0gUGxhdGZv
cm1CcmlkZ2U6OlN0YXRlRGlzYWJsZWQ7CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHBhcnQg
PT0gc2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpKQotICAgICAgICAgICAgc3RhdGUgPSBDaHJvbWl1
bUJyaWRnZTo6U3RhdGVQcmVzc2VkOworICAgICAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRn
ZTo6U3RhdGVQcmVzc2VkOwogICAgICAgICBlbHNlIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+aG92
ZXJlZFBhcnQoKSkKLSAgICAgICAgICAgIHN0YXRlID0gQ2hyb21pdW1CcmlkZ2U6OlN0YXRlSG92
ZXI7CisgICAgICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUhvdmVyOwogICAg
IH0KLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoZ2MsIHBhaW50UGFydCwgc3Rh
dGUsIHJlY3QsIDApOworICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFRoZW1lUGFydChnYywgcGFp
bnRQYXJ0LCBzdGF0ZSwgcmVjdCwgMCk7CiB9CiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bUxpbnV4OjpwYWludFRodW1iKEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2xs
YmFyLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewotICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBh
aW50U3RhdGUgc3RhdGU7CisgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0
ZTsKIAogICAgIGlmIChzY3JvbGxiYXItPnByZXNzZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAg
ICAgICBzdGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZVByZXNzZWQ7CisgICAgICAgIHN0YXRl
ID0gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3NlZDsKICAgICBlbHNlIGlmIChzY3JvbGxiYXIt
PmhvdmVyZWRQYXJ0KCkgPT0gVGh1bWJQYXJ0KQotICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJp
ZGdlOjpTdGF0ZUhvdmVyOworICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUhv
dmVyOwogICAgIGVsc2UKLSAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3Jt
YWw7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAorICAgICAgICBzdGF0ZSA9
IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZU5vcm1hbDsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRU
aGVtZVBhcnQoCiAgICAgICAgIGdjLAotICAgICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkg
PT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9y
aXpvbnRhbFRodW1iIDogQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1i
LAorICAgICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
ciA/IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iIDogUGxhdGZv
cm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iLAogICAgICAgICBzdGF0ZSwKICAg
ICAgICAgcmVjdCwKICAgICAgICAgMCk7CkBAIC0xMjgsMjMgKzEyOCwyMyBAQCBib29sIFNjcm9s
bGJhclRoZW1lQ2hyb21pdW1MaW51eDo6c2hvdWxkQ2VudGVyT25UaHVtYihTY3JvbGxiYXIqLCBj
b25zdCBQbGF0Zm9ybQogSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRv
blNpemUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNpemUgPSBD
aHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9s
bGJhclVwQXJyb3cpOworICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0
VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3cpOwogICAg
ICAgICByZXR1cm4gSW50U2l6ZShzaXplLndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkgPCAy
ICogc2l6ZS5oZWlnaHQoKSA/IHNjcm9sbGJhci0+aGVpZ2h0KCkgLyAyIDogc2l6ZS5oZWlnaHQo
KSk7CiAgICAgfQogCiAgICAgLy8gSG9yaXpvbnRhbFNjcm9sbGJhcgotICAgIEludFNpemUgc2l6
ZSA9IENocm9taXVtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKENocm9taXVtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyTGVmdEFycm93KTsKKyAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6
Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdyk7
CiAgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIHNpemUud2lkdGgo
KSA/IHNjcm9sbGJhci0+d2lkdGgoKSAvIDIgOiBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkp
OwogfQogCiBpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtVGh1bWJMZW5n
dGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNpemUgPSBDaHJv
bWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJh
clZlcnRpY2FsVGh1bWIpOworICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6
Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1
bWIpOwogICAgICAgICByZXR1cm4gc2l6ZS5oZWlnaHQoKTsKICAgICB9CiAKLSAgICBJbnRTaXpl
IHNpemUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6
UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYik7CisgICAgSW50U2l6ZSBzaXplID0gUGxhdGZv
cm1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJI
b3Jpem9udGFsVGh1bWIpOwogICAgIHJldHVybiBzaXplLndpZHRoKCk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjLm1tCmluZGV4IDBhYTNlMTBmYWQ0YWNlYzEzYmE3NzMwZjg5MjEwMGVlNDg5
ZDgwNDguLjBmNDkyOTcyYTczMzg5ODc1NmU4ZjUyMmZlZGIzZTA0YmY4ZWY4MTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21p
dW1NYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFy
VGhlbWVDaHJvbWl1bU1hYy5tbQpAQCAtMjcsOSArMjcsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMuaCIKIAotI2luY2x1ZGUgIkNo
cm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCiAjaW5jbHVkZSAiSW1hZ2VC
dWZmZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
TW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbFZpZXcuaCIKICNpbmNsdWRlIDxDYXJib24v
Q2FyYm9uLmg+CkBAIC0zNzAsMTUgKzM3MCwxNSBAQCBzdGF0aWMgaW50IHNjcm9sbGJhclBhcnRU
b0hJUHJlc3NlZFN0YXRlKFNjcm9sbGJhclBhcnQgcGFydCkKICAgICB9CiB9CiAKLXN0YXRpYyBD
aHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRl
KFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CitzdGF0aWMgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFp
bnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikg
ewogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBDaHJvbWl1
bUJyaWRnZTo6U3RhdGVEaXNhYmxlZDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpT
dGF0ZURpc2FibGVkOwogICAgIGlmICghc2Nyb2xsYmFyLT5jbGllbnQoKS0+aXNBY3RpdmUoKSkK
LSAgICAgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpTdGF0ZUluYWN0aXZlOworICAgICAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlSW5hY3RpdmU7CiAgICAgaWYgKHNjcm9sbGJhci0+
cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgIHJldHVybiBDaHJvbWl1bUJyaWRn
ZTo6U3RhdGVQcmVzc2VkOworICAgICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJl
c3NlZDsKIAotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6U3RhdGVBY3RpdmU7CisgICAgcmV0
dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUFjdGl2ZTsKIH0KIAogYm9vbCBTY3JvbGxiYXJUaGVt
ZUNocm9taXVtTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0
KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQpAQCAtNDYzLDE4ICs0NjMsMTgg
QEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9s
bGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb24KICAgICB9CiAKICAgICBpZiAoaGFzVGh1bWIoc2Ny
b2xsYmFyKSkgewotICAgICAgICBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFNjcm9sbGJhcklu
Zm8gc2Nyb2xsYmFySW5mbzsKLSAgICAgICAgc2Nyb2xsYmFySW5mby5vcmllbnRhdGlvbiA9IHNj
cm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gQ2hyb21pdW1C
cmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uSG9yaXpvbnRhbCA6IENocm9taXVtQnJpZGdlOjpT
Y3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsOwotICAgICAgICBzY3JvbGxiYXJJbmZvLnBhcmVu
dCA9IHNjcm9sbGJhci0+cGFyZW50KCkgJiYgc2Nyb2xsYmFyLT5wYXJlbnQoKS0+aXNGcmFtZVZp
ZXcoKSAmJiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihzY3JvbGxiYXItPnBhcmVudCgpKS0+aXNT
Y3JvbGxWaWV3U2Nyb2xsYmFyKHNjcm9sbGJhcikgPyBDaHJvbWl1bUJyaWRnZTo6U2Nyb2xsYmFy
UGFyZW50U2Nyb2xsVmlldyA6IENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRSZW5kZXJM
YXllcjsKKyAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRTY3JvbGxiYXJJbmZvIHNj
cm9sbGJhckluZm87CisgICAgICAgIHNjcm9sbGJhckluZm8ub3JpZW50YXRpb24gPSBzY3JvbGxi
YXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IFBsYXRmb3JtQnJpZGdl
OjpTY3JvbGxiYXJPcmllbnRhdGlvbkhvcml6b250YWwgOiBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xs
YmFyT3JpZW50YXRpb25WZXJ0aWNhbDsKKyAgICAgICAgc2Nyb2xsYmFySW5mby5wYXJlbnQgPSBz
Y3JvbGxiYXItPnBhcmVudCgpICYmIHNjcm9sbGJhci0+cGFyZW50KCktPmlzRnJhbWVWaWV3KCkg
JiYgc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4oc2Nyb2xsYmFyLT5wYXJlbnQoKSktPmlzU2Nyb2xs
Vmlld1Njcm9sbGJhcihzY3JvbGxiYXIpID8gUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhclBhcmVu
dFNjcm9sbFZpZXcgOiBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5ZXI7
CiAgICAgICAgIHNjcm9sbGJhckluZm8ubWF4VmFsdWUgPSBzY3JvbGxiYXItPm1heGltdW0oKTsK
ICAgICAgICAgc2Nyb2xsYmFySW5mby5jdXJyZW50VmFsdWUgPSBzY3JvbGxiYXItPmN1cnJlbnRQ
b3MoKTsKICAgICAgICAgc2Nyb2xsYmFySW5mby52aXNpYmxlU2l6ZSA9IHNjcm9sbGJhci0+dmlz
aWJsZVNpemUoKTsKICAgICAgICAgc2Nyb2xsYmFySW5mby50b3RhbFNpemUgPSBzY3JvbGxiYXIt
PnRvdGFsU2l6ZSgpOwogCi0gICAgICAgIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhclRo
dW1iKAorICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKICAgICAg
ICAgICAgIGRyYXdpbmdDb250ZXh0LAogICAgICAgICAgICAgc2Nyb2xsYmFyU3RhdGVUb1RoZW1l
U3RhdGUoc2Nyb2xsYmFyKSwKLSAgICAgICAgICAgIHNjcm9sbGJhci0+Y29udHJvbFNpemUoKSA9
PSBSZWd1bGFyU2Nyb2xsYmFyID8gQ2hyb21pdW1CcmlkZ2U6OlNpemVSZWd1bGFyIDogQ2hyb21p
dW1CcmlkZ2U6OlNpemVTbWFsbCwKKyAgICAgICAgICAgIHNjcm9sbGJhci0+Y29udHJvbFNpemUo
KSA9PSBSZWd1bGFyU2Nyb2xsYmFyID8gUGxhdGZvcm1CcmlkZ2U6OlNpemVSZWd1bGFyIDogUGxh
dGZvcm1CcmlkZ2U6OlNpemVTbWFsbCwKICAgICAgICAgICAgIHNjcm9sbGJhci0+ZnJhbWVSZWN0
KCksCiAgICAgICAgICAgICBzY3JvbGxiYXJJbmZvKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtV2luLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21p
dW1XaW4uY3BwCmluZGV4IGJhN2U5N2IyNTUzNDlkYmZlZGIzMGQ4YmRkNmQ0ODk1M2M3Nzg5ZWIu
LjI5ZThiNDQyNjVjNWUxZDAwNTM1ODhlOTcxNWU5NDJiYzc5NjAxOGQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1l
Q2hyb21pdW1XaW4uY3BwCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgog
I2luY2x1ZGUgPHZzc3R5bGUuaD4KIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5j
bHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCkBAIC02MSw3ICs2MSw3IEBAIGludCBTY3Jv
bGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3JvbGxiYXJUaGlja25lc3MoU2Nyb2xsYmFyQ29udHJv
bFNpemUgY29udHJvbFNpCiB7CiAgICAgc3RhdGljIGludCB0aGlja25lc3M7CiAgICAgaWYgKCF0
aGlja25lc3MpIHsKLSAgICAgICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgp
KQorICAgICAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCiAgICAgICAg
ICAgICByZXR1cm4ga01hY1Njcm9sbGJhclNpemVbY29udHJvbFNpemVdOwogICAgICAgICB0aGlj
a25lc3MgPSBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7CiAgICAgfQpAQCAtMTA0LDcg
KzEwNCw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUcmFja1BpZWNl
KEdyYXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhcioKICAgICBJbnRSZWN0IGFsaWduUmVjdCA9
IHRyYWNrUmVjdChzY3JvbGxiYXIsIGZhbHNlKTsKIAogICAgIC8vIERyYXcgdGhlIHRyYWNrIGFy
ZWEgYmVmb3JlL2FmdGVyIHRoZSB0aHVtYiBvbiB0aGUgc2Nyb2xsIGJhci4KLSAgICBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUcmFjaygKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRT
Y3JvbGxiYXJUcmFjaygKICAgICAgICAgZ2MsCiAgICAgICAgIHBhcnRJZCwKICAgICAgICAgZ2V0
VGhlbWVTdGF0ZShzY3JvbGxiYXIsIHBhcnRUeXBlKSwKQEAgLTEyNCw3ICsxMjQsNyBAQCB2b2lk
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0dG9uKEdyYXBoaWNzQ29udGV4dCog
Z2MsIFNjcm9sbGJhciogc2NybwogICAgICAgICBwYXJ0SWQgPSBob3J6ID8gREZDU19TQ1JPTExS
SUdIVCA6IERGQ1NfU0NST0xMRE9XTjsKIAogICAgIC8vIERyYXcgdGhlIHRodW1iICh0aGUgYm94
IHlvdSBkcmFnIGluIHRoZSBzY3JvbGwgYmFyIHRvIHNjcm9sbCkuCi0gICAgQ2hyb21pdW1Ccmlk
Z2U6OnBhaW50U2Nyb2xsYmFyQXJyb3coCisgICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xs
YmFyQXJyb3coCiAgICAgICAgIGdjLAogICAgICAgICBnZXRUaGVtZUFycm93U3RhdGUoc2Nyb2xs
YmFyLCBwYXJ0KSwKICAgICAgICAgcGFydElkIHwgZ2V0Q2xhc3NpY1RoZW1lU3RhdGUoc2Nyb2xs
YmFyLCBwYXJ0KSwKQEAgLTEzNiw3ICsxMzYsNyBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21p
dW1XaW46OnBhaW50VGh1bWIoR3JhcGhpY3NDb250ZXh0KiBnYywgU2Nyb2xsYmFyKiBzY3JvbAog
ICAgIGJvb2wgaG9yeiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyOwogCiAgICAgLy8gRHJhdyB0aGUgdGh1bWIgKHRoZSBib3ggeW91IGRyYWcgaW4gdGhl
IHNjcm9sbCBiYXIgdG8gc2Nyb2xsKS4KLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxi
YXJUaHVtYigKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKICAgICAg
ICAgZ2MsCiAgICAgICAgIGhvcnogPyBTQlBfVEhVTUJCVE5IT1JaIDogU0JQX1RIVU1CQlROVkVS
VCwKICAgICAgICAgZ2V0VGhlbWVTdGF0ZShzY3JvbGxiYXIsIFRodW1iUGFydCksCkBAIC0xNDQs
NyArMTQ0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRodW1iKEdy
YXBoaWNzQ29udGV4dCogZ2MsIFNjcm9sbGJhciogc2Nyb2wKICAgICAgICAgcmVjdCk7CiAKICAg
ICAvLyBEcmF3IHRoZSBncmlwcGVyICh0aGUgdGhyZWUgbGl0dGxlIGxpbmVzIG9uIHRoZSB0aHVt
YikuCi0gICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCisgICAgUGxhdGZv
cm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCiAgICAgICAgIGdjLAogICAgICAgICBob3J6
ID8gU0JQX0dSSVBQRVJIT1JaIDogU0JQX0dSSVBQRVJWRVJULAogICAgICAgICBnZXRUaGVtZVN0
YXRlKHNjcm9sbGJhciwgVGh1bWJQYXJ0KSwKQEAgLTI1Niw3ICsyNTYsNyBAQCBJbnRTaXplIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OmJ1dHRvblNpemUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIp
CiAgICAgLy8gdGVzdCBtb2RlIHNvIHRoYXQgc2hvdWxkIGJlIGVub3VnaCB0byByZXN1bHQgaW4g
cmVwZWF0YWJsZSByZXN1bHRzLCBidXQKICAgICAvLyBwcmVzZXJ2aW5nIHRoaXMgaGFjayBhdm9p
ZHMgaGF2aW5nIHRvIHJlYmFzZWxpbmUgcGl4ZWwgdGVzdHMuCiAgICAgY29uc3QgaW50IGtMYXlv
dXRUZXN0TW9kZUdpcnRoID0gMTc7Ci0gICAgaW50IGdpcnRoID0gQ2hyb21pdW1CcmlkZ2U6Omxh
eW91dFRlc3RNb2RlKCkgPyBrTGF5b3V0VGVzdE1vZGVHaXJ0aCA6IHRoaWNrbmVzczsKKyAgICBp
bnQgZ2lydGggPSBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/IGtMYXlvdXRUZXN0
TW9kZUdpcnRoIDogdGhpY2tuZXNzOwogCiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24o
KSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyKSB7CiAgICAgICAgIGludCB3aWR0aCA9IHNjcm9sbGJh
ci0+d2lkdGgoKSA8IDIgKiBnaXJ0aCA/IHNjcm9sbGJhci0+d2lkdGgoKSAvIDIgOiBnaXJ0aDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1NoYXJlZFRpbWVy
Q2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVkVGlt
ZXJDaHJvbWl1bS5jcHAKaW5kZXggNWE2YTAwMDI4MjNjMGQ5MzNkYmFjMzA4M2E4OTMyZGM4ZGEy
ZDc4ZC4uNWFjYjI1MzQ3ZjE3NWUyODM4OTgyNDBiMWZkYTA4ZmVjMzBiN2M5YSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVkVGltZXJDaHJv
bWl1bS5jcHAKQEAgLTI2LDIzICsyNiwyMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlNoYXJlZFRpbWVyLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBzZXRT
aGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpCiB7ICAgICAgICAgICAgICAgICAg
IAotICAgIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oZik7Cisg
ICAgUGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbihmKTsKIH0KIAog
dm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKIHsKLSAgICBDaHJv
bWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZShmaXJlVGltZSk7CisgICAgUGxhdGZv
cm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZmlyZVRpbWUpOwogfQogCiB2b2lkIHN0
b3BTaGFyZWRUaW1lcigpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcigp
OworICAgIFBsYXRmb3JtQnJpZGdlOjpzdG9wU2hhcmVkVGltZXIoKTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9TdWRkZW5UZXJtaW5hdGlvbkNocm9taXVtLmNwcAppbmRleCA1NGI4MzA0MDFj
NWFhODBmMmU2NjcxNTE1NWE4MjYzZWU5OWI2NDllLi5jZjFlNzA5MjNiNGRmMjZlZjJhMjI4OGJj
ZGQxOTUzMWI0OWM1MDQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9TdWRkZW5UZXJtaW5hdGlvbkNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9TdWRkZW5UZXJtaW5hdGlvbkNocm9taXVtLmNwcApAQCAtMzEsMTgg
KzMxLDE4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiDQogI2luY2x1ZGUgIlN1ZGRlblRlcm1pbmF0
aW9uLmgiDQogDQotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiDQorI2luY2x1ZGUgIlBsYXRm
b3JtQnJpZGdlLmgiDQogDQogbmFtZXNwYWNlIFdlYkNvcmUgew0KIA0KIHZvaWQgZGlzYWJsZVN1
ZGRlblRlcm1pbmF0aW9uKCkNCiB7DQotICAgIENocm9taXVtQnJpZGdlOjpzdWRkZW5UZXJtaW5h
dGlvbkNoYW5nZWQoZmFsc2UpOw0KKyAgICBQbGF0Zm9ybUJyaWRnZTo6c3VkZGVuVGVybWluYXRp
b25DaGFuZ2VkKGZhbHNlKTsNCiB9DQogDQogdm9pZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigp
DQogew0KLSAgICBDaHJvbWl1bUJyaWRnZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKHRydWUp
Ow0KKyAgICBQbGF0Zm9ybUJyaWRnZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKHRydWUpOw0K
IH0NCiANCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlDQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU3lzdGVtVGltZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1N5c3RlbVRpbWVDaHJvbWl1bS5jcHAKaW5kZXggNTJhYzI2
MjlhYzg2YzdmZGQ0MGI4YmE1MjllNDFjNWJmYTEwMDhiMy4uOTNhYzhiMTIxZDRkY2RiN2IxYTc4
NWRkOGI4ZTNkMWJhMTlmNDk2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU3lzdGVtVGltZUNocm9taXVtLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9jaHJvbWl1bS9TeXN0ZW1UaW1lQ2hyb21pdW0uY3BwCkBAIC0zMSwxNSArMzEsMTUgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKLSNpbmNsdWRl
ICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBHZXQgdGhl
IGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzIHNpbmNlIGVwb2NoLgogZG91YmxlIGN1cnJlbnRUaW1l
KCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1lKCk7CisgICAgcmV0
dXJuIFBsYXRmb3JtQnJpZGdlOjpjdXJyZW50VGltZSgpOwogfQogCiBmbG9hdCB1c2VySWRsZVRp
bWUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFi
bGVEYXRhT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRh
YmxlRGF0YU9iamVjdC5jcHAKaW5kZXggN2NiZjQyYzRhMzYxZjI0MWU0NDhmZDIwZTM2OTIxNmQx
ZjY4MGNkYy4uYTFhYzdkOTFlZjZiZTEzYjQ3YTAwYjA1MzkzYjQ4ODMyNGNmMTBiMiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9Xcml0YWJsZURhdGFP
YmplY3QuY3BwCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiV3JpdGFibGVEYXRhT2JqZWN0LmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgog
I2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBlcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdl
LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtODAsNyArODAsNyBAQCBib29sIFdyaXRh
YmxlRGF0YU9iamVjdDo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYg
ZGF0YSkKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgY3VycmVudGx5IHVuaW1wbGVtZW50ZWQg
b24gdGhlIENocm9taXVtLXNpZGUuIFRoaXMgaXMKICAgICAgICAgLy8gIm9rYXkiIGZvciBub3cg
c2luY2UgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGRpZG4ndCBzdXBwb3J0IGl0CiAgICAg
ICAgIC8vIGFueXdheS4gR29pbmcgZm9yd2FyZCwgdGhpcyBpcyBzb21ldGhpbmcgd2UnbGwgbmVl
ZCB0byBmaXggdGhvdWdoLgotICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVE
YXRhKHR5cGUsIGRhdGEsICIiKTsKKyAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdy
aXRlRGF0YSh0eXBlLCBkYXRhLCAiIik7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAg
ICBtX2RhdGFNYXAuc2V0KHR5cGUsIGRhdGEpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250
TG9hZGluZy5tbQppbmRleCA3MmUzMzY5ZmQxMTUwOTY4ODJkNWI3OTA0NmIyMDJjMzI3ODU1ODA1
Li4yMjdmYmU0YjRmYjFhNjYwNjBiYmJiMTc4MThiYmUxYWI4ZTllYzU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250
TG9hZGluZy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQpAQCAtMzAsNyArMzAsNyBAQAogI2ltcG9ydCAi
Q3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCIKIAogI2ltcG9ydCAiLi4vZ3JhcGhpY3MvY29jb2Ev
Rm9udFBsYXRmb3JtRGF0YS5oIgotI2ltcG9ydCAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbXBvcnQg
IlBsYXRmb3JtQnJpZGdlLmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNGb250Lmg+CiAjaW1wb3J0IDx3
dGYvSGFzaE1hcC5oPgogCkBAIC04Nyw3ICs4Nyw3IEBAIFBhc3NSZWZQdHI8TWVtb3J5QWN0aXZh
dGVkRm9udD4gbG9hZEZvbnRGcm9tQnJvd3NlclByb2Nlc3MoTlNGb250KiBuc0ZvbnQpCiB7CiAg
ICAgQVRTRm9udENvbnRhaW5lclJlZiBjb250YWluZXI7CiAgICAgLy8gU2VuZCBjcm9zcy1wcm9j
ZXNzIHJlcXVlc3QgdG8gbG9hZCBmb250LgotICAgIGlmICghQ2hyb21pdW1CcmlkZ2U6OmxvYWRG
b250KG5zRm9udCwgJmNvbnRhaW5lcikpCisgICAgaWYgKCFQbGF0Zm9ybUJyaWRnZTo6bG9hZEZv
bnQobnNGb250LCAmY29udGFpbmVyKSkKICAgICAgICAgcmV0dXJuIDA7CiAgICAgCiAgICAgQVRT
Rm9udENvbnRhaW5lclJlZiBzcmNGb250Q29udGFpbmVyUmVmID0gZm9udENvbnRhaW5lclJlZkZy
b21OU0ZvbnQobnNGb250KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAppbmRl
eCAyYzc5ODE1YjE2YTZhMDg0YzU5OGQ1NDBkMWNkYTRmOWE0NDgwYzQxLi43MzJjYzlmOTVmM2Nm
MzRiMGJmMDMyOTM0OWNlNTg3N2Y4OTRkYjVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21p
dW1XaW4uY3BwCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJGb250Q2FjaGUuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVk
ZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRVdGlsc0Nocm9taXVtV2luLmgiCiAjaW5jbHVkZSAi
SGFzaE1hcC5oIgogI2luY2x1ZGUgIkhhc2hTZXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRn
ZS5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8dW5pY29kZS91bmlz
ZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yODgsNyArMjg4LDcg
QEAgc3RhdGljIGJvb2wgZm9udENvbnRhaW5zQ2hhcmFjdGVyKGNvbnN0IEZvbnRQbGF0Zm9ybURh
dGEqIGZvbnREYXRhLAogICAgIEhEQyBoZGMgPSBHZXREQygwKTsKICAgICBIR0RJT0JKIG9sZEZv
bnQgPSBzdGF0aWNfY2FzdDxIRk9OVD4oU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpKTsKICAgICBp
bnQgY291bnQgPSBHZXRGb250VW5pY29kZVJhbmdlcyhoZGMsIDApOwotICAgIGlmIChjb3VudCA9
PSAwICYmIENocm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGhmb250KSkKKyAgICBpZiAo
Y291bnQgPT0gMCAmJiBQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChoZm9udCkpCiAg
ICAgICAgIGNvdW50ID0gR2V0Rm9udFVuaWNvZGVSYW5nZXMoaGRjLCAwKTsKICAgICBpZiAoY291
bnQgPT0gMCkgewogICAgICAgICBMT0dfRVJST1IoIlVuYWJsZSB0byBnZXQgdGhlIGZvbnQgdW5p
Y29kZSByYW5nZSBhZnRlciBzZWNvbmQgYXR0ZW1wdCIpOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHN0
YXRpYyB2b2lkIEZpbGxMb2dGb250KGNvbnN0IEZvbnREZXNjcmlwdGlvbiYgZm9udERlc2NyaXB0
aW9uLCBMT0dGT05UKiB3aW5mb250CiAgICAgd2luZm9udC0+bGZTdHJpa2VPdXQgPSBmYWxzZTsK
ICAgICB3aW5mb250LT5sZkNoYXJTZXQgPSBERUZBVUxUX0NIQVJTRVQ7CiAgICAgd2luZm9udC0+
bGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7Ci0gICAgd2luZm9udC0+bGZRdWFs
aXR5ID0gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPyBOT05BTlRJQUxJQVNFRF9R
VUFMSVRZIDogREVGQVVMVF9RVUFMSVRZOyAvLyBIb25vciB1c2VyJ3MgZGVza3RvcCBzZXR0aW5n
cy4KKyAgICB3aW5mb250LT5sZlF1YWxpdHkgPSBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1v
ZGUoKSA/IE5PTkFOVElBTElBU0VEX1FVQUxJVFkgOiBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9y
IHVzZXIncyBkZXNrdG9wIHNldHRpbmdzLgogICAgIHdpbmZvbnQtPmxmUGl0Y2hBbmRGYW1pbHkg
PSBERUZBVUxUX1BJVENIIHwgRkZfRE9OVENBUkU7CiAgICAgd2luZm9udC0+bGZJdGFsaWMgPSBm
b250RGVzY3JpcHRpb24uaXRhbGljKCk7CiAgICAgd2luZm9udC0+bGZXZWlnaHQgPSB0b0dESUZv
bnRXZWlnaHQoZm9udERlc2NyaXB0aW9uLndlaWdodCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4LmNw
cAppbmRleCBiZDMzOTI3ZmI5OWI5YTlmZmViNzYzNWIwZTM2MmM5Y2ZhYzRmYTQyLi5hODQ5YTZj
NmY3Zjk3Njk0OWU3MDkzZTBmMjEzNzk4MGE2MTNiYWFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXgu
Y3BwCkBAIC0zMSwxMiArMzEsMTIgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJG
b250Q2FjaGUuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9y
bURhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRh
LmgiCiAKICNpbmNsdWRlICJTa1BhaW50LmgiCkBAIC01Nyw3ICs1Nyw3IEBAIGNvbnN0IFNpbXBs
ZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyhjb25zdCBGb250
JiBmb250LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpCiB7Ci0gICAg
U3RyaW5nIGZhbWlseSA9IENocm9taXVtQnJpZGdlOjpnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVy
cyhjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFN0cmluZyBmYW1pbHkgPSBQbGF0Zm9ybUJyaWRn
ZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKTsKICAgICBp
ZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21p
dW1XaW4uY3BwCmluZGV4IDFhMDA4MzNmZWVjYjJmM2E4NDJmYjljZTk5OWE2YjFmOTBkYTAwZDIu
LjVkYTRkNWEyNGIyM2ZkYjFlY2RiZDAwMzBhMzU5YzIzMDAzOTBiYjIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENo
cm9taXVtV2luLmNwcApAQCAtMzIsMTAgKzMyLDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiRm9udC5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRl
ICJGb250RmFsbGJhY2tMaXN0LmgiCiAjaW5jbHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVk
ZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAj
aW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKQEAgLTQyNCw3ICs0MjQsNyBAQCB2b2lkIEZvbnQ6OmRy
YXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBncmFwaGljc0NvbnRleHQsCiAgICAgICAgICAgICBz
dWNjZXNzID0gcGFpbnRlci5kcmF3R2x5cGhzKGN1ckxlbiwgJmdseXBoc1swXSwgJmFkdmFuY2Vz
WzBdLCBjdXJBZHZhbmNlKTsKICAgICAgICAgICAgIGlmICghc3VjY2VzcyAmJiBleGVjdXRpb25z
ID09IDApIHsKICAgICAgICAgICAgICAgICAvLyBBc2sgdGhlIGJyb3dzZXIgdG8gbG9hZCB0aGUg
Zm9udCBmb3IgdXMgYW5kIHJldHJ5LgotICAgICAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpl
bnN1cmVGb250TG9hZGVkKGZvbnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkpOworICAgICAgICAg
ICAgICAgIFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZvbnQtPnBsYXRmb3JtRGF0
YSgpLmhmb250KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9t
aXVtV2luLmNwcAppbmRleCBkNmM4M2VjZGZhMGI4OGJkYTk1ZDZlYWFlNmIzNmE1NzkxNjIzZWJi
Li4xMDIyYTlmZjhjZjEyYWI0ZDhiMDYzNGJmMzE5M2RkOTc2YTE1OTI4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRh
Q2hyb21pdW1XaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5jcHAKQEAgLTM2LDcgKzM2LDcgQEAK
ICNpbmNsdWRlIDxvYmppZGwuaD4KICNpbmNsdWRlIDxtbGFuZy5oPgogCi0jaW5jbHVkZSAiQ2hy
b21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNr
aWFGb250V2luLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTEzNiw3ICsxMzYsNyBAQCBT
Q1JJUFRfRk9OVFBST1BFUlRJRVMqIEZvbnRQbGF0Zm9ybURhdGE6OnNjcmlwdEZvbnRQcm9wZXJ0
aWVzKCkgY29uc3QKICAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBTY3JpcHRHZXRGb250UHJvcGVy
dGllcyhkYywgc2NyaXB0Q2FjaGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKTsKICAgICAgICAgICAgIGlm
IChTX09LICE9IGhyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENocm9taXVtQnJpZGdlOjplbnN1
cmVGb250TG9hZGVkKGhmb250KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKFBsYXRmb3JtQnJp
ZGdlOjplbnN1cmVGb250TG9hZGVkKGhmb250KCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28gZmFp
bHMuCiAgICAgICAgICAgICAgICAgICAgIGhyID0gU2NyaXB0R2V0Rm9udFByb3BlcnRpZXMoZGMs
IHNjcmlwdENhY2hlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3Jt
RGF0YUxpbnV4LmNwcAppbmRleCA0Mjk0MmNjYWQwMGJkYjUxNTRmMzc3NzY4YjI5Y2Y3MjM4NDZk
ZGRiLi5hMWVhMDEyZWFlYjU0Njg0YzAwMzc0ZmIwNWU2YmYxNzQ5ZmUzZmE2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1E
YXRhTGludXguY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKQEAgLTMxLDkgKzMxLDkgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJGb250UGxhdGZvcm1EYXRhLmgiCiAKLSNpbmNsdWRlICJD
aHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkhhcmZidXp6U2tpYS5oIgogI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybVN0cmluZy5oIgogCiAjaW5jbHVkZSAiU2tQYWludC5oIgpAQCAtMjI5LDcgKzIyOSw3
IEBAIHZvaWQgRm9udFBsYXRmb3JtRGF0YTo6cXVlcnlTeXN0ZW1Gb3JSZW5kZXJTdHlsZSgpCiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDaHJvbWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5
bGVGb3JTdHJpa2UobV9mYW1pbHkuZGF0YSgpLCAoKChpbnQpbV90ZXh0U2l6ZSkgPDwgMikgfCAo
bV90eXBlZmFjZS0+c3R5bGUoKSAmIDMpLCAmbV9zdHlsZSk7CisgICAgUGxhdGZvcm1CcmlkZ2U6
OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKG1fZmFtaWx5LmRhdGEoKSwgKCgoaW50KW1fdGV4dFNp
emUpIDw8IDIpIHwgKG1fdHlwZWZhY2UtPnN0eWxlKCkgJiAzKSwgJm1fc3R5bGUpOwogfQogCiB9
ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9k
ZUNocm9taXVtV2luLmNwcAppbmRleCBlNzFmNjZhOTY4MjI0Yjg1MzE5N2E3MzZkNDVjNTE5YmFh
ZDE0NGJmLi4wN2U1NzQyYTUzZGE0ZmUyZmU4OGQ5M2E5YWRkN2JiOTE1NWU1MmU1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VU
cmVlTm9kZUNocm9taXVtV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jaHJvbWl1bS9HbHlwaFBhZ2VUcmVlTm9kZUNocm9taXVtV2luLmNwcApAQCAtMzIsOSAr
MzIsOSBAQAogI2luY2x1ZGUgPHdpbmRvd3MuaD4KICNpbmNsdWRlIDx2ZWN0b3I+CiAKLSNpbmNs
dWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJHbHlw
aFBhZ2VUcmVlTm9kZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAi
U2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRlICJVbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgiCiAj
aW5jbHVkZSAiV2luZG93c1ZlcnNpb24uaCIKQEAgLTgwLDcgKzgwLDcgQEAgc3RhdGljIGJvb2wg
ZmlsbEJNUEdseXBocyh1bnNpZ25lZCBvZmZzZXQsCiAgICAgICAgIFJlbGVhc2VEQygwLCBkYyk7
CiAKICAgICAgICAgaWYgKHJlY3Vyc2UpIHsKLSAgICAgICAgICAgIGlmIChDaHJvbWl1bUJyaWRn
ZTo6ZW5zdXJlRm9udExvYWRlZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSkpCisg
ICAgICAgICAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoZm9udERhdGEt
PnBsYXRmb3JtRGF0YSgpLmhmb250KCkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmaWxsQk1Q
R2x5cGhzKG9mZnNldCwgbGVuZ3RoLCBidWZmZXIsIHBhZ2UsIGZvbnREYXRhLCBmYWxzZSk7CiAg
ICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBmaWxsRW1wdHlHbHlwaHMocGFnZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9J
bWFnZUNocm9taXVtLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlQ2hyb21pdW0uY3BwCmluZGV4IGU5MGQ1NjY0NzUxMzFlOTVlMzhkMmU5MmIxYzcz
NzllZGU3MDUzOGEuLmUyYjZmN2EzNThlZjBhOGNkOGFlYWY4ZjlhMGI3ZmE0NzQ4OGIzYzAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdl
Q2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ltYWdlQ2hyb21pdW0uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0z
OSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxJbWFnZT4gSW1h
Z2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0gICAgcmV0dXJu
IENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKG5hbWUpOworICAgIHJl
dHVybiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZShuYW1lKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMubW0KaW5kZXgg
MDczYTQwOTY4NGE0YTJiMmYwMzY3ZGQwYzAxZGJlZDY5MDMxMWNkZS4uZjAwMzg5NGU0YWM1ZWU5
Yjg0NmVmMWRkNDk1NThmNGRhY2VhMjY0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bU1hYy5tbQorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtTWFjLm1tCkBA
IC0zMywxNCArMzMsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
UGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIq
IG5hbWUpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJl
c291cmNlKG5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1h
Z2VSZXNvdXJjZShuYW1lKTsKIH0KIAogLy8gRklYTUU6IFRoZXNlIGFyZSB0ZW1wb3Jhcnkgc3R1
YnMsIHdlIG5lZWQgcmVhbCBpbXBsZW1lbnRhdGlvbnMgd2hpY2gKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21p
dW1XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2lt
cGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAKaW5kZXggMjA0YzU2NWViOTUwZTE2OTcwYjI3MzBh
YzExZWIxMTRlZjE1N2VlOC4uYzIzYzU4NmI5MDY1ZTNkYjA3N2RjN2JiMzkxOGIzOWE3NWJlOTlj
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
U2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAKQEAgLTMy
LDExICszMiwxMSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnRE
YXRhLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVj
dC5oIgogI2luY2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRl
ICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpbmNsdWRl
IDx1bmljb2RlL3VjaGFyLmg+CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtSW5pdCgpCiAKICAgICBURVhUTUVUUklDIHRleHRNZXRyaWMgPSB7MH07CiAgICAg
aWYgKCFHZXRUZXh0TWV0cmljcyhkYywgJnRleHRNZXRyaWMpKSB7Ci0gICAgICAgIGlmIChDaHJv
bWl1bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgewor
ICAgICAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQobV9wbGF0Zm9ybURh
dGEuaGZvbnQoKSkpIHsKICAgICAgICAgICAgIC8vIFJldHJ5IEdldFRleHRNZXRyaWNzLgogICAg
ICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBncmFjZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNh
bGwgYWxzbyBmYWlscy4KICAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vY3JidWcuY29tLzY0MDEu
CkBAIC0xNTksNyArMTU5LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2go
KQogICAgIC8vIGlzICpub3QqIGZpeGVkIHBpdGNoLiAgVW5iZWxpZXZhYmxlIGJ1dCB0cnVlLgog
ICAgIFRFWFRNRVRSSUMgdGV4dE1ldHJpYyA9IHswfTsKICAgICBpZiAoIUdldFRleHRNZXRyaWNz
KGRjLCAmdGV4dE1ldHJpYykpIHsKLSAgICAgICAgaWYgKENocm9taXVtQnJpZGdlOjplbnN1cmVG
b250TG9hZGVkKG1fcGxhdGZvcm1EYXRhLmhmb250KCkpKSB7CisgICAgICAgIGlmIChQbGF0Zm9y
bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgewogICAg
ICAgICAgICAgLy8gUmV0cnkgR2V0VGV4dE1ldHJpY3MuCiAgICAgICAgICAgICAvLyBGSVhNRTog
SGFuZGxlIGdyYWNlZnVsbHkgdGhlIGVycm9yIGlmIHRoaXMgY2FsbCBhbHNvIGZhaWxzLgogICAg
ICAgICAgICAgLy8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vNjQwMS4KQEAgLTE5MCw3ICsxOTAsNyBA
QCBmbG9hdCBTaW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdseXBoKEdseXBoIGdseXBo
KSBjb25zdAogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaWYgKCFHZXRDaGFyV2lkdGhJKGRjLCBn
bHlwaCwgMSwgMCwgJndpZHRoKSkgewogICAgICAgICAvLyBBc2sgdGhlIGJyb3dzZXIgdG8gcHJl
bG9hZCB0aGUgZm9udCBhbmQgcmV0cnkuCi0gICAgICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6ZW5z
dXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgeworICAgICAgICBpZiAoUGxh
dGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSkpIHsK
ICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhp
cyBjYWxsIGFsc28gZmFpbHMuCiAgICAgICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS82
NDAxLgogICAgICAgICAgICAgaWYgKCFHZXRDaGFyV2lkdGhJKGRjLCBnbHlwaCwgMSwgMCwgJndp
ZHRoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAKaW5kZXggZjgwMWMx
MzBhOThiODkzNzllOWY4NDdjMTBmNzhiMTM2ZWQzNmIzNi4uNTkyY2RmMjQyOWYyNWI1MDE4YmQz
YzY1NzU2OWNiZDE2ZWUwNGQwZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1
bi5jcHAKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJV
bmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgog
I2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUg
IlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc5LDcgKzc5LDcg
QEAgdm9pZCBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuOjp0cnlUb1ByZWxvYWRGb250KEhGT05UIGZv
bnQpCiAgICAgLy8gQXNrIHRoZSBicm93c2VyIHRvIGdldCB0aGUgZm9udCBtZXRyaWNzIGZvciB0
aGlzIGZvbnQuCiAgICAgLy8gVGhhdCB3aWxsIHByZWxvYWQgdGhlIGZvbnQgYW5kIGl0IHNob3Vs
ZCBub3cgYmUgYWNjZXNzaWJsZQogICAgIC8vIGZyb20gdGhlIHJlbmRlcmVyLgotICAgIENocm9t
aXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZvbnQpOworICAgIFBsYXRmb3JtQnJpZGdlOjpl
bnN1cmVGb250TG9hZGVkKGZvbnQpOwogfQogCiBib29sIFVuaXNjcmliZUhlbHBlclRleHRSdW46
Om5leHRXaW5Gb250RGF0YSgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCmluZGV4IGU5
NGM0MTcxM2I5YzQxZWExZDYyMWYyZTllMzYxMWVlODFjYTY3MzQuLjBiMzFkZmE4YTA5ZjBkYWI5
N2IwODhjMGRmMzE0NjQwYWE1N2IwZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1EYXRhLmNw
cApAQCAtMzUsOCArMzUsOCBAQAogCiAjaWYgT1MoV0lORE9XUykKICNpbmNsdWRlICJCYXNlNjQu
aCIKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIk9wZW5UeXBlVXRpbGl0
aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNlbGlmIE9TKExJTlVYKSB8fCBP
UyhGUkVFQlNEKSB8fCBQTEFURk9STShCUkVXTVApCiAjaW5jbHVkZSAiU2tTdHJlYW0uaCIKICNl
bmRpZgpAQCAtOTEsNyArOTEsNyBAQCBGb250UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9y
bURhdGE6OmZvbnRQbGF0Zm9ybURhdGEoaW50IHNpemUsIGJvb2wgYm9sZCwgYgogICAgIGxvZ0Zv
bnQubGZTdHJpa2VPdXQgPSBmYWxzZTsKICAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRf
Q0hBUlNFVDsKICAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lT
OwotICAgIGxvZ0ZvbnQubGZRdWFsaXR5ID0gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2Rl
KCkgPworICAgIGxvZ0ZvbnQubGZRdWFsaXR5ID0gUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RN
b2RlKCkgPwogICAgICAgICAgICAgICAgICAgICAgICAgTk9OQU5USUFMSUFTRURfUVVBTElUWSA6
CiAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIn
cyBkZXNrdG9wIHNldHRpbmdzLgogICAgIGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IERFRkFV
TFRfUElUQ0ggfCBGRl9ET05UQ0FSRTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKaW5kZXgg
ZTE3ODE2YWY4MmFkZmVmZTE2ZWM3ZWRjODNkMjUxZDI3NmE1NmQwNi4uMmYyNDg5YjZiNjlmYjg4
ODc1NTUxNTljMzUwM2EyZTAwM2E4YWMzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAK
QEAgLTMyLDM5ICszMiwzOSBAQAogI2luY2x1ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAi
Q29va2llLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVu
dC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogdm9pZCBzZXRDb29raWVzKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBj
b25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIENocm9taXVtQnJpZGdlOjpzZXRDb29raWVzKGRv
Y3VtZW50LCB1cmwsIHZhbHVlKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6c2V0Q29va2llcyhkb2N1
bWVudCwgdXJsLCB2YWx1ZSk7CiB9CiAKIFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6
Y29va2llcyhkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmNvb2tp
ZXMoZG9jdW1lbnQsIHVybCk7CiB9CiAKIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRW
YWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICBy
ZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3Vt
ZW50LCB1cmwpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6Y29va2llUmVxdWVzdEhlYWRl
ckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVybCk7CiB9CiAKIGJvb2wgY29va2llc0VuYWJsZWQoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y29v
a2llc0VuYWJsZWQoZG9jdW1lbnQpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6Y29va2ll
c0VuYWJsZWQoZG9jdW1lbnQpOwogfQogCiBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVz
KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6cmF3Q29va2llcyhkb2N1bWVudCwgdXJs
LCByYXdDb29raWVzKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnJhd0Nvb2tpZXMoZG9j
dW1lbnQsIHVybCwgcmF3Q29va2llcyk7CiB9CiAKIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5h
bWUpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpkZWxldGVDb29raWUoZG9jdW1lbnQs
IHVybCwgY29va2llTmFtZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpkZWxldGVDb29r
aWUoZG9jdW1lbnQsIHVybCwgY29va2llTmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0v
RE5TQ2hyb21pdW0uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1
bS9ETlNDaHJvbWl1bS5jcHAKaW5kZXggMjFmY2Q0NmM4NzI2NmVlYTM1ZTc3OWQ4Yjc1NGI3OTgz
Yzc2M2RkZi4uN2I5ZWFjNTdkODU5MDYzYmMzZDhjOTFhZWU0Y2ZiNjM2MDY1MzE4ZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9ETlNDaHJvbWl1
bS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9ETlND
aHJvbWl1bS5jcHAKQEAgLTI2LDE0ICsyNiwxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkROUy5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdm9pZCBwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQog
ewotICAgIENocm9taXVtQnJpZGdlOjpwcmVmZXRjaEROUyhob3N0bmFtZSk7CisgICAgUGxhdGZv
cm1CcmlkZ2U6OnByZWZldGNoRE5TKGhvc3RuYW1lKTsKIH0KIAogdm9pZCBSZXNvdXJjZUhhbmRs
ZTo6cHJlcGFyZUZvclVSTChjb25zdCBLVVJMJiB1cmwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZS5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vcXQvUGxhdGZvcm1CcmlkZ2UuaAppbmRleCBlNDc4ZDhmNDFhMTE3NDlkOTE0NDkzNmFiNjI4
MTBjOWVmNzJmZTc3Li45NjQ3NTA3ZjkzY2U5ODlmMzVjMTM4NTAwZWYzNmI3Y2NmMzhkOWYxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtQnJpZGdlLmgKQEAgLTg2LDcg
Kzg2LDcgQEAgY2xhc3MgV2lkZ2V0OwogCiAvLyBBbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGlu
ZyBsYXllciwgd2hpY2ggaGFzIHRoZSBhYmlsaXR5IHRvIGFuc3dlcgogLy8gcXVlc3Rpb25zIGFi
b3V0IHRoZSBzeXN0ZW0gYW5kIHNvIG9uLi4uCi0vLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBD
aHJvbWl1bUJyaWRnZSBhbmQgdGhlIHR3byBhcmUgbGlrZWx5IHRvIGNvbnZlcmdlCisvLyBUaGlz
IGlzIHZlcnkgc2ltaWxhciB0byBjaHJvbWl1bS9QbGF0Zm9ybUJyaWRnZSBhbmQgdGhlIHR3byBh
cmUgbGlrZWx5IHRvIGNvbnZlcmdlCiAvLyBpbiB0aGUgZnV0dXJlLgogY2xhc3MgUGxhdGZvcm1C
cmlkZ2UgewogcHVibGljOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3Fs
L2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcAppbmRleCAw
YTA5ODg4M2Q5ZGZkOWVhZjBlZTNiMmNjMTNjMzJhNjc0OTc4MjQ5Li5iNzllYjFhMjBkMDRiYzU4
MzhkOGU1MmU3NTA3MzU4YTE2ZTcwYWQ0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVt
LmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNR
TGl0ZUZpbGVTeXN0ZW0uaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJTUUxpdGVEYXRhYmFzZS5oIgogI2luY2x1
ZGUgPHNxbGl0ZTMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC05MiwxMiAr
OTIsMTIgQEAgYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVFbXB0eURhdGFiYXNlRGlyZWN0
b3J5KGNvbnN0IFN0cmluZyYpCiAKIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJh
c2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5hbWUpCiB7Ci0gICAgcmV0dXJuIChDaHJvbWl1bUJy
aWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKSA9PSBTUUxJVEVfT0spOworICAgIHJl
dHVybiAoUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSkgPT0gU1FM
SVRFX09LKTsKIH0KIAogbG9uZyBsb25nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmls
ZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFtZSkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1Ccmlk
Z2U6OmRhdGFiYXNlR2V0RmlsZVNpemUoZmlsZU5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybUJy
aWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShmaWxlTmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1
bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtUG9zaXguY3BwCmluZGV4
IDExMDJkZjViZDU0NjVjNmNmYjE0NTFmMjhjNDZmOTY4OTRhNmM2YjguLjM3Zjk2YmU2OWIwYTdl
YTgyMTBjOWU1NTZkOWExZmZmMGY5NzdkNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1D
aHJvbWl1bVBvc2l4LmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdl
LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlIDxzcWxpdGUzLmg+CiAK
ICNpbmNsdWRlIDxlcnJuby5oPgpAQCAtOTk2LDEwICs5OTYsMTAgQEAgc3RhdGljIGludCBjaHJv
bWl1bU9wZW4oc3FsaXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogZmlsZU5hbWUsCiAgICAgfQog
CiAgICAgaWYgKGZkIDwgMCkgewotICAgICAgICBmZCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFz
ZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOworICAgICAgICBmZCA9IFBsYXRmb3Jt
QnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOwogICAgICAg
ICBpZiAoKGZkIDwgMCkgJiYgKGRlc2lyZWRGbGFncyAmIFNRTElURV9PUEVOX1JFQURXUklURSkp
IHsKICAgICAgICAgICAgIGludCBuZXdGbGFncyA9IChkZXNpcmVkRmxhZ3MgJiB+KFNRTElURV9P
UEVOX1JFQURXUklURSB8IFNRTElURV9PUEVOX0NSRUFURSkpIHwgU1FMSVRFX09QRU5fUkVBRE9O
TFk7Ci0gICAgICAgICAgICBmZCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZp
bGVOYW1lLCBuZXdGbGFncyk7CisgICAgICAgICAgICBmZCA9IFBsYXRmb3JtQnJpZGdlOjpkYXRh
YmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBuZXdGbGFncyk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
aWYgKGZkIDwgMCkgewpAQCAtMTAzMSw3ICsxMDMxLDcgQEAgc3RhdGljIGludCBjaHJvbWl1bU9w
ZW4oc3FsaXRlM192ZnMqIHZmcywgY29uc3QgY2hhciogZmlsZU5hbWUsCiAvLyAgICAgICAgICAg
c2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIgdGhlIGZpbGUgaXMgZGVsZXRlZC4KIHN0YXRpYyBpbnQg
Y2hyb21pdW1EZWxldGUoc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IHN5
bmNEaXIpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUo
ZmlsZU5hbWUsIHN5bmNEaXIpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VE
ZWxldGVGaWxlKGZpbGVOYW1lLCBzeW5jRGlyKTsKIH0KIAogLy8gQ2hlY2sgdGhlIGV4aXN0YW5j
ZSBhbmQgc3RhdHVzIG9mIHRoZSBnaXZlbiBmaWxlLgpAQCAtMTA0Miw3ICsxMDQyLDcgQEAgc3Rh
dGljIGludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1l
LCBpbnQgc3luY0RpcikKIC8vIHJlcyAtIHRoZSByZXN1bHQuCiBzdGF0aWMgaW50IGNocm9taXVt
QWNjZXNzKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQq
IHJlcykKIHsKLSAgICBpbnQgYXR0ciA9IHN0YXRpY19jYXN0PGludD4oQ2hyb21pdW1CcmlkZ2U6
OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpKTsKKyAgICBpbnQgYXR0ciA9IHN0
YXRpY19jYXN0PGludD4oUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMo
ZmlsZU5hbWUpKTsKICAgICBpZiAoYXR0ciA8IDApIHsKICAgICAgICAgKnJlcyA9IDA7CiAgICAg
ICAgIHJldHVybiBTUUxJVEVfT0s7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4u
Y3BwCmluZGV4IGQ4NDZhZjdkZjcxMGI5YTI0YTVhNzZmNTNhMzQ1NWE3NzgzYzhlZDkuLjQ3ZTAx
ZDBkODRkOTRkODIwNGU5ZjcyZTYxNjg5ZDMxZGY3Yjg2N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxl
U3lzdGVtQ2hyb21pdW1XaW4uY3BwCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgPHNxbGl0ZTMu
aD4KICNpbmNsdWRlIDx3aW5kb3dzLmg+CiAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIHsK
IGludCBjaHJvbWl1bU9wZW4oc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwKICAg
ICAgICAgICAgICAgICAgc3FsaXRlM19maWxlKiBpZCwgaW50IGRlc2lyZWRGbGFncywgaW50KiB1
c2VkRmxhZ3MpCiB7Ci0gICAgSEFORExFIGggPSBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VPcGVu
RmlsZShmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsKKyAgICBIQU5ETEUgaCA9IFBsYXRmb3JtQnJp
ZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOwogICAgIGlmICho
ID09IElOVkFMSURfSEFORExFX1ZBTFVFKSB7CiAgICAgICAgIGlmIChkZXNpcmVkRmxhZ3MgJiBT
UUxJVEVfT1BFTl9SRUFEV1JJVEUpIHsKICAgICAgICAgICAgIGludCBuZXdGbGFncyA9IChkZXNp
cmVkRmxhZ3MgfCBTUUxJVEVfT1BFTl9SRUFET05MWSkgJiB+U1FMSVRFX09QRU5fUkVBRFdSSVRF
OwpAQCAtODIsNyArODIsNyBAQCBpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiwgY29uc3Qg
Y2hhciogZmlsZU5hbWUsCiAvLyAgICAgICAgICAgc2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIgdGhl
IGZpbGUgaXMgZGVsZXRlZC4KIGludCBjaHJvbWl1bURlbGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0
IGNoYXIqIGZpbGVOYW1lLCBpbnQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpkYXRh
YmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGF0
YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKTsKIH0KIAogLy8gQ2hlY2sgdGhlIGV4aXN0YW5jZSBh
bmQgc3RhdHVzIG9mIHRoZSBnaXZlbiBmaWxlLgpAQCAtOTMsNyArOTMsNyBAQCBpbnQgY2hyb21p
dW1EZWxldGUoc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50KQogLy8gcmVz
IC0gdGhlIHJlc3VsdC4KIGludCBjaHJvbWl1bUFjY2VzcyhzcWxpdGUzX3ZmcyosIGNvbnN0IGNo
YXIqIGZpbGVOYW1lLCBpbnQgZmxhZywgaW50KiByZXMpCiB7Ci0gICAgRFdPUkQgYXR0ciA9IENo
cm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKTsKKyAgICBE
V09SRCBhdHRyID0gUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmls
ZU5hbWUpOwogICAgIHN3aXRjaCAoZmxhZykgewogICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFE
OgogICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19FWElTVFM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2Nocm9taXVtL1BsdWdpbkRhdGFDaHJvbWl1bS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2Nocm9taXVtL1BsdWdpbkRhdGFDaHJvbWl1bS5jcHAKaW5kZXggYzkyNDA2
M2Q2ZmIxMzJhYTg4Yzc5OTg0ZjIxYTRhY2M3N2VlYTliMy4uNzdjZGJiZjUyNjBlMjIzNWZlYTVh
NDExY2EzNGQ5MThkNTRkYjBjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGx1Z2lucy9j
aHJvbWl1bS9QbHVnaW5EYXRhQ2hyb21pdW0uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsdWdp
bnMvY2hyb21pdW0vUGx1Z2luRGF0YUNocm9taXVtLmNwcApAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFDaHJvbWl1bS5oIgogCi0jaW5j
bHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucygpCiAgICAgewogICAgICAgICBpZiAoIW1fbG9h
ZGVkKSB7Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6cGx1Z2lucyhtX3JlZnJlc2gsICZt
X3BsdWdpbnMpOworICAgICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnBsdWdpbnMobV9yZWZyZXNo
LCAmbV9wbHVnaW5zKTsKICAgICAgICAgICAgIG1fbG9hZGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IG1fcmVmcmVzaCA9IGZhbHNlOwogICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCmluZGV4IDAyZWIxMzRiZDU0MzE1NGEw
ZjM2MDA0MjAyMmU0ZDdkMmYzZDM3MTUuLjEwMjg1YWMwMTJiZDM4NmUyZTc4ZDJhNjVhNGIwNzRk
NzExYTcyN2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtTWFjLm1tCkBAIC0yMCw4ICsyMCw4IEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgog
I2ltcG9ydCAiUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oIgotI2ltcG9ydCAiQ2hyb21pdW1Ccmlk
Z2UuaCIKICNpbXBvcnQgIlBhaW50SW5mby5oIgorI2ltcG9ydCAiUGxhdGZvcm1CcmlkZ2UuaCIK
ICNpbXBvcnQgIlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIgogI2ltcG9ydCAiVXNlckFn
ZW50U3R5bGVTaGVldHMuaCIKICNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KQEAgLTcxLDcgKzcx
LDcgQEAgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVDaHJvbWl1bU1hYzo6Y3Jl
YXRlKCkKIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjp1c2VzVGVzdE1vZGVGb2N1c1Jp
bmdDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0
TW9kZSgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKTsKIH0K
IAogTlNWaWV3KiBSZW5kZXJUaGVtZUNocm9taXVtTWFjOjpkb2N1bWVudFZpZXdGb3IoUmVuZGVy
T2JqZWN0KikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJUaGVtZUNocm9taXVtU2tpYS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVDaHJvbWl1bVNraWEuY3BwCmluZGV4IGJiNjBjMWY3NzFiNTA0ZDYyOTIyMTQwODAwZTY1
NWExYmExNjM3ZTUuLjE0NTc3NjYwNWU3ODhjMmY1YzRjYmZlZGQ5ZGE5MjNhMzc1Y2JmNTYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tp
YS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1T
a2lhLmNwcApAQCAtMjQsNyArMjQsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlJlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDdXJyZW50VGltZS5o
IgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgpAQCAtMzMsNiArMzIsNyBAQAogI2luY2x1
ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRl
ICJQYWludEluZm8uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaCIKQEAgLTE4NSw3ICsxODUsNyBAQCBkb3VibGUg
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZhbCgpIGNvbnN0CiB7CiAg
ICAgLy8gRGlzYWJsZSB0aGUgYmxpbmtpbmcgY2FyZXQgaW4gbGF5b3V0IHRlc3QgbW9kZSwgYXMg
aXQgaW50cm9kdWNlcwogICAgIC8vIGEgcmFjZSBjb25kaXRpb24gZm9yIHRoZSBwaXhlbCB0ZXN0
cy4gaHR0cDovL2IvMTE5ODQ0MAotICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1v
ZGUoKSkKKyAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCiAgICAgICAg
IHJldHVybiAwOwogCiAgICAgcmV0dXJuIGNhcmV0QmxpbmtJbnRlcnZhbEludGVybmFsKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5j
cHAKaW5kZXggNWI0MWVhMjEzM2I3ZTg4MmExM2U5M2Q4YzNmMmRlNDQ5ZTMyYTBlMi4uNTI5Yjcx
MjBlNWI1NDkyZDcyYjc1ZTAwZTIzZjRhZTdmMDg0NWM3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcApAQCAtMzAsNyArMzAs
NiBAQAogI2luY2x1ZGUgPHZzc3ltMzIuaD4KIAogI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMu
aCIKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgi
CiAjaW5jbHVkZSAiRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRm9udFV0aWxzQ2hyb21pdW1X
aW4uaCIKQEAgLTM5LDYgKzM4LDcgQEAKICNpbmNsdWRlICJIVE1MTmFtZXMuaCIKICNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAi
UmVuZGVyUHJvZ3Jlc3MuaCIKICNpbmNsdWRlICJSZW5kZXJTbGlkZXIuaCIKQEAgLTIzOCw3ICsy
MzgsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN1cHBvcnRzRm9jdXNSaW5nKGNv
bnN0IFJlbmRlclN0eWxlKiBzdHlsZSkgY29uc3QKIAogQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1
bVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewot
ICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKKyAgICBpZiAoUGxhdGZv
cm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCiAgICAgICAgIHJldHVybiBDb2xvcigweDAwLCAw
eDAwLCAweGZmKTsgLy8gUm95YWwgYmx1ZS4KICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0Nv
bG9yKENPTE9SX0hJR0hMSUdIVCk7CiAgICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciks
IEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDB4ZmYpOwpAQCAtMjQ2LDcgKzI0
Niw3IEBAIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBsYXRmb3JtQWN0aXZlU2VsZWN0
aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIAogQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdp
bjo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0g
ICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQorICAgIGlmIChQbGF0Zm9y
bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKDB4OTksIDB4
OTksIDB4OTkpOyAvLyBNZWRpdW0gZ3JheS4KICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0Nv
bG9yKENPTE9SX0dSQVlURVhUKTsKICAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwg
R2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSwgMHhmZik7CkBAIC0yNTQsNyArMjU0
LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiAKIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1X
aW46OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAg
ICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCisgICAgaWYgKFBsYXRmb3Jt
QnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQogICAgICAgICByZXR1cm4gQ29sb3IoMHhmZiwgMHhm
ZiwgMHhjYyk7IC8vIFBhbGUgeWVsbG93LgogICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29s
b3IoQ09MT1JfSElHSExJR0hUVEVYVCk7CiAgICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xv
ciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDB4ZmYpOwpAQCAtMzc1LDcg
KzM3NSw3IEBAIHN0YXRpYyBpbnQgY3NzVmFsdWVJZFRvU3lzQ29sb3JJbmRleChpbnQgY3NzVmFs
dWVJZCkKIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN5c3RlbUNvbG9yKGludCBjc3NW
YWx1ZUlkKSBjb25zdAogewogICAgIGludCBzeXNDb2xvckluZGV4ID0gY3NzVmFsdWVJZFRvU3lz
Q29sb3JJbmRleChjc3NWYWx1ZUlkKTsKLSAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRl
c3RNb2RlKCkgfHwgKHN5c0NvbG9ySW5kZXggPT0gLTEpKQorICAgIGlmIChQbGF0Zm9ybUJyaWRn
ZTo6bGF5b3V0VGVzdE1vZGUoKSB8fCAoc3lzQ29sb3JJbmRleCA9PSAtMSkpCiAgICAgICAgIHJl
dHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7CiAKICAgICBDT0xPUlJF
RiBjb2xvciA9IEdldFN5c0NvbG9yKHN5c0NvbG9ySW5kZXgpOwpAQCAtNDExLDcgKzQxMSw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRCdXR0b24oUmVuZGVyT2JqZWN0KiBv
LCBjb25zdCBQYWludEluZm8mIGksIGNvCiAgICAgY29uc3QgVGhlbWVEYXRhJiB0aGVtZURhdGEg
PSBnZXRUaGVtZURhdGEobyk7CiAKICAgICBUaGVtZVBhaW50ZXIgcGFpbnRlcihpLmNvbnRleHQs
IHIpOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludEJ1dHRvbihwYWludGVyLmNvbnRleHQoKSwK
KyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24ocGFpbnRlci5jb250ZXh0KCksCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3BhcnQsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3N0YXRlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGVtZURhdGEubV9jbGFzc2ljU3RhdGUsCkBAIC00MjksNyArNDI5
LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFNsaWRlclRyYWNrKFJlbmRl
ck9iamVjdCogbywgY29uc3QgUGFpbnRJbmZvJgogICAgIGNvbnN0IFRoZW1lRGF0YSYgdGhlbWVE
YXRhID0gZ2V0VGhlbWVEYXRhKG8pOwogCiAgICAgVGhlbWVQYWludGVyIHBhaW50ZXIoaS5jb250
ZXh0LCByKTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUcmFja2JhcihwYWludGVyLmNvbnRl
eHQoKSwKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUcmFja2JhcihwYWludGVyLmNvbnRleHQo
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZURhdGEubV9wYXJ0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3N0YXRlLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSwK
QEAgLTQ0NCw3ICs0NDQsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2xp
ZGVyVGh1bWIoUmVuZGVyT2JqZWN0KiBvLCBjb25zdCBQYWludEluZm8mCiAKIHN0YXRpYyBpbnQg
bWVudUxpc3RCdXR0b25XaWR0aCgpCiB7Ci0gICAgc3RhdGljIGludCB3aWR0aCA9IENocm9taXVt
QnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpID8ga1N0YW5kYXJkTWVudUxpc3RCdXR0b25XaWR0aCA6
IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NST0xMKTsKKyAgICBzdGF0aWMgaW50IHdpZHRoID0g
UGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPyBrU3RhbmRhcmRNZW51TGlzdEJ1dHRv
bldpZHRoIDogR2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAgIHJldHVybiB3aWR0
aDsKIH0KIApAQCAtNDkyLDcgKzQ5Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
cGFpbnRNZW51TGlzdChSZW5kZXJPYmplY3QqIG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKIAogICAg
IC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIHRleHRmaWVsZCBhbmQgcGFpbnQg
dGhlIG1lbnUuCiAgICAgVGhlbWVQYWludGVyIHBhaW50ZXIoaS5jb250ZXh0LCByZWN0KTsKLSAg
ICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRNZW51TGlzdChwYWludGVyLmNvbnRleHQoKSwKKyAgICBQ
bGF0Zm9ybUJyaWRnZTo6cGFpbnRNZW51TGlzdChwYWludGVyLmNvbnRleHQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDUF9EUk9QRE9XTkJVVFRPTiwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVDbGFzc2ljU3RhdGUobyksCkBAIC02NTcsNyAr
NjU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFRleHRGaWVsZEludGVy
bmFsKFJlbmRlck9iamVjdCogbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBib29sIGRyYXdFZGdlcykKIHsKICAgICAvLyBGYWxsYmFjayB0byB3
aGl0ZSBpZiB0aGUgc3BlY2lmaWVkIGNvbG9yIG9iamVjdCBpcyBpbnZhbGlkLgotICAgIC8vIChO
b3RlIENocm9taXVtQnJpZGdlOjpwYWludFRleHRGaWVsZCBkdXBsaWNhdGVzIHRoaXMgY2hlY2sp
LgorICAgIC8vIChOb3RlIFBsYXRmb3JtQnJpZGdlOjpwYWludFRleHRGaWVsZCBkdXBsaWNhdGVz
IHRoaXMgY2hlY2spLgogICAgIENvbG9yIGJhY2tncm91bmRDb2xvcihDb2xvcjo6d2hpdGUpOwog
ICAgIGlmIChvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IpLmlzVmFsaWQoKSkKICAgICAgICAgYmFja2dyb3VuZENvbG9yID0gby0+c3R5
bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yKTsK
QEAgLTY4Myw3ICs2ODMsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50VGV4
dEZpZWxkSW50ZXJuYWwoUmVuZGVyT2JqZWN0KiBvLAogICAgIHsKICAgICAgICAgY29uc3QgVGhl
bWVEYXRhJiB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7CiAgICAgICAgIFRoZW1lUGFpbnRl
ciBwYWludGVyKGkuY29udGV4dCwgcik7Ci0gICAgICAgIENocm9taXVtQnJpZGdlOjpwYWludFRl
eHRGaWVsZChwYWludGVyLmNvbnRleHQoKSwKKyAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50
VGV4dEZpZWxkKHBhaW50ZXIuY29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhlbWVEYXRhLm1fcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlLApAQCAtNzEyLDcgKzcxMiw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVu
ZGVyT2JqZWN0KiBvYmplY3QsIGNvbnN0IFBhCiAgICAgaGFsZi5zZXRIZWlnaHQocmVjdC5oZWln
aHQoKSAvIDIpOwogICAgIGNvbnN0IFRoZW1lRGF0YSYgdXBUaGVtZURhdGEgPSBnZXRUaGVtZURh
dGEob2JqZWN0LCBTcGluQnV0dG9uVXApOwogICAgIFRoZW1lUGFpbnRlciB1cFBhaW50ZXIoaW5m
by5jb250ZXh0LCBoYWxmKTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKHVw
UGFpbnRlci5jb250ZXh0KCksCisgICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbih1
cFBhaW50ZXIuY29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBUaGVtZURhdGEubV9wYXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
dXBUaGVtZURhdGEubV9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHVwVGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlLApAQCAtNzIxLDcgKzcyMSw3IEBAIGJvb2wgUmVu
ZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRJbm5lclNwaW5CdXR0b24oUmVuZGVyT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFBhCiAgICAgaGFsZi5zZXRZKHJlY3QueSgpICsgcmVjdC5oZWlnaHQoKSAv
IDIpOwogICAgIGNvbnN0IFRoZW1lRGF0YSYgZG93blRoZW1lRGF0YSA9IGdldFRoZW1lRGF0YShv
YmplY3QsIFNwaW5CdXR0b25Eb3duKTsKICAgICBUaGVtZVBhaW50ZXIgZG93blBhaW50ZXIoaW5m
by5jb250ZXh0LCBoYWxmKTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKGRv
d25QYWludGVyLmNvbnRleHQoKSwKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTcGluQnV0dG9u
KGRvd25QYWludGVyLmNvbnRleHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvd25UaGVtZURhdGEubV9wYXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgZG93blRoZW1lRGF0YS5tX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgZG93blRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSwKQEAgLTc2Miw3ICs3NjIsNyBA
QCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50UHJvZ3Jlc3NCYXIoUmVuZGVyT2Jq
ZWN0KiBvLCBjb25zdCBQYWludEluZm8mCiAgICAgSW50UmVjdCB2YWx1ZVJlY3QgPSByZW5kZXJQ
cm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpID8gZGV0ZXJtaW5hdGVQcm9ncmVzc1ZhbHVlUmVjdEZv
cihyZW5kZXJQcm9ncmVzcywgcikgOiBJbnRSZWN0KDAsIDAsIDAsIDApOwogICAgIGRvdWJsZSBh
bmltYXRlZFNlY29uZHMgPSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uU3RhcnRUaW1lKCkgPyAg
V1RGOjpjdXJyZW50VGltZSgpIC0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblN0YXJ0VGltZSgp
IDogMDsKICAgICBUaGVtZVBhaW50ZXIgcGFpbnRlcihpLmNvbnRleHQsIHIpOwotICAgIENocm9t
aXVtQnJpZGdlOjpwYWludFByb2dyZXNzQmFyKHBhaW50ZXIuY29udGV4dCgpLCByLCB2YWx1ZVJl
Y3QsIHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCksIGFuaW1hdGVkU2Vjb25kcyk7Cisg
ICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIocGFpbnRlci5jb250ZXh0KCksIHIs
IHZhbHVlUmVjdCwgcmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSwgYW5pbWF0ZWRTZWNv
bmRzKTsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3N0b3JhZ2UvY2hyb21pdW0vSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwIGIvU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAK
aW5kZXggYzBmYjQ0NGRhNTY2ZTA5NWVkYmRmNTZmNmIxM2JjMTc4MjNiY2FmNS4uOTJlOWE3YmY0
Mzc5M2NlY2U0ODI4NWYzODVlN2JjZDNmYTkyMDI5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5jcHAKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKQEAgLTM2LDEyICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NS
ZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6aWRiRmFjdG9yeSgp
OworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6aWRiRmFjdG9yeSgpOwogfQogCiBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZTo6fklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkKIHsKLSAg
ICBDaHJvbWl1bUJyaWRnZTo6aWRiU2h1dGRvd24oKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6aWRi
U2h1dGRvd24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwIGIv
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3Bw
CmluZGV4IDBmMTA4NzUyMGM5N2FmNmI5OGQ5MzZjMTMyMmU4MTVjMGNkMTFjMTEuLjM4YjI5ODNl
MTcwMmE1OGQ3MjczMGI1YmU4YTk4NjE3Y2NkNTExYWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3N0b3JhZ2UvY2hyb21pdW0vSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAKQEAg
LTI4LDEzICsyOCwxMyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNs
dWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlE
QktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxT
ZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVzLCAgY29uc3QgU3RyaW5nJiBrZXlQYXRo
LCBWZWN0b3I8UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQogewotICAgIENocm9taXVtQnJpZGdl
OjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5
UGF0aCwga2V5cyk7CisgICAgUGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFs
aXplZFZhbHVlc0FuZEtleVBhdGgodmFsdWVzLCBrZXlQYXRoLCBrZXlzKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCAwZmVmOTAyN2Ix
MmRlNTUyOTIyMzM2YjY1MTc5NTk3NmI3NGJlNDcxLi4zMzUwYmM2MDI3OTYzYzg2ZmU2MTZiMDdj
ZjlmMGE4MTg2N2EzMDMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSw1ICsxLDEy
NiBAQAogMjAxMS0wMS0xOCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4KIAorICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21pdW1dIFJl
bmFtZSBDaHJvbWl1bUJyaWRnZSB0byBQbGF0Zm9ybUJyaWRnZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI0NzEKKworICAgICAgICAqIFdlYktpdC5n
eXA6CisgICAgICAgICogc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwOgorICAgICAgICAqIHNy
Yy9QbGF0Zm9ybUJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0Nocm9tZUNsaWVudElt
cGwpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJXaWRnZXRDbGllbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6Z2V0Q29va2llSmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpj
YWNoZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlwYm9h
cmRJc0Zvcm1hdEF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkUmVhZFBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlbGV0
ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y29va2llc0VuYWJs
ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnByZWZldGNoRE5TKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpmaWxlRXhpc3RzKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkZWxldGVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OnJldmVhbEZvbGRlckluT1MpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OmdldEZpbGVNb2RpZmljYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjpkaXJlY3RvcnlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6Om1ha2VBbGxEaXJlY3Rvcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6Z2V0QWJzb2x1dGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
Ojppc0RpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZmlsZVBh
dGhUb1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6b3BlbkZpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsb3NlRmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2Vla0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnRydW5jYXRlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6cmVhZEZyb21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjp3
cml0ZVRvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJlRm9u
dExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Z2V0Rm9udEZhbWls
eUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmdldFJl
bmRlclN0eWxlRm9yU3RyaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjps
b2FkRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VPcGVu
RmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVG
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVB
dHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdl
dEZpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjppZGJGYWN0b3J5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjppZGJTaHV0ZG93bik6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVk
VmFsdWVzQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2ln
bmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1CcmlkZ2U6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRnJvbUZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVU
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwbHVnaW5zKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1BdWRpb1Jl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkZWNvZGVBdWRpb0Zp
bGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzYW5kYm94RW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJl
ZEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRU
aW1lckZpcmVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzdG9wU2hh
cmVkVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlY3JlbWVudFN0
YXRzQ291bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aW5jcmVtZW50
U3RhdHNDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpoaXN0b2dy
YW1DdXN0b21Db3VudHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Omhpc3Rv
Z3JhbUVudW1lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzdWRk
ZW5UZXJtaW5hdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludEJ1
dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRNZW51TGlzdCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJvdyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFRleHRGaWVsZCk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUcmFja2Jhcik6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJUaGVtZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVGhlbWVTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpwYWludFRoZW1lUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6dHJhY2VFdmVudEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjp0cmFjZUV2ZW50RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjp2
aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzTGlu
a1Zpc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om5vdGlmeUpTT3V0
T2ZNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om1lbW9yeVVzYWdl
TUIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmFjdHVhbE1lbW9yeVVzYWdl
TUIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRlcHRoKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuSXNNb25vY2hyb21lKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5SZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwb3B1cHNBbGxvd2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OldvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKiBzcmMvUmVzb3VyY2VI
YW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRh
dGEpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpX
ZWJGcmFtZUltcGw6OldlYkZyYW1lSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lSW1w
bDo6fldlYkZyYW1lSW1wbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZSk6CisKKzIwMTEtMDEtMTggIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gRmlzaGVyLgogCiAgICAgICAgIFtDaHJvbWl1bV0gUmVw
bGFjZSBDaHJvbWl1bUJyaWRnZTo6d2lkZ2V0U2V0Q3Vyc29yIHdpdGggQ2hyb21lQ2xpZW50Ojpz
ZXRDdXJzb3IKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cCBi
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAppbmRleCA4NWY2NzFkY2RiMGY2NGJj
NWMxYjZlNjZhNTUxNzdhMzY2YmFjN2JkLi5mNDBmNGEyNjA5ZjBhYTk3OTFmZjkzZTA4Yzg1ODQx
YzUzNjMyOTQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAK
KysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCkBAIC0zMTUsNyArMzE1LDYg
QEAKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2JqZWN0LmgnLAogICAgICAgICAgICAgICAg
ICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21l
Q2xpZW50SW1wbC5oJywKLSAgICAgICAgICAgICAgICAnc3JjL0Nocm9taXVtQnJpZGdlLmNwcCcs
CiAgICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWl1bUN1cnJlbnRUaW1lLmNwcCcsCiAgICAgICAg
ICAgICAgICAgJ3NyYy9DaHJvbWl1bVRocmVhZGluZy5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvQ29tcG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyLmgnLApAQCAtMzg0LDYgKzM4Myw3IEBACiAg
ICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oJywKICAgICAgICAg
ICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwJywKKyAgICAgICAgICAg
ICAgICAnc3JjL1BsYXRmb3JtQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0
Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZv
cm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9SZXNvdXJjZUhh
bmRsZS5jcHAnLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0
TWF0Y2hpbmdFbnVtcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRj
aGluZ0VudW1zLmNwcAppbmRleCBlMWVlNGExMTVhNzBjYzUzMTI5NzFkYjA0MmFmOGI5M2M4MzIw
MzBiLi5lODlmYjc0NWU5ODY2YjMzYWM4MDU0OTM0ZWRjMGY0YzQ3Mjc2NTY2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcApAQCAt
ODAsNyArODAsNyBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogI2lmIE9T
KERBUldJTikKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
QnJpZGdlLmgiCiAjaW5jbHVkZSAibWFjL1dlYlRoZW1lRW5naW5lLmgiCiAjZW5kaWYKIApAQCAt
Mzk4LDE3ICszOTgsMTcgQEAgQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJHZW9sb2Nh
dGlvbkVycm9yOjpFcnJvclBlcm1pc3Npb25EZW5pZWQsIEdlb2xvY2EKIENPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViR2VvbG9jYXRpb25FcnJvcjo6RXJyb3JQb3NpdGlvblVuYXZhaWxh
YmxlLCBHZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlKTsKIAogI2lmIE9TKERB
UldJTikKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRl
RGlzYWJsZWQsIENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVkKTsKLUNPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlSW5hY3RpdmUsIENocm9taXVtQnJp
ZGdlOjpTdGF0ZUluYWN0aXZlKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhl
bWVFbmdpbmU6OlN0YXRlQWN0aXZlLCBDaHJvbWl1bUJyaWRnZTo6U3RhdGVBY3RpdmUpOwotQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkLCBD
aHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQsIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURp
c2FibGVkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0
YXRlSW5hY3RpdmUsIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUluYWN0aXZlKTsKK0NPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlQWN0aXZlLCBQbGF0Zm9ybUJy
aWRnZTo6U3RhdGVBY3RpdmUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVt
ZUVuZ2luZTo6U3RhdGVQcmVzc2VkLCBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVQcmVzc2VkKTsKIAot
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIs
IENocm9taXVtQnJpZGdlOjpTaXplUmVndWxhcik7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYlRoZW1lRW5naW5lOjpTaXplU21hbGwsIENocm9taXVtQnJpZGdlOjpTaXplU21hbGwp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3Vs
YXIsIFBsYXRmb3JtQnJpZGdlOjpTaXplUmVndWxhcik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYlRoZW1lRW5naW5lOjpTaXplU21hbGwsIFBsYXRmb3JtQnJpZGdlOjpTaXplU21h
bGwpOwogCi1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3Jv
bGxiYXJPcmllbnRhdGlvbkhvcml6b250YWwsIENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbkhvcml6b250YWwpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVt
ZUVuZ2luZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25WZXJ0aWNhbCwgQ2hyb21pdW1CcmlkZ2U6OlNj
cm9sbGJhck9yaWVudGF0aW9uVmVydGljYWwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsLCBQbGF0Zm9y
bUJyaWRnZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGlj
YWwsIFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsKTsKIAotQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFyZW50
U2Nyb2xsVmlldywgQ2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhclBhcmVudFNjcm9sbFZpZXcpOwot
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFy
ZW50UmVuZGVyTGF5ZXIsIENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRSZW5kZXJMYXll
cik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxi
YXJQYXJlbnRTY3JvbGxWaWV3LCBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xs
Vmlldyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3Jv
bGxiYXJQYXJlbnRSZW5kZXJMYXllciwgUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhclBhcmVudFJl
bmRlckxheWVyKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUmVzb3VyY2VIYW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3Vy
Y2VIYW5kbGUuY3BwCmluZGV4IDgzZTAwMTc5YTE4NjBlMmUxZDk4OTJjZGU3ZjQ4OWRlYmI0NjNk
YzcuLjcyZjYwYmIzN2YwZWQzZjk5ZTcxOWViYWE2ZmMxZTA5ODMzOGNkOTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogCi0j
aW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1
ZXN0LmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCkBAIC0zMzAsNyArMzMwLDcgQEAgYm9v
bCBSZXNvdXJjZUhhbmRsZTo6d2lsbExvYWRGcm9tQ2FjaGUoUmVzb3VyY2VSZXF1ZXN0JiByZXF1
ZXN0LCBGcmFtZSopCiAvLyBzdGF0aWMKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRh
dGEoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
ZGF0YSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShyZXNwb25zZS51cmwo
KSwgcmVzcG9uc2UucmVzcG9uc2VUaW1lKCksIGRhdGEpOworICAgIFBsYXRmb3JtQnJpZGdlOjpj
YWNoZU1ldGFkYXRhKHJlc3BvbnNlLnVybCgpLCByZXNwb25zZS5yZXNwb25zZVRpbWUoKSwgZGF0
YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJGcmFtZUltcGwuY3BwCmluZGV4IGExM2VlYzAxYWY2MWM3MWEyODZiOWI5NzA5MjIz
Mjg1MTQ0YTE5MDcuLmJlYWEwZWI4Y2IxY2RmZjdlNjIwMDI2NjYxZDg5M2E5Y2QyMWEzZWUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcApAQCAtNzQsNyAr
NzQsNiBAQAogI2luY2x1ZGUgIkFzc29jaWF0ZWRVUkxMb2FkZXIuaCIKICNpbmNsdWRlICJCYWNr
Rm9yd2FyZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKLSNpbmNsdWRlICJDaHJv
bWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCiAj
aW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkRPTVV0aWxpdGllc1ByaXZhdGUuaCIKQEAg
LTEwMyw2ICsxMDIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJQ
bHVnaW5Eb2N1bWVudC5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgpAQCAtMTgyMCwxMyAr
MTgyMCwxMyBAQCBXZWJGcmFtZUltcGw6OldlYkZyYW1lSW1wbChXZWJGcmFtZUNsaWVudCogY2xp
ZW50KQogICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKHRoaXMpCiAgICAgLCBtX2lkZW50aWZp
ZXIoZ2VuZXJhdGVGcmFtZUlkZW50aWZpZXIoKSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6aW5j
cmVtZW50U3RhdHNDb3VudGVyKHdlYkZyYW1lQWN0aXZlQ291bnQpOworICAgIFBsYXRmb3JtQnJp
ZGdlOjppbmNyZW1lbnRTdGF0c0NvdW50ZXIod2ViRnJhbWVBY3RpdmVDb3VudCk7CiAgICAgZnJh
bWVDb3VudCsrOwogfQogCiBXZWJGcmFtZUltcGw6On5XZWJGcmFtZUltcGwoKQogewotICAgIENo
cm9taXVtQnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50ZXIod2ViRnJhbWVBY3RpdmVDb3VudCk7
CisgICAgUGxhdGZvcm1CcmlkZ2U6OmRlY3JlbWVudFN0YXRzQ291bnRlcih3ZWJGcmFtZUFjdGl2
ZUNvdW50KTsKICAgICBmcmFtZUNvdW50LS07CiAKICAgICBjYW5jZWxQZW5kaW5nU2NvcGluZ0Vm
Zm9ydCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0lt
cGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCmluZGV4
IDQxYTA4MDQ2ZTM0OGViMzkwODlmNDM3ZmRhNDgyM2NiZmQ5ZWI5YjAuLjgyODBkMGI1ZTM5ZDg4
MDZjMGNiZmQ4YjY0ZTMwMDY0Y2I4ZjY5NmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9XZWJWaWV3SW1wbC5jcHAKQEAgLTM0LDIzICszNCwyMiBAQAogI2luY2x1ZGUgIkF1dG9GaWxs
UG9wdXBNZW51Q2xpZW50LmgiCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkTGlzdENocm9taXVtLmgiCisjaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5o
IgorI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKLSNp
bmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNvbG9yU3BhY2UuaCIKICNpbmNs
dWRlICJDb21wb3NpdGlvblVuZGVybGluZVZlY3RvckJ1aWxkZXIuaCIKICNpbmNsdWRlICJDb250
ZXh0TWVudS5oIgogI2luY2x1ZGUgIkNvbnRleHRNZW51Q29udHJvbGxlci5oIgogI2luY2x1ZGUg
IkNvbnRleHRNZW51SXRlbS5oIgotI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKLSNpbmNs
dWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ3Vyc29yLmgiCisjaW5jbHVkZSAi
RE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkRldmljZU9yaWVudGF0aW9uQ2xpZW50
UHJveHkuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50TG9hZGVy
LmgiCi0jaW5jbHVkZSAiRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgogI2luY2x1ZGUgIkRyYWdDb250
cm9sbGVyLmgiCi0jaW5jbHVkZSAiRHJhZ1Njcm9sbFRpbWVyLmgiCiAjaW5jbHVkZSAiRHJhZ0Rh
dGEuaCIKKyNpbmNsdWRlICJEcmFnU2Nyb2xsVGltZXIuaCIKICNpbmNsdWRlICJFZGl0b3IuaCIK
ICNpbmNsdWRlICJFdmVudEhhbmRsZXIuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zM0QuaCIKQEAg
LTY1LDggKzY0LDggQEAKICNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQzREludGVybmFsLmgiCiAj
aW5jbHVkZSAiSFRNTElucHV0RWxlbWVudC5oIgogI2luY2x1ZGUgIkhUTUxNZWRpYUVsZW1lbnQu
aCIKLSNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgiCisj
aW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAi
SW1hZ2VCdWZmZXIuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JDb250cm9sbGVyLmgiCkBAIC03OCw2
ICs3Nyw3IEBACiAjaW5jbHVkZSAiUGFnZUdyb3VwLmgiCiAjaW5jbHVkZSAiUGFnZUdyb3VwTG9h
ZERlZmVycmVyLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
QnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtS2V5Ym9hcmRFdmVudC5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgpA
QCAtOTgsOCArOTgsOCBAQAogI2luY2x1ZGUgIlZlY3Rvci5oIgogI2luY2x1ZGUgIldlYkFjY2Vz
c2liaWxpdHlPYmplY3QuaCIKICNpbmNsdWRlICJXZWJBdXRvRmlsbENsaWVudC5oIgotI2luY2x1
ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCiAjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuaCIKKyNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUg
IldlYkRyYWdEYXRhLmgiCiAjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCiAjaW5jbHVkZSAiV2Vi
SW1hZ2UuaCIKQEAgLTIyODcsNyArMjI4Nyw3IEBAIHZvaWQgV2ViVmlld0ltcGw6OmludmFsaWRh
dGVSb290TGF5ZXJSZWN0KGNvbnN0IEludFJlY3QmIHJlY3QpCiAKIHZvaWQgV2ViVmlld0ltcGw6
OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKLSAgICBD
aHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oIkdQVS5zZXRJc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUiLCBhY3RpdmUgKiAyICsgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUsIDQpOworICAgIFBsYXRmb3JtQnJpZGdlOjpoaXN0b2dyYW1FbnVtZXJhdGlvbigi
R1BVLnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSIsIGFjdGl2ZSAqIDIgKyBtX2lz
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSwgNCk7CiAKICAgICBpZiAobV9pc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUgPT0gYWN0aXZlKQogICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79367</attachid>
            <date>2011-01-18 17:36:54 -0800</date>
            <delta_ts>2011-01-19 11:06:51 -0800</delta_ts>
            <desc>Now with PlatformBridge.cpp</desc>
            <filename>bug-52471-20110118173653.patch</filename>
            <type>text/plain</type>
            <size>115852</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJj
ZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTI0
IEBACisyMDExLTAxLTE4ICBBZGFtIEtsZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVu
YW1lIENocm9taXVtQnJpZGdlIHRvIFBsYXRmb3JtQnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjQ3MQorCisgICAgICAgICogV2ViS2l0Lmd5
cDoKKyAgICAgICAgKiBzcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHA6CisgICAgICAgICogc3Jj
L1BsYXRmb3JtQnJpZGdlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnRvQ2hyb21lQ2xpZW50SW1w
bCk6CisgICAgICAgIChXZWJDb3JlOjp0b1dlYldpZGdldENsaWVudCk6CisgICAgICAgIChXZWJD
b3JlOjpnZXRDb29raWVKYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNh
Y2hlTWV0YWRhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZElzRm9ybWF0QXZhaWxhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjpjbGlwYm9hcmRSZWFkSFRNTCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6Y2xpcGJvYXJkV3JpdGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6cmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjb29raWVzRW5hYmxl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cHJlZmV0Y2hETlMpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmZpbGVFeGlzdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6cmV2ZWFsRm9sZGVySW5PUyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmRpcmVjdG9yeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpnZXRBYnNvbHV0ZVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmlzRGlyZWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpmaWxlUGF0
aFRvVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpvcGVuRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xvc2VGaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzZWVrRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6dHJ1bmNhdGVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpyZWFkRnJvbUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Ondy
aXRlVG9GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250
TG9hZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRGb250RmFtaWx5
Rm9yQ2hhcmFjdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Z2V0UmVu
ZGVyU3R5bGVGb3JTdHJpa2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Omxv
YWRGb250KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZU9wZW5G
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0
dHJpYnV0ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0
RmlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlkYkZhY3Rvcnkp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlkYlNodXRkb3duKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRW
YWx1ZXNBbmRLZXlQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzaWdu
ZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1CcmlkZ2U6OmNvbXB1dGVkRGVmYXVsdExhbmd1YWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjptaW1lVHlwZUZvckV4dGVuc2lvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVGcm9tRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBsdWdpbnMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBsdWdpblNjcmlwdGFibGVPYmplY3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2Up
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUF1ZGlvUmVz
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlY29kZUF1ZGlvRmls
ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNhbmRib3hFbmFibGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVk
RnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRp
bWVyRmlyZVRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnN0b3BTaGFy
ZWRUaW1lcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGVjcmVtZW50U3Rh
dHNDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjppbmNyZW1lbnRT
dGF0c0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3Jh
bUN1c3RvbUNvdW50cyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aGlzdG9n
cmFtRW51bWVyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnN1ZGRl
blRlcm1pbmF0aW9uQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y3VycmVudFRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50QnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludE1lbnVMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRyYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFNwaW5CdXR0b24pOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFRyYWNrYmFyKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFByb2dyZXNzQmFyKToKKyAgICAgICAgKFdlYkNvcmU6
OldlYlRoZW1lUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJUaGVtZVN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdldFdlYlRoZW1lRXh0cmFQYXJhbXMpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnRyYWNlRXZlbnRFbmQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnZp
c2l0ZWRMaW5rSGFzaCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNMaW5r
VmlzaXRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bm90aWZ5SlNPdXRP
Zk1lbW9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWVtb3J5VXNhZ2VN
Qik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VN
Qik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGgpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNjcmVlblJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkF2YWlsYWJsZVJlY3QpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBvcHVwc0FsbG93ZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6V29ya2VyQ29udGV4dFByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIHNyYy9SZXNvdXJjZUhh
bmRsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZXNvdXJjZUhhbmRsZTo6Y2FjaGVNZXRhZGF0
YSk6CisgICAgICAgICogc3JjL1dlYkZyYW1lSW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YkZyYW1lSW1wbDo6V2ViRnJhbWVJbXBsKToKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJbXBs
Ojp+V2ViRnJhbWVJbXBsKToKKyAgICAgICAgKiBzcmMvV2ViVmlld0ltcGwuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJWaWV3SW1wbDo6c2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZl
KToKKwogMjAxMS0wMS0xOCAgVmljdG9yaWEgS2lyc3QgIDx2cmtAY2hyb21pdW0ub3JnPgogCiAg
ICAgICAgIFJldmlld2VkIGJ5IEtlbm5ldGggUnVzc2VsbC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L1dlYktpdC5neXAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9X
ZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDYgQEAKICAgICAgICAgICAg
ICAgICAnc3JjL0JvdW5kT2JqZWN0LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xp
ZW50SW1wbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5oJywK
LSAgICAgICAgICAgICAgICAnc3JjL0Nocm9taXVtQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAg
ICAgJ3NyYy9DaHJvbWl1bUN1cnJlbnRUaW1lLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9D
aHJvbWl1bVRocmVhZGluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQ29tcG9zaXRpb25V
bmRlcmxpbmVCdWlsZGVyLmgnLApAQCAtMzg0LDYgKzM4Myw3IEBACiAgICAgICAgICAgICAgICAg
J3NyYy9NZWRpYVBsYXllclByaXZhdGVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgICAgICdz
cmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL05v
dGlmaWNhdGlvblByZXNlbnRlckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1BsYXRm
b3JtQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0
Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENo
YW5uZWwuaCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAnLApJbmRl
eDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVt
cy5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNz
ZXJ0TWF0Y2hpbmdFbnVtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKICNpZiBPUyhEQVJXSU4pCi0jaW5jbHVk
ZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1
ZGUgIm1hYy9XZWJUaGVtZUVuZ2luZS5oIgogI2VuZGlmCiAKQEAgLTM5OCwxNyArMzk4LDE3IEBA
IENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViR2VvbG9jYXQKIENPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViR2VvbG9jYXRpb25FcnJvcjo6RXJyb3JQb3NpdGlvblVuYXZhaWxh
YmxlLCBHZW9sb2NhdGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlKTsKIAogI2lmIE9TKERB
UldJTikKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRl
RGlzYWJsZWQsIENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVkKTsKLUNPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlSW5hY3RpdmUsIENocm9taXVtQnJp
ZGdlOjpTdGF0ZUluYWN0aXZlKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhl
bWVFbmdpbmU6OlN0YXRlQWN0aXZlLCBDaHJvbWl1bUJyaWRnZTo6U3RhdGVBY3RpdmUpOwotQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkLCBD
aHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQsIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURp
c2FibGVkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0
YXRlSW5hY3RpdmUsIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUluYWN0aXZlKTsKK0NPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlQWN0aXZlLCBQbGF0Zm9ybUJy
aWRnZTo6U3RhdGVBY3RpdmUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVt
ZUVuZ2luZTo6U3RhdGVQcmVzc2VkLCBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVQcmVzc2VkKTsKIAot
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIs
IENocm9taXVtQnJpZGdlOjpTaXplUmVndWxhcik7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19F
TlVNKFdlYlRoZW1lRW5naW5lOjpTaXplU21hbGwsIENocm9taXVtQnJpZGdlOjpTaXplU21hbGwp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3Vs
YXIsIFBsYXRmb3JtQnJpZGdlOjpTaXplUmVndWxhcik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYlRoZW1lRW5naW5lOjpTaXplU21hbGwsIFBsYXRmb3JtQnJpZGdlOjpTaXplU21h
bGwpOwogCi1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3Jv
bGxiYXJPcmllbnRhdGlvbkhvcml6b250YWwsIENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJPcmll
bnRhdGlvbkhvcml6b250YWwpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVt
ZUVuZ2luZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25WZXJ0aWNhbCwgQ2hyb21pdW1CcmlkZ2U6OlNj
cm9sbGJhck9yaWVudGF0aW9uVmVydGljYWwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsLCBQbGF0Zm9y
bUJyaWRnZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsKTsKK0NPTVBJTEVfQVNTRVJU
X01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGlj
YWwsIFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsKTsKIAotQ09N
UElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFyZW50
U2Nyb2xsVmlldywgQ2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhclBhcmVudFNjcm9sbFZpZXcpOwot
Q09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFy
ZW50UmVuZGVyTGF5ZXIsIENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRSZW5kZXJMYXll
cik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxi
YXJQYXJlbnRTY3JvbGxWaWV3LCBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xs
Vmlldyk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3Jv
bGxiYXJQYXJlbnRSZW5kZXJMYXllciwgUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhclBhcmVudFJl
bmRlckxheWVyKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21pdW1CcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3Jj
L0Nocm9taXVtQnJpZGdlLmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTk3ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAq
Ci0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICog
aW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZQotICogZGlzdHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29n
bGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENP
TlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQK
LSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLQot
I2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvdXJsX3V0aWwuaD4KLQotI2luY2x1ZGUgIkNocm9tZS5o
IgotI2luY2x1ZGUgIkNocm9tZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJXZWJBdWRpb0J1cy5o
IgotI2luY2x1ZGUgIldlYkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIldlYkNvb2tpZS5oIgotI2lu
Y2x1ZGUgIldlYkNvb2tpZUphci5oIgotI2luY2x1ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJX
ZWJEcmFnRGF0YS5oIgotI2luY2x1ZGUgIldlYkZpbGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJX
ZWJGcmFtZUNsaWVudC5oIgotI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldl
YklEQktleS5oIgotI2luY2x1ZGUgIldlYkltYWdlLmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0j
aW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViTWltZVJlZ2lzdHJ5LmgiCi0j
aW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVySW1wbC5oIgotI2luY2x1ZGUgIldlYlBsdWdpbkxp
c3RCdWlsZGVySW1wbC5oIgotI2luY2x1ZGUgIldlYlNhbmRib3hTdXBwb3J0LmgiCi0jaW5jbHVk
ZSAiV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViU2NyZWVuSW5mby5o
IgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgotI2luY2x1ZGUgIldlYlVSTC5oIgotI2luY2x1ZGUg
IldlYlZlY3Rvci5oIgotI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJW
aWV3SW1wbC5oIgotI2luY2x1ZGUgIldlYldvcmtlckNsaWVudEltcGwuaCIKLQotI2lmIFBMQVRG
T1JNKENHKQotI2luY2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KLSNlbmRpZgotCi0j
aWYgT1MoV0lORE9XUykKLSNpbmNsdWRlICJXZWJSZWN0LmgiCi0jaW5jbHVkZSAid2luL1dlYlRo
ZW1lRW5naW5lLmgiCi0jZW5kaWYKLQotI2lmIE9TKExJTlVYKSB8fCBPUyhGUkVFQlNEKQotI2lu
Y2x1ZGUgImxpbnV4L1dlYlRoZW1lRW5naW5lLmgiCi0jaW5jbHVkZSAiV2ViRm9udEluZm8uaCIK
LSNpbmNsdWRlICJXZWJGb250UmVuZGVyU3R5bGUuaCIKLSNlbmRpZgotCi0jaWYgT1MoREFSV0lO
KQotI2luY2x1ZGUgIm1hYy9XZWJUaGVtZUVuZ2luZS5oIgotI2VuZGlmCi0KLSNpZiBXRUJLSVRf
VVNJTkdfU0tJQQotI2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2VuZGlmCi0KLSNpbmNs
dWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkZyYW1l
Vmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIklEQkZhY3Rv
cnlCYWNrZW5kUHJveHkuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5jbHVkZSAiUGx1
Z2luRGF0YS5oIgotI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiV29ya2Vy
LmgiCi0jaW5jbHVkZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2Vy
dGlvbnMuaD4KLQotLy8gV2UgYXJlIHBhcnQgb2YgdGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbi4K
LXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGlj
IENocm9tZUNsaWVudEltcGwqIHRvQ2hyb21lQ2xpZW50SW1wbChXaWRnZXQqIHdpZGdldCkKLXsK
LSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGcmFtZVZpZXcqIHZp
ZXc7Ci0gICAgaWYgKHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgdmlldyA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCk7Ci0gICAgZWxzZSBpZiAod2lkZ2V0LT5wYXJlbnQo
KSAmJiB3aWRnZXQtPnBhcmVudCgpLT5pc0ZyYW1lVmlldygpKQotICAgICAgICB2aWV3ID0gc3Rh
dGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0LT5wYXJlbnQoKSk7Ci0gICAgZWxzZQotICAgICAg
ICByZXR1cm4gMDsKLQotICAgIFBhZ2UqIHBhZ2UgPSB2aWV3LT5mcmFtZSgpID8gdmlldy0+ZnJh
bWUoKS0+cGFnZSgpIDogMDsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgcmV0dXJuIHN0YXRpY19jYXN0PENocm9tZUNsaWVudEltcGwqPihwYWdlLT5jaHJvbWUoKS0+
Y2xpZW50KCkpOwotfQotCi1zdGF0aWMgV2ViV2lkZ2V0Q2xpZW50KiB0b1dlYldpZGdldENsaWVu
dChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBDaHJvbWVDbGllbnRJbXBsKiBjaHJvbWVDbGllbnRJ
bXBsID0gdG9DaHJvbWVDbGllbnRJbXBsKHdpZGdldCk7Ci0gICAgaWYgKCFjaHJvbWVDbGllbnRJ
bXBsIHx8ICFjaHJvbWVDbGllbnRJbXBsLT53ZWJWaWV3KCkpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBjaHJvbWVDbGllbnRJbXBsLT53ZWJWaWV3KCktPmNsaWVudCgpOwotfQotCi1z
dGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJh
bWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwt
PmNsaWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUph
ciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwotICAgIGlmICgh
Y29va2llSmFyKQotICAgICAgICBjb29raWVKYXIgPSB3ZWJLaXRDbGllbnQoKS0+Y29va2llSmFy
KCk7Ci0gICAgcmV0dXJuIGNvb2tpZUphcjsKLX0KLQotLy8gQ2FjaGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci12b2lkIENocm9taXVtQnJpZGdlOjpjYWNoZU1ldGFkYXRhKGNvbnN0IEtVUkwmIHVybCwgZG91
YmxlIHJlc3BvbnNlVGltZSwgY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKQotewotICAgIHdlYktp
dENsaWVudCgpLT5jYWNoZU1ldGFkYXRhKHVybCwgcmVzcG9uc2VUaW1lLCBkYXRhLmRhdGEoKSwg
ZGF0YS5zaXplKCkpOwotfQotCi0vLyBDbGlwYm9hcmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgQ2hyb21p
dW1CcmlkZ2U6OmNsaXBib2FyZElzRm9ybWF0QXZhaWxhYmxlKAotICAgIFBhc3RlYm9hcmRQcml2
YXRlOjpDbGlwYm9hcmRGb3JtYXQgZm9ybWF0LAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlw
Ym9hcmRCdWZmZXIgYnVmZmVyKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJv
YXJkKCktPmlzRm9ybWF0QXZhaWxhYmxlKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9h
cmQ6OkZvcm1hdD4oZm9ybWF0KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpC
dWZmZXI+KGJ1ZmZlcikpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJl
YWRQbGFpblRleHQoCi0gICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZm
ZXIpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZFBsYWlu
VGV4dCgKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikp
OwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTCgKLSAgICBQYXN0
ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwKLSAgICBTdHJpbmcqIGh0bWxU
ZXh0LCBLVVJMKiBzb3VyY2VVUkwpCi17Ci0gICAgV2ViVVJMIHVybDsKLSAgICAqaHRtbFRleHQg
PSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNf
Y2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCk7Ci0gICAgKnNvdXJjZVVS
TCA9IHVybDsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rp
b24oY29uc3QgU3RyaW5nJiBodG1sVGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVSTCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0LAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVNtYXJ0
UGFzdGUpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUhUTUwoCi0g
ICAgICAgIGh0bWxUZXh0LCBzb3VyY2VVUkwsIHBsYWluVGV4dCwgd3JpdGVTbWFydFBhc3RlKTsK
LX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3Qg
U3RyaW5nJiBwbGFpblRleHQpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53
cml0ZVBsYWluVGV4dChwbGFpblRleHQpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCi17Ci0g
ICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZVVSTCh1cmwsIHRpdGxlKTsKLX0K
LQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0
ciBpbWFnZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
S1VSTCYgc291cmNlVVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIHRpdGxlKQotewotI2lmIFdFQktJVF9VU0lOR19TS0lBCi0gICAgV2Vi
SW1hZ2Ugd2ViSW1hZ2UoKmltYWdlKTsKLSNlbHNlCi0gICAgV2ViSW1hZ2Ugd2ViSW1hZ2UoaW1h
Z2UpOwotI2VuZGlmCi0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUltYWdl
KHdlYkltYWdlLCBzb3VyY2VVUkwsIHRpdGxlKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEsCi0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXRhZGF0YSkKLXsKLSAg
ICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlRGF0YSh0eXBlLCBkYXRhLCBtZXRh
ZGF0YSk7Ci19Ci0KLUhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVh
ZEF2YWlsYWJsZVR5cGVzKAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIg
YnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcykKLXsKLSAgICBXZWJWZWN0b3I8V2ViU3Ry
aW5nPiByZXN1bHQgPSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRBdmFpbGFibGVU
eXBlcygKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciks
IGNvbnRhaW5zRmlsZW5hbWVzKTsKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXM7Ci0gICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHR5cGVzLmFk
ZChyZXN1bHRbaV0pOwotICAgIHJldHVybiB0eXBlczsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZERhdGEoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBi
dWZmZXIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHR5cGUsIFN0cmluZyYgZGF0YSwgU3RyaW5nJiBtZXRhZGF0YSkKLXsKLSAgICBXZWJTdHJp
bmcgcmVzdWx0RGF0YTsKLSAgICBXZWJTdHJpbmcgcmVzdWx0TWV0YWRhdGE7Ci0gICAgYm9vbCBz
dWNjZWVkZWQgPSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWREYXRhKAotICAgICAg
ICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgdHlwZSwgJnJlc3Vs
dERhdGEsICZyZXN1bHRNZXRhZGF0YSk7Ci0gICAgaWYgKHN1Y2NlZWRlZCkgewotICAgICAgICBk
YXRhID0gcmVzdWx0RGF0YTsKLSAgICAgICAgbWV0YWRhdGEgPSByZXN1bHRNZXRhZGF0YTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHN1Y2NlZWRlZDsKLX0KLQotVmVjdG9yPFN0cmluZz4gQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlciBidWZmZXIpCi17Ci0gICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2Vi
S2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkRmlsZW5hbWVzKAotICAgICAgICBzdGF0aWNf
Y2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4g
Y29udmVydGVkUmVzdWx0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUo
KTsgKytpKQotICAgICAgICBjb252ZXJ0ZWRSZXN1bHQuYXBwZW5kKHJlc3VsdFtpXSk7Ci0gICAg
cmV0dXJuIGNvbnZlcnRlZFJlc3VsdDsKLX0KLQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12
b2lkIENocm9taXVtQnJpZGdlOjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBT
dHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2ll
SmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNl
dENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19
Ci0KLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tp
ZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2ll
SmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXModXJsLCBkb2N1bWVudC0+
Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5n
IENocm9taXVtQnJpZGdlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCogZG9jdW1lbnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAg
IFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBp
ZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OnJhd0Nvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+
JiByYXdDb29raWVzKQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8
V2ViQ29va2llPiB3ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBn
ZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tp
ZUphci0+cmF3Q29va2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3
ZWJDb29raWVzKTsKLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29v
a2llc1tpXTsKLSAgICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAg
ICAgICAgICAgICAgICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2Vi
Q29va2llLmRvbWFpbiwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAg
ICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAg
ICAgICB3ZWJDb29raWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2ll
LnNlY3VyZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAg
ICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwot
fQotCi12b2lkIENocm9taXVtQnJpZGdlOjpkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAg
ICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAg
aWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29r
aWVOYW1lKTsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Y29va2llc0VuYWJsZWQoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2Vi
Q29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChj
b29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9j
dW1lbnQtPmNvb2tpZVVSTCgpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8gRE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIENo
cm9taXVtQnJpZGdlOjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQotewotICAg
IHdlYktpdENsaWVudCgpLT5wcmVmZXRjaEhvc3ROYW1lKGhvc3RuYW1lKTsKLX0KLQotLy8gRmls
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6ZmlsZUV4aXN0cyhjb25z
dCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0
aWVzKCktPmZpbGVFeGlzdHMocGF0aCk7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmRlbGV0
ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
ZmlsZVV0aWxpdGllcygpLT5kZWxldGVGaWxlKHBhdGgpOwotfQotCi1ib29sIENocm9taXVtQnJp
ZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmRlbGV0ZUVtcHR5RGlyZWN0b3J5
KHBhdGgpOwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjpnZXRGaWxlU2l6ZShjb25zdCBTdHJp
bmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0KQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+ZmlsZVV0aWxpdGllcygpLT5nZXRGaWxlU2l6ZShwYXRoLCByZXN1bHQpOwotfQotCi12b2lk
IENocm9taXVtQnJpZGdlOjpyZXZlYWxGb2xkZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsK
LSAgICB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5yZXZlYWxGb2xkZXJJbk9TKHBh
dGgpOwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShj
b25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQotewotICAgIGRvdWJsZSBtb2RpZmlj
YXRpb25UaW1lOwotICAgIGlmICghd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0
RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDx0aW1lX3Q+KG1vZGlmaWNhdGlv
blRpbWUpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmRp
cmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGll
bnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kaXJlY3RvcnlOYW1lKHBhdGgpOwotfQotCi1TdHJpbmcg
Q2hyb21pdW1CcmlkZ2U6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBh
dGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+ZmlsZVV0aWxpdGllcygpLT5wYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgY29tcG9u
ZW50KTsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0
IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRp
ZXMoKS0+bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1Ccmlk
Z2U6OmdldEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmdldEFic29sdXRlUGF0aChwYXRoKTsKLX0K
LQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQot
ewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5pc0RpcmVjdG9y
eShwYXRoKTsKLX0KLQotS1VSTCBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPmZpbGVQYXRoVG9VUkwocGF0aCk7Ci19Ci0KLVBsYXRmb3JtRmlsZUhhbmRsZSBDaHJvbWl1
bUJyaWRnZTo6b3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkK
LXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+b3BlbkZpbGUo
cGF0aCwgbW9kZSk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsb3NlRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUmIGhhbmRsZSkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGll
cygpLT5jbG9zZUZpbGUoaGFuZGxlKTsKLX0KLQotbG9uZyBsb25nIENocm9taXVtQnJpZGdlOjpz
ZWVrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxl
U2Vla09yaWdpbiBvcmlnaW4pCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRp
bGl0aWVzKCktPnNlZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4pOwotfQotCi1ib29sIENo
cm9taXVtQnJpZGdlOjp0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9u
ZyBsb25nIG9mZnNldCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRp
ZXMoKS0+dHJ1bmNhdGVGaWxlKGhhbmRsZSwgb2Zmc2V0KTsKLX0KLQotaW50IENocm9taXVtQnJp
ZGdlOjpyZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMo
KS0+cmVhZEZyb21GaWxlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKLX0KLQotaW50IENocm9taXVt
QnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT53cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7Ci19Ci0KLS8vIEZv
bnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIE9TKFdJTkRPV1MpCi1ib29sIENocm9taXVtQnJpZGdl
OjplbnN1cmVGb250TG9hZGVkKEhGT05UIGZvbnQpCi17Ci0gICAgV2ViU2FuZGJveFN1cHBvcnQq
IHNzID0gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCk7Ci0KLSAgICAvLyBpZiB0aGVy
ZSBpcyBubyBzYW5kYm94LCB0aGVuIHdlIGNhbiBhc3N1bWUgdGhlIGZvbnQKLSAgICAvLyB3YXMg
YWJsZSB0byBiZSBsb2FkZWQgc3VjY2Vzc2Z1bGx5IGFscmVhZHkKLSAgICByZXR1cm4gc3MgPyBz
cy0+ZW5zdXJlRm9udExvYWRlZChmb250KSA6IHRydWU7Ci19Ci0jZW5kaWYKLQotI2lmIE9TKExJ
TlVYKSB8fCBPUyhGUkVFQlNEKQotU3RyaW5nIENocm9taXVtQnJpZGdlOjpnZXRGb250RmFtaWx5
Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3Rl
cnMpCi17Ci0gICAgaWYgKHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpKQotICAgICAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCktPmdldEZvbnRGYW1pbHlG
b3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIG51bUNoYXJhY3RlcnMpOwotCi0gICAgV2ViQ1N0cmlu
ZyBmYW1pbHkgPSBXZWJGb250SW5mbzo6ZmFtaWx5Rm9yQ2hhcnMoY2hhcmFjdGVycywgbnVtQ2hh
cmFjdGVycyk7Ci0gICAgaWYgKGZhbWlseS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBXZWJTdHJp
bmc6OmZyb21VVEY4KGZhbWlseS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYlN0cmluZygpOwot
fQotCi12b2lkIENocm9taXVtQnJpZGdlOjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBj
aGFyKiBmb250LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCkKLXsK
LSAgICBXZWJGb250UmVuZGVyU3R5bGUgc3R5bGU7Ci0KLSAgICBpZiAod2ViS2l0Q2xpZW50KCkt
PnNhbmRib3hTdXBwb3J0KCkpCi0gICAgICAgIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9y
dCgpLT5nZXRSZW5kZXJTdHlsZUZvclN0cmlrZShmb250LCBzaXplQW5kU3R5bGUsICZzdHlsZSk7
Ci0gICAgZWxzZQotICAgICAgICBXZWJGb250SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2UoZm9u
dCwgc2l6ZUFuZFN0eWxlLCAmc3R5bGUpOwotCi0gICAgc3R5bGUudG9Gb250UmVuZGVyU3R5bGUo
cmVzdWx0KTsKLX0KLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQotYm9vbCBDaHJvbWl1bUJyaWRn
ZTo6bG9hZEZvbnQoTlNGb250KiBzcmNGb250LCBBVFNGb250Q29udGFpbmVyUmVmKiBvdXQpCi17
Ci0gICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBw
b3J0KCk7Ci0gICAgaWYgKHNzKQotICAgICAgICByZXR1cm4gc3MtPmxvYWRGb250KHNyY0ZvbnQs
IG91dCk7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiBy
ZXNwb25zZSB0byBhbiBlcnJvciBsb2FkaW5nIGEKLSAgICAvLyBmb250IGR1ZSB0byBiZWluZyBi
bG9ja2VkIGJ5IHRoZSBzYW5kYm94LgotICAgIC8vIFRoaXMgYnkgZGVmaW5pdGlvbiBzaG91bGRu
J3QgaGFwcGVuIGlmIHRoZXJlIGlzIG5vIHNhbmRib3ggc3VwcG9ydC4KLSAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKLSAgICAqb3V0ID0gMDsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYK
LQotLy8gRGF0YWJhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1QbGF0Zm9ybUZpbGVIYW5kbGUgQ2hyb21pdW1C
cmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgaW50IGRl
c2lyZWRGbGFncykKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlT3BlbkZp
bGUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwgZGVzaXJlZEZsYWdzKTsKLX0KLQotaW50IENocm9t
aXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwg
Ym9vbCBzeW5jRGlyKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VEZWxl
dGVGaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIHN5bmNEaXIpOwotfQotCi1sb25nIENocm9t
aXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmls
ZU5hbWUpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVBdHRy
aWJ1dGVzKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSkpOwotfQotCi1sb25nIGxvbmcgQ2hyb21pdW1C
cmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSkKLXsK
LSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlR2V0RmlsZVNpemUoV2ViU3RyaW5n
KHZmc0ZpbGVOYW1lKSk7Ci19Ci0KLS8vIEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGFzc1JlZlB0
cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gQ2hyb21pdW1CcmlkZ2U6OmlkYkZhY3Rvcnko
KQotewotICAgIC8vIFRoZXJlJ3Mgbm8gcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEg
bmV3IHByb3h5IGVhY2ggdGltZSwgYnV0Ci0gICAgLy8gdGhlcmUncyBhbHNvIG5vIHN0cm9uZyBy
ZWFzb24gbm90IHRvLgotICAgIHJldHVybiBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpjcmVhdGUo
KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6aWRiU2h1dGRvd24oKQotewotICAgIC8vIElu
IHRoZSBicm93c2VyIHByb2Nlc3MsIHRoaXMgc2h1dHMgZG93biB0aGUgdXRpbGl0eSBwcm9jZXNz
LiBJbiB0aGUgcmVuZGVyZXIgcHJvY2VzcywgaXQgZG9lcyBub3RoaW5nLgotICAgIHdlYktpdENs
aWVudCgpLT5pZGJTaHV0ZG93bigpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpjcmVhdGVJ
REJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwg
VmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMpCi17Ci0gICAgV2ViVmVjdG9yPFdlYlNlcmlh
bGl6ZWRTY3JpcHRWYWx1ZT4gd2ViVmFsdWVzID0gdmFsdWVzOwotICAgIFdlYlZlY3RvcjxXZWJJ
REJLZXk+IHdlYktleXM7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNyZWF0ZUlEQktleXNGcm9tU2Vy
aWFsaXplZFZhbHVlc0FuZEtleVBhdGgod2ViVmFsdWVzLCBXZWJTdHJpbmcoa2V5UGF0aCksIHdl
YktleXMpOwotCi0gICAgc2l6ZV90IHdlYktleXNTaXplID0gd2ViS2V5cy5zaXplKCk7Ci0gICAg
a2V5cy5yZXNlcnZlQ2FwYWNpdHkod2ViS2V5c1NpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgd2ViS2V5c1NpemU7ICsraSkKLSAgICAgICAga2V5cy5hcHBlbmQoUGFzc1JlZlB0cjxJ
REJLZXk+KHdlYktleXNbaV0pKTsKLX0KLQotLy8gS2V5Z2VuIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdHJp
bmcgQ2hyb21pdW1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZygKLSAg
ICB1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlLCBjb25zdCBL
VVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zaWduZWRQdWJsaWNLZXlB
bmRDaGFsbGVuZ2VTdHJpbmcoa2V5U2l6ZUluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlN0cmluZyhjaGFsbGVuZ2Up
LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIFdlYlVSTCh1cmwpKTsKLX0KLQotLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdHJp
bmcgQ2hyb21pdW1CcmlkZ2U6OmNvbXB1dGVkRGVmYXVsdExhbmd1YWdlKCkKLXsKLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPmRlZmF1bHRMb2NhbGUoKTsKLX0KLQotLy8gTGF5b3V0VGVzdE1v
ZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotCi1ib29sIENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpCi17Ci0gICAg
cmV0dXJuIFdlYktpdDo6bGF5b3V0VGVzdE1vZGUoKTsKLX0KLQotLy8gTWltZVR5cGUgLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotCi1ib29sIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVS
ZWdpc3RyeSgpLT5zdXBwb3J0c0ltYWdlTUlNRVR5cGUobWltZVR5cGUpCi0gICAgICAgICE9IFdl
Yk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6
OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17
Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNKYXZh
U2NyaXB0TUlNRVR5cGUobWltZVR5cGUpCi0gICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNO
b3RTdXBwb3J0ZWQ7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1h
Z2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlw
ZSkKLSAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKLX0KLQotU3Ry
aW5nIENocm9taXVtQnJpZGdlOjptaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbikKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5t
aW1lVHlwZUZvckV4dGVuc2lvbihleHRlbnNpb24pOwotfQotCi1TdHJpbmcgQ2hyb21pdW1Ccmlk
Z2U6Om1pbWVUeXBlRnJvbUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3
ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPm1pbWVUeXBlRnJvbUZpbGUocGF0aCk7Ci19
Ci0KLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1p
bWVSZWdpc3RyeSgpLT5wcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Ci19
Ci0KLS8vIFBsdWdpbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6cGx1Z2lu
cyhib29sIHJlZnJlc2gsIFZlY3RvcjxQbHVnaW5JbmZvPiogcmVzdWx0cykKLXsKLSAgICBXZWJQ
bHVnaW5MaXN0QnVpbGRlckltcGwgYnVpbGRlcihyZXN1bHRzKTsKLSAgICB3ZWJLaXRDbGllbnQo
KS0+Z2V0UGx1Z2luTGlzdChyZWZyZXNoLCAmYnVpbGRlcik7Ci0gICAgcmV0dXJuIHRydWU7ICAv
LyBGSVhNRTogVGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSB2
YWx1ZS4KLX0KLQotTlBPYmplY3QqIENocm9taXVtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2Jq
ZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzUGx1
Z2luQ29udGFpbmVyKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19j
YXN0PFdlYlBsdWdpbkNvbnRhaW5lckltcGwqPih3aWRnZXQpLT5zY3JpcHRhYmxlT2JqZWN0KCk7
Ci19Ci0KLS8vIFJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGFzc1JlZlB0cjxJbWFnZT4gQ2hyb21p
dW1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKLXsK
LSAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVzb3Vy
Y2UobmFtZSk7Ci0gICAgaWYgKHJlc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIElt
YWdlOjpudWxsSW1hZ2UoKTsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFn
ZTo6Y3JlYXRlKCk7Ci0gICAgaW1hZ2UtPnNldERhdGEocmVzb3VyY2UsIHRydWUpOwotICAgIHJl
dHVybiBpbWFnZTsKLX0KLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLVBhc3NPd25QdHI8QXVk
aW9CdXM+IENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKGNvbnN0IGNo
YXIqIG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRlKQotewotICAgIGNvbnN0IFdlYkRhdGEmIHJlc291
cmNlID0gd2ViS2l0Q2xpZW50KCktPmxvYWRSZXNvdXJjZShuYW1lKTsKLSAgICBpZiAocmVzb3Vy
Y2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gZGVjb2Rl
QXVkaW9GaWxlRGF0YShyZXNvdXJjZS5kYXRhKCksIHJlc291cmNlLnNpemUoKSwgc2FtcGxlUmF0
ZSk7Ci19Ci0KLVBhc3NPd25QdHI8QXVkaW9CdXM+IENocm9taXVtQnJpZGdlOjpkZWNvZGVBdWRp
b0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0
ZSkKLXsKLSAgICBXZWJBdWRpb0J1cyB3ZWJBdWRpb0J1czsKLSAgICBpZiAod2ViS2l0Q2xpZW50
KCktPmxvYWRBdWRpb1Jlc291cmNlKCZ3ZWJBdWRpb0J1cywgZGF0YSwgc2l6ZSwgc2FtcGxlUmF0
ZSkpCi0gICAgICAgIHJldHVybiB3ZWJBdWRpb0J1cy5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIDA7
Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VCX0FVRElPKQotCi0vLyBTYW5kYm94IC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCi0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OnNhbmRib3hFbmFibGVkKCkKLXsKLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hFbmFibGVkKCk7Ci19Ci0KLS8vIFNoYXJlZFRpbWVy
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0
aW9uKHZvaWQgKCpmdW5jKSgpKQotewotICAgIHdlYktpdENsaWVudCgpLT5zZXRTaGFyZWRUaW1l
ckZpcmVkRnVuY3Rpb24oZnVuYyk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldFNoYXJl
ZFRpbWVyRmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQotewotICAgIHdlYktpdENsaWVudCgpLT5z
ZXRTaGFyZWRUaW1lckZpcmVUaW1lKGZpcmVUaW1lKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6c3RvcFNoYXJlZFRpbWVyKCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+c3RvcFNoYXJlZFRp
bWVyKCk7Ci19Ci0KLS8vIFN0YXRzQ291bnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgd2ViS2l0
Q2xpZW50KCktPmRlY3JlbWVudFN0YXRzQ291bnRlcihuYW1lKTsKLX0KLQotdm9pZCBDaHJvbWl1
bUJyaWRnZTo6aW5jcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAg
d2ViS2l0Q2xpZW50KCktPmluY3JlbWVudFN0YXRzQ291bnRlcihuYW1lKTsKLX0KLQotdm9pZCBD
aHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGlu
dCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCkKLXsKLSAgICB3ZWJL
aXRDbGllbnQoKS0+aGlzdG9ncmFtQ3VzdG9tQ291bnRzKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgs
IGJ1Y2tldENvdW50KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtRW51bWVy
YXRpb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpCi17
Ci0gICAgd2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUVudW1lcmF0aW9uKG5hbWUsIHNhbXBsZSwg
Ym91bmRhcnlWYWx1ZSk7Ci19Ci0KLS8vIFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDaHJv
bWl1bUJyaWRnZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAg
ICB3ZWJLaXRDbGllbnQoKS0+c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGVuYWJsZWQpOwotfQot
Ci0vLyBTeXN0ZW1UaW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWRvdWJsZSBDaHJvbWl1bUJyaWRnZTo6Y3VycmVu
dFRpbWUoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y3VycmVudFRpbWUoKTsKLX0K
LQotLy8gVGhlbWluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi0jaWYgT1MoV0lORE9XUykKLQotdm9pZCBDaHJv
bWl1bUJyaWRnZTo6cGFpbnRCdXR0b24oCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBh
cnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0
KQotewotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludEJ1dHRvbigKLSAg
ICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNz
aWNTdGF0ZSwgcmVjdCk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50TWVudUxpc3Qo
Ci0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNz
aWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdlYktpdENsaWVudCgp
LT50aGVtZUVuZ2luZSgpLT5wYWludE1lbnVMaXN0KAotICAgICAgICBnYy0+cGxhdGZvcm1Db250
ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKLX0KLQot
dm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJvdygKLSAgICBHcmFwaGljc0Nv
bnRleHQqIGdjLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3Jv
bGxiYXJBcnJvdygKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgc3Rh
dGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50
U2Nyb2xsYmFyVGh1bWIoCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBz
dGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhclRodW1iKAotICAg
ICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3Np
Y1N0YXRlLCByZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJU
cmFjaygKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLAotICAgIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGFs
aWduUmVjdCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3Jv
bGxiYXJUcmFjaygKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFy
dCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCwKLSAgICAgICAgYWxpZ25SZWN0KTsKLX0KLQot
dm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKAotICAgIEdyYXBoaWNzQ29udGV4
dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3Qg
SW50UmVjdCYgcmVjdCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFp
bnRTcGluQnV0dG9uKAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBw
YXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6cGFpbnRUZXh0RmllbGQoCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGlu
dCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25z
dCBDb2xvciYgY29sb3IsIGJvb2wgZmlsbENvbnRlbnRBcmVhLAotICAgIGJvb2wgZHJhd0VkZ2Vz
KQotewotICAgIC8vIEZhbGxiYWNrIHRvIHdoaXRlIHdoZW4gfGNvbG9yfCBpcyBpbnZhbGlkLgot
ICAgIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3IgPSBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvci5yZ2Io
KSA6IENvbG9yOjp3aGl0ZTsKLQotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5w
YWludFRleHRGaWVsZCgKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwg
cGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCwKLSAgICAgICAgYmFja2dyb3VuZENvbG9y
LCBmaWxsQ29udGVudEFyZWEsIGRyYXdFZGdlcyk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6
OnBhaW50VHJhY2tiYXIoCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBz
dGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAg
IHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFRyYWNrYmFyKAotICAgICAgICBn
Yy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRl
LCByZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcigKLSAg
ICBHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiBiYXJSZWN0LCBjb25zdCBJbnRS
ZWN0JiB2YWx1ZVJlY3QsIGJvb2wgZGV0ZXJtaW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMp
Ci17Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50UHJvZ3Jlc3NCYXIo
Ci0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIGJhclJlY3QsIHZhbHVl
UmVjdCwgZGV0ZXJtaW5hdGUsIGFuaW1hdGVkU2Vjb25kcyk7Ci19Ci0KLSNlbGlmIE9TKExJTlVY
KQotCi1zdGF0aWMgV2ViVGhlbWVFbmdpbmU6OlBhcnQgV2ViVGhlbWVQYXJ0KENocm9taXVtQnJp
ZGdlOjpUaGVtZVBhcnQgcGFydCkKLXsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIENo
cm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFy
dFNjcm9sbGJhckxlZnRBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFy
TGVmdEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFy
cm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OwotICAg
IGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJVcEFycm93OiByZXR1cm4gV2ViVGhl
bWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJVcEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6
OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFy
dFNjcm9sbGJhckhvcml6b250YWxUaHVtYjsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyVmVydGljYWxUaHVtYjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xs
YmFyVmVydGljYWxUaHVtYjsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
SG9yaXpvbnRhbFRyYWNrOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jp
em9udGFsVHJhY2s7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRp
Y2FsVHJhY2s6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJh
Y2s7Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXZWJUaGVt
ZUVuZ2luZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsKLX0KLQotc3RhdGljIFdlYlRoZW1lRW5n
aW5lOjpTdGF0ZSBXZWJUaGVtZVN0YXRlKENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUg
c3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6
OlN0YXRlRGlzYWJsZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsKLSAg
ICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVyOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6
OlN0YXRlSG92ZXI7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw6IHJldHVy
biBXZWJUaGVtZUVuZ2luZTo6U3RhdGVOb3JtYWw7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6
U3RhdGVQcmVzc2VkOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlUHJlc3NlZDsKLSAgICB9
Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpT
dGF0ZURpc2FibGVkOwotfQotCi1zdGF0aWMgdm9pZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKENo
cm9taXVtQnJpZGdlOjpUaGVtZVBhcnQgcGFydCwgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRT
dGF0ZSBzdGF0ZSwgY29uc3QgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyog
ZXh0cmFQYXJhbXMsIFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyogd2ViVGhlbWVFeHRyYVBh
cmFtcykKLXsKLSAgICBpZiAocGFydCA9PSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhv
cml6b250YWxUcmFjayB8fCBwYXJ0ID09IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVy
dGljYWxUcmFjaykgewotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFj
ay50cmFja1ggPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tYOwotICAgICAgICB3
ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1kgPSBleHRyYVBhcmFtcy0+
c2Nyb2xsYmFyVHJhY2sudHJhY2tZOwotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3Jv
bGxiYXJUcmFjay50cmFja1dpZHRoID0gZXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNr
V2lkdGg7Ci0gICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNr
SGVpZ2h0ID0gZXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrSGVpZ2h0OwotICAgIH0K
LX0KLQotSW50U2l6ZSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShUaGVtZVBhcnQg
cGFydCkKLXsKLSAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5nZXRT
aXplKFdlYlRoZW1lUGFydChwYXJ0KSk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50
VGhlbWVQYXJ0KAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIFRoZW1lUGFydCBwYXJ0LCBUaGVt
ZVBhaW50U3RhdGUgc3RhdGUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFRoZW1lUGFpbnRF
eHRyYVBhcmFtcyogZXh0cmFQYXJhbXMpCi17Ci0gICAgV2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFy
YW1zIHdlYlRoZW1lRXh0cmFQYXJhbXM7Ci0gICAgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhwYXJ0
LCBzdGF0ZSwgZXh0cmFQYXJhbXMsICZ3ZWJUaGVtZUV4dHJhUGFyYW1zKTsKLSAgICB3ZWJLaXRD
bGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnQoCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCksIFdlYlRoZW1lUGFydChwYXJ0KSwgV2ViVGhlbWVTdGF0ZShzdGF0ZSks
IHJlY3QsICZ3ZWJUaGVtZUV4dHJhUGFyYW1zKTsKLX0KLQotI2VsaWYgT1MoREFSV0lOKQotCi12
b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAotICAgIEdyYXBoaWNzQ29u
dGV4dCogZ2MsIFRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgVGhlbWVQYWludFNpemUgc2l6ZSwgY29u
c3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8mIHNjcm9sbGJh
ckluZm8pCi17Ci0gICAgV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhckluZm8gd2ViVGhlbWVTY3Jv
bGxiYXJJbmZvOwotCi0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLm9yaWVudGF0aW9uID0gc3Rh
dGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVudGF0aW9uPihzY3JvbGxiYXJJ
bmZvLm9yaWVudGF0aW9uKTsKLSAgICB3ZWJUaGVtZVNjcm9sbGJhckluZm8ucGFyZW50ID0gc3Rh
dGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhclBhcmVudD4oc2Nyb2xsYmFySW5mby5w
YXJlbnQpOwotICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5tYXhWYWx1ZSA9IHNjcm9sbGJhcklu
Zm8ubWF4VmFsdWU7Ci0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLmN1cnJlbnRWYWx1ZSA9IHNj
cm9sbGJhckluZm8uY3VycmVudFZhbHVlOwotICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby52aXNp
YmxlU2l6ZSA9IHNjcm9sbGJhckluZm8udmlzaWJsZVNpemU7Ci0gICAgd2ViVGhlbWVTY3JvbGxi
YXJJbmZvLnRvdGFsU2l6ZSA9IHNjcm9sbGJhckluZm8udG90YWxTaXplOwotCi0gICAgd2ViS2l0
Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIGdj
LT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6
OlN0YXRlPihzdGF0ZSksCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTaXpl
PihzaXplKSwKLSAgICAgICAgcmVjdCwKLSAgICAgICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvKTsK
LX0KLQotI2VuZGlmCi0KLS8vIFRyYWNlIEV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJy
aWRnZTo6dHJhY2VFdmVudEJlZ2luKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBj
aGFyKiBleHRyYSkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEJlZ2luKG5hbWUs
IGlkLCBleHRyYSk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoY29u
c3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQotewotICAgIHdlYktp
dENsaWVudCgpLT50cmFjZUV2ZW50RW5kKG5hbWUsIGlkLCBleHRyYSk7Ci19Ci0KLS8vIFZpc2l0
ZWQgTGlua3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFz
aChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgdXJsX2Nhbm9uOjpS
YXdDYW5vbk91dHB1dDwyMDQ4PiBidWZmZXI7Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2Vk
OwotICAgIGlmICghdXJsX3V0aWw6OkNhbm9uaWNhbGl6ZSh1cmwsIGxlbmd0aCwgMCwgJmJ1ZmZl
ciwgJnBhcnNlZCkpCi0gICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCBVUkxzIGFyZSB1bnZp
c2l0ZWQuCi0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVy
LmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKLX0KLQotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6
OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKLXsK
LSAgICAvLyBSZXNvbHZlIHRoZSByZWxhdGl2ZSBVUkwgdXNpbmcgZ29vZ2xldXJsIGFuZCBwYXNz
IHRoZSBhYnNvbHV0ZSBVUkwgdXAgdG8KLSAgICAvLyB0aGUgZW1iZWRkZXIuIFdlIGNvdWxkIGNy
ZWF0ZSBhIEdVUkwgb2JqZWN0IGZyb20gdGhlIGJhc2UgYW5kIHJlc29sdmUKLSAgICAvLyB0aGUg
cmVsYXRpdmUgVVJMIHRoYXQgd2F5LCBidXQgY2FsbGluZyB0aGUgbG93ZXItbGV2ZWwgZnVuY3Rp
b25zCi0gICAgLy8gZGlyZWN0bHkgc2F2ZXMgdXMgdGhlIHN0cmluZyBhbGxvY2F0aW9uIGluIG1v
c3QgY2FzZXMuCi0gICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4PiBidWZmZXI7Ci0g
ICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOwotCi0jaWYgVVNFKEdPT0dMRVVSTCkKLSAgICBj
b25zdCBDU3RyaW5nJiBjc3RyID0gYmFzZS51dGY4U3RyaW5nKCk7Ci0gICAgY29uc3QgY2hhciog
ZGF0YSA9IGNzdHIuZGF0YSgpOwotICAgIGludCBsZW5ndGggPSBjc3RyLmxlbmd0aCgpOwotICAg
IGNvbnN0IHVybF9wYXJzZTo6UGFyc2VkJiBzcmNQYXJzZWQgPSBiYXNlLnBhcnNlZCgpOwotI2Vs
c2UKLSAgICAvLyBXaGVuIHdlJ3JlIG5vdCB1c2luZyBHb29nbGVVUkwsIGZpcnN0IGNhbm9uaWNh
bGl6ZSBpdCBzbyB3ZSBjYW4gcmVzb2x2ZSBpdAotICAgIC8vIGJlbG93LgotICAgIHVybF9jYW5v
bjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gc3JjQ2Fub247Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQg
c3JjUGFyc2VkOwotICAgIFN0cmluZyBzdHIgPSBiYXNlLnN0cmluZygpOwotICAgIGlmICghdXJs
X3V0aWw6OkNhbm9uaWNhbGl6ZShzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCksIDAsICZz
cmNDYW5vbiwgJnNyY1BhcnNlZCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IGNoYXIq
IGRhdGEgPSBzcmNDYW5vbi5kYXRhKCk7Ci0gICAgaW50IGxlbmd0aCA9IHNyY0Nhbm9uLmxlbmd0
aCgpOwotI2VuZGlmCi0KLSAgICBpZiAoIXVybF91dGlsOjpSZXNvbHZlUmVsYXRpdmUoZGF0YSwg
bGVuZ3RoLCBzcmNQYXJzZWQsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzKCksCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSwgMCwgJmJ1ZmZl
ciwgJnBhcnNlZCkpCi0gICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCByZXNvbHZlZCBVUkwu
Ci0KLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0
YSgpLCBidWZmZXIubGVuZ3RoKCkpOwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjppc0xpbmtW
aXNpdGVkKExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xp
ZW50KCktPmlzTGlua1Zpc2l0ZWQodmlzaXRlZExpbmtIYXNoKTsKLX0KLQotLy8gVGhlc2UgYXJl
IHRlbXBvcmFyeSBtZXRob2RzIHRoYXQgdGhlIFdlYktpdCBsYXllciBjYW4gdXNlIHRvIGNhbGwg
dG8gdGhlCi0vLyBHbHVlIGxheWVyLiBPbmNlIHRoZSBHbHVlIGxheWVyIG1vdmVzIGVudGlyZWx5
IGludG8gdGhlIFdlYktpdCBsYXllciwgdGhlc2UKLS8vIG1ldGhvZHMgd2lsbCBiZSBkZWxldGVk
LgotCi12b2lkIENocm9taXVtQnJpZGdlOjpub3RpZnlKU091dE9mTWVtb3J5KEZyYW1lKiBmcmFt
ZSkKLXsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJGcmFtZUlt
cGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwotICAgIGlmICgh
d2ViRnJhbWUtPmNsaWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgd2ViRnJhbWUtPmNsaWVu
dCgpLT5kaWRFeGhhdXN0TWVtb3J5QXZhaWxhYmxlRm9yU2NyaXB0KHdlYkZyYW1lKTsKLX0KLQot
aW50IENocm9taXVtQnJpZGdlOjptZW1vcnlVc2FnZU1CKCkKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50Pih3ZWJLaXRDbGllbnQoKS0+bWVtb3J5VXNhZ2VNQigpKTsKLX0KLQotaW50IENo
cm9taXVtQnJpZGdlOjphY3R1YWxNZW1vcnlVc2FnZU1CKCkKLXsKLSAgICByZXR1cm4gc3RhdGlj
X2Nhc3Q8aW50Pih3ZWJLaXRDbGllbnQoKS0+YWN0dWFsTWVtb3J5VXNhZ2VNQigpKTsKLX0KLQot
aW50IENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBX
ZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7Ci0gICAg
aWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjbGllbnQtPnNjcmVl
bkluZm8oKS5kZXB0aDsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNv
bXBvbmVudChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9
IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJl
dHVybiAwOwotICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5kZXB0aFBlckNvbXBvbmVu
dDsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCog
d2lkZ2V0KQotewotICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGll
bnQod2lkZ2V0KTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0
dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLmlzTW9ub2Nocm9tZTsKLX0KLQotSW50UmVjdCBDaHJv
bWl1bUJyaWRnZTo6c2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJXaWRnZXRD
bGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7Ci0gICAgaWYgKCFjbGll
bnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0KCk7Ci0gICAgcmV0dXJuIGNsaWVudC0+c2NyZWVu
SW5mbygpLnJlY3Q7Ci19Ci0KLUludFJlY3QgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkF2YWlsYWJs
ZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0
b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwotICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1
cm4gSW50UmVjdCgpOwotICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5hdmFpbGFibGVS
ZWN0OwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjpwb3B1cHNBbGxvd2VkKE5QUCBucHApCi17
Ci0gICAgLy8gRklYTUU6IEdpdmUgdGhlIGVtYmVkZGVyIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4K
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVdvcmtlckNvbnRleHRQcm94eSogV29ya2VyQ29udGV4
dFByb3h5OjpjcmVhdGUoV29ya2VyKiB3b3JrZXIpCi17Ci0gICAgcmV0dXJuIFdlYldvcmtlckNs
aWVudEltcGw6OmNyZWF0ZVdvcmtlckNvbnRleHRQcm94eSh3b3JrZXIpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9y
bUJyaWRnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxh
dGZvcm1CcmlkZ2UuY3BwCShyZXZpc2lvbiA3NjA4NikJKGZyb20gU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwOjc2MDg2KQorKysgU291cmNlL1dlYktpdC9jaHJv
bWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTk3
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgor
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGlu
IHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xl
IEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05U
UklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisg
KiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisKKyNp
bmNsdWRlIDxnb29nbGV1cmwvc3JjL3VybF91dGlsLmg+CisKKyNpbmNsdWRlICJDaHJvbWUuaCIK
KyNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiV2ViQXVkaW9CdXMuaCIK
KyNpbmNsdWRlICJXZWJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJXZWJDb29raWUuaCIKKyNpbmNs
dWRlICJXZWJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2Vi
RHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJXZWJGaWxlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV2Vi
RnJhbWVDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJJ
REJLZXkuaCIKKyNpbmNsdWRlICJXZWJJbWFnZS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2lu
Y2x1ZGUgIldlYktpdENsaWVudC5oIgorI2luY2x1ZGUgIldlYk1pbWVSZWdpc3RyeS5oIgorI2lu
Y2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5MaXN0
QnVpbGRlckltcGwuaCIKKyNpbmNsdWRlICJXZWJTYW5kYm94U3VwcG9ydC5oIgorI2luY2x1ZGUg
IldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIldlYlNjcmVlbkluZm8uaCIK
KyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJX
ZWJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmll
d0ltcGwuaCIKKyNpbmNsdWRlICJXZWJXb3JrZXJDbGllbnRJbXBsLmgiCisKKyNpZiBQTEFURk9S
TShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjZW5kaWYKKworI2lm
IE9TKFdJTkRPV1MpCisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2luY2x1ZGUgIndpbi9XZWJUaGVt
ZUVuZ2luZS5oIgorI2VuZGlmCisKKyNpZiBPUyhMSU5VWCkgfHwgT1MoRlJFRUJTRCkKKyNpbmNs
dWRlICJsaW51eC9XZWJUaGVtZUVuZ2luZS5oIgorI2luY2x1ZGUgIldlYkZvbnRJbmZvLmgiCisj
aW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCisjZW5kaWYKKworI2lmIE9TKERBUldJTikK
KyNpbmNsdWRlICJtYWMvV2ViVGhlbWVFbmdpbmUuaCIKKyNlbmRpZgorCisjaWYgV0VCS0lUX1VT
SU5HX1NLSUEKKyNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNlbmRpZgorCisjaW5jbHVk
ZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJGcmFtZVZp
ZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5
QmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlBsdWdp
bkRhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgIldvcmtlci5o
IgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRp
b25zLmg+CisKKy8vIFdlIGFyZSBwYXJ0IG9mIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24uCit1
c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBD
aHJvbWVDbGllbnRJbXBsKiB0b0Nocm9tZUNsaWVudEltcGwoV2lkZ2V0KiB3aWRnZXQpCit7Cisg
ICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgRnJhbWVWaWV3KiB2aWV3
OworICAgIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCisgICAgICAgIHZpZXcgPSBzdGF0aWNf
Y2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpOworICAgIGVsc2UgaWYgKHdpZGdldC0+cGFyZW50KCkg
JiYgd2lkZ2V0LT5wYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgdmlldyA9IHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHdpZGdldC0+cGFyZW50KCkpOworICAgIGVsc2UKKyAgICAgICAg
cmV0dXJuIDA7CisKKyAgICBQYWdlKiBwYWdlID0gdmlldy0+ZnJhbWUoKSA/IHZpZXctPmZyYW1l
KCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxDaHJvbWVDbGllbnRJbXBsKj4ocGFnZS0+Y2hyb21lKCktPmNs
aWVudCgpKTsKK30KKworc3RhdGljIFdlYldpZGdldENsaWVudCogdG9XZWJXaWRnZXRDbGllbnQo
V2lkZ2V0KiB3aWRnZXQpCit7CisgICAgQ2hyb21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1w
bCA9IHRvQ2hyb21lQ2xpZW50SW1wbCh3aWRnZXQpOworICAgIGlmICghY2hyb21lQ2xpZW50SW1w
bCB8fCAhY2hyb21lQ2xpZW50SW1wbC0+d2ViVmlldygpKQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gY2hyb21lQ2xpZW50SW1wbC0+d2ViVmlldygpLT5jbGllbnQoKTsKK30KKworc3Rh
dGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkK
K3sKKyAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1l
KGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICBpZiAoIWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5j
bGllbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIg
PSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKKyAgICBpZiAoIWNv
b2tpZUphcikKKyAgICAgICAgY29va2llSmFyID0gd2ViS2l0Q2xpZW50KCktPmNvb2tpZUphcigp
OworICAgIHJldHVybiBjb29raWVKYXI7Cit9CisKKy8vIENhY2hlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
dm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShjb25zdCBLVVJMJiB1cmwsIGRvdWJs
ZSByZXNwb25zZVRpbWUsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICB3ZWJLaXRD
bGllbnQoKS0+Y2FjaGVNZXRhZGF0YSh1cmwsIHJlc3BvbnNlVGltZSwgZGF0YS5kYXRhKCksIGRh
dGEuc2l6ZSgpKTsKK30KKworLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitib29sIENocm9taXVt
QnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZSgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkRm9ybWF0IGZvcm1hdCwKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyIGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmNsaXBib2Fy
ZCgpLT5pc0Zvcm1hdEF2YWlsYWJsZSgKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJk
OjpGb3JtYXQ+KGZvcm1hdCksCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVm
ZmVyPihidWZmZXIpKTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFk
UGxhaW5UZXh0KAorICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVy
KQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRQbGFpblRl
eHQoCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsK
K30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoCisgICAgUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCisgICAgU3RyaW5nKiBodG1sVGV4
dCwgS1VSTCogc291cmNlVVJMKQoreworICAgIFdlYlVSTCB1cmw7CisgICAgKmh0bWxUZXh0ID0g
d2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKKyAgICAgICAgc3RhdGljX2Nh
c3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwpOworICAgICpzb3VyY2VVUkwg
PSB1cmw7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlU2VsZWN0aW9u
KGNvbnN0IFN0cmluZyYgaHRtbFRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBLVVJMJiBzb3VyY2VVUkwsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBsYWluVGV4dCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGVTbWFydFBh
c3RlKQoreworICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVIVE1MKAorICAg
ICAgICBodG1sVGV4dCwgc291cmNlVVJMLCBwbGFpblRleHQsIHdyaXRlU21hcnRQYXN0ZSk7Cit9
CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0
cmluZyYgcGxhaW5UZXh0KQoreworICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3Jp
dGVQbGFpblRleHQocGxhaW5UZXh0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJv
YXJkV3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAg
IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVVUkwodXJsLCB0aXRsZSk7Cit9CisK
K3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UoTmF0aXZlSW1hZ2VQdHIg
aW1hZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtV
UkwmIHNvdXJjZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIFdlYklt
YWdlIHdlYkltYWdlKCppbWFnZSk7CisjZWxzZQorICAgIFdlYkltYWdlIHdlYkltYWdlKGltYWdl
KTsKKyNlbmRpZgorICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVJbWFnZSh3
ZWJJbWFnZSwgc291cmNlVVJMLCB0aXRsZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWV0YWRhdGEpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZURhdGEodHlwZSwgZGF0YSwgbWV0YWRh
dGEpOworfQorCitIYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRB
dmFpbGFibGVUeXBlcygKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1
ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpCit7CisgICAgV2ViVmVjdG9yPFdlYlN0cmlu
Zz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkQXZhaWxhYmxlVHlw
ZXMoCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCBj
b250YWluc0ZpbGVuYW1lcyk7CisgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzOworICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICB0eXBlcy5hZGQo
cmVzdWx0W2ldKTsKKyAgICByZXR1cm4gdHlwZXM7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6
OmNsaXBib2FyZFJlYWREYXRhKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVm
ZmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiB0eXBlLCBTdHJpbmcmIGRhdGEsIFN0cmluZyYgbWV0YWRhdGEpCit7CisgICAgV2ViU3RyaW5n
IHJlc3VsdERhdGE7CisgICAgV2ViU3RyaW5nIHJlc3VsdE1ldGFkYXRhOworICAgIGJvb2wgc3Vj
Y2VlZGVkID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkRGF0YSgKKyAgICAgICAg
c3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIHR5cGUsICZyZXN1bHRE
YXRhLCAmcmVzdWx0TWV0YWRhdGEpOworICAgIGlmIChzdWNjZWVkZWQpIHsKKyAgICAgICAgZGF0
YSA9IHJlc3VsdERhdGE7CisgICAgICAgIG1ldGFkYXRhID0gcmVzdWx0TWV0YWRhdGE7CisgICAg
fQorICAgIHJldHVybiBzdWNjZWVkZWQ7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIgYnVmZmVyKQoreworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktp
dENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEZpbGVuYW1lcygKKyAgICAgICAgc3RhdGljX2Nh
c3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOworICAgIFZlY3RvcjxTdHJpbmc+IGNv
bnZlcnRlZFJlc3VsdDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7
ICsraSkKKyAgICAgICAgY29udmVydGVkUmVzdWx0LmFwcGVuZChyZXN1bHRbaV0pOworICAgIHJl
dHVybiBjb252ZXJ0ZWRSZXN1bHQ7Cit9CisKKy8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9p
ZCBDaHJvbWl1bUJyaWRnZTo6c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3Ry
aW5nJiB2YWx1ZSkKK3sKKyAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUph
cihkb2N1bWVudCk7CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgY29va2llSmFyLT5zZXRD
b29raWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQor
CitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBXZWJDb29raWVK
YXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CisgICAgaWYgKGNvb2tpZUph
cikKKyAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZp
cnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyBD
aHJvbWl1bUJyaWRnZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwpCit7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBX
ZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CisgICAgaWYg
KGNvb2tpZUphcikKKyAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitib29sIENocm9taXVtQnJpZGdlOjpyYXdDb29raWVzKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYg
cmF3Q29va2llcykKK3sKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgV2ViVmVjdG9yPFdl
YkNvb2tpZT4gd2ViQ29va2llczsKKworICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0
Q29va2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVK
YXItPnJhd0Nvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2Vi
Q29va2llcyk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXpl
KCk7ICsraSkgeworICAgICAgICBjb25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tp
ZXNbaV07CisgICAgICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsCisgICAgICAgICAg
ICAgICAgICAgICAgd2ViQ29va2llLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNv
b2tpZS5kb21haW4sCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCisgICAg
ICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmV4cGlyZXMsCisgICAgICAgICAgICAgICAgICAg
ICAgd2ViQ29va2llLmh0dHBPbmx5LAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5z
ZWN1cmUsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlc3Npb24pOworICAgICAg
ICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAg
V2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOworICAgIGlm
IChjb29raWVKYXIpCisgICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2ll
TmFtZSk7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIFdlYkNv
b2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAoY29v
a2llSmFyKQorICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXNFbmFibGVkKGRvY3Vt
ZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKKy8vIEROUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJv
bWl1bUJyaWRnZTo6cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICB3
ZWJLaXRDbGllbnQoKS0+cHJlZmV0Y2hIb3N0TmFtZShob3N0bmFtZSk7Cit9CisKKy8vIEZpbGUg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGll
cygpLT5maWxlRXhpc3RzKHBhdGgpOworfQorCitib29sIENocm9taXVtQnJpZGdlOjpkZWxldGVG
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZp
bGVVdGlsaXRpZXMoKS0+ZGVsZXRlRmlsZShwYXRoKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRn
ZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVFbXB0eURpcmVjdG9yeShw
YXRoKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5n
JiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0KTsKK30KKwordm9pZCBD
aHJvbWl1bUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcmIHBhdGgpCit7Cisg
ICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cmV2ZWFsRm9sZGVySW5PUyhwYXRo
KTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29u
c3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIHJlc3VsdCkKK3sKKyAgICBkb3VibGUgbW9kaWZpY2F0
aW9uVGltZTsKKyAgICBpZiAoIXdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmdldEZp
bGVNb2RpZmljYXRpb25UaW1lKHBhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dGltZV90Pihtb2RpZmljYXRpb25U
aW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpkaXJl
Y3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGlyZWN0b3J5TmFtZShwYXRoKTsKK30KKworU3RyaW5nIENo
cm9taXVtQnJpZGdlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PmZpbGVVdGlsaXRpZXMoKS0+cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVu
dCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6Om1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBT
dHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPm1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdl
OjpnZXRBYnNvbHV0ZVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5nZXRBYnNvbHV0ZVBhdGgocGF0aCk7Cit9CisK
K2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+aXNEaXJlY3Rvcnko
cGF0aCk7Cit9CisKK0tVUkwgQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygp
LT5maWxlUGF0aFRvVVJMKHBhdGgpOworfQorCitQbGF0Zm9ybUZpbGVIYW5kbGUgQ2hyb21pdW1C
cmlkZ2U6Om9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCit7
CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPm9wZW5GaWxlKHBh
dGgsIG1vZGUpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpjbG9zZUZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMo
KS0+Y2xvc2VGaWxlKGhhbmRsZSk7Cit9CisKK2xvbmcgbG9uZyBDaHJvbWl1bUJyaWRnZTo6c2Vl
a0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNl
ZWtPcmlnaW4gb3JpZ2luKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxp
dGllcygpLT5zZWVrRmlsZShoYW5kbGUsIG9mZnNldCwgb3JpZ2luKTsKK30KKworYm9vbCBDaHJv
bWl1bUJyaWRnZTo6dHJ1bmNhdGVGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcg
bG9uZyBvZmZzZXQpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPnRydW5jYXRlRmlsZShoYW5kbGUsIG9mZnNldCk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRn
ZTo6cmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGlu
dCBsZW5ndGgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCkt
PnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7Cit9CisKK2ludCBDaHJvbWl1bUJy
aWRnZTo6d3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOworfQorCisvLyBGb250
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKKyNpZiBPUyhXSU5ET1dTKQorYm9vbCBDaHJvbWl1bUJyaWRnZTo6
ZW5zdXJlRm9udExvYWRlZChIRk9OVCBmb250KQoreworICAgIFdlYlNhbmRib3hTdXBwb3J0KiBz
cyA9IHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpOworCisgICAgLy8gaWYgdGhlcmUg
aXMgbm8gc2FuZGJveCwgdGhlbiB3ZSBjYW4gYXNzdW1lIHRoZSBmb250CisgICAgLy8gd2FzIGFi
bGUgdG8gYmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSBhbHJlYWR5CisgICAgcmV0dXJuIHNzID8gc3Mt
PmVuc3VyZUZvbnRMb2FkZWQoZm9udCkgOiB0cnVlOworfQorI2VuZGlmCisKKyNpZiBPUyhMSU5V
WCkgfHwgT1MoRlJFRUJTRCkKK1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZv
ckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFyYWN0ZXJz
KQoreworICAgIGlmICh3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKSkKKyAgICAgICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRGb250RmFtaWx5Rm9y
Q2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzKTsKKworICAgIFdlYkNTdHJpbmcg
ZmFtaWx5ID0gV2ViRm9udEluZm86OmZhbWlseUZvckNoYXJzKGNoYXJhY3RlcnMsIG51bUNoYXJh
Y3RlcnMpOworICAgIGlmIChmYW1pbHkuZGF0YSgpKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5n
Ojpmcm9tVVRGOChmYW1pbHkuZGF0YSgpKTsKKworICAgIHJldHVybiBXZWJTdHJpbmcoKTsKK30K
Kwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29uc3QgY2hh
ciogZm9udCwgaW50IHNpemVBbmRTdHlsZSwgRm9udFJlbmRlclN0eWxlKiByZXN1bHQpCit7Cisg
ICAgV2ViRm9udFJlbmRlclN0eWxlIHN0eWxlOworCisgICAgaWYgKHdlYktpdENsaWVudCgpLT5z
YW5kYm94U3VwcG9ydCgpKQorICAgICAgICB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQo
KS0+Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoZm9udCwgc2l6ZUFuZFN0eWxlLCAmc3R5bGUpOwor
ICAgIGVsc2UKKyAgICAgICAgV2ViRm9udEluZm86OnJlbmRlclN0eWxlRm9yU3RyaWtlKGZvbnQs
IHNpemVBbmRTdHlsZSwgJnN0eWxlKTsKKworICAgIHN0eWxlLnRvRm9udFJlbmRlclN0eWxlKHJl
c3VsdCk7Cit9CisjZW5kaWYKKworI2lmIE9TKERBUldJTikKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6
OmxvYWRGb250KE5TRm9udCogc3JjRm9udCwgQVRTRm9udENvbnRhaW5lclJlZiogb3V0KQorewor
ICAgIFdlYlNhbmRib3hTdXBwb3J0KiBzcyA9IHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9y
dCgpOworICAgIGlmIChzcykKKyAgICAgICAgcmV0dXJuIHNzLT5sb2FkRm9udChzcmNGb250LCBv
dXQpOworCisgICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gcmVz
cG9uc2UgdG8gYW4gZXJyb3IgbG9hZGluZyBhCisgICAgLy8gZm9udCBkdWUgdG8gYmVpbmcgYmxv
Y2tlZCBieSB0aGUgc2FuZGJveC4KKyAgICAvLyBUaGlzIGJ5IGRlZmluaXRpb24gc2hvdWxkbid0
IGhhcHBlbiBpZiB0aGVyZSBpcyBubyBzYW5kYm94IHN1cHBvcnQuCisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgKm91dCA9IDA7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisK
Ky8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGxhdGZvcm1GaWxlSGFuZGxlIENocm9taXVtQnJp
ZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGludCBkZXNp
cmVkRmxhZ3MpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZU9wZW5GaWxl
KFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIGRlc2lyZWRGbGFncyk7Cit9CisKK2ludCBDaHJvbWl1
bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGJv
b2wgc3luY0RpcikKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlRGVsZXRl
RmlsZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpLCBzeW5jRGlyKTsKK30KKworbG9uZyBDaHJvbWl1
bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVO
YW1lKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VHZXRGaWxlQXR0cmli
dXRlcyhXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKK30KKworbG9uZyBsb25nIENocm9taXVtQnJp
ZGdlOjpkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCit7Cisg
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVTaXplKFdlYlN0cmluZyh2
ZnNGaWxlTmFtZSkpOworfQorCisvLyBJbmRleGVkIERhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8
SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IENocm9taXVtQnJpZGdlOjppZGJGYWN0b3J5KCkK
K3sKKyAgICAvLyBUaGVyZSdzIG5vIHJlYXNvbiB3aHkgd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5l
dyBwcm94eSBlYWNoIHRpbWUsIGJ1dAorICAgIC8vIHRoZXJlJ3MgYWxzbyBubyBzdHJvbmcgcmVh
c29uIG5vdCB0by4KKyAgICByZXR1cm4gSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Y3JlYXRlKCk7
Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmlkYlNodXRkb3duKCkKK3sKKyAgICAvLyBJbiB0
aGUgYnJvd3NlciBwcm9jZXNzLCB0aGlzIHNodXRzIGRvd24gdGhlIHV0aWxpdHkgcHJvY2Vzcy4g
SW4gdGhlIHJlbmRlcmVyIHByb2Nlc3MsIGl0IGRvZXMgbm90aGluZy4KKyAgICB3ZWJLaXRDbGll
bnQoKS0+aWRiU2h1dGRvd24oKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlSURC
S2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNl
cmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZl
Y3RvcjxSZWZQdHI8SURCS2V5PiA+JiBrZXlzKQoreworICAgIFdlYlZlY3RvcjxXZWJTZXJpYWxp
emVkU2NyaXB0VmFsdWU+IHdlYlZhbHVlcyA9IHZhbHVlczsKKyAgICBXZWJWZWN0b3I8V2ViSURC
S2V5PiB3ZWJLZXlzOworICAgIHdlYktpdENsaWVudCgpLT5jcmVhdGVJREJLZXlzRnJvbVNlcmlh
bGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHdlYlZhbHVlcywgV2ViU3RyaW5nKGtleVBhdGgpLCB3ZWJL
ZXlzKTsKKworICAgIHNpemVfdCB3ZWJLZXlzU2l6ZSA9IHdlYktleXMuc2l6ZSgpOworICAgIGtl
eXMucmVzZXJ2ZUNhcGFjaXR5KHdlYktleXNTaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IHdlYktleXNTaXplOyArK2kpCisgICAgICAgIGtleXMuYXBwZW5kKFBhc3NSZWZQdHI8SURC
S2V5Pih3ZWJLZXlzW2ldKSk7Cit9CisKKy8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5n
IENocm9taXVtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoCisgICAg
dW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VS
TCYgdXJsKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2lnbmVkUHVibGljS2V5QW5k
Q2hhbGxlbmdlU3RyaW5nKGtleVNpemVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmcoY2hhbGxlbmdlKSwK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBXZWJVUkwodXJsKSk7Cit9CisKKy8vIExhbmd1YWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5n
IENocm9taXVtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgpCit7CisgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5kZWZhdWx0TG9jYWxlKCk7Cit9CisKKy8vIExheW91dFRlc3RNb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKQoreworICAgIHJl
dHVybiBXZWJLaXQ6OmxheW91dFRlc3RNb2RlKCk7Cit9CisKKy8vIE1pbWVUeXBlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVn
aXN0cnkoKS0+c3VwcG9ydHNJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKQorICAgICAgICAhPSBXZWJN
aW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOworfQorCitib29sIENocm9taXVtQnJpZGdlOjpp
c1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorewor
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSmF2YVNj
cmlwdE1JTUVUeXBlKG1pbWVUeXBlKQorICAgICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90
U3VwcG9ydGVkOworfQorCitib29sIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdl
TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xp
ZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c05vbkltYWdlTUlNRVR5cGUobWltZVR5cGUp
CisgICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKK1N0cmlu
ZyBDaHJvbWl1bUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRl
bnNpb24pCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+bWlt
ZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdl
OjptaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2Vi
S2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZyb21GaWxlKHBhdGgpOworfQor
CitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1l
UmVnaXN0cnkoKS0+cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUobWltZVR5cGUpOworfQor
CisvLyBQbHVnaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OnBsdWdpbnMo
Ym9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4qIHJlc3VsdHMpCit7CisgICAgV2ViUGx1
Z2luTGlzdEJ1aWxkZXJJbXBsIGJ1aWxkZXIocmVzdWx0cyk7CisgICAgd2ViS2l0Q2xpZW50KCkt
PmdldFBsdWdpbkxpc3QocmVmcmVzaCwgJmJ1aWxkZXIpOworICAgIHJldHVybiB0cnVlOyAgLy8g
RklYTUU6IFRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIGEgdmFs
dWUuCit9CisKK05QT2JqZWN0KiBDaHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9iamVj
dChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc1BsdWdp
bkNvbnRhaW5lcigpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2Fz
dDxXZWJQbHVnaW5Db250YWluZXJJbXBsKj4od2lkZ2V0KS0+c2NyaXB0YWJsZU9iamVjdCgpOwor
fQorCisvLyBSZXNvdXJjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8SW1hZ2U+IENocm9taXVt
QnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCit7Cisg
ICAgY29uc3QgV2ViRGF0YSYgcmVzb3VyY2UgPSB3ZWJLaXRDbGllbnQoKS0+bG9hZFJlc291cmNl
KG5hbWUpOworICAgIGlmIChyZXNvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbWFn
ZTo6bnVsbEltYWdlKCk7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6
OmNyZWF0ZSgpOworICAgIGltYWdlLT5zZXREYXRhKHJlc291cmNlLCB0cnVlKTsKKyAgICByZXR1
cm4gaW1hZ2U7Cit9CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCitQYXNzT3duUHRyPEF1ZGlv
QnVzPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShjb25zdCBjaGFy
KiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkKK3sKKyAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJj
ZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7CisgICAgaWYgKHJlc291cmNl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGRlY29kZUF1
ZGlvRmlsZURhdGEocmVzb3VyY2UuZGF0YSgpLCByZXNvdXJjZS5zaXplKCksIHNhbXBsZVJhdGUp
OworfQorCitQYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6ZGVjb2RlQXVkaW9G
aWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUp
Cit7CisgICAgV2ViQXVkaW9CdXMgd2ViQXVkaW9CdXM7CisgICAgaWYgKHdlYktpdENsaWVudCgp
LT5sb2FkQXVkaW9SZXNvdXJjZSgmd2ViQXVkaW9CdXMsIGRhdGEsIHNpemUsIHNhbXBsZVJhdGUp
KQorICAgICAgICByZXR1cm4gd2ViQXVkaW9CdXMucmVsZWFzZSgpOworICAgIHJldHVybiAwOwor
fQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKKworLy8gU2FuZGJveCAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQorCitib29sIENocm9taXVtQnJpZGdlOjpzYW5kYm94RW5hYmxlZCgpCit7CisgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5zYW5kYm94RW5hYmxlZCgpOworfQorCisvLyBTaGFyZWRUaW1lcnMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlv
bih2b2lkICgqZnVuYykoKSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJG
aXJlZEZ1bmN0aW9uKGZ1bmMpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRU
aW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+c2V0
U2hhcmVkVGltZXJGaXJlVGltZShmaXJlVGltZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6
OnN0b3BTaGFyZWRUaW1lcigpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnN0b3BTaGFyZWRUaW1l
cigpOworfQorCisvLyBTdGF0c0NvdW50ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6
OmRlY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHdlYktpdENs
aWVudCgpLT5kZWNyZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1C
cmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHdl
YktpdENsaWVudCgpLT5pbmNyZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7Cit9CisKK3ZvaWQgQ2hy
b21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQg
c2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpCit7CisgICAgd2ViS2l0
Q2xpZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBi
dWNrZXRDb3VudCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUVudW1lcmF0
aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKQorewor
ICAgIHdlYktpdENsaWVudCgpLT5oaXN0b2dyYW1FbnVtZXJhdGlvbihuYW1lLCBzYW1wbGUsIGJv
dW5kYXJ5VmFsdWUpOworfQorCisvLyBTdWRkZW4gVGVybWluYXRpb24gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21p
dW1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChib29sIGVuYWJsZWQpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChlbmFibGVkKTsKK30KKwor
Ly8gU3lzdGVtVGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitkb3VibGUgQ2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRU
aW1lKCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmN1cnJlbnRUaW1lKCk7Cit9CisK
Ky8vIFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworI2lmIE9TKFdJTkRPV1MpCisKK3ZvaWQgQ2hyb21p
dW1CcmlkZ2U6OnBhaW50QnV0dG9uKAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkK
K3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRCdXR0b24oCisgICAg
ICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2lj
U3RhdGUsIHJlY3QpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludE1lbnVMaXN0KAor
ICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2lj
U3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+
dGhlbWVFbmdpbmUoKS0+cGFpbnRNZW51TGlzdCgKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4
dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3Zv
aWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyQXJyb3coCisgICAgR3JhcGhpY3NDb250
ZXh0KiBnYywgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xs
YmFyQXJyb3coCisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHN0YXRl
LCBjbGFzc2ljU3RhdGUsIHJlY3QpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNj
cm9sbGJhclRodW1iKAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3Rh
dGUsIGludCBjbGFzc2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3
ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICAg
ICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNT
dGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJh
Y2soCisgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNs
YXNzaWNTdGF0ZSwKKyAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBhbGln
blJlY3QpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xs
YmFyVHJhY2soCisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQs
IHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QsCisgICAgICAgIGFsaWduUmVjdCk7Cit9CisKK3Zv
aWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbigKKyAgICBHcmFwaGljc0NvbnRleHQq
IGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IElu
dFJlY3QmIHJlY3QpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50
U3BpbkJ1dHRvbigKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFy
dCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6
OnBhaW50VGV4dEZpZWxkKAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQg
c3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3Qg
Q29sb3ImIGNvbG9yLCBib29sIGZpbGxDb250ZW50QXJlYSwKKyAgICBib29sIGRyYXdFZGdlcykK
K3sKKyAgICAvLyBGYWxsYmFjayB0byB3aGl0ZSB3aGVuIHxjb2xvcnwgaXMgaW52YWxpZC4KKyAg
ICBSR0JBMzIgYmFja2dyb3VuZENvbG9yID0gY29sb3IuaXNWYWxpZCgpID8gY29sb3IucmdiKCkg
OiBDb2xvcjo6d2hpdGU7CisKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFp
bnRUZXh0RmllbGQoCisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBh
cnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QsCisgICAgICAgIGJhY2tncm91bmRDb2xvciwg
ZmlsbENvbnRlbnRBcmVhLCBkcmF3RWRnZXMpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpw
YWludFRyYWNrYmFyKAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3Rh
dGUsIGludCBjbGFzc2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3
ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUcmFja2JhcigKKyAgICAgICAgZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwg
cmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIoCisgICAg
R3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29uc3QgSW50UmVj
dCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNvbmRzKQor
eworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFByb2dyZXNzQmFyKAor
ICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBiYXJSZWN0LCB2YWx1ZVJl
Y3QsIGRldGVybWluYXRlLCBhbmltYXRlZFNlY29uZHMpOworfQorCisjZWxpZiBPUyhMSU5VWCkK
Kworc3RhdGljIFdlYlRoZW1lRW5naW5lOjpQYXJ0IFdlYlRoZW1lUGFydChDaHJvbWl1bUJyaWRn
ZTo6VGhlbWVQYXJ0IHBhcnQpCit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgY2FzZSBDaHJv
bWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5l
OjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRT
Y3JvbGxiYXJMZWZ0QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckxl
ZnRBcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJv
dzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAgICBj
YXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzogcmV0dXJuIFdlYlRoZW1l
RW5naW5lOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQ
YXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRT
Y3JvbGxiYXJIb3Jpem9udGFsVGh1bWI7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNj
cm9sbGJhclZlcnRpY2FsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJh
clZlcnRpY2FsVGh1bWI7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhv
cml6b250YWxUcmFjazogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpv
bnRhbFRyYWNrOworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNh
bFRyYWNrOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNr
OworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV2ViVGhlbWVF
bmdpbmU6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7Cit9CisKK3N0YXRpYyBXZWJUaGVtZUVuZ2lu
ZTo6U3RhdGUgV2ViVGhlbWVTdGF0ZShDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0
YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpT
dGF0ZURpc2FibGVkOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7CisgICAg
Y2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVIb3ZlcjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpT
dGF0ZUhvdmVyOworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFsOiByZXR1cm4g
V2ViVGhlbWVFbmdpbmU6OlN0YXRlTm9ybWFsOworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0
YXRlUHJlc3NlZDogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZVByZXNzZWQ7CisgICAgfQor
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3Rh
dGVEaXNhYmxlZDsKK30KKworc3RhdGljIHZvaWQgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhDaHJv
bWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBhcnQsIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3Rh
dGUgc3RhdGUsIGNvbnN0IENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4
dHJhUGFyYW1zLCBXZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMqIHdlYlRoZW1lRXh0cmFQYXJh
bXMpCit7CisgICAgaWYgKHBhcnQgPT0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jp
em9udGFsVHJhY2sgfHwgcGFydCA9PSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRp
Y2FsVHJhY2spIHsKKyAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2su
dHJhY2tYID0gZXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWDsKKyAgICAgICAgd2Vi
VGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tZID0gZXh0cmFQYXJhbXMtPnNj
cm9sbGJhclRyYWNrLnRyYWNrWTsKKyAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xs
YmFyVHJhY2sudHJhY2tXaWR0aCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1dp
ZHRoOworICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja0hl
aWdodCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja0hlaWdodDsKKyAgICB9Cit9
CisKK0ludFNpemUgQ2hyb21pdW1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0IHBh
cnQpCit7CisgICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+Z2V0U2l6
ZShXZWJUaGVtZVBhcnQocGFydCkpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFRo
ZW1lUGFydCgKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBUaGVtZVBhcnQgcGFydCwgVGhlbWVQ
YWludFN0YXRlIHN0YXRlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBUaGVtZVBhaW50RXh0
cmFQYXJhbXMqIGV4dHJhUGFyYW1zKQoreworICAgIFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFt
cyB3ZWJUaGVtZUV4dHJhUGFyYW1zOworICAgIEdldFdlYlRoZW1lRXh0cmFQYXJhbXMocGFydCwg
c3RhdGUsIGV4dHJhUGFyYW1zLCAmd2ViVGhlbWVFeHRyYVBhcmFtcyk7CisgICAgd2ViS2l0Q2xp
ZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50KAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLCBXZWJUaGVtZVBhcnQocGFydCksIFdlYlRoZW1lU3RhdGUoc3RhdGUpLCBy
ZWN0LCAmd2ViVGhlbWVFeHRyYVBhcmFtcyk7Cit9CisKKyNlbGlmIE9TKERBUldJTikKKwordm9p
ZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGdjLCBUaGVtZVBhaW50U3RhdGUgc3RhdGUsIFRoZW1lUGFpbnRTaXplIHNpemUsIGNvbnN0
IEludFJlY3QmIHJlY3QsIGNvbnN0IFRoZW1lUGFpbnRTY3JvbGxiYXJJbmZvJiBzY3JvbGxiYXJJ
bmZvKQoreworICAgIFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJJbmZvIHdlYlRoZW1lU2Nyb2xs
YmFySW5mbzsKKworICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5vcmllbnRhdGlvbiA9IHN0YXRp
Y19jYXN0PFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJPcmllbnRhdGlvbj4oc2Nyb2xsYmFySW5m
by5vcmllbnRhdGlvbik7CisgICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLnBhcmVudCA9IHN0YXRp
Y19jYXN0PFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJQYXJlbnQ+KHNjcm9sbGJhckluZm8ucGFy
ZW50KTsKKyAgICB3ZWJUaGVtZVNjcm9sbGJhckluZm8ubWF4VmFsdWUgPSBzY3JvbGxiYXJJbmZv
Lm1heFZhbHVlOworICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5jdXJyZW50VmFsdWUgPSBzY3Jv
bGxiYXJJbmZvLmN1cnJlbnRWYWx1ZTsKKyAgICB3ZWJUaGVtZVNjcm9sbGJhckluZm8udmlzaWJs
ZVNpemUgPSBzY3JvbGxiYXJJbmZvLnZpc2libGVTaXplOworICAgIHdlYlRoZW1lU2Nyb2xsYmFy
SW5mby50b3RhbFNpemUgPSBzY3JvbGxiYXJJbmZvLnRvdGFsU2l6ZTsKKworICAgIHdlYktpdENs
aWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhclRodW1iKAorICAgICAgICBnYy0+
cGxhdGZvcm1Db250ZXh0KCksCisgICAgICAgIHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpT
dGF0ZT4oc3RhdGUpLAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJUaGVtZUVuZ2luZTo6U2l6ZT4o
c2l6ZSksCisgICAgICAgIHJlY3QsCisgICAgICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mbyk7Cit9
CisKKyNlbmRpZgorCisvLyBUcmFjZSBFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1Ccmlk
Z2U6OnRyYWNlRXZlbnRCZWdpbihjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hh
ciogZXh0cmEpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnRyYWNlRXZlbnRCZWdpbihuYW1lLCBp
ZCwgZXh0cmEpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKGNvbnN0
IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkKK3sKKyAgICB3ZWJLaXRD
bGllbnQoKS0+dHJhY2VFdmVudEVuZChuYW1lLCBpZCwgZXh0cmEpOworfQorCisvLyBWaXNpdGVk
IExpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2go
Y29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHVybF9jYW5vbjo6UmF3
Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOworICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsK
KyAgICBpZiAoIXVybF91dGlsOjpDYW5vbmljYWxpemUodXJsLCBsZW5ndGgsIDAsICZidWZmZXIs
ICZwYXJzZWQpKQorICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQgVVJMcyBhcmUgdW52aXNp
dGVkLgorICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5k
YXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7Cit9CisKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2
aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCit7Cisg
ICAgLy8gUmVzb2x2ZSB0aGUgcmVsYXRpdmUgVVJMIHVzaW5nIGdvb2dsZXVybCBhbmQgcGFzcyB0
aGUgYWJzb2x1dGUgVVJMIHVwIHRvCisgICAgLy8gdGhlIGVtYmVkZGVyLiBXZSBjb3VsZCBjcmVh
dGUgYSBHVVJMIG9iamVjdCBmcm9tIHRoZSBiYXNlIGFuZCByZXNvbHZlCisgICAgLy8gdGhlIHJl
bGF0aXZlIFVSTCB0aGF0IHdheSwgYnV0IGNhbGxpbmcgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9u
cworICAgIC8vIGRpcmVjdGx5IHNhdmVzIHVzIHRoZSBzdHJpbmcgYWxsb2NhdGlvbiBpbiBtb3N0
IGNhc2VzLgorICAgIHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOworICAg
IHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsKKworI2lmIFVTRShHT09HTEVVUkwpCisgICAgY29u
c3QgQ1N0cmluZyYgY3N0ciA9IGJhc2UudXRmOFN0cmluZygpOworICAgIGNvbnN0IGNoYXIqIGRh
dGEgPSBjc3RyLmRhdGEoKTsKKyAgICBpbnQgbGVuZ3RoID0gY3N0ci5sZW5ndGgoKTsKKyAgICBj
b25zdCB1cmxfcGFyc2U6OlBhcnNlZCYgc3JjUGFyc2VkID0gYmFzZS5wYXJzZWQoKTsKKyNlbHNl
CisgICAgLy8gV2hlbiB3ZSdyZSBub3QgdXNpbmcgR29vZ2xlVVJMLCBmaXJzdCBjYW5vbmljYWxp
emUgaXQgc28gd2UgY2FuIHJlc29sdmUgaXQKKyAgICAvLyBiZWxvdy4KKyAgICB1cmxfY2Fub246
OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IHNyY0Nhbm9uOworICAgIHVybF9wYXJzZTo6UGFyc2VkIHNy
Y1BhcnNlZDsKKyAgICBTdHJpbmcgc3RyID0gYmFzZS5zdHJpbmcoKTsKKyAgICBpZiAoIXVybF91
dGlsOjpDYW5vbmljYWxpemUoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpLCAwLCAmc3Jj
Q2Fub24sICZzcmNQYXJzZWQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBjaGFyKiBk
YXRhID0gc3JjQ2Fub24uZGF0YSgpOworICAgIGludCBsZW5ndGggPSBzcmNDYW5vbi5sZW5ndGgo
KTsKKyNlbmRpZgorCisgICAgaWYgKCF1cmxfdXRpbDo6UmVzb2x2ZVJlbGF0aXZlKGRhdGEsIGxl
bmd0aCwgc3JjUGFyc2VkLCBhdHRyaWJ1dGVVUkwuY2hhcmFjdGVycygpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVVUkwubGVuZ3RoKCksIDAsICZidWZmZXIs
ICZwYXJzZWQpKQorICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQgcmVzb2x2ZWQgVVJMLgor
CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEo
KSwgYnVmZmVyLmxlbmd0aCgpKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNMaW5rVmlz
aXRlZChMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2gpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5pc0xpbmtWaXNpdGVkKHZpc2l0ZWRMaW5rSGFzaCk7Cit9CisKKy8vIFRoZXNlIGFyZSB0
ZW1wb3JhcnkgbWV0aG9kcyB0aGF0IHRoZSBXZWJLaXQgbGF5ZXIgY2FuIHVzZSB0byBjYWxsIHRv
IHRoZQorLy8gR2x1ZSBsYXllci4gT25jZSB0aGUgR2x1ZSBsYXllciBtb3ZlcyBlbnRpcmVseSBp
bnRvIHRoZSBXZWJLaXQgbGF5ZXIsIHRoZXNlCisvLyBtZXRob2RzIHdpbGwgYmUgZGVsZXRlZC4K
Kwordm9pZCBDaHJvbWl1bUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeShGcmFtZSogZnJhbWUp
Cit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVJbXBs
KiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBpZiAoIXdl
YkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYkZyYW1lLT5jbGllbnQo
KS0+ZGlkRXhoYXVzdE1lbW9yeUF2YWlsYWJsZUZvclNjcmlwdCh3ZWJGcmFtZSk7Cit9CisKK2lu
dCBDaHJvbWl1bUJyaWRnZTo6bWVtb3J5VXNhZ2VNQigpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4od2ViS2l0Q2xpZW50KCktPm1lbW9yeVVzYWdlTUIoKSk7Cit9CisKK2ludCBDaHJv
bWl1bUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpCit7CisgICAgcmV0dXJuIHN0YXRpY19j
YXN0PGludD4od2ViS2l0Q2xpZW50KCktPmFjdHVhbE1lbW9yeVVzYWdlTUIoKSk7Cit9CisKK2lu
dCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2Vi
V2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOworICAgIGlm
ICghY2xpZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5J
bmZvKCkuZGVwdGg7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21w
b25lbnQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0
b1dlYldpZGdldENsaWVudCh3aWRnZXQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1
cm4gMDsKKyAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuZGVwdGhQZXJDb21wb25lbnQ7
Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdp
ZGdldCkKK3sKKyAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50
KHdpZGdldCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVy
biBjbGllbnQtPnNjcmVlbkluZm8oKS5pc01vbm9jaHJvbWU7Cit9CisKK0ludFJlY3QgQ2hyb21p
dW1CcmlkZ2U6OnNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xp
ZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOworICAgIGlmICghY2xpZW50
KQorICAgICAgICByZXR1cm4gSW50UmVjdCgpOworICAgIHJldHVybiBjbGllbnQtPnNjcmVlbklu
Zm8oKS5yZWN0OworfQorCitJbnRSZWN0IENocm9taXVtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVS
ZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9X
ZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJu
IEludFJlY3QoKTsKKyAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuYXZhaWxhYmxlUmVj
dDsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6cG9wdXBzQWxsb3dlZChOUFAgbnBwKQorewor
ICAgIC8vIEZJWE1FOiBHaXZlIHRoZSBlbWJlZGRlciBhIHdheSB0byBjb250cm9sIHRoaXMuCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitXb3JrZXJDb250ZXh0UHJveHkqIFdvcmtlckNvbnRleHRQ
cm94eTo6Y3JlYXRlKFdvcmtlciogd29ya2VyKQoreworICAgIHJldHVybiBXZWJXb3JrZXJDbGll
bnRJbXBsOjpjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkod29ya2VyKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1C
cmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRm
b3JtQnJpZGdlLmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAK
ICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiAjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy91
cmxfdXRpbC5oPgogCkBAIC0xNDUsMTQgKzE0NSwxNCBAQCBzdGF0aWMgV2ViQ29va2llSmFyKiBn
ZXRDb29raWVKYXIoY29uc3QgCiAKIC8vIENhY2hlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDaHJv
bWl1bUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShjb25zdCBLVVJMJiB1cmwsIGRvdWJsZSByZXNwb25z
ZVRpbWUsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNh
Y2hlTWV0YWRhdGEoY29uc3QgS1VSTCYgdXJsLCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBW
ZWN0b3I8Y2hhcj4mIGRhdGEpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmNhY2hlTWV0YWRhdGEo
dXJsLCByZXNwb25zZVRpbWUsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKIC8vIENs
aXBib2FyZCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3Jt
YXRBdmFpbGFibGUoCitib29sIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWls
YWJsZSgKICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0IGZvcm1hdCwKICAg
ICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlcikKIHsKQEAgLTE2MSwx
NCArMTYxLDE0IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZElzRm9ybWF0QXYKICAg
ICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwogfQogCi1T
dHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoCitTdHJpbmcgUGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoCiAgICAgUGFzdGVib2FyZFByaXZh
dGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5jbGlwYm9hcmQoKS0+cmVhZFBsYWluVGV4dCgKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xp
cGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRSZWFkSFRNTCgKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKAog
ICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAogICAgIFN0cmlu
ZyogaHRtbFRleHQsIEtVUkwqIHNvdXJjZVVSTCkKIHsKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lk
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTCgKICAgICAqc291cmNlVVJMID0gdXJs
OwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNlbGVjdGlvbihjb25z
dCBTdHJpbmcmIGh0bWxUZXh0LAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVT
ZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBodG1sVGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVSTCwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0
ZVNtYXJ0UGFzdGUpCkBAIC0xODcsMTcgKzE4NywxNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpj
bGlwYm9hcmRXcml0ZVNlbGVjCiAgICAgICAgIGh0bWxUZXh0LCBzb3VyY2VVUkwsIHBsYWluVGV4
dCwgd3JpdGVTbWFydFBhc3RlKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJk
V3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwbGFpblRleHQpCit2b2lkIFBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHBsYWluVGV4dCkKIHsK
ICAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlUGxhaW5UZXh0KHBsYWluVGV4
dCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtV
UkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBi
b2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAg
ICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlVVJMKHVybCwgdGl0bGUpOwogfQog
Ci12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRy
IGltYWdlLAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJ
bWFnZVB0ciBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgS1VSTCYgc291cmNlVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKQogewpAQCAtMjA5LDE0ICsyMDksMTQgQEAgdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZQogICAgIHdlYktpdENsaWVudCgp
LT5jbGlwYm9hcmQoKS0+d3JpdGVJbWFnZSh3ZWJJbWFnZSwgc291cmNlVVJMLCB0aXRsZSk7CiB9
CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YShjb25zdCBTdHJpbmcm
IHR5cGUsCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEoY29uc3QgU3Ry
aW5nJiB0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgZGF0YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIG1ldGFkYXRhKQogewogICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQo
KS0+d3JpdGVEYXRhKHR5cGUsIGRhdGEsIG1ldGFkYXRhKTsKIH0KIAotSGFzaFNldDxTdHJpbmc+
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoCitIYXNoU2V0PFN0
cmluZz4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKICAgICBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwgYm9vbCogY29udGFpbnNG
aWxlbmFtZXMpCiB7CiAgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xp
ZW50KCktPmNsaXBib2FyZCgpLT5yZWFkQXZhaWxhYmxlVHlwZXMoCkBAIC0yMjcsNyArMjI3LDcg
QEAgSGFzaFNldDxTdHJpbmc+IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcgogICAgIHJldHVybiB0
eXBlczsKIH0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCitib29sIFBsYXRmb3JtQnJpZGdl
OjpjbGlwYm9hcmRSZWFkRGF0YShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1
ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmlu
ZyYgdHlwZSwgU3RyaW5nJiBkYXRhLCBTdHJpbmcmIG1ldGFkYXRhKQogewogICAgIFdlYlN0cmlu
ZyByZXN1bHREYXRhOwpAQCAtMjQxLDcgKzI0MSw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNs
aXBib2FyZFJlYWREYXRhKFAKICAgICByZXR1cm4gc3VjY2VlZGVkOwogfQogCi1WZWN0b3I8U3Ry
aW5nPiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyhQYXN0ZWJvYXJkUHJp
dmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlcikKK1ZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIgYnVmZmVyKQogewogICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktp
dENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEZpbGVuYW1lcygKICAgICAgICAgc3RhdGljX2Nh
c3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwpAQCAtMjUzLDcgKzI1Myw3IEBAIFZl
Y3RvcjxTdHJpbmc+IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmQKIAogLy8gQ29va2llcyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi12b2lkIENocm9taXVtQnJpZGdlOjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6c2V0Q29v
a2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBXZWJD
b29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CkBAIC0yNjEsNyAr
MjYxLDcgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0Q29va2llcyhjb25zdCBEbwogICAgICAg
ICBjb29raWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29va2llcyhjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBQbGF0Zm9ybUJyaWRn
ZTo6Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsK
ICAgICBTdHJpbmcgcmVzdWx0OwogICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29v
a2llSmFyKGRvY3VtZW50KTsKQEAgLTI3MCw3ICsyNzAsNyBAQCBTdHJpbmcgQ2hyb21pdW1Ccmlk
Z2U6OmNvb2tpZXMoY29uc3QgRG9jCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3RyaW5nIENo
cm9taXVtQnJpZGdlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmNvb2tpZVJlcXVlc3RIZWFkZXJG
aWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQogewogICAg
IFN0cmluZyByZXN1bHQ7CkBAIC0yODAsNyArMjgwLDcgQEAgU3RyaW5nIENocm9taXVtQnJpZGdl
Ojpjb29raWVSZXF1ZXN0SGVhZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgQ2hyb21p
dW1CcmlkZ2U6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6
cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVj
dG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAg
IFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBi
b29sIENocm9taXVtQnJpZGdlOjpyYXdDb29raWVzKGNvbnN0IERvCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7CiAgICAgV2ViQ29v
a2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwogICAgIGlmIChjb29r
aWVKYXIpCiAgICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7
CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIFdlYkNv
b2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKQEAgLTMyMiwzOSAr
MzIyLDM5IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnMKIAogLy8g
RE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwcmVmZXRjaEROUyhj
b25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cHJlZmV0Y2hETlMo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+cHJlZmV0Y2hI
b3N0TmFtZShob3N0bmFtZSk7CiB9CiAKIC8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wg
Q2hyb21pdW1CcmlkZ2U6OmZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCBQbGF0
Zm9ybUJyaWRnZTo6ZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVFeGlzdHMocGF0aCk7CiB9CiAK
LWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorYm9v
bCBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmRlbGV0ZUZpbGUocGF0aCk7
CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1C
cmlkZ2U6OmdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQp
Citib29sIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxv
bmcgbG9uZyYgcmVzdWx0KQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxp
dGllcygpLT5nZXRGaWxlU2l6ZShwYXRoLCByZXN1bHQpOwogfQogCi12b2lkIENocm9taXVtQnJp
ZGdlOjpyZXZlYWxGb2xkZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKK3ZvaWQgUGxhdGZvcm1C
cmlkZ2U6OnJldmVhbEZvbGRlckluT1MoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHdlYktp
dENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnJldmVhbEZvbGRlckluT1MocGF0aCk7CiB9CiAK
LWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgdGltZV90JiByZXN1bHQpCitib29sIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlTW9k
aWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogewogICAg
IGRvdWJsZSBtb2RpZmljYXRpb25UaW1lOwogICAgIGlmICghd2ViS2l0Q2xpZW50KCktPmZpbGVV
dGlsaXRpZXMoKS0+Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGlt
ZSkpCkBAIC0zNjMsNjIgKzM2Myw2MiBAQCBib29sIENocm9taXVtQnJpZGdlOjpnZXRGaWxlTW9k
aWZpY2F0aW9uCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6
ZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6
OmRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kaXJlY3RvcnlOYW1lKHBhdGgpOwogfQogCi1TdHJp
bmcgQ2hyb21pdW1CcmlkZ2U6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcm
IHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KQorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcm
IGNvbXBvbmVudCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMo
KS0+cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCk7CiB9CiAKLWJvb2wg
Q2hyb21pdW1CcmlkZ2U6Om1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCiti
b29sIFBsYXRmb3JtQnJpZGdlOjptYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRo
KQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5tYWtlQWxs
RGlyZWN0b3JpZXMocGF0aCk7CiB9CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1
dGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0QWJz
b2x1dGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0QWJzb2x1dGVQYXRoKHBhdGgpOwogfQogCi1ib29sIENo
cm9taXVtQnJpZGdlOjppc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsYXRm
b3JtQnJpZGdlOjppc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmlzRGlyZWN0b3J5KHBhdGgpOwogfQog
Ci1LVVJMIENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYgcGF0aCkK
K0tVUkwgUGxhdGZvcm1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoY29uc3QgU3RyaW5nJiBwYXRoKQog
ewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5maWxlUGF0aFRv
VVJMKHBhdGgpOwogfQogCi1QbGF0Zm9ybUZpbGVIYW5kbGUgQ2hyb21pdW1CcmlkZ2U6Om9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVI
YW5kbGUgUGxhdGZvcm1CcmlkZ2U6Om9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9w
ZW5Nb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPm9wZW5GaWxlKHBhdGgsIG1vZGUpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbG9z
ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpj
bG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgd2ViS2l0Q2xpZW50
KCktPmZpbGVVdGlsaXRpZXMoKS0+Y2xvc2VGaWxlKGhhbmRsZSk7CiB9CiAKLWxvbmcgbG9uZyBD
aHJvbWl1bUJyaWRnZTo6c2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBs
b25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQorbG9uZyBsb25nIFBsYXRmb3JtQnJp
ZGdlOjpzZWVrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0
LCBGaWxlU2Vla09yaWdpbiBvcmlnaW4pCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5m
aWxlVXRpbGl0aWVzKCktPnNlZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4pOwogfQogCi1i
b29sIENocm9taXVtQnJpZGdlOjp0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRs
ZSwgbG9uZyBsb25nIG9mZnNldCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OnRydW5jYXRlRmlsZShQ
bGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KQogewogICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT50cnVuY2F0ZUZpbGUoaGFuZGxlLCBv
ZmZzZXQpOwogfQogCi1pbnQgQ2hyb21pdW1CcmlkZ2U6OnJlYWRGcm9tRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFBsYXRmb3JtQnJp
ZGdlOjpyZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwg
aW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMo
KS0+cmVhZEZyb21GaWxlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKIH0KIAotaW50IENocm9taXVt
QnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFBsYXRmb3JtQnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewog
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT53cml0ZVRvRmlsZSho
YW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CkBAIC00MjYsNyArNDI2LDcgQEAgaW50IENocm9taXVt
QnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9ybQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAj
aWYgT1MoV0lORE9XUykKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZP
TlQgZm9udCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9u
dCkKIHsKICAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJv
eFN1cHBvcnQoKTsKIApAQCAtNDM3LDcgKzQzNyw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmVu
c3VyZUZvbnRMb2FkZWQoSEYKICNlbmRpZgogCiAjaWYgT1MoTElOVVgpIHx8IE9TKEZSRUVCU0Qp
Ci1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hhcmFjdGVycykKK1N0cmluZyBQbGF0Zm9y
bUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMsIHNpemVfdCBudW1DaGFyYWN0ZXJzKQogewogICAgIGlmICh3ZWJLaXRDbGllbnQoKS0+c2Fu
ZGJveFN1cHBvcnQoKSkKICAgICAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3Vw
cG9ydCgpLT5nZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBudW1DaGFyYWN0
ZXJzKTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmdldEZvbnRG
YW1pbHlGb3JDCiAgICAgcmV0dXJuIFdlYlN0cmluZygpOwogfQogCi12b2lkIENocm9taXVtQnJp
ZGdlOjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFyKiBmb250LCBpbnQgc2l6ZUFu
ZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6Omdl
dFJlbmRlclN0eWxlRm9yU3RyaWtlKGNvbnN0IGNoYXIqIGZvbnQsIGludCBzaXplQW5kU3R5bGUs
IEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0KQogewogICAgIFdlYkZvbnRSZW5kZXJTdHlsZSBzdHls
ZTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0
eWxlRm9yU3QKICNlbmRpZgogCiAjaWYgT1MoREFSV0lOKQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6
bG9hZEZvbnQoTlNGb250KiBzcmNGb250LCBBVFNGb250Q29udGFpbmVyUmVmKiBvdXQpCitib29s
IFBsYXRmb3JtQnJpZGdlOjpsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWlu
ZXJSZWYqIG91dCkKIHsKICAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQo
KS0+c2FuZGJveFN1cHBvcnQoKTsKICAgICBpZiAoc3MpCkBAIC00ODAsNDIgKzQ4MCw0MiBAQCBi
b29sIENocm9taXVtQnJpZGdlOjpsb2FkRm9udChOU0ZvbnQqIHNyCiAKIC8vIERhdGFiYXNlcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9w
ZW5GaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpCitQbGF0
Zm9ybUZpbGVIYW5kbGUgUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3Ry
aW5nJiB2ZnNGaWxlTmFtZSwgaW50IGRlc2lyZWRGbGFncykKIHsKICAgICByZXR1cm4gd2ViS2l0
Q2xpZW50KCktPmRhdGFiYXNlT3BlbkZpbGUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwgZGVzaXJl
ZEZsYWdzKTsKIH0KIAotaW50IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoY29u
c3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyKQoraW50IFBsYXRmb3JtQnJpZGdl
OjpkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5j
RGlyKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VEZWxldGVGaWxlKFdl
YlN0cmluZyh2ZnNGaWxlTmFtZSksIHN5bmNEaXIpOwogfQogCi1sb25nIENocm9taXVtQnJpZGdl
OjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCits
b25nIFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmlu
ZyYgdmZzRmlsZU5hbWUpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdl
dEZpbGVBdHRyaWJ1dGVzKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSkpOwogfQogCi1sb25nIGxvbmcg
Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxl
TmFtZSkKK2xvbmcgbG9uZyBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25z
dCBTdHJpbmcmIHZmc0ZpbGVOYW1lKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0
YWJhc2VHZXRGaWxlU2l6ZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKIH0KIAogLy8gSW5kZXhl
ZCBEYXRhYmFzZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1QYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBD
aHJvbWl1bUJyaWRnZTo6aWRiRmFjdG9yeSgpCitQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlPiBQbGF0Zm9ybUJyaWRnZTo6aWRiRmFjdG9yeSgpCiB7CiAgICAgLy8gVGhlcmUn
cyBubyByZWFzb24gd2h5IHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgcHJveHkgZWFjaCB0aW1l
LCBidXQKICAgICAvLyB0aGVyZSdzIGFsc28gbm8gc3Ryb25nIHJlYXNvbiBub3QgdG8uCiAgICAg
cmV0dXJuIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmNyZWF0ZSgpOwogfQogCi12b2lkIENocm9t
aXVtQnJpZGdlOjppZGJTaHV0ZG93bigpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjppZGJTaHV0ZG93
bigpCiB7CiAgICAgLy8gSW4gdGhlIGJyb3dzZXIgcHJvY2VzcywgdGhpcyBzaHV0cyBkb3duIHRo
ZSB1dGlsaXR5IHByb2Nlc3MuIEluIHRoZSByZW5kZXJlciBwcm9jZXNzLCBpdCBkb2VzIG5vdGhp
bmcuCiAgICAgd2ViS2l0Q2xpZW50KCktPmlkYlNodXRkb3duKCk7CiB9CiAKLXZvaWQgQ2hyb21p
dW1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29u
c3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcywgY29uc3Qg
U3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cykKK3ZvaWQgUGxh
dGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgo
Y29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcywgY29u
c3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cykKIHsKICAg
ICBXZWJWZWN0b3I8V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlPiB3ZWJWYWx1ZXMgPSB2YWx1ZXM7
CiAgICAgV2ViVmVjdG9yPFdlYklEQktleT4gd2ViS2V5czsKQEAgLTUyOSw3ICs1MjksNyBAQCB2
b2lkIENocm9taXVtQnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNlCiAKIC8vIEtleWdlbiAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KIAotU3RyaW5nIENocm9taXVtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFs
bGVuZ2VTdHJpbmcoCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENo
YWxsZW5nZVN0cmluZygKICAgICB1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYg
Y2hhbGxlbmdlLCBjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5zaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoa2V5U2l6ZUluZGV4LApAQCAtNTM5
LDYzICs1MzksNjMgQEAgU3RyaW5nIENocm9taXVtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbgog
CiAvLyBMYW5ndWFnZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29tcHV0
ZWREZWZhdWx0TGFuZ3VhZ2UoKQorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpjb21wdXRlZERlZmF1
bHRMYW5ndWFnZSgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kZWZhdWx0TG9jYWxl
KCk7CiB9CiAKIC8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6
bGF5b3V0VGVzdE1vZGUoKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKQog
ewogICAgIHJldHVybiBXZWJLaXQ6OmxheW91dFRlc3RNb2RlKCk7CiB9CiAKIC8vIE1pbWVUeXBl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCitib29sIFBsYXRmb3JtQnJpZGdlOjppc1N1cHBv
cnRlZEltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c0ltYWdlTUlNRVR5cGUobWlt
ZVR5cGUpCiAgICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAK
LWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCitib29sIFBsYXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZEphdmFT
Y3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSmF2YVNjcmlwdE1JTUVUeXBlKG1p
bWVUeXBlKQogICAgICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOwogfQog
Ci1ib29sIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1h
Z2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlw
ZSkKICAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKIH0KIAotU3Ry
aW5nIENocm9taXVtQnJpZGdlOjptaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4
dGVuc2lvbikKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29u
c3QgU3RyaW5nJiBleHRlbnNpb24pCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1l
UmVnaXN0cnkoKS0+bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKIH0KIAotU3RyaW5n
IENocm9taXVtQnJpZGdlOjptaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK1N0
cmluZyBQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIHBhdGgp
CiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+bWltZVR5cGVG
cm9tRmlsZShwYXRoKTsKIH0KIAotU3RyaW5nIENocm9taXVtQnJpZGdlOjpwcmVmZXJyZWRFeHRl
bnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorU3RyaW5nIFBsYXRmb3Jt
QnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnByZWZl
cnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKIH0KIAogLy8gUGx1Z2luIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi1ib29sIENocm9taXVtQnJpZGdlOjpwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVj
dG9yPFBsdWdpbkluZm8+KiByZXN1bHRzKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lucyhi
b29sIHJlZnJlc2gsIFZlY3RvcjxQbHVnaW5JbmZvPiogcmVzdWx0cykKIHsKICAgICBXZWJQbHVn
aW5MaXN0QnVpbGRlckltcGwgYnVpbGRlcihyZXN1bHRzKTsKICAgICB3ZWJLaXRDbGllbnQoKS0+
Z2V0UGx1Z2luTGlzdChyZWZyZXNoLCAmYnVpbGRlcik7CiAgICAgcmV0dXJuIHRydWU7ICAvLyBG
SVhNRTogVGhlcmUgaXMgbm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSB2YWx1
ZS4KIH0KIAotTlBPYmplY3QqIENocm9taXVtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0
KFdpZGdldCogd2lkZ2V0KQorTlBPYmplY3QqIFBsYXRmb3JtQnJpZGdlOjpwbHVnaW5TY3JpcHRh
YmxlT2JqZWN0KFdpZGdldCogd2lkZ2V0KQogewogICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQt
PmlzUGx1Z2luQ29udGFpbmVyKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjA1LDcgKzYwNSw3
IEBAIE5QT2JqZWN0KiBDaHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWIKIAogLy8gUmVzb3Vy
Y2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi1QYXNzUmVmUHRyPEltYWdlPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBs
YXRmb3JtSW1hZ2VSZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQorUGFzc1JlZlB0cjxJbWFnZT4g
UGxhdGZvcm1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hhciogbmFt
ZSkKIHsKICAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2Fk
UmVzb3VyY2UobmFtZSk7CiAgICAgaWYgKHJlc291cmNlLmlzRW1wdHkoKSkKQEAgLTYxOCw3ICs2
MTgsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsCiAKICNpZiBF
TkFCTEUoV0VCX0FVRElPKQogCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6
bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxl
UmF0ZSkKK1Bhc3NPd25QdHI8QXVkaW9CdXM+IFBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1B
dWRpb1Jlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRlKQogewogICAg
IGNvbnN0IFdlYkRhdGEmIHJlc291cmNlID0gd2ViS2l0Q2xpZW50KCktPmxvYWRSZXNvdXJjZShu
YW1lKTsKICAgICBpZiAocmVzb3VyY2UuaXNFbXB0eSgpKQpAQCAtNjI3LDcgKzYyNyw3IEBAIFBh
c3NPd25QdHI8QXVkaW9CdXM+IENocm9taXVtQnJpZGdlOjpsb2EKICAgICByZXR1cm4gZGVjb2Rl
QXVkaW9GaWxlRGF0YShyZXNvdXJjZS5kYXRhKCksIHJlc291cmNlLnNpemUoKSwgc2FtcGxlUmF0
ZSk7CiB9CiAKLVBhc3NPd25QdHI8QXVkaW9CdXM+IENocm9taXVtQnJpZGdlOjpkZWNvZGVBdWRp
b0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0
ZSkKK1Bhc3NPd25QdHI8QXVkaW9CdXM+IFBsYXRmb3JtQnJpZGdlOjpkZWNvZGVBdWRpb0ZpbGVE
YXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsK
ICAgICBXZWJBdWRpb0J1cyB3ZWJBdWRpb0J1czsKICAgICBpZiAod2ViS2l0Q2xpZW50KCktPmxv
YWRBdWRpb1Jlc291cmNlKCZ3ZWJBdWRpb0J1cywgZGF0YSwgc2l6ZSwgc2FtcGxlUmF0ZSkpCkBA
IC02MzksNjAgKzYzOSw2MCBAQCBQYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6
ZGVjCiAKIC8vIFNhbmRib3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6c2Fu
ZGJveEVuYWJsZWQoKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6c2FuZGJveEVuYWJsZWQoKQogewog
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveEVuYWJsZWQoKTsKIH0KIAogLy8gU2hh
cmVkVGltZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZp
cmVkRnVuY3Rpb24odm9pZCAoKmZ1bmMpKCkpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpzZXRTaGFy
ZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmZ1bmMpKCkpCiB7CiAgICAgd2ViS2l0Q2xpZW50
KCktPnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbihmdW5jKTsKIH0KIAotdm9pZCBDaHJvbWl1
bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpCit2b2lkIFBs
YXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKIHsK
ICAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlVGltZShmaXJlVGltZSk7CiB9
CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcigpCit2b2lkIFBsYXRmb3Jt
QnJpZGdlOjpzdG9wU2hhcmVkVGltZXIoKQogewogICAgIHdlYktpdENsaWVudCgpLT5zdG9wU2hh
cmVkVGltZXIoKTsKIH0KIAogLy8gU3RhdHNDb3VudGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIENocm9taXVt
QnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSkKK3ZvaWQgUGxh
dGZvcm1CcmlkZ2U6OmRlY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQogewog
ICAgIHdlYktpdENsaWVudCgpLT5kZWNyZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7CiB9CiAKLXZv
aWQgQ2hyb21pdW1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1l
KQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6aW5jcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIq
IG5hbWUpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmluY3JlbWVudFN0YXRzQ291bnRlcihuYW1l
KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0
IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3Vu
dCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFy
KiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpCiB7
CiAgICAgd2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cyhuYW1lLCBzYW1wbGUs
IG1pbiwgbWF4LCBidWNrZXRDb3VudCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3Rv
Z3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFy
eVZhbHVlKQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3Qg
Y2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpCiB7CiAgICAgd2ViS2l0
Q2xpZW50KCktPmhpc3RvZ3JhbUVudW1lcmF0aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1
ZSk7CiB9CiAKIC8vIFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6
c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgUGxhdGZvcm1Ccmlk
Z2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7CiAgICAgd2ViS2l0
Q2xpZW50KCktPnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChlbmFibGVkKTsKIH0KIAogLy8gU3lz
dGVtVGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQogCi1kb3VibGUgQ2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1lKCkK
K2RvdWJsZSBQbGF0Zm9ybUJyaWRnZTo6Y3VycmVudFRpbWUoKQogewogICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+Y3VycmVudFRpbWUoKTsKIH0KQEAgLTcwMSw3ICs3MDEsNyBAQCBkb3VibGUg
Q2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1lKCkKIAogI2lmIE9TKFdJTkRPV1MpCiAKLXZvaWQg
Q2hyb21pdW1CcmlkZ2U6OnBhaW50QnV0dG9uKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRC
dXR0b24oCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50
IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtNzA5LDcgKzcw
OSw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50QnV0dG9uKAogICAgICAgICBnYy0+cGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0
KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRNZW51TGlzdCgKK3ZvaWQgUGxhdGZv
cm1CcmlkZ2U6OnBhaW50TWVudUxpc3QoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBh
cnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0
KQogewpAQCAtNzE3LDcgKzcxNyw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50TWVudUxp
c3QoCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRl
LCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNj
cm9sbGJhckFycm93KAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJvdygK
ICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAg
ICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKQEAgLTcyNSw3ICs3MjUsNyBAQCB2b2lkIENocm9t
aXVtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93CiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCksIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQogCi12b2lkIENo
cm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6
cGFpbnRTY3JvbGxiYXJUaHVtYigKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwg
aW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7
CkBAIC03MzMsNyArNzMzLDcgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJU
aHVtYgogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0
ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRT
Y3JvbGxiYXJUcmFjaygKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2so
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNz
aWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBhbGlnblJl
Y3QpCiB7CkBAIC03NDIsNyArNzQyLDcgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3Jv
bGxiYXJUcmFjawogICAgICAgICBhbGlnblJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdl
OjpwYWludFNwaW5CdXR0b24oCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNwaW5CdXR0b24o
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNz
aWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtNzUwLDcgKzc1MCw3IEBA
IHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbigKICAgICAgICAgZ2MtPnBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7
CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKAordm9pZCBQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRUZXh0RmllbGQoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBh
cnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0
LCBjb25zdCBDb2xvciYgY29sb3IsIGJvb2wgZmlsbENvbnRlbnRBcmVhLAogICAgIGJvb2wgZHJh
d0VkZ2VzKQpAQCAtNzYzLDcgKzc2Myw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGV4
dEZpZWxkKAogICAgICAgICBiYWNrZ3JvdW5kQ29sb3IsIGZpbGxDb250ZW50QXJlYSwgZHJhd0Vk
Z2VzKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUcmFja2JhcigKK3ZvaWQgUGxh
dGZvcm1CcmlkZ2U6OnBhaW50VHJhY2tiYXIoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50
IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewpAQCAtNzcxLDcgKzc3MSw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VHJh
Y2tiYXIoCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0
YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWlu
dFByb2dyZXNzQmFyKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcigKICAg
ICBHcmFwaGljc0NvbnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiBiYXJSZWN0LCBjb25zdCBJbnRS
ZWN0JiB2YWx1ZVJlY3QsIGJvb2wgZGV0ZXJtaW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMp
CiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50UHJvZ3Jlc3NCYXIo
CkBAIC03ODAsMzcgKzc4MCwzNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFByb2dyZXNz
QmFyKAogCiAjZWxpZiBPUyhMSU5VWCkKIAotc3RhdGljIFdlYlRoZW1lRW5naW5lOjpQYXJ0IFdl
YlRoZW1lUGFydChDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBhcnQpCitzdGF0aWMgV2ViVGhl
bWVFbmdpbmU6OlBhcnQgV2ViVGhlbWVQYXJ0KFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhcnQgcGFy
dCkKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyRG93bkFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJE
b3duQXJyb3c7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJv
dzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93OwotICAgIGNh
c2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OiByZXR1cm4gV2ViVGhl
bWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1Ccmlk
Z2U6OlBhcnRTY3JvbGxiYXJVcEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3Jv
bGxiYXJVcEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jp
em9udGFsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckhvcml6b250
YWxUaHVtYjsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxU
aHVtYjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYjsK
LSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrOiBy
ZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2s7Ci0gICAg
Y2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s6IHJldHVybiBX
ZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s7CisgICAgY2FzZSBQbGF0
Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5l
OjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OworICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRT
Y3JvbGxiYXJMZWZ0QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckxl
ZnRBcnJvdzsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJv
dzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAgICBj
YXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzogcmV0dXJuIFdlYlRoZW1l
RW5naW5lOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQ
YXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRT
Y3JvbGxiYXJIb3Jpem9udGFsVGh1bWI7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNj
cm9sbGJhclZlcnRpY2FsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJh
clZlcnRpY2FsVGh1bWI7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhv
cml6b250YWxUcmFjazogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpv
bnRhbFRyYWNrOworICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNh
bFRyYWNrOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNr
OwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV2ViVGhlbWVF
bmdpbmU6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7CiB9CiAKLXN0YXRpYyBXZWJUaGVtZUVuZ2lu
ZTo6U3RhdGUgV2ViVGhlbWVTdGF0ZShDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0
YXRlKQorc3RhdGljIFdlYlRoZW1lRW5naW5lOjpTdGF0ZSBXZWJUaGVtZVN0YXRlKFBsYXRmb3Jt
QnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUpCiB7CiAgICAgc3dpdGNoIChzdGF0ZSkgewot
ICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlRGlzYWJsZWQ6IHJldHVybiBXZWJUaGVtZUVu
Z2luZTo6U3RhdGVEaXNhYmxlZDsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVy
OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlSG92ZXI7Ci0gICAgY2FzZSBDaHJvbWl1bUJy
aWRnZTo6U3RhdGVOb3JtYWw6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVOb3JtYWw7Ci0g
ICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkOiByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlN0YXRlUHJlc3NlZDsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVk
OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7CisgICAgY2FzZSBQbGF0Zm9y
bUJyaWRnZTo6U3RhdGVIb3ZlcjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZUhvdmVyOwor
ICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlN0YXRlTm9ybWFsOiByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlN0YXRlTm9ybWFsOworICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3NlZDog
cmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZVByZXNzZWQ7CiAgICAgfQogICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsK
IH0KIAotc3RhdGljIHZvaWQgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhDaHJvbWl1bUJyaWRnZTo6
VGhlbWVQYXJ0IHBhcnQsIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUsIGNv
bnN0IENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zLCBX
ZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMqIHdlYlRoZW1lRXh0cmFQYXJhbXMpCitzdGF0aWMg
dm9pZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhcnQgcGFy
dCwgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgY29uc3QgUGxhdGZvcm1C
cmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyogZXh0cmFQYXJhbXMsIFdlYlRoZW1lRW5naW5l
OjpFeHRyYVBhcmFtcyogd2ViVGhlbWVFeHRyYVBhcmFtcykKIHsKLSAgICBpZiAocGFydCA9PSBD
aHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjayB8fCBwYXJ0ID09IENo
cm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaykgeworICAgIGlmIChwYXJ0
ID09IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIHx8IHBhcnQg
PT0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrKSB7CiAgICAgICAg
IHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWCA9IGV4dHJhUGFyYW1z
LT5zY3JvbGxiYXJUcmFjay50cmFja1g7CiAgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNj
cm9sbGJhclRyYWNrLnRyYWNrWSA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1k7
CiAgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGgg
PSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aDsKQEAgLTgxOCwxMiArODE4
LDEyIEBAIHN0YXRpYyB2b2lkIEdldFdlYlRoZW1lRXh0cmFQYXJhbXMoQ2hyb20KICAgICB9CiB9
CiAKLUludFNpemUgQ2hyb21pdW1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0IHBh
cnQpCitJbnRTaXplIFBsYXRmb3JtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKFRoZW1lUGFydCBw
YXJ0KQogewogICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPmdldFNp
emUoV2ViVGhlbWVQYXJ0KHBhcnQpKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRU
aGVtZVBhcnQoCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFRoZW1lUGFydCgKICAgICBHcmFw
aGljc0NvbnRleHQqIGdjLCBUaGVtZVBhcnQgcGFydCwgVGhlbWVQYWludFN0YXRlIHN0YXRlLCBj
b25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFy
YW1zKQogewogICAgIFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyB3ZWJUaGVtZUV4dHJhUGFy
YW1zOwpAQCAtODM0LDcgKzgzNCw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGhlbWVQ
YXJ0KAogCiAjZWxpZiBPUyhEQVJXSU4pCiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Ny
b2xsYmFyVGh1bWIoCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAog
ICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIFRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgVGhlbWVQYWlu
dFNpemUgc2l6ZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJh
ckluZm8mIHNjcm9sbGJhckluZm8pCiB7CiAgICAgV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhcklu
Zm8gd2ViVGhlbWVTY3JvbGxiYXJJbmZvOwpAQCAtODU4LDE5ICs4NTgsMTkgQEAgdm9pZCBDaHJv
bWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYgogCiAvLyBUcmFjZSBFdmVudCAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRCZWdpbihjb25zdCBjaGFyKiBuYW1l
LCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjp0cmFj
ZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJh
KQogewogICAgIHdlYktpdENsaWVudCgpLT50cmFjZUV2ZW50QmVnaW4obmFtZSwgaWQsIGV4dHJh
KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBu
YW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjp0
cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRy
YSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEVuZChuYW1lLCBpZCwgZXh0cmEp
OwogfQogCiAvLyBWaXNpdGVkIExpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLUxpbmtIYXNoIENocm9taXVtQnJpZGdl
Ojp2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQorTGlu
a0hhc2ggUGxhdGZvcm1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4PiBi
dWZmZXI7CiAgICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOwpAQCAtODc5LDcgKzg3OSw3IEBA
IExpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2gKICAgICByZXR1cm4gd2Vi
S2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3Ro
KCkpOwogfQogCi1MaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0
IEtVUkwmIGJhc2UsCitMaW5rSGFzaCBQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNv
bnN0IEtVUkwmIGJhc2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIC8vIFJlc29sdmUgdGhl
IHJlbGF0aXZlIFVSTCB1c2luZyBnb29nbGV1cmwgYW5kIHBhc3MgdGhlIGFic29sdXRlIFVSTCB1
cCB0bwpAQCAtOTEzLDcgKzkxMyw3IEBAIExpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVk
TGlua0hhc2gKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZm
ZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjpp
c0xpbmtWaXNpdGVkKExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaCkKK2Jvb2wgUGxhdGZvcm1Ccmlk
Z2U6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQogewogICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+aXNMaW5rVmlzaXRlZCh2aXNpdGVkTGlua0hhc2gpOwogfQpAQCAt
OTIyLDcgKzkyMiw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQoTGlua0gK
IC8vIEdsdWUgbGF5ZXIuIE9uY2UgdGhlIEdsdWUgbGF5ZXIgbW92ZXMgZW50aXJlbHkgaW50byB0
aGUgV2ViS2l0IGxheWVyLCB0aGVzZQogLy8gbWV0aG9kcyB3aWxsIGJlIGRlbGV0ZWQuCiAKLXZv
aWQgQ2hyb21pdW1CcmlkZ2U6Om5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUqIGZyYW1lKQordm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeShGcmFtZSogZnJhbWUpCiB7CiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTMzLDE3ICs5MzMsMTcgQEAgdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeQogICAgIHdlYkZyYW1lLT5jbGll
bnQoKS0+ZGlkRXhoYXVzdE1lbW9yeUF2YWlsYWJsZUZvclNjcmlwdCh3ZWJGcmFtZSk7CiB9CiAK
LWludCBDaHJvbWl1bUJyaWRnZTo6bWVtb3J5VXNhZ2VNQigpCitpbnQgUGxhdGZvcm1CcmlkZ2U6
Om1lbW9yeVVzYWdlTUIoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHdlYktpdENs
aWVudCgpLT5tZW1vcnlVc2FnZU1CKCkpOwogfQogCi1pbnQgQ2hyb21pdW1CcmlkZ2U6OmFjdHVh
bE1lbW9yeVVzYWdlTUIoKQoraW50IFBsYXRmb3JtQnJpZGdlOjphY3R1YWxNZW1vcnlVc2FnZU1C
KCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3ZWJLaXRDbGllbnQoKS0+YWN0dWFs
TWVtb3J5VXNhZ2VNQigpKTsKIH0KIAotaW50IENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aChX
aWRnZXQqIHdpZGdldCkKK2ludCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGgoV2lkZ2V0KiB3
aWRnZXQpCiB7CiAgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVu
dCh3aWRnZXQpOwogICAgIGlmICghY2xpZW50KQpAQCAtOTUxLDcgKzk1MSw3IEBAIGludCBDaHJv
bWl1bUJyaWRnZTo6c2NyZWVuRGVwdGgoV2lkZ2V0KiAKICAgICByZXR1cm4gY2xpZW50LT5zY3Jl
ZW5JbmZvKCkuZGVwdGg7CiB9CiAKLWludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJD
b21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCitpbnQgUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRlcHRo
UGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQogewogICAgIFdlYldpZGdldENsaWVudCogY2xp
ZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKICAgICBpZiAoIWNsaWVudCkKQEAgLTk1
OSw3ICs5NTksNyBAQCBpbnQgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRlcHRoUGVyQ29tcG9uCiAg
ICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLmRlcHRoUGVyQ29tcG9uZW50OwogfQogCi1i
b29sIENocm9taXVtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiti
b29sIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiB7
CiAgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQp
OwogICAgIGlmICghY2xpZW50KQpAQCAtOTY3LDcgKzk2Nyw3IEBAIGJvb2wgQ2hyb21pdW1Ccmlk
Z2U6OnNjcmVlbklzTW9ub2Nocm9tZSgKICAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCku
aXNNb25vY2hyb21lOwogfQogCi1JbnRSZWN0IENocm9taXVtQnJpZGdlOjpzY3JlZW5SZWN0KFdp
ZGdldCogd2lkZ2V0KQorSW50UmVjdCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuUmVjdChXaWRnZXQq
IHdpZGdldCkKIHsKICAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xp
ZW50KHdpZGdldCk7CiAgICAgaWYgKCFjbGllbnQpCkBAIC05NzUsNyArOTc1LDcgQEAgSW50UmVj
dCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuUmVjdChXaWRnZQogICAgIHJldHVybiBjbGllbnQtPnNj
cmVlbkluZm8oKS5yZWN0OwogfQogCi1JbnRSZWN0IENocm9taXVtQnJpZGdlOjpzY3JlZW5BdmFp
bGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQorSW50UmVjdCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVu
QXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBXZWJXaWRnZXRDbGllbnQqIGNs
aWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7CiAgICAgaWYgKCFjbGllbnQpCkBAIC05
ODMsNyArOTgzLDcgQEAgSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUgog
ICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5hdmFpbGFibGVSZWN0OwogfQogCi1ib29s
IENocm9taXVtQnJpZGdlOjpwb3B1cHNBbGxvd2VkKE5QUCBucHApCitib29sIFBsYXRmb3JtQnJp
ZGdlOjpwb3B1cHNBbGxvd2VkKE5QUCBucHApCiB7CiAgICAgLy8gRklYTUU6IEdpdmUgdGhlIGVt
YmVkZGVyIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lv
biA3NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVD
bGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKQEAgLTMzMCw3ICszMzAsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjp3aWxsTG9h
ZEZyb21DYWNoZShSCiAvLyBzdGF0aWMKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRh
dGEoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
ZGF0YSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShyZXNwb25zZS51cmwo
KSwgcmVzcG9uc2UucmVzcG9uc2VUaW1lKCksIGRhdGEpOworICAgIFBsYXRmb3JtQnJpZGdlOjpj
YWNoZU1ldGFkYXRhKHJlc3BvbnNlLnVybCgpLCByZXNwb25zZS5yZXNwb25zZVRpbWUoKSwgZGF0
YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03
NCw3ICs3NCw2IEBACiAjaW5jbHVkZSAiQXNzb2NpYXRlZFVSTExvYWRlci5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUg
IkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0u
aCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRE9NVXRpbGl0aWVzUHJpdmF0ZS5o
IgpAQCAtMTAzLDYgKzEwMiw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5jZS5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1
ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCkBAIC0xODIw
LDEzICsxODIwLDEzIEBAIFdlYkZyYW1lSW1wbDo6V2ViRnJhbWVJbXBsKFdlYkZyYW1lQ2xpZW4K
ICAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxlcih0aGlzKQogICAgICwgbV9pZGVudGlmaWVyKGdl
bmVyYXRlRnJhbWVJZGVudGlmaWVyKCkpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmluY3JlbWVu
dFN0YXRzQ291bnRlcih3ZWJGcmFtZUFjdGl2ZUNvdW50KTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6
aW5jcmVtZW50U3RhdHNDb3VudGVyKHdlYkZyYW1lQWN0aXZlQ291bnQpOwogICAgIGZyYW1lQ291
bnQrKzsKIH0KIAogV2ViRnJhbWVJbXBsOjp+V2ViRnJhbWVJbXBsKCkKIHsKLSAgICBDaHJvbWl1
bUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKHdlYkZyYW1lQWN0aXZlQ291bnQpOworICAg
IFBsYXRmb3JtQnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50ZXIod2ViRnJhbWVBY3RpdmVDb3Vu
dCk7CiAgICAgZnJhbWVDb3VudC0tOwogCiAgICAgY2FuY2VsUGVuZGluZ1Njb3BpbmdFZmZvcnQo
KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJl
dmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwyMyArMzQsMjIgQEAKICNpbmNsdWRlICJBdXRvRmls
bFBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRl
ICJCYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3Iu
aCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCi0j
aW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5j
bHVkZSAiQ29tcG9zaXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ29u
dGV4dE1lbnUuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJDb250ZXh0TWVudUl0ZW0uaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCi0jaW5j
bHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUg
IkRPTVV0aWxpdGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNsaWVu
dFByb3h5LmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRl
ci5oIgotI2luY2x1ZGUgIkRPTVV0aWxpdGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJEcmFnQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIkRyYWdTY3JvbGxUaW1lci5oIgogI2luY2x1ZGUgIkRyYWdE
YXRhLmgiCisjaW5jbHVkZSAiRHJhZ1Njcm9sbFRpbWVyLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgi
CiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCkBA
IC02NSw4ICs2NCw4IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIgog
I2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50
LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgor
I2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUg
IkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgpAQCAtNzgs
NiArNzcsNyBAQAogI2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cExv
YWREZWZlcnJlci5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJQ
bGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIK
QEAgLTk4LDggKzk4LDggQEAKICNpbmNsdWRlICJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJBY2Nl
c3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVkZSAiV2ViQXV0b0ZpbGxDbGllbnQuaCIKLSNpbmNs
dWRlICJXZWJEZXZUb29sc0FnZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdl
bnRJbXBsLmgiCisjaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKICNpbmNsdWRl
ICJXZWJEcmFnRGF0YS5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldl
YkltYWdlLmgiCkBAIC0yMjg3LDcgKzIyODcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjppbnZhbGlk
YXRlUm9vdExheWVyUmVjCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6aGlzdG9n
cmFtRW51bWVyYXRpb24oIkdQVS5zZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUiLCBh
Y3RpdmUgKiAyICsgbV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUsIDQpOworICAgIFBs
YXRmb3JtQnJpZGdlOjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiR1BVLnNldElzQWNjZWxlcmF0ZWRD
b21wb3NpdGluZ0FjdGl2ZSIsIGFjdGl2ZSAqIDIgKyBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSwgNCk7CiAKICAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUg
PT0gYWN0aXZlKQogICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79453</attachid>
            <date>2011-01-19 11:06:54 -0800</date>
            <delta_ts>2011-01-19 15:44:27 -0800</delta_ts>
            <desc>WebCore + WebKit changes</desc>
            <filename>bug-52471-20110119110652.patch</filename>
            <type>text/plain</type>
            <size>228776</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTY4IEBACisyMDExLTAxLTE4ICBBZGFtIEts
ZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIENocm9taXVtQnJpZGdlIHRvIFBs
YXRmb3JtQnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MjQ3MQorCisgICAgICAgICogV2ViQ29yZS5neXBpOgorICAgICAgICAqIGJpbmRpbmdz
L3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cmVwb3J0RmF0YWxF
cnJvckluVjgpOgorICAgICAgICAqIHBhZ2UvUGFnZUdyb3VwLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBhZ2VHcm91cDo6aXNMaW5rVmlzaXRlZCk6CisgICAgICAgICogcGxhdGZvcm0vYW5kcm9p
ZC9QbGF0Zm9ybUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0F1
ZGlvQnVzQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlQnVzRnJvbUluTWVt
b3J5QXVkaW9GaWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRn
ZS5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9i
amVjdExlZ2FjeS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDaHJvbWl1bURhdGFPYmplY3RMZWdh
Y3k6OmdldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21p
dW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0RhdGE6OmFzVVJMKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6ZGVsZXRlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6
CisgICAgICAgIChXZWJDb3JlOjpnZXRGaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZXRG
aWxlTW9kaWZpY2F0aW9uVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpyZXZlYWxGb2xkZXJJbk9T
KToKKyAgICAgICAgKFdlYkNvcmU6OmRpcmVjdG9yeU5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VBbGxEaXJl
Y3Rvcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxlRXhpc3RzKToKKyAgICAgICAgKFdlYkNv
cmU6Om9wZW5GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OmNsb3NlRmlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpzZWVrRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjp0cnVuY2F0ZUZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6cmVhZEZyb21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OndyaXRlVG9G
aWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9MYW5ndWFnZUNocm9taXVtLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OnBsYXRmb3JtRGVmYXVsdExhbmd1YWdlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9jaHJvbWl1bS9MaW5rSGFzaENocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnZpc2l0ZWRMaW5rSGFzaCk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVS
ZWdpc3RyeUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6Ok1JTUVUeXBlUmVn
aXN0cnk6OmdldFByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbklt
YWdlTUlNRVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dCk6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZVVSTCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjp3cml0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNhblNt
YXJ0UmVwbGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpwbGFpblRleHQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudCk6CisgICAgICAg
ICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1CcmlkZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVlbkNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnNjcmVlbkRlcHRoKToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50
KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAgIChXZWJD
b3JlOjpzY3JlZW5SZWN0KToKKyAgICAgICAgKFdlYkNvcmU6OnNjcmVlbkF2YWlsYWJsZVJlY3Qp
OgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmdldERhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFkYWJsZURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWRhYmxlRGF0YU9iamVjdDo6ZmlsZW5hbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxl
RGF0YU9iamVjdDo6ZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQpOgorICAgICAgICAqIHBsYXRm
b3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHA6CisgICAgICAgICogcGxhdGZv
cm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6c2Nyb2xsYmFyVGhpY2tuZXNzKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUcmFj
a1BpZWNlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6
cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxp
bnV4OjpwYWludFRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21p
dW1MaW51eDo6YnV0dG9uU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTGludXg6Om1pbmltdW1UaHVtYkxlbmd0aCk6CisgICAgICAgICogcGxhdGZvcm0vY2hy
b21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdlYkNvcmU6OnNj
cm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1NYWM6OnBhaW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TY3Jv
bGxiYXJUaGVtZUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1XaW46OnNjcm9sbGJhclRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpT
Y3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRyYWNrUGllY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRCdXR0b24pOgorICAgICAgICAo
V2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUaHVtYik6CisgICAgICAg
IChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpidXR0b25TaXplKToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TaGFyZWRUaW1lckNocm9taXVtLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpzZXRTaGFyZWRUaW1lckZpcmVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnN0b3BTaGFyZWRU
aW1lcik6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRpb25DaHJv
bWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpkaXNhYmxlU3VkZGVuVGVybWluYXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6ZW5hYmxlU3VkZGVuVGVybWluYXRpb24pOgorICAgICAgICAqIHBs
YXRmb3JtL2Nocm9taXVtL1N5c3RlbVRpbWVDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjdXJyZW50VGltZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRh
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldyaXRhYmxlRGF0YU9iamVjdDo6c2V0RGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9u
dExvYWRpbmcubW06CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENh
Y2hlQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Zm9udENvbnRhaW5zQ2hhcmFj
dGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbGxMb2dGb250KToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpGb250Q2FjaGU6OmdldEZvbnREYXRhRm9yQ2hhcmFjdGVycyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkZvbnQ6OmRyYXdHbHlwaHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpG
b250UGxhdGZvcm1EYXRhOjpzY3JpcHRGb250UHJvcGVydGllcyk6CisgICAgICAgICogcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVtRm9yUmVuZGVyU3R5bGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hy
b21pdW1XaW4uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEJNUEdseXBocyk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1bS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAqIHBsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMubW06CisgICAgICAgIChXZWJD
b3JlOjpJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtSW5pdCk6CisgICAgICAgIChXZWJDb3Jl
OjpTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2gpOgorICAgICAgICAoV2ViQ29yZTo6U2lt
cGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbHlwaCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpVbmlzY3JpYmVIZWxwZXJUZXh0UnVuOjp0cnlUb1ByZWxvYWRGb250KToKKyAgICAg
ICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Rm9udEN1c3RvbVBsYXRmb3JtRGF0YTo6Zm9udFBsYXRmb3JtRGF0
YSk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1
bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6Y29va2llc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0UmF3Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpkZWxldGVDb29raWUpOgorICAg
ICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6cHJlZmV0Y2hETlMpOgorICAgICAgICAqIHBsYXRmb3JtL3F0L1BsYXRmb3Jt
QnJpZGdlLmg6CisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0
ZW1DaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTUUxpdGVGaWxlU3lzdGVtOjpkZWxl
dGVEYXRhYmFzZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmlsZVN5c3RlbTo6Z2V0
RGF0YWJhc2VGaWxlU2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0
ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcDoKKyAgICAgICAgKGNocm9taXVtT3Blbik6Cisg
ICAgICAgIChjaHJvbWl1bURlbGV0ZSk6CisgICAgICAgIChjaHJvbWl1bUFjY2Vzcyk6CisgICAg
ICAgICogcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVdpbi5j
cHA6CisgICAgICAgICogcGx1Z2lucy9jaHJvbWl1bS9QbHVnaW5EYXRhQ2hyb21pdW0uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UGx1Z2luQ2FjaGU6OnBsdWdpbnMpOgorICAgICAgICAqIHJlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVy
VGhlbWVDaHJvbWl1bU1hYzo6dXNlc1Rlc3RNb2RlRm9jdXNSaW5nQ29sb3IpOgorICAgICAgICAq
IHJlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGlua0ludGVydmFsKToKKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0
Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3Vu
ZENvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN5c3Rl
bUNvbG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50
QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50
U2xpZGVyVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6bWVudUxpc3RCdXR0b25XaWR0aCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludE1lbnVMaXN0KToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50VGV4dEZpZWxk
SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFp
bnRJbm5lclNwaW5CdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1
bVdpbjo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgICogc3RvcmFnZS9jaHJvbWl1bS9JREJG
YWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OklEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlOjp+SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UpOgorICAgICAgICAq
IHN0b3JhZ2UvY2hyb21pdW0vSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OklEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVk
VmFsdWVzQW5kS2V5UGF0aCk6CisKIDIwMTEtMDEtMTggIE1PUklUQSBIYWppbWUgIDxtb3JyaXRh
QGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgU2ltb24gRnJhc2VyLgpJbmRleDog
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5neXBpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L1dlYkNvcmUuZ3lwaQkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9XZWJDb3Jl
Lmd5cGkJKHdvcmtpbmcgY29weSkKQEAgLTI0MzcsNyArMjQzNyw2IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2YvU2NoZWR1bGVQYWlyLmNwcCcsCiAgICAgICAgICAgICAncGxhdGZvcm0vY2Yv
U2NoZWR1bGVQYWlyLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL1NoYXJlZEJ1ZmZlckNG
LmNwcCcsCi0gICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmNwcCcs
CiAgICAgICAgICAgICAncGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0LmgnLAog
ICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5j
cHAnLApAQCAtMjQ3NCw2ICsyNDczLDcgQEAKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1
bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
aHJvbWl1bS9QYXN0ZWJvYXJkUHJpdmF0ZS5oJywKKyAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJv
bWl1bS9QbGF0Zm9ybUJyaWRnZS5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9Q
bGF0Zm9ybUN1cnNvci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9y
bUtleWJvYXJkRXZlbnRDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9t
aXVtL1BsYXRmb3JtU2NyZWVuQ2hyb21pdW0uY3BwJywKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCShyZXZpc2lvbiA3NjA4NikKKysr
IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1Y4RE9NV2luZG93U2hlbGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04NCw3ICs4NCw3IEBAIHN0YXRpYyB2b2lkIHJlcG9ydEZhdGFsRXJyb3JJblY4
KGNvbnN0IGMKICAgICAvLyBGSVhNRTogY2xlYW4gdXAgVjhQcm94eSBhbmQgZGlzYWJsZSBKYXZh
U2NyaXB0LgogICAgIGludCBtZW1vcnlVc2FnZU1CID0gLTE7CiAjaWYgUExBVEZPUk0oQ0hST01J
VU0pCi0gICAgbWVtb3J5VXNhZ2VNQiA9IENocm9taXVtQnJpZGdlOjphY3R1YWxNZW1vcnlVc2Fn
ZU1CKCk7CisgICAgbWVtb3J5VXNhZ2VNQiA9IFBsYXRmb3JtQnJpZGdlOjphY3R1YWxNZW1vcnlV
c2FnZU1CKCk7CiAjZW5kaWYKICAgICBwcmludGYoIlY4IGVycm9yOiAlcyAoJXMpLiAgQ3VycmVu
dCBtZW1vcnkgdXNhZ2U6ICVkIE1CXG4iLCBtZXNzYWdlLCBsb2NhdGlvbiwgbWVtb3J5VXNhZ2VN
Qik7CiAgICAgaGFuZGxlRmF0YWxFcnJvckluVjgoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvUGFnZUdyb3VwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VH
cm91cC5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlR3Jv
dXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw3IEBACiAjaW5jbHVkZSAiU3RvcmFn
ZU5hbWVzcGFjZS5oIgogCiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCi0jaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2VuZGlmCiAKIG5hbWVz
cGFjZSBXZWJDb3JlIHsKQEAgLTEyOCw3ICsxMjgsNyBAQCBib29sIFBhZ2VHcm91cDo6aXNMaW5r
VmlzaXRlZChMaW5rSGFzaCB2CiB7CiAjaWYgUExBVEZPUk0oQ0hST01JVU0pCiAgICAgLy8gVXNl
IENocm9taXVtJ3MgYnVpbHQtaW4gdmlzaXRlZCBsaW5rIGRhdGFiYXNlLgotICAgIHJldHVybiBD
aHJvbWl1bUJyaWRnZTo6aXNMaW5rVmlzaXRlZCh2aXNpdGVkTGlua0hhc2gpOworICAgIHJldHVy
biBQbGF0Zm9ybUJyaWRnZTo6aXNMaW5rVmlzaXRlZCh2aXNpdGVkTGlua0hhc2gpOwogI2Vsc2UK
ICAgICBpZiAoIW1fdmlzaXRlZExpbmtzUG9wdWxhdGVkKSB7CiAgICAgICAgIG1fdmlzaXRlZExp
bmtzUG9wdWxhdGVkID0gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJv
aWQvUGxhdGZvcm1CcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hbmRyb2lkL1BsYXRmb3JtQnJpZGdlLmgJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw3ICs4Niw3IEBAIGNsYXNzIFdpZGdldDsKIAogLy8gQW4gaW50ZXJmYWNlIHRvIHRoZSBl
bWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUgYWJpbGl0eSB0byBhbnN3ZXIKIC8vIHF1ZXN0
aW9ucyBhYm91dCB0aGUgc3lzdGVtIGFuZCBzbyBvbi4uLgotLy8gVGhpcyBpcyB2ZXJ5IHNpbWls
YXIgdG8gQ2hyb21pdW1CcmlkZ2UgYW5kIHRoZSB0d28gYXJlIGxpa2VseSB0byBjb252ZXJnZQor
Ly8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gY2hyb21pdW0vUGxhdGZvcm1CcmlkZ2UgYW5kIHRo
ZSB0d28gYXJlIGxpa2VseSB0byBjb252ZXJnZQogLy8gaW4gdGhlIGZ1dHVyZS4KIC8vCiAvLyBU
aGUgbWV0aG9kcyBpbiB0aGlzIGNsYXNzIGFsbCBuZWVkIHRvIHJlYWNoIGFjcm9zcyBhIEpOSSBs
YXllciB0byB0aGUgSmF2YSBWTQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Y2hyb21pdW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVkaW9CdXNDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vY2hyb21pdW0vQXVkaW9C
dXNDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRl
ICJBdWRpb0J1cy5oIgogCiAjaW5jbHVkZSAiQXVkaW9GaWxlUmVhZGVyLmgiCi0jaW5jbHVkZSAi
Q2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTM4LDEyICszOCwx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIC8vIFBhc3NPd25QdHI8QXVkaW9CdXM+IEF1ZGlv
QnVzOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxl
UmF0ZSkKIC8vIHsKLS8vICAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUF1
ZGlvUmVzb3VyY2UobmFtZSwgc2FtcGxlUmF0ZSk7CisvLyAgICAgcmV0dXJuIFBsYXRmb3JtQnJp
ZGdlOjpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKG5hbWUsIHNhbXBsZVJhdGUpOwogLy8gfQog
CiBQYXNzT3duUHRyPEF1ZGlvQnVzPiBjcmVhdGVCdXNGcm9tSW5NZW1vcnlBdWRpb0ZpbGUoY29u
c3Qgdm9pZCogZGF0YSwgc2l6ZV90IGRhdGFTaXplLCBib29sIG1peFRvTW9ubywgZG91YmxlIHNh
bXBsZVJhdGUpCiB7Ci0gICAgT3duUHRyPEF1ZGlvQnVzPiBhdWRpb0J1cyA9IENocm9taXVtQnJp
ZGdlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKHN0YXRpY19jYXN0PGNvbnN0IGNoYXIqPihkYXRhKSwg
ZGF0YVNpemUsIHNhbXBsZVJhdGUpOworICAgIE93blB0cjxBdWRpb0J1cz4gYXVkaW9CdXMgPSBQ
bGF0Zm9ybUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YShzdGF0aWNfY2FzdDxjb25zdCBjaGFy
Kj4oZGF0YSksIGRhdGFTaXplLCBzYW1wbGVSYXRlKTsKICAgICBpZiAoYXVkaW9CdXMtPm51bWJl
ck9mQ2hhbm5lbHMoKSA9PSAyICYmIG1peFRvTW9ubykgewogICAgICAgICBPd25QdHI8QXVkaW9C
dXM+IG1vbm9BdWRpb0J1cyA9IGFkb3B0UHRyKG5ldyBBdWRpb0J1cygxLCBhdWRpb0J1cy0+bGVu
Z3RoKCkpKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21p
dW1CcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9DaHJvbWl1bUJyaWRnZS5oCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsMzUz
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBtZXQ6
Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIK
LSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFO
RCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJ
R0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI2lmbmRlZiBDaHJvbWl1bUJyaWRnZV9oCi0jZGVmaW5lIENocm9taXVtQnJpZGdl
X2gKLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0jaW5jbHVkZSAiQXVkaW9CdXMuaCIKLSNlbmRp
ZgotCi0jaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgotI2luY2x1ZGUgIkltYWdlU291cmNlLmgiCi0j
aW5jbHVkZSAiTGlua0hhc2guaCIKLSNpbmNsdWRlICJQYXNzUmVmUHRyLmgiCi0jaW5jbHVkZSAi
UGFzdGVib2FyZFByaXZhdGUuaCIKLSNpbmNsdWRlICJQbHVnaW5EYXRhLmgiCi0KLSNpbmNsdWRl
IDx3dGYvRm9yd2FyZC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgotCi10eXBlZGVmIHN0cnVjdCBOUE9iamVjdCBOUE9iamVjdDsKLXR5cGVkZWYg
c3RydWN0IF9OUFAgTlBQX3Q7Ci10eXBlZGVmIE5QUF90KiBOUFA7Ci0KLSNpZiBPUyhEQVJXSU4p
Ci10eXBlZGVmIHN0cnVjdCBDR0ZvbnQqIENHRm9udFJlZjsKLXR5cGVkZWYgdWludHB0cl90IEFU
U0ZvbnRDb250YWluZXJSZWY7Ci0jaWZkZWYgX19PQkpDX18KLUBjbGFzcyBOU0ZvbnQ7Ci0jZWxz
ZQotY2xhc3MgTlNGb250OwotI2VuZGlmCi0jZW5kaWYgLy8gT1MoREFSV0lOKQotCi0jaWYgT1Mo
V0lORE9XUykKLXR5cGVkZWYgc3RydWN0IEhGT05UX18qIEhGT05UOwotI2VuZGlmCi0KLW5hbWVz
cGFjZSBXZWJDb3JlIHsKLQotICAgIGNsYXNzIENsaXBib2FyZERhdGE7Ci0gICAgY2xhc3MgQ29s
b3I7Ci0gICAgY2xhc3MgQ3Vyc29yOwotICAgIGNsYXNzIERvY3VtZW50OwotICAgIGNsYXNzIEZy
YW1lOwotICAgIGNsYXNzIEdlb2xvY2F0aW9uU2VydmljZUJyaWRnZTsKLSAgICBjbGFzcyBHZW9s
b2NhdGlvblNlcnZpY2VDaHJvbWl1bTsKLSAgICBjbGFzcyBHcmFwaGljc0NvbnRleHQ7Ci0gICAg
Y2xhc3MgSW1hZ2U7Ci0gICAgY2xhc3MgSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U7Ci0gICAg
Y2xhc3MgSURCS2V5OwotICAgIGNsYXNzIEludFJlY3Q7Ci0gICAgY2xhc3MgS1VSTDsKLSAgICBj
bGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7Ci0gICAgY2xhc3MgV2lkZ2V0OwotCi0gICAgc3Ry
dWN0IENvb2tpZTsKLSAgICBzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOwotCi0gICAgLy8gQW4gaW50
ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUgYWJpbGl0eSB0byBh
bnN3ZXIKLSAgICAvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQgc28gb24uLi4KLQot
ICAgIGNsYXNzIENocm9taXVtQnJpZGdlIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIC8vIENhY2hl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIGNhY2hlTWV0YWRhdGEoY29uc3QgS1VSTCYgdXJs
LCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4mKTsKLQotICAgICAgICAv
LyBDbGlwYm9hcmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWls
YWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKLQotICAgICAgICBzdGF0aWMgU3RyaW5nIGNsaXBib2FyZFJl
YWRQbGFpblRleHQoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0gICAgICAg
IHN0YXRpYyB2b2lkIGNsaXBib2FyZFJlYWRIVE1MKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9h
cmRCdWZmZXIsIFN0cmluZyosIEtVUkwqKTsKLQotICAgICAgICAvLyBPbmx5IHRoZSBjbGlwYm9h
cmRSZWFkIGZ1bmN0aW9ucyB0YWtlIGEgYnVmZmVyIGFyZ3VtZW50IGJlY2F1c2UKLSAgICAgICAg
Ly8gQ2hyb21pdW0gY3VycmVudGx5IHVzZXMgYSBkaWZmZXJlbnQgdGVjaG5pcXVlIHRvIHdyaXRl
IHRvIGFsdGVybmF0ZQotICAgICAgICAvLyBjbGlwYm9hcmQgYnVmZmVycy4KLSAgICAgICAgc3Rh
dGljIHZvaWQgY2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYsIGJvb2wpOwotICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRX
cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJv
YXJkV3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMg
dm9pZCBjbGlwYm9hcmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBLVVJMJiwgY29u
c3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlRGF0YShjb25z
dCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSwgY29uc3QgU3RyaW5nJiBtZXRhZGF0
YSk7Ci0KLSAgICAgICAgLy8gSW50ZXJmYWNlIGZvciBoYW5kbGluZyBjb3B5IGFuZCBwYXN0ZSwg
ZHJhZyBhbmQgZHJvcCwgYW5kIHNlbGVjdGlvbiBjb3B5LgotICAgICAgICBzdGF0aWMgSGFzaFNl
dDxTdHJpbmc+IGNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6
Q2xpcGJvYXJkQnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVuYW1lcyk7Ci0gICAgICAgIHN0YXRp
YyBib29sIGNsaXBib2FyZFJlYWREYXRhKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZm
ZXIsIGNvbnN0IFN0cmluZyYgdHlwZSwgU3RyaW5nJiBkYXRhLCBTdHJpbmcmIG1ldGFkYXRhKTsK
LSAgICAgICAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGNsaXBib2FyZFJlYWRGaWxlbmFtZXMoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0KLSAgICAgICAgLy8gQ29va2llcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgc3RhdGljIHZvaWQgc2V0Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmLCBjb25zdCBTdHJpbmcmIHZhbHVlKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBjb29r
aWVzKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYpOwotICAgICAgICBzdGF0aWMgU3RyaW5n
IGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VS
TCYpOwotICAgICAgICBzdGF0aWMgYm9vbCByYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiwgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYpOwotICAgICAgICBzdGF0aWMgdm9pZCBkZWxl
dGVDb29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYg
Y29va2llTmFtZSk7Ci0gICAgICAgIHN0YXRpYyBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERv
Y3VtZW50Kik7Ci0KLSAgICAgICAgLy8gRE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQg
cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSk7Ci0KLSAgICAgICAgLy8gRmlsZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQgcmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcm
KTsKLSAgICAgICAgc3RhdGljIGJvb2wgZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmKTsKLSAgICAg
ICAgc3RhdGljIGJvb2wgZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmKTsKLSAgICAgICAgc3RhdGlj
IGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRp
YyBib29sIGdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYsIGxvbmcgbG9uZyYgcmVzdWx0KTsKLSAg
ICAgICAgc3RhdGljIGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiwg
dGltZV90JiByZXN1bHQpOwotICAgICAgICBzdGF0aWMgU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29u
c3QgU3RyaW5nJiBwYXRoKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdD
b21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCk7Ci0g
ICAgICAgIHN0YXRpYyBib29sIG1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgp
OwotICAgICAgICBzdGF0aWMgU3RyaW5nIGdldEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcmKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgaXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJik7Ci0gICAgICAg
IHN0YXRpYyBLVVJMIGZpbGVQYXRoVG9VUkwoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRp
YyBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Bl
bk1vZGUpOwotICAgICAgICBzdGF0aWMgdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
Jik7Ci0gICAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
LCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbik7Ci0gICAgICAgIHN0YXRpYyBib29s
IHRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQpOwotICAg
ICAgICBzdGF0aWMgaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpOwotICAgICAgICBzdGF0aWMgaW50IHdyaXRlVG9GaWxlKFBsYXRmb3Jt
RmlsZUhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7Ci0KLSAgICAgICAgLy8g
Rm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLSNpZiBPUyhXSU5ET1dTKQotICAgICAgICBzdGF0aWMgYm9vbCBlbnN1cmVG
b250TG9hZGVkKEhGT05UIGZvbnQpOwotI2VuZGlmCi0jaWYgT1MoTElOVVgpIHx8IE9TKEZSRUVC
U0QpCi0gICAgICAgIHN0YXRpYyB2b2lkIGdldFJlbmRlclN0eWxlRm9yU3RyaWtlKGNvbnN0IGNo
YXIqIGZhbWlseSwgaW50IHNpemVBbmRTdHlsZSwgRm9udFJlbmRlclN0eWxlKiByZXN1bHQpOwot
ICAgICAgICBzdGF0aWMgU3RyaW5nIGdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVD
aGFyKiwgc2l6ZV90IG51bUNoYXJhY3RlcnMpOwotI2VuZGlmCi0jaWYgT1MoREFSV0lOKQotICAg
ICAgICBzdGF0aWMgYm9vbCBsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWlu
ZXJSZWYqIG91dCk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBGb3JtcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBz
dGF0aWMgdm9pZCBub3RpZnlGb3JtU3RhdGVDaGFuZ2VkKGNvbnN0IERvY3VtZW50Kik7Ci0KLSAg
ICAgICAgLy8gRGF0YWJhc2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgLy8gUmV0dXJucyBhIGhhbmRsZSB0byB0aGUg
REIgZmlsZSBhbmQgb29wdGlvbmFsbHkgYSBoYW5kbGUgdG8gaXRzIGNvbnRhaW5pbmcgZGlyZWN0
b3J5Ci0gICAgICAgIHN0YXRpYyBQbGF0Zm9ybUZpbGVIYW5kbGUgZGF0YWJhc2VPcGVuRmlsZShj
b25zdCBTdHJpbmcmIHZmc0ZsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpOwotICAgICAgICAvLyBS
ZXR1cm5zIGEgU1FMaXRlIGNvZGUgKFNRTElURV9PSyA9IDAsIG9uIHN1Y2Nlc3MpCi0gICAgICAg
IHN0YXRpYyBpbnQgZGF0YWJhc2VEZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUs
IGJvb2wgc3luY0RpciA9IGZhbHNlKTsKLSAgICAgICAgLy8gUmV0dXJucyB0aGUgYXR0cmlidXRl
cyBvZiB0aGUgREIgZmlsZQotICAgICAgICBzdGF0aWMgbG9uZyBkYXRhYmFzZUdldEZpbGVBdHRy
aWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpOwotICAgICAgICAvLyBSZXR1cm5zIHRo
ZSBzaXplIG9mIHRoZSBEQiBmaWxlCi0gICAgICAgIHN0YXRpYyBsb25nIGxvbmcgZGF0YWJhc2VH
ZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKTsKLQotICAgICAgICAvLyBJbmRl
eGVkREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZT4gaWRiRmFjdG9yeSgpOwotICAgICAgICBzdGF0aWMgdm9pZCBpZGJTaHV0ZG93bigpOwot
ICAgICAgICAvLyBFeHRyYWN0cyBrZXlQYXRoIGZyb20gdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBj
b3JyZXNwb25kaW5nIGtleXMuCi0gICAgICAgIHN0YXRpYyB2b2lkIGNyZWF0ZUlEQktleXNGcm9t
U2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+ID4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVm
UHRyPElEQktleT4gPiYga2V5cyk7Ci0KLSAgICAgICAgLy8gSmF2YVNjcmlwdCAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
c3RhdGljIHZvaWQgbm90aWZ5SlNPdXRPZk1lbW9yeShGcmFtZSopOwotICAgICAgICBzdGF0aWMg
Ym9vbCBhbGxvd1NjcmlwdERlc3BpdGVTZXR0aW5ncyhjb25zdCBLVVJMJiBkb2N1bWVudFVSTCk7
Ci0KLSAgICAgICAgLy8gS2V5Z2VuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFN0cmluZyBzaWduZWRQ
dWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBT
dHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYgdXJsKTsKLQotICAgICAgICAvLyBMYW5ndWFn
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQotICAgICAgICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVkRGVmYXVsdExhbmd1YWdlKCk7Ci0K
LSAgICAgICAgLy8gTGF5b3V0VGVzdE1vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIGJvb2wgbGF5b3V0VGVzdE1v
ZGUoKTsKLQotICAgICAgICAvLyBNZW1vcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICAvLyBSZXR1cm5zIHRoZSBj
dXJyZW50IHNwYWNlIGFsbG9jYXRlZCBmb3IgdGhlIHBhZ2VmaWxlLCBpbiBNQi4KLSAgICAgICAg
Ly8gVGhhdCBpcyBjb21taXR0ZWQgc2l6ZSBmb3IgV2luZG93cyBhbmQgdmlydHVhbCBtZW1vcnkg
c2l6ZSBmb3IgUE9TSVgKLSAgICAgICAgc3RhdGljIGludCBtZW1vcnlVc2FnZU1CKCk7Ci0KLSAg
ICAgICAgLy8gU2FtZSBhcyBhYm92ZSwgYnV0IGFsd2F5cyByZXR1cm5zIGFjdHVhbCB2YWx1ZSwg
d2l0aG91dCBhbnkgY2FjaGVzLgotICAgICAgICBzdGF0aWMgaW50IGFjdHVhbE1lbW9yeVVzYWdl
TUIoKTsKLQotICAgICAgICAvLyBNaW1lVHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgYm9vbCBpc1N1
cHBvcnRlZEltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHN0
YXRpYyBib29sIGlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUo
Y29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBmaWxlRXh0ZW5zaW9uKTsKLSAgICAgICAgc3RhdGlj
IFN0cmluZyBtaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0cmluZyYgZmlsZVBhdGgpOwotICAgICAg
ICBzdGF0aWMgU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmlu
ZyYgbWltZVR5cGUpOwotCi0gICAgICAgIC8vIFBsdWdpbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBi
b29sIHBsdWdpbnMoYm9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4qKTsKLSAgICAgICAg
c3RhdGljIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCopOwotICAgICAg
ICBzdGF0aWMgYm9vbCBwb3B1cHNBbGxvd2VkKE5QUCk7Ci0KLSAgICAgICAgLy8gUmVzb3VyY2Vz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybUltYWdlUmVz
b3VyY2UoY29uc3QgY2hhciogbmFtZSk7Ci0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotICAgICAg
ICBzdGF0aWMgUGFzc093blB0cjxBdWRpb0J1cz4gbG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShj
b25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSk7Ci0gICAgICAgIHN0YXRpYyBQYXNz
T3duUHRyPEF1ZGlvQnVzPiBkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNp
emVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSk7Ci0jZW5kaWYKLQotICAgICAgICAvLyBTYW5k
Ym94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQotICAgICAgICBzdGF0aWMgYm9vbCBzYW5kYm94RW5hYmxlZCgpOwotCi0gICAgICAg
IC8vIFNjcmVlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBpbnQgc2NyZWVuRGVwdGgoV2lkZ2V0Kik7
Ci0gICAgICAgIHN0YXRpYyBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0Kik7Ci0g
ICAgICAgIHN0YXRpYyBib29sIHNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqKTsKLSAgICAgICAg
c3RhdGljIEludFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqKTsKLSAgICAgICAgc3RhdGljIEludFJl
Y3Qgc2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKLQotICAgICAgICAvLyBTaGFyZWRUaW1l
cnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQotICAgICAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAo
KmZ1bmMpKCkpOwotICAgICAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRv
dWJsZSBmaXJlVGltZSk7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHN0b3BTaGFyZWRUaW1lcigpOwot
Ci0gICAgICAgIC8vIFN0YXRzQ291bnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIGRlY3JlbWVudFN0
YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKTsKLSAgICAgICAgc3RhdGljIHZvaWQgaW5jcmVt
ZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBo
aXN0b2dyYW1DdXN0b21Db3VudHMoY29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IG1p
biwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KTsKLSAgICAgICAgc3RhdGljIHZvaWQgaGlzdG9n
cmFtRW51bWVyYXRpb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IGJvdW5kYXJ5
VmFsdWUpOwotCi0gICAgICAgIC8vIFN1ZGRlbiBUZXJtaW5hdGlvbgotICAgICAgICBzdGF0aWMg
dm9pZCBzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKTsKLQotICAgICAgICAv
LyBTeXN0ZW1UaW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgZG91YmxlIGN1cnJlbnRUaW1lKCk7Ci0KLSAg
ICAgICAgLy8gVGhlbWluZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSNpZiBPUyhXSU5ET1dTKQotICAgICAgICBzdGF0aWMgdm9p
ZCBwYWludEJ1dHRvbigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBp
bnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3Rh
dGljIHZvaWQgcGFpbnRNZW51TGlzdCgKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGlu
dCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAg
ICAgICAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJBcnJvdygKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCosIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYp
OwotICAgICAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJhclRodW1iKAotICAgICAgICAgICAg
R3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwg
Y29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJhclRyYWNr
KAotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50
IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmIGFsaWduUmVjdCk7
Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50U3BpbkJ1dHRvbigKLSAgICAgICAgICAgIEdyYXBo
aWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0
IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRUZXh0RmllbGQoCi0gICAgICAg
ICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0
YXRlLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgQ29sb3ImLCBib29sIGZpbGxDb250ZW50QXJlYSwg
Ym9vbCBkcmF3RWRnZXMpOwotICAgICAgICBzdGF0aWMgdm9pZCBwYWludFRyYWNrYmFyKAotICAg
ICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNz
aWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOwotICAgICAgICBzdGF0aWMgdm9pZCBwYWludFByb2dy
ZXNzQmFyKAotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgY29uc3QgSW50UmVjdCYgYmFy
UmVjdCwgY29uc3QgSW50UmVjdCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUg
YW5pbWF0ZWRTZWNvbmRzKTsKLSNlbGlmIE9TKExJTlVYKQotICAgICAgICAvLyBUaGUgVUkgcGFy
dCB3aGljaCBpcyBiZWluZyBhY2Nlc3NlZC4KLSAgICAgICAgZW51bSBUaGVtZVBhcnQgewotICAg
ICAgICAgICAgUGFydFNjcm9sbGJhckRvd25BcnJvdywKLSAgICAgICAgICAgIFBhcnRTY3JvbGxi
YXJMZWZ0QXJyb3csCi0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdywKLSAgICAg
ICAgICAgIFBhcnRTY3JvbGxiYXJVcEFycm93LAotICAgICAgICAgICAgUGFydFNjcm9sbGJhckhv
cml6b250YWxUaHVtYiwKLSAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iLAot
ICAgICAgICAgICAgUGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjaywKLSAgICAgICAgICAgIFBh
cnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAotICAgICAgICB9OwotCi0gICAgICAgIC8vIFRoZSBj
dXJyZW50IHN0YXRlIG9mIHRoZSBhc3NvY2lhdGVkIFBhcnQuCi0gICAgICAgIGVudW0gVGhlbWVQ
YWludFN0YXRlIHsKLSAgICAgICAgICAgIFN0YXRlRGlzYWJsZWQsCi0gICAgICAgICAgICBTdGF0
ZUhvdmVyLAotICAgICAgICAgICAgU3RhdGVOb3JtYWwsCi0gICAgICAgICAgICBTdGF0ZVByZXNz
ZWQsCi0gICAgICAgIH07Ci0KLSAgICAgICAgc3RydWN0IFNjcm9sbGJhclRyYWNrRXh0cmFQYXJh
bXMgewotICAgICAgICAgICAgLy8gVGhlIGJvdW5kcyBvZiB0aGUgZW50aXJlIHRyYWNrLCBhcyBv
cHBvc2VkIHRvIHRoZSBwYXJ0IGJlaW5nIHBhaW50ZWQuCi0gICAgICAgICAgICBpbnQgdHJhY2tY
OwotICAgICAgICAgICAgaW50IHRyYWNrWTsKLSAgICAgICAgICAgIGludCB0cmFja1dpZHRoOwot
ICAgICAgICAgICAgaW50IHRyYWNrSGVpZ2h0OwotICAgICAgICB9OwotCi0gICAgICAgIHVuaW9u
IFRoZW1lUGFpbnRFeHRyYVBhcmFtcyB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJUcmFja0V4dHJh
UGFyYW1zIHNjcm9sbGJhclRyYWNrOwotICAgICAgICB9OwotCi0gICAgICAgIC8vIEdldHMgdGhl
IHNpemUgb2YgdGhlIGdpdmVuIHRoZW1lIHBhcnQuIEZvciB2YXJpYWJsZSBzaXplZCBpdGVtcwot
ICAgICAgICAvLyBsaWtlIHZlcnRpY2FsIHNjcm9sbGJhciB0aHVtYnMsIHRoZSB3aWR0aCB3aWxs
IGJlIHRoZSByZXF1aXJlZCB3aWR0aCBvZgotICAgICAgICAvLyB0aGUgdHJhY2sgd2hpbGUgdGhl
IGhlaWdodCB3aWxsIGJlIHRoZSBtaW5pbXVtIGhlaWdodC4KLSAgICAgICAgc3RhdGljIEludFNp
emUgZ2V0VGhlbWVQYXJ0U2l6ZShUaGVtZVBhcnQpOwotICAgICAgICAvLyBQYWludCB0aGUgZ2l2
ZW4gdGhlIGdpdmVuIHRoZW1lIHBhcnQuCi0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50VGhlbWVQ
YXJ0KEdyYXBoaWNzQ29udGV4dCosIFRoZW1lUGFydCwgVGhlbWVQYWludFN0YXRlLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgVGhlbWVQYWludEV4dHJhUGFyYW1zKik7Ci0jZWxpZiBPUyhEQVJXSU4p
Ci0gICAgICAgIGVudW0gVGhlbWVQYWludFN0YXRlIHsKLSAgICAgICAgICAgIFN0YXRlRGlzYWJs
ZWQsCi0gICAgICAgICAgICBTdGF0ZUluYWN0aXZlLAotICAgICAgICAgICAgU3RhdGVBY3RpdmUs
Ci0gICAgICAgICAgICBTdGF0ZVByZXNzZWQsCi0gICAgICAgIH07Ci0KLSAgICAgICAgZW51bSBU
aGVtZVBhaW50U2l6ZSB7Ci0gICAgICAgICAgICBTaXplUmVndWxhciwKLSAgICAgICAgICAgIFNp
emVTbWFsbCwKLSAgICAgICAgfTsKLQotICAgICAgICBlbnVtIFRoZW1lUGFpbnRTY3JvbGxiYXJP
cmllbnRhdGlvbiB7Ci0gICAgICAgICAgICBTY3JvbGxiYXJPcmllbnRhdGlvbkhvcml6b250YWws
Ci0gICAgICAgICAgICBTY3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsLAotICAgICAgICB9Owot
Ci0gICAgICAgIGVudW0gVGhlbWVQYWludFNjcm9sbGJhclBhcmVudCB7Ci0gICAgICAgICAgICBT
Y3JvbGxiYXJQYXJlbnRTY3JvbGxWaWV3LAotICAgICAgICAgICAgU2Nyb2xsYmFyUGFyZW50UmVu
ZGVyTGF5ZXIsCi0gICAgICAgIH07Ci0KLSAgICAgICAgc3RydWN0IFRoZW1lUGFpbnRTY3JvbGxi
YXJJbmZvIHsKLSAgICAgICAgICAgIFRoZW1lUGFpbnRTY3JvbGxiYXJPcmllbnRhdGlvbiBvcmll
bnRhdGlvbjsKLSAgICAgICAgICAgIFRoZW1lUGFpbnRTY3JvbGxiYXJQYXJlbnQgcGFyZW50Owot
ICAgICAgICAgICAgaW50IG1heFZhbHVlOwotICAgICAgICAgICAgaW50IGN1cnJlbnRWYWx1ZTsK
LSAgICAgICAgICAgIGludCB2aXNpYmxlU2l6ZTsKLSAgICAgICAgICAgIGludCB0b3RhbFNpemU7
Ci0gICAgICAgIH07Ci0KLSAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJUaHVtYihH
cmFwaGljc0NvbnRleHQqLCBUaGVtZVBhaW50U3RhdGUsIFRoZW1lUGFpbnRTaXplLCBjb25zdCBJ
bnRSZWN0JiwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8mKTsKLSNlbmRpZgotCi0gICAg
ICAgIC8vIFRyYWNlIEV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIHRyYWNlRXZlbnRCZWdpbihj
b25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOwotICAgICAgICBz
dGF0aWMgdm9pZCB0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25z
dCBjaGFyKiBleHRyYSk7Ci0KLSAgICAgICAgLy8gVmlzaXRlZCBsaW5rcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGlj
IExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5n
dGgpOwotICAgICAgICBzdGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwm
IGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKLSAgICAgICAgc3RhdGlj
IGJvb2wgaXNMaW5rVmlzaXRlZChMaW5rSGFzaCk7Ci0gICAgfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQotCi0jZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0Nocm9taXVtRGF0YU9iamVjdExlZ2FjeS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmNwcAkocmV2aXNp
b24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5ICszMSw5IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmgiCiAK
LSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZE1pbWVUeXBl
cy5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTEzMiw3ICsxMzIsNyBAQCBTdHJpbmcgQ2hy
b21pdW1EYXRhT2JqZWN0TGVnYWN5OjpnZXREYXRhCiAgICAgICAgICAgICAgICAgUGFzdGVib2Fy
ZDo6Z2VuZXJhbFBhc3RlYm9hcmQoKS0+aXNTZWxlY3Rpb25Nb2RlKCkgPwogICAgICAgICAgICAg
ICAgIFBhc3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOgogICAgICAgICAgICAgICAg
IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcjsKLSAgICAgICAgICAgIFN0cmluZyB0
ZXh0ID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAg
ICAgICAgICAgIFN0cmluZyB0ZXh0ID0gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFp
blRleHQoYnVmZmVyKTsKICAgICAgICAgICAgIHN1Y2Nlc3MgPSAhdGV4dC5pc0VtcHR5KCk7CiAg
ICAgICAgICAgICByZXR1cm4gdGV4dDsKICAgICAgICAgfQpAQCAtMTU4LDcgKzE1OCw3IEBAIFN0
cmluZyBDaHJvbWl1bURhdGFPYmplY3RMZWdhY3k6OmdldERhdGEKICAgICAgICAgICAgICAgICBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAgICBTdHJpbmcgaHRt
bFRleHQ7CiAgICAgICAgICAgICBLVVJMIHNvdXJjZVVSTDsKLSAgICAgICAgICAgIENocm9taXVt
QnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZodG1sVGV4dCwgJnNvdXJjZVVSTCk7
CisgICAgICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAm
aHRtbFRleHQsICZzb3VyY2VVUkwpOwogICAgICAgICAgICAgc3VjY2VzcyA9ICFodG1sVGV4dC5p
c0VtcHR5KCk7CiAgICAgICAgICAgICByZXR1cm4gaHRtbFRleHQ7CiAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0RyYWdEYXRhQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL0RyYWdEYXRhQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCwxNiArMzAs
MTYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJEcmFnRGF0YS5oIgogCi0jaW5j
bHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJDaHJvbWl1bURhdGFPYmplY3QuaCIK
ICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJEb2N1bWVudEZyYWdt
ZW50LmgiCiAjaW5jbHVkZSAiRmlsZVN5c3RlbS5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5j
bHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0
cmluZy5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTYzLDcgKzYzLDcgQEAgU3RyaW5nIERyYWdEYXRhOjphc1VSTChGcmFtZSosIEZpbGVuYW1lQwog
ICAgICAgICBpZiAodGl0bGUpCiAgICAgICAgICAgICAqdGl0bGUgPSBtX3BsYXRmb3JtRHJhZ0Rh
dGEtPnVybFRpdGxlKCk7CiAgICAgfSBlbHNlIGlmIChmaWxlbmFtZVBvbGljeSA9PSBDb252ZXJ0
RmlsZW5hbWVzICYmIGNvbnRhaW5zRmlsZXMoKSkgewotICAgICAgICB1cmwgPSBDaHJvbWl1bUJy
aWRnZTo6ZmlsZVBhdGhUb1VSTChDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKG1fcGxh
dGZvcm1EcmFnRGF0YS0+ZmlsZW5hbWVzKClbMF0pKTsKKyAgICAgICAgdXJsID0gUGxhdGZvcm1C
cmlkZ2U6OmZpbGVQYXRoVG9VUkwoUGxhdGZvcm1CcmlkZ2U6OmdldEFic29sdXRlUGF0aChtX3Bs
YXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpWzBdKSk7CiAgICAgfQogICAgIHJldHVybiB1cmw7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hy
b21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L0ZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsODUgKzMxLDg1IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRmls
ZVN5c3RlbS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxh
dGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBib29sIGRlbGV0ZUZpbGUo
Y29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRl
RmlsZShwYXRoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUZpbGUocGF0aCk7
CiB9CiAKIGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogewot
ICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7Cisg
ICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKIH0K
IAogYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0
KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0
KTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmdldEZpbGVTaXplKHBhdGgsIHJlc3VsdCk7
CiB9CiAKIGJvb2wgZ2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0
aW1lX3QmIHJlc3VsdCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVNb2Rp
ZmljYXRpb25UaW1lKHBhdGgsIHJlc3VsdCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpn
ZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCByZXN1bHQpOwogfQogCiB2b2lkIHJldmVhbEZv
bGRlckluT1MoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIENocm9taXVtQnJpZGdlOjpyZXZl
YWxGb2xkZXJJbk9TKHBhdGgpOworICAgIFBsYXRmb3JtQnJpZGdlOjpyZXZlYWxGb2xkZXJJbk9T
KHBhdGgpOwogfQogCiBTdHJpbmcgZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7
Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpkaXJlY3RvcnlOYW1lKHBhdGgpOworICAgIHJl
dHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGlyZWN0b3J5TmFtZShwYXRoKTsKIH0KIAogU3RyaW5nIHBh
dGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYg
Y29tcG9uZW50KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6cGF0aEJ5QXBwZW5kaW5n
Q29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpw
YXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgY29tcG9uZW50KTsKIH0KIAogYm9vbCBtYWtl
QWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiBDaHJvbWl1
bUJyaWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJy
aWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOwogfQogCiBib29sIGZpbGVFeGlzdHMoY29u
c3QgU3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZmlsZUV4aXN0
cyhwYXRoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmZpbGVFeGlzdHMocGF0aCk7CiB9
CiAKIFBsYXRmb3JtRmlsZUhhbmRsZSBvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVP
cGVuTW9kZSBtb2RlKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6b3BlbkZpbGUocGF0
aCwgbW9kZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpvcGVuRmlsZShwYXRoLCBtb2Rl
KTsKIH0KIAogdm9pZCBjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7Ci0g
ICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbG9zZUZpbGUoaGFuZGxlKTsKKyAgICByZXR1cm4g
UGxhdGZvcm1CcmlkZ2U6OmNsb3NlRmlsZShoYW5kbGUpOwogfQogCiBsb25nIGxvbmcgc2Vla0Zp
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtP
cmlnaW4gb3JpZ2luKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6c2Vla0ZpbGUoaGFu
ZGxlLCBvZmZzZXQsIG9yaWdpbik7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzZWVrRmls
ZShoYW5kbGUsIG9mZnNldCwgb3JpZ2luKTsKIH0KIAogYm9vbCB0cnVuY2F0ZUZpbGUoUGxhdGZv
cm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCkKIHsKLSAgICByZXR1cm4gQ2hy
b21pdW1CcmlkZ2U6OnRydW5jYXRlRmlsZShoYW5kbGUsIG9mZnNldCk7CisgICAgcmV0dXJuIFBs
YXRmb3JtQnJpZGdlOjp0cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQpOwogfQogCiBpbnQgcmVh
ZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpyZWFkRnJvbUZpbGUoaGFuZGxlLCBk
YXRhLCBsZW5ndGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6cmVhZEZyb21GaWxlKGhh
bmRsZSwgZGF0YSwgbGVuZ3RoKTsKIH0KIAogaW50IHdyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhh
bmRsZSBoYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJu
IENocm9taXVtQnJpZGdlOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CisgICAg
cmV0dXJuIFBsYXRmb3JtQnJpZGdlOjp3cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL0xhbmd1YWdlQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xhbmd1YWdlQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3
NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xhbmd1YWdlQ2hyb21p
dW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgi
CisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5o
IgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC00MCw3ICs0MCw3IEBAIFN0cmluZyBwbGF0Zm9y
bURlZmF1bHRMYW5ndWFnZSgpCiB7CiAgICAgc3RhdGljIFN0cmluZyBjb21wdXRlZERlZmF1bHRM
YW5ndWFnZTsKICAgICBpZiAoY29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UuaXNFbXB0eSgpKQotICAg
ICAgICBjb21wdXRlZERlZmF1bHRMYW5ndWFnZSA9IENocm9taXVtQnJpZGdlOjpjb21wdXRlZERl
ZmF1bHRMYW5ndWFnZSgpOworICAgICAgICBjb21wdXRlZERlZmF1bHRMYW5ndWFnZSA9IFBsYXRm
b3JtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgpOwogICAgIHJldHVybiBjb21wdXRl
ZERlZmF1bHRMYW5ndWFnZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MDg2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMxLDE4ICszMSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIkxpbmtIYXNoLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogTGlua0hh
c2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKIHsK
LSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaCh1cmwsIGxlbmd0aCk7
CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2godXJsLCBsZW5ndGgp
OwogfQogCiBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwgY29uc3Qg
QXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdl
Ojp2aXNpdGVkTGlua0hhc2goYmFzZSwgYXR0cmlidXRlVVJMKTsKKyAgICByZXR1cm4gUGxhdGZv
cm1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChiYXNlLCBhdHRyaWJ1dGVVUkwpOwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVS
ZWdpc3RyeUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMjAgKzMxLDIwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTUlNRVR5cGVSZWdpc3RyeS5oIgogCi0jaW5j
bHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJNZWRpYVBsYXllci5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YUNocm9taXVtLmgiCiAj
aW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgogCiAvLyBOT1RFOiBVbmxpa2Ugb3RoZXIgcG9y
dHMsIHdlIGRvbid0IHVzZSB0aGUgc2hhcmVkIGltcGxlbWVudGF0aW9uIGJpdHMgaW4KIC8vIE1J
TUVUeXBlUmVnaXN0cnkuY3BwLiAgSW5zdGVhZCwgd2UgbmVlZCB0byByb3V0ZSBtb3N0IGZ1bmN0
aW9ucyB2aWEgdGhlCi0vLyBDaHJvbWl1bUJyaWRnZSB0byB0aGUgZW1iZWRkZXIuCisvLyBQbGF0
Zm9ybUJyaWRnZSB0byB0aGUgZW1iZWRkZXIuCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogU3Ry
aW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyAmZXh0KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNp
b24oZXh0KTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRm9yRXh0ZW5zaW9u
KGV4dCk7CiB9CiAKIC8vIFJldHVybnMgdGhlIGZpbGUgZXh0ZW5zaW9uIGlmIG9uZSBpcyBmb3Vu
ZC4gIERvZXMgbm90IGluY2x1ZGUgdGhlIGRvdCBpbiB0aGUKQEAgLTU1LDcgKzU1LDcgQEAgU3Ry
aW5nIE1JTUVUeXBlUmVnaXN0cnk6OmdldFByZWZlcnJlZEV4dAogICAgIC8vIEZJWE1FOiBJcyB0
aGlzIHJlYWxseSBuZWNlc3Nhcnk/PwogICAgIFN0cmluZyBtaW1lVHlwZSA9IHR5cGUuc3Vic3Ry
aW5nKDAsIHN0YXRpY19jYXN0PHVuc2lnbmVkPih0eXBlLmZpbmQoJzsnKSkpOwogCi0gICAgU3Ry
aW5nIGV4dCA9IENocm9taXVtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSh0
eXBlKTsKKyAgICBTdHJpbmcgZXh0ID0gUGxhdGZvcm1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lv
bkZvck1JTUVUeXBlKHR5cGUpOwogICAgIGlmICghZXh0LmlzRW1wdHkoKSAmJiBleHRbMF0gPT0g
Jy4nKQogICAgICAgICBleHQgPSBleHQuc3Vic3RyaW5nKDEpOwogCkBAIC04MSw3ICs4MSw3IEBA
IFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclAKIAogYm9vbCBNSU1FVHlw
ZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKIHsgCi0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGUobWltZVR5cGUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFn
ZU1JTUVUeXBlKG1pbWVUeXBlKTsKIH0KIAogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBv
cnRlZEltYWdlUmVzb3VyY2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQpAQCAtOTYs
MTIgKzk2LDEyIEBAIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU0KIAog
Ym9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25z
dCBTdHJpbmcmIG1pbWVUeXBlKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6aXNTdXBw
b3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUobWltZVR5cGUpOworICAgIHJldHVybiBQbGF0Zm9ybUJy
aWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUobWltZVR5cGUpOwogfQogICAgIAog
Ym9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3Qg
U3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmlzU3VwcG9y
dGVkTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdl
Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpOwogfQogCiBib29sIE1JTUVU
eXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTWVkaWFNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENo
cm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9QYXN0ZWJvYXJkQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTMxLDIwICszMSwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBh
c3RlYm9hcmQuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2xp
cGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKLSNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50Lmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJEb2N1bWVudEZyYWdtZW50LmgiCiAj
aW5jbHVkZSAiRWxlbWVudC5oIgogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSFRNTE5h
bWVzLmgiCiAjaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9tcy5oIgogI2luY2x1ZGUgIkltYWdlLmgi
CiAjaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgIk5hdGl2
ZUltYWdlU2tpYS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUmFu
Z2UuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgorI2luY2x1ZGUgIm1hcmt1cC5oIgogCiAj
aWYgRU5BQkxFKFNWRykKICNpbmNsdWRlICJTVkdOYW1lcy5oIgpAQCAtOTEsNyArOTEsNyBAQCB2
b2lkIFBhc3RlYm9hcmQ6OndyaXRlU2VsZWN0aW9uKFJhbmdlKiBzCiAjZW5kaWYKICAgICByZXBs
YWNlTkJTUFdpdGhTcGFjZShwbGFpblRleHQpOwogCi0gICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFdyaXRlU2VsZWN0aW9uKGh0bWwsIHVybCwgcGxhaW5UZXh0LCBjYW5TbWFydENvcHlPckRl
bGV0ZSk7CisgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKGh0bWws
IHVybCwgcGxhaW5UZXh0LCBjYW5TbWFydENvcHlPckRlbGV0ZSk7CiB9CiAKIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0KQpAQCAtOTksOSArOTksOSBA
QCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0CiAjaWYgT1MoV0lORE9X
UykKICAgICBTdHJpbmcgcGxhaW5UZXh0KHRleHQpOwogICAgIHJlcGxhY2VOZXdsaW5lc1dpdGhX
aW5kb3dzU3R5bGVOZXdsaW5lcyhwbGFpblRleHQpOwotICAgIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZVBsYWluVGV4dChwbGFpblRleHQpOworICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZVBsYWluVGV4dChwbGFpblRleHQpOwogI2Vsc2UKLSAgICBDaHJvbWl1bUJyaWRn
ZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQodGV4dCk7CisgICAgUGxhdGZvcm1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlUGxhaW5UZXh0KHRleHQpOwogI2VuZGlmCiB9CiAKQEAgLTExNiw3ICsxMTYs
NyBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlVVJMKGNvbnN0IEtVUkwmIHVyCiAgICAgICAgICAg
ICB0aXRsZSA9IHVybC5ob3N0KCk7CiAgICAgfQogCi0gICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFdyaXRlVVJMKHVybCwgdGl0bGUpOworICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRX
cml0ZVVSTCh1cmwsIHRpdGxlKTsKIH0KIAogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5v
ZGUqIG5vZGUsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmIHRpdGxlKQpAQCAtMTUwLDE3ICsx
NTAsMTcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUltYWdlKE5vZGUqIG5vZGUsIAogICAgIH0K
ICAgICBLVVJMIHVybCA9IHVybFN0cmluZy5pc0VtcHR5KCkgPyBLVVJMKCkgOiBub2RlLT5kb2N1
bWVudCgpLT5jb21wbGV0ZVVSTChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXModXJs
U3RyaW5nKSk7CiAKLSAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShiaXRt
YXAsIHVybCwgdGl0bGUpOworICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZUltYWdl
KGJpdG1hcCwgdXJsLCB0aXRsZSk7CiB9CiAKIGJvb2wgUGFzdGVib2FyZDo6Y2FuU21hcnRSZXBs
YWNlKCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZElzRm9ybWF0QXZh
aWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpXZWJTbWFydFBhc3RlRm9ybWF0LCBtX3NlbGVjdGlv
bk1vZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogUGFzdGVib2FyZFBy
aXZhdGU6OlN0YW5kYXJkQnVmZmVyKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBi
b2FyZElzRm9ybWF0QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpXZWJTbWFydFBhc3RlRm9y
bWF0LCBtX3NlbGVjdGlvbk1vZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVy
IDogUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyKTsKIH0KIAogU3RyaW5nIFBhc3Rl
Ym9hcmQ6OnBsYWluVGV4dChGcmFtZSogZnJhbWUpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KG1fc2VsZWN0aW9uTW9kZSA/IFBhc3RlYm9hcmRQ
cml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZm
ZXIpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dCht
X3NlbGVjdGlvbk1vZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogUGFz
dGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyKTsKIH0KIAogUGFzc1JlZlB0cjxEb2N1bWVu
dEZyYWdtZW50PiBQYXN0ZWJvYXJkOjpkb2N1bWVudEZyYWdtZW50KEZyYW1lKiBmcmFtZSwgUGFz
c1JlZlB0cjxSYW5nZT4gY29udGV4dCwgYm9vbCBhbGxvd1BsYWluVGV4dCwgYm9vbCYgY2hvc2VQ
bGFpblRleHQpCkBAIC0xNjgsMTAgKzE2OCwxMCBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21l
bnQ+IFBhc3RlYm9hcmQ6CiAgICAgY2hvc2VQbGFpblRleHQgPSBmYWxzZTsKICAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciA9IG1fc2VsZWN0aW9uTW9kZSA/IFBh
c3RlYm9hcmRQcml2YXRlOjpTZWxlY3Rpb25CdWZmZXIgOiBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3Rh
bmRhcmRCdWZmZXI7CiAKLSAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZElzRm9ybWF0
QXZhaWxhYmxlKFBhc3RlYm9hcmRQcml2YXRlOjpIVE1MRm9ybWF0LCBidWZmZXIpKSB7CisgICAg
aWYgKFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJk
UHJpdmF0ZTo6SFRNTEZvcm1hdCwgYnVmZmVyKSkgewogICAgICAgICBTdHJpbmcgbWFya3VwOwog
ICAgICAgICBLVVJMIHNyY1VSTDsKLSAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJl
YWRIVE1MKGJ1ZmZlciwgJm1hcmt1cCwgJnNyY1VSTCk7CisgICAgICAgIFBsYXRmb3JtQnJpZGdl
OjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwpOwogCiAgICAgICAg
IFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFnbWVudCA9CiAgICAgICAgICAgICBjcmVhdGVG
cmFnbWVudEZyb21NYXJrdXAoZnJhbWUtPmRvY3VtZW50KCksIG1hcmt1cCwgc3JjVVJMLCBGcmFn
bWVudFNjcmlwdGluZ05vdEFsbG93ZWQpOwpAQCAtMTgwLDcgKzE4MCw3IEBAIFBhc3NSZWZQdHI8
RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDoKICAgICB9CiAKICAgICBpZiAoYWxsb3dQbGFp
blRleHQpIHsKLSAgICAgICAgU3RyaW5nIG1hcmt1cCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7CisgICAgICAgIFN0cmluZyBtYXJrdXAgPSBQbGF0Zm9y
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwogICAgICAgICBpZiAoIW1h
cmt1cC5pc0VtcHR5KCkpIHsKICAgICAgICAgICAgIGNob3NlUGxhaW5UZXh0ID0gdHJ1ZTsKIApJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1CcmlkZ2UuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybUJy
aWRnZS5oCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1BsYXRmb3JtQnJpZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChjKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKGMpIDIwMTAsIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAg
KgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCkBAIC0zMSwxNyArMzEsMzIzIEBACiAj
aWZuZGVmIFBsYXRmb3JtQnJpZGdlX2gKICNkZWZpbmUgUGxhdGZvcm1CcmlkZ2VfaAogCi0jaW5j
bHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorI2luY2x1ZGUg
IkF1ZGlvQnVzLmgiCisjZW5kaWYKKworI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKKyNpbmNsdWRl
ICJJbWFnZVNvdXJjZS5oIgorI2luY2x1ZGUgIkxpbmtIYXNoLmgiCisjaW5jbHVkZSAiUGFzc1Jl
ZlB0ci5oIgorI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRlLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGF0YS5oIgorCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaFNl
dC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKwordHlwZWRlZiBzdHJ1Y3QgTlBPYmplY3Qg
TlBPYmplY3Q7Cit0eXBlZGVmIHN0cnVjdCBfTlBQIE5QUF90OwordHlwZWRlZiBOUFBfdCogTlBQ
OworCisjaWYgT1MoREFSV0lOKQordHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7Cit0
eXBlZGVmIHVpbnRwdHJfdCBBVFNGb250Q29udGFpbmVyUmVmOworI2lmZGVmIF9fT0JKQ19fCitA
Y2xhc3MgTlNGb250OworI2Vsc2UKK2NsYXNzIE5TRm9udDsKKyNlbmRpZgorI2VuZGlmIC8vIE9T
KERBUldJTikKKworI2lmIE9TKFdJTkRPV1MpCit0eXBlZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9O
VDsKKyNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLS8vIEZJWE1FOiBBIGJldHRlciBu
YW1lIGZvciBDaHJvbWl1bUJyaWRnZSBpcyBQbGF0Zm9ybUJyaWRnZS4gQW5kcm9pZCBhbHJlYWR5
Ci0vLyB1c2VzIFBsYXRmb3JtQnJpZGdlIHNvIHRoZSBjb2RlIHRoYXQgaXMgc2hhcmVkIGFtb25n
IHRoZSBBbmRyb2lkIGFuZCBDaHJvbWl1bQotLy8gcG9ydHMgaXMgZ3JhZHVhbGx5IG1vdmluZyB0
b3dhcmRzIHVzaW5nIFBsYXRmb3JtQnJpZGdlLiBPbmNlIHRoZSBBbmRyb2lkCi0vLyB1bmZvcmtp
bmcgaXMgZG9uZSwgd2Ugd2lsbCBjaGFuZ2UgdGhlIG5hbWUgb2YgQ2hyb21pdW1CcmlkZ2UgdG8g
UGxhdGZvcm1CcmlkZ2UKLS8vIGFuZCBtZXJnZSB0aGUgdHdvIGNsYXNzZXMgaW50byBvbmUgdGhh
dCB3aWxsIGJlIHNoYXJlZCBieSBib3RoIHBvcnRzLgotdHlwZWRlZiBDaHJvbWl1bUJyaWRnZSBQ
bGF0Zm9ybUJyaWRnZTsKKyAgICBjbGFzcyBDbGlwYm9hcmREYXRhOworICAgIGNsYXNzIENvbG9y
OworICAgIGNsYXNzIEN1cnNvcjsKKyAgICBjbGFzcyBEb2N1bWVudDsKKyAgICBjbGFzcyBGcmFt
ZTsKKyAgICBjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7CisgICAgY2xhc3MgR2VvbG9j
YXRpb25TZXJ2aWNlQ2hyb21pdW07CisgICAgY2xhc3MgR3JhcGhpY3NDb250ZXh0OworICAgIGNs
YXNzIEltYWdlOworICAgIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworICAgIGNs
YXNzIElEQktleTsKKyAgICBjbGFzcyBJbnRSZWN0OworICAgIGNsYXNzIEtVUkw7CisgICAgY2xh
c3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOworICAgIGNsYXNzIFdpZGdldDsKKworICAgIHN0cnVj
dCBDb29raWU7CisgICAgc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsKKworICAgIC8vIEFuIGludGVy
ZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxheWVyLCB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8gYW5z
d2VyCisgICAgLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0gYW5kIHNvIG9uLi4uCisKKyAg
ICBjbGFzcyBQbGF0Zm9ybUJyaWRnZSB7CisgICAgcHVibGljOgorICAgICAgICAvLyBDYWNoZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQorICAgICAgICBzdGF0aWMgdm9pZCBjYWNoZU1ldGFkYXRhKGNvbnN0IEtVUkwmIHVybCwg
ZG91YmxlIHJlc3BvbnNlVGltZSwgY29uc3QgVmVjdG9yPGNoYXI+Jik7CisKKyAgICAgICAgLy8g
Q2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgICAgc3RhdGljIGJvb2wgY2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFi
bGUoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwgUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlcik7CisKKyAgICAgICAgc3RhdGljIFN0cmluZyBjbGlwYm9hcmRSZWFk
UGxhaW5UZXh0KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOworICAgICAgICBz
dGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
QnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7CisKKyAgICAgICAgLy8gT25seSB0aGUgY2xpcGJvYXJk
UmVhZCBmdW5jdGlvbnMgdGFrZSBhIGJ1ZmZlciBhcmd1bWVudCBiZWNhdXNlCisgICAgICAgIC8v
IENocm9taXVtIGN1cnJlbnRseSB1c2VzIGEgZGlmZmVyZW50IHRlY2huaXF1ZSB0byB3cml0ZSB0
byBhbHRlcm5hdGUKKyAgICAgICAgLy8gY2xpcGJvYXJkIGJ1ZmZlcnMuCisgICAgICAgIHN0YXRp
YyB2b2lkIGNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKGNvbnN0IFN0cmluZyYsIGNvbnN0IEtVUkwm
LCBjb25zdCBTdHJpbmcmLCBib29sKTsKKyAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3Jp
dGVQbGFpblRleHQoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2Fy
ZFdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICAgICAgc3RhdGljIHZv
aWQgY2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciwgY29uc3QgS1VSTCYsIGNvbnN0
IFN0cmluZyYpOworICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRXcml0ZURhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0IFN0cmluZyYgbWV0YWRhdGEp
OworCisgICAgICAgIC8vIEludGVyZmFjZSBmb3IgaGFuZGxpbmcgY29weSBhbmQgcGFzdGUsIGRy
YWcgYW5kIGRyb3AsIGFuZCBzZWxlY3Rpb24gY29weS4KKyAgICAgICAgc3RhdGljIEhhc2hTZXQ8
U3RyaW5nPiBjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoUGFzdGVib2FyZFByaXZhdGU6OkNs
aXBib2FyZEJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpOworICAgICAgICBzdGF0aWMg
Ym9vbCBjbGlwYm9hcmRSZWFkRGF0YShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
LCBjb25zdCBTdHJpbmcmIHR5cGUsIFN0cmluZyYgZGF0YSwgU3RyaW5nJiBtZXRhZGF0YSk7Cisg
ICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOworCisgICAgICAgIC8vIENvb2tpZXMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBL
VVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgY29va2ll
cyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwm
KTsKKyAgICAgICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0
IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICAgICAgc3RhdGljIHZvaWQgZGVsZXRl
Q29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNv
b2tpZU5hbWUpOworICAgICAgICBzdGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1
bWVudCopOworCisgICAgICAgIC8vIEROUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0YXRpYyB2b2lkIHBy
ZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOworCisgICAgICAgIC8vIEZpbGUgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisgICAgICAgIHN0YXRpYyB2b2lkIHJldmVhbEZvbGRlckluT1MoY29uc3QgU3RyaW5nJik7
CisgICAgICAgIHN0YXRpYyBib29sIGZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJik7CisgICAgICAg
IHN0YXRpYyBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7CisgICAgICAgIHN0YXRpYyBi
b29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworICAgICAgICBzdGF0aWMg
Ym9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxvbmcmIHJlc3VsdCk7CisgICAg
ICAgIHN0YXRpYyBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYsIHRp
bWVfdCYgcmVzdWx0KTsKKyAgICAgICAgc3RhdGljIFN0cmluZyBkaXJlY3RvcnlOYW1lKGNvbnN0
IFN0cmluZyYgcGF0aCk7CisgICAgICAgIHN0YXRpYyBTdHJpbmcgcGF0aEJ5QXBwZW5kaW5nQ29t
cG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpOworICAg
ICAgICBzdGF0aWMgYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKTsK
KyAgICAgICAgc3RhdGljIFN0cmluZyBnZXRBYnNvbHV0ZVBhdGgoY29uc3QgU3RyaW5nJik7Cisg
ICAgICAgIHN0YXRpYyBib29sIGlzRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYpOworICAgICAgICBz
dGF0aWMgS1VSTCBmaWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYpOworICAgICAgICBzdGF0aWMg
UGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5N
b2RlKTsKKyAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYp
OworICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwg
bG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOworICAgICAgICBzdGF0aWMgYm9vbCB0
cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KTsKKyAgICAg
ICAgc3RhdGljIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKTsKKyAgICAgICAgc3RhdGljIGludCB3cml0ZVRvRmlsZShQbGF0Zm9ybUZp
bGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpOworCisgICAgICAgIC8vIEZv
bnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgc3RhdGljIGJvb2wgZW5zdXJlRm9u
dExvYWRlZChIRk9OVCBmb250KTsKKyNlbmRpZgorI2lmIE9TKExJTlVYKSB8fCBPUyhGUkVFQlNE
KQorICAgICAgICBzdGF0aWMgdm9pZCBnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFy
KiBmYW1pbHksIGludCBzaXplQW5kU3R5bGUsIEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0KTsKKyAg
ICAgICAgc3RhdGljIFN0cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciosIHNpemVfdCBudW1DaGFyYWN0ZXJzKTsKKyNlbmRpZgorI2lmIE9TKERBUldJTikKKyAgICAg
ICAgc3RhdGljIGJvb2wgbG9hZEZvbnQoTlNGb250KiBzcmNGb250LCBBVFNGb250Q29udGFpbmVy
UmVmKiBvdXQpOworI2VuZGlmCisKKyAgICAgICAgLy8gRm9ybXMgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgc3Rh
dGljIHZvaWQgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChjb25zdCBEb2N1bWVudCopOworCisgICAg
ICAgIC8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIC8vIFJldHVybnMgYSBoYW5kbGUgdG8gdGhlIERC
IGZpbGUgYW5kIG9vcHRpb25hbGx5IGEgaGFuZGxlIHRvIGl0cyBjb250YWluaW5nIGRpcmVjdG9y
eQorICAgICAgICBzdGF0aWMgUGxhdGZvcm1GaWxlSGFuZGxlIGRhdGFiYXNlT3BlbkZpbGUoY29u
c3QgU3RyaW5nJiB2ZnNGbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdzKTsKKyAgICAgICAgLy8gUmV0
dXJucyBhIFNRTGl0ZSBjb2RlIChTUUxJVEVfT0sgPSAwLCBvbiBzdWNjZXNzKQorICAgICAgICBz
dGF0aWMgaW50IGRhdGFiYXNlRGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lLCBi
b29sIHN5bmNEaXIgPSBmYWxzZSk7CisgICAgICAgIC8vIFJldHVybnMgdGhlIGF0dHJpYnV0ZXMg
b2YgdGhlIERCIGZpbGUKKyAgICAgICAgc3RhdGljIGxvbmcgZGF0YWJhc2VHZXRGaWxlQXR0cmli
dXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKTsKKyAgICAgICAgLy8gUmV0dXJucyB0aGUg
c2l6ZSBvZiB0aGUgREIgZmlsZQorICAgICAgICBzdGF0aWMgbG9uZyBsb25nIGRhdGFiYXNlR2V0
RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSk7CisKKyAgICAgICAgLy8gSW5kZXhl
ZERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2U+IGlkYkZhY3RvcnkoKTsKKyAgICAgICAgc3RhdGljIHZvaWQgaWRiU2h1dGRvd24oKTsKKyAg
ICAgICAgLy8gRXh0cmFjdHMga2V5UGF0aCBmcm9tIHZhbHVlcyBhbmQgcmV0dXJucyB0aGUgY29y
cmVzcG9uZGluZyBrZXlzLgorICAgICAgICBzdGF0aWMgdm9pZCBjcmVhdGVJREJLZXlzRnJvbVNl
cmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0
cjxJREJLZXk+ID4mIGtleXMpOworCisgICAgICAgIC8vIEphdmFTY3JpcHQgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0
YXRpYyB2b2lkIG5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUqKTsKKyAgICAgICAgc3RhdGljIGJv
b2wgYWxsb3dTY3JpcHREZXNwaXRlU2V0dGluZ3MoY29uc3QgS1VSTCYgZG9jdW1lbnRVUkwpOwor
CisgICAgICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0YXRpYyBTdHJpbmcgc2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3Ry
aW5nJiBjaGFsbGVuZ2UsIGNvbnN0IEtVUkwmIHVybCk7CisKKyAgICAgICAgLy8gTGFuZ3VhZ2Ug
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAgICAgc3RhdGljIFN0cmluZyBjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgpOworCisg
ICAgICAgIC8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0YXRpYyBib29sIGxheW91dFRlc3RNb2Rl
KCk7CisKKyAgICAgICAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgLy8gUmV0dXJucyB0aGUgY3Vy
cmVudCBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlZmlsZSwgaW4gTUIuCisgICAgICAgIC8v
IFRoYXQgaXMgY29tbWl0dGVkIHNpemUgZm9yIFdpbmRvd3MgYW5kIHZpcnR1YWwgbWVtb3J5IHNp
emUgZm9yIFBPU0lYCisgICAgICAgIHN0YXRpYyBpbnQgbWVtb3J5VXNhZ2VNQigpOworCisgICAg
ICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBhbHdheXMgcmV0dXJucyBhY3R1YWwgdmFsdWUsIHdp
dGhvdXQgYW55IGNhY2hlcy4KKyAgICAgICAgc3RhdGljIGludCBhY3R1YWxNZW1vcnlVc2FnZU1C
KCk7CisKKyAgICAgICAgLy8gTWltZVR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgc3RhdGljIGJvb2wgaXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBzdGF0
aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKTsKKyAgICAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworICAgICAgICBzdGF0aWMgU3RyaW5nIG1pbWVUeXBlRm9y
RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbik7CisgICAgICAgIHN0YXRpYyBT
dHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQYXRoKTsKKyAgICAgICAg
c3RhdGljIFN0cmluZyBwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKTsKKworICAgICAgICAvLyBQbHVnaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBzdGF0aWMgYm9v
bCBwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbkluZm8+Kik7CisgICAgICAgIHN0
YXRpYyBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU9iamVjdChXaWRnZXQqKTsKKyAgICAgICAg
c3RhdGljIGJvb2wgcG9wdXBzQWxsb3dlZChOUFApOworCisgICAgICAgIC8vIFJlc291cmNlcyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisgICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBsb2FkUGxhdGZvcm1JbWFnZVJlc291
cmNlKGNvbnN0IGNoYXIqIG5hbWUpOworCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKyAgICAgICAg
c3RhdGljIFBhc3NPd25QdHI8QXVkaW9CdXM+IGxvYWRQbGF0Zm9ybUF1ZGlvUmVzb3VyY2UoY29u
c3QgY2hhciogbmFtZSwgZG91YmxlIHNhbXBsZVJhdGUpOworICAgICAgICBzdGF0aWMgUGFzc093
blB0cjxBdWRpb0J1cz4gZGVjb2RlQXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXpl
X3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUpOworI2VuZGlmCisKKyAgICAgICAgLy8gU2FuZGJv
eCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKyAgICAgICAgc3RhdGljIGJvb2wgc2FuZGJveEVuYWJsZWQoKTsKKworICAgICAgICAv
LyBTY3JlZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorICAgICAgICBzdGF0aWMgaW50IHNjcmVlbkRlcHRoKFdpZGdldCopOwor
ICAgICAgICBzdGF0aWMgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCopOworICAg
ICAgICBzdGF0aWMgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0Kik7CisgICAgICAgIHN0
YXRpYyBJbnRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7CisgICAgICAgIHN0YXRpYyBJbnRSZWN0
IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7CisKKyAgICAgICAgLy8gU2hhcmVkVGltZXJz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KyAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpm
dW5jKSgpKTsKKyAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlVGltZShkb3Vi
bGUgZmlyZVRpbWUpOworICAgICAgICBzdGF0aWMgdm9pZCBzdG9wU2hhcmVkVGltZXIoKTsKKwor
ICAgICAgICAvLyBTdGF0c0NvdW50ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBzdGF0aWMgdm9pZCBkZWNyZW1lbnRTdGF0
c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSk7CisgICAgICAgIHN0YXRpYyB2b2lkIGluY3JlbWVu
dFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKTsKKyAgICAgICAgc3RhdGljIHZvaWQgaGlz
dG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBtaW4s
IGludCBtYXgsIGludCBidWNrZXRDb3VudCk7CisgICAgICAgIHN0YXRpYyB2b2lkIGhpc3RvZ3Jh
bUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZh
bHVlKTsKKworICAgICAgICAvLyBTdWRkZW4gVGVybWluYXRpb24KKyAgICAgICAgc3RhdGljIHZv
aWQgc3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCk7CisKKyAgICAgICAgLy8g
U3lzdGVtVGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKyAgICAgICAgc3RhdGljIGRvdWJsZSBjdXJyZW50VGltZSgpOworCisgICAg
ICAgIC8vIFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCisjaWYgT1MoV0lORE9XUykKKyAgICAgICAgc3RhdGljIHZvaWQg
cGFpbnRCdXR0b24oCisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50
IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7CisgICAgICAgIHN0YXRp
YyB2b2lkIHBhaW50TWVudUxpc3QoCisgICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQg
cGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7CisgICAg
ICAgIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyQXJyb3coCisgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQqLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICAgICAgICAgIEdy
YXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNv
bnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJUcmFjaygK
KyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBj
bGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRSZWN0JiBhbGlnblJlY3QpOwor
ICAgICAgICBzdGF0aWMgdm9pZCBwYWludFNwaW5CdXR0b24oCisgICAgICAgICAgICBHcmFwaGlj
c0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgICAgIHN0YXRpYyB2b2lkIHBhaW50VGV4dEZpZWxkKAorICAgICAgICAg
ICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0
ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJiwgYm9vbCBmaWxsQ29udGVudEFyZWEsIGJv
b2wgZHJhd0VkZ2VzKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRUcmFja2JhcigKKyAgICAg
ICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2lj
U3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRQcm9ncmVz
c0JhcigKKyAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGJhclJl
Y3QsIGNvbnN0IEludFJlY3QmIHZhbHVlUmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFu
aW1hdGVkU2Vjb25kcyk7CisjZWxpZiBPUyhMSU5VWCkKKyAgICAgICAgLy8gVGhlIFVJIHBhcnQg
d2hpY2ggaXMgYmVpbmcgYWNjZXNzZWQuCisgICAgICAgIGVudW0gVGhlbWVQYXJ0IHsKKyAgICAg
ICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3csCisgICAgICAgICAgICBQYXJ0U2Nyb2xsYmFy
TGVmdEFycm93LAorICAgICAgICAgICAgUGFydFNjcm9sbGJhclJpZ2h0QXJyb3csCisgICAgICAg
ICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKKyAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJIb3Jp
em9udGFsVGh1bWIsCisgICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYiwKKyAg
ICAgICAgICAgIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2ssCisgICAgICAgICAgICBQYXJ0
U2Nyb2xsYmFyVmVydGljYWxUcmFjaywKKyAgICAgICAgfTsKKworICAgICAgICAvLyBUaGUgY3Vy
cmVudCBzdGF0ZSBvZiB0aGUgYXNzb2NpYXRlZCBQYXJ0LgorICAgICAgICBlbnVtIFRoZW1lUGFp
bnRTdGF0ZSB7CisgICAgICAgICAgICBTdGF0ZURpc2FibGVkLAorICAgICAgICAgICAgU3RhdGVI
b3ZlciwKKyAgICAgICAgICAgIFN0YXRlTm9ybWFsLAorICAgICAgICAgICAgU3RhdGVQcmVzc2Vk
LAorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBTY3JvbGxiYXJUcmFja0V4dHJhUGFyYW1z
IHsKKyAgICAgICAgICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIGVudGlyZSB0cmFjaywgYXMgb3Bw
b3NlZCB0byB0aGUgcGFydCBiZWluZyBwYWludGVkLgorICAgICAgICAgICAgaW50IHRyYWNrWDsK
KyAgICAgICAgICAgIGludCB0cmFja1k7CisgICAgICAgICAgICBpbnQgdHJhY2tXaWR0aDsKKyAg
ICAgICAgICAgIGludCB0cmFja0hlaWdodDsKKyAgICAgICAgfTsKKworICAgICAgICB1bmlvbiBU
aGVtZVBhaW50RXh0cmFQYXJhbXMgeworICAgICAgICAgICAgU2Nyb2xsYmFyVHJhY2tFeHRyYVBh
cmFtcyBzY3JvbGxiYXJUcmFjazsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBHZXRzIHRoZSBz
aXplIG9mIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LiBGb3IgdmFyaWFibGUgc2l6ZWQgaXRlbXMKKyAg
ICAgICAgLy8gbGlrZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgdGh1bWJzLCB0aGUgd2lkdGggd2lsbCBi
ZSB0aGUgcmVxdWlyZWQgd2lkdGggb2YKKyAgICAgICAgLy8gdGhlIHRyYWNrIHdoaWxlIHRoZSBo
ZWlnaHQgd2lsbCBiZSB0aGUgbWluaW11bSBoZWlnaHQuCisgICAgICAgIHN0YXRpYyBJbnRTaXpl
IGdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0KTsKKyAgICAgICAgLy8gUGFpbnQgdGhlIGdpdmVu
IHRoZSBnaXZlbiB0aGVtZSBwYXJ0LgorICAgICAgICBzdGF0aWMgdm9pZCBwYWludFRoZW1lUGFy
dChHcmFwaGljc0NvbnRleHQqLCBUaGVtZVBhcnQsIFRoZW1lUGFpbnRTdGF0ZSwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IFRoZW1lUGFpbnRFeHRyYVBhcmFtcyopOworI2VsaWYgT1MoREFSV0lOKQor
ICAgICAgICBlbnVtIFRoZW1lUGFpbnRTdGF0ZSB7CisgICAgICAgICAgICBTdGF0ZURpc2FibGVk
LAorICAgICAgICAgICAgU3RhdGVJbmFjdGl2ZSwKKyAgICAgICAgICAgIFN0YXRlQWN0aXZlLAor
ICAgICAgICAgICAgU3RhdGVQcmVzc2VkLAorICAgICAgICB9OworCisgICAgICAgIGVudW0gVGhl
bWVQYWludFNpemUgeworICAgICAgICAgICAgU2l6ZVJlZ3VsYXIsCisgICAgICAgICAgICBTaXpl
U21hbGwsCisgICAgICAgIH07CisKKyAgICAgICAgZW51bSBUaGVtZVBhaW50U2Nyb2xsYmFyT3Jp
ZW50YXRpb24geworICAgICAgICAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsLAor
ICAgICAgICAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb25WZXJ0aWNhbCwKKyAgICAgICAgfTsKKwor
ICAgICAgICBlbnVtIFRoZW1lUGFpbnRTY3JvbGxiYXJQYXJlbnQgeworICAgICAgICAgICAgU2Ny
b2xsYmFyUGFyZW50U2Nyb2xsVmlldywKKyAgICAgICAgICAgIFNjcm9sbGJhclBhcmVudFJlbmRl
ckxheWVyLAorICAgICAgICB9OworCisgICAgICAgIHN0cnVjdCBUaGVtZVBhaW50U2Nyb2xsYmFy
SW5mbyB7CisgICAgICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50
YXRpb247CisgICAgICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFyUGFyZW50IHBhcmVudDsKKyAg
ICAgICAgICAgIGludCBtYXhWYWx1ZTsKKyAgICAgICAgICAgIGludCBjdXJyZW50VmFsdWU7Cisg
ICAgICAgICAgICBpbnQgdmlzaWJsZVNpemU7CisgICAgICAgICAgICBpbnQgdG90YWxTaXplOwor
ICAgICAgICB9OworCisgICAgICAgIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyVGh1bWIoR3Jh
cGhpY3NDb250ZXh0KiwgVGhlbWVQYWludFN0YXRlLCBUaGVtZVBhaW50U2l6ZSwgY29uc3QgSW50
UmVjdCYsIGNvbnN0IFRoZW1lUGFpbnRTY3JvbGxiYXJJbmZvJik7CisjZW5kaWYKKworICAgICAg
ICAvLyBUcmFjZSBFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLQorICAgICAgICBzdGF0aWMgdm9pZCB0cmFjZUV2ZW50QmVnaW4oY29u
c3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKTsKKyAgICAgICAgc3Rh
dGljIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3Qg
Y2hhciogZXh0cmEpOworCisgICAgICAgIC8vIFZpc2l0ZWQgbGlua3MgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgICAgIHN0YXRpYyBM
aW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3Ro
KTsKKyAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJMJiBi
YXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7CisgICAgICAgIHN0YXRpYyBi
b29sIGlzTGlua1Zpc2l0ZWQoTGlua0hhc2gpOworICAgIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotI2VuZGlmIC8vIFBsYXRmb3JtQnJpZGdlX2gKKyNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3Jl
ZW5DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDM0ICszMSwzNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3Jt
U2NyZWVuLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkludFJl
Y3QuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGludCBzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OnNjcmVlbkRlcHRoKHdpZGdldCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdl
OjpzY3JlZW5EZXB0aCh3aWRnZXQpOwogfQogCiBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQo
V2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0
aFBlckNvbXBvbmVudCh3aWRnZXQpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVu
RGVwdGhQZXJDb21wb25lbnQod2lkZ2V0KTsKIH0KIAogYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUo
V2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5Jc01v
bm9jaHJvbWUod2lkZ2V0KTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbklzTW9u
b2Nocm9tZSh3aWRnZXQpOwogfQogCiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdl
dCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnNjcmVlblJlY3Qod2lkZ2V0KTsKKyAg
ICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlblJlY3Qod2lkZ2V0KTsKIH0KIAogRmxvYXRS
ZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgcmV0dXJuIENo
cm9taXVtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVSZWN0KHdpZGdldCk7CisgICAgcmV0dXJuIFBs
YXRmb3JtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVSZWN0KHdpZGdldCk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Jl
YWRhYmxlRGF0YU9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vUmVhZGFibGVEYXRhT2JqZWN0LmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSwxMCArMzEsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJSZWFkYWJsZURhdGFPYmplY3QuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdl
LmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiUGFzdGVib2Fy
ZC5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1C
cmlkZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCwxOSArODAsMTkgQEAgU3Ry
aW5nIFJlYWRhYmxlRGF0YU9iamVjdDo6Z2V0RGF0YShjb25zdAogICAgICAgICAgICAgICAgIFBh
c3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KICAgICAg
ICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKICAgICAgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBk
YXRhID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAg
ICAgICAgICAgIGRhdGEgPSBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChi
dWZmZXIpOwogICAgICAgICB9IGVsc2UgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewog
ICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPQog
ICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0
aW9uTW9kZSgpID8KICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9u
QnVmZmVyIDoKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZm
ZXI7CiAgICAgICAgICAgICBLVVJMIGlnbm9yZWRTb3VyY2VVUkw7Ci0gICAgICAgICAgICBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmZGF0YSwgJmlnbm9yZWRTb3Vy
Y2VVUkwpOworICAgICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1
ZmZlciwgJmRhdGEsICZpZ25vcmVkU291cmNlVVJMKTsKICAgICAgICAgfQogICAgICAgICBzdWNj
ZWVkZWQgPSAhZGF0YS5pc0VtcHR5KCk7CiAgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KLSAg
ICBzdWNjZWVkZWQgPSBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgc3Vj
Y2VlZGVkID0gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAgICAgICBjbGlw
Ym9hcmRCdWZmZXIobV9jbGlwYm9hcmRUeXBlKSwgdHlwZSwgZGF0YSwgaWdub3JlZE1ldGFkYXRh
KTsKICAgICByZXR1cm4gZGF0YTsKIH0KQEAgLTEwMSw3ICsxMDEsNyBAQCBTdHJpbmcgUmVhZGFi
bGVEYXRhT2JqZWN0Ojp1cmxUaXRsZSgpIGNvCiB7CiAgICAgU3RyaW5nIGlnbm9yZWREYXRhOwog
ICAgIFN0cmluZyB1cmxUaXRsZTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERh
dGEoCisgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAgICAgICBjbGlw
Ym9hcmRCdWZmZXIobV9jbGlwYm9hcmRUeXBlKSwgbWltZVR5cGVUZXh0VVJJTGlzdCwgaWdub3Jl
ZERhdGEsIHVybFRpdGxlKTsKICAgICByZXR1cm4gdXJsVGl0bGU7CiB9CkBAIC0xMTAsNyArMTEw
LDcgQEAgS1VSTCBSZWFkYWJsZURhdGFPYmplY3Q6Omh0bWxCYXNlVXJsKCkgYwogewogICAgIFN0
cmluZyBpZ25vcmVkRGF0YTsKICAgICBTdHJpbmcgaHRtbEJhc2VVcmw7Ci0gICAgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKAorICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkRGF0YSgKICAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlwZSksIG1pbWVU
eXBlVGV4dEhUTUwsIGlnbm9yZWREYXRhLCBodG1sQmFzZVVybCk7CiAgICAgcmV0dXJuIEtVUkwo
UGFyc2VkVVJMU3RyaW5nLCBodG1sQmFzZVVybCk7CiB9CkBAIC0xMjMsNyArMTIzLDcgQEAgYm9v
bCBSZWFkYWJsZURhdGFPYmplY3Q6OmNvbnRhaW5zRmlsZW5hbQogCiBWZWN0b3I8U3RyaW5nPiBS
ZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENocm9t
aXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKGNsaXBib2FyZEJ1ZmZlcihtX2NsaXBi
b2FyZFR5cGUpKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxl
bmFtZXMoY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlwZSkpOwogfQogCiB2b2lkIFJlYWRh
YmxlRGF0YU9iamVjdDo6ZW5zdXJlVHlwZUNhY2hlSW5pdGlhbGl6ZWQoKSBjb25zdApAQCAtMTMx
LDcgKzEzMSw3IEBAIHZvaWQgUmVhZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGUKICAg
ICBpZiAobV9pc1R5cGVDYWNoZUluaXRpYWxpemVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBt
X3R5cGVzID0gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKKyAg
ICBtX3R5cGVzID0gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygK
ICAgICAgICAgY2xpcGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlwZSksICZtX2NvbnRhaW5zRmls
ZW5hbWVzKTsKICAgICBtX2lzVHlwZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVlOwogfQpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1NTTEtl
eUdlbmVyYXRvckNocm9taXVtLmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJT
U0xLZXlHZW5lcmF0b3IuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CkBAIC01MSw3ICs1MSw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlB
bmRDaGFsbGVuZ2VTdHJpbmcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2VTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplSW5kZXgs
CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcoa2V5U2l6ZUluZGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYWxsZW5nZVN0cmluZywKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwpOwogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI3LDcgKzI3LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTY3JvbGxiYXJUaGVtZUNocm9taXVtLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50
LmgiCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVt
ZUNocm9taXVtTGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHAJKHJldmlzaW9uIDc2MDg2
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5oIgogCi0j
aW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgog
CkBAIC00NiwyMiArNDYsMjIgQEAgU2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRp
dmVUaAogaW50IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6c2Nyb2xsYmFyVGhpY2tuZXNz
KFNjcm9sbGJhckNvbnRyb2xTaXplIGNvbnRyb2xTaXplKQogewogICAgIC8vIEhvcml6IGFuZCBW
ZXJ0IHNjcm9sbGJhcnMgYXJlIHRoZSBzYW1lIHRoaWNrbmVzcy4KLSAgICBJbnRTaXplIHNjcm9s
bGJhclNpemUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRn
ZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2spOworICAgIEludFNpemUgc2Nyb2xsYmFyU2l6
ZSA9IFBsYXRmb3JtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKFBsYXRmb3JtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyVmVydGljYWxUcmFjayk7CiAgICAgcmV0dXJuIHNjcm9sbGJhclNpemUud2lkdGgo
KTsKIH0KIAogdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VHJhY2tQaWVj
ZShHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVj
dCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0VHlwZSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6
VGhlbWVQYWludFN0YXRlIHN0YXRlID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IHBhcnRU
eXBlID8gQ2hyb21pdW1CcmlkZ2U6OlN0YXRlSG92ZXIgOiBDaHJvbWl1bUJyaWRnZTo6U3RhdGVO
b3JtYWw7CisgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSA9IHNjcm9s
bGJhci0+aG92ZXJlZFBhcnQoKSA9PSBwYXJ0VHlwZSA/IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUhv
dmVyIDogUGxhdGZvcm1CcmlkZ2U6OlN0YXRlTm9ybWFsOwogICAgIEludFJlY3QgYWxpZ25SZWN0
ID0gdHJhY2tSZWN0KHNjcm9sbGJhciwgZmFsc2UpOwotICAgIENocm9taXVtQnJpZGdlOjpUaGVt
ZVBhaW50RXh0cmFQYXJhbXMgZXh0cmFQYXJhbXM7CisgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1l
UGFpbnRFeHRyYVBhcmFtcyBleHRyYVBhcmFtczsKICAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJU
cmFjay50cmFja1ggPSBhbGlnblJlY3QueCgpOwogICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRy
YWNrLnRyYWNrWSA9IGFsaWduUmVjdC55KCk7CiAgICAgZXh0cmFQYXJhbXMuc2Nyb2xsYmFyVHJh
Y2sudHJhY2tXaWR0aCA9IGFsaWduUmVjdC53aWR0aCgpOwogICAgIGV4dHJhUGFyYW1zLnNjcm9s
bGJhclRyYWNrLnRyYWNrSGVpZ2h0ID0gYWxpZ25SZWN0LmhlaWdodCgpOwotICAgIENocm9taXVt
QnJpZGdlOjpwYWludFRoZW1lUGFydCgKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBh
cnQoCiAgICAgICAgIGdjLAotICAgICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9y
aXpvbnRhbFNjcm9sbGJhciA/IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRh
bFRyYWNrIDogQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAorICAg
ICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IFBs
YXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIDogUGxhdGZvcm1Ccmlk
Z2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAogICAgICAgICBzdGF0ZSwKICAgICAgICAg
cmVjdCwKICAgICAgICAgJmV4dHJhUGFyYW1zKTsKQEAgLTY5LDUyICs2OSw1MiBAQCB2b2lkIFNj
cm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUCiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVD
aHJvbWl1bUxpbnV4OjpwYWludEJ1dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIq
IHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQogewot
ICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBhcnQgcGFpbnRQYXJ0OwotICAgIENocm9taXVtQnJp
ZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw7
CisgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFydCBwYWludFBhcnQ7CisgICAgUGxhdGZvcm1C
cmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZU5vcm1h
bDsKICAgICBib29sIGNoZWNrTWluID0gZmFsc2U7CiAgICAgYm9vbCBjaGVja01heCA9IGZhbHNl
OwogICAgIGlmIChzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJh
cikgewogICAgICAgICBpZiAocGFydCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAg
ICAgICBwYWludFBhcnQgPSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsK
KyAgICAgICAgICAgIHBhaW50UGFydCA9IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyTGVm
dEFycm93OwogICAgICAgICAgICAgY2hlY2tNaW4gPSB0cnVlOwogICAgICAgICB9IGVsc2Ugewot
ICAgICAgICAgICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdo
dEFycm93OworICAgICAgICAgICAgcGFpbnRQYXJ0ID0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJSaWdodEFycm93OwogICAgICAgICAgICAgY2hlY2tNYXggPSB0cnVlOwogICAgICAgICB9
CiAgICAgfSBlbHNlIHsKICAgICAgICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkg
ewotICAgICAgICAgICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJV
cEFycm93OworICAgICAgICAgICAgcGFpbnRQYXJ0ID0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJVcEFycm93OwogICAgICAgICAgICAgY2hlY2tNaW4gPSB0cnVlOwogICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgcGFpbnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxi
YXJEb3duQXJyb3c7CisgICAgICAgICAgICBwYWludFBhcnQgPSBQbGF0Zm9ybUJyaWRnZTo6UGFy
dFNjcm9sbGJhckRvd25BcnJvdzsKICAgICAgICAgICAgIGNoZWNrTWF4ID0gdHJ1ZTsKICAgICAg
ICAgfQogICAgIH0KICAgICBpZiAoKGNoZWNrTWluICYmIChzY3JvbGxiYXItPmN1cnJlbnRQb3Mo
KSA8PSAwKSkKICAgICAgICAgfHwgKGNoZWNrTWF4ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygp
ID09IHNjcm9sbGJhci0+bWF4aW11bSgpKSkgewotICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJp
ZGdlOjpTdGF0ZURpc2FibGVkOworICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0
ZURpc2FibGVkOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+
cHJlc3NlZFBhcnQoKSkKLSAgICAgICAgICAgIHN0YXRlID0gQ2hyb21pdW1CcmlkZ2U6OlN0YXRl
UHJlc3NlZDsKKyAgICAgICAgICAgIHN0YXRlID0gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3Nl
ZDsKICAgICAgICAgZWxzZSBpZiAocGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCi0g
ICAgICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVyOworICAgICAgICAg
ICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVIb3ZlcjsKICAgICB9Ci0gICAgQ2hyb21p
dW1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KGdjLCBwYWludFBhcnQsIHN0YXRlLCByZWN0LCAwKTsK
KyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoZ2MsIHBhaW50UGFydCwgc3RhdGUs
IHJlY3QsIDApOwogfQogCiB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRU
aHVtYihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRl
OworICAgIFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGU7CiAKICAgICBpZiAo
c2Nyb2xsYmFyLT5wcmVzc2VkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAgICAgc3RhdGUgPSBD
aHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkOworICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJp
ZGdlOjpTdGF0ZVByZXNzZWQ7CiAgICAgZWxzZSBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgp
ID09IFRodW1iUGFydCkKLSAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVIb3Zl
cjsKKyAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVIb3ZlcjsKICAgICBlbHNl
Ci0gICAgICAgIHN0YXRlID0gQ2hyb21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFsOwotICAgIENocm9t
aXVtQnJpZGdlOjpwYWludFRoZW1lUGFydCgKKyAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRn
ZTo6U3RhdGVOb3JtYWw7CisgICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAogICAg
ICAgICBnYywKLSAgICAgICAgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxT
Y3JvbGxiYXIgPyBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiA6
IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYiwKKyAgICAgICAgc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBQbGF0Zm9ybUJy
aWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiA6IFBsYXRmb3JtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyVmVydGljYWxUaHVtYiwKICAgICAgICAgc3RhdGUsCiAgICAgICAgIHJlY3QsCiAg
ICAgICAgIDApOwpAQCAtMTI4LDIzICsxMjgsMjMgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtTGludXg6OnNob3VsZAogSW50U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OmJ1
dHRvblNpemUoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3Jp
ZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNpemUg
PSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNj
cm9sbGJhclVwQXJyb3cpOworICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6
Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3cpOwog
ICAgICAgICByZXR1cm4gSW50U2l6ZShzaXplLndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkg
PCAyICogc2l6ZS5oZWlnaHQoKSA/IHNjcm9sbGJhci0+aGVpZ2h0KCkgLyAyIDogc2l6ZS5oZWln
aHQoKSk7CiAgICAgfQogCiAgICAgLy8gSG9yaXpvbnRhbFNjcm9sbGJhcgotICAgIEludFNpemUg
c2l6ZSA9IENocm9taXVtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKENocm9taXVtQnJpZGdlOjpQ
YXJ0U2Nyb2xsYmFyTGVmdEFycm93KTsKKyAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRn
ZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJv
dyk7CiAgICAgcmV0dXJuIEludFNpemUoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIHNpemUud2lk
dGgoKSA/IHNjcm9sbGJhci0+d2lkdGgoKSAvIDIgOiBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0
KCkpOwogfQogCiBpbnQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtVGh1bWJM
ZW5ndGgoU2Nyb2xsYmFyKiBzY3JvbGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50
YXRpb24oKSA9PSBWZXJ0aWNhbFNjcm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNpemUgPSBD
aHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9s
bGJhclZlcnRpY2FsVGh1bWIpOworICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRn
ZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2Fs
VGh1bWIpOwogICAgICAgICByZXR1cm4gc2l6ZS5oZWlnaHQoKTsKICAgICB9CiAKLSAgICBJbnRT
aXplIHNpemUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRn
ZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYik7CisgICAgSW50U2l6ZSBzaXplID0gUGxh
dGZvcm1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxi
YXJIb3Jpem9udGFsVGh1bWIpOwogICAgIHJldHVybiBzaXplLndpZHRoKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1N
YWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw5ICsyNyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVk
ZSAiU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1hYy5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50
LmgiCiAjaW5jbHVkZSAiU2Nyb2xsVmlldy5oIgogI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4K
QEAgLTM3MCwxNSArMzcwLDE1IEBAIHN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2Vk
U3RhdGUKICAgICB9CiB9CiAKLXN0YXRpYyBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRl
IHNjcm9sbGJhclN0YXRlVG9UaGVtZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CitzdGF0
aWMgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVT
dGF0ZShTY3JvbGxiYXIqIHNjcm9sbGJhcikgewogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6U3RhdGVEaXNhYmxlZDsKKyAgICAg
ICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVkOwogICAgIGlmICghc2Nyb2xs
YmFyLT5jbGllbnQoKS0+aXNBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIENocm9taXVtQnJpZGdl
OjpTdGF0ZUluYWN0aXZlOworICAgICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlSW5h
Y3RpdmU7CiAgICAgaWYgKHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0g
ICAgICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkOworICAgICAgICByZXR1
cm4gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3NlZDsKIAotICAgIHJldHVybiBDaHJvbWl1bUJy
aWRnZTo6U3RhdGVBY3RpdmU7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUFjdGl2
ZTsKIH0KIAogYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChTY3JvbGxiYXIq
IHNjcm9sbGJhciwgR3JhcGhpY3NDb250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1h
Z2VSZWN0KQpAQCAtNDYzLDE4ICs0NjMsMTggQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVt
TWFjOjpwYWludChTYwogICAgIH0KIAogICAgIGlmIChoYXNUaHVtYihzY3JvbGxiYXIpKSB7Ci0g
ICAgICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U2Nyb2xsYmFySW5mbyBzY3JvbGxiYXJJ
bmZvOwotICAgICAgICBzY3JvbGxiYXJJbmZvLm9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmll
bnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBDaHJvbWl1bUJyaWRnZTo6U2Nyb2xs
YmFyT3JpZW50YXRpb25Ib3Jpem9udGFsIDogQ2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhck9yaWVu
dGF0aW9uVmVydGljYWw7Ci0gICAgICAgIHNjcm9sbGJhckluZm8ucGFyZW50ID0gc2Nyb2xsYmFy
LT5wYXJlbnQoKSAmJiBzY3JvbGxiYXItPnBhcmVudCgpLT5pc0ZyYW1lVmlldygpICYmIHN0YXRp
Y19jYXN0PEZyYW1lVmlldyo+KHNjcm9sbGJhci0+cGFyZW50KCkpLT5pc1Njcm9sbFZpZXdTY3Jv
bGxiYXIoc2Nyb2xsYmFyKSA/IENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRTY3JvbGxW
aWV3IDogQ2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhclBhcmVudFJlbmRlckxheWVyOworICAgICAg
ICBQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludFNjcm9sbGJhckluZm8gc2Nyb2xsYmFySW5mbzsK
KyAgICAgICAgc2Nyb2xsYmFySW5mby5vcmllbnRhdGlvbiA9IHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyID8gUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhck9y
aWVudGF0aW9uSG9yaXpvbnRhbCA6IFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlv
blZlcnRpY2FsOworICAgICAgICBzY3JvbGxiYXJJbmZvLnBhcmVudCA9IHNjcm9sbGJhci0+cGFy
ZW50KCkgJiYgc2Nyb2xsYmFyLT5wYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSAmJiBzdGF0aWNfY2Fz
dDxGcmFtZVZpZXcqPihzY3JvbGxiYXItPnBhcmVudCgpKS0+aXNTY3JvbGxWaWV3U2Nyb2xsYmFy
KHNjcm9sbGJhcikgPyBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldyA6
IFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRSZW5kZXJMYXllcjsKICAgICAgICAgc2Ny
b2xsYmFySW5mby5tYXhWYWx1ZSA9IHNjcm9sbGJhci0+bWF4aW11bSgpOwogICAgICAgICBzY3Jv
bGxiYXJJbmZvLmN1cnJlbnRWYWx1ZSA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpOwogICAgICAg
ICBzY3JvbGxiYXJJbmZvLnZpc2libGVTaXplID0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpOwog
ICAgICAgICBzY3JvbGxiYXJJbmZvLnRvdGFsU2l6ZSA9IHNjcm9sbGJhci0+dG90YWxTaXplKCk7
CiAKLSAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCisgICAgICAg
IFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAogICAgICAgICAgICAgZHJhd2lu
Z0NvbnRleHQsCiAgICAgICAgICAgICBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShzY3JvbGxi
YXIpLAotICAgICAgICAgICAgc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFJlZ3VsYXJTY3Jv
bGxiYXIgPyBDaHJvbWl1bUJyaWRnZTo6U2l6ZVJlZ3VsYXIgOiBDaHJvbWl1bUJyaWRnZTo6U2l6
ZVNtYWxsLAorICAgICAgICAgICAgc2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFJlZ3VsYXJT
Y3JvbGxiYXIgPyBQbGF0Zm9ybUJyaWRnZTo6U2l6ZVJlZ3VsYXIgOiBQbGF0Zm9ybUJyaWRnZTo6
U2l6ZVNtYWxsLAogICAgICAgICAgICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSwKICAgICAgICAg
ICAgIHNjcm9sbGJhckluZm8pOwogICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4u
Y3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVt
L1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICsz
MCw4IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHZzc3R5bGUuaD4KIAotI2lu
Y2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisj
aW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lh
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFy
LmgiCkBAIC02MSw3ICs2MSw3IEBAIGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3Jv
bGxiYXIKIHsKICAgICBzdGF0aWMgaW50IHRoaWNrbmVzczsKICAgICBpZiAoIXRoaWNrbmVzcykg
ewotICAgICAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCisgICAgICAg
IGlmIChQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVy
biBrTWFjU2Nyb2xsYmFyU2l6ZVtjb250cm9sU2l6ZV07CiAgICAgICAgIHRoaWNrbmVzcyA9IEdl
dFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NST0xMKTsKICAgICB9CkBAIC0xMDQsNyArMTA0LDcgQEAg
dm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRyYQogICAgIEludFJlY3QgYWxp
Z25SZWN0ID0gdHJhY2tSZWN0KHNjcm9sbGJhciwgZmFsc2UpOwogCiAgICAgLy8gRHJhdyB0aGUg
dHJhY2sgYXJlYSBiZWZvcmUvYWZ0ZXIgdGhlIHRodW1iIG9uIHRoZSBzY3JvbGwgYmFyLgotICAg
IENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhclRyYWNrKAorICAgIFBsYXRmb3JtQnJpZGdl
OjpwYWludFNjcm9sbGJhclRyYWNrKAogICAgICAgICBnYywKICAgICAgICAgcGFydElkLAogICAg
ICAgICBnZXRUaGVtZVN0YXRlKHNjcm9sbGJhciwgcGFydFR5cGUpLApAQCAtMTI0LDcgKzEyNCw3
IEBAIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRCdXQKICAgICAgICAgcGFy
dElkID0gaG9yeiA/IERGQ1NfU0NST0xMUklHSFQgOiBERkNTX1NDUk9MTERPV047CiAKICAgICAv
LyBEcmF3IHRoZSB0aHVtYiAodGhlIGJveCB5b3UgZHJhZyBpbiB0aGUgc2Nyb2xsIGJhciB0byBz
Y3JvbGwpLgotICAgIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93KAorICAgIFBs
YXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93KAogICAgICAgICBnYywKICAgICAgICAg
Z2V0VGhlbWVBcnJvd1N0YXRlKHNjcm9sbGJhciwgcGFydCksCiAgICAgICAgIHBhcnRJZCB8IGdl
dENsYXNzaWNUaGVtZVN0YXRlKHNjcm9sbGJhciwgcGFydCksCkBAIC0xMzYsNyArMTM2LDcgQEAg
dm9pZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRodQogICAgIGJvb2wgaG9yeiA9
IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwogCiAgICAg
Ly8gRHJhdyB0aGUgdGh1bWIgKHRoZSBib3ggeW91IGRyYWcgaW4gdGhlIHNjcm9sbCBiYXIgdG8g
c2Nyb2xsKS4KLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBQ
bGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKICAgICAgICAgZ2MsCiAgICAgICAg
IGhvcnogPyBTQlBfVEhVTUJCVE5IT1JaIDogU0JQX1RIVU1CQlROVkVSVCwKICAgICAgICAgZ2V0
VGhlbWVTdGF0ZShzY3JvbGxiYXIsIFRodW1iUGFydCksCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9p
ZCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpwYWludFRodQogICAgICAgICByZWN0KTsKIAog
ICAgIC8vIERyYXcgdGhlIGdyaXBwZXIgKHRoZSB0aHJlZSBsaXR0bGUgbGluZXMgb24gdGhlIHRo
dW1iKS4KLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBQbGF0
Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKICAgICAgICAgZ2MsCiAgICAgICAgIGhv
cnogPyBTQlBfR1JJUFBFUkhPUlogOiBTQlBfR1JJUFBFUlZFUlQsCiAgICAgICAgIGdldFRoZW1l
U3RhdGUoc2Nyb2xsYmFyLCBUaHVtYlBhcnQpLApAQCAtMjU2LDcgKzI1Niw3IEBAIEludFNpemUg
U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6YnV0dG8KICAgICAvLyB0ZXN0IG1vZGUgc28gdGhh
dCBzaG91bGQgYmUgZW5vdWdoIHRvIHJlc3VsdCBpbiByZXBlYXRhYmxlIHJlc3VsdHMsIGJ1dAog
ICAgIC8vIHByZXNlcnZpbmcgdGhpcyBoYWNrIGF2b2lkcyBoYXZpbmcgdG8gcmViYXNlbGluZSBw
aXhlbCB0ZXN0cy4KICAgICBjb25zdCBpbnQga0xheW91dFRlc3RNb2RlR2lydGggPSAxNzsKLSAg
ICBpbnQgZ2lydGggPSBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/IGtMYXlvdXRU
ZXN0TW9kZUdpcnRoIDogdGhpY2tuZXNzOworICAgIGludCBnaXJ0aCA9IFBsYXRmb3JtQnJpZGdl
OjpsYXlvdXRUZXN0TW9kZSgpID8ga0xheW91dFRlc3RNb2RlR2lydGggOiB0aGlja25lc3M7CiAK
ICAgICBpZiAoc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIp
IHsKICAgICAgICAgaW50IHdpZHRoID0gc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIGdpcnRoID8g
c2Nyb2xsYmFyLT53aWR0aCgpIC8gMiA6IGdpcnRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vY2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5jcHAJKHJl
dmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVk
VGltZXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDIzICsyNiwyMyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNoYXJlZFRpbWVyLmgiCiAKLSNpbmNsdWRlICJD
aHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYp
KCkpCiB7ICAgICAgICAgICAgICAgICAgIAotICAgIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRU
aW1lckZpcmVkRnVuY3Rpb24oZik7CisgICAgUGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVy
RmlyZWRGdW5jdGlvbihmKTsKIH0KIAogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJs
ZSBmaXJlVGltZSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlVGlt
ZShmaXJlVGltZSk7CisgICAgUGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZVRpbWUo
ZmlyZVRpbWUpOwogfQogCiB2b2lkIHN0b3BTaGFyZWRUaW1lcigpCiB7Ci0gICAgQ2hyb21pdW1C
cmlkZ2U6OnN0b3BTaGFyZWRUaW1lcigpOworICAgIFBsYXRmb3JtQnJpZGdlOjpzdG9wU2hhcmVk
VGltZXIoKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRp
b25DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDE4ICszMSwxOCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIg0KICNpbmNsdWRlICJTdWRk
ZW5UZXJtaW5hdGlvbi5oIg0KIA0KLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIg0KKyNpbmNs
dWRlICJQbGF0Zm9ybUJyaWRnZS5oIg0KIA0KIG5hbWVzcGFjZSBXZWJDb3JlIHsNCiANCiB2b2lk
IGRpc2FibGVTdWRkZW5UZXJtaW5hdGlvbigpDQogew0KLSAgICBDaHJvbWl1bUJyaWRnZTo6c3Vk
ZGVuVGVybWluYXRpb25DaGFuZ2VkKGZhbHNlKTsNCisgICAgUGxhdGZvcm1CcmlkZ2U6OnN1ZGRl
blRlcm1pbmF0aW9uQ2hhbmdlZChmYWxzZSk7DQogfQ0KIA0KIHZvaWQgZW5hYmxlU3VkZGVuVGVy
bWluYXRpb24oKQ0KIHsNCi0gICAgQ2hyb21pdW1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hh
bmdlZCh0cnVlKTsNCisgICAgUGxhdGZvcm1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdl
ZCh0cnVlKTsNCiB9DQogDQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQ0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1N5c3RlbVRpbWVDaHJvbWl1bS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU3lzdGVtVGltZUNocm9taXVt
LmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TeXN0ZW1UaW1lQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNSArMzEsMTUg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTeXN0ZW1UaW1lLmgiCiAKLSNpbmNs
dWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBHZXQg
dGhlIGN1cnJlbnQgdGltZSBpbiBzZWNvbmRzIHNpbmNlIGVwb2NoLgogZG91YmxlIGN1cnJlbnRU
aW1lKCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1lKCk7CisgICAg
cmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjdXJyZW50VGltZSgpOwogfQogCiBmbG9hdCB1c2VySWRs
ZVRpbWUoKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVE
YXRhT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJX
cml0YWJsZURhdGFPYmplY3QuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5j
bHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC04MCw3ICs4MCw3IEBAIGJvb2wgV3JpdGFibGVE
YXRhT2JqZWN0OjpzZXREYXRhKGNvbnN0IFMKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgY3Vy
cmVudGx5IHVuaW1wbGVtZW50ZWQgb24gdGhlIENocm9taXVtLXNpZGUuIFRoaXMgaXMKICAgICAg
ICAgLy8gIm9rYXkiIGZvciBub3cgc2luY2UgdGhlIG9yaWdpbmFsIGltcGxlbWVudGF0aW9uIGRp
ZG4ndCBzdXBwb3J0IGl0CiAgICAgICAgIC8vIGFueXdheS4gR29pbmcgZm9yd2FyZCwgdGhpcyBp
cyBzb21ldGhpbmcgd2UnbGwgbmVlZCB0byBmaXggdGhvdWdoLgotICAgICAgICBDaHJvbWl1bUJy
aWRnZTo6Y2xpcGJvYXJkV3JpdGVEYXRhKHR5cGUsIGRhdGEsICIiKTsKKyAgICAgICAgUGxhdGZv
cm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YSh0eXBlLCBkYXRhLCAiIik7CiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KICAgICBtX2RhdGFNYXAuc2V0KHR5cGUsIGRhdGEpOwpJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9u
dExvYWRpbmcubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcubW0JKHJldmlzaW9uIDc2MDg2KQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vQ3Jvc3NQcm9jZXNz
Rm9udExvYWRpbmcubW0JKHdvcmtpbmcgY29weSkKQEAgLTMwLDcgKzMwLDcgQEAKICNpbXBvcnQg
IkNyb3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLmgiCiAKICNpbXBvcnQgIi4uL2dyYXBoaWNzL2NvY29h
L0ZvbnRQbGF0Zm9ybURhdGEuaCIKLSNpbXBvcnQgIkNocm9taXVtQnJpZGdlLmgiCisjaW1wb3J0
ICJQbGF0Zm9ybUJyaWRnZS5oIgogI2ltcG9ydCA8QXBwS2l0L05TRm9udC5oPgogI2ltcG9ydCA8
d3RmL0hhc2hNYXAuaD4KIApAQCAtODcsNyArODcsNyBAQCBQYXNzUmVmUHRyPE1lbW9yeUFjdGl2
YXRlZEZvbnQ+IGxvYWRGb250CiB7CiAgICAgQVRTRm9udENvbnRhaW5lclJlZiBjb250YWluZXI7
CiAgICAgLy8gU2VuZCBjcm9zcy1wcm9jZXNzIHJlcXVlc3QgdG8gbG9hZCBmb250LgotICAgIGlm
ICghQ2hyb21pdW1CcmlkZ2U6OmxvYWRGb250KG5zRm9udCwgJmNvbnRhaW5lcikpCisgICAgaWYg
KCFQbGF0Zm9ybUJyaWRnZTo6bG9hZEZvbnQobnNGb250LCAmY29udGFpbmVyKSkKICAgICAgICAg
cmV0dXJuIDA7CiAgICAgCiAgICAgQVRTRm9udENvbnRhaW5lclJlZiBzcmNGb250Q29udGFpbmVy
UmVmID0gZm9udENvbnRhaW5lclJlZkZyb21OU0ZvbnQobnNGb250KTsKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250Q2FjaGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlQ2hyb21pdW1XaW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJGb250Q2FjaGUuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAj
aW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnRVdGlsc0Nocm9taXVtV2luLmgiCiAjaW5j
bHVkZSAiSGFzaE1hcC5oIgogI2luY2x1ZGUgIkhhc2hTZXQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUJyaWRnZS5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSA8dW5pY29k
ZS91bmlzZXQuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC0yODgsNyAr
Mjg4LDcgQEAgc3RhdGljIGJvb2wgZm9udENvbnRhaW5zQ2hhcmFjdGVyKGNvbnN0IAogICAgIEhE
QyBoZGMgPSBHZXREQygwKTsKICAgICBIR0RJT0JKIG9sZEZvbnQgPSBzdGF0aWNfY2FzdDxIRk9O
VD4oU2VsZWN0T2JqZWN0KGhkYywgaGZvbnQpKTsKICAgICBpbnQgY291bnQgPSBHZXRGb250VW5p
Y29kZVJhbmdlcyhoZGMsIDApOwotICAgIGlmIChjb3VudCA9PSAwICYmIENocm9taXVtQnJpZGdl
OjplbnN1cmVGb250TG9hZGVkKGhmb250KSkKKyAgICBpZiAoY291bnQgPT0gMCAmJiBQbGF0Zm9y
bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChoZm9udCkpCiAgICAgICAgIGNvdW50ID0gR2V0Rm9u
dFVuaWNvZGVSYW5nZXMoaGRjLCAwKTsKICAgICBpZiAoY291bnQgPT0gMCkgewogICAgICAgICBM
T0dfRVJST1IoIlVuYWJsZSB0byBnZXQgdGhlIGZvbnQgdW5pY29kZSByYW5nZSBhZnRlciBzZWNv
bmQgYXR0ZW1wdCIpOwpAQCAtMzYyLDcgKzM2Miw3IEBAIHN0YXRpYyB2b2lkIEZpbGxMb2dGb250
KGNvbnN0IEZvbnREZXNjcmkKICAgICB3aW5mb250LT5sZlN0cmlrZU91dCA9IGZhbHNlOwogICAg
IHdpbmZvbnQtPmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKICAgICB3aW5mb250LT5sZk91
dFByZWNpc2lvbiA9IE9VVF9UVF9PTkxZX1BSRUNJUzsKLSAgICB3aW5mb250LT5sZlF1YWxpdHkg
PSBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/IE5PTkFOVElBTElBU0VEX1FVQUxJ
VFkgOiBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIncyBkZXNrdG9wIHNldHRpbmdzLgor
ICAgIHdpbmZvbnQtPmxmUXVhbGl0eSA9IFBsYXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgp
ID8gTk9OQU5USUFMSUFTRURfUVVBTElUWSA6IERFRkFVTFRfUVVBTElUWTsgLy8gSG9ub3IgdXNl
cidzIGRlc2t0b3Agc2V0dGluZ3MuCiAgICAgd2luZm9udC0+bGZQaXRjaEFuZEZhbWlseSA9IERF
RkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRTsKICAgICB3aW5mb250LT5sZkl0YWxpYyA9IGZvbnRE
ZXNjcmlwdGlvbi5pdGFsaWMoKTsKICAgICB3aW5mb250LT5sZldlaWdodCA9IHRvR0RJRm9udFdl
aWdodChmb250RGVzY3JpcHRpb24ud2VpZ2h0KCkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUxpbnV4
LmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDEyICsz
MSwxMiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogCi0j
aW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAi
Rm9udERlc2NyaXB0aW9uLmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBs
YXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKIAogI2luY2x1ZGUg
IlNrUGFpbnQuaCIKQEAgLTU3LDcgKzU3LDcgQEAgY29uc3QgU2ltcGxlRm9udERhdGEqIEZvbnRD
YWNoZTo6Z2V0Rm9udAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW5ndGgpCiB7
Ci0gICAgU3RyaW5nIGZhbWlseSA9IENocm9taXVtQnJpZGdlOjpnZXRGb250RmFtaWx5Rm9yQ2hh
cmFjdGVycyhjaGFyYWN0ZXJzLCBsZW5ndGgpOworICAgIFN0cmluZyBmYW1pbHkgPSBQbGF0Zm9y
bUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbGVuZ3RoKTsK
ICAgICBpZiAoZmFtaWx5LmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21p
dW0vRm9udENocm9taXVtV2luLmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMiwxMCArMzIsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGb250LmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkZvbnRG
YWxsYmFja0xpc3QuaCIKICNpbmNsdWRlICJHbHlwaEJ1ZmZlci5oIgogI2luY2x1ZGUgIk5vdElt
cGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNpbmNsdWRl
ICJTa2lhRm9udFdpbi5oIgpAQCAtNDI0LDcgKzQyNCw3IEBAIHZvaWQgRm9udDo6ZHJhd0dseXBo
cyhHcmFwaGljc0NvbnRleHQqIGcKICAgICAgICAgICAgIHN1Y2Nlc3MgPSBwYWludGVyLmRyYXdH
bHlwaHMoY3VyTGVuLCAmZ2x5cGhzWzBdLCAmYWR2YW5jZXNbMF0sIGN1ckFkdmFuY2UpOwogICAg
ICAgICAgICAgaWYgKCFzdWNjZXNzICYmIGV4ZWN1dGlvbnMgPT0gMCkgewogICAgICAgICAgICAg
ICAgIC8vIEFzayB0aGUgYnJvd3NlciB0byBsb2FkIHRoZSBmb250IGZvciB1cyBhbmQgcmV0cnku
Ci0gICAgICAgICAgICAgICAgQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoZm9udC0+
cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSk7CisgICAgICAgICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6
OmVuc3VyZUZvbnRMb2FkZWQoZm9udC0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSk7CiAgICAgICAg
ICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9y
bURhdGFDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNocm9taXVtV2luLmNwcAkocmV2
aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw3
ICszNiw3IEBACiAjaW5jbHVkZSA8b2JqaWRsLmg+CiAjaW5jbHVkZSA8bWxhbmcuaD4KIAotI2lu
Y2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNp
bmNsdWRlICJTa2lhRm9udFdpbi5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMzYsNyAr
MTM2LDcgQEAgU0NSSVBUX0ZPTlRQUk9QRVJUSUVTKiBGb250UGxhdGZvcm1EYXRhOgogICAgICAg
ICAgICAgSFJFU1VMVCBociA9IFNjcmlwdEdldEZvbnRQcm9wZXJ0aWVzKGRjLCBzY3JpcHRDYWNo
ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1f
c2NyaXB0Rm9udFByb3BlcnRpZXMpOwogICAgICAgICAgICAgaWYgKFNfT0sgIT0gaHIpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoaGZvbnQo
KSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2Fk
ZWQoaGZvbnQoKSkpIHsKICAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBncmFj
ZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNhbGwgYWxzbyBmYWlscy4KICAgICAgICAgICAgICAg
ICAgICAgaHIgPSBTY3JpcHRHZXRGb250UHJvcGVydGllcyhkYywgc2NyaXB0Q2FjaGUoKSwKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdEZv
bnRQcm9wZXJ0aWVzKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNw
cAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw5
ICszMSw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0
YS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJIYXJmYnV6elNr
aWEuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJp
ZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKIAogI2luY2x1ZGUgIlNrUGFpbnQu
aCIKQEAgLTIyOSw3ICsyMjksNyBAQCB2b2lkIEZvbnRQbGF0Zm9ybURhdGE6OnF1ZXJ5U3lzdGVt
Rm9yUmVuCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDaHJvbWl1bUJyaWRnZTo6Z2V0
UmVuZGVyU3R5bGVGb3JTdHJpa2UobV9mYW1pbHkuZGF0YSgpLCAoKChpbnQpbV90ZXh0U2l6ZSkg
PDwgMikgfCAobV90eXBlZmFjZS0+c3R5bGUoKSAmIDMpLCAmbV9zdHlsZSk7CisgICAgUGxhdGZv
cm1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKG1fZmFtaWx5LmRhdGEoKSwgKCgoaW50
KW1fdGV4dFNpemUpIDw8IDIpIHwgKG1fdHlwZWZhY2UtPnN0eWxlKCkgJiAzKSwgJm1fc3R5bGUp
OwogfQogCiB9ICAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0v
R2x5cGhQYWdlVHJlZU5vZGVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vR2x5cGhQYWdlVHJlZU5vZGVD
aHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDkgKzMyLDkgQEAKICNpbmNsdWRl
IDx3aW5kb3dzLmg+CiAjaW5jbHVkZSA8dmVjdG9yPgogCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiR2x5cGhQYWdlVHJlZU5vZGUuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgi
CiAjaW5jbHVkZSAiVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5oIgogI2luY2x1ZGUgIldpbmRvd3NW
ZXJzaW9uLmgiCkBAIC04MCw3ICs4MCw3IEBAIHN0YXRpYyBib29sIGZpbGxCTVBHbHlwaHModW5z
aWduZWQgb2Zmc2UKICAgICAgICAgUmVsZWFzZURDKDAsIGRjKTsKIAogICAgICAgICBpZiAocmVj
dXJzZSkgewotICAgICAgICAgICAgaWYgKENocm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVk
KGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgpKSkKKyAgICAgICAgICAgIGlmIChQbGF0
Zm9ybUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZv
bnQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZpbGxCTVBHbHlwaHMob2Zmc2V0LCBsZW5n
dGgsIGJ1ZmZlciwgcGFnZSwgZm9udERhdGEsIGZhbHNlKTsKICAgICAgICAgICAgIGVsc2Ugewog
ICAgICAgICAgICAgICAgIGZpbGxFbXB0eUdseXBocyhwYWdlKTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3
ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKIAotI2lu
Y2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0
IGNoYXIgKm5hbWUpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1J
bWFnZVJlc291cmNlKG5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRm
b3JtSW1hZ2VSZXNvdXJjZShuYW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VDaHJvbWl1
bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
aHJvbWl1bS9JbWFnZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMubW0JKHdv
cmtpbmcgY29weSkKQEAgLTMzLDE0ICszMywxNCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkJpdG1hcEltYWdlLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIkltYWdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCiBQYXNzUmVmUHRyPEltYWdlPiBJbWFnZTo6bG9hZFBsYXRmb3JtUmVzb3Vy
Y2UoY29uc3QgY2hhciogbmFtZSkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmxvYWRQ
bGF0Zm9ybUltYWdlUmVzb3VyY2UobmFtZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjps
b2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKG5hbWUpOwogfQogCiAvLyBGSVhNRTogVGhlc2UgYXJl
IHRlbXBvcmFyeSBzdHVicywgd2UgbmVlZCByZWFsIGltcGxlbWVudGF0aW9ucyB3aGljaApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERh
dGFDaHJvbWl1bVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2hyb21pdW0vU2ltcGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9u
IDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vU2lt
cGxlRm9udERhdGFDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwx
MSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAK
LSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgogI2lu
Y2x1ZGUgIkZvbnQuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKLSNpbmNsdWRlICJGbG9hdFJl
Y3QuaCIKICNpbmNsdWRlICJGb250RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJy
aWRnZS5oIgogI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CiAKICNpbmNsdWRlIDx1bmljb2Rl
L3VjaGFyLmg+CkBAIC03MCw3ICs3MCw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OnBsYXRmb3Jt
SW5pdCgpCiAKICAgICBURVhUTUVUUklDIHRleHRNZXRyaWMgPSB7MH07CiAgICAgaWYgKCFHZXRU
ZXh0TWV0cmljcyhkYywgJnRleHRNZXRyaWMpKSB7Ci0gICAgICAgIGlmIChDaHJvbWl1bUJyaWRn
ZTo6ZW5zdXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgeworICAgICAgICBp
ZiAoUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQobV9wbGF0Zm9ybURhdGEuaGZvbnQo
KSkpIHsKICAgICAgICAgICAgIC8vIFJldHJ5IEdldFRleHRNZXRyaWNzLgogICAgICAgICAgICAg
Ly8gRklYTUU6IEhhbmRsZSBncmFjZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNhbGwgYWxzbyBm
YWlscy4KICAgICAgICAgICAgIC8vIFNlZSBodHRwOi8vY3JidWcuY29tLzY0MDEuCkBAIC0xNTks
NyArMTU5LDcgQEAgdm9pZCBTaW1wbGVGb250RGF0YTo6ZGV0ZXJtaW5lUGl0Y2goKQogICAgIC8v
IGlzICpub3QqIGZpeGVkIHBpdGNoLiAgVW5iZWxpZXZhYmxlIGJ1dCB0cnVlLgogICAgIFRFWFRN
RVRSSUMgdGV4dE1ldHJpYyA9IHswfTsKICAgICBpZiAoIUdldFRleHRNZXRyaWNzKGRjLCAmdGV4
dE1ldHJpYykpIHsKLSAgICAgICAgaWYgKENocm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVk
KG1fcGxhdGZvcm1EYXRhLmhmb250KCkpKSB7CisgICAgICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6
ZW5zdXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgewogICAgICAgICAgICAg
Ly8gUmV0cnkgR2V0VGV4dE1ldHJpY3MuCiAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIGdy
YWNlZnVsbHkgdGhlIGVycm9yIGlmIHRoaXMgY2FsbCBhbHNvIGZhaWxzLgogICAgICAgICAgICAg
Ly8gU2VlIGh0dHA6Ly9jcmJ1Zy5jb20vNjQwMS4KQEAgLTE5MCw3ICsxOTAsNyBAQCBmbG9hdCBT
aW1wbGVGb250RGF0YTo6cGxhdGZvcm1XaWR0aEZvckdsCiAgICAgaW50IHdpZHRoID0gMDsKICAg
ICBpZiAoIUdldENoYXJXaWR0aEkoZGMsIGdseXBoLCAxLCAwLCAmd2lkdGgpKSB7CiAgICAgICAg
IC8vIEFzayB0aGUgYnJvd3NlciB0byBwcmVsb2FkIHRoZSBmb250IGFuZCByZXRyeS4KLSAgICAg
ICAgaWYgKENocm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKG1fcGxhdGZvcm1EYXRhLmhm
b250KCkpKSB7CisgICAgICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZCht
X3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBn
cmFjZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNhbGwgYWxzbyBmYWlscy4KICAgICAgICAgICAg
IC8vIFNlZSBodHRwOi8vY3JidWcuY29tLzY0MDEuCiAgICAgICAgICAgICBpZiAoIUdldENoYXJX
aWR0aEkoZGMsIGdseXBoLCAxLCAwLCAmd2lkdGgpKQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2Ny
aWJlSGVscGVyVGV4dFJ1bi5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxLDggKzMxLDggQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJVbmlzY3JpYmVIZWxwZXJUZXh0UnVuLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRn
ZS5oIgogI2luY2x1ZGUgIkZvbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKQEAgLTc5LDcg
Kzc5LDcgQEAgdm9pZCBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuOjp0cnlUb1ByZWxvYQogICAgIC8v
IEFzayB0aGUgYnJvd3NlciB0byBnZXQgdGhlIGZvbnQgbWV0cmljcyBmb3IgdGhpcyBmb250Lgog
ICAgIC8vIFRoYXQgd2lsbCBwcmVsb2FkIHRoZSBmb250IGFuZCBpdCBzaG91bGQgbm93IGJlIGFj
Y2Vzc2libGUKICAgICAvLyBmcm9tIHRoZSByZW5kZXJlci4KLSAgICBDaHJvbWl1bUJyaWRnZTo6
ZW5zdXJlRm9udExvYWRlZChmb250KTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJlRm9udExv
YWRlZChmb250KTsKIH0KIAogYm9vbCBVbmlzY3JpYmVIZWxwZXJUZXh0UnVuOjpuZXh0V2luRm9u
dERhdGEoCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRD
dXN0b21QbGF0Zm9ybURhdGEuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5jcHAJKHJldmlzaW9uIDc2
MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9t
UGxhdGZvcm1EYXRhLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsOCArMzUsOCBAQAogCiAjaWYg
T1MoV0lORE9XUykKICNpbmNsdWRlICJCYXNlNjQuaCIKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRn
ZS5oIgogI2luY2x1ZGUgIk9wZW5UeXBlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1C
cmlkZ2UuaCIKICNlbGlmIE9TKExJTlVYKSB8fCBPUyhGUkVFQlNEKSB8fCBQTEFURk9STShCUkVX
TVApCiAjaW5jbHVkZSAiU2tTdHJlYW0uaCIKICNlbmRpZgpAQCAtOTEsNyArOTEsNyBAQCBGb250
UGxhdGZvcm1EYXRhIEZvbnRDdXN0b21QbGF0Zm9ybURhdGE6CiAgICAgbG9nRm9udC5sZlN0cmlr
ZU91dCA9IGZhbHNlOwogICAgIGxvZ0ZvbnQubGZDaGFyU2V0ID0gREVGQVVMVF9DSEFSU0VUOwog
ICAgIGxvZ0ZvbnQubGZPdXRQcmVjaXNpb24gPSBPVVRfVFRfT05MWV9QUkVDSVM7Ci0gICAgbG9n
Rm9udC5sZlF1YWxpdHkgPSBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/CisgICAg
bG9nRm9udC5sZlF1YWxpdHkgPSBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/CiAg
ICAgICAgICAgICAgICAgICAgICAgICBOT05BTlRJQUxJQVNFRF9RVUFMSVRZIDoKICAgICAgICAg
ICAgICAgICAgICAgICAgIERFRkFVTFRfUVVBTElUWTsgLy8gSG9ub3IgdXNlcidzIGRlc2t0b3Ag
c2V0dGluZ3MuCiAgICAgbG9nRm9udC5sZlBpdGNoQW5kRmFtaWx5ID0gREVGQVVMVF9QSVRDSCB8
IEZGX0RPTlRDQVJFOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJv
bWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29raWVKYXJDaHJvbWl1bS5jcHAJKHJldmlzaW9u
IDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbmV0d29yay9jaHJvbWl1bS9Db29r
aWVKYXJDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDM5ICszMiwzOSBAQAogI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgogCiAjaW5jbHVkZSAiQ29va2llLmgiCi0jaW5jbHVkZSAiQ2hy
b21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
QnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBzZXRDb29raWVzKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewot
ICAgIENocm9taXVtQnJpZGdlOjpzZXRDb29raWVzKGRvY3VtZW50LCB1cmwsIHZhbHVlKTsKKyAg
ICBQbGF0Zm9ybUJyaWRnZTo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CiB9CiAK
IFN0cmluZyBjb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y29va2llcyhkb2N1bWVudCwgdXJsKTsK
KyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CiB9CiAK
IFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNv
b2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOworICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoZG9jdW1lbnQsIHVy
bCk7CiB9CiAKIGJvb2wgY29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQog
ewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOwor
ICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6Y29va2llc0VuYWJsZWQoZG9jdW1lbnQpOwogfQog
CiBib29sIGdldFJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewotICAgIHJldHVybiBDaHJvbWl1
bUJyaWRnZTo6cmF3Q29va2llcyhkb2N1bWVudCwgdXJsLCByYXdDb29raWVzKTsKKyAgICByZXR1
cm4gUGxhdGZvcm1CcmlkZ2U6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7
CiB9CiAKIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7Ci0gICAgcmV0dXJuIENocm9t
aXVtQnJpZGdlOjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwgY29va2llTmFtZSk7CisgICAg
cmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpkZWxldGVDb29raWUoZG9jdW1lbnQsIHVybCwgY29va2ll
TmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vRE5TQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hy
b21pdW0vRE5TQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxNCArMjYsMTQgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJETlMuaCIKIAotI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJSZXNv
dXJjZUhhbmRsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgcHJlZmV0Y2hETlMo
Y29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6cHJlZmV0Y2hE
TlMoaG9zdG5hbWUpOworICAgIFBsYXRmb3JtQnJpZGdlOjpwcmVmZXRjaEROUyhob3N0bmFtZSk7
CiB9CiAKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OnByZXBhcmVGb3JVUkwoY29uc3QgS1VSTCYgdXJs
KQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1CcmlkZ2UuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZS5oCShy
ZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtQnJp
ZGdlLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgY2xhc3MgV2lkZ2V0OwogCiAv
LyBBbiBpbnRlcmZhY2UgdG8gdGhlIGVtYmVkZGluZyBsYXllciwgd2hpY2ggaGFzIHRoZSBhYmls
aXR5IHRvIGFuc3dlcgogLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0gYW5kIHNvIG9uLi4u
Ci0vLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBDaHJvbWl1bUJyaWRnZSBhbmQgdGhlIHR3byBh
cmUgbGlrZWx5IHRvIGNvbnZlcmdlCisvLyBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byBjaHJvbWl1
bS9QbGF0Zm9ybUJyaWRnZSBhbmQgdGhlIHR3byBhcmUgbGlrZWx5IHRvIGNvbnZlcmdlCiAvLyBp
biB0aGUgZnV0dXJlLgogY2xhc3MgUGxhdGZvcm1CcmlkZ2UgewogcHVibGljOgpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVt
L1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRn
ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiU1FMaXRlRGF0YWJh
c2UuaCIKICNpbmNsdWRlIDxzcWxpdGUzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5o
PgpAQCAtOTIsMTIgKzkyLDEyIEBAIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRW1wdHlE
YXRhYmEKIAogYm9vbCBTUUxpdGVGaWxlU3lzdGVtOjpkZWxldGVEYXRhYmFzZUZpbGUoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSkKIHsKLSAgICByZXR1cm4gKENocm9taXVtQnJpZGdlOjpkYXRhYmFz
ZURlbGV0ZUZpbGUoZmlsZU5hbWUpID09IFNRTElURV9PSyk7CisgICAgcmV0dXJuIChQbGF0Zm9y
bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKSA9PSBTUUxJVEVfT0spOwogfQog
CiBsb25nIGxvbmcgU1FMaXRlRmlsZVN5c3RlbTo6Z2V0RGF0YWJhc2VGaWxlU2l6ZShjb25zdCBT
dHJpbmcmIGZpbGVOYW1lKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VH
ZXRGaWxlU2l6ZShmaWxlTmFtZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFz
ZUdldEZpbGVTaXplKGZpbGVOYW1lKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1D
aHJvbWl1bVBvc2l4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtUG9zaXguY3BwCShyZXZpc2lvbiA3
NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxl
U3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAK
ICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTUUxpdGVGaWxlU3lzdGVtLmgiCiAKLSNp
bmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAj
aW5jbHVkZSA8c3FsaXRlMy5oPgogCiAjaW5jbHVkZSA8ZXJybm8uaD4KQEAgLTk5NiwxMCArOTk2
LDEwIEBAIHN0YXRpYyBpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiB2ZnMKICAgICB9CiAK
ICAgICBpZiAoZmQgPCAwKSB7Ci0gICAgICAgIGZkID0gQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNl
T3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRGbGFncyk7CisgICAgICAgIGZkID0gUGxhdGZvcm1C
cmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRGbGFncyk7CiAgICAgICAg
IGlmICgoZmQgPCAwKSAmJiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKSkg
ewogICAgICAgICAgICAgaW50IG5ld0ZsYWdzID0gKGRlc2lyZWRGbGFncyAmIH4oU1FMSVRFX09Q
RU5fUkVBRFdSSVRFIHwgU1FMSVRFX09QRU5fQ1JFQVRFKSkgfCBTUUxJVEVfT1BFTl9SRUFET05M
WTsKLSAgICAgICAgICAgIGZkID0gQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoZmls
ZU5hbWUsIG5ld0ZsYWdzKTsKKyAgICAgICAgICAgIGZkID0gUGxhdGZvcm1CcmlkZ2U6OmRhdGFi
YXNlT3BlbkZpbGUoZmlsZU5hbWUsIG5ld0ZsYWdzKTsKICAgICAgICAgfQogICAgIH0KICAgICBp
ZiAoZmQgPCAwKSB7CkBAIC0xMDMxLDcgKzEwMzEsNyBAQCBzdGF0aWMgaW50IGNocm9taXVtT3Bl
bihzcWxpdGUzX3ZmcyogdmZzCiAvLyAgICAgICAgICAgc2hvdWxkIGJlIHN5bmNoZWQgYWZ0ZXIg
dGhlIGZpbGUgaXMgZGVsZXRlZC4KIHN0YXRpYyBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192
ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IHN5bmNEaXIpCiB7Ci0gICAgcmV0dXJuIENo
cm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUsIHN5bmNEaXIpOworICAg
IHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lLCBzeW5j
RGlyKTsKIH0KIAogLy8gQ2hlY2sgdGhlIGV4aXN0YW5jZSBhbmQgc3RhdHVzIG9mIHRoZSBnaXZl
biBmaWxlLgpAQCAtMTA0Miw3ICsxMDQyLDcgQEAgc3RhdGljIGludCBjaHJvbWl1bURlbGV0ZShz
cWxpdGUzX3ZmcyosIAogLy8gcmVzIC0gdGhlIHJlc3VsdC4KIHN0YXRpYyBpbnQgY2hyb21pdW1B
Y2Nlc3Moc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50IGZsYWcsIGludCog
cmVzKQogewotICAgIGludCBhdHRyID0gc3RhdGljX2Nhc3Q8aW50PihDaHJvbWl1bUJyaWRnZTo6
ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhmaWxlTmFtZSkpOworICAgIGludCBhdHRyID0gc3Rh
dGljX2Nhc3Q8aW50PihQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhm
aWxlTmFtZSkpOwogICAgIGlmIChhdHRyIDwgMCkgewogICAgICAgICAqcmVzID0gMDsKICAgICAg
ICAgcmV0dXJuIFNRTElURV9PSzsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9j
aHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21p
dW1XaW4uY3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3Nx
bC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1FMaXRl
RmlsZVN5c3RlbS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgPHNxbGl0ZTMuaD4KICNpbmNsdWRlIDx3aW5kb3dz
Lmg+CiAKQEAgLTU1LDcgKzU1LDcgQEAgbmFtZXNwYWNlIHsKIGludCBjaHJvbWl1bU9wZW4oc3Fs
aXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwKICAgICAgICAgICAgICAgICAgc3FsaXRl
M19maWxlKiBpZCwgaW50IGRlc2lyZWRGbGFncywgaW50KiB1c2VkRmxhZ3MpCiB7Ci0gICAgSEFO
RExFIGggPSBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmlsZShmaWxlTmFtZSwgZGVzaXJl
ZEZsYWdzKTsKKyAgICBIQU5ETEUgaCA9IFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxl
KGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOwogICAgIGlmIChoID09IElOVkFMSURfSEFORExFX1ZB
TFVFKSB7CiAgICAgICAgIGlmIChkZXNpcmVkRmxhZ3MgJiBTUUxJVEVfT1BFTl9SRUFEV1JJVEUp
IHsKICAgICAgICAgICAgIGludCBuZXdGbGFncyA9IChkZXNpcmVkRmxhZ3MgfCBTUUxJVEVfT1BF
Tl9SRUFET05MWSkgJiB+U1FMSVRFX09QRU5fUkVBRFdSSVRFOwpAQCAtODIsNyArODIsNyBAQCBp
bnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhCiAvLyAgICAgICAgICAgc2hv
dWxkIGJlIHN5bmNoZWQgYWZ0ZXIgdGhlIGZpbGUgaXMgZGVsZXRlZC4KIGludCBjaHJvbWl1bURl
bGV0ZShzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQpCiB7Ci0gICAgcmV0
dXJuIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoZmlsZU5hbWUpOworICAgIHJl
dHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKTsKIH0KIAog
Ly8gQ2hlY2sgdGhlIGV4aXN0YW5jZSBhbmQgc3RhdHVzIG9mIHRoZSBnaXZlbiBmaWxlLgpAQCAt
OTMsNyArOTMsNyBAQCBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192ZnMqLCBjb25zdCBjCiAv
LyByZXMgLSB0aGUgcmVzdWx0LgogaW50IGNocm9taXVtQWNjZXNzKHNxbGl0ZTNfdmZzKiwgY29u
c3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJlcykKIHsKLSAgICBEV09SRCBhdHRy
ID0gQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpOwor
ICAgIERXT1JEIGF0dHIgPSBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRl
cyhmaWxlTmFtZSk7CiAgICAgc3dpdGNoIChmbGFnKSB7CiAgICAgY2FzZSBTUUxJVEVfQUNDRVNT
X1JFQUQ6CiAgICAgY2FzZSBTUUxJVEVfQUNDRVNTX0VYSVNUUzoKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsdWdpbnMvY2hyb21pdW0vUGx1Z2luRGF0YUNocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2Nocm9taXVtL1BsdWdpbkRhdGFDaHJvbWl1bS5jcHAJ
KHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYkNvcmUvcGx1Z2lucy9jaHJvbWl1bS9QbHVn
aW5EYXRhQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5j
bHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUGx1Z2luRGF0YUNocm9taXVtLmgiCiAKLSNpbmNs
dWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtNTAsNyArNTAsNyBAQCBwdWJsaWM6CiAgICAgY29uc3Qg
VmVjdG9yPFBsdWdpbkluZm8+JiBwbHVnaW5zKCkKICAgICB7CiAgICAgICAgIGlmICghbV9sb2Fk
ZWQpIHsKLSAgICAgICAgICAgIENocm9taXVtQnJpZGdlOjpwbHVnaW5zKG1fcmVmcmVzaCwgJm1f
cGx1Z2lucyk7CisgICAgICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lucyhtX3JlZnJlc2gs
ICZtX3BsdWdpbnMpOwogICAgICAgICAgICAgbV9sb2FkZWQgPSB0cnVlOwogICAgICAgICAgICAg
bV9yZWZyZXNoID0gZmFsc2U7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCShyZXZpc2lvbiA3NjA4NikK
KysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0yMCw4ICsyMCw4IEBACiAKICNpbXBvcnQgImNvbmZpZy5oIgogI2lt
cG9ydCAiUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5oIgotI2ltcG9ydCAiQ2hyb21pdW1CcmlkZ2Uu
aCIKICNpbXBvcnQgIlBhaW50SW5mby5oIgorI2ltcG9ydCAiUGxhdGZvcm1CcmlkZ2UuaCIKICNp
bXBvcnQgIlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIgogI2ltcG9ydCAiVXNlckFnZW50
U3R5bGVTaGVldHMuaCIKICNpbXBvcnQgPENhcmJvbi9DYXJib24uaD4KQEAgLTcxLDcgKzcxLDcg
QEAgUGFzc1JlZlB0cjxSZW5kZXJUaGVtZT4gUmVuZGVyVGhlbWVDaHJvbQogCiBib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1NYWM6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9yKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCk7CisgICAgcmV0dXJu
IFBsYXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpOwogfQogCiBOU1ZpZXcqIFJlbmRlclRo
ZW1lQ2hyb21pdW1NYWM6OmRvY3VtZW50Vmlld0ZvcihSZW5kZXJPYmplY3QqKSBjb25zdApJbmRl
eDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1
bVNraWEuY3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZW5kZXJUaGVtZUNocm9taXVtU2tp
YS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtl
eXdvcmRzLmgiCiAjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKICNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKQEAgLTMzLDYgKzMyLDcgQEAKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUg
Ik1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAj
aW5jbHVkZSAiUmVuZGVyQm94LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVkaWFDb250cm9sc0Nocm9t
aXVtLmgiCkBAIC0xODUsNyArMTg1LDcgQEAgZG91YmxlIFJlbmRlclRoZW1lQ2hyb21pdW1Ta2lh
OjpjYXJldEJsaQogewogICAgIC8vIERpc2FibGUgdGhlIGJsaW5raW5nIGNhcmV0IGluIGxheW91
dCB0ZXN0IG1vZGUsIGFzIGl0IGludHJvZHVjZXMKICAgICAvLyBhIHJhY2UgY29uZGl0aW9uIGZv
ciB0aGUgcGl4ZWwgdGVzdHMuIGh0dHA6Ly9iLzExOTg0NDAKLSAgICBpZiAoQ2hyb21pdW1Ccmlk
Z2U6OmxheW91dFRlc3RNb2RlKCkpCisgICAgaWYgKFBsYXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0
TW9kZSgpKQogICAgICAgICByZXR1cm4gMDsKIAogICAgIHJldHVybiBjYXJldEJsaW5rSW50ZXJ2
YWxJbnRlcm5hbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1l
Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJUaGVtZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlIDx2c3N5bTMyLmg+CiAKICNpbmNsdWRlICJDU1NW
YWx1ZUtleXdvcmRzLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJD
dXJyZW50VGltZS5oIgogI2luY2x1ZGUgIkZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkZvbnRV
dGlsc0Nocm9taXVtV2luLmgiCkBAIC0zOSw2ICszOCw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9sRWxlbWVudHMuaCIKICNpbmNsdWRlICJQYWludElu
Zm8uaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlJlbmRlckJveC5o
IgogI2luY2x1ZGUgIlJlbmRlclByb2dyZXNzLmgiCiAjaW5jbHVkZSAiUmVuZGVyU2xpZGVyLmgi
CkBAIC0yMzgsNyArMjM4LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzdXBwb3J0
c0ZvYwogCiBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgaWYgKENocm9taXVtQnJpZGdlOjps
YXlvdXRUZXN0TW9kZSgpKQorICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUo
KSkKICAgICAgICAgcmV0dXJuIENvbG9yKDB4MDAsIDB4MDAsIDB4ZmYpOyAvLyBSb3lhbCBibHVl
LgogICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hUKTsKICAg
ICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwgR2V0QlZh
bHVlKGNvbG9yKSwgMHhmZik7CkBAIC0yNDYsNyArMjQ2LDcgQEAgQ29sb3IgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6cGxhdGZvcm1BYwogCiBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
bGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICBp
ZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCisgICAgaWYgKFBsYXRmb3JtQnJp
ZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQogICAgICAgICByZXR1cm4gQ29sb3IoMHg5OSwgMHg5OSwg
MHg5OSk7IC8vIE1lZGl1bSBncmF5LgogICAgIENPTE9SUkVGIGNvbG9yID0gR2V0U3lzQ29sb3Io
Q09MT1JfR1JBWVRFWFQpOwogICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29sb3IpLCBHZXRH
VmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpLCAweGZmKTsKQEAgLTI1NCw3ICsyNTQsNyBA
QCBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUluCiAKIENvbG9yIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9y
KCkgY29uc3QKIHsKLSAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCisg
ICAgaWYgKFBsYXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQogICAgICAgICByZXR1cm4g
Q29sb3IoMHhmZiwgMHhmZiwgMHhjYyk7IC8vIFBhbGUgeWVsbG93LgogICAgIENPTE9SUkVGIGNv
bG9yID0gR2V0U3lzQ29sb3IoQ09MT1JfSElHSExJR0hUVEVYVCk7CiAgICAgcmV0dXJuIENvbG9y
KEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDB4
ZmYpOwpAQCAtMzc1LDcgKzM3NSw3IEBAIHN0YXRpYyBpbnQgY3NzVmFsdWVJZFRvU3lzQ29sb3JJ
bmRleChpbnQKIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnN5c3RlbUNvbG9yKGludCBj
c3NWYWx1ZUlkKSBjb25zdAogewogICAgIGludCBzeXNDb2xvckluZGV4ID0gY3NzVmFsdWVJZFRv
U3lzQ29sb3JJbmRleChjc3NWYWx1ZUlkKTsKLSAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmxheW91
dFRlc3RNb2RlKCkgfHwgKHN5c0NvbG9ySW5kZXggPT0gLTEpKQorICAgIGlmIChQbGF0Zm9ybUJy
aWRnZTo6bGF5b3V0VGVzdE1vZGUoKSB8fCAoc3lzQ29sb3JJbmRleCA9PSAtMSkpCiAgICAgICAg
IHJldHVybiBSZW5kZXJUaGVtZTo6c3lzdGVtQ29sb3IoY3NzVmFsdWVJZCk7CiAKICAgICBDT0xP
UlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKHN5c0NvbG9ySW5kZXgpOwpAQCAtNDExLDcgKzQxMSw3
IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRCdXR0b24KICAgICBjb25zdCBU
aGVtZURhdGEmIHRoZW1lRGF0YSA9IGdldFRoZW1lRGF0YShvKTsKIAogICAgIFRoZW1lUGFpbnRl
ciBwYWludGVyKGkuY29udGV4dCwgcik7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50QnV0dG9u
KHBhaW50ZXIuY29udGV4dCgpLAorICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludEJ1dHRvbihwYWlu
dGVyLmNvbnRleHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRh
Lm1fcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fc3Rh
dGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX2NsYXNzaWNT
dGF0ZSwKQEAgLTQyOSw3ICs0MjksNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBh
aW50U2xpZGVyCiAgICAgY29uc3QgVGhlbWVEYXRhJiB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEo
byk7CiAKICAgICBUaGVtZVBhaW50ZXIgcGFpbnRlcihpLmNvbnRleHQsIHIpOwotICAgIENocm9t
aXVtQnJpZGdlOjpwYWludFRyYWNrYmFyKHBhaW50ZXIuY29udGV4dCgpLAorICAgIFBsYXRmb3Jt
QnJpZGdlOjpwYWludFRyYWNrYmFyKHBhaW50ZXIuY29udGV4dCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3BhcnQsCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgdGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlLApAQCAtNDQ0LDcgKzQ0NCw3IEBA
IGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRTbGlkZXIKIAogc3RhdGljIGludCBt
ZW51TGlzdEJ1dHRvbldpZHRoKCkKIHsKLSAgICBzdGF0aWMgaW50IHdpZHRoID0gQ2hyb21pdW1C
cmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPyBrU3RhbmRhcmRNZW51TGlzdEJ1dHRvbldpZHRoIDog
R2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOworICAgIHN0YXRpYyBpbnQgd2lkdGggPSBQ
bGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/IGtTdGFuZGFyZE1lbnVMaXN0QnV0dG9u
V2lkdGggOiBHZXRTeXN0ZW1NZXRyaWNzKFNNX0NYVlNDUk9MTCk7CiAgICAgcmV0dXJuIHdpZHRo
OwogfQogCkBAIC00OTIsNyArNDkyLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludE1lbnVMaQogCiAgICAgLy8gR2V0IHRoZSBjb3JyZWN0IHRoZW1lIGRhdGEgZm9yIGEgdGV4
dGZpZWxkIGFuZCBwYWludCB0aGUgbWVudS4KICAgICBUaGVtZVBhaW50ZXIgcGFpbnRlcihpLmNv
bnRleHQsIHJlY3QpOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludE1lbnVMaXN0KHBhaW50ZXIu
Y29udGV4dCgpLAorICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludE1lbnVMaXN0KHBhaW50ZXIuY29u
dGV4dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENQX0RST1BET1dOQlVU
VE9OLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZVN0YXRlKG8p
LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRldGVybWluZUNsYXNzaWNTdGF0
ZShvKSwKQEAgLTY1Nyw3ICs2NTcsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBh
aW50VGV4dEZpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgYm9vbCBkcmF3RWRnZXMpCiB7CiAgICAgLy8gRmFsbGJhY2sgdG8gd2hpdGUgaWYgdGhl
IHNwZWNpZmllZCBjb2xvciBvYmplY3QgaXMgaW52YWxpZC4KLSAgICAvLyAoTm90ZSBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRUZXh0RmllbGQgZHVwbGljYXRlcyB0aGlzIGNoZWNrKS4KKyAgICAvLyAo
Tm90ZSBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUZXh0RmllbGQgZHVwbGljYXRlcyB0aGlzIGNoZWNr
KS4KICAgICBDb2xvciBiYWNrZ3JvdW5kQ29sb3IoQ29sb3I6OndoaXRlKTsKICAgICBpZiAoby0+
c3R5bGUoKS0+dmlzaXRlZERlcGVuZGVudENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9y
KS5pc1ZhbGlkKCkpCiAgICAgICAgIGJhY2tncm91bmRDb2xvciA9IG8tPnN0eWxlKCktPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcik7CkBAIC02ODEsNyAr
NjgxLDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFRleHRGaQogICAgIHsK
ICAgICAgICAgY29uc3QgVGhlbWVEYXRhJiB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7CiAg
ICAgICAgIFRoZW1lUGFpbnRlciBwYWludGVyKGkuY29udGV4dCwgcik7Ci0gICAgICAgIENocm9t
aXVtQnJpZGdlOjpwYWludFRleHRGaWVsZChwYWludGVyLmNvbnRleHQoKSwKKyAgICAgICAgUGxh
dGZvcm1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKHBhaW50ZXIuY29udGV4dCgpLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fcGFydCwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3N0YXRlLAogICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRl
LApAQCAtNzEwLDcgKzcxMCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRJ
bm5lclMKICAgICBoYWxmLnNldEhlaWdodChyZWN0LmhlaWdodCgpIC8gMik7CiAgICAgY29uc3Qg
VGhlbWVEYXRhJiB1cFRoZW1lRGF0YSA9IGdldFRoZW1lRGF0YShvYmplY3QsIFNwaW5CdXR0b25V
cCk7CiAgICAgVGhlbWVQYWludGVyIHVwUGFpbnRlcihpbmZvLmNvbnRleHQsIGhhbGYpOwotICAg
IENocm9taXVtQnJpZGdlOjpwYWludFNwaW5CdXR0b24odXBQYWludGVyLmNvbnRleHQoKSwKKyAg
ICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKHVwUGFpbnRlci5jb250ZXh0KCksCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cFRoZW1lRGF0YS5tX3BhcnQsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cFRoZW1lRGF0YS5tX3N0YXRlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBUaGVtZURhdGEubV9jbGFzc2lj
U3RhdGUsCkBAIC03MTksNyArNzE5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludElubmVyUwogICAgIGhhbGYuc2V0WShyZWN0LnkoKSArIHJlY3QuaGVpZ2h0KCkgLyAyKTsK
ICAgICBjb25zdCBUaGVtZURhdGEmIGRvd25UaGVtZURhdGEgPSBnZXRUaGVtZURhdGEob2JqZWN0
LCBTcGluQnV0dG9uRG93bik7CiAgICAgVGhlbWVQYWludGVyIGRvd25QYWludGVyKGluZm8uY29u
dGV4dCwgaGFsZik7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbihkb3duUGFp
bnRlci5jb250ZXh0KCksCisgICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbihkb3du
UGFpbnRlci5jb250ZXh0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBk
b3duVGhlbWVEYXRhLm1fcGFydCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGRvd25UaGVtZURhdGEubV9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGRvd25UaGVtZURhdGEubV9jbGFzc2ljU3RhdGUsCkBAIC03NjAsNyArNzYwLDcgQEAgYm9v
bCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFByb2dyZQogICAgIEludFJlY3QgdmFsdWVS
ZWN0ID0gcmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSA/IGRldGVybWluYXRlUHJvZ3Jl
c3NWYWx1ZVJlY3RGb3IocmVuZGVyUHJvZ3Jlc3MsIHIpIDogSW50UmVjdCgwLCAwLCAwLCAwKTsK
ICAgICBkb3VibGUgYW5pbWF0ZWRTZWNvbmRzID0gcmVuZGVyUHJvZ3Jlc3MtPmFuaW1hdGlvblN0
YXJ0VGltZSgpID8gIFdURjo6Y3VycmVudFRpbWUoKSAtIHJlbmRlclByb2dyZXNzLT5hbmltYXRp
b25TdGFydFRpbWUoKSA6IDA7CiAgICAgVGhlbWVQYWludGVyIHBhaW50ZXIoaS5jb250ZXh0LCBy
KTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcihwYWludGVyLmNvbnRleHQo
KSwgciwgdmFsdWVSZWN0LCByZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpLCBhbmltYXRl
ZFNlY29uZHMpOworICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFByb2dyZXNzQmFyKHBhaW50ZXIu
Y29udGV4dCgpLCByLCB2YWx1ZVJlY3QsIHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCks
IGFuaW1hdGVkU2Vjb25kcyk7CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQkZhY3RvcnlC
YWNrZW5kSW50ZXJmYWNlLmNwcAkocmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViQ29yZS9z
dG9yYWdlL2Nocm9taXVtL0lEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNyArMjgsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIklE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRB
QkFTRSkKIApAQCAtMzYsMTIgKzM2LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogUGFzc1Jl
ZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZT4gSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZh
Y2U6OmNyZWF0ZSgpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjppZGJGYWN0b3J5KCk7
CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjppZGJGYWN0b3J5KCk7CiB9CiAKIElEQkZhY3Rv
cnlCYWNrZW5kSW50ZXJmYWNlOjp+SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UoKQogewotICAg
IENocm9taXVtQnJpZGdlOjppZGJTaHV0ZG93bigpOworICAgIFBsYXRmb3JtQnJpZGdlOjppZGJT
aHV0ZG93bigpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJLZXlQYXRoQmFja2VuZElt
cGwuY3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21p
dW0vSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsMTMgKzI4
LDEzIEBACiAKICNpZiBFTkFCTEUoSU5ERVhFRF9EQVRBQkFTRSkKIAotI2luY2x1ZGUgIkNocm9t
aXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNlIFdl
YkNvcmUgewogCiB2b2lkIElEQktleVBhdGhCYWNrZW5kSW1wbDo6Y3JlYXRlSURCS2V5c0Zyb21T
ZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZT4sIDA+JiB2YWx1ZXMsICBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxS
ZWZQdHI8SURCS2V5PiwgMD4mIGtleXMpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmNyZWF0ZUlE
QktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgodmFsdWVzLCBrZXlQYXRoLCBrZXlz
KTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVz
QW5kS2V5UGF0aCh2YWx1ZXMsIGtleVBhdGgsIGtleXMpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkocmV2aXNpb24gNzYwODYpCisr
KyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwz
ICsxLDEyNCBAQAorMjAxMS0wMS0xOCAgQWRhbSBLbGVpbiAgPGFkYW1rQGNocm9taXVtLm9yZz4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbY2hyb21p
dW1dIFJlbmFtZSBDaHJvbWl1bUJyaWRnZSB0byBQbGF0Zm9ybUJyaWRnZQorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTI0NzEKKworICAgICAgICAqIFdl
YktpdC5neXA6CisgICAgICAgICogc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwOgorICAgICAg
ICAqIHNyYy9QbGF0Zm9ybUJyaWRnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjp0b0Nocm9tZUNs
aWVudEltcGwpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJXaWRnZXRDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0Q29va2llSmFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpjYWNoZU1ldGFkYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVVUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2V0Q29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6Y29va2llcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1CcmlkZ2U6OnJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmRlbGV0ZUNvb2tpZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y29va2ll
c0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnByZWZldGNoRE5T
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpmaWxlRXhpc3RzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkZWxldGVGaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZVNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnJldmVhbEZvbGRlckluT1MpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1CcmlkZ2U6OmdldEZpbGVNb2RpZmljYXRpb25UaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpkaXJlY3RvcnlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6Om1ha2VBbGxEaXJlY3Rvcmllcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjppc0RpcmVjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
ZmlsZVBhdGhUb1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6b3BlbkZp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsb3NlRmlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2Vla0ZpbGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OnRydW5jYXRlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6cmVhZEZyb21GaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjp3cml0ZVRvRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZW5z
dXJlRm9udExvYWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Z2V0Rm9u
dEZhbWlseUZvckNoYXJhY3RlcnMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjpsb2FkRm9udCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJh
c2VPcGVuRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VE
ZWxldGVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZUdl
dEZpbGVBdHRyaWJ1dGVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkYXRh
YmFzZUdldEZpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjppZGJG
YWN0b3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjppZGJTaHV0ZG93bik6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZXJp
YWxpemVkVmFsdWVzQW5kS2V5UGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNp
b24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRnJvbUZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lvbkZv
ck1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwbHVnaW5zKToK
KyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJl
c291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1B
dWRpb1Jlc291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkZWNvZGVB
dWRpb0ZpbGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzYW5kYm94
RW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2V0U2hhcmVkVGlt
ZXJGaXJlZEZ1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzZXRT
aGFyZWRUaW1lckZpcmVUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpz
dG9wU2hhcmVkVGltZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRlY3Jl
bWVudFN0YXRzQ291bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aW5j
cmVtZW50U3RhdHNDb3VudGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpo
aXN0b2dyYW1DdXN0b21Db3VudHMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmN1cnJlbnRUaW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpw
YWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRNZW51
TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJB
cnJvdyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJU
aHVtYik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTcGluQnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFRleHRGaWVsZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUcmFja2Jhcik6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRQcm9ncmVzc0Jhcik6CisgICAgICAgIChX
ZWJDb3JlOjpXZWJUaGVtZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVGhlbWVTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQnJpZGdlOjpwYWludFRoZW1lUGFydCk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6dHJhY2VFdmVudEJlZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmlzTGlua1Zpc2l0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om5vdGlm
eUpTT3V0T2ZNZW1vcnkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om1lbW9y
eVVzYWdlTUIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmFjdHVhbE1lbW9y
eVVzYWdlTUIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRlcHRo
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNvbXBv
bmVudCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuSXNNb25vY2hy
b21lKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5SZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVSZWN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwb3B1cHNBbGxvd2VkKToKKyAgICAgICAg
KFdlYkNvcmU6OldvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKiBzcmMvUmVz
b3VyY2VIYW5kbGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVzb3VyY2VIYW5kbGU6OmNhY2hl
TWV0YWRhdGEpOgorICAgICAgICAqIHNyYy9XZWJGcmFtZUltcGwuY3BwOgorICAgICAgICAoV2Vi
S2l0OjpXZWJGcmFtZUltcGw6OldlYkZyYW1lSW1wbCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZy
YW1lSW1wbDo6fldlYkZyYW1lSW1wbCk6CisgICAgICAgICogc3JjL1dlYlZpZXdJbXBsLmNwcDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0FjdGl2ZSk6CisKIDIwMTEtMDEtMTggIFZpY3RvcmlhIEtpcnN0ICA8dnJrQGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9XZWJLaXQuZ3lwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vV2ViS2l0Lmd5cAkod29ya2luZyBjb3B5KQpAQCAtMzE1LDcgKzMxNSw2IEBACiAgICAg
ICAgICAgICAgICAgJ3NyYy9Cb3VuZE9iamVjdC5oJywKICAgICAgICAgICAgICAgICAnc3JjL0No
cm9tZUNsaWVudEltcGwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0Nocm9tZUNsaWVudElt
cGwuaCcsCi0gICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAnLAogICAgICAg
ICAgICAgICAgICdzcmMvQ2hyb21pdW1DdXJyZW50VGltZS5jcHAnLAogICAgICAgICAgICAgICAg
ICdzcmMvQ2hyb21pdW1UaHJlYWRpbmcuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL0NvbXBv
c2l0aW9uVW5kZXJsaW5lQnVpbGRlci5oJywKQEAgLTM4NCw2ICszODMsNyBAQAogICAgICAgICAg
ICAgICAgICdzcmMvTWVkaWFQbGF5ZXJQcml2YXRlQ2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9Ob3RpZmljYXRpb25QcmVzZW50ZXJJbXBsLmNwcCcsCisgICAgICAgICAgICAgICAgJ3Ny
Yy9QbGF0Zm9ybUJyaWRnZS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNz
YWdlUG9ydENoYW5uZWwuY3BwJywKICAgICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtTWVzc2Fn
ZVBvcnRDaGFubmVsLmgnLAogICAgICAgICAgICAgICAgICdzcmMvUmVzb3VyY2VIYW5kbGUuY3Bw
JywKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNoaW5nRW51bXMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Fzc2VydE1hdGNo
aW5nRW51bXMuY3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Fzc2VydE1hdGNoaW5nRW51bXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MCw3ICs4MCw3
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgogCiAjaWYgT1MoREFSV0lOKQot
I2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIK
ICNpbmNsdWRlICJtYWMvV2ViVGhlbWVFbmdpbmUuaCIKICNlbmRpZgogCkBAIC0zOTgsMTcgKzM5
OCwxNyBAQCBDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkdlb2xvY2F0CiBDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYkdlb2xvY2F0aW9uRXJyb3I6OkVycm9yUG9zaXRpb25V
bmF2YWlsYWJsZSwgR2VvbG9jYXRpb25FcnJvcjo6UG9zaXRpb25VbmF2YWlsYWJsZSk7CiAKICNp
ZiBPUyhEQVJXSU4pCi1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5l
OjpTdGF0ZURpc2FibGVkLCBDaHJvbWl1bUJyaWRnZTo6U3RhdGVEaXNhYmxlZCk7Ci1DT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTdGF0ZUluYWN0aXZlLCBDaHJv
bWl1bUJyaWRnZTo6U3RhdGVJbmFjdGl2ZSk7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVN
KFdlYlRoZW1lRW5naW5lOjpTdGF0ZUFjdGl2ZSwgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlQWN0aXZl
KTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlUHJl
c3NlZCwgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlUHJlc3NlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTdGF0ZURpc2FibGVkLCBQbGF0Zm9ybUJyaWRnZTo6
U3RhdGVEaXNhYmxlZCk7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5n
aW5lOjpTdGF0ZUluYWN0aXZlLCBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVJbmFjdGl2ZSk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTdGF0ZUFjdGl2ZSwgUGxh
dGZvcm1CcmlkZ2U6OlN0YXRlQWN0aXZlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViVGhlbWVFbmdpbmU6OlN0YXRlUHJlc3NlZCwgUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3Nl
ZCk7CiAKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNpemVS
ZWd1bGFyLCBDaHJvbWl1bUJyaWRnZTo6U2l6ZVJlZ3VsYXIpOwotQ09NUElMRV9BU1NFUlRfTUFU
Q0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVNtYWxsLCBDaHJvbWl1bUJyaWRnZTo6U2l6
ZVNtYWxsKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNp
emVSZWd1bGFyLCBQbGF0Zm9ybUJyaWRnZTo6U2l6ZVJlZ3VsYXIpOworQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVNtYWxsLCBQbGF0Zm9ybUJyaWRnZTo6
U2l6ZVNtYWxsKTsKIAotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2lu
ZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsLCBDaHJvbWl1bUJyaWRnZTo6U2Nyb2xs
YmFyT3JpZW50YXRpb25Ib3Jpem9udGFsKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0o
V2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWwsIENocm9taXVtQnJp
ZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsKTsKK0NPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVudGF0aW9uSG9yaXpvbnRhbCwg
UGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uSG9yaXpvbnRhbCk7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJPcmllbnRhdGlv
blZlcnRpY2FsLCBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25WZXJ0aWNhbCk7
CiAKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJh
clBhcmVudFNjcm9sbFZpZXcsIENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRTY3JvbGxW
aWV3KTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9s
bGJhclBhcmVudFJlbmRlckxheWVyLCBDaHJvbWl1bUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50UmVu
ZGVyTGF5ZXIpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6
U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldywgUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhclBhcmVu
dFNjcm9sbFZpZXcpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2lu
ZTo6U2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5ZXIsIFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxiYXJQ
YXJlbnRSZW5kZXJMYXllcik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL0Nocm9taXVtQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDk5NyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCi0gKiBt
ZXQ6Ci0gKgotICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqICAgICAqIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKLSAqIGNvcHlyaWdodCBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIKLSAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUKLSAqIGRpc3RyaWJ1dGlvbi4KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUg
b2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09Q
WVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICog
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdl
LmgiCi0KLSNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL3VybF91dGlsLmg+Ci0KLSNpbmNsdWRlICJD
aHJvbWUuaCIKLSNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBsLmgiCi0jaW5jbHVkZSAiV2ViQXVk
aW9CdXMuaCIKLSNpbmNsdWRlICJXZWJDbGlwYm9hcmQuaCIKLSNpbmNsdWRlICJXZWJDb29raWUu
aCIKLSNpbmNsdWRlICJXZWJDb29raWVKYXIuaCIKLSNpbmNsdWRlICJXZWJEYXRhLmgiCi0jaW5j
bHVkZSAiV2ViRHJhZ0RhdGEuaCIKLSNpbmNsdWRlICJXZWJGaWxlVXRpbGl0aWVzLmgiCi0jaW5j
bHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKLSNpbmNs
dWRlICJXZWJJREJLZXkuaCIKLSNpbmNsdWRlICJXZWJJbWFnZS5oIgotI2luY2x1ZGUgIldlYktp
dC5oIgotI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgotI2luY2x1ZGUgIldlYk1pbWVSZWdpc3Ry
eS5oIgotI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lckltcGwuaCIKLSNpbmNsdWRlICJXZWJQ
bHVnaW5MaXN0QnVpbGRlckltcGwuaCIKLSNpbmNsdWRlICJXZWJTYW5kYm94U3VwcG9ydC5oIgot
I2luY2x1ZGUgIldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5oIgotI2luY2x1ZGUgIldlYlNjcmVl
bkluZm8uaCIKLSNpbmNsdWRlICJXZWJTdHJpbmcuaCIKLSNpbmNsdWRlICJXZWJVUkwuaCIKLSNp
bmNsdWRlICJXZWJWZWN0b3IuaCIKLSNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCi0jaW5jbHVk
ZSAiV2ViVmlld0ltcGwuaCIKLSNpbmNsdWRlICJXZWJXb3JrZXJDbGllbnRJbXBsLmgiCi0KLSNp
ZiBQTEFURk9STShDRykKLSNpbmNsdWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+Ci0jZW5k
aWYKLQotI2lmIE9TKFdJTkRPV1MpCi0jaW5jbHVkZSAiV2ViUmVjdC5oIgotI2luY2x1ZGUgIndp
bi9XZWJUaGVtZUVuZ2luZS5oIgotI2VuZGlmCi0KLSNpZiBPUyhMSU5VWCkgfHwgT1MoRlJFRUJT
RCkKLSNpbmNsdWRlICJsaW51eC9XZWJUaGVtZUVuZ2luZS5oIgotI2luY2x1ZGUgIldlYkZvbnRJ
bmZvLmgiCi0jaW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxlLmgiCi0jZW5kaWYKLQotI2lmIE9T
KERBUldJTikKLSNpbmNsdWRlICJtYWMvV2ViVGhlbWVFbmdpbmUuaCIKLSNlbmRpZgotCi0jaWYg
V0VCS0lUX1VTSU5HX1NLSUEKLSNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKLSNlbmRpZgot
Ci0jaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDb29raWUuaCIKLSNpbmNsdWRl
ICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKLSNpbmNsdWRlICJJ
REJGYWN0b3J5QmFja2VuZFByb3h5LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5v
dEltcGxlbWVudGVkLmgiCi0jaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgotI2luY2x1
ZGUgIlBsdWdpbkRhdGEuaCIKLSNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKLQotI2luY2x1ZGUg
Ildvcmtlci5oIgotI2luY2x1ZGUgIldvcmtlckNvbnRleHRQcm94eS5oIgotI2luY2x1ZGUgPHd0
Zi9Bc3NlcnRpb25zLmg+Ci0KLS8vIFdlIGFyZSBwYXJ0IG9mIHRoZSBXZWJLaXQgaW1wbGVtZW50
YXRpb24uCi11c2luZyBuYW1lc3BhY2UgV2ViS2l0OwotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0K
LXN0YXRpYyBDaHJvbWVDbGllbnRJbXBsKiB0b0Nocm9tZUNsaWVudEltcGwoV2lkZ2V0KiB3aWRn
ZXQpCi17Ci0gICAgaWYgKCF3aWRnZXQpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgRnJhbWVW
aWV3KiB2aWV3OwotICAgIGlmICh3aWRnZXQtPmlzRnJhbWVWaWV3KCkpCi0gICAgICAgIHZpZXcg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpOwotICAgIGVsc2UgaWYgKHdpZGdldC0+
cGFyZW50KCkgJiYgd2lkZ2V0LT5wYXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgdmll
dyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldC0+cGFyZW50KCkpOwotICAgIGVsc2UK
LSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBQYWdlKiBwYWdlID0gdmlldy0+ZnJhbWUoKSA/IHZp
ZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7Ci0gICAgaWYgKCFwYWdlKQotICAgICAgICByZXR1cm4g
MDsKLQotICAgIHJldHVybiBzdGF0aWNfY2FzdDxDaHJvbWVDbGllbnRJbXBsKj4ocGFnZS0+Y2hy
b21lKCktPmNsaWVudCgpKTsKLX0KLQotc3RhdGljIFdlYldpZGdldENsaWVudCogdG9XZWJXaWRn
ZXRDbGllbnQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgQ2hyb21lQ2xpZW50SW1wbCogY2hyb21l
Q2xpZW50SW1wbCA9IHRvQ2hyb21lQ2xpZW50SW1wbCh3aWRnZXQpOwotICAgIGlmICghY2hyb21l
Q2xpZW50SW1wbCB8fCAhY2hyb21lQ2xpZW50SW1wbC0+d2ViVmlldygpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gY2hyb21lQ2xpZW50SW1wbC0+d2ViVmlldygpLT5jbGllbnQoKTsK
LX0KLQotc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCkKLXsKLSAgICBXZWJGcmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6
ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKLSAgICBpZiAoIWZyYW1lSW1wbCB8fCAhZnJh
bWVJbXBsLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKLSAg
ICBpZiAoIWNvb2tpZUphcikKLSAgICAgICAgY29va2llSmFyID0gd2ViS2l0Q2xpZW50KCktPmNv
b2tpZUphcigpOwotICAgIHJldHVybiBjb29raWVKYXI7Ci19Ci0KLS8vIENhY2hlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShjb25zdCBLVVJMJiB1
cmwsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKLXsKLSAg
ICB3ZWJLaXRDbGllbnQoKS0+Y2FjaGVNZXRhZGF0YSh1cmwsIHJlc3BvbnNlVGltZSwgZGF0YS5k
YXRhKCksIGRhdGEuc2l6ZSgpKTsKLX0KLQotLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29s
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZSgKLSAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0IGZvcm1hdCwKLSAgICBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlcikKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PmNsaXBib2FyZCgpLT5pc0Zvcm1hdEF2YWlsYWJsZSgKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2Vi
Q2xpcGJvYXJkOjpGb3JtYXQ+KGZvcm1hdCksCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBi
b2FyZDo6QnVmZmVyPihidWZmZXIpKTsKLX0KLQotU3RyaW5nIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRSZWFkUGxhaW5UZXh0KAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZm
ZXIgYnVmZmVyKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJl
YWRQbGFpblRleHQoCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihi
dWZmZXIpKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoCi0g
ICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAgU3RyaW5n
KiBodG1sVGV4dCwgS1VSTCogc291cmNlVVJMKQotewotICAgIFdlYlVSTCB1cmw7Ci0gICAgKmh0
bWxUZXh0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKLSAgICAgICAg
c3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwpOwotICAgICpz
b3VyY2VVUkwgPSB1cmw7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRl
U2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgaHRtbFRleHQsCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBzb3VyY2VVUkwsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBsYWluVGV4
dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3Jp
dGVTbWFydFBhc3RlKQotewotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVI
VE1MKAotICAgICAgICBodG1sVGV4dCwgc291cmNlVVJMLCBwbGFpblRleHQsIHdyaXRlU21hcnRQ
YXN0ZSk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0
KGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0KQotewotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9h
cmQoKS0+d3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6Y2xpcGJvYXJkV3JpdGVVUkwoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxl
KQotewotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVVUkwodXJsLCB0aXRs
ZSk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UoTmF0aXZl
SW1hZ2VQdHIgaW1hZ2UsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEtVUkwmIHNvdXJjZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSkKLXsKLSNpZiBXRUJLSVRfVVNJTkdfU0tJQQot
ICAgIFdlYkltYWdlIHdlYkltYWdlKCppbWFnZSk7Ci0jZWxzZQotICAgIFdlYkltYWdlIHdlYklt
YWdlKGltYWdlKTsKLSNlbmRpZgotICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3Jp
dGVJbWFnZSh3ZWJJbWFnZSwgc291cmNlVVJMLCB0aXRsZSk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhLAotICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWV0YWRhdGEp
Ci17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZURhdGEodHlwZSwgZGF0
YSwgbWV0YWRhdGEpOwotfQotCi1IYXNoU2V0PFN0cmluZz4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRBdmFpbGFibGVUeXBlcygKLSAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
QnVmZmVyIGJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpCi17Ci0gICAgV2ViVmVjdG9y
PFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkQXZh
aWxhYmxlVHlwZXMoCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihi
dWZmZXIpLCBjb250YWluc0ZpbGVuYW1lcyk7Ci0gICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzOwot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQotICAgICAgICB0
eXBlcy5hZGQocmVzdWx0W2ldKTsKLSAgICByZXR1cm4gdHlwZXM7Ci19Ci0KLWJvb2wgQ2hyb21p
dW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIgYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiB0eXBlLCBTdHJpbmcmIGRhdGEsIFN0cmluZyYgbWV0YWRhdGEpCi17Ci0gICAg
V2ViU3RyaW5nIHJlc3VsdERhdGE7Ci0gICAgV2ViU3RyaW5nIHJlc3VsdE1ldGFkYXRhOwotICAg
IGJvb2wgc3VjY2VlZGVkID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkRGF0YSgK
LSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIHR5cGUs
ICZyZXN1bHREYXRhLCAmcmVzdWx0TWV0YWRhdGEpOwotICAgIGlmIChzdWNjZWVkZWQpIHsKLSAg
ICAgICAgZGF0YSA9IHJlc3VsdERhdGE7Ci0gICAgICAgIG1ldGFkYXRhID0gcmVzdWx0TWV0YWRh
dGE7Ci0gICAgfQotICAgIHJldHVybiBzdWNjZWVkZWQ7Ci19Ci0KLVZlY3RvcjxTdHJpbmc+IENo
cm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpD
bGlwYm9hcmRCdWZmZXIgYnVmZmVyKQotewotICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlc3Vs
dCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEZpbGVuYW1lcygKLSAgICAgICAg
c3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwotICAgIFZlY3RvcjxT
dHJpbmc+IGNvbnZlcnRlZFJlc3VsdDsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3Vs
dC5zaXplKCk7ICsraSkKLSAgICAgICAgY29udmVydGVkUmVzdWx0LmFwcGVuZChyZXN1bHRbaV0p
OwotICAgIHJldHVybiBjb252ZXJ0ZWRSZXN1bHQ7Ci19Ci0KLS8vIENvb2tpZXMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiB2YWx1ZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdl
dENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29va2ll
SmFyLT5zZXRDb29raWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFs
dWUpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQq
IGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3VsdDsKLSAgICBX
ZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYg
KGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwgZG9j
dW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0K
LVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29u
c3QgRG9jdW1lbnQqIGRvY3VtZW50LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgU3RyaW5nIHJlc3Vs
dDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7
Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVS
ZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2ll
cygpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjpyYXdD
b29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKLXsKLSAgICByYXdDb29raWVzLmNsZWFyKCk7Ci0gICAgV2Vi
VmVjdG9yPFdlYkNvb2tpZT4gd2ViQ29va2llczsKLQotICAgIFdlYkNvb2tpZUphciogY29va2ll
SmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAg
ICBjb29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tp
ZXMoKSwgd2ViQ29va2llcyk7Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29v
a2llcy5zaXplKCk7ICsraSkgewotICAgICAgICBjb25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9
IHdlYkNvb2tpZXNbaV07Ci0gICAgICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsCi0g
ICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnZhbHVlLAotICAgICAgICAgICAgICAgICAg
ICAgIHdlYkNvb2tpZS5kb21haW4sCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnBh
dGgsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmV4cGlyZXMsCi0gICAgICAgICAg
ICAgICAgICAgICAgd2ViQ29va2llLmh0dHBPbmx5LAotICAgICAgICAgICAgICAgICAgICAgIHdl
YkNvb2tpZS5zZWN1cmUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlc3Npb24p
OwotICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUpOwotICAgIH0KLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUp
Ci17Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQp
OwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVy
bCwgY29va2llTmFtZSk7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVk
KGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBib29sIHJlc3VsdCA9IGZhbHNlOwot
ICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAg
ICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXNFbmFi
bGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLS8vIEROUyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
dm9pZCBDaHJvbWl1bUJyaWRnZTo6cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkK
LXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+cHJlZmV0Y2hIb3N0TmFtZShob3N0bmFtZSk7Ci19Ci0K
LS8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmZpbGVFeGlz
dHMoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Zmls
ZVV0aWxpdGllcygpLT5maWxlRXhpc3RzKHBhdGgpOwotfQotCi1ib29sIENocm9taXVtQnJpZGdl
OjpkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xp
ZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGVsZXRlRmlsZShwYXRoKTsKLX0KLQotYm9vbCBDaHJv
bWl1bUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewot
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVFbXB0eURp
cmVjdG9yeShwYXRoKTsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZVNpemUoY29u
c3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdCkKLXsKLSAgICByZXR1cm4gd2ViS2l0
Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0KTsKLX0K
LQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcmIHBh
dGgpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cmV2ZWFsRm9sZGVy
SW5PUyhwYXRoKTsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlv
blRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIHJlc3VsdCkKLXsKLSAgICBkb3VibGUg
bW9kaWZpY2F0aW9uVGltZTsKLSAgICBpZiAoIXdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPmdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dGltZV90Pihtb2Rp
ZmljYXRpb25UaW1lKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotU3RyaW5nIENocm9taXVtQnJp
ZGdlOjpkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1cm4gd2Vi
S2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGlyZWN0b3J5TmFtZShwYXRoKTsKLX0KLQot
U3RyaW5nIENocm9taXVtQnJpZGdlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3Ry
aW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKLXsKLSAgICByZXR1cm4gd2ViS2l0
Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgs
IGNvbXBvbmVudCk7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6Om1ha2VBbGxEaXJlY3Rvcmll
cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxl
VXRpbGl0aWVzKCktPm1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKLX0KLQotU3RyaW5nIENocm9t
aXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJl
dHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5nZXRBYnNvbHV0ZVBhdGgocGF0
aCk7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+aXNE
aXJlY3RvcnkocGF0aCk7Ci19Ci0KLUtVUkwgQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5maWxlUGF0aFRvVVJMKHBhdGgpOwotfQotCi1QbGF0Zm9ybUZpbGVIYW5kbGUg
Q2hyb21pdW1CcmlkZ2U6Om9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2Rl
IG1vZGUpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPm9w
ZW5GaWxlKHBhdGgsIG1vZGUpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpjbG9zZUZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmZpbGVV
dGlsaXRpZXMoKS0+Y2xvc2VGaWxlKGhhbmRsZSk7Ci19Ci0KLWxvbmcgbG9uZyBDaHJvbWl1bUJy
aWRnZTo6c2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNl
dCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
ZmlsZVV0aWxpdGllcygpLT5zZWVrRmlsZShoYW5kbGUsIG9mZnNldCwgb3JpZ2luKTsKLX0KLQot
Ym9vbCBDaHJvbWl1bUJyaWRnZTo6dHJ1bmNhdGVGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5k
bGUsIGxvbmcgbG9uZyBvZmZzZXQpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxl
VXRpbGl0aWVzKCktPnRydW5jYXRlRmlsZShoYW5kbGUsIG9mZnNldCk7Ci19Ci0KLWludCBDaHJv
bWl1bUJyaWRnZTo6cmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRp
bGl0aWVzKCktPnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7Ci19Ci0KLWludCBD
aHJvbWl1bUJyaWRnZTo6d3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PmZpbGVVdGlsaXRpZXMoKS0+d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOwotfQot
Ci0vLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLSNpZiBPUyhXSU5ET1dTKQotYm9vbCBDaHJvbWl1
bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChIRk9OVCBmb250KQotewotICAgIFdlYlNhbmRib3hT
dXBwb3J0KiBzcyA9IHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpOwotCi0gICAgLy8g
aWYgdGhlcmUgaXMgbm8gc2FuZGJveCwgdGhlbiB3ZSBjYW4gYXNzdW1lIHRoZSBmb250Ci0gICAg
Ly8gd2FzIGFibGUgdG8gYmUgbG9hZGVkIHN1Y2Nlc3NmdWxseSBhbHJlYWR5Ci0gICAgcmV0dXJu
IHNzID8gc3MtPmVuc3VyZUZvbnRMb2FkZWQoZm9udCkgOiB0cnVlOwotfQotI2VuZGlmCi0KLSNp
ZiBPUyhMSU5VWCkgfHwgT1MoRlJFRUJTRCkKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Z2V0Rm9u
dEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1D
aGFyYWN0ZXJzKQotewotICAgIGlmICh3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKSkK
LSAgICAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRGb250
RmFtaWx5Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzKTsKLQotICAgIFdl
YkNTdHJpbmcgZmFtaWx5ID0gV2ViRm9udEluZm86OmZhbWlseUZvckNoYXJzKGNoYXJhY3RlcnMs
IG51bUNoYXJhY3RlcnMpOwotICAgIGlmIChmYW1pbHkuZGF0YSgpKQotICAgICAgICByZXR1cm4g
V2ViU3RyaW5nOjpmcm9tVVRGOChmYW1pbHkuZGF0YSgpKTsKLQotICAgIHJldHVybiBXZWJTdHJp
bmcoKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2Uo
Y29uc3QgY2hhciogZm9udCwgaW50IHNpemVBbmRTdHlsZSwgRm9udFJlbmRlclN0eWxlKiByZXN1
bHQpCi17Ci0gICAgV2ViRm9udFJlbmRlclN0eWxlIHN0eWxlOwotCi0gICAgaWYgKHdlYktpdENs
aWVudCgpLT5zYW5kYm94U3VwcG9ydCgpKQotICAgICAgICB3ZWJLaXRDbGllbnQoKS0+c2FuZGJv
eFN1cHBvcnQoKS0+Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoZm9udCwgc2l6ZUFuZFN0eWxlLCAm
c3R5bGUpOwotICAgIGVsc2UKLSAgICAgICAgV2ViRm9udEluZm86OnJlbmRlclN0eWxlRm9yU3Ry
aWtlKGZvbnQsIHNpemVBbmRTdHlsZSwgJnN0eWxlKTsKLQotICAgIHN0eWxlLnRvRm9udFJlbmRl
clN0eWxlKHJlc3VsdCk7Ci19Ci0jZW5kaWYKLQotI2lmIE9TKERBUldJTikKLWJvb2wgQ2hyb21p
dW1CcmlkZ2U6OmxvYWRGb250KE5TRm9udCogc3JjRm9udCwgQVRTRm9udENvbnRhaW5lclJlZiog
b3V0KQotewotICAgIFdlYlNhbmRib3hTdXBwb3J0KiBzcyA9IHdlYktpdENsaWVudCgpLT5zYW5k
Ym94U3VwcG9ydCgpOwotICAgIGlmIChzcykKLSAgICAgICAgcmV0dXJuIHNzLT5sb2FkRm9udChz
cmNGb250LCBvdXQpOwotCi0gICAgLy8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxs
ZWQgaW4gcmVzcG9uc2UgdG8gYW4gZXJyb3IgbG9hZGluZyBhCi0gICAgLy8gZm9udCBkdWUgdG8g
YmVpbmcgYmxvY2tlZCBieSB0aGUgc2FuZGJveC4KLSAgICAvLyBUaGlzIGJ5IGRlZmluaXRpb24g
c2hvdWxkbid0IGhhcHBlbiBpZiB0aGVyZSBpcyBubyBzYW5kYm94IHN1cHBvcnQuCi0gICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgKm91dCA9IDA7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQot
I2VuZGlmCi0KLS8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGxhdGZvcm1GaWxlSGFuZGxlIENo
cm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUs
IGludCBkZXNpcmVkRmxhZ3MpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFz
ZU9wZW5GaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIGRlc2lyZWRGbGFncyk7Ci19Ci0KLWlu
dCBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgdmZzRmls
ZU5hbWUsIGJvb2wgc3luY0RpcikKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFi
YXNlRGVsZXRlRmlsZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpLCBzeW5jRGlyKTsKLX0KLQotbG9u
ZyBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcm
IHZmc0ZpbGVOYW1lKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VHZXRG
aWxlQXR0cmlidXRlcyhXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKLX0KLQotbG9uZyBsb25nIENo
cm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5h
bWUpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVTaXplKFdl
YlN0cmluZyh2ZnNGaWxlTmFtZSkpOwotfQotCi0vLyBJbmRleGVkIERhdGFiYXNlIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBh
c3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IENocm9taXVtQnJpZGdlOjppZGJG
YWN0b3J5KCkKLXsKLSAgICAvLyBUaGVyZSdzIG5vIHJlYXNvbiB3aHkgd2UgbmVlZCB0byBhbGxv
Y2F0ZSBhIG5ldyBwcm94eSBlYWNoIHRpbWUsIGJ1dAotICAgIC8vIHRoZXJlJ3MgYWxzbyBubyBz
dHJvbmcgcmVhc29uIG5vdCB0by4KLSAgICByZXR1cm4gSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6
Y3JlYXRlKCk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmlkYlNodXRkb3duKCkKLXsKLSAg
ICAvLyBJbiB0aGUgYnJvd3NlciBwcm9jZXNzLCB0aGlzIHNodXRzIGRvd24gdGhlIHV0aWxpdHkg
cHJvY2Vzcy4gSW4gdGhlIHJlbmRlcmVyIHByb2Nlc3MsIGl0IGRvZXMgbm90aGluZy4KLSAgICB3
ZWJLaXRDbGllbnQoKS0+aWRiU2h1dGRvd24oKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6
Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8
UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtl
eVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBrZXlzKQotewotICAgIFdlYlZlY3RvcjxX
ZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHdlYlZhbHVlcyA9IHZhbHVlczsKLSAgICBXZWJWZWN0
b3I8V2ViSURCS2V5PiB3ZWJLZXlzOwotICAgIHdlYktpdENsaWVudCgpLT5jcmVhdGVJREJLZXlz
RnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHdlYlZhbHVlcywgV2ViU3RyaW5nKGtleVBh
dGgpLCB3ZWJLZXlzKTsKLQotICAgIHNpemVfdCB3ZWJLZXlzU2l6ZSA9IHdlYktleXMuc2l6ZSgp
OwotICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KHdlYktleXNTaXplKTsKLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHdlYktleXNTaXplOyArK2kpCi0gICAgICAgIGtleXMuYXBwZW5kKFBhc3NS
ZWZQdHI8SURCS2V5Pih3ZWJLZXlzW2ldKSk7Ci19Ci0KLS8vIEtleWdlbiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotU3RyaW5nIENocm9taXVtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJp
bmcoCi0gICAgdW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZSwg
Y29uc3QgS1VSTCYgdXJsKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2lnbmVkUHVi
bGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtleVNpemVJbmRleCwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmcoY2hh
bGxlbmdlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBXZWJVUkwodXJsKSk7Ci19Ci0KLS8vIExhbmd1YWdlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotU3RyaW5nIENocm9taXVtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgpCi17Ci0g
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kZWZhdWx0TG9jYWxlKCk7Ci19Ci0KLS8vIExheW91
dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKQot
ewotICAgIHJldHVybiBXZWJLaXQ6OmxheW91dFRlc3RNb2RlKCk7Ci19Ci0KLS8vIE1pbWVUeXBl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKQotICAgICAg
ICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOwotfQotCi1ib29sIENocm9taXVt
QnJpZGdlOjppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVU
eXBlKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBv
cnRzSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKQotICAgICAgICAhPSBXZWJNaW1lUmVnaXN0
cnk6OklzTm90U3VwcG9ydGVkOwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRl
ZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c05vbkltYWdlTUlNRVR5cGUo
bWltZVR5cGUpCi0gICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7Ci19
Ci0KLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24pCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0
cnkoKS0+bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKLX0KLQotU3RyaW5nIENocm9t
aXVtQnJpZGdlOjptaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICBy
ZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZyb21GaWxlKHBh
dGgpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lvbkZvck1J
TUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5taW1lUmVnaXN0cnkoKS0+cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUobWltZVR5
cGUpOwotfQotCi0vLyBQbHVnaW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6
OnBsdWdpbnMoYm9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4qIHJlc3VsdHMpCi17Ci0g
ICAgV2ViUGx1Z2luTGlzdEJ1aWxkZXJJbXBsIGJ1aWxkZXIocmVzdWx0cyk7Ci0gICAgd2ViS2l0
Q2xpZW50KCktPmdldFBsdWdpbkxpc3QocmVmcmVzaCwgJmJ1aWxkZXIpOwotICAgIHJldHVybiB0
cnVlOyAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0
dXJuIGEgdmFsdWUuCi19Ci0KLU5QT2JqZWN0KiBDaHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0
YWJsZU9iamVjdChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0
LT5pc1BsdWdpbkNvbnRhaW5lcigpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBz
dGF0aWNfY2FzdDxXZWJQbHVnaW5Db250YWluZXJJbXBsKj4od2lkZ2V0KS0+c2NyaXB0YWJsZU9i
amVjdCgpOwotfQotCi0vLyBSZXNvdXJjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLVBhc3NSZWZQdHI8SW1hZ2U+
IENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNoYXIqIG5h
bWUpCi17Ci0gICAgY29uc3QgV2ViRGF0YSYgcmVzb3VyY2UgPSB3ZWJLaXRDbGllbnQoKS0+bG9h
ZFJlc291cmNlKG5hbWUpOwotICAgIGlmIChyZXNvdXJjZS5pc0VtcHR5KCkpCi0gICAgICAgIHJl
dHVybiBJbWFnZTo6bnVsbEltYWdlKCk7Ci0KLSAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0
bWFwSW1hZ2U6OmNyZWF0ZSgpOwotICAgIGltYWdlLT5zZXREYXRhKHJlc291cmNlLCB0cnVlKTsK
LSAgICByZXR1cm4gaW1hZ2U7Ci19Ci0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotCi1QYXNzT3du
UHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShj
b25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkKLXsKLSAgICBjb25zdCBXZWJEYXRh
JiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7Ci0gICAgaWYg
KHJlc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgCi0gICAgcmV0dXJu
IGRlY29kZUF1ZGlvRmlsZURhdGEocmVzb3VyY2UuZGF0YSgpLCByZXNvdXJjZS5zaXplKCksIHNh
bXBsZVJhdGUpOwotfQotCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6ZGVj
b2RlQXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNh
bXBsZVJhdGUpCi17Ci0gICAgV2ViQXVkaW9CdXMgd2ViQXVkaW9CdXM7Ci0gICAgaWYgKHdlYktp
dENsaWVudCgpLT5sb2FkQXVkaW9SZXNvdXJjZSgmd2ViQXVkaW9CdXMsIGRhdGEsIHNpemUsIHNh
bXBsZVJhdGUpKQotICAgICAgICByZXR1cm4gd2ViQXVkaW9CdXMucmVsZWFzZSgpOwotICAgIHJl
dHVybiAwOwotfQotCi0jZW5kaWYgLy8gRU5BQkxFKFdFQl9BVURJTykKLQotLy8gU2FuZGJveCAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQotCi1ib29sIENocm9taXVtQnJpZGdlOjpzYW5kYm94RW5hYmxlZCgpCi17Ci0g
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zYW5kYm94RW5hYmxlZCgpOwotfQotCi0vLyBTaGFy
ZWRUaW1lcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmly
ZWRGdW5jdGlvbih2b2lkICgqZnVuYykoKSkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hh
cmVkVGltZXJGaXJlZEZ1bmN0aW9uKGZ1bmMpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpz
ZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKLXsKLSAgICB3ZWJLaXRDbGll
bnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlVGltZShmaXJlVGltZSk7Ci19Ci0KLXZvaWQgQ2hyb21p
dW1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcigpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPnN0b3BT
aGFyZWRUaW1lcigpOwotfQotCi0vLyBTdGF0c0NvdW50ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgQ2hyb21p
dW1CcmlkZ2U6OmRlY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQotewotICAg
IHdlYktpdENsaWVudCgpLT5kZWNyZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7Ci19Ci0KLXZvaWQg
Q2hyb21pdW1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQot
ewotICAgIHdlYktpdENsaWVudCgpLT5pbmNyZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7Ci19Ci0K
LXZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFyKiBu
YW1lLCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpCi17Ci0g
ICAgd2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cyhuYW1lLCBzYW1wbGUsIG1p
biwgbWF4LCBidWNrZXRDb3VudCk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3RvZ3Jh
bUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZh
bHVlKQotewotICAgIHdlYktpdENsaWVudCgpLT5oaXN0b2dyYW1FbnVtZXJhdGlvbihuYW1lLCBz
YW1wbGUsIGJvdW5kYXJ5VmFsdWUpOwotfQotCi0vLyBTdWRkZW4gVGVybWluYXRpb24gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZv
aWQgQ2hyb21pdW1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChib29sIGVuYWJsZWQp
Ci17Ci0gICAgd2ViS2l0Q2xpZW50KCktPnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChlbmFibGVk
KTsKLX0KLQotLy8gU3lzdGVtVGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1kb3VibGUgQ2hyb21pdW1CcmlkZ2U6
OmN1cnJlbnRUaW1lKCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmN1cnJlbnRUaW1l
KCk7Ci19Ci0KLS8vIFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIE9TKFdJTkRPV1MpCi0KLXZv
aWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50QnV0dG9uKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2Ms
IGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVj
dCYgcmVjdCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRCdXR0
b24oCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRl
LCBjbGFzc2ljU3RhdGUsIHJlY3QpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludE1l
bnVMaXN0KAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGlu
dCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICB3ZWJLaXRD
bGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRNZW51TGlzdCgKLSAgICAgICAgZ2MtPnBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7
Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyQXJyb3coCi0gICAgR3Jh
cGhpY3NDb250ZXh0KiBnYywgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAgIGNvbnN0
IEludFJlY3QmIHJlY3QpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBh
aW50U2Nyb2xsYmFyQXJyb3coCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCksIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdl
OjpwYWludFNjcm9sbGJhclRodW1iKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUaHVt
YigKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUs
IGNsYXNzaWNTdGF0ZSwgcmVjdCk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Ny
b2xsYmFyVHJhY2soCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRS
ZWN0JiBhbGlnblJlY3QpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBh
aW50U2Nyb2xsYmFyVHJhY2soCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QsCi0gICAgICAgIGFsaWduUmVjdCk7
Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbigKLSAgICBHcmFwaGlj
c0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAg
IGNvbnN0IEludFJlY3QmIHJlY3QpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5l
KCktPnBhaW50U3BpbkJ1dHRvbigKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52
YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Ci19Ci0KLXZvaWQgQ2hyb21p
dW1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBw
YXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYgcmVj
dCwgY29uc3QgQ29sb3ImIGNvbG9yLCBib29sIGZpbGxDb250ZW50QXJlYSwKLSAgICBib29sIGRy
YXdFZGdlcykKLXsKLSAgICAvLyBGYWxsYmFjayB0byB3aGl0ZSB3aGVuIHxjb2xvcnwgaXMgaW52
YWxpZC4KLSAgICBSR0JBMzIgYmFja2dyb3VuZENvbG9yID0gY29sb3IuaXNWYWxpZCgpID8gY29s
b3IucmdiKCkgOiBDb2xvcjo6d2hpdGU7Ci0KLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdp
bmUoKS0+cGFpbnRUZXh0RmllbGQoCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2Fu
dmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QsCi0gICAgICAgIGJhY2tncm91
bmRDb2xvciwgZmlsbENvbnRlbnRBcmVhLCBkcmF3RWRnZXMpOwotfQotCi12b2lkIENocm9taXVt
QnJpZGdlOjpwYWludFRyYWNrYmFyKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCkK
LXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUcmFja2JhcigKLSAg
ICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNz
aWNTdGF0ZSwgcmVjdCk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NC
YXIoCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29u
c3QgSW50UmVjdCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRT
ZWNvbmRzKQotewotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFByb2dy
ZXNzQmFyKAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBiYXJSZWN0
LCB2YWx1ZVJlY3QsIGRldGVybWluYXRlLCBhbmltYXRlZFNlY29uZHMpOwotfQotCi0jZWxpZiBP
UyhMSU5VWCkKLQotc3RhdGljIFdlYlRoZW1lRW5naW5lOjpQYXJ0IFdlYlRoZW1lUGFydChDaHJv
bWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBhcnQpCi17Ci0gICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAg
Y2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzogcmV0dXJuIFdlYlRo
ZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OwotICAgIGNhc2UgQ2hyb21pdW1Ccmlk
Z2U6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNj
cm9sbGJhckxlZnRBcnJvdzsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
UmlnaHRBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJv
dzsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzogcmV0dXJu
IFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzsKLSAgICBjYXNlIENocm9taXVt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWI7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRn
ZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFy
dFNjcm9sbGJhclZlcnRpY2FsVGh1bWI7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNj
cm9sbGJhckhvcml6b250YWxUcmFjazogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xs
YmFySG9yaXpvbnRhbFRyYWNrOwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxi
YXJWZXJ0aWNhbFRyYWNrOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0
aWNhbFRyYWNrOwotICAgIH0KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICByZXR1cm4g
V2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7Ci19Ci0KLXN0YXRpYyBXZWJU
aGVtZUVuZ2luZTo6U3RhdGUgV2ViVGhlbWVTdGF0ZShDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWlu
dFN0YXRlIHN0YXRlKQotewotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIENocm9taXVt
QnJpZGdlOjpTdGF0ZURpc2FibGVkOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJs
ZWQ7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVIb3ZlcjogcmV0dXJuIFdlYlRoZW1l
RW5naW5lOjpTdGF0ZUhvdmVyOwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFs
OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlTm9ybWFsOwotICAgIGNhc2UgQ2hyb21pdW1C
cmlkZ2U6OlN0YXRlUHJlc3NlZDogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZVByZXNzZWQ7
Ci0gICAgfQotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXZWJUaGVtZUVu
Z2luZTo6U3RhdGVEaXNhYmxlZDsKLX0KLQotc3RhdGljIHZvaWQgR2V0V2ViVGhlbWVFeHRyYVBh
cmFtcyhDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBhcnQsIENocm9taXVtQnJpZGdlOjpUaGVt
ZVBhaW50U3RhdGUgc3RhdGUsIGNvbnN0IENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQ
YXJhbXMqIGV4dHJhUGFyYW1zLCBXZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMqIHdlYlRoZW1l
RXh0cmFQYXJhbXMpCi17Ci0gICAgaWYgKHBhcnQgPT0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJIb3Jpem9udGFsVHJhY2sgfHwgcGFydCA9PSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9s
bGJhclZlcnRpY2FsVHJhY2spIHsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xs
YmFyVHJhY2sudHJhY2tYID0gZXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWDsKLSAg
ICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tZID0gZXh0cmFQ
YXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWTsKLSAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFt
cy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFj
ay50cmFja1dpZHRoOwotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFj
ay50cmFja0hlaWdodCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja0hlaWdodDsK
LSAgICB9Ci19Ci0KLUludFNpemUgQ2hyb21pdW1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoVGhl
bWVQYXJ0IHBhcnQpCi17Ci0gICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUo
KS0+Z2V0U2l6ZShXZWJUaGVtZVBhcnQocGFydCkpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdl
OjpwYWludFRoZW1lUGFydCgKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBUaGVtZVBhcnQgcGFy
dCwgVGhlbWVQYWludFN0YXRlIHN0YXRlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBUaGVt
ZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zKQotewotICAgIFdlYlRoZW1lRW5naW5lOjpF
eHRyYVBhcmFtcyB3ZWJUaGVtZUV4dHJhUGFyYW1zOwotICAgIEdldFdlYlRoZW1lRXh0cmFQYXJh
bXMocGFydCwgc3RhdGUsIGV4dHJhUGFyYW1zLCAmd2ViVGhlbWVFeHRyYVBhcmFtcyk7Ci0gICAg
d2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50KAotICAgICAgICBnYy0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLCBXZWJUaGVtZVBhcnQocGFydCksIFdlYlRoZW1lU3RhdGUo
c3RhdGUpLCByZWN0LCAmd2ViVGhlbWVFeHRyYVBhcmFtcyk7Ci19Ci0KLSNlbGlmIE9TKERBUldJ
TikKLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKLSAgICBHcmFw
aGljc0NvbnRleHQqIGdjLCBUaGVtZVBhaW50U3RhdGUgc3RhdGUsIFRoZW1lUGFpbnRTaXplIHNp
emUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFRoZW1lUGFpbnRTY3JvbGxiYXJJbmZvJiBz
Y3JvbGxiYXJJbmZvKQotewotICAgIFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJJbmZvIHdlYlRo
ZW1lU2Nyb2xsYmFySW5mbzsKLQotICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5vcmllbnRhdGlv
biA9IHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJPcmllbnRhdGlvbj4oc2Ny
b2xsYmFySW5mby5vcmllbnRhdGlvbik7Ci0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLnBhcmVu
dCA9IHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJQYXJlbnQ+KHNjcm9sbGJh
ckluZm8ucGFyZW50KTsKLSAgICB3ZWJUaGVtZVNjcm9sbGJhckluZm8ubWF4VmFsdWUgPSBzY3Jv
bGxiYXJJbmZvLm1heFZhbHVlOwotICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5jdXJyZW50VmFs
dWUgPSBzY3JvbGxiYXJJbmZvLmN1cnJlbnRWYWx1ZTsKLSAgICB3ZWJUaGVtZVNjcm9sbGJhcklu
Zm8udmlzaWJsZVNpemUgPSBzY3JvbGxiYXJJbmZvLnZpc2libGVTaXplOwotICAgIHdlYlRoZW1l
U2Nyb2xsYmFySW5mby50b3RhbFNpemUgPSBzY3JvbGxiYXJJbmZvLnRvdGFsU2l6ZTsKLQotICAg
IHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhclRodW1iKAotICAg
ICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCksCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYlRoZW1l
RW5naW5lOjpTdGF0ZT4oc3RhdGUpLAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJUaGVtZUVuZ2lu
ZTo6U2l6ZT4oc2l6ZSksCi0gICAgICAgIHJlY3QsCi0gICAgICAgIHdlYlRoZW1lU2Nyb2xsYmFy
SW5mbyk7Ci19Ci0KLSNlbmRpZgotCi0vLyBUcmFjZSBFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLXZvaWQgQ2hy
b21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRCZWdpbihjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwg
Y29uc3QgY2hhciogZXh0cmEpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRyYWNlRXZlbnRCZWdp
bihuYW1lLCBpZCwgZXh0cmEpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjp0cmFjZUV2ZW50
RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkKLXsKLSAg
ICB3ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEVuZChuYW1lLCBpZCwgZXh0cmEpOwotfQotCi0v
LyBWaXNpdGVkIExpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLUxpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVk
TGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQotewotICAgIHVybF9j
YW5vbjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOwotICAgIHVybF9wYXJzZTo6UGFyc2Vk
IHBhcnNlZDsKLSAgICBpZiAoIXVybF91dGlsOjpDYW5vbmljYWxpemUodXJsLCBsZW5ndGgsIDAs
ICZidWZmZXIsICZwYXJzZWQpKQotICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQgVVJMcyBh
cmUgdW52aXNpdGVkLgotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNo
KGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7Ci19Ci0KLUxpbmtIYXNoIENocm9taXVt
QnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYgYmFzZSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVV
UkwpCi17Ci0gICAgLy8gUmVzb2x2ZSB0aGUgcmVsYXRpdmUgVVJMIHVzaW5nIGdvb2dsZXVybCBh
bmQgcGFzcyB0aGUgYWJzb2x1dGUgVVJMIHVwIHRvCi0gICAgLy8gdGhlIGVtYmVkZGVyLiBXZSBj
b3VsZCBjcmVhdGUgYSBHVVJMIG9iamVjdCBmcm9tIHRoZSBiYXNlIGFuZCByZXNvbHZlCi0gICAg
Ly8gdGhlIHJlbGF0aXZlIFVSTCB0aGF0IHdheSwgYnV0IGNhbGxpbmcgdGhlIGxvd2VyLWxldmVs
IGZ1bmN0aW9ucwotICAgIC8vIGRpcmVjdGx5IHNhdmVzIHVzIHRoZSBzdHJpbmcgYWxsb2NhdGlv
biBpbiBtb3N0IGNhc2VzLgotICAgIHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVm
ZmVyOwotICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsKLQotI2lmIFVTRShHT09HTEVVUkwp
Ci0gICAgY29uc3QgQ1N0cmluZyYgY3N0ciA9IGJhc2UudXRmOFN0cmluZygpOwotICAgIGNvbnN0
IGNoYXIqIGRhdGEgPSBjc3RyLmRhdGEoKTsKLSAgICBpbnQgbGVuZ3RoID0gY3N0ci5sZW5ndGgo
KTsKLSAgICBjb25zdCB1cmxfcGFyc2U6OlBhcnNlZCYgc3JjUGFyc2VkID0gYmFzZS5wYXJzZWQo
KTsKLSNlbHNlCi0gICAgLy8gV2hlbiB3ZSdyZSBub3QgdXNpbmcgR29vZ2xlVVJMLCBmaXJzdCBj
YW5vbmljYWxpemUgaXQgc28gd2UgY2FuIHJlc29sdmUgaXQKLSAgICAvLyBiZWxvdy4KLSAgICB1
cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IHNyY0Nhbm9uOwotICAgIHVybF9wYXJzZTo6
UGFyc2VkIHNyY1BhcnNlZDsKLSAgICBTdHJpbmcgc3RyID0gYmFzZS5zdHJpbmcoKTsKLSAgICBp
ZiAoIXVybF91dGlsOjpDYW5vbmljYWxpemUoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgp
LCAwLCAmc3JjQ2Fub24sICZzcmNQYXJzZWQpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBjb25z
dCBjaGFyKiBkYXRhID0gc3JjQ2Fub24uZGF0YSgpOwotICAgIGludCBsZW5ndGggPSBzcmNDYW5v
bi5sZW5ndGgoKTsKLSNlbmRpZgotCi0gICAgaWYgKCF1cmxfdXRpbDo6UmVzb2x2ZVJlbGF0aXZl
KGRhdGEsIGxlbmd0aCwgc3JjUGFyc2VkLCBhdHRyaWJ1dGVVUkwuY2hhcmFjdGVycygpLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVVUkwubGVuZ3RoKCksIDAs
ICZidWZmZXIsICZwYXJzZWQpKQotICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQgcmVzb2x2
ZWQgVVJMLgotCi0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVm
ZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6
aXNMaW5rVmlzaXRlZChMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2gpCi17Ci0gICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5pc0xpbmtWaXNpdGVkKHZpc2l0ZWRMaW5rSGFzaCk7Ci19Ci0KLS8vIFRo
ZXNlIGFyZSB0ZW1wb3JhcnkgbWV0aG9kcyB0aGF0IHRoZSBXZWJLaXQgbGF5ZXIgY2FuIHVzZSB0
byBjYWxsIHRvIHRoZQotLy8gR2x1ZSBsYXllci4gT25jZSB0aGUgR2x1ZSBsYXllciBtb3ZlcyBl
bnRpcmVseSBpbnRvIHRoZSBXZWJLaXQgbGF5ZXIsIHRoZXNlCi0vLyBtZXRob2RzIHdpbGwgYmUg
ZGVsZXRlZC4KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeShGcmFt
ZSogZnJhbWUpCi17Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgV2Vi
RnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKLSAg
ICBpZiAoIXdlYkZyYW1lLT5jbGllbnQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIHdlYkZyYW1l
LT5jbGllbnQoKS0+ZGlkRXhoYXVzdE1lbW9yeUF2YWlsYWJsZUZvclNjcmlwdCh3ZWJGcmFtZSk7
Ci19Ci0KLWludCBDaHJvbWl1bUJyaWRnZTo6bWVtb3J5VXNhZ2VNQigpCi17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4od2ViS2l0Q2xpZW50KCktPm1lbW9yeVVzYWdlTUIoKSk7Ci19Ci0K
LWludCBDaHJvbWl1bUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpCi17Ci0gICAgcmV0dXJu
IHN0YXRpY19jYXN0PGludD4od2ViS2l0Q2xpZW50KCktPmFjdHVhbE1lbW9yeVVzYWdlTUIoKSk7
Ci19Ci0KLWludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCi17
Ci0gICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQp
OwotICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY2xpZW50
LT5zY3JlZW5JbmZvKCkuZGVwdGg7Ci19Ci0KLWludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVw
dGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgV2ViV2lkZ2V0Q2xpZW50KiBj
bGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwotICAgIGlmICghY2xpZW50KQotICAg
ICAgICByZXR1cm4gMDsKLSAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuZGVwdGhQZXJD
b21wb25lbnQ7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZShX
aWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lk
Z2V0Q2xpZW50KHdpZGdldCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiAwOwot
ICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5pc01vbm9jaHJvbWU7Ci19Ci0KLUludFJl
Y3QgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCi17Ci0gICAgV2Vi
V2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwotICAgIGlm
ICghY2xpZW50KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHJldHVybiBjbGllbnQt
PnNjcmVlbkluZm8oKS5yZWN0OwotfQotCi1JbnRSZWN0IENocm9taXVtQnJpZGdlOjpzY3JlZW5B
dmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAgIFdlYldpZGdldENsaWVudCogY2xp
ZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKLSAgICBpZiAoIWNsaWVudCkKLSAgICAg
ICAgcmV0dXJuIEludFJlY3QoKTsKLSAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuYXZh
aWxhYmxlUmVjdDsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6cG9wdXBzQWxsb3dlZChOUFAg
bnBwKQotewotICAgIC8vIEZJWE1FOiBHaXZlIHRoZSBlbWJlZGRlciBhIHdheSB0byBjb250cm9s
IHRoaXMuCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1Xb3JrZXJDb250ZXh0UHJveHkqIFdvcmtl
ckNvbnRleHRQcm94eTo6Y3JlYXRlKFdvcmtlciogd29ya2VyKQotewotICAgIHJldHVybiBXZWJX
b3JrZXJDbGllbnRJbXBsOjpjcmVhdGVXb3JrZXJDb250ZXh0UHJveHkod29ya2VyKTsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
UGxhdGZvcm1CcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1BsYXRmb3JtQnJpZGdlLmNwcAkocmV2aXNpb24gNzYwODYpCShmcm9tIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcDo3NjA4NikKKysrIFNvdXJjZS9XZWJL
aXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDk5NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0
OgorICoKKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
CisgKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlCisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9m
IEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICogdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBB
TkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlS
SUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgorCisjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy91cmxfdXRpbC5oPgorCisjaW5jbHVkZSAiQ2hy
b21lLmgiCisjaW5jbHVkZSAiQ2hyb21lQ2xpZW50SW1wbC5oIgorI2luY2x1ZGUgIldlYkF1ZGlv
QnVzLmgiCisjaW5jbHVkZSAiV2ViQ2xpcGJvYXJkLmgiCisjaW5jbHVkZSAiV2ViQ29va2llLmgi
CisjaW5jbHVkZSAiV2ViQ29va2llSmFyLmgiCisjaW5jbHVkZSAiV2ViRGF0YS5oIgorI2luY2x1
ZGUgIldlYkRyYWdEYXRhLmgiCisjaW5jbHVkZSAiV2ViRmlsZVV0aWxpdGllcy5oIgorI2luY2x1
ZGUgIldlYkZyYW1lQ2xpZW50LmgiCisjaW5jbHVkZSAiV2ViRnJhbWVJbXBsLmgiCisjaW5jbHVk
ZSAiV2ViSURCS2V5LmgiCisjaW5jbHVkZSAiV2ViSW1hZ2UuaCIKKyNpbmNsdWRlICJXZWJLaXQu
aCIKKyNpbmNsdWRlICJXZWJLaXRDbGllbnQuaCIKKyNpbmNsdWRlICJXZWJNaW1lUmVnaXN0cnku
aCIKKyNpbmNsdWRlICJXZWJQbHVnaW5Db250YWluZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViUGx1
Z2luTGlzdEJ1aWxkZXJJbXBsLmgiCisjaW5jbHVkZSAiV2ViU2FuZGJveFN1cHBvcnQuaCIKKyNp
bmNsdWRlICJXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWUuaCIKKyNpbmNsdWRlICJXZWJTY3JlZW5J
bmZvLmgiCisjaW5jbHVkZSAiV2ViU3RyaW5nLmgiCisjaW5jbHVkZSAiV2ViVVJMLmgiCisjaW5j
bHVkZSAiV2ViVmVjdG9yLmgiCisjaW5jbHVkZSAiV2ViVmlld0NsaWVudC5oIgorI2luY2x1ZGUg
IldlYlZpZXdJbXBsLmgiCisjaW5jbHVkZSAiV2ViV29ya2VyQ2xpZW50SW1wbC5oIgorCisjaWYg
UExBVEZPUk0oQ0cpCisjaW5jbHVkZSA8Q29yZUdyYXBoaWNzL0NHQ29udGV4dC5oPgorI2VuZGlm
CisKKyNpZiBPUyhXSU5ET1dTKQorI2luY2x1ZGUgIldlYlJlY3QuaCIKKyNpbmNsdWRlICJ3aW4v
V2ViVGhlbWVFbmdpbmUuaCIKKyNlbmRpZgorCisjaWYgT1MoTElOVVgpIHx8IE9TKEZSRUVCU0Qp
CisjaW5jbHVkZSAibGludXgvV2ViVGhlbWVFbmdpbmUuaCIKKyNpbmNsdWRlICJXZWJGb250SW5m
by5oIgorI2luY2x1ZGUgIldlYkZvbnRSZW5kZXJTdHlsZS5oIgorI2VuZGlmCisKKyNpZiBPUyhE
QVJXSU4pCisjaW5jbHVkZSAibWFjL1dlYlRoZW1lRW5naW5lLmgiCisjZW5kaWYKKworI2lmIFdF
QktJVF9VU0lOR19TS0lBCisjaW5jbHVkZSAiTmF0aXZlSW1hZ2VTa2lhLmgiCisjZW5kaWYKKwor
I2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCisjaW5jbHVkZSAiQ29va2llLmgiCisjaW5jbHVkZSAi
RnJhbWVWaWV3LmgiCisjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiSURC
RmFjdG9yeUJhY2tlbmRQcm94eS5oIgorI2luY2x1ZGUgIktVUkwuaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKKyNpbmNsdWRl
ICJQbHVnaW5EYXRhLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlICJX
b3JrZXIuaCIKKyNpbmNsdWRlICJXb3JrZXJDb250ZXh0UHJveHkuaCIKKyNpbmNsdWRlIDx3dGYv
QXNzZXJ0aW9ucy5oPgorCisvLyBXZSBhcmUgcGFydCBvZiB0aGUgV2ViS2l0IGltcGxlbWVudGF0
aW9uLgordXNpbmcgbmFtZXNwYWNlIFdlYktpdDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgQ2hyb21lQ2xpZW50SW1wbCogdG9DaHJvbWVDbGllbnRJbXBsKFdpZGdldCogd2lkZ2V0
KQoreworICAgIGlmICghd2lkZ2V0KQorICAgICAgICByZXR1cm4gMDsKKworICAgIEZyYW1lVmll
dyogdmlldzsKKyAgICBpZiAod2lkZ2V0LT5pc0ZyYW1lVmlldygpKQorICAgICAgICB2aWV3ID0g
c3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0KTsKKyAgICBlbHNlIGlmICh3aWRnZXQtPnBh
cmVudCgpICYmIHdpZGdldC0+cGFyZW50KCktPmlzRnJhbWVWaWV3KCkpCisgICAgICAgIHZpZXcg
PSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQtPnBhcmVudCgpKTsKKyAgICBlbHNlCisg
ICAgICAgIHJldHVybiAwOworCisgICAgUGFnZSogcGFnZSA9IHZpZXctPmZyYW1lKCkgPyB2aWV3
LT5mcmFtZSgpLT5wYWdlKCkgOiAwOworICAgIGlmICghcGFnZSkKKyAgICAgICAgcmV0dXJuIDA7
CisKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Q2hyb21lQ2xpZW50SW1wbCo+KHBhZ2UtPmNocm9t
ZSgpLT5jbGllbnQoKSk7Cit9CisKK3N0YXRpYyBXZWJXaWRnZXRDbGllbnQqIHRvV2ViV2lkZ2V0
Q2xpZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIENocm9tZUNsaWVudEltcGwqIGNocm9tZUNs
aWVudEltcGwgPSB0b0Nocm9tZUNsaWVudEltcGwod2lkZ2V0KTsKKyAgICBpZiAoIWNocm9tZUNs
aWVudEltcGwgfHwgIWNocm9tZUNsaWVudEltcGwtPndlYlZpZXcoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgcmV0dXJuIGNocm9tZUNsaWVudEltcGwtPndlYlZpZXcoKS0+Y2xpZW50KCk7Cit9
CisKK3N0YXRpYyBXZWJDb29raWVKYXIqIGdldENvb2tpZUphcihjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQpCit7CisgICAgV2ViRnJhbWVJbXBsKiBmcmFtZUltcGwgPSBXZWJGcmFtZUltcGw6OmZy
b21GcmFtZShkb2N1bWVudC0+ZnJhbWUoKSk7CisgICAgaWYgKCFmcmFtZUltcGwgfHwgIWZyYW1l
SW1wbC0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybiAwOworICAgIFdlYkNvb2tpZUphciogY29v
a2llSmFyID0gZnJhbWVJbXBsLT5jbGllbnQoKS0+Y29va2llSmFyKGZyYW1lSW1wbCk7CisgICAg
aWYgKCFjb29raWVKYXIpCisgICAgICAgIGNvb2tpZUphciA9IHdlYktpdENsaWVudCgpLT5jb29r
aWVKYXIoKTsKKyAgICByZXR1cm4gY29va2llSmFyOworfQorCisvLyBDYWNoZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNhY2hlTWV0YWRhdGEoY29uc3QgS1VSTCYgdXJs
LCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPmNhY2hlTWV0YWRhdGEodXJsLCByZXNwb25zZVRpbWUsIGRhdGEuZGF0
YSgpLCBkYXRhLnNpemUoKSk7Cit9CisKKy8vIENsaXBib2FyZCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9vbCBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoCisgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCBmb3JtYXQsCisgICAgUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5j
bGlwYm9hcmQoKS0+aXNGb3JtYXRBdmFpbGFibGUoCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNs
aXBib2FyZDo6Rm9ybWF0Pihmb3JtYXQpLAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9h
cmQ6OkJ1ZmZlcj4oYnVmZmVyKSk7Cit9CisKK1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJv
YXJkUmVhZFBsYWluVGV4dCgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVy
IGJ1ZmZlcikKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFk
UGxhaW5UZXh0KAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVm
ZmVyKSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKAorICAg
IFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAorICAgIFN0cmluZyog
aHRtbFRleHQsIEtVUkwqIHNvdXJjZVVSTCkKK3sKKyAgICBXZWJVUkwgdXJsOworICAgICpodG1s
VGV4dCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEhUTUwoCisgICAgICAgIHN0
YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCAmdXJsKTsKKyAgICAqc291
cmNlVVJMID0gdXJsOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNl
bGVjdGlvbihjb25zdCBTdHJpbmcmIGh0bWxUZXh0LAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgc291cmNlVVJMLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBwbGFpblRleHQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBib29sIHdyaXRl
U21hcnRQYXN0ZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlSFRN
TCgKKyAgICAgICAgaHRtbFRleHQsIHNvdXJjZVVSTCwgcGxhaW5UZXh0LCB3cml0ZVNtYXJ0UGFz
dGUpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dChj
b25zdCBTdHJpbmcmIHBsYWluVGV4dCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJk
KCktPndyaXRlUGxhaW5UZXh0KHBsYWluVGV4dCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6
OmNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkK
K3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlVVJMKHVybCwgdGl0bGUp
OworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZUltYWdlKE5hdGl2ZUlt
YWdlUHRyIGltYWdlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBLVVJMJiBzb3VyY2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgdGl0bGUpCit7CisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyAg
ICBXZWJJbWFnZSB3ZWJJbWFnZSgqaW1hZ2UpOworI2Vsc2UKKyAgICBXZWJJbWFnZSB3ZWJJbWFn
ZShpbWFnZSk7CisjZW5kaWYKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRl
SW1hZ2Uod2ViSW1hZ2UsIHNvdXJjZVVSTCwgdGl0bGUpOworfQorCit2b2lkIENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1ldGFkYXRhKQor
eworICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVEYXRhKHR5cGUsIGRhdGEs
IG1ldGFkYXRhKTsKK30KKworSGFzaFNldDxTdHJpbmc+IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkQXZhaWxhYmxlVHlwZXMoCisgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1
ZmZlciBidWZmZXIsIGJvb2wqIGNvbnRhaW5zRmlsZW5hbWVzKQoreworICAgIFdlYlZlY3RvcjxX
ZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEF2YWls
YWJsZVR5cGVzKAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVm
ZmVyKSwgY29udGFpbnNGaWxlbmFtZXMpOworICAgIEhhc2hTZXQ8U3RyaW5nPiB0eXBlczsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAgICAgdHlw
ZXMuYWRkKHJlc3VsdFtpXSk7CisgICAgcmV0dXJuIHR5cGVzOworfQorCitib29sIENocm9taXVt
QnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVm
ZmVyIGJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IFN0cmluZyYgdHlwZSwgU3RyaW5nJiBkYXRhLCBTdHJpbmcmIG1ldGFkYXRhKQoreworICAgIFdl
YlN0cmluZyByZXN1bHREYXRhOworICAgIFdlYlN0cmluZyByZXN1bHRNZXRhZGF0YTsKKyAgICBi
b29sIHN1Y2NlZWRlZCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZERhdGEoCisg
ICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCB0eXBlLCAm
cmVzdWx0RGF0YSwgJnJlc3VsdE1ldGFkYXRhKTsKKyAgICBpZiAoc3VjY2VlZGVkKSB7CisgICAg
ICAgIGRhdGEgPSByZXN1bHREYXRhOworICAgICAgICBtZXRhZGF0YSA9IHJlc3VsdE1ldGFkYXRh
OworICAgIH0KKyAgICByZXR1cm4gc3VjY2VlZGVkOworfQorCitWZWN0b3I8U3RyaW5nPiBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xp
cGJvYXJkQnVmZmVyIGJ1ZmZlcikKK3sKKyAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQg
PSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRGaWxlbmFtZXMoCisgICAgICAgIHN0
YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKKyAgICBWZWN0b3I8U3Ry
aW5nPiBjb252ZXJ0ZWRSZXN1bHQ7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQu
c2l6ZSgpOyArK2kpCisgICAgICAgIGNvbnZlcnRlZFJlc3VsdC5hcHBlbmQocmVzdWx0W2ldKTsK
KyAgICByZXR1cm4gY29udmVydGVkUmVzdWx0OworfQorCisvLyBDb29raWVzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3Vt
ZW50LCBjb25zdCBLVVJMJiB1cmwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgdmFsdWUpCit7CisgICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRD
b29raWVKYXIoZG9jdW1lbnQpOworICAgIGlmIChjb29raWVKYXIpCisgICAgICAgIGNvb2tpZUph
ci0+c2V0Q29va2llKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCksIHZhbHVl
KTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpjb29raWVzKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZyByZXN1bHQ7CisgICAgV2Vi
Q29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOworICAgIGlmIChj
b29raWVKYXIpCisgICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llcyh1cmwsIGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitT
dHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0
IERvY3VtZW50KiBkb2N1bWVudCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQoreworICAgIFN0cmluZyByZXN1bHQ7
CisgICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwor
ICAgIGlmIChjb29raWVKYXIpCisgICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llUmVx
dWVzdEhlYWRlckZpZWxkVmFsdWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMo
KSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6cmF3Q29v
a2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENv
b2tpZT4mIHJhd0Nvb2tpZXMpCit7CisgICAgcmF3Q29va2llcy5jbGVhcigpOworICAgIFdlYlZl
Y3RvcjxXZWJDb29raWU+IHdlYkNvb2tpZXM7CisKKyAgICBXZWJDb29raWVKYXIqIGNvb2tpZUph
ciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAg
Y29va2llSmFyLT5yYXdDb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVz
KCksIHdlYkNvb2tpZXMpOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHdlYkNvb2tp
ZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgY29uc3QgV2ViQ29va2llJiB3ZWJDb29raWUgPSB3
ZWJDb29raWVzW2ldOworICAgICAgICBDb29raWUgY29va2llKHdlYkNvb2tpZS5uYW1lLAorICAg
ICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS52YWx1ZSwKKyAgICAgICAgICAgICAgICAgICAg
ICB3ZWJDb29raWUuZG9tYWluLAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5wYXRo
LAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5leHBpcmVzLAorICAgICAgICAgICAg
ICAgICAgICAgIHdlYkNvb2tpZS5odHRwT25seSwKKyAgICAgICAgICAgICAgICAgICAgICB3ZWJD
b29raWUuc2VjdXJlLAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZXNzaW9uKTsK
KyAgICAgICAgcmF3Q29va2llcy5hcHBlbmQoY29va2llKTsKKyAgICB9CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQor
eworICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsK
KyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmws
IGNvb2tpZU5hbWUpOworfQorCitib29sIENocm9taXVtQnJpZGdlOjpjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCit7CisgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CisgICAg
aWYgKGNvb2tpZUphcikKKyAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzRW5hYmxl
ZChkb2N1bWVudC0+Y29va2llVVJMKCksIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygp
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvLyBETlMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Zv
aWQgQ2hyb21pdW1CcmlkZ2U6OnByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCit7
CisgICAgd2ViS2l0Q2xpZW50KCktPnByZWZldGNoSG9zdE5hbWUoaG9zdG5hbWUpOworfQorCisv
LyBGaWxlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitib29sIENocm9taXVtQnJpZGdlOjpmaWxlRXhpc3Rz
KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVV
dGlsaXRpZXMoKS0+ZmlsZUV4aXN0cyhwYXRoKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6
ZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5maWxlVXRpbGl0aWVzKCktPmRlbGV0ZUZpbGUocGF0aCk7Cit9CisKK2Jvb2wgQ2hyb21p
dW1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGVsZXRlRW1wdHlEaXJl
Y3RvcnkocGF0aCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVTaXplKGNvbnN0
IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCit7CisgICAgcmV0dXJuIHdlYktpdENs
aWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmdldEZpbGVTaXplKHBhdGgsIHJlc3VsdCk7Cit9CisK
K3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnJldmVhbEZvbGRlckluT1MoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnJldmVhbEZvbGRlcklu
T1MocGF0aCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVNb2RpZmljYXRpb25U
aW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiByZXN1bHQpCit7CisgICAgZG91YmxlIG1v
ZGlmaWNhdGlvblRpbWU7CisgICAgaWYgKCF3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygp
LT5nZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCBtb2RpZmljYXRpb25UaW1lKSkKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIHJlc3VsdCA9IHN0YXRpY19jYXN0PHRpbWVfdD4obW9kaWZp
Y2F0aW9uVGltZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1N0cmluZyBDaHJvbWl1bUJyaWRn
ZTo6ZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmRpcmVjdG9yeU5hbWUocGF0aCk7Cit9CisKK1N0
cmluZyBDaHJvbWl1bUJyaWRnZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmlu
ZyYgcGF0aCwgY29uc3QgU3RyaW5nJiBjb21wb25lbnQpCit7CisgICAgcmV0dXJuIHdlYktpdENs
aWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBj
b21wb25lbnQpOworfQorCitib29sIENocm9taXVtQnJpZGdlOjptYWtlQWxsRGlyZWN0b3JpZXMo
Y29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5tYWtlQWxsRGlyZWN0b3JpZXMocGF0aCk7Cit9CisKK1N0cmluZyBDaHJvbWl1
bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0QWJzb2x1dGVQYXRoKHBhdGgp
OworfQorCitib29sIENocm9taXVtQnJpZGdlOjppc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBh
dGgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmlzRGly
ZWN0b3J5KHBhdGgpOworfQorCitLVVJMIENocm9taXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+ZmlsZVBhdGhUb1VSTChwYXRoKTsKK30KKworUGxhdGZvcm1GaWxlSGFuZGxlIENo
cm9taXVtQnJpZGdlOjpvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBt
b2RlKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5vcGVu
RmlsZShwYXRoLCBtb2RlKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xvc2VGaWxlKFBs
YXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQoreworICAgIHdlYktpdENsaWVudCgpLT5maWxlVXRp
bGl0aWVzKCktPmNsb3NlRmlsZShoYW5kbGUpOworfQorCitsb25nIGxvbmcgQ2hyb21pdW1Ccmlk
Z2U6OnNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQs
IEZpbGVTZWVrT3JpZ2luIG9yaWdpbikKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZp
bGVVdGlsaXRpZXMoKS0+c2Vla0ZpbGUoaGFuZGxlLCBvZmZzZXQsIG9yaWdpbik7Cit9CisKK2Jv
b2wgQ2hyb21pdW1CcmlkZ2U6OnRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxl
LCBsb25nIGxvbmcgb2Zmc2V0KQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT50cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQpOworfQorCitpbnQgQ2hyb21p
dW1CcmlkZ2U6OnJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBk
YXRhLCBpbnQgbGVuZ3RoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxp
dGllcygpLT5yZWFkRnJvbUZpbGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOworfQorCitpbnQgQ2hy
b21pdW1CcmlkZ2U6OndyaXRlVG9GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNvbnN0
IGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5m
aWxlVXRpbGl0aWVzKCktPndyaXRlVG9GaWxlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKK30KKwor
Ly8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisjaWYgT1MoV0lORE9XUykKK2Jvb2wgQ2hyb21pdW1C
cmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCkKK3sKKyAgICBXZWJTYW5kYm94U3Vw
cG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKKworICAgIC8vIGlm
IHRoZXJlIGlzIG5vIHNhbmRib3gsIHRoZW4gd2UgY2FuIGFzc3VtZSB0aGUgZm9udAorICAgIC8v
IHdhcyBhYmxlIHRvIGJlIGxvYWRlZCBzdWNjZXNzZnVsbHkgYWxyZWFkeQorICAgIHJldHVybiBz
cyA/IHNzLT5lbnN1cmVGb250TG9hZGVkKGZvbnQpIDogdHJ1ZTsKK30KKyNlbmRpZgorCisjaWYg
T1MoTElOVVgpIHx8IE9TKEZSRUVCU0QpCitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmdldEZvbnRG
YW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hh
cmFjdGVycykKK3sKKyAgICBpZiAod2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCkpCisg
ICAgICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKS0+Z2V0Rm9udEZh
bWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbnVtQ2hhcmFjdGVycyk7CisKKyAgICBXZWJD
U3RyaW5nIGZhbWlseSA9IFdlYkZvbnRJbmZvOjpmYW1pbHlGb3JDaGFycyhjaGFyYWN0ZXJzLCBu
dW1DaGFyYWN0ZXJzKTsKKyAgICBpZiAoZmFtaWx5LmRhdGEoKSkKKyAgICAgICAgcmV0dXJuIFdl
YlN0cmluZzo6ZnJvbVVURjgoZmFtaWx5LmRhdGEoKSk7CisKKyAgICByZXR1cm4gV2ViU3RyaW5n
KCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKGNv
bnN0IGNoYXIqIGZvbnQsIGludCBzaXplQW5kU3R5bGUsIEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0
KQoreworICAgIFdlYkZvbnRSZW5kZXJTdHlsZSBzdHlsZTsKKworICAgIGlmICh3ZWJLaXRDbGll
bnQoKS0+c2FuZGJveFN1cHBvcnQoKSkKKyAgICAgICAgd2ViS2l0Q2xpZW50KCktPnNhbmRib3hT
dXBwb3J0KCktPmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKGZvbnQsIHNpemVBbmRTdHlsZSwgJnN0
eWxlKTsKKyAgICBlbHNlCisgICAgICAgIFdlYkZvbnRJbmZvOjpyZW5kZXJTdHlsZUZvclN0cmlr
ZShmb250LCBzaXplQW5kU3R5bGUsICZzdHlsZSk7CisKKyAgICBzdHlsZS50b0ZvbnRSZW5kZXJT
dHlsZShyZXN1bHQpOworfQorI2VuZGlmCisKKyNpZiBPUyhEQVJXSU4pCitib29sIENocm9taXVt
QnJpZGdlOjpsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWluZXJSZWYqIG91
dCkKK3sKKyAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJv
eFN1cHBvcnQoKTsKKyAgICBpZiAoc3MpCisgICAgICAgIHJldHVybiBzcy0+bG9hZEZvbnQoc3Jj
Rm9udCwgb3V0KTsKKworICAgIC8vIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG9ubHkgYmUgY2FsbGVk
IGluIHJlc3BvbnNlIHRvIGFuIGVycm9yIGxvYWRpbmcgYQorICAgIC8vIGZvbnQgZHVlIHRvIGJl
aW5nIGJsb2NrZWQgYnkgdGhlIHNhbmRib3guCisgICAgLy8gVGhpcyBieSBkZWZpbml0aW9uIHNo
b3VsZG4ndCBoYXBwZW4gaWYgdGhlcmUgaXMgbm8gc2FuZGJveCBzdXBwb3J0LgorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICpvdXQgPSAwOworICAgIHJldHVybiBmYWxzZTsKK30KKyNl
bmRpZgorCisvLyBEYXRhYmFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BsYXRmb3JtRmlsZUhhbmRsZSBDaHJv
bWl1bUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmlsZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lLCBp
bnQgZGVzaXJlZEZsYWdzKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VP
cGVuRmlsZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpLCBkZXNpcmVkRmxhZ3MpOworfQorCitpbnQg
Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVO
YW1lLCBib29sIHN5bmNEaXIpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFz
ZURlbGV0ZUZpbGUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwgc3luY0Rpcik7Cit9CisKK2xvbmcg
Q2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiB2
ZnNGaWxlTmFtZSkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlR2V0Rmls
ZUF0dHJpYnV0ZXMoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSk7Cit9CisKK2xvbmcgbG9uZyBDaHJv
bWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1l
KQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VHZXRGaWxlU2l6ZShXZWJT
dHJpbmcodmZzRmlsZU5hbWUpKTsKK30KKworLy8gSW5kZXhlZCBEYXRhYmFzZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNz
UmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBDaHJvbWl1bUJyaWRnZTo6aWRiRmFj
dG9yeSgpCit7CisgICAgLy8gVGhlcmUncyBubyByZWFzb24gd2h5IHdlIG5lZWQgdG8gYWxsb2Nh
dGUgYSBuZXcgcHJveHkgZWFjaCB0aW1lLCBidXQKKyAgICAvLyB0aGVyZSdzIGFsc28gbm8gc3Ry
b25nIHJlYXNvbiBub3QgdG8uCisgICAgcmV0dXJuIElEQkZhY3RvcnlCYWNrZW5kUHJveHk6OmNy
ZWF0ZSgpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjppZGJTaHV0ZG93bigpCit7CisgICAg
Ly8gSW4gdGhlIGJyb3dzZXIgcHJvY2VzcywgdGhpcyBzaHV0cyBkb3duIHRoZSB1dGlsaXR5IHBy
b2Nlc3MuIEluIHRoZSByZW5kZXJlciBwcm9jZXNzLCBpdCBkb2VzIG5vdGhpbmcuCisgICAgd2Vi
S2l0Q2xpZW50KCktPmlkYlNodXRkb3duKCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNy
ZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cykKK3sKKyAgICBXZWJWZWN0b3I8V2Vi
U2VyaWFsaXplZFNjcmlwdFZhbHVlPiB3ZWJWYWx1ZXMgPSB2YWx1ZXM7CisgICAgV2ViVmVjdG9y
PFdlYklEQktleT4gd2ViS2V5czsKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y3JlYXRlSURCS2V5c0Zy
b21TZXJpYWxpemVkVmFsdWVzQW5kS2V5UGF0aCh3ZWJWYWx1ZXMsIFdlYlN0cmluZyhrZXlQYXRo
KSwgd2ViS2V5cyk7CisKKyAgICBzaXplX3Qgd2ViS2V5c1NpemUgPSB3ZWJLZXlzLnNpemUoKTsK
KyAgICBrZXlzLnJlc2VydmVDYXBhY2l0eSh3ZWJLZXlzU2l6ZSk7CisgICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCB3ZWJLZXlzU2l6ZTsgKytpKQorICAgICAgICBrZXlzLmFwcGVuZChQYXNzUmVm
UHRyPElEQktleT4od2ViS2V5c1tpXSkpOworfQorCisvLyBLZXlnZW4gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5n
KAorICAgIHVuc2lnbmVkIGtleVNpemVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2UsIGNv
bnN0IEtVUkwmIHVybCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplSW5kZXgsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgV2ViU3RyaW5nKGNoYWxs
ZW5nZSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgV2ViVVJMKHVybCkpOworfQorCisvLyBMYW5ndWFnZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKQoreworICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGVmYXVsdExvY2FsZSgpOworfQorCisvLyBMYXlvdXRU
ZXN0TW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkKK3sK
KyAgICByZXR1cm4gV2ViS2l0OjpsYXlvdXRUZXN0TW9kZSgpOworfQorCisvLyBNaW1lVHlwZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKKyAgICAgICAg
IT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKK30KKworYm9vbCBDaHJvbWl1bUJy
aWRnZTo6aXNTdXBwb3J0ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlw
ZSkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0
c0phdmFTY3JpcHRNSU1FVHlwZShtaW1lVHlwZSkKKyAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5
OjpJc05vdFN1cHBvcnRlZDsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNTdXBwb3J0ZWRO
b25JbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNOb25JbWFnZU1JTUVUeXBlKG1p
bWVUeXBlKQorICAgICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOworfQor
CitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6Om1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmlu
ZyYgZXh0ZW5zaW9uKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5
KCktPm1pbWVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7Cit9CisKK1N0cmluZyBDaHJvbWl1
bUJyaWRnZTo6bWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+bWltZVR5cGVGcm9tRmlsZShwYXRo
KTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+bWltZVJlZ2lzdHJ5KCktPnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKG1pbWVUeXBl
KTsKK30KKworLy8gUGx1Z2luIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitib29sIENocm9taXVtQnJpZGdlOjpw
bHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbkluZm8+KiByZXN1bHRzKQoreworICAg
IFdlYlBsdWdpbkxpc3RCdWlsZGVySW1wbCBidWlsZGVyKHJlc3VsdHMpOworICAgIHdlYktpdENs
aWVudCgpLT5nZXRQbHVnaW5MaXN0KHJlZnJlc2gsICZidWlsZGVyKTsKKyAgICByZXR1cm4gdHJ1
ZTsgIC8vIEZJWE1FOiBUaGVyZSBpcyBubyBuZWVkIGZvciB0aGlzIGZ1bmN0aW9uIHRvIHJldHVy
biBhIHZhbHVlLgorfQorCitOUE9iamVjdCogQ2hyb21pdW1CcmlkZ2U6OnBsdWdpblNjcmlwdGFi
bGVPYmplY3QoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQgfHwgIXdpZGdldC0+
aXNQbHVnaW5Db250YWluZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8V2ViUGx1Z2luQ29udGFpbmVySW1wbCo+KHdpZGdldCktPnNjcmlwdGFibGVPYmpl
Y3QoKTsKK30KKworLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQYXNzUmVmUHRyPEltYWdlPiBD
aHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZShjb25zdCBjaGFyKiBuYW1l
KQoreworICAgIGNvbnN0IFdlYkRhdGEmIHJlc291cmNlID0gd2ViS2l0Q2xpZW50KCktPmxvYWRS
ZXNvdXJjZShuYW1lKTsKKyAgICBpZiAocmVzb3VyY2UuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4gSW1hZ2U6Om51bGxJbWFnZSgpOworCisgICAgUmVmUHRyPEltYWdlPiBpbWFnZSA9IEJpdG1h
cEltYWdlOjpjcmVhdGUoKTsKKyAgICBpbWFnZS0+c2V0RGF0YShyZXNvdXJjZSwgdHJ1ZSk7Cisg
ICAgcmV0dXJuIGltYWdlOworfQorCisjaWYgRU5BQkxFKFdFQl9BVURJTykKKworUGFzc093blB0
cjxBdWRpb0J1cz4gQ2hyb21pdW1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUF1ZGlvUmVzb3VyY2UoY29u
c3QgY2hhciogbmFtZSwgZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgY29uc3QgV2ViRGF0YSYg
cmVzb3VyY2UgPSB3ZWJLaXRDbGllbnQoKS0+bG9hZFJlc291cmNlKG5hbWUpOworICAgIGlmIChy
ZXNvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiAwOworICAgIAorICAgIHJldHVybiBk
ZWNvZGVBdWRpb0ZpbGVEYXRhKHJlc291cmNlLmRhdGEoKSwgcmVzb3VyY2Uuc2l6ZSgpLCBzYW1w
bGVSYXRlKTsKK30KKworUGFzc093blB0cjxBdWRpb0J1cz4gQ2hyb21pdW1CcmlkZ2U6OmRlY29k
ZUF1ZGlvRmlsZURhdGEoY29uc3QgY2hhciogZGF0YSwgc2l6ZV90IHNpemUsIGRvdWJsZSBzYW1w
bGVSYXRlKQoreworICAgIFdlYkF1ZGlvQnVzIHdlYkF1ZGlvQnVzOworICAgIGlmICh3ZWJLaXRD
bGllbnQoKS0+bG9hZEF1ZGlvUmVzb3VyY2UoJndlYkF1ZGlvQnVzLCBkYXRhLCBzaXplLCBzYW1w
bGVSYXRlKSkKKyAgICAgICAgcmV0dXJuIHdlYkF1ZGlvQnVzLnJlbGVhc2UoKTsKKyAgICByZXR1
cm4gMDsKK30KKworI2VuZGlmIC8vIEVOQUJMRShXRUJfQVVESU8pCisKKy8vIFNhbmRib3ggLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQoKQoreworICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveEVuYWJsZWQoKTsKK30KKworLy8gU2hhcmVk
VGltZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCit2b2lkIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVk
RnVuY3Rpb24odm9pZCAoKmZ1bmMpKCkpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnNldFNoYXJl
ZFRpbWVyRmlyZWRGdW5jdGlvbihmdW5jKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0
U2hhcmVkVGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpCit7CisgICAgd2ViS2l0Q2xpZW50
KCktPnNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZmlyZVRpbWUpOworfQorCit2b2lkIENocm9taXVt
QnJpZGdlOjpzdG9wU2hhcmVkVGltZXIoKQoreworICAgIHdlYktpdENsaWVudCgpLT5zdG9wU2hh
cmVkVGltZXIoKTsKK30KKworLy8gU3RhdHNDb3VudGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIENocm9taXVt
QnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICB3
ZWJLaXRDbGllbnQoKS0+ZGVjcmVtZW50U3RhdHNDb3VudGVyKG5hbWUpOworfQorCit2b2lkIENo
cm9taXVtQnJpZGdlOjppbmNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICB3ZWJLaXRDbGllbnQoKS0+aW5jcmVtZW50U3RhdHNDb3VudGVyKG5hbWUpOworfQorCit2
b2lkIENocm9taXVtQnJpZGdlOjpoaXN0b2dyYW1DdXN0b21Db3VudHMoY29uc3QgY2hhciogbmFt
ZSwgaW50IHNhbXBsZSwgaW50IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENvdW50KQoreworICAg
IHdlYktpdENsaWVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMobmFtZSwgc2FtcGxlLCBtaW4s
IG1heCwgYnVja2V0Q291bnQpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpoaXN0b2dyYW1F
bnVtZXJhdGlvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgYm91bmRhcnlWYWx1
ZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+aGlzdG9ncmFtRW51bWVyYXRpb24obmFtZSwgc2Ft
cGxlLCBib3VuZGFyeVZhbHVlKTsKK30KKworLy8gU3VkZGVuIFRlcm1pbmF0aW9uIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lk
IENocm9taXVtQnJpZGdlOjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKQor
eworICAgIHdlYktpdENsaWVudCgpLT5zdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoZW5hYmxlZCk7
Cit9CisKKy8vIFN5c3RlbVRpbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworZG91YmxlIENocm9taXVtQnJpZGdlOjpj
dXJyZW50VGltZSgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5jdXJyZW50VGltZSgp
OworfQorCisvLyBUaGVtaW5nIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZiBPUyhXSU5ET1dTKQorCit2b2lk
IENocm9taXVtQnJpZGdlOjpwYWludEJ1dHRvbigKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBp
bnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3Qm
IHJlY3QpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50QnV0dG9u
KAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwg
Y2xhc3NpY1N0YXRlLCByZWN0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRNZW51
TGlzdCgKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgd2ViS2l0Q2xp
ZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50TWVudUxpc3QoCisgICAgICAgIGdjLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwor
fQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93KAorICAgIEdyYXBo
aWNzQ29udGV4dCogZ2MsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKKyAgICBjb25zdCBJ
bnRSZWN0JiByZWN0KQoreworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWlu
dFNjcm9sbGJhckFycm93KAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6
cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwg
aW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVGh1bWIo
CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBj
bGFzc2ljU3RhdGUsIHJlY3QpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9s
bGJhclRyYWNrKAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUs
IGludCBjbGFzc2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVj
dCYgYWxpZ25SZWN0KQoreworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWlu
dFNjcm9sbGJhclRyYWNrKAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0LAorICAgICAgICBhbGlnblJlY3QpOwor
fQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oCisgICAgR3JhcGhpY3ND
b250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKKyAgICBj
b25zdCBJbnRSZWN0JiByZWN0KQoreworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgp
LT5wYWludFNwaW5CdXR0b24oCisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOworfQorCit2b2lkIENocm9taXVt
QnJpZGdlOjpwYWludFRleHRGaWVsZCgKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFy
dCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3Qs
IGNvbnN0IENvbG9yJiBjb2xvciwgYm9vbCBmaWxsQ29udGVudEFyZWEsCisgICAgYm9vbCBkcmF3
RWRnZXMpCit7CisgICAgLy8gRmFsbGJhY2sgdG8gd2hpdGUgd2hlbiB8Y29sb3J8IGlzIGludmFs
aWQuCisgICAgUkdCQTMyIGJhY2tncm91bmRDb2xvciA9IGNvbG9yLmlzVmFsaWQoKSA/IGNvbG9y
LnJnYigpIDogQ29sb3I6OndoaXRlOworCisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5l
KCktPnBhaW50VGV4dEZpZWxkKAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0LAorICAgICAgICBiYWNrZ3JvdW5k
Q29sb3IsIGZpbGxDb250ZW50QXJlYSwgZHJhd0VkZ2VzKTsKK30KKwordm9pZCBDaHJvbWl1bUJy
aWRnZTo6cGFpbnRUcmFja2JhcigKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwg
aW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCit7
CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50VHJhY2tiYXIoCisgICAg
ICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2lj
U3RhdGUsIHJlY3QpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFByb2dyZXNzQmFy
KAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGNvbnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0
IEludFJlY3QmIHZhbHVlUmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vj
b25kcykKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRQcm9ncmVz
c0JhcigKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgYmFyUmVjdCwg
dmFsdWVSZWN0LCBkZXRlcm1pbmF0ZSwgYW5pbWF0ZWRTZWNvbmRzKTsKK30KKworI2VsaWYgT1Mo
TElOVVgpCisKK3N0YXRpYyBXZWJUaGVtZUVuZ2luZTo6UGFydCBXZWJUaGVtZVBhcnQoQ2hyb21p
dW1CcmlkZ2U6OlRoZW1lUGFydCBwYXJ0KQoreworICAgIHN3aXRjaCAocGFydCkgeworICAgIGNh
c2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c6IHJldHVybiBXZWJUaGVt
ZUVuZ2luZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdl
OjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3Jv
bGxiYXJMZWZ0QXJyb3c7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclJp
Z2h0QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclJpZ2h0QXJyb3c7
CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3c6IHJldHVybiBX
ZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclVwQXJyb3c7CisgICAgY2FzZSBDaHJvbWl1bUJy
aWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYjogcmV0dXJuIFdlYlRoZW1lRW5naW5l
OjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iOworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6
OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRT
Y3JvbGxiYXJWZXJ0aWNhbFRodW1iOworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJIb3Jpem9udGFsVHJhY2s6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJh
ckhvcml6b250YWxUcmFjazsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
VmVydGljYWxUcmFjazogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVmVydGlj
YWxUcmFjazsKKyAgICB9CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFdl
YlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OworfQorCitzdGF0aWMgV2ViVGhl
bWVFbmdpbmU6OlN0YXRlIFdlYlRoZW1lU3RhdGUoQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRT
dGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBDaHJvbWl1bUJy
aWRnZTo6U3RhdGVEaXNhYmxlZDogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZURpc2FibGVk
OworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlSG92ZXI6IHJldHVybiBXZWJUaGVtZUVu
Z2luZTo6U3RhdGVIb3ZlcjsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZU5vcm1hbDog
cmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZU5vcm1hbDsKKyAgICBjYXNlIENocm9taXVtQnJp
ZGdlOjpTdGF0ZVByZXNzZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkOwor
ICAgIH0KKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlN0YXRlRGlzYWJsZWQ7Cit9CisKK3N0YXRpYyB2b2lkIEdldFdlYlRoZW1lRXh0cmFQYXJh
bXMoQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFydCBwYXJ0LCBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQ
YWludFN0YXRlIHN0YXRlLCBjb25zdCBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFy
YW1zKiBleHRyYVBhcmFtcywgV2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zKiB3ZWJUaGVtZUV4
dHJhUGFyYW1zKQoreworICAgIGlmIChwYXJ0ID09IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xs
YmFySG9yaXpvbnRhbFRyYWNrIHx8IHBhcnQgPT0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxi
YXJWZXJ0aWNhbFRyYWNrKSB7CisgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJh
clRyYWNrLnRyYWNrWCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1g7CisgICAg
ICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWSA9IGV4dHJhUGFy
YW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1k7CisgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMt
PnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGggPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2su
dHJhY2tXaWR0aDsKKyAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2su
dHJhY2tIZWlnaHQgPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tIZWlnaHQ7Cisg
ICAgfQorfQorCitJbnRTaXplIENocm9taXVtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKFRoZW1l
UGFydCBwYXJ0KQoreworICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCkt
PmdldFNpemUoV2ViVGhlbWVQYXJ0KHBhcnQpKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6
cGFpbnRUaGVtZVBhcnQoCisgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgVGhlbWVQYXJ0IHBhcnQs
IFRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhlbWVQ
YWludEV4dHJhUGFyYW1zKiBleHRyYVBhcmFtcykKK3sKKyAgICBXZWJUaGVtZUVuZ2luZTo6RXh0
cmFQYXJhbXMgd2ViVGhlbWVFeHRyYVBhcmFtczsKKyAgICBHZXRXZWJUaGVtZUV4dHJhUGFyYW1z
KHBhcnQsIHN0YXRlLCBleHRyYVBhcmFtcywgJndlYlRoZW1lRXh0cmFQYXJhbXMpOworICAgIHdl
YktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludCgKKyAgICAgICAgZ2MtPnBsYXRmb3Jt
Q29udGV4dCgpLT5jYW52YXMoKSwgV2ViVGhlbWVQYXJ0KHBhcnQpLCBXZWJUaGVtZVN0YXRlKHN0
YXRlKSwgcmVjdCwgJndlYlRoZW1lRXh0cmFQYXJhbXMpOworfQorCisjZWxpZiBPUyhEQVJXSU4p
CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCisgICAgR3JhcGhp
Y3NDb250ZXh0KiBnYywgVGhlbWVQYWludFN0YXRlIHN0YXRlLCBUaGVtZVBhaW50U2l6ZSBzaXpl
LCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBUaGVtZVBhaW50U2Nyb2xsYmFySW5mbyYgc2Ny
b2xsYmFySW5mbykKK3sKKyAgICBXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFySW5mbyB3ZWJUaGVt
ZVNjcm9sbGJhckluZm87CisKKyAgICB3ZWJUaGVtZVNjcm9sbGJhckluZm8ub3JpZW50YXRpb24g
PSBzdGF0aWNfY2FzdDxXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyT3JpZW50YXRpb24+KHNjcm9s
bGJhckluZm8ub3JpZW50YXRpb24pOworICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5wYXJlbnQg
PSBzdGF0aWNfY2FzdDxXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFyZW50PihzY3JvbGxiYXJJ
bmZvLnBhcmVudCk7CisgICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLm1heFZhbHVlID0gc2Nyb2xs
YmFySW5mby5tYXhWYWx1ZTsKKyAgICB3ZWJUaGVtZVNjcm9sbGJhckluZm8uY3VycmVudFZhbHVl
ID0gc2Nyb2xsYmFySW5mby5jdXJyZW50VmFsdWU7CisgICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZv
LnZpc2libGVTaXplID0gc2Nyb2xsYmFySW5mby52aXNpYmxlU2l6ZTsKKyAgICB3ZWJUaGVtZVNj
cm9sbGJhckluZm8udG90YWxTaXplID0gc2Nyb2xsYmFySW5mby50b3RhbFNpemU7CisKKyAgICB3
ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICAg
ICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJUaGVtZUVu
Z2luZTo6U3RhdGU+KHN0YXRlKSwKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6
OlNpemU+KHNpemUpLAorICAgICAgICByZWN0LAorICAgICAgICB3ZWJUaGVtZVNjcm9sbGJhcklu
Zm8pOworfQorCisjZW5kaWYKKworLy8gVHJhY2UgRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCit2b2lkIENocm9t
aXVtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNv
bnN0IGNoYXIqIGV4dHJhKQoreworICAgIHdlYktpdENsaWVudCgpLT50cmFjZUV2ZW50QmVnaW4o
bmFtZSwgaWQsIGV4dHJhKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVu
ZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPnRyYWNlRXZlbnRFbmQobmFtZSwgaWQsIGV4dHJhKTsKK30KKworLy8g
VmlzaXRlZCBMaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQorCitMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExp
bmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0aCkKK3sKKyAgICB1cmxfY2Fu
b246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IGJ1ZmZlcjsKKyAgICB1cmxfcGFyc2U6OlBhcnNlZCBw
YXJzZWQ7CisgICAgaWYgKCF1cmxfdXRpbDo6Q2Fub25pY2FsaXplKHVybCwgbGVuZ3RoLCAwLCAm
YnVmZmVyLCAmcGFyc2VkKSkKKyAgICAgICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIFVSTHMgYXJl
IHVudmlzaXRlZC4KKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChi
dWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOworfQorCitMaW5rSGFzaCBDaHJvbWl1bUJy
aWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJM
KQoreworICAgIC8vIFJlc29sdmUgdGhlIHJlbGF0aXZlIFVSTCB1c2luZyBnb29nbGV1cmwgYW5k
IHBhc3MgdGhlIGFic29sdXRlIFVSTCB1cCB0bworICAgIC8vIHRoZSBlbWJlZGRlci4gV2UgY291
bGQgY3JlYXRlIGEgR1VSTCBvYmplY3QgZnJvbSB0aGUgYmFzZSBhbmQgcmVzb2x2ZQorICAgIC8v
IHRoZSByZWxhdGl2ZSBVUkwgdGhhdCB3YXksIGJ1dCBjYWxsaW5nIHRoZSBsb3dlci1sZXZlbCBm
dW5jdGlvbnMKKyAgICAvLyBkaXJlY3RseSBzYXZlcyB1cyB0aGUgc3RyaW5nIGFsbG9jYXRpb24g
aW4gbW9zdCBjYXNlcy4KKyAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IGJ1ZmZl
cjsKKyAgICB1cmxfcGFyc2U6OlBhcnNlZCBwYXJzZWQ7CisKKyNpZiBVU0UoR09PR0xFVVJMKQor
ICAgIGNvbnN0IENTdHJpbmcmIGNzdHIgPSBiYXNlLnV0ZjhTdHJpbmcoKTsKKyAgICBjb25zdCBj
aGFyKiBkYXRhID0gY3N0ci5kYXRhKCk7CisgICAgaW50IGxlbmd0aCA9IGNzdHIubGVuZ3RoKCk7
CisgICAgY29uc3QgdXJsX3BhcnNlOjpQYXJzZWQmIHNyY1BhcnNlZCA9IGJhc2UucGFyc2VkKCk7
CisjZWxzZQorICAgIC8vIFdoZW4gd2UncmUgbm90IHVzaW5nIEdvb2dsZVVSTCwgZmlyc3QgY2Fu
b25pY2FsaXplIGl0IHNvIHdlIGNhbiByZXNvbHZlIGl0CisgICAgLy8gYmVsb3cuCisgICAgdXJs
X2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4PiBzcmNDYW5vbjsKKyAgICB1cmxfcGFyc2U6OlBh
cnNlZCBzcmNQYXJzZWQ7CisgICAgU3RyaW5nIHN0ciA9IGJhc2Uuc3RyaW5nKCk7CisgICAgaWYg
KCF1cmxfdXRpbDo6Q2Fub25pY2FsaXplKHN0ci5jaGFyYWN0ZXJzKCksIHN0ci5sZW5ndGgoKSwg
MCwgJnNyY0Nhbm9uLCAmc3JjUGFyc2VkKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY29uc3Qg
Y2hhciogZGF0YSA9IHNyY0Nhbm9uLmRhdGEoKTsKKyAgICBpbnQgbGVuZ3RoID0gc3JjQ2Fub24u
bGVuZ3RoKCk7CisjZW5kaWYKKworICAgIGlmICghdXJsX3V0aWw6OlJlc29sdmVSZWxhdGl2ZShk
YXRhLCBsZW5ndGgsIHNyY1BhcnNlZCwgYXR0cmlidXRlVVJMLmNoYXJhY3RlcnMoKSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR0cmlidXRlVVJMLmxlbmd0aCgpLCAwLCAm
YnVmZmVyLCAmcGFyc2VkKSkKKyAgICAgICAgcmV0dXJuIDA7ICAvLyBJbnZhbGlkIHJlc29sdmVk
IFVSTC4KKworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZl
ci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6Omlz
TGlua1Zpc2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQoreworICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+aXNMaW5rVmlzaXRlZCh2aXNpdGVkTGlua0hhc2gpOworfQorCisvLyBUaGVz
ZSBhcmUgdGVtcG9yYXJ5IG1ldGhvZHMgdGhhdCB0aGUgV2ViS2l0IGxheWVyIGNhbiB1c2UgdG8g
Y2FsbCB0byB0aGUKKy8vIEdsdWUgbGF5ZXIuIE9uY2UgdGhlIEdsdWUgbGF5ZXIgbW92ZXMgZW50
aXJlbHkgaW50byB0aGUgV2ViS2l0IGxheWVyLCB0aGVzZQorLy8gbWV0aG9kcyB3aWxsIGJlIGRl
bGV0ZWQuCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6Om5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUq
IGZyYW1lKQoreworICAgIGlmICghZnJhbWUpCisgICAgICAgIHJldHVybjsKKworICAgIFdlYkZy
YW1lSW1wbCogd2ViRnJhbWUgPSBXZWJGcmFtZUltcGw6OmZyb21GcmFtZShmcmFtZSk7CisgICAg
aWYgKCF3ZWJGcmFtZS0+Y2xpZW50KCkpCisgICAgICAgIHJldHVybjsKKyAgICB3ZWJGcmFtZS0+
Y2xpZW50KCktPmRpZEV4aGF1c3RNZW1vcnlBdmFpbGFibGVGb3JTY3JpcHQod2ViRnJhbWUpOwor
fQorCitpbnQgQ2hyb21pdW1CcmlkZ2U6Om1lbW9yeVVzYWdlTUIoKQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHdlYktpdENsaWVudCgpLT5tZW1vcnlVc2FnZU1CKCkpOworfQorCitp
bnQgQ2hyb21pdW1CcmlkZ2U6OmFjdHVhbE1lbW9yeVVzYWdlTUIoKQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxpbnQ+KHdlYktpdENsaWVudCgpLT5hY3R1YWxNZW1vcnlVc2FnZU1CKCkpOwor
fQorCitpbnQgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRlcHRoKFdpZGdldCogd2lkZ2V0KQorewor
ICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsK
KyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNsaWVudC0+
c2NyZWVuSW5mbygpLmRlcHRoOworfQorCitpbnQgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRlcHRo
UGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQoreworICAgIFdlYldpZGdldENsaWVudCogY2xp
ZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLmRlcHRoUGVyQ29t
cG9uZW50OworfQorCitib29sIENocm9taXVtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUoV2lk
Z2V0KiB3aWRnZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdl
dENsaWVudCh3aWRnZXQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4gMDsKKyAg
ICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuaXNNb25vY2hyb21lOworfQorCitJbnRSZWN0
IENocm9taXVtQnJpZGdlOjpzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAgIFdlYldp
ZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKKyAgICBpZiAo
IWNsaWVudCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gY2xpZW50LT5z
Y3JlZW5JbmZvKCkucmVjdDsKK30KKworSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuQXZh
aWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVu
dCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7CisgICAgaWYgKCFjbGllbnQpCisgICAgICAg
IHJldHVybiBJbnRSZWN0KCk7CisgICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLmF2YWls
YWJsZVJlY3Q7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OnBvcHVwc0FsbG93ZWQoTlBQIG5w
cCkKK3sKKyAgICAvLyBGSVhNRTogR2l2ZSB0aGUgZW1iZWRkZXIgYSB3YXkgdG8gY29udHJvbCB0
aGlzLgorICAgIHJldHVybiBmYWxzZTsKK30KKworV29ya2VyQ29udGV4dFByb3h5KiBXb3JrZXJD
b250ZXh0UHJveHk6OmNyZWF0ZShXb3JrZXIqIHdvcmtlcikKK3sKKyAgICByZXR1cm4gV2ViV29y
a2VyQ2xpZW50SW1wbDo6Y3JlYXRlV29ya2VyQ29udGV4dFByb3h5KHdvcmtlcik7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Bs
YXRmb3JtQnJpZGdlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3Ny
Yy9QbGF0Zm9ybUJyaWRnZS5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysgU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJp
ZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogI2luY2x1ZGUgPGdvb2dsZXVy
bC9zcmMvdXJsX3V0aWwuaD4KIApAQCAtMTQ1LDE0ICsxNDUsMTQgQEAgc3RhdGljIFdlYkNvb2tp
ZUphciogZ2V0Q29va2llSmFyKGNvbnN0IAogCiAvLyBDYWNoZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZv
aWQgQ2hyb21pdW1CcmlkZ2U6OmNhY2hlTWV0YWRhdGEoY29uc3QgS1VSTCYgdXJsLCBkb3VibGUg
cmVzcG9uc2VUaW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCit2b2lkIFBsYXRmb3JtQnJp
ZGdlOjpjYWNoZU1ldGFkYXRhKGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHJlc3BvbnNlVGltZSwg
Y29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKQogewogICAgIHdlYktpdENsaWVudCgpLT5jYWNoZU1l
dGFkYXRhKHVybCwgcmVzcG9uc2VUaW1lLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwogfQog
CiAvLyBDbGlwYm9hcmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2Fy
ZElzRm9ybWF0QXZhaWxhYmxlKAorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3Jt
YXRBdmFpbGFibGUoCiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCBmb3Jt
YXQsCiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCiB7CkBA
IC0xNjEsMTQgKzE2MSwxNCBAQCBib29sIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1h
dEF2CiAgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsK
IH0KIAotU3RyaW5nIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KAorU3Ry
aW5nIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KAogICAgIFBhc3RlYm9h
cmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQogewogICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRQbGFpblRleHQoCiAgICAgICAgIHN0YXRpY19jYXN0
PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6Y2xpcGJvYXJkUmVhZEhUTUwoCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFk
SFRNTCgKICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwKICAg
ICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VVUkwpCiB7CkBAIC0xNzgsNyArMTc4LDcg
QEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoCiAgICAgKnNvdXJjZVVS
TCA9IHVybDsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rp
b24oY29uc3QgU3RyaW5nJiBodG1sVGV4dCwKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlU2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgaHRtbFRleHQsCiAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBzb3VyY2VVUkwsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBs
YWluVGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgd3JpdGVTbWFydFBhc3RlKQpAQCAtMTg3LDE3ICsxODcsMTcgQEAgdm9pZCBDaHJvbWl1bUJy
aWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlYwogICAgICAgICBodG1sVGV4dCwgc291cmNlVVJMLCBw
bGFpblRleHQsIHdyaXRlU21hcnRQYXN0ZSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0KQordm9pZCBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwbGFpblRl
eHQpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZVBsYWluVGV4dChw
bGFpblRleHQpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVSTChj
b25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCit2b2lkIFBsYXRmb3JtQnJpZGdl
OjpjbGlwYm9hcmRXcml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUp
CiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZVVSTCh1cmwsIHRpdGxl
KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJ
bWFnZVB0ciBpbWFnZSwKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2Uo
TmF0aXZlSW1hZ2VQdHIgaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKQEAgLTIwOSwxNCArMjA5LDE0
IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UKICAgICB3ZWJLaXRD
bGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlSW1hZ2Uod2ViSW1hZ2UsIHNvdXJjZVVSTCwgdGl0
bGUpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEoY29uc3Qg
U3RyaW5nJiB0eXBlLAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVEYXRhKGNv
bnN0IFN0cmluZyYgdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBTdHJpbmcmIGRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiBtZXRhZGF0YSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+Y2xp
cGJvYXJkKCktPndyaXRlRGF0YSh0eXBlLCBkYXRhLCBtZXRhZGF0YSk7CiB9CiAKLUhhc2hTZXQ8
U3RyaW5nPiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKAorSGFz
aFNldDxTdHJpbmc+IFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMo
CiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsIGJvb2wqIGNv
bnRhaW5zRmlsZW5hbWVzKQogewogICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdl
YktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZEF2YWlsYWJsZVR5cGVzKApAQCAtMjI3LDcg
KzIyNyw3IEBAIEhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXIKICAgICBy
ZXR1cm4gdHlwZXM7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRh
KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAorYm9vbCBQbGF0Zm9y
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1
ZmZlciBidWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHR5cGUsIFN0cmluZyYgZGF0YSwgU3RyaW5nJiBtZXRhZGF0YSkKIHsKICAgICBX
ZWJTdHJpbmcgcmVzdWx0RGF0YTsKQEAgLTI0MSw3ICsyNDEsNyBAQCBib29sIENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkRGF0YShQCiAgICAgcmV0dXJuIHN1Y2NlZWRlZDsKIH0KIAotVmVj
dG9yPFN0cmluZz4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMoUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCitWZWN0b3I8U3RyaW5nPiBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xp
cGJvYXJkQnVmZmVyIGJ1ZmZlcikKIHsKICAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQg
PSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRGaWxlbmFtZXMoCiAgICAgICAgIHN0
YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKQEAgLTI1Myw3ICsyNTMs
NyBAQCBWZWN0b3I8U3RyaW5nPiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkCiAKIC8vIENvb2tp
ZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0Q29va2llcyhjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6
OnNldENvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsCiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAg
ICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwpAQCAt
MjYxLDcgKzI2MSw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldENvb2tpZXMoY29uc3QgRG8K
ICAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSwgdmFsdWUpOwogfQogCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXMo
Y29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCitTdHJpbmcgUGxhdGZv
cm1CcmlkZ2U6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwpCiB7CiAgICAgU3RyaW5nIHJlc3VsdDsKICAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9
IGdldENvb2tpZUphcihkb2N1bWVudCk7CkBAIC0yNzAsNyArMjcwLDcgQEAgU3RyaW5nIENocm9t
aXVtQnJpZGdlOjpjb29raWVzKGNvbnN0IERvYwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLVN0
cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LAorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVybCkK
IHsKICAgICBTdHJpbmcgcmVzdWx0OwpAQCAtMjgwLDcgKzI4MCw3IEBAIFN0cmluZyBDaHJvbWl1
bUJyaWRnZTo6Y29va2llUmVxdWVzdEhlYWQKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1ib29s
IENocm9taXVtQnJpZGdlOjpyYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK2Jvb2wgUGxhdGZvcm1C
cmlkZ2U6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1
cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQogewogICAgIHJhd0Nvb2tpZXMuY2xlYXIo
KTsKICAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwpAQCAtMzA0LDE0ICszMDQs
MTQgQEAgYm9vbCBDaHJvbWl1bUJyaWRnZTo6cmF3Q29va2llcyhjb25zdCBEbwogICAgIHJldHVy
biB0cnVlOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpkZWxldGVDb29raWUoY29uc3QgRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFt
ZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewogICAg
IFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKICAgICBp
ZiAoY29va2llSmFyKQogICAgICAgICBjb29raWVKYXItPmRlbGV0ZUNvb2tpZSh1cmwsIGNvb2tp
ZU5hbWUpOwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjpjb29raWVzRW5hYmxlZChjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQpCitib29sIFBsYXRmb3JtQnJpZGdlOjpjb29raWVzRW5hYmxlZChj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQpCiB7CiAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKICAg
ICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CkBAIC0z
MjIsMzkgKzMyMiwzOSBAQCBib29sIENocm9taXVtQnJpZGdlOjpjb29raWVzRW5hYmxlZChjb25z
CiAKIC8vIEROUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cHJlZmV0
Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnByZWZl
dGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnBy
ZWZldGNoSG9zdE5hbWUoaG9zdG5hbWUpOwogfQogCiAvLyBGaWxlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog
Ci1ib29sIENocm9taXVtQnJpZGdlOjpmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKK2Jv
b2wgUGxhdGZvcm1CcmlkZ2U6OmZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5maWxlRXhpc3RzKHBhdGgp
OwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjpkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0
aCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQog
ewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVGaWxl
KHBhdGgpOwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsYXRmb3JtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVj
dG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5m
aWxlVXRpbGl0aWVzKCktPmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOwogfQogCi1ib29sIENo
cm9taXVtQnJpZGdlOjpnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYg
cmVzdWx0KQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBw
YXRoLCBsb25nIGxvbmcmIHJlc3VsdCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZp
bGVVdGlsaXRpZXMoKS0+Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0KTsKIH0KIAotdm9pZCBDaHJv
bWl1bUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcmIHBhdGgpCit2b2lkIFBs
YXRmb3JtQnJpZGdlOjpyZXZlYWxGb2xkZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAg
ICB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5yZXZlYWxGb2xkZXJJbk9TKHBhdGgp
OwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25z
dCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6Z2V0
RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIHJlc3VsdCkK
IHsKICAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZTsKICAgICBpZiAoIXdlYktpdENsaWVudCgp
LT5maWxlVXRpbGl0aWVzKCktPmdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBhdGgsIG1vZGlmaWNh
dGlvblRpbWUpKQpAQCAtMzYzLDYyICszNjMsNjIgQEAgYm9vbCBDaHJvbWl1bUJyaWRnZTo6Z2V0
RmlsZU1vZGlmaWNhdGlvbgogICAgIHJldHVybiB0cnVlOwogfQogCi1TdHJpbmcgQ2hyb21pdW1C
cmlkZ2U6OmRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBwYXRoKQorU3RyaW5nIFBsYXRmb3Jt
QnJpZGdlOjpkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGlyZWN0b3J5TmFtZShwYXRoKTsKIH0K
IAotU3RyaW5nIENocm9taXVtQnJpZGdlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3Qg
U3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKK1N0cmluZyBQbGF0Zm9ybUJy
aWRnZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3Qg
U3RyaW5nJiBjb21wb25lbnQpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRp
bGl0aWVzKCktPnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBjb21wb25lbnQpOwogfQog
Ci1ib29sIENocm9taXVtQnJpZGdlOjptYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBw
YXRoKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmlu
ZyYgcGF0aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+
bWFrZUFsbERpcmVjdG9yaWVzKHBhdGgpOwogfQogCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6Omdl
dEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6
OmdldEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmdldEFic29sdXRlUGF0aChwYXRoKTsKIH0KIAot
Ym9vbCBDaHJvbWl1bUJyaWRnZTo6aXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQorYm9v
bCBQbGF0Zm9ybUJyaWRnZTo6aXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5pc0RpcmVjdG9yeShwYXRo
KTsKIH0KIAotS1VSTCBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChjb25zdCBTdHJpbmcm
IHBhdGgpCitLVVJMIFBsYXRmb3JtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYg
cGF0aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Zmls
ZVBhdGhUb1VSTChwYXRoKTsKIH0KIAotUGxhdGZvcm1GaWxlSGFuZGxlIENocm9taXVtQnJpZGdl
OjpvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgsIEZpbGVPcGVuTW9kZSBtb2RlKQorUGxhdGZv
cm1GaWxlSGFuZGxlIFBsYXRmb3JtQnJpZGdlOjpvcGVuRmlsZShjb25zdCBTdHJpbmcmIHBhdGgs
IEZpbGVPcGVuTW9kZSBtb2RlKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5vcGVuRmlsZShwYXRoLCBtb2RlKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6Y2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQordm9pZCBQbGF0Zm9ybUJy
aWRnZTo6Y2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSYgaGFuZGxlKQogewogICAgIHdlYktp
dENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmNsb3NlRmlsZShoYW5kbGUpOwogfQogCi1sb25n
IGxvbmcgQ2hyb21pdW1CcmlkZ2U6OnNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUs
IGxvbmcgbG9uZyBvZmZzZXQsIEZpbGVTZWVrT3JpZ2luIG9yaWdpbikKK2xvbmcgbG9uZyBQbGF0
Zm9ybUJyaWRnZTo6c2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25n
IG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQogewogICAgIHJldHVybiB3ZWJLaXRDbGll
bnQoKS0+ZmlsZVV0aWxpdGllcygpLT5zZWVrRmlsZShoYW5kbGUsIG9mZnNldCwgb3JpZ2luKTsK
IH0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6dHJ1bmNhdGVGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQpCitib29sIFBsYXRmb3JtQnJpZGdlOjp0cnVuY2F0
ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCkKIHsKICAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+dHJ1bmNhdGVGaWxlKGhh
bmRsZSwgb2Zmc2V0KTsKIH0KIAotaW50IENocm9taXVtQnJpZGdlOjpyZWFkRnJvbUZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK2ludCBQbGF0
Zm9ybUJyaWRnZTo6cmVhZEZyb21GaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIq
IGRhdGEsIGludCBsZW5ndGgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRp
bGl0aWVzKCktPnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CiAKLWludCBD
aHJvbWl1bUJyaWRnZTo6d3JpdGVUb0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29u
c3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK2ludCBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0Zp
bGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0
aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+d3JpdGVU
b0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOwogfQpAQCAtNDI2LDcgKzQyNiw3IEBAIGludCBD
aHJvbWl1bUJyaWRnZTo6d3JpdGVUb0ZpbGUoUGxhdGZvcm0KIC8vIEZvbnQgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAogI2lmIE9TKFdJTkRPV1MpCi1ib29sIENocm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9h
ZGVkKEhGT05UIGZvbnQpCitib29sIFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKEhG
T05UIGZvbnQpCiB7CiAgICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0Q2xpZW50KCkt
PnNhbmRib3hTdXBwb3J0KCk7CiAKQEAgLTQzNyw3ICs0MzcsNyBAQCBib29sIENocm9taXVtQnJp
ZGdlOjplbnN1cmVGb250TG9hZGVkKEhGCiAjZW5kaWYKIAogI2lmIE9TKExJTlVYKSB8fCBPUyhG
UkVFQlNEKQotU3RyaW5nIENocm9taXVtQnJpZGdlOjpnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVy
cyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3RlcnMpCitTdHJpbmcg
UGxhdGZvcm1CcmlkZ2U6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzLCBzaXplX3QgbnVtQ2hhcmFjdGVycykKIHsKICAgICBpZiAod2ViS2l0Q2xpZW50
KCktPnNhbmRib3hTdXBwb3J0KCkpCiAgICAgICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2Fu
ZGJveFN1cHBvcnQoKS0+Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywgbnVt
Q2hhcmFjdGVycyk7CkBAIC00NDksNyArNDQ5LDcgQEAgU3RyaW5nIENocm9taXVtQnJpZGdlOjpn
ZXRGb250RmFtaWx5Rm9yQwogICAgIHJldHVybiBXZWJTdHJpbmcoKTsKIH0KIAotdm9pZCBDaHJv
bWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29uc3QgY2hhciogZm9udCwgaW50
IHNpemVBbmRTdHlsZSwgRm9udFJlbmRlclN0eWxlKiByZXN1bHQpCit2b2lkIFBsYXRmb3JtQnJp
ZGdlOjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFyKiBmb250LCBpbnQgc2l6ZUFu
ZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCkKIHsKICAgICBXZWJGb250UmVuZGVyU3R5
bGUgc3R5bGU7CiAKQEAgLTQ2Myw3ICs0NjMsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpnZXRS
ZW5kZXJTdHlsZUZvclN0CiAjZW5kaWYKIAogI2lmIE9TKERBUldJTikKLWJvb2wgQ2hyb21pdW1C
cmlkZ2U6OmxvYWRGb250KE5TRm9udCogc3JjRm9udCwgQVRTRm9udENvbnRhaW5lclJlZiogb3V0
KQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6bG9hZEZvbnQoTlNGb250KiBzcmNGb250LCBBVFNGb250
Q29udGFpbmVyUmVmKiBvdXQpCiB7CiAgICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0
Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCk7CiAgICAgaWYgKHNzKQpAQCAtNDgwLDQyICs0ODAs
NDIgQEAgYm9vbCBDaHJvbWl1bUJyaWRnZTo6bG9hZEZvbnQoTlNGb250KiBzcgogCiAvLyBEYXRh
YmFzZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLVBsYXRmb3JtRmlsZUhhbmRsZSBDaHJvbWl1bUJyaWRnZTo6ZGF0
YWJhc2VPcGVuRmlsZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdz
KQorUGxhdGZvcm1GaWxlSGFuZGxlIFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGNv
bnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpCiB7CiAgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5kYXRhYmFzZU9wZW5GaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSks
IGRlc2lyZWRGbGFncyk7CiB9CiAKLWludCBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVG
aWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpcikKK2ludCBQbGF0Zm9y
bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGJv
b2wgc3luY0RpcikKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlRGVsZXRl
RmlsZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpLCBzeW5jRGlyKTsKIH0KIAotbG9uZyBDaHJvbWl1
bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVO
YW1lKQorbG9uZyBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25z
dCBTdHJpbmcmIHZmc0ZpbGVOYW1lKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0
YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKIH0KIAotbG9u
ZyBsb25nIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYg
dmZzRmlsZU5hbWUpCitsb25nIGxvbmcgUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNp
emUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPmRhdGFiYXNlR2V0RmlsZVNpemUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSk7CiB9CiAKIC8v
IEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZT4gQ2hyb21pdW1CcmlkZ2U6OmlkYkZhY3RvcnkoKQorUGFzc1JlZlB0cjxJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZT4gUGxhdGZvcm1CcmlkZ2U6OmlkYkZhY3RvcnkoKQogewogICAgIC8v
IFRoZXJlJ3Mgbm8gcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHByb3h5IGVh
Y2ggdGltZSwgYnV0CiAgICAgLy8gdGhlcmUncyBhbHNvIG5vIHN0cm9uZyByZWFzb24gbm90IHRv
LgogICAgIHJldHVybiBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpjcmVhdGUoKTsKIH0KIAotdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6aWRiU2h1dGRvd24oKQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6aWRi
U2h1dGRvd24oKQogewogICAgIC8vIEluIHRoZSBicm93c2VyIHByb2Nlc3MsIHRoaXMgc2h1dHMg
ZG93biB0aGUgdXRpbGl0eSBwcm9jZXNzLiBJbiB0aGUgcmVuZGVyZXIgcHJvY2VzcywgaXQgZG9l
cyBub3RoaW5nLgogICAgIHdlYktpdENsaWVudCgpLT5pZGJTaHV0ZG93bigpOwogfQogCi12b2lk
IENocm9taXVtQnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQ
YXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2YWx1ZXMs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMpCit2
b2lkIFBsYXRmb3JtQnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRL
ZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2YWx1
ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMp
CiB7CiAgICAgV2ViVmVjdG9yPFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gd2ViVmFsdWVzID0g
dmFsdWVzOwogICAgIFdlYlZlY3RvcjxXZWJJREJLZXk+IHdlYktleXM7CkBAIC01MjksNyArNTI5
LDcgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZQogCiAvLyBLZXln
ZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6c2lnbmVkUHVibGljS2V5
QW5kQ2hhbGxlbmdlU3RyaW5nKAorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpzaWduZWRQdWJsaWNL
ZXlBbmRDaGFsbGVuZ2VTdHJpbmcoCiAgICAgdW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25zdCBT
dHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYgdXJsKQogewogICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtleVNpemVJbmRleCwK
QEAgLTUzOSw2MyArNTM5LDYzIEBAIFN0cmluZyBDaHJvbWl1bUJyaWRnZTo6c2lnbmVkUHVibGlj
S2V5QW4KIAogLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6
OmNvbXB1dGVkRGVmYXVsdExhbmd1YWdlKCkKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0
ZWREZWZhdWx0TGFuZ3VhZ2UoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGVmYXVs
dExvY2FsZSgpOwogfQogCiAvLyBMYXlvdXRUZXN0TW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgQ2hyb21pdW1C
cmlkZ2U6OmxheW91dFRlc3RNb2RlKCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RN
b2RlKCkKIHsKICAgICByZXR1cm4gV2ViS2l0OjpsYXlvdXRUZXN0TW9kZSgpOwogfQogCiAvLyBN
aW1lVHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7CiAgICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNJbWFnZU1JTUVU
eXBlKG1pbWVUeXBlKQogICAgICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVk
OwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0
ZWRKYXZhU2NyaXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c0phdmFTY3JpcHRNSU1F
VHlwZShtaW1lVHlwZSkKICAgICAgICAgIT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRl
ZDsKIH0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBl
KGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCitib29sIFBsYXRmb3JtQnJpZGdlOjppc1N1cHBvcnRl
ZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c05vbkltYWdlTUlNRVR5cGUo
bWltZVR5cGUpCiAgICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7CiB9
CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3Ry
aW5nJiBleHRlbnNpb24pCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRm9yRXh0ZW5z
aW9uKGNvbnN0IFN0cmluZyYgZXh0ZW5zaW9uKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+bWltZVJlZ2lzdHJ5KCktPm1pbWVUeXBlRm9yRXh0ZW5zaW9uKGV4dGVuc2lvbik7CiB9CiAK
LVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6bWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIHBh
dGgpCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRnJvbUZpbGUoY29uc3QgU3RyaW5n
JiBwYXRoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPm1p
bWVUeXBlRnJvbUZpbGUocGF0aCk7CiB9CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6cHJlZmVy
cmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK1N0cmluZyBQ
bGF0Zm9ybUJyaWRnZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgp
LT5wcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7CiB9CiAKIC8vIFBsdWdp
biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6cGx1Z2lucyhib29sIHJlZnJl
c2gsIFZlY3RvcjxQbHVnaW5JbmZvPiogcmVzdWx0cykKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OnBs
dWdpbnMoYm9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2luSW5mbz4qIHJlc3VsdHMpCiB7CiAgICAg
V2ViUGx1Z2luTGlzdEJ1aWxkZXJJbXBsIGJ1aWxkZXIocmVzdWx0cyk7CiAgICAgd2ViS2l0Q2xp
ZW50KCktPmdldFBsdWdpbkxpc3QocmVmcmVzaCwgJmJ1aWxkZXIpOwogICAgIHJldHVybiB0cnVl
OyAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJu
IGEgdmFsdWUuCiB9CiAKLU5QT2JqZWN0KiBDaHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJs
ZU9iamVjdChXaWRnZXQqIHdpZGdldCkKK05QT2JqZWN0KiBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lu
U2NyaXB0YWJsZU9iamVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBpZiAoIXdpZGdldCB8fCAh
d2lkZ2V0LT5pc1BsdWdpbkNvbnRhaW5lcigpKQogICAgICAgICByZXR1cm4gMDsKQEAgLTYwNSw3
ICs2MDUsNyBAQCBOUE9iamVjdCogQ2hyb21pdW1CcmlkZ2U6OnBsdWdpblNjcmlwdGFiCiAKIC8v
IFJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUGFzc1JlZlB0cjxJbWFnZT4gQ2hyb21pdW1CcmlkZ2U6
OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKK1Bhc3NSZWZQdHI8
SW1hZ2U+IFBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNo
YXIqIG5hbWUpCiB7CiAgICAgY29uc3QgV2ViRGF0YSYgcmVzb3VyY2UgPSB3ZWJLaXRDbGllbnQo
KS0+bG9hZFJlc291cmNlKG5hbWUpOwogICAgIGlmIChyZXNvdXJjZS5pc0VtcHR5KCkpCkBAIC02
MTgsNyArNjE4LDcgQEAgUGFzc1JlZlB0cjxJbWFnZT4gQ2hyb21pdW1CcmlkZ2U6OmxvYWRQbAog
CiAjaWYgRU5BQkxFKFdFQl9BVURJTykKIAotUGFzc093blB0cjxBdWRpb0J1cz4gQ2hyb21pdW1C
cmlkZ2U6OmxvYWRQbGF0Zm9ybUF1ZGlvUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZG91Ymxl
IHNhbXBsZVJhdGUpCitQYXNzT3duUHRyPEF1ZGlvQnVzPiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBs
YXRmb3JtQXVkaW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkK
IHsKICAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVz
b3VyY2UobmFtZSk7CiAgICAgaWYgKHJlc291cmNlLmlzRW1wdHkoKSkKQEAgLTYyNyw3ICs2Mjcs
NyBAQCBQYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6bG9hCiAgICAgcmV0dXJu
IGRlY29kZUF1ZGlvRmlsZURhdGEocmVzb3VyY2UuZGF0YSgpLCByZXNvdXJjZS5zaXplKCksIHNh
bXBsZVJhdGUpOwogfQogCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6ZGVj
b2RlQXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNh
bXBsZVJhdGUpCitQYXNzT3duUHRyPEF1ZGlvQnVzPiBQbGF0Zm9ybUJyaWRnZTo6ZGVjb2RlQXVk
aW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJh
dGUpCiB7CiAgICAgV2ViQXVkaW9CdXMgd2ViQXVkaW9CdXM7CiAgICAgaWYgKHdlYktpdENsaWVu
dCgpLT5sb2FkQXVkaW9SZXNvdXJjZSgmd2ViQXVkaW9CdXMsIGRhdGEsIHNpemUsIHNhbXBsZVJh
dGUpKQpAQCAtNjM5LDYwICs2MzksNjAgQEAgUGFzc093blB0cjxBdWRpb0J1cz4gQ2hyb21pdW1C
cmlkZ2U6OmRlYwogCiAvLyBTYW5kYm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgQ2hyb21pdW1Ccmlk
Z2U6OnNhbmRib3hFbmFibGVkKCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OnNhbmRib3hFbmFibGVk
KCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hFbmFibGVkKCk7CiB9CiAK
IC8vIFNoYXJlZFRpbWVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVk
VGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6
c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKQogewogICAgIHdlYktp
dENsaWVudCgpLT5zZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oZnVuYyk7CiB9CiAKLXZvaWQg
Q2hyb21pdW1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZG91YmxlIGZpcmVUaW1lKQor
dm9pZCBQbGF0Zm9ybUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRp
bWUpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZmlyZVRp
bWUpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpzdG9wU2hhcmVkVGltZXIoKQordm9pZCBQ
bGF0Zm9ybUJyaWRnZTo6c3RvcFNoYXJlZFRpbWVyKCkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+
c3RvcFNoYXJlZFRpbWVyKCk7CiB9CiAKIC8vIFN0YXRzQ291bnRlcnMgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBD
aHJvbWl1bUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpCit2
b2lkIFBsYXRmb3JtQnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFt
ZSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+ZGVjcmVtZW50U3RhdHNDb3VudGVyKG5hbWUpOwog
fQogCi12b2lkIENocm9taXVtQnJpZGdlOjppbmNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hh
ciogbmFtZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcihjb25z
dCBjaGFyKiBuYW1lKQogewogICAgIHdlYktpdENsaWVudCgpLT5pbmNyZW1lbnRTdGF0c0NvdW50
ZXIobmFtZSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50
cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVj
a2V0Q291bnQpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpoaXN0b2dyYW1DdXN0b21Db3VudHMoY29u
c3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IG1pbiwgaW50IG1heCwgaW50IGJ1Y2tldENv
dW50KQogewogICAgIHdlYktpdENsaWVudCgpLT5oaXN0b2dyYW1DdXN0b21Db3VudHMobmFtZSwg
c2FtcGxlLCBtaW4sIG1heCwgYnVja2V0Q291bnQpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdl
OjpoaXN0b2dyYW1FbnVtZXJhdGlvbihjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQg
Ym91bmRhcnlWYWx1ZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUVudW1lcmF0aW9u
KGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKQogewogICAg
IHdlYktpdENsaWVudCgpLT5oaXN0b2dyYW1FbnVtZXJhdGlvbihuYW1lLCBzYW1wbGUsIGJvdW5k
YXJ5VmFsdWUpOwogfQogCiAvLyBTdWRkZW4gVGVybWluYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgQ2hyb21pdW1C
cmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChib29sIGVuYWJsZWQpCit2b2lkIFBsYXRm
b3JtQnJpZGdlOjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoYm9vbCBlbmFibGVkKQogewogICAg
IHdlYktpdENsaWVudCgpLT5zdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoZW5hYmxlZCk7CiB9CiAK
IC8vIFN5c3RlbVRpbWUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotZG91YmxlIENocm9taXVtQnJpZGdlOjpjdXJyZW50
VGltZSgpCitkb3VibGUgUGxhdGZvcm1CcmlkZ2U6OmN1cnJlbnRUaW1lKCkKIHsKICAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPmN1cnJlbnRUaW1lKCk7CiB9CkBAIC03MDEsNyArNzAxLDcgQEAg
ZG91YmxlIENocm9taXVtQnJpZGdlOjpjdXJyZW50VGltZSgpCiAKICNpZiBPUyhXSU5ET1dTKQog
Ci12b2lkIENocm9taXVtQnJpZGdlOjpwYWludEJ1dHRvbigKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6
OnBhaW50QnV0dG9uKAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3Rh
dGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKQEAgLTcw
OSw3ICs3MDksNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpwYWludEJ1dHRvbigKICAgICAgICAg
Z2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0
ZSwgcmVjdCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50TWVudUxpc3QoCit2b2lk
IFBsYXRmb3JtQnJpZGdlOjpwYWludE1lbnVMaXN0KAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2Ms
IGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVj
dCYgcmVjdCkKIHsKQEAgLTcxNyw3ICs3MTcsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpwYWlu
dE1lbnVMaXN0KAogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0
LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6
cGFpbnRTY3JvbGxiYXJBcnJvdygKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFy
QXJyb3coCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0
YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CkBAIC03MjUsNyArNzI1LDcgQEAgdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJvdwogICAgICAgICBnYy0+cGxhdGZv
cm1Db250ZXh0KCktPmNhbnZhcygpLCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0KIAot
dm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKK3ZvaWQgUGxhdGZvcm1C
cmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50
IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiBy
ZWN0KQogewpAQCAtNzMzLDcgKzczMyw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Ny
b2xsYmFyVGh1bWIKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFy
dCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6
OnBhaW50U2Nyb2xsYmFyVHJhY2soCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJh
clRyYWNrKAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGlu
dCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgSW50UmVjdCYg
YWxpZ25SZWN0KQogewpAQCAtNzQyLDcgKzc0Miw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBh
aW50U2Nyb2xsYmFyVHJhY2sKICAgICAgICAgYWxpZ25SZWN0KTsKIH0KIAotdm9pZCBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTcGlu
QnV0dG9uKAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGlu
dCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKQEAgLTc1MCw3ICs3
NTAsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oCiAgICAgICAgIGdj
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUs
IHJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFRleHRGaWVsZCgKK3ZvaWQg
UGxhdGZvcm1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2Ms
IGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVj
dCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBib29sIGZpbGxDb250ZW50QXJlYSwKICAgICBi
b29sIGRyYXdFZGdlcykKQEAgLTc2Myw3ICs3NjMsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpw
YWludFRleHRGaWVsZCgKICAgICAgICAgYmFja2dyb3VuZENvbG9yLCBmaWxsQ29udGVudEFyZWEs
IGRyYXdFZGdlcyk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VHJhY2tiYXIoCit2
b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFRyYWNrYmFyKAogICAgIEdyYXBoaWNzQ29udGV4dCog
Z2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKQEAgLTc3MSw3ICs3NzEsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpw
YWludFRyYWNrYmFyKAogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBw
YXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6cGFpbnRQcm9ncmVzc0JhcigKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NC
YXIoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29u
c3QgSW50UmVjdCYgdmFsdWVSZWN0LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRT
ZWNvbmRzKQogewogICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFByb2dy
ZXNzQmFyKApAQCAtNzgwLDM3ICs3ODAsMzcgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRQ
cm9ncmVzc0JhcigKIAogI2VsaWYgT1MoTElOVVgpCiAKLXN0YXRpYyBXZWJUaGVtZUVuZ2luZTo6
UGFydCBXZWJUaGVtZVBhcnQoQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFydCBwYXJ0KQorc3RhdGlj
IFdlYlRoZW1lRW5naW5lOjpQYXJ0IFdlYlRoZW1lUGFydChQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQ
YXJ0IHBhcnQpCiB7CiAgICAgc3dpdGNoIChwYXJ0KSB7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRn
ZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Ny
b2xsYmFyRG93bkFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJM
ZWZ0QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsK
LSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzogcmV0dXJu
IFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKLSAgICBjYXNlIENocm9t
aXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQ
YXJ0U2Nyb2xsYmFyVXBBcnJvdzsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xs
YmFySG9yaXpvbnRhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJI
b3Jpem9udGFsVGh1bWI7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZl
cnRpY2FsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2Fs
VGh1bWI7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxU
cmFjazogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNr
OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOiBy
ZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOworICAgIGNh
c2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c6IHJldHVybiBXZWJUaGVt
ZUVuZ2luZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdl
OjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3Jv
bGxiYXJMZWZ0QXJyb3c7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclJp
Z2h0QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclJpZ2h0QXJyb3c7
CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3c6IHJldHVybiBX
ZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclVwQXJyb3c7CisgICAgY2FzZSBQbGF0Zm9ybUJy
aWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYjogcmV0dXJuIFdlYlRoZW1lRW5naW5l
OjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1iOworICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6
OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRT
Y3JvbGxiYXJWZXJ0aWNhbFRodW1iOworICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJIb3Jpem9udGFsVHJhY2s6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJh
ckhvcml6b250YWxUcmFjazsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
VmVydGljYWxUcmFjazogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVmVydGlj
YWxUcmFjazsKICAgICB9CiAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgcmV0dXJuIFdl
YlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OwogfQogCi1zdGF0aWMgV2ViVGhl
bWVFbmdpbmU6OlN0YXRlIFdlYlRoZW1lU3RhdGUoQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRT
dGF0ZSBzdGF0ZSkKK3N0YXRpYyBXZWJUaGVtZUVuZ2luZTo6U3RhdGUgV2ViVGhlbWVTdGF0ZShQ
bGF0Zm9ybUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlKQogewogICAgIHN3aXRjaCAoc3Rh
dGUpIHsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVkOiByZXR1cm4gV2Vi
VGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3Rh
dGVIb3ZlcjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZUhvdmVyOwotICAgIGNhc2UgQ2hy
b21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFsOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlTm9y
bWFsOwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlUHJlc3NlZDogcmV0dXJuIFdlYlRo
ZW1lRW5naW5lOjpTdGF0ZVByZXNzZWQ7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVE
aXNhYmxlZDogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZURpc2FibGVkOworICAgIGNhc2Ug
UGxhdGZvcm1CcmlkZ2U6OlN0YXRlSG92ZXI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVI
b3ZlcjsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZU5vcm1hbDogcmV0dXJuIFdlYlRo
ZW1lRW5naW5lOjpTdGF0ZU5vcm1hbDsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZVBy
ZXNzZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkOwogICAgIH0KICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlz
YWJsZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIEdldFdlYlRoZW1lRXh0cmFQYXJhbXMoQ2hyb21pdW1C
cmlkZ2U6OlRoZW1lUGFydCBwYXJ0LCBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0
YXRlLCBjb25zdCBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludEV4dHJhUGFyYW1zKiBleHRyYVBh
cmFtcywgV2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zKiB3ZWJUaGVtZUV4dHJhUGFyYW1zKQor
c3RhdGljIHZvaWQgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhQbGF0Zm9ybUJyaWRnZTo6VGhlbWVQ
YXJ0IHBhcnQsIFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUsIGNvbnN0IFBs
YXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zLCBXZWJUaGVt
ZUVuZ2luZTo6RXh0cmFQYXJhbXMqIHdlYlRoZW1lRXh0cmFQYXJhbXMpCiB7Ci0gICAgaWYgKHBh
cnQgPT0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgfHwgcGFy
dCA9PSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2spIHsKKyAgICBp
ZiAocGFydCA9PSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjayB8
fCBwYXJ0ID09IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaykgewog
ICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1ggPSBleHRy
YVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tYOwogICAgICAgICB3ZWJUaGVtZUV4dHJhUGFy
YW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1kgPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2su
dHJhY2tZOwogICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFj
a1dpZHRoID0gZXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGg7CkBAIC04MTgs
MTIgKzgxOCwxMiBAQCBzdGF0aWMgdm9pZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKENocm9tCiAg
ICAgfQogfQogCi1JbnRTaXplIENocm9taXVtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKFRoZW1l
UGFydCBwYXJ0KQorSW50U2l6ZSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShUaGVt
ZVBhcnQgcGFydCkKIHsKICAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgp
LT5nZXRTaXplKFdlYlRoZW1lUGFydChwYXJ0KSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6
OnBhaW50VGhlbWVQYXJ0KAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCiAg
ICAgR3JhcGhpY3NDb250ZXh0KiBnYywgVGhlbWVQYXJ0IHBhcnQsIFRoZW1lUGFpbnRTdGF0ZSBz
dGF0ZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhlbWVQYWludEV4dHJhUGFyYW1zKiBl
eHRyYVBhcmFtcykKIHsKICAgICBXZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMgd2ViVGhlbWVF
eHRyYVBhcmFtczsKQEAgLTgzNCw3ICs4MzQsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpwYWlu
dFRoZW1lUGFydCgKIAogI2VsaWYgT1MoREFSV0lOKQogCi12b2lkIENocm9taXVtQnJpZGdlOjpw
YWludFNjcm9sbGJhclRodW1iKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJU
aHVtYigKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBUaGVtZVBhaW50U3RhdGUgc3RhdGUsIFRo
ZW1lUGFpbnRTaXplIHNpemUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFRoZW1lUGFpbnRT
Y3JvbGxiYXJJbmZvJiBzY3JvbGxiYXJJbmZvKQogewogICAgIFdlYlRoZW1lRW5naW5lOjpTY3Jv
bGxiYXJJbmZvIHdlYlRoZW1lU2Nyb2xsYmFySW5mbzsKQEAgLTg1OCwxOSArODU4LDE5IEBAIHZv
aWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIKIAogLy8gVHJhY2UgRXZlbnQg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi12b2lkIENocm9taXVtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hh
ciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQordm9pZCBQbGF0Zm9ybUJyaWRn
ZTo6dHJhY2VFdmVudEJlZ2luKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFy
KiBleHRyYSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEJlZ2luKG5hbWUsIGlk
LCBleHRyYSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoY29uc3Qg
Y2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQordm9pZCBQbGF0Zm9ybUJy
aWRnZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hh
ciogZXh0cmEpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnRyYWNlRXZlbnRFbmQobmFtZSwgaWQs
IGV4dHJhKTsKIH0KIAogLy8gVmlzaXRlZCBMaW5rcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1MaW5rSGFzaCBDaHJvbWl1
bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IFVDaGFyKiB1cmwsIHVuc2lnbmVkIGxlbmd0
aCkKK0xpbmtIYXNoIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIq
IHVybCwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8
MjA0OD4gYnVmZmVyOwogICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsKQEAgLTg3OSw3ICs4
NzksNyBAQCBMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoCiAgICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVy
Lmxlbmd0aCgpKTsKIH0KIAotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFz
aChjb25zdCBLVVJMJiBiYXNlLAorTGlua0hhc2ggUGxhdGZvcm1CcmlkZ2U6OnZpc2l0ZWRMaW5r
SGFzaChjb25zdCBLVVJMJiBiYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKIHsKICAgICAvLyBSZXNv
bHZlIHRoZSByZWxhdGl2ZSBVUkwgdXNpbmcgZ29vZ2xldXJsIGFuZCBwYXNzIHRoZSBhYnNvbHV0
ZSBVUkwgdXAgdG8KQEAgLTkxMyw3ICs5MTMsNyBAQCBMaW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6
dmlzaXRlZExpbmtIYXNoCiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hh
c2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKIH0KIAotYm9vbCBDaHJvbWl1bUJy
aWRnZTo6aXNMaW5rVmlzaXRlZChMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2gpCitib29sIFBsYXRm
b3JtQnJpZGdlOjppc0xpbmtWaXNpdGVkKExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaCkKIHsKICAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmlzTGlua1Zpc2l0ZWQodmlzaXRlZExpbmtIYXNoKTsK
IH0KQEAgLTkyMiw3ICs5MjIsNyBAQCBib29sIENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVk
KExpbmtICiAvLyBHbHVlIGxheWVyLiBPbmNlIHRoZSBHbHVlIGxheWVyIG1vdmVzIGVudGlyZWx5
IGludG8gdGhlIFdlYktpdCBsYXllciwgdGhlc2UKIC8vIG1ldGhvZHMgd2lsbCBiZSBkZWxldGVk
LgogCi12b2lkIENocm9taXVtQnJpZGdlOjpub3RpZnlKU091dE9mTWVtb3J5KEZyYW1lKiBmcmFt
ZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6Om5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUqIGZyYW1l
KQogewogICAgIGlmICghZnJhbWUpCiAgICAgICAgIHJldHVybjsKQEAgLTkzMywxNyArOTMzLDE3
IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6Om5vdGlmeUpTT3V0T2ZNZW1vcnkKICAgICB3ZWJGcmFt
ZS0+Y2xpZW50KCktPmRpZEV4aGF1c3RNZW1vcnlBdmFpbGFibGVGb3JTY3JpcHQod2ViRnJhbWUp
OwogfQogCi1pbnQgQ2hyb21pdW1CcmlkZ2U6Om1lbW9yeVVzYWdlTUIoKQoraW50IFBsYXRmb3Jt
QnJpZGdlOjptZW1vcnlVc2FnZU1CKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3
ZWJLaXRDbGllbnQoKS0+bWVtb3J5VXNhZ2VNQigpKTsKIH0KIAotaW50IENocm9taXVtQnJpZGdl
OjphY3R1YWxNZW1vcnlVc2FnZU1CKCkKK2ludCBQbGF0Zm9ybUJyaWRnZTo6YWN0dWFsTWVtb3J5
VXNhZ2VNQigpCiB7CiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2ViS2l0Q2xpZW50KCkt
PmFjdHVhbE1lbW9yeVVzYWdlTUIoKSk7CiB9CiAKLWludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVu
RGVwdGgoV2lkZ2V0KiB3aWRnZXQpCitpbnQgUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRlcHRoKFdp
ZGdldCogd2lkZ2V0KQogewogICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRn
ZXRDbGllbnQod2lkZ2V0KTsKICAgICBpZiAoIWNsaWVudCkKQEAgLTk1MSw3ICs5NTEsNyBAQCBp
bnQgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRlcHRoKFdpZGdldCogCiAgICAgcmV0dXJuIGNsaWVu
dC0+c2NyZWVuSW5mbygpLmRlcHRoOwogfQogCi1pbnQgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRl
cHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0KQoraW50IFBsYXRmb3JtQnJpZGdlOjpzY3Jl
ZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBXZWJXaWRnZXRDbGll
bnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7CiAgICAgaWYgKCFjbGllbnQp
CkBAIC05NTksNyArOTU5LDcgQEAgaW50IENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNv
bXBvbgogICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5kZXB0aFBlckNvbXBvbmVudDsK
IH0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lk
Z2V0KQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lk
Z2V0KQogewogICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQo
d2lkZ2V0KTsKICAgICBpZiAoIWNsaWVudCkKQEAgLTk2Nyw3ICs5NjcsNyBAQCBib29sIENocm9t
aXVtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUoCiAgICAgcmV0dXJuIGNsaWVudC0+c2NyZWVu
SW5mbygpLmlzTW9ub2Nocm9tZTsKIH0KIAotSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVu
UmVjdChXaWRnZXQqIHdpZGdldCkKK0ludFJlY3QgUGxhdGZvcm1CcmlkZ2U6OnNjcmVlblJlY3Qo
V2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldp
ZGdldENsaWVudCh3aWRnZXQpOwogICAgIGlmICghY2xpZW50KQpAQCAtOTc1LDcgKzk3NSw3IEBA
IEludFJlY3QgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlblJlY3QoV2lkZ2UKICAgICByZXR1cm4gY2xp
ZW50LT5zY3JlZW5JbmZvKCkucmVjdDsKIH0KIAotSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6c2Ny
ZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdldCkKK0ludFJlY3QgUGxhdGZvcm1CcmlkZ2U6
OnNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViV2lkZ2V0Q2xp
ZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwogICAgIGlmICghY2xpZW50
KQpAQCAtOTgzLDcgKzk4Myw3IEBAIEludFJlY3QgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkF2YWls
YWJsZVIKICAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuYXZhaWxhYmxlUmVjdDsKIH0K
IAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6cG9wdXBzQWxsb3dlZChOUFAgbnBwKQorYm9vbCBQbGF0
Zm9ybUJyaWRnZTo6cG9wdXBzQWxsb3dlZChOUFAgbnBwKQogewogICAgIC8vIEZJWE1FOiBHaXZl
IHRoZSBlbWJlZGRlciBhIHdheSB0byBjb250cm9sIHRoaXMuCiAgICAgcmV0dXJuIGZhbHNlOwpJ
bmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAko
cmV2aXNpb24gNzYwODYpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhh
bmRsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKICNpbmNsdWRlICJjb25m
aWcuaCIKICNpbmNsdWRlICJSZXNvdXJjZUhhbmRsZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlJlc291cmNl
SGFuZGxlQ2xpZW50LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCiAjaW5jbHVkZSAi
U2hhcmVkQnVmZmVyLmgiCkBAIC0zMzAsNyArMzMwLDcgQEAgYm9vbCBSZXNvdXJjZUhhbmRsZTo6
d2lsbExvYWRGcm9tQ2FjaGUoUgogLy8gc3RhdGljCiB2b2lkIFJlc291cmNlSGFuZGxlOjpjYWNo
ZU1ldGFkYXRhKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlLCBjb25zdCBWZWN0b3I8
Y2hhcj4mIGRhdGEpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmNhY2hlTWV0YWRhdGEocmVzcG9u
c2UudXJsKCksIHJlc3BvbnNlLnJlc3BvbnNlVGltZSgpLCBkYXRhKTsKKyAgICBQbGF0Zm9ybUJy
aWRnZTo6Y2FjaGVNZXRhZGF0YShyZXNwb25zZS51cmwoKSwgcmVzcG9uc2UucmVzcG9uc2VUaW1l
KCksIGRhdGEpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
S2l0L2Nocm9taXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAJKHJldmlzaW9uIDc2MDg2KQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzQsNyArNzQsNiBAQAogI2luY2x1ZGUgIkFzc29jaWF0ZWRVUkxMb2FkZXIuaCIKICNp
bmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKLSNp
bmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0No
cm9taXVtLmgiCiAjaW5jbHVkZSAiQ29uc29sZS5oIgogI2luY2x1ZGUgIkRPTVV0aWxpdGllc1By
aXZhdGUuaCIKQEAgLTEwMyw2ICsxMDIsNyBAQAogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUGVyZm9ybWFuY2UuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIK
ICNpbmNsdWRlICJQbHVnaW5Eb2N1bWVudC5oIgogI2luY2x1ZGUgIlByaW50Q29udGV4dC5oIgpA
QCAtMTgyMCwxMyArMTgyMCwxMyBAQCBXZWJGcmFtZUltcGw6OldlYkZyYW1lSW1wbChXZWJGcmFt
ZUNsaWVuCiAgICAgLCBtX2FuaW1hdGlvbkNvbnRyb2xsZXIodGhpcykKICAgICAsIG1faWRlbnRp
ZmllcihnZW5lcmF0ZUZyYW1lSWRlbnRpZmllcigpKQogewotICAgIENocm9taXVtQnJpZGdlOjpp
bmNyZW1lbnRTdGF0c0NvdW50ZXIod2ViRnJhbWVBY3RpdmVDb3VudCk7CisgICAgUGxhdGZvcm1C
cmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcih3ZWJGcmFtZUFjdGl2ZUNvdW50KTsKICAgICBm
cmFtZUNvdW50Kys7CiB9CiAKIFdlYkZyYW1lSW1wbDo6fldlYkZyYW1lSW1wbCgpCiB7Ci0gICAg
Q2hyb21pdW1CcmlkZ2U6OmRlY3JlbWVudFN0YXRzQ291bnRlcih3ZWJGcmFtZUFjdGl2ZUNvdW50
KTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKHdlYkZyYW1lQWN0
aXZlQ291bnQpOwogICAgIGZyYW1lQ291bnQtLTsKIAogICAgIGNhbmNlbFBlbmRpbmdTY29waW5n
RWZmb3J0KCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwu
Y3BwCShyZXZpc2lvbiA3NjA4NikKKysrIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZp
ZXdJbXBsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMjMgKzM0LDIyIEBACiAjaW5jbHVkZSAi
QXV0b0ZpbGxQb3B1cE1lbnVDbGllbnQuaCIKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAj
aW5jbHVkZSAiQmFja0ZvcndhcmRMaXN0Q2hyb21pdW0uaCIKKyNpbmNsdWRlICJDU1NTdHlsZVNl
bGVjdG9yLmgiCisjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkNocm9t
ZS5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ29sb3JTcGFjZS5o
IgogI2luY2x1ZGUgIkNvbXBvc2l0aW9uVW5kZXJsaW5lVmVjdG9yQnVpbGRlci5oIgogI2luY2x1
ZGUgIkNvbnRleHRNZW51LmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnVDb250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiQ29udGV4dE1lbnVJdGVtLmgiCi0jaW5jbHVkZSAiQ1NTU3R5bGVTZWxlY3Rvci5o
IgotI2luY2x1ZGUgIkNTU1ZhbHVlS2V5d29yZHMuaCIKICNpbmNsdWRlICJDdXJzb3IuaCIKKyNp
bmNsdWRlICJET01VdGlsaXRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAiRGV2aWNlT3JpZW50YXRp
b25DbGllbnRQcm94eS5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnRMb2FkZXIuaCIKLSNpbmNsdWRlICJET01VdGlsaXRpZXNQcml2YXRlLmgiCiAjaW5jbHVkZSAi
RHJhZ0NvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJEcmFnU2Nyb2xsVGltZXIuaCIKICNpbmNsdWRl
ICJEcmFnRGF0YS5oIgorI2luY2x1ZGUgIkRyYWdTY3JvbGxUaW1lci5oIgogI2luY2x1ZGUgIkVk
aXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnMz
RC5oIgpAQCAtNjUsOCArNjQsOCBAQAogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNESW50ZXJu
YWwuaCIKICNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE1lZGlh
RWxlbWVudC5oIgotI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJIVE1MTmFt
ZXMuaCIKKyNpbmNsdWRlICJIaXRUZXN0UmVzdWx0LmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNp
bmNsdWRlICJJbWFnZUJ1ZmZlci5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIK
QEAgLTc4LDYgKzc3LDcgQEAKICNpbmNsdWRlICJQYWdlR3JvdXAuaCIKICNpbmNsdWRlICJQYWdl
R3JvdXBMb2FkRGVmZXJyZXIuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1LZXlib2FyZEV2ZW50LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2
ZW50LmgiCkBAIC05OCw4ICs5OCw4IEBACiAjaW5jbHVkZSAiVmVjdG9yLmgiCiAjaW5jbHVkZSAi
V2ViQWNjZXNzaWJpbGl0eU9iamVjdC5oIgogI2luY2x1ZGUgIldlYkF1dG9GaWxsQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJEZXZU
b29sc0FnZW50SW1wbC5oIgorI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRQcml2YXRlLmgiCiAj
aW5jbHVkZSAiV2ViRHJhZ0RhdGEuaCIKICNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKICNpbmNs
dWRlICJXZWJJbWFnZS5oIgpAQCAtMjI4Nyw3ICsyMjg3LDcgQEAgdm9pZCBXZWJWaWV3SW1wbDo6
aW52YWxpZGF0ZVJvb3RMYXllclJlYwogCiB2b2lkIFdlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJh
dGVkQ29tcG9zaXRpbmdBY3RpdmUoYm9vbCBhY3RpdmUpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6
Omhpc3RvZ3JhbUVudW1lcmF0aW9uKCJHUFUuc2V0SXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0
aXZlIiwgYWN0aXZlICogMiArIG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5nQWN0aXZlLCA0KTsK
KyAgICBQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oIkdQVS5zZXRJc0FjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUiLCBhY3RpdmUgKiAyICsgbV9pc0FjY2VsZXJhdGVkQ29t
cG9zaXRpbmdBY3RpdmUsIDQpOwogCiAgICAgaWYgKG1faXNBY2NlbGVyYXRlZENvbXBvc2l0aW5n
QWN0aXZlID09IGFjdGl2ZSkKICAgICAgICAgcmV0dXJuOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79505</attachid>
            <date>2011-01-19 15:44:30 -0800</date>
            <delta_ts>2011-01-20 10:38:07 -0800</delta_ts>
            <desc>Fixed style errors</desc>
            <filename>bug-52471-20110119154429.patch</filename>
            <type>text/plain</type>
            <size>231934</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcwIEBACisyMDExLTAxLTE5ICBBZGFtIEts
ZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIENocm9taXVtQnJpZGdlIHRvIFBs
YXRmb3JtQnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MjQ3MQorCisgICAgICAgIE5vIHRlc3RzIGFkZGVkIGFzIHRoaXMgaXMgYSByZW5hbWU7
IG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydEZhdGFsRXJyb3JJblY4KToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2FuZHJvaWQvUGxhdGZvcm1CcmlkZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9jaHJvbWl1bS9BdWRpb0J1c0Nocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1CcmlkZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3RMZWdhY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5OjpnZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9E
cmFnRGF0YUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmRlbGV0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlRW1w
dHlEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RmlsZVNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6cmV2
ZWFsRm9sZGVySW5PUyk6CisgICAgICAgIChXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlQWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUV4aXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2Vla0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6dHJ1bmNh
dGVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRGcm9tRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjp3cml0ZVRvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTGFuZ3VhZ2VD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybURlZmF1bHRMYW5ndWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZh
U2NyaXB0TUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9Q
YXN0ZWJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3Jp
dGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFpblRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
cGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21l
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtQnJpZGdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0
aFBlckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2NyZWVuUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5B
dmFpbGFibGVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpnZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6dXJsVGl0bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpodG1sQmFzZVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnNjcm9sbGJh
clRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50VHJhY2tQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTGludXg6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtVGh1bWJMZW5ndGgpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUcmFja1BpZWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50VGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6YnV0dG9u
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzdG9wU2hhcmVkVGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1N1ZGRlblRl
cm1pbmF0aW9uQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzYWJsZVN1ZGRlblRl
cm1pbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TeXN0ZW1UaW1lQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3VycmVudFRpbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L1dyaXRhYmxlRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFP
YmplY3Q6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Ny
b3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRD
b250YWluc0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTG9nRm9udCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2NyaXB0Rm9udFByb3BlcnRpZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJl
bmRlclN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBh
Z2VUcmVlTm9kZUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxCTVBHbHlw
aHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6dHJ5VG9QcmVsb2Fk
Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29v
a2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0ROU0Nocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZWZldGNoRE5TKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9QbGF0Zm9ybUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9T
UUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9j
aHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHA6CisgICAgICAgIChjaHJv
bWl1bU9wZW4pOgorICAgICAgICAoY2hyb21pdW1EZWxldGUpOgorICAgICAgICAoY2hyb21pdW1B
Y2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMvY2hyb21pdW0vUGx1Z2luRGF0YUNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkNhY2hlOjpwbHVnaW5zKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9y
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZh
bCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpzeXN0ZW1Db2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Om1lbnVMaXN0QnV0
dG9uV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFp
bnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludFRleHRGaWVsZEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1XaW46OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHN0b3JhZ2Uv
Y2hyb21pdW0vSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6fklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
KToKKyAgICAgICAgKiBzdG9yYWdlL2Nocm9taXVtL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNG
cm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgpOgorCiAyMDExLTAxLTE5ICBEYXZpZCBELiBL
aWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3Jn
L2IvNTI2ODc+IENsZWFuIHVwIEZyYW1lTG9hZGVyIG1ldGhvZHMgZm9yIFBMVUdJTl9QUk9YWV9G
T1JfVklERU8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQwLDcgKzI0NDAsNiBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL1NjaGVkdWxlUGFpci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2NmL1NjaGVkdWxlUGFpci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
Zi9TaGFyZWRCdWZmZXJDRi5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtQnJpZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuY3BwJywKQEAgLTI0NzcsNiArMjQ3Niw3IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZFByaXZhdGUuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1CcmlkZ2UuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vUGxhdGZvcm1DdXJzb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVlbkNocm9taXVtLmNwcCcsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAkocmV2
aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1No
ZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCByZXBv
cnRGYXRhbEVycm9ySW5WOChjb25zdCBjCiAgICAgLy8gRklYTUU6IGNsZWFuIHVwIFY4UHJveHkg
YW5kIGRpc2FibGUgSmF2YVNjcmlwdC4KICAgICBpbnQgbWVtb3J5VXNhZ2VNQiA9IC0xOwogI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIG1lbW9yeVVzYWdlTUIgPSBDaHJvbWl1bUJyaWRnZTo6
YWN0dWFsTWVtb3J5VXNhZ2VNQigpOworICAgIG1lbW9yeVVzYWdlTUIgPSBQbGF0Zm9ybUJyaWRn
ZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpOwogI2VuZGlmCiAgICAgcHJpbnRmKCJWOCBlcnJvcjog
JXMgKCVzKS4gIEN1cnJlbnQgbWVtb3J5IHVzYWdlOiAlZCBNQlxuIiwgbWVzc2FnZSwgbG9jYXRp
b24sIG1lbW9yeVVzYWdlTUIpOwogICAgIGhhbmRsZUZhdGFsRXJyb3JJblY4KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAog
I2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQot
I2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIK
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBQ
YWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2ggdgogewogI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQogICAgIC8vIFVzZSBDaHJvbWl1bSdzIGJ1aWx0LWluIHZpc2l0ZWQgbGluayBkYXRhYmFz
ZS4KLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQodmlzaXRlZExpbmtI
YXNoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQodmlzaXRlZExp
bmtIYXNoKTsKICNlbHNlCiAgICAgaWYgKCFtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZCkgewogICAg
ICAgICBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hbmRyb2lkL1BsYXRmb3JtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oCShyZXZpc2lvbiA3NjE3
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUGxhdGZvcm1CcmlkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBjbGFzcyBXaWRnZXQ7CiAKIC8vIEFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxheWVyLCB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8g
YW5zd2VyCiAvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQgc28gb24uLi4KLS8vIFRo
aXMgaXMgdmVyeSBzaW1pbGFyIHRvIENocm9taXVtQnJpZGdlIGFuZCB0aGUgdHdvIGFyZSBsaWtl
bHkgdG8gY29udmVyZ2UKKy8vIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIGNocm9taXVtL1BsYXRm
b3JtQnJpZGdlIGFuZCB0aGUgdHdvIGFyZSBsaWtlbHkgdG8gY29udmVyZ2UKIC8vIGluIHRoZSBm
dXR1cmUuCiAvLwogLy8gVGhlIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBhbGwgbmVlZCB0byByZWFj
aCBhY3Jvc3MgYSBKTkkgbGF5ZXIgdG8gdGhlIEphdmEgVk0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw3IEBACiAjaW5jbHVkZSAiQXVkaW9CdXMuaCIKIAogI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRl
ci5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Ccmlk
Z2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOCwxMiArMzgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBQYXNzT3duUHRy
PEF1ZGlvQnVzPiBBdWRpb0J1czo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFt
ZSwgZG91YmxlIHNhbXBsZVJhdGUpCiAvLyB7Ci0vLyAgICAgcmV0dXJuIENocm9taXVtQnJpZGdl
Ojpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKG5hbWUsIHNhbXBsZVJhdGUpOworLy8gICAgIHJl
dHVybiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShuYW1lLCBzYW1w
bGVSYXRlKTsKIC8vIH0KIAogUGFzc093blB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVt
b3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhU
b01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKQogewotICAgIE93blB0cjxBdWRpb0J1cz4gYXVkaW9C
dXMgPSBDaHJvbWl1bUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YShzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YSksIGRhdGFTaXplLCBzYW1wbGVSYXRlKTsKKyAgICBPd25QdHI8QXVkaW9C
dXM+IGF1ZGlvQnVzID0gUGxhdGZvcm1CcmlkZ2U6OmRlY29kZUF1ZGlvRmlsZURhdGEoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBkYXRhU2l6ZSwgc2FtcGxlUmF0ZSk7CiAgICAgaWYg
KGF1ZGlvQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMiAmJiBtaXhUb01vbm8pIHsKICAgICAg
ICAgT3duUHRyPEF1ZGlvQnVzPiBtb25vQXVkaW9CdXMgPSBhZG9wdFB0cihuZXcgQXVkaW9CdXMo
MSwgYXVkaW9CdXMtPmxlbmd0aCgpKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkocmV2aXNpb24gNzYxNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2hyb21pdW1CcmlkZ2VfaAotI2RlZmlu
ZSBDaHJvbWl1bUJyaWRnZV9oCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotI2luY2x1ZGUgIkF1
ZGlvQnVzLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJJ
bWFnZVNvdXJjZS5oIgotI2luY2x1ZGUgIkxpbmtIYXNoLmgiCi0jaW5jbHVkZSAiUGFzc1JlZlB0
ci5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0
YS5oIgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgTlBPYmplY3QgTlBP
YmplY3Q7Ci10eXBlZGVmIHN0cnVjdCBfTlBQIE5QUF90OwotdHlwZWRlZiBOUFBfdCogTlBQOwot
Ci0jaWYgT1MoREFSV0lOKQotdHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7Ci10eXBl
ZGVmIHVpbnRwdHJfdCBBVFNGb250Q29udGFpbmVyUmVmOwotI2lmZGVmIF9fT0JKQ19fCi1AY2xh
c3MgTlNGb250OwotI2Vsc2UKLWNsYXNzIE5TRm9udDsKLSNlbmRpZgotI2VuZGlmIC8vIE9TKERB
UldJTikKLQotI2lmIE9TKFdJTkRPV1MpCi10eXBlZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDbGlwYm9hcmREYXRh
OwotICAgIGNsYXNzIENvbG9yOwotICAgIGNsYXNzIEN1cnNvcjsKLSAgICBjbGFzcyBEb2N1bWVu
dDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7
Ci0gICAgY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Ci0gICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwotICAgIGNsYXNzIEltYWdlOwotICAgIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlOwotICAgIGNsYXNzIElEQktleTsKLSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNs
YXNzIEtVUkw7Ci0gICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotICAgIGNsYXNzIFdp
ZGdldDsKLQotICAgIHN0cnVjdCBDb29raWU7Ci0gICAgc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsK
LQotICAgIC8vIEFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxheWVyLCB3aGljaCBoYXMg
dGhlIGFiaWxpdHkgdG8gYW5zd2VyCi0gICAgLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0g
YW5kIHNvIG9uLi4uCi0KLSAgICBjbGFzcyBDaHJvbWl1bUJyaWRnZSB7Ci0gICAgcHVibGljOgot
ICAgICAgICAvLyBDYWNoZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgdm9pZCBjYWNoZU1ldGFkYXRh
KGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHJlc3BvbnNlVGltZSwgY29uc3QgVmVjdG9yPGNoYXI+
Jik7Ci0KLSAgICAgICAgLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIGJvb2wgY2xpcGJv
YXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwg
UGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0KLSAgICAgICAgc3RhdGljIFN0
cmluZyBjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIpOwotICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7Ci0KLSAgICAgICAgLy8g
T25seSB0aGUgY2xpcGJvYXJkUmVhZCBmdW5jdGlvbnMgdGFrZSBhIGJ1ZmZlciBhcmd1bWVudCBi
ZWNhdXNlCi0gICAgICAgIC8vIENocm9taXVtIGN1cnJlbnRseSB1c2VzIGEgZGlmZmVyZW50IHRl
Y2huaXF1ZSB0byB3cml0ZSB0byBhbHRlcm5hdGUKLSAgICAgICAgLy8gY2xpcGJvYXJkIGJ1ZmZl
cnMuCi0gICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKGNvbnN0IFN0
cmluZyYsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBib29sKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgY2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9h
cmRXcml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0
IFN0cmluZyYgbWV0YWRhdGEpOwotCi0gICAgICAgIC8vIEludGVyZmFjZSBmb3IgaGFuZGxpbmcg
Y29weSBhbmQgcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBzZWxlY3Rpb24gY29weS4KLSAgICAg
ICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMp
OwotICAgICAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRSZWFkRGF0YShQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUsIFN0cmluZyYgZGF0YSwgU3Ry
aW5nJiBtZXRhZGF0YSk7Ci0gICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBjbGlwYm9hcmRS
ZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotCi0gICAg
ICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgICAgIHN0
YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICAg
ICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICAgICAg
c3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotCi0gICAgICAgIC8vIEROUyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
ICAgIHN0YXRpYyB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwotCi0g
ICAgICAgIC8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIHJldmVhbEZvbGRlcklu
T1MoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7
Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxv
bmcmIHJlc3VsdCk7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1l
KGNvbnN0IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBk
aXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcg
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBjb21wb25lbnQpOwotICAgICAgICBzdGF0aWMgYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29u
c3QgU3RyaW5nJiBwYXRoKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBnZXRBYnNvbHV0ZVBhdGgo
Y29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYpOwotICAgICAgICBzdGF0aWMgS1VSTCBmaWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYp
OwotICAgICAgICBzdGF0aWMgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKLSAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VGaWxlKFBs
YXRmb3JtRmlsZUhhbmRsZSYpOwotICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHNlZWtGaWxlKFBs
YXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwotICAg
ICAgICBzdGF0aWMgYm9vbCB0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxv
bmcgb2Zmc2V0KTsKLSAgICAgICAgc3RhdGljIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxl
SGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIGludCB3cml0
ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
OwotCi0gICAgICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgc3Rh
dGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChIRk9OVCBmb250KTsKLSNlbmRpZgotI2lmIE9TKExJ
TlVYKSB8fCBPUyhGUkVFQlNEKQotICAgICAgICBzdGF0aWMgdm9pZCBnZXRSZW5kZXJTdHlsZUZv
clN0cmlrZShjb25zdCBjaGFyKiBmYW1pbHksIGludCBzaXplQW5kU3R5bGUsIEZvbnRSZW5kZXJT
dHlsZSogcmVzdWx0KTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hh
cmFjdGVycyhjb25zdCBVQ2hhciosIHNpemVfdCBudW1DaGFyYWN0ZXJzKTsKLSNlbmRpZgotI2lm
IE9TKERBUldJTikKLSAgICAgICAgc3RhdGljIGJvb2wgbG9hZEZvbnQoTlNGb250KiBzcmNGb250
LCBBVFNGb250Q29udGFpbmVyUmVmKiBvdXQpOwotI2VuZGlmCi0KLSAgICAgICAgLy8gRm9ybXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChjb25zdCBE
b2N1bWVudCopOwotCi0gICAgICAgIC8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIC8vIFJldHVybnMg
YSBoYW5kbGUgdG8gdGhlIERCIGZpbGUgYW5kIG9vcHRpb25hbGx5IGEgaGFuZGxlIHRvIGl0cyBj
b250YWluaW5nIGRpcmVjdG9yeQotICAgICAgICBzdGF0aWMgUGxhdGZvcm1GaWxlSGFuZGxlIGRh
dGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdz
KTsKLSAgICAgICAgLy8gUmV0dXJucyBhIFNRTGl0ZSBjb2RlIChTUUxJVEVfT0sgPSAwLCBvbiBz
dWNjZXNzKQotICAgICAgICBzdGF0aWMgaW50IGRhdGFiYXNlRGVsZXRlRmlsZShjb25zdCBTdHJp
bmcmIHZmc0ZpbGVOYW1lLCBib29sIHN5bmNEaXIgPSBmYWxzZSk7Ci0gICAgICAgIC8vIFJldHVy
bnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIERCIGZpbGUKLSAgICAgICAgc3RhdGljIGxvbmcgZGF0
YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKTsKLSAgICAg
ICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgREIgZmlsZQotICAgICAgICBzdGF0aWMgbG9u
ZyBsb25nIGRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSk7Ci0K
LSAgICAgICAgLy8gSW5kZXhlZERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2U+IGlkYkZhY3RvcnkoKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
aWRiU2h1dGRvd24oKTsKLSAgICAgICAgLy8gRXh0cmFjdHMga2V5UGF0aCBmcm9tIHZhbHVlcyBh
bmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBrZXlzLgotICAgICAgICBzdGF0aWMgdm9pZCBj
cmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMpOwotCi0gICAgICAgIC8vIEphdmFT
Y3JpcHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIG5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUqKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgYWxsb3dTY3JpcHREZXNwaXRlU2V0dGluZ3MoY29uc3QgS1VS
TCYgZG9jdW1lbnRVUkwpOwotCi0gICAgICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRp
YyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNp
emVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2UsIGNvbnN0IEtVUkwmIHVybCk7Ci0KLSAg
ICAgICAgLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFN0cmluZyBjb21wdXRlZERlZmF1
bHRMYW5ndWFnZSgpOwotCi0gICAgICAgIC8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBi
b29sIGxheW91dFRlc3RNb2RlKCk7Ci0KLSAgICAgICAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
Ly8gUmV0dXJucyB0aGUgY3VycmVudCBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlZmlsZSwg
aW4gTUIuCi0gICAgICAgIC8vIFRoYXQgaXMgY29tbWl0dGVkIHNpemUgZm9yIFdpbmRvd3MgYW5k
IHZpcnR1YWwgbWVtb3J5IHNpemUgZm9yIFBPU0lYCi0gICAgICAgIHN0YXRpYyBpbnQgbWVtb3J5
VXNhZ2VNQigpOwotCi0gICAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBhbHdheXMgcmV0dXJu
cyBhY3R1YWwgdmFsdWUsIHdpdGhvdXQgYW55IGNhY2hlcy4KLSAgICAgICAgc3RhdGljIGludCBh
Y3R1YWxNZW1vcnlVc2FnZU1CKCk7Ci0KLSAgICAgICAgLy8gTWltZVR5cGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRO
b25JbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBzdGF0aWMg
U3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbik7
Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLQotICAgICAgICAvLyBQbHVnaW4gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICBzdGF0aWMgYm9vbCBwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbklu
Zm8+Kik7Ci0gICAgICAgIHN0YXRpYyBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU9iamVjdChX
aWRnZXQqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcG9wdXBzQWxsb3dlZChOUFApOwotCi0gICAg
ICAgIC8vIFJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBsb2Fk
UGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpOwotCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8QXVkaW9CdXM+IGxvYWRQbGF0Zm9y
bUF1ZGlvUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHNhbXBsZVJhdGUpOwotICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxBdWRpb0J1cz4gZGVjb2RlQXVkaW9GaWxlRGF0YShjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUpOwotI2VuZGlmCi0K
LSAgICAgICAgLy8gU2FuZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIGJvb2wgc2FuZGJveEVuYWJs
ZWQoKTsKLQotICAgICAgICAvLyBTY3JlZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgaW50IHNjcmVl
bkRlcHRoKFdpZGdldCopOwotICAgICAgICBzdGF0aWMgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9u
ZW50KFdpZGdldCopOwotICAgICAgICBzdGF0aWMgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lk
Z2V0Kik7Ci0gICAgICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7Ci0gICAg
ICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7Ci0KLSAgICAg
ICAgLy8gU2hhcmVkVGltZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJl
ZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hhcmVk
VGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBzdG9w
U2hhcmVkVGltZXIoKTsKLQotICAgICAgICAvLyBTdGF0c0NvdW50ZXJzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMg
dm9pZCBkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSk7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgaGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGlu
dCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCk7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1w
bGUsIGludCBib3VuZGFyeVZhbHVlKTsKLQotICAgICAgICAvLyBTdWRkZW4gVGVybWluYXRpb24K
LSAgICAgICAgc3RhdGljIHZvaWQgc3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxl
ZCk7Ci0KLSAgICAgICAgLy8gU3lzdGVtVGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIGRvdWJsZSBjdXJy
ZW50VGltZSgpOwotCi0gICAgICAgIC8vIFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgT1MoV0lORE9XUykKLSAg
ICAgICAgc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oCi0gICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50TWVudUxpc3QoCi0gICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyQXJyb3coCi0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUs
IGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJUaHVt
YigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGlu
dCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFp
bnRTY3JvbGxiYXJUcmFjaygKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRS
ZWN0JiBhbGlnblJlY3QpOwotICAgICAgICBzdGF0aWMgdm9pZCBwYWludFNwaW5CdXR0b24oCi0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50VGV4
dEZpZWxkKAotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJiwgYm9vbCBm
aWxsQ29udGVudEFyZWEsIGJvb2wgZHJhd0VkZ2VzKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFp
bnRUcmFja2JhcigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQg
c3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgcGFpbnRQcm9ncmVzc0JhcigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0IEludFJlY3QmIHZhbHVlUmVjdCwgYm9vbCBkZXRl
cm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25kcyk7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICAg
ICAgLy8gVGhlIFVJIHBhcnQgd2hpY2ggaXMgYmVpbmcgYWNjZXNzZWQuCi0gICAgICAgIGVudW0g
VGhlbWVQYXJ0IHsKLSAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3csCi0gICAgICAg
ICAgICBQYXJ0U2Nyb2xsYmFyTGVmdEFycm93LAotICAgICAgICAgICAgUGFydFNjcm9sbGJhclJp
Z2h0QXJyb3csCi0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKLSAgICAgICAgICAg
IFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWIsCi0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFy
VmVydGljYWxUaHVtYiwKLSAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2ss
Ci0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaywKLSAgICAgICAgfTsKLQot
ICAgICAgICAvLyBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXNzb2NpYXRlZCBQYXJ0LgotICAg
ICAgICBlbnVtIFRoZW1lUGFpbnRTdGF0ZSB7Ci0gICAgICAgICAgICBTdGF0ZURpc2FibGVkLAot
ICAgICAgICAgICAgU3RhdGVIb3ZlciwKLSAgICAgICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAg
ICAgICAgU3RhdGVQcmVzc2VkLAotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBTY3JvbGxi
YXJUcmFja0V4dHJhUGFyYW1zIHsKLSAgICAgICAgICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIGVu
dGlyZSB0cmFjaywgYXMgb3Bwb3NlZCB0byB0aGUgcGFydCBiZWluZyBwYWludGVkLgotICAgICAg
ICAgICAgaW50IHRyYWNrWDsKLSAgICAgICAgICAgIGludCB0cmFja1k7Ci0gICAgICAgICAgICBp
bnQgdHJhY2tXaWR0aDsKLSAgICAgICAgICAgIGludCB0cmFja0hlaWdodDsKLSAgICAgICAgfTsK
LQotICAgICAgICB1bmlvbiBUaGVtZVBhaW50RXh0cmFQYXJhbXMgewotICAgICAgICAgICAgU2Ny
b2xsYmFyVHJhY2tFeHRyYVBhcmFtcyBzY3JvbGxiYXJUcmFjazsKLSAgICAgICAgfTsKLQotICAg
ICAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LiBGb3IgdmFyaWFi
bGUgc2l6ZWQgaXRlbXMKLSAgICAgICAgLy8gbGlrZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgdGh1bWJz
LCB0aGUgd2lkdGggd2lsbCBiZSB0aGUgcmVxdWlyZWQgd2lkdGggb2YKLSAgICAgICAgLy8gdGhl
IHRyYWNrIHdoaWxlIHRoZSBoZWlnaHQgd2lsbCBiZSB0aGUgbWluaW11bSBoZWlnaHQuCi0gICAg
ICAgIHN0YXRpYyBJbnRTaXplIGdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0KTsKLSAgICAgICAg
Ly8gUGFpbnQgdGhlIGdpdmVuIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LgotICAgICAgICBzdGF0aWMg
dm9pZCBwYWludFRoZW1lUGFydChHcmFwaGljc0NvbnRleHQqLCBUaGVtZVBhcnQsIFRoZW1lUGFp
bnRTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFRoZW1lUGFpbnRFeHRyYVBhcmFtcyopOwot
I2VsaWYgT1MoREFSV0lOKQotICAgICAgICBlbnVtIFRoZW1lUGFpbnRTdGF0ZSB7Ci0gICAgICAg
ICAgICBTdGF0ZURpc2FibGVkLAotICAgICAgICAgICAgU3RhdGVJbmFjdGl2ZSwKLSAgICAgICAg
ICAgIFN0YXRlQWN0aXZlLAotICAgICAgICAgICAgU3RhdGVQcmVzc2VkLAotICAgICAgICB9Owot
Ci0gICAgICAgIGVudW0gVGhlbWVQYWludFNpemUgewotICAgICAgICAgICAgU2l6ZVJlZ3VsYXIs
Ci0gICAgICAgICAgICBTaXplU21hbGwsCi0gICAgICAgIH07Ci0KLSAgICAgICAgZW51bSBUaGVt
ZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24gewotICAgICAgICAgICAgU2Nyb2xsYmFyT3JpZW50
YXRpb25Ib3Jpem9udGFsLAotICAgICAgICAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb25WZXJ0aWNh
bCwKLSAgICAgICAgfTsKLQotICAgICAgICBlbnVtIFRoZW1lUGFpbnRTY3JvbGxiYXJQYXJlbnQg
ewotICAgICAgICAgICAgU2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldywKLSAgICAgICAgICAgIFNj
cm9sbGJhclBhcmVudFJlbmRlckxheWVyLAotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBU
aGVtZVBhaW50U2Nyb2xsYmFySW5mbyB7Ci0gICAgICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFy
UGFyZW50IHBhcmVudDsKLSAgICAgICAgICAgIGludCBtYXhWYWx1ZTsKLSAgICAgICAgICAgIGlu
dCBjdXJyZW50VmFsdWU7Ci0gICAgICAgICAgICBpbnQgdmlzaWJsZVNpemU7Ci0gICAgICAgICAg
ICBpbnQgdG90YWxTaXplOwotICAgICAgICB9OwotCi0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50
U2Nyb2xsYmFyVGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgVGhlbWVQYWludFN0YXRlLCBUaGVtZVBh
aW50U2l6ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFRoZW1lUGFpbnRTY3JvbGxiYXJJbmZvJik7
Ci0jZW5kaWYKLQotICAgICAgICAvLyBUcmFjZSBFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgdm9pZCB0
cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4
dHJhKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1l
LCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOwotCi0gICAgICAgIC8vIFZpc2l0ZWQgbGlu
a3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVy
bCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5r
SGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7
Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTGlua1Zpc2l0ZWQoTGlua0hhc2gpOwotICAgIH07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExl
Z2FjeS5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
OSArMzEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9i
amVjdExlZ2FjeS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJD
bGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzIsNyArMTMy
LDcgQEAgU3RyaW5nIENocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Z2V0RGF0YQogICAgICAgICAg
ICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgp
ID8KICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoK
ICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAg
ICAgICAgICBTdHJpbmcgdGV4dCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5U
ZXh0KGJ1ZmZlcik7CisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IFBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7CiAgICAgICAgICAgICBzdWNjZXNzID0gIXRl
eHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIHRleHQ7CiAgICAgICAgIH0KQEAgLTE1
OCw3ICsxNTgsNyBAQCBTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpnZXREYXRhCiAg
ICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwogICAgICAg
ICAgICAgU3RyaW5nIGh0bWxUZXh0OwogICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7Ci0gICAg
ICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRl
eHQsICZzb3VyY2VVUkwpOworICAgICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJl
YWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsKICAgICAgICAgICAgIHN1Y2Nl
c3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0Owog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0
YUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRHJh
Z0RhdGEuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2hyb21p
dW1EYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC02Myw3ICs2Myw3IEBAIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJh
bWUqLCBGaWxlbmFtZUMKICAgICAgICAgaWYgKHRpdGxlKQogICAgICAgICAgICAgKnRpdGxlID0g
bV9wbGF0Zm9ybURyYWdEYXRhLT51cmxUaXRsZSgpOwogICAgIH0gZWxzZSBpZiAoZmlsZW5hbWVQ
b2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsKLSAgICAgICAg
dXJsID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoQ2hyb21pdW1CcmlkZ2U6OmdldEFi
c29sdXRlUGF0aChtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpWzBdKSk7CisgICAgICAg
IHVybCA9IFBsYXRmb3JtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKFBsYXRmb3JtQnJpZGdlOjpnZXRB
YnNvbHV0ZVBhdGgobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKVswXSkpOwogICAgIH0K
ICAgICByZXR1cm4gdXJsOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDg1ICszMSw4NSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ym9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OmRlbGV0ZUZpbGUocGF0aCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpk
ZWxldGVGaWxlKHBhdGgpOwogfQogCiBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGly
ZWN0b3J5KHBhdGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJl
Y3RvcnkocGF0aCk7CiB9CiAKIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBs
b25nIGxvbmcmIHJlc3VsdCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVT
aXplKHBhdGgsIHJlc3VsdCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlU2l6
ZShwYXRoLCByZXN1bHQpOwogfQogCiBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0
IFN0cmluZyYgcGF0aCwgdGltZV90JiByZXN1bHQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJp
ZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCByZXN1bHQpOworICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgcmVzdWx0KTsKIH0K
IAogdm9pZCByZXZlYWxGb2xkZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBDaHJv
bWl1bUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyhwYXRoKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6
cmV2ZWFsRm9sZGVySW5PUyhwYXRoKTsKIH0KIAogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3Qg
U3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGlyZWN0b3J5TmFt
ZShwYXRoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUocGF0aCk7
CiB9CiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBjb21wb25lbnQpOworICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCk7
CiB9CiAKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAg
ICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6Om1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKKyAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6Om1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKIH0KIAogYm9v
bCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1C
cmlkZ2U6OmZpbGVFeGlzdHMocGF0aCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpmaWxl
RXhpc3RzKHBhdGgpOwogfQogCiBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1Ccmlk
Z2U6Om9wZW5GaWxlKHBhdGgsIG1vZGUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6b3Bl
bkZpbGUocGF0aCwgbW9kZSk7CiB9CiAKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSYgaGFuZGxlKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y2xvc2VGaWxlKGhhbmRs
ZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjbG9zZUZpbGUoaGFuZGxlKTsKIH0KIAog
bG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBv
ZmZzZXQsIEZpbGVTZWVrT3JpZ2luIG9yaWdpbikKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1Ccmlk
Z2U6OnNlZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4pOworICAgIHJldHVybiBQbGF0Zm9y
bUJyaWRnZTo6c2Vla0ZpbGUoaGFuZGxlLCBvZmZzZXQsIG9yaWdpbik7CiB9CiAKIGJvb2wgdHJ1
bmNhdGVGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQpCiB7
Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp0cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQp
OworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6dHJ1bmNhdGVGaWxlKGhhbmRsZSwgb2Zmc2V0
KTsKIH0KIAogaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6cmVhZEZy
b21GaWxlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6
OnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CiAKIGludCB3cml0ZVRvRmls
ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRh
LCBsZW5ndGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxl
LCBkYXRhLCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MYW5ndWFnZUNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MYW5ndWFnZUNocm9taXVt
LmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9MYW5ndWFnZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxhbmd1YWdlLmgiCiAKLSNpbmNsdWRlICJD
aHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsNyArNDAsNyBA
QCBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0TGFuZ3VhZ2UoKQogewogICAgIHN0YXRpYyBTdHJpbmcg
Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2U7CiAgICAgaWYgKGNvbXB1dGVkRGVmYXVsdExhbmd1YWdl
LmlzRW1wdHkoKSkKLSAgICAgICAgY29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UgPSBDaHJvbWl1bUJy
aWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKTsKKyAgICAgICAgY29tcHV0ZWREZWZhdWx0
TGFuZ3VhZ2UgPSBQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKTsKICAg
ICByZXR1cm4gY29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtI
YXNoQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsMTggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogCi0jaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNp
Z25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hh
c2godXJsLCBsZW5ndGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtI
YXNoKHVybCwgbGVuZ3RoKTsKIH0KIAogTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtV
UkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewotICAgIHJldHVy
biBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGJhc2UsIGF0dHJpYnV0ZVVSTCk7Cisg
ICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goYmFzZSwgYXR0cmlidXRl
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDIwICszMSwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRh
dGFDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogLy8gTk9URTog
VW5saWtlIG90aGVyIHBvcnRzLCB3ZSBkb24ndCB1c2UgdGhlIHNoYXJlZCBpbXBsZW1lbnRhdGlv
biBiaXRzIGluCiAvLyBNSU1FVHlwZVJlZ2lzdHJ5LmNwcC4gIEluc3RlYWQsIHdlIG5lZWQgdG8g
cm91dGUgbW9zdCBmdW5jdGlvbnMgdmlhIHRoZQotLy8gQ2hyb21pdW1CcmlkZ2UgdG8gdGhlIGVt
YmVkZGVyLgorLy8gUGxhdGZvcm1CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyLgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVu
c2lvbihjb25zdCBTdHJpbmcgJmV4dCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6Om1p
bWVUeXBlRm9yRXh0ZW5zaW9uKGV4dCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjptaW1l
VHlwZUZvckV4dGVuc2lvbihleHQpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBmaWxlIGV4dGVuc2lv
biBpZiBvbmUgaXMgZm91bmQuICBEb2VzIG5vdCBpbmNsdWRlIHRoZSBkb3QgaW4gdGhlCkBAIC01
NSw3ICs1NSw3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHQKICAg
ICAvLyBGSVhNRTogSXMgdGhpcyByZWFsbHkgbmVjZXNzYXJ5Pz8KICAgICBTdHJpbmcgbWltZVR5
cGUgPSB0eXBlLnN1YnN0cmluZygwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZS5maW5kKCc7
JykpKTsKIAotICAgIFN0cmluZyBleHQgPSBDaHJvbWl1bUJyaWRnZTo6cHJlZmVycmVkRXh0ZW5z
aW9uRm9yTUlNRVR5cGUodHlwZSk7CisgICAgU3RyaW5nIGV4dCA9IFBsYXRmb3JtQnJpZGdlOjpw
cmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSh0eXBlKTsKICAgICBpZiAoIWV4dC5pc0VtcHR5
KCkgJiYgZXh0WzBdID09ICcuJykKICAgICAgICAgZXh0ID0gZXh0LnN1YnN0cmluZygxKTsKIApA
QCAtODEsNyArODEsNyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQ
CiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCiB7IAotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSk7CiB9CiAKIGJvb2wgTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKQEAgLTk2LDEyICs5NiwxMiBAQCBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNCiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2Ny
aXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVU
eXBlKTsKIH0KICAgICAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFn
ZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgcmV0dXJuIENocm9taXVt
QnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpOworICAgIHJldHVy
biBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsK
IH0KIAogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE1lZGlhTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gNzYxNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCArMzEsMjAgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5o
IgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRl
ICJtYXJrdXAuaCIKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogcwog
I2VuZGlmCiAgICAgcmVwbGFjZU5CU1BXaXRoU3BhY2UocGxhaW5UZXh0KTsKIAotICAgIENocm9t
aXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNlbGVjdGlvbihodG1sLCB1cmwsIHBsYWluVGV4dCwg
Y2FuU21hcnRDb3B5T3JEZWxldGUpOworICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0
ZVNlbGVjdGlvbihodG1sLCB1cmwsIHBsYWluVGV4dCwgY2FuU21hcnRDb3B5T3JEZWxldGUpOwog
fQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkK
QEAgLTk5LDkgKzk5LDkgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBT
dAogI2lmIE9TKFdJTkRPV1MpCiAgICAgU3RyaW5nIHBsYWluVGV4dCh0ZXh0KTsKICAgICByZXBs
YWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMocGxhaW5UZXh0KTsKLSAgICBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKKyAgICBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKICNlbHNlCi0g
ICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KHRleHQpOworICAgIFBs
YXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dCh0ZXh0KTsKICNlbmRpZgogfQog
CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJM
JiB1cgogICAgICAgICAgICAgdGl0bGUgPSB1cmwuaG9zdCgpOwogICAgIH0KIAotICAgIENocm9t
aXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVSTCh1cmwsIHRpdGxlKTsKKyAgICBQbGF0Zm9ybUJy
aWRnZTo6Y2xpcGJvYXJkV3JpdGVVUkwodXJsLCB0aXRsZSk7CiB9CiAKIHZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKQEAgLTE1MCwxNyArMTUwLDE3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2Rl
KiBub2RlLCAKICAgICB9CiAgICAgS1VSTCB1cmwgPSB1cmxTdHJpbmcuaXNFbXB0eSgpID8gS1VS
TCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxp
bmdIVE1MU3BhY2VzKHVybFN0cmluZykpOwogCi0gICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlSW1hZ2UoYml0bWFwLCB1cmwsIHRpdGxlKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xp
cGJvYXJkV3JpdGVJbWFnZShiaXRtYXAsIHVybCwgdGl0bGUpOwogfQogCiBib29sIFBhc3RlYm9h
cmQ6OmNhblNtYXJ0UmVwbGFjZSgpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6V2ViU21hcnRQYXN0ZUZv
cm1hdCwgbV9zZWxlY3Rpb25Nb2RlID8gUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZl
ciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7CisgICAgcmV0dXJuIFBsYXRm
b3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6
V2ViU21hcnRQYXN0ZUZvcm1hdCwgbV9zZWxlY3Rpb25Nb2RlID8gUGFzdGVib2FyZFByaXZhdGU6
OlNlbGVjdGlvbkJ1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7CiB9
CiAKIFN0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqIGZyYW1lKQogewotICAgIHJl
dHVybiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChtX3NlbGVjdGlvbk1v
ZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogUGFzdGVib2FyZFByaXZh
dGU6OlN0YW5kYXJkQnVmZmVyKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFJlYWRQbGFpblRleHQobV9zZWxlY3Rpb25Nb2RlID8gUGFzdGVib2FyZFByaXZhdGU6OlNlbGVj
dGlvbkJ1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7CiB9CiAKIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChG
cmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRl
eHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQpAQCAtMTY4LDEwICsxNjgsMTAgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFs
c2U7CiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPSBtX3Nl
bGVjdGlvbk1vZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwogCi0gICAgaWYgKENocm9taXVtQnJpZGdlOjpj
bGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6SFRNTEZvcm1hdCwg
YnVmZmVyKSkgeworICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFp
bGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkhUTUxGb3JtYXQsIGJ1ZmZlcikpIHsKICAgICAgICAg
U3RyaW5nIG1hcmt1cDsKICAgICAgICAgS1VSTCBzcmNVUkw7Ci0gICAgICAgIENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwpOworICAgICAg
ICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmbWFya3VwLCAmc3Jj
VVJMKTsKIAogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPQogICAg
ICAgICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJr
dXAsIHNyY1VSTCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKQEAgLTE4MCw3ICsxODAs
NyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgfQogCiAg
ICAgaWYgKGFsbG93UGxhaW5UZXh0KSB7Ci0gICAgICAgIFN0cmluZyBtYXJrdXAgPSBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOworICAgICAgICBTdHJpbmcg
bWFya3VwID0gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsK
ICAgICAgICAgaWYgKCFtYXJrdXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjaG9zZVBsYWlu
VGV4dCA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bs
YXRmb3JtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1CcmlkZ2UuaAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEs
MTcgKzMxLDMyMyBAQAogI2lmbmRlZiBQbGF0Zm9ybUJyaWRnZV9oCiAjZGVmaW5lIFBsYXRmb3Jt
QnJpZGdlX2gKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJMaW5rSGFzaC5oIgor
I2luY2x1ZGUgIlBhc3NSZWZQdHIuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3R5cGVkZWYg
c3RydWN0IE5QT2JqZWN0IE5QT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX05QUCBOUFBfdDsKK3R5
cGVkZWYgTlBQX3QqIE5QUDsKKworI2lmIE9TKERBUldJTikKK3R5cGVkZWYgc3RydWN0IENHRm9u
dCogQ0dGb250UmVmOwordHlwZWRlZiB1aW50cHRyX3QgQVRTRm9udENvbnRhaW5lclJlZjsKKyNp
ZmRlZiBfX09CSkNfXworQGNsYXNzIE5TRm9udDsKKyNlbHNlCitjbGFzcyBOU0ZvbnQ7CisjZW5k
aWYKKyNlbmRpZiAvLyBPUyhEQVJXSU4pCisKKyNpZiBPUyhXSU5ET1dTKQordHlwZWRlZiBzdHJ1
Y3QgSEZPTlRfXyogSEZPTlQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBG
SVhNRTogQSBiZXR0ZXIgbmFtZSBmb3IgQ2hyb21pdW1CcmlkZ2UgaXMgUGxhdGZvcm1CcmlkZ2Uu
IEFuZHJvaWQgYWxyZWFkeQotLy8gdXNlcyBQbGF0Zm9ybUJyaWRnZSBzbyB0aGUgY29kZSB0aGF0
IGlzIHNoYXJlZCBhbW9uZyB0aGUgQW5kcm9pZCBhbmQgQ2hyb21pdW0KLS8vIHBvcnRzIGlzIGdy
YWR1YWxseSBtb3ZpbmcgdG93YXJkcyB1c2luZyBQbGF0Zm9ybUJyaWRnZS4gT25jZSB0aGUgQW5k
cm9pZAotLy8gdW5mb3JraW5nIGlzIGRvbmUsIHdlIHdpbGwgY2hhbmdlIHRoZSBuYW1lIG9mIENo
cm9taXVtQnJpZGdlIHRvIFBsYXRmb3JtQnJpZGdlCi0vLyBhbmQgbWVyZ2UgdGhlIHR3byBjbGFz
c2VzIGludG8gb25lIHRoYXQgd2lsbCBiZSBzaGFyZWQgYnkgYm90aCBwb3J0cy4KLXR5cGVkZWYg
Q2hyb21pdW1CcmlkZ2UgUGxhdGZvcm1CcmlkZ2U7CitjbGFzcyBDbGlwYm9hcmREYXRhOworY2xh
c3MgQ29sb3I7CitjbGFzcyBDdXJzb3I7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEZyYW1lOwor
Y2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW07CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbWFnZTsKK2NsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCS2V5OworY2xhc3MgSW50UmVjdDsK
K2NsYXNzIEtVUkw7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CitjbGFzcyBXaWRnZXQ7
CisKK3N0cnVjdCBDb29raWU7CitzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOworCisvLyBBbiBpbnRl
cmZhY2UgdG8gdGhlIGVtYmVkZGluZyBsYXllciwgd2hpY2ggaGFzIHRoZSBhYmlsaXR5IHRvIGFu
c3dlcgorLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0gYW5kIHNvIG9uLi4uCisKK2NsYXNz
IFBsYXRmb3JtQnJpZGdlIHsKK3B1YmxpYzoKKyAgICAvLyBDYWNoZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRp
YyB2b2lkIGNhY2hlTWV0YWRhdGEoY29uc3QgS1VSTCYsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNv
bnN0IFZlY3RvcjxjaGFyPiYpOworCisgICAgLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgYm9v
bCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
Rm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKKworICAgIHN0YXRp
YyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBsYWluVGV4dChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7CisKKyAgICAvLyBPbmx5
IHRoZSBjbGlwYm9hcmRSZWFkIGZ1bmN0aW9ucyB0YWtlIGEgYnVmZmVyIGFyZ3VtZW50IGJlY2F1
c2UKKyAgICAvLyBDaHJvbWl1bSBjdXJyZW50bHkgdXNlcyBhIGRpZmZlcmVudCB0ZWNobmlxdWUg
dG8gd3JpdGUgdG8gYWx0ZXJuYXRlCisgICAgLy8gY2xpcGJvYXJkIGJ1ZmZlcnMuCisgICAgc3Rh
dGljIHZvaWQgY2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYsIGJvb2wpOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRl
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRl
VVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwYm9h
cmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG1ldGFkYXRhKTsKKworICAgIC8vIElu
dGVyZmFjZSBmb3IgaGFuZGxpbmcgY29weSBhbmQgcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBz
ZWxlY3Rpb24gY29weS4KKyAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IGNsaXBib2FyZFJlYWRB
dmFpbGFibGVUeXBlcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBib29sKiBj
b250YWluc0ZpbGVuYW1lcyk7CisgICAgc3RhdGljIGJvb2wgY2xpcGJvYXJkUmVhZERhdGEoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0eXBlLCBTdHJp
bmcmIGRhdGEsIFN0cmluZyYgbWV0YWRhdGEpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBj
bGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIp
OworCisgICAgLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVzKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHN0YXRp
YyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYpOworICAgIHN0YXRpYyBib29sIHJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVO
YW1lKTsKKyAgICBzdGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwor
CisgICAgLy8gRE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKTsKKworICAgIC8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQg
cmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBmaWxlRXhp
c3RzKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3Ry
aW5nJik7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5n
Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25n
JiByZXN1bHQpOworICAgIHN0YXRpYyBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0
IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKKyAgICBzdGF0aWMgU3RyaW5nIGRpcmVjdG9yeU5h
bWUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KTsK
KyAgICBzdGF0aWMgYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGdldEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBz
dGF0aWMgYm9vbCBpc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgS1VSTCBm
aWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUpOworICAgIHN0YXRp
YyB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKKyAgICBzdGF0aWMgbG9uZyBs
b25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNl
ZWtPcmlnaW4pOworICAgIHN0YXRpYyBib29sIHRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIGxvbmcgbG9uZyBvZmZzZXQpOworICAgIHN0YXRpYyBpbnQgcmVhZEZyb21GaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisgICAgc3RhdGljIGludCB3
cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpOworCisgICAgLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpZiBPUyhXSU5ET1dTKQorICAgIHN0YXRpYyBi
b29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQpOworI2VuZGlmCisjaWYgT1MoTElOVVgpIHx8IE9T
KEZSRUVCU0QpCisgICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29uc3Qg
Y2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCk7
CisgICAgc3RhdGljIFN0cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciosIHNpemVfdCBudW1DaGFyYWN0ZXJzKTsKKyNlbmRpZgorI2lmIE9TKERBUldJTikKKyAgICBz
dGF0aWMgYm9vbCBsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWluZXJSZWYq
IG91dCk7CisjZW5kaWYKKworICAgIC8vIEZvcm1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQgbm90
aWZ5Rm9ybVN0YXRlQ2hhbmdlZChjb25zdCBEb2N1bWVudCopOworCisgICAgLy8gRGF0YWJhc2Vz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBSZXR1cm5zIGEgaGFuZGxlIHRvIHRoZSBEQiBmaWxlIGFuZCBvb3B0aW9uYWxs
eSBhIGhhbmRsZSB0byBpdHMgY29udGFpbmluZyBkaXJlY3RvcnkKKyAgICBzdGF0aWMgUGxhdGZv
cm1GaWxlSGFuZGxlIGRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGbGVOYW1lLCBp
bnQgZGVzaXJlZEZsYWdzKTsKKyAgICAvLyBSZXR1cm5zIGEgU1FMaXRlIGNvZGUgKFNRTElURV9P
SyA9IDAsIG9uIHN1Y2Nlc3MpCisgICAgc3RhdGljIGludCBkYXRhYmFzZURlbGV0ZUZpbGUoY29u
c3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyID0gZmFsc2UpOworICAgIC8vIFJl
dHVybnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIERCIGZpbGUKKyAgICBzdGF0aWMgbG9uZyBkYXRh
YmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpOworICAgIC8v
IFJldHVybnMgdGhlIHNpemUgb2YgdGhlIERCIGZpbGUKKyAgICBzdGF0aWMgbG9uZyBsb25nIGRh
dGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSk7CisKKyAgICAvLyBJ
bmRleGVkREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlPiBpZGJGYWN0b3J5KCk7CisgICAgc3RhdGljIHZvaWQgaWRiU2h1dGRvd24oKTsKKyAgICAv
LyBFeHRyYWN0cyBrZXlQYXRoIGZyb20gdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25k
aW5nIGtleXMuCisgICAgc3RhdGljIHZvaWQgY3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFs
dWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
PiYgdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+
JiBrZXlzKTsKKworICAgIC8vIEphdmFTY3JpcHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQgbm90aWZ5SlNP
dXRPZk1lbW9yeShGcmFtZSopOworICAgIHN0YXRpYyBib29sIGFsbG93U2NyaXB0RGVzcGl0ZVNl
dHRpbmdzKGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKTsKKworICAgIC8vIEtleWdlbiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWdu
ZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYpOwor
CisgICAgLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVkRGVmYXVsdExh
bmd1YWdlKCk7CisKKyAgICAvLyBMYXlvdXRUZXN0TW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRpYyBib29sIGxheW91dFRl
c3RNb2RlKCk7CisKKyAgICAvLyBNZW1vcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFJldHVybnMgdGhlIGN1cnJl
bnQgc3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgcGFnZWZpbGUsIGluIE1CLgorICAgIC8vIFRoYXQg
aXMgY29tbWl0dGVkIHNpemUgZm9yIFdpbmRvd3MgYW5kIHZpcnR1YWwgbWVtb3J5IHNpemUgZm9y
IFBPU0lYCisgICAgc3RhdGljIGludCBtZW1vcnlVc2FnZU1CKCk7CisKKyAgICAvLyBTYW1lIGFz
IGFib3ZlLCBidXQgYWx3YXlzIHJldHVybnMgYWN0dWFsIHZhbHVlLCB3aXRob3V0IGFueSBjYWNo
ZXMuCisgICAgc3RhdGljIGludCBhY3R1YWxNZW1vcnlVc2FnZU1CKCk7CisKKyAgICAvLyBNaW1l
VHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBv
cnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgc3RhdGlj
IFN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24p
OworICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgLy8gUGx1Z2luIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMg
Ym9vbCBwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbkluZm8+Kik7CisgICAgc3Rh
dGljIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCopOworICAgIHN0YXRp
YyBib29sIHBvcHVwc0FsbG93ZWQoTlBQKTsKKworICAgIC8vIFJlc291cmNlcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hh
ciogbmFtZSk7CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIHN0YXRpYyBQYXNzT3duUHRy
PEF1ZGlvQnVzPiBsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGRv
dWJsZSBzYW1wbGVSYXRlKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxBdWRpb0J1cz4gZGVjb2Rl
QXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QsIGRvdWJsZSBzYW1wbGVSYXRl
KTsKKyNlbmRpZgorCisgICAgLy8gU2FuZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgYm9vbCBzYW5kYm94
RW5hYmxlZCgpOworCisgICAgLy8gU2NyZWVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgaW50IHNjcmVlbkRl
cHRoKFdpZGdldCopOworICAgIHN0YXRpYyBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lk
Z2V0Kik7CisgICAgc3RhdGljIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopOworICAg
IHN0YXRpYyBJbnRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7CisgICAgc3RhdGljIEludFJlY3Qg
c2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKKworICAgIC8vIFNoYXJlZFRpbWVycyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
c3RhdGljIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSk7CisgICAgc3Rh
dGljIHZvaWQgc3RvcFNoYXJlZFRpbWVyKCk7CisKKyAgICAvLyBTdGF0c0NvdW50ZXJzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0
YXRpYyB2b2lkIGRlY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKTsKKyAgICBz
dGF0aWMgdm9pZCBpbmNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSk7CisgICAg
c3RhdGljIHZvaWQgaGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBz
YW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCk7CisgICAgc3RhdGljIHZv
aWQgaGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50
IGJvdW5kYXJ5VmFsdWUpOworCisgICAgLy8gU3VkZGVuIFRlcm1pbmF0aW9uCisgICAgc3RhdGlj
IHZvaWQgc3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCk7CisKKyAgICAvLyBT
eXN0ZW1UaW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIHN0YXRpYyBkb3VibGUgY3VycmVudFRpbWUoKTsKKworICAgIC8vIFRo
ZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisjaWYgT1MoV0lORE9XUykKKyAgICBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbigK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNz
aWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50TWVudUxpc3Qo
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFz
c2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJh
ckFycm93KAorICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgc3RhdGUsIGludCBjbGFzc2lj
U3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJhclRo
dW1iKAorICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRTY3Jv
bGxiYXJUcmFjaygKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmIGFsaWdu
UmVjdCk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRTcGluQnV0dG9uKAorICAgICAgICBHcmFwaGlj
c0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRUZXh0RmllbGQoCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBDb2xvciYsIGJvb2wgZmlsbENvbnRlbnRBcmVhLCBib29sIGRyYXdF
ZGdlcyk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRUcmFja2JhcigKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50
UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0IEludFJlY3QmIHZhbHVl
UmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25kcyk7CisjZWxpZiBP
UyhMSU5VWCkKKyAgICAvLyBUaGUgVUkgcGFydCB3aGljaCBpcyBiZWluZyBhY2Nlc3NlZC4KKyAg
ICBlbnVtIFRoZW1lUGFydCB7CisgICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3csCisgICAg
ICAgIFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCisgICAgICAgIFBhcnRTY3JvbGxiYXJSaWdodEFy
cm93LAorICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKKyAgICAgICAgUGFydFNjcm9sbGJh
ckhvcml6b250YWxUaHVtYiwKKyAgICAgICAgUGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIsCisg
ICAgICAgIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2ssCisgICAgICAgIFBhcnRTY3JvbGxi
YXJWZXJ0aWNhbFRyYWNrLAorICAgIH07CisKKyAgICAvLyBUaGUgY3VycmVudCBzdGF0ZSBvZiB0
aGUgYXNzb2NpYXRlZCBQYXJ0LgorICAgIGVudW0gVGhlbWVQYWludFN0YXRlIHsKKyAgICAgICAg
U3RhdGVEaXNhYmxlZCwKKyAgICAgICAgU3RhdGVIb3ZlciwKKyAgICAgICAgU3RhdGVOb3JtYWws
CisgICAgICAgIFN0YXRlUHJlc3NlZCwKKyAgICB9OworCisgICAgc3RydWN0IFNjcm9sbGJhclRy
YWNrRXh0cmFQYXJhbXMgeworICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUgdHJh
Y2ssIGFzIG9wcG9zZWQgdG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgaW50IHRy
YWNrWDsKKyAgICAgICAgaW50IHRyYWNrWTsKKyAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAg
ICAgIGludCB0cmFja0hlaWdodDsKKyAgICB9OworCisgICAgdW5pb24gVGhlbWVQYWludEV4dHJh
UGFyYW1zIHsKKyAgICAgICAgU2Nyb2xsYmFyVHJhY2tFeHRyYVBhcmFtcyBzY3JvbGxiYXJUcmFj
azsKKyAgICB9OworCisgICAgLy8gR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gdGhlbWUgcGFy
dC4gRm9yIHZhcmlhYmxlIHNpemVkIGl0ZW1zCisgICAgLy8gbGlrZSB2ZXJ0aWNhbCBzY3JvbGxi
YXIgdGh1bWJzLCB0aGUgd2lkdGggd2lsbCBiZSB0aGUgcmVxdWlyZWQgd2lkdGggb2YKKyAgICAv
LyB0aGUgdHJhY2sgd2hpbGUgdGhlIGhlaWdodCB3aWxsIGJlIHRoZSBtaW5pbXVtIGhlaWdodC4K
KyAgICBzdGF0aWMgSW50U2l6ZSBnZXRUaGVtZVBhcnRTaXplKFRoZW1lUGFydCk7CisgICAgLy8g
UGFpbnQgdGhlIGdpdmVuIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LgorICAgIHN0YXRpYyB2b2lkIHBh
aW50VGhlbWVQYXJ0KEdyYXBoaWNzQ29udGV4dCosIFRoZW1lUGFydCwgVGhlbWVQYWludFN0YXRl
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVGhlbWVQYWludEV4dHJhUGFyYW1zKik7CisjZWxpZiBP
UyhEQVJXSU4pCisgICAgZW51bSBUaGVtZVBhaW50U3RhdGUgeworICAgICAgICBTdGF0ZURpc2Fi
bGVkLAorICAgICAgICBTdGF0ZUluYWN0aXZlLAorICAgICAgICBTdGF0ZUFjdGl2ZSwKKyAgICAg
ICAgU3RhdGVQcmVzc2VkLAorICAgIH07CisKKyAgICBlbnVtIFRoZW1lUGFpbnRTaXplIHsKKyAg
ICAgICAgU2l6ZVJlZ3VsYXIsCisgICAgICAgIFNpemVTbWFsbCwKKyAgICB9OworCisgICAgZW51
bSBUaGVtZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24geworICAgICAgICBTY3JvbGxiYXJPcmll
bnRhdGlvbkhvcml6b250YWwsCisgICAgICAgIFNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWws
CisgICAgfTsKKworICAgIGVudW0gVGhlbWVQYWludFNjcm9sbGJhclBhcmVudCB7CisgICAgICAg
IFNjcm9sbGJhclBhcmVudFNjcm9sbFZpZXcsCisgICAgICAgIFNjcm9sbGJhclBhcmVudFJlbmRl
ckxheWVyLAorICAgIH07CisKKyAgICBzdHJ1Y3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8gewor
ICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAg
ICAgIFRoZW1lUGFpbnRTY3JvbGxiYXJQYXJlbnQgcGFyZW50OworICAgICAgICBpbnQgbWF4VmFs
dWU7CisgICAgICAgIGludCBjdXJyZW50VmFsdWU7CisgICAgICAgIGludCB2aXNpYmxlU2l6ZTsK
KyAgICAgICAgaW50IHRvdGFsU2l6ZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgcGFpbnRT
Y3JvbGxiYXJUaHVtYihHcmFwaGljc0NvbnRleHQqLCBUaGVtZVBhaW50U3RhdGUsIFRoZW1lUGFp
bnRTaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8mKTsK
KyNlbmRpZgorCisgICAgLy8gVHJhY2UgRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgdm9pZCB0cmFjZUV2ZW50
QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCosIGNvbnN0IGNoYXIqIGV4dHJhKTsKKyAgICBz
dGF0aWMgdm9pZCB0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqLCBjb25zdCBj
aGFyKiBleHRyYSk7CisKKyAgICAvLyBWaXNpdGVkIGxpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRpYyBMaW5rSGFzaCB2
aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBz
dGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKKyAgICBzdGF0aWMgYm9vbCBpc0xpbmtWaXNpdGVk
KExpbmtIYXNoKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFBs
YXRmb3JtQnJpZGdlX2gKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1T
Y3JlZW5DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDM0ICszMSwzNCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAKLSNpbmNsdWRl
ICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBzY3JlZW5EZXB0aChX
aWRnZXQqIHdpZGdldCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRlcHRo
KHdpZGdldCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5EZXB0aCh3aWRnZXQp
OwogfQogCiBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0g
ICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudCh3aWRnZXQp
OworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQod2lk
Z2V0KTsKIH0KIAogYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0g
ICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUod2lkZ2V0KTsKKyAg
ICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZSh3aWRnZXQpOwogfQog
CiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICByZXR1cm4gQ2hy
b21pdW1CcmlkZ2U6OnNjcmVlblJlY3Qod2lkZ2V0KTsKKyAgICByZXR1cm4gUGxhdGZvcm1Ccmlk
Z2U6OnNjcmVlblJlY3Qod2lkZ2V0KTsKIH0KIAogRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJl
Y3QoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5B
dmFpbGFibGVSZWN0KHdpZGdldCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5B
dmFpbGFibGVSZWN0KHdpZGdldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVE
YXRhT2JqZWN0LmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MCArMzEsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWFkYWJsZURhdGFP
YmplY3QuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2xpcGJv
YXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlBhc3Rl
Ym9hcmRQcml2YXRlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04MCwxOSArODAsMTkgQEAgU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVj
dDo6Z2V0RGF0YShjb25zdAogICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0
ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJp
dmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBkYXRhID0gQ2hyb21pdW1CcmlkZ2U6
OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAgICAgICAgICAgIGRhdGEgPSBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwogICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewogICAgICAgICAgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPQogICAgICAgICAgICAgICAgIFBhc3Rl
Ym9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KICAgICAgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKICAgICAgICAgICAg
ICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAgICBLVVJM
IGlnbm9yZWRTb3VyY2VVUkw7Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJk
UmVhZEhUTUwoYnVmZmVyLCAmZGF0YSwgJmlnbm9yZWRTb3VyY2VVUkwpOworICAgICAgICAgICAg
UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJmRhdGEsICZpZ25vcmVk
U291cmNlVVJMKTsKICAgICAgICAgfQogICAgICAgICBzdWNjZWVkZWQgPSAhZGF0YS5pc0VtcHR5
KCk7CiAgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KLSAgICBzdWNjZWVkZWQgPSBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgc3VjY2VlZGVkID0gUGxhdGZvcm1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9jbGlwYm9h
cmRUeXBlKSwgdHlwZSwgZGF0YSwgaWdub3JlZE1ldGFkYXRhKTsKICAgICByZXR1cm4gZGF0YTsK
IH0KQEAgLTEwMSw3ICsxMDEsNyBAQCBTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRs
ZSgpIGNvCiB7CiAgICAgU3RyaW5nIGlnbm9yZWREYXRhOwogICAgIFN0cmluZyB1cmxUaXRsZTsK
LSAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgUGxhdGZvcm1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9jbGlwYm9h
cmRUeXBlKSwgbWltZVR5cGVUZXh0VVJJTGlzdCwgaWdub3JlZERhdGEsIHVybFRpdGxlKTsKICAg
ICByZXR1cm4gdXJsVGl0bGU7CiB9CkBAIC0xMTAsNyArMTEwLDcgQEAgS1VSTCBSZWFkYWJsZURh
dGFPYmplY3Q6Omh0bWxCYXNlVXJsKCkgYwogewogICAgIFN0cmluZyBpZ25vcmVkRGF0YTsKICAg
ICBTdHJpbmcgaHRtbEJhc2VVcmw7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRE
YXRhKAorICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKICAgICAgICAgY2xp
cGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlwZSksIG1pbWVUeXBlVGV4dEhUTUwsIGlnbm9yZWRE
YXRhLCBodG1sQmFzZVVybCk7CiAgICAgcmV0dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBodG1s
QmFzZVVybCk7CiB9CkBAIC0xMjMsNyArMTIzLDcgQEAgYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6
OmNvbnRhaW5zRmlsZW5hbQogCiBWZWN0b3I8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OmZp
bGVuYW1lcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkRmlsZW5hbWVzKGNsaXBib2FyZEJ1ZmZlcihtX2NsaXBib2FyZFR5cGUpKTsKKyAgICByZXR1
cm4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMoY2xpcGJvYXJkQnVmZmVy
KG1fY2xpcGJvYXJkVHlwZSkpOwogfQogCiB2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6ZW5zdXJl
VHlwZUNhY2hlSW5pdGlhbGl6ZWQoKSBjb25zdApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgUmVh
ZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGUKICAgICBpZiAobV9pc1R5cGVDYWNoZUlu
aXRpYWxpemVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3R5cGVzID0gQ2hyb21pdW1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKKyAgICBtX3R5cGVzID0gUGxhdGZvcm1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAgY2xpcGJvYXJkQnVm
ZmVyKG1fY2xpcGJvYXJkVHlwZSksICZtX2NvbnRhaW5zRmlsZW5hbWVzKTsKICAgICBtX2lzVHlw
ZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
U0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKIAot
I2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01
MSw3ICs1MSw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBjaGFs
bGVuZ2VTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplSW5kZXgsCisgICAgcmV0dXJuIFBsYXRmb3Jt
QnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoa2V5U2l6ZUluZGV4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYWxsZW5nZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNocm9t
aXVtLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
QnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eC5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCkBAIC00NiwyMiArNDYsMjIgQEAg
U2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaAogaW50IFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eDo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKQogewogICAgIC8vIEhvcml6IGFuZCBWZXJ0IHNjcm9sbGJhcnMgYXJlIHRo
ZSBzYW1lIHRoaWNrbmVzcy4KLSAgICBJbnRTaXplIHNjcm9sbGJhclNpemUgPSBDaHJvbWl1bUJy
aWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRp
Y2FsVHJhY2spOworICAgIEludFNpemUgc2Nyb2xsYmFyU2l6ZSA9IFBsYXRmb3JtQnJpZGdlOjpn
ZXRUaGVtZVBhcnRTaXplKFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFj
ayk7CiAgICAgcmV0dXJuIHNjcm9sbGJhclNpemUud2lkdGgoKTsKIH0KIAogdm9pZCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqIGdj
LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFy
dCBwYXJ0VHlwZSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRl
ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IHBhcnRUeXBlID8gQ2hyb21pdW1CcmlkZ2U6
OlN0YXRlSG92ZXIgOiBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAgUGxhdGZvcm1C
cmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9
PSBwYXJ0VHlwZSA/IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUhvdmVyIDogUGxhdGZvcm1CcmlkZ2U6
OlN0YXRlTm9ybWFsOwogICAgIEludFJlY3QgYWxpZ25SZWN0ID0gdHJhY2tSZWN0KHNjcm9sbGJh
ciwgZmFsc2UpOwotICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMgZXh0
cmFQYXJhbXM7CisgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBleHRy
YVBhcmFtczsKICAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50cmFja1ggPSBhbGlnblJl
Y3QueCgpOwogICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrWSA9IGFsaWduUmVj
dC55KCk7CiAgICAgZXh0cmFQYXJhbXMuc2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aCA9IGFsaWdu
UmVjdC53aWR0aCgpOwogICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrSGVpZ2h0
ID0gYWxpZ25SZWN0LmhlaWdodCgpOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludFRoZW1lUGFy
dCgKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCiAgICAgICAgIGdjLAotICAg
ICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IENo
cm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIDogQ2hyb21pdW1Ccmlk
Z2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAorICAgICAgICBzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Ny
b2xsYmFySG9yaXpvbnRhbFRyYWNrIDogUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0
aWNhbFRyYWNrLAogICAgICAgICBzdGF0ZSwKICAgICAgICAgcmVjdCwKICAgICAgICAgJmV4dHJh
UGFyYW1zKTsKQEAgLTY5LDUyICs2OSw1MiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1M
aW51eDo6cGFpbnRUCiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEJ1
dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQogewotICAgIENocm9taXVtQnJpZGdlOjpU
aGVtZVBhcnQgcGFpbnRQYXJ0OwotICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUg
c3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAgUGxhdGZvcm1CcmlkZ2U6
OlRoZW1lUGFydCBwYWludFBhcnQ7CisgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0
ZSBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZU5vcm1hbDsKICAgICBib29sIGNoZWNrTWlu
ID0gZmFsc2U7CiAgICAgYm9vbCBjaGVja01heCA9IGZhbHNlOwogICAgIGlmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBpZiAocGFy
dCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAgICAgICBwYWludFBhcnQgPSBDaHJv
bWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAgICAgICAgICAgIHBhaW50UGFy
dCA9IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93OwogICAgICAgICAgICAg
Y2hlY2tNaW4gPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFpbnRQYXJ0
ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OworICAgICAgICAgICAg
cGFpbnRQYXJ0ID0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OwogICAg
ICAgICAgICAgY2hlY2tNYXggPSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkgewotICAgICAgICAgICAgcGFpbnRQ
YXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJVcEFycm93OworICAgICAgICAgICAg
cGFpbnRQYXJ0ID0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJVcEFycm93OwogICAgICAg
ICAgICAgY2hlY2tNaW4gPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFp
bnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7CisgICAgICAg
ICAgICBwYWludFBhcnQgPSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsK
ICAgICAgICAgICAgIGNoZWNrTWF4ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAo
KGNoZWNrTWluICYmIChzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA8PSAwKSkKICAgICAgICAgfHwg
KGNoZWNrTWF4ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpID09IHNjcm9sbGJhci0+bWF4aW11
bSgpKSkgewotICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVkOwor
ICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVkOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSkKLSAgICAg
ICAgICAgIHN0YXRlID0gQ2hyb21pdW1CcmlkZ2U6OlN0YXRlUHJlc3NlZDsKKyAgICAgICAgICAg
IHN0YXRlID0gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3NlZDsKICAgICAgICAgZWxzZSBpZiAo
cGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCi0gICAgICAgICAgICBzdGF0ZSA9IENo
cm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVyOworICAgICAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJy
aWRnZTo6U3RhdGVIb3ZlcjsKICAgICB9Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGhlbWVQ
YXJ0KGdjLCBwYWludFBhcnQsIHN0YXRlLCByZWN0LCAwKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6
cGFpbnRUaGVtZVBhcnQoZ2MsIHBhaW50UGFydCwgc3RhdGUsIHJlY3QsIDApOwogfQogCiB2b2lk
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQq
IGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBD
aHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlOworICAgIFBsYXRmb3JtQnJpZGdl
OjpUaGVtZVBhaW50U3RhdGUgc3RhdGU7CiAKICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFy
dCgpID09IFRodW1iUGFydCkKLSAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQ
cmVzc2VkOworICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZVByZXNzZWQ7CiAg
ICAgZWxzZSBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAg
ICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVIb3ZlcjsKKyAgICAgICAgc3RhdGUgPSBQ
bGF0Zm9ybUJyaWRnZTo6U3RhdGVIb3ZlcjsKICAgICBlbHNlCi0gICAgICAgIHN0YXRlID0gQ2hy
b21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFsOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludFRoZW1l
UGFydCgKKyAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAg
UGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAogICAgICAgICBnYywKLSAgICAgICAgc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBDaHJvbWl1bUJy
aWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiA6IENocm9taXVtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyVmVydGljYWxUaHVtYiwKKyAgICAgICAgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhv
cml6b250YWxUaHVtYiA6IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVt
YiwKICAgICAgICAgc3RhdGUsCiAgICAgICAgIHJlY3QsCiAgICAgICAgIDApOwpAQCAtMTI4LDIz
ICsxMjgsMjMgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnNob3VsZAogSW50
U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvblNpemUoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0
VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3cpOworICAg
ICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0
Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3cpOwogICAgICAgICByZXR1cm4gSW50U2l6
ZShzaXplLndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkgPCAyICogc2l6ZS5oZWlnaHQoKSA/
IHNjcm9sbGJhci0+aGVpZ2h0KCkgLyAyIDogc2l6ZS5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAg
Ly8gSG9yaXpvbnRhbFNjcm9sbGJhcgotICAgIEludFNpemUgc2l6ZSA9IENocm9taXVtQnJpZGdl
OjpnZXRUaGVtZVBhcnRTaXplKENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93
KTsKKyAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQ
bGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdyk7CiAgICAgcmV0dXJuIEludFNp
emUoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIHNpemUud2lkdGgoKSA/IHNjcm9sbGJhci0+d2lk
dGgoKSAvIDIgOiBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCiBpbnQgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNj
cm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhl
bWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIpOwor
ICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQ
bGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIpOwogICAgICAgICByZXR1
cm4gc2l6ZS5oZWlnaHQoKTsKICAgICB9CiAKLSAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJy
aWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6
b250YWxUaHVtYik7CisgICAgSW50U2l6ZSBzaXplID0gUGxhdGZvcm1CcmlkZ2U6OmdldFRoZW1l
UGFydFNpemUoUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWIpOwog
ICAgIHJldHVybiBzaXplLndpZHRoKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy5tbQkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsy
Nyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYy5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJp
ZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgogI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KQEAgLTM3MCwxNSArMzcwLDE1IEBA
IHN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUKICAgICB9CiB9CiAKLXN0
YXRpYyBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHNjcm9sbGJhclN0YXRlVG9UaGVt
ZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CitzdGF0aWMgUGxhdGZvcm1CcmlkZ2U6OlRo
ZW1lUGFpbnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShTY3JvbGxiYXIqIHNjcm9s
bGJhcikgewogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBD
aHJvbWl1bUJyaWRnZTo6U3RhdGVEaXNhYmxlZDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtQnJp
ZGdlOjpTdGF0ZURpc2FibGVkOwogICAgIGlmICghc2Nyb2xsYmFyLT5jbGllbnQoKS0+aXNBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpTdGF0ZUluYWN0aXZlOworICAg
ICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlSW5hY3RpdmU7CiAgICAgaWYgKHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgIHJldHVybiBDaHJvbWl1
bUJyaWRnZTo6U3RhdGVQcmVzc2VkOworICAgICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OlN0
YXRlUHJlc3NlZDsKIAotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6U3RhdGVBY3RpdmU7Cisg
ICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUFjdGl2ZTsKIH0KIAogYm9vbCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQpAQCAtNDYzLDE4ICs0
NjMsMTggQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChTYwogICAgIH0K
IAogICAgIGlmIChoYXNUaHVtYihzY3JvbGxiYXIpKSB7Ci0gICAgICAgIENocm9taXVtQnJpZGdl
OjpUaGVtZVBhaW50U2Nyb2xsYmFySW5mbyBzY3JvbGxiYXJJbmZvOwotICAgICAgICBzY3JvbGxi
YXJJbmZvLm9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBDaHJvbWl1bUJyaWRnZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9u
dGFsIDogQ2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWw7Ci0gICAg
ICAgIHNjcm9sbGJhckluZm8ucGFyZW50ID0gc2Nyb2xsYmFyLT5wYXJlbnQoKSAmJiBzY3JvbGxi
YXItPnBhcmVudCgpLT5pc0ZyYW1lVmlldygpICYmIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHNj
cm9sbGJhci0+cGFyZW50KCkpLT5pc1Njcm9sbFZpZXdTY3JvbGxiYXIoc2Nyb2xsYmFyKSA/IENo
cm9taXVtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRTY3JvbGxWaWV3IDogQ2hyb21pdW1CcmlkZ2U6
OlNjcm9sbGJhclBhcmVudFJlbmRlckxheWVyOworICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6VGhl
bWVQYWludFNjcm9sbGJhckluZm8gc2Nyb2xsYmFySW5mbzsKKyAgICAgICAgc2Nyb2xsYmFySW5m
by5vcmllbnRhdGlvbiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uSG9yaXpvbnRhbCA6
IFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsOworICAgICAgICBz
Y3JvbGxiYXJJbmZvLnBhcmVudCA9IHNjcm9sbGJhci0+cGFyZW50KCkgJiYgc2Nyb2xsYmFyLT5w
YXJlbnQoKS0+aXNGcmFtZVZpZXcoKSAmJiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihzY3JvbGxi
YXItPnBhcmVudCgpKS0+aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKHNjcm9sbGJhcikgPyBQbGF0Zm9y
bUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldyA6IFBsYXRmb3JtQnJpZGdlOjpTY3Jv
bGxiYXJQYXJlbnRSZW5kZXJMYXllcjsKICAgICAgICAgc2Nyb2xsYmFySW5mby5tYXhWYWx1ZSA9
IHNjcm9sbGJhci0+bWF4aW11bSgpOwogICAgICAgICBzY3JvbGxiYXJJbmZvLmN1cnJlbnRWYWx1
ZSA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpOwogICAgICAgICBzY3JvbGxiYXJJbmZvLnZpc2li
bGVTaXplID0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpOwogICAgICAgICBzY3JvbGxiYXJJbmZv
LnRvdGFsU2l6ZSA9IHNjcm9sbGJhci0+dG90YWxTaXplKCk7CiAKLSAgICAgICAgQ2hyb21pdW1C
cmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCisgICAgICAgIFBsYXRmb3JtQnJpZGdlOjpwYWlu
dFNjcm9sbGJhclRodW1iKAogICAgICAgICAgICAgZHJhd2luZ0NvbnRleHQsCiAgICAgICAgICAg
ICBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShzY3JvbGxiYXIpLAotICAgICAgICAgICAgc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFJlZ3VsYXJTY3JvbGxiYXIgPyBDaHJvbWl1bUJyaWRn
ZTo6U2l6ZVJlZ3VsYXIgOiBDaHJvbWl1bUJyaWRnZTo6U2l6ZVNtYWxsLAorICAgICAgICAgICAg
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFJlZ3VsYXJTY3JvbGxiYXIgPyBQbGF0Zm9ybUJy
aWRnZTo6U2l6ZVJlZ3VsYXIgOiBQbGF0Zm9ybUJyaWRnZTo6U2l6ZVNtYWxsLAogICAgICAgICAg
ICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSwKICAgICAgICAgICAgIHNjcm9sbGJhckluZm8pOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA3NjE3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21p
dW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8d2lu
ZG93cy5oPgogI2luY2x1ZGUgPHZzc3R5bGUuaD4KIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdl
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCkBAIC02MSw3ICs2MSw3IEBA
IGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3JvbGxiYXIKIHsKICAgICBzdGF0aWMg
aW50IHRoaWNrbmVzczsKICAgICBpZiAoIXRoaWNrbmVzcykgewotICAgICAgICBpZiAoQ2hyb21p
dW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCisgICAgICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6
bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBrTWFjU2Nyb2xsYmFyU2l6ZVtj
b250cm9sU2l6ZV07CiAgICAgICAgIHRoaWNrbmVzcyA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hW
U0NST0xMKTsKICAgICB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFRyYQogICAgIEludFJlY3QgYWxpZ25SZWN0ID0gdHJhY2tSZWN0KHNj
cm9sbGJhciwgZmFsc2UpOwogCiAgICAgLy8gRHJhdyB0aGUgdHJhY2sgYXJlYSBiZWZvcmUvYWZ0
ZXIgdGhlIHRodW1iIG9uIHRoZSBzY3JvbGwgYmFyLgotICAgIENocm9taXVtQnJpZGdlOjpwYWlu
dFNjcm9sbGJhclRyYWNrKAorICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRyYWNr
KAogICAgICAgICBnYywKICAgICAgICAgcGFydElkLAogICAgICAgICBnZXRUaGVtZVN0YXRlKHNj
cm9sbGJhciwgcGFydFR5cGUpLApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6cGFpbnRCdXQKICAgICAgICAgcGFydElkID0gaG9yeiA/IERGQ1NfU0NS
T0xMUklHSFQgOiBERkNTX1NDUk9MTERPV047CiAKICAgICAvLyBEcmF3IHRoZSB0aHVtYiAodGhl
IGJveCB5b3UgZHJhZyBpbiB0aGUgc2Nyb2xsIGJhciB0byBzY3JvbGwpLgotICAgIENocm9taXVt
QnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93KAorICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFNj
cm9sbGJhckFycm93KAogICAgICAgICBnYywKICAgICAgICAgZ2V0VGhlbWVBcnJvd1N0YXRlKHNj
cm9sbGJhciwgcGFydCksCiAgICAgICAgIHBhcnRJZCB8IGdldENsYXNzaWNUaGVtZVN0YXRlKHNj
cm9sbGJhciwgcGFydCksCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFRodQogICAgIGJvb2wgaG9yeiA9IHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwogCiAgICAgLy8gRHJhdyB0aGUgdGh1bWIgKHRo
ZSBib3ggeW91IGRyYWcgaW4gdGhlIHNjcm9sbCBiYXIgdG8gc2Nyb2xsKS4KLSAgICBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRT
Y3JvbGxiYXJUaHVtYigKICAgICAgICAgZ2MsCiAgICAgICAgIGhvcnogPyBTQlBfVEhVTUJCVE5I
T1JaIDogU0JQX1RIVU1CQlROVkVSVCwKICAgICAgICAgZ2V0VGhlbWVTdGF0ZShzY3JvbGxiYXIs
IFRodW1iUGFydCksCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtV2luOjpwYWludFRodQogICAgICAgICByZWN0KTsKIAogICAgIC8vIERyYXcgdGhlIGdyaXBw
ZXIgKHRoZSB0aHJlZSBsaXR0bGUgbGluZXMgb24gdGhlIHRodW1iKS4KLSAgICBDaHJvbWl1bUJy
aWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3Jv
bGxiYXJUaHVtYigKICAgICAgICAgZ2MsCiAgICAgICAgIGhvcnogPyBTQlBfR1JJUFBFUkhPUlog
OiBTQlBfR1JJUFBFUlZFUlQsCiAgICAgICAgIGdldFRoZW1lU3RhdGUoc2Nyb2xsYmFyLCBUaHVt
YlBhcnQpLApAQCAtMjU2LDcgKzI1Niw3IEBAIEludFNpemUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bVdpbjo6YnV0dG8KICAgICAvLyB0ZXN0IG1vZGUgc28gdGhhdCBzaG91bGQgYmUgZW5vdWdoIHRv
IHJlc3VsdCBpbiByZXBlYXRhYmxlIHJlc3VsdHMsIGJ1dAogICAgIC8vIHByZXNlcnZpbmcgdGhp
cyBoYWNrIGF2b2lkcyBoYXZpbmcgdG8gcmViYXNlbGluZSBwaXhlbCB0ZXN0cy4KICAgICBjb25z
dCBpbnQga0xheW91dFRlc3RNb2RlR2lydGggPSAxNzsKLSAgICBpbnQgZ2lydGggPSBDaHJvbWl1
bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/IGtMYXlvdXRUZXN0TW9kZUdpcnRoIDogdGhpY2tu
ZXNzOworICAgIGludCBnaXJ0aCA9IFBsYXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpID8g
a0xheW91dFRlc3RNb2RlR2lydGggOiB0aGlja25lc3M7CiAKICAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIGdpcnRoID8gc2Nyb2xsYmFyLT53aWR0aCgpIC8g
MiA6IGdpcnRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVk
VGltZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDIzICsyNiwyMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNoYXJlZFRpbWVyLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBz
ZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpCiB7ICAgICAgICAgICAgICAg
ICAgIAotICAgIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oZik7
CisgICAgUGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbihmKTsKIH0K
IAogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKIHsKLSAgICBD
aHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZShmaXJlVGltZSk7CisgICAgUGxh
dGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZmlyZVRpbWUpOwogfQogCiB2b2lk
IHN0b3BTaGFyZWRUaW1lcigpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1l
cigpOworICAgIFBsYXRmb3JtQnJpZGdlOjpzdG9wU2hhcmVkVGltZXIoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
U3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVy
bWluYXRpb25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzEsNDggQEAKLS8q
DQotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
DQotICoNCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQNCi0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQotICogbWV0Og0KLSAqDQot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQNCi0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlDQotICogZGlzdHJpYnV0aW9uLg0KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQot
ICoNCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTDQotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVA0KLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwNCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkNCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4NCi0gKi8NCi0NCi0jaW5jbHVkZSAiY29uZmlnLmgiDQotI2luY2x1ZGUg
IlN1ZGRlblRlcm1pbmF0aW9uLmgiDQotDQotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiDQot
DQotbmFtZXNwYWNlIFdlYkNvcmUgew0KLQ0KLXZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9u
KCkNCi17DQotICAgIENocm9taXVtQnJpZGdlOjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoZmFs
c2UpOw0KLX0NCi0NCi12b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkNCi17DQotICAgIENo
cm9taXVtQnJpZGdlOjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQodHJ1ZSk7DQotfQ0KLQ0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUNCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN1ZGRl
blRlcm1pbmF0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkKK3sKKyAgICBQ
bGF0Zm9ybUJyaWRnZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGZhbHNlKTsKK30KKwordm9p
ZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpCit7CisgICAgUGxhdGZvcm1CcmlkZ2U6OnN1ZGRl
blRlcm1pbmF0aW9uQ2hhbmdlZCh0cnVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU3lzdGVtVGltZUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TeXN0
ZW1UaW1lQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1N5c3RlbVRpbWVDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDE1ICszMSwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN5c3RlbVRp
bWUuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIC8vIEdldCB0aGUgY3VycmVudCB0aW1lIGluIHNlY29uZHMgc2luY2UgZXBvY2guCiBk
b3VibGUgY3VycmVudFRpbWUoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y3VycmVu
dFRpbWUoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmN1cnJlbnRUaW1lKCk7CiB9CiAK
IGZsb2F0IHVzZXJJZGxlVGltZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAJKHJldmlzaW9uIDc2MTcz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldyaXRhYmxlRGF0YU9iamVjdC5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDcgKzgwLDcgQEAg
Ym9vbCBXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgUwogICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBjdXJyZW50bHkgdW5pbXBsZW1lbnRlZCBvbiB0aGUgQ2hyb21pdW0tc2lkZS4g
VGhpcyBpcwogICAgICAgICAvLyAib2theSIgZm9yIG5vdyBzaW5jZSB0aGUgb3JpZ2luYWwgaW1w
bGVtZW50YXRpb24gZGlkbid0IHN1cHBvcnQgaXQKICAgICAgICAgLy8gYW55d2F5LiBHb2luZyBm
b3J3YXJkLCB0aGlzIGlzIHNvbWV0aGluZyB3ZSdsbCBuZWVkIHRvIGZpeCB0aG91Z2guCi0gICAg
ICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEodHlwZSwgZGF0YSwgIiIpOwor
ICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVEYXRhKHR5cGUsIGRhdGEsICIi
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIG1fZGF0YU1hcC5zZXQodHlwZSwg
ZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
cm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQkocmV2
aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2ltcG9ydCAiQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCIKIAogI2ltcG9ydCAiLi4v
Z3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YS5oIgotI2ltcG9ydCAiQ2hyb21pdW1Ccmlk
Z2UuaCIKKyNpbXBvcnQgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNGb250
Lmg+CiAjaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgogCkBAIC04Nyw3ICs4Nyw3IEBAIFBhc3NSZWZQ
dHI8TWVtb3J5QWN0aXZhdGVkRm9udD4gbG9hZEZvbnQKIHsKICAgICBBVFNGb250Q29udGFpbmVy
UmVmIGNvbnRhaW5lcjsKICAgICAvLyBTZW5kIGNyb3NzLXByb2Nlc3MgcmVxdWVzdCB0byBsb2Fk
IGZvbnQuCi0gICAgaWYgKCFDaHJvbWl1bUJyaWRnZTo6bG9hZEZvbnQobnNGb250LCAmY29udGFp
bmVyKSkKKyAgICBpZiAoIVBsYXRmb3JtQnJpZGdlOjpsb2FkRm9udChuc0ZvbnQsICZjb250YWlu
ZXIpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBBVFNGb250Q29udGFpbmVyUmVmIHNy
Y0ZvbnRDb250YWluZXJSZWYgPSBmb250Q29udGFpbmVyUmVmRnJvbU5TRm9udChuc0ZvbnQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gNzYxNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVD
aHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFV0aWxzQ2hyb21p
dW1XaW4uaCIKICNpbmNsdWRlICJIYXNoTWFwLmgiCiAjaW5jbHVkZSAiSGFzaFNldC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNp
bmNsdWRlIDx1bmljb2RlL3VuaXNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KQEAgLTI4OCw5ICsyODgsOSBAQCBzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0ZXIo
Y29uc3QgCiAgICAgSERDIGhkYyA9IEdldERDKDApOwogICAgIEhHRElPQkogb2xkRm9udCA9IHN0
YXRpY19jYXN0PEhGT05UPihTZWxlY3RPYmplY3QoaGRjLCBoZm9udCkpOwogICAgIGludCBjb3Vu
dCA9IEdldEZvbnRVbmljb2RlUmFuZ2VzKGhkYywgMCk7Ci0gICAgaWYgKGNvdW50ID09IDAgJiYg
Q2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoaGZvbnQpKQorICAgIGlmICghY291bnQg
JiYgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoaGZvbnQpKQogICAgICAgICBjb3Vu
dCA9IEdldEZvbnRVbmljb2RlUmFuZ2VzKGhkYywgMCk7Ci0gICAgaWYgKGNvdW50ID09IDApIHsK
KyAgICBpZiAoIWNvdW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGdldCB0aGUg
Zm9udCB1bmljb2RlIHJhbmdlIGFmdGVyIHNlY29uZCBhdHRlbXB0Iik7CiAgICAgICAgIFNlbGVj
dE9iamVjdChoZGMsIG9sZEZvbnQpOwogICAgICAgICBSZWxlYXNlREMoMCwgaGRjKTsKQEAgLTM2
Miw3ICszNjIsNyBAQCBzdGF0aWMgdm9pZCBGaWxsTG9nRm9udChjb25zdCBGb250RGVzY3JpCiAg
ICAgd2luZm9udC0+bGZTdHJpa2VPdXQgPSBmYWxzZTsKICAgICB3aW5mb250LT5sZkNoYXJTZXQg
PSBERUZBVUxUX0NIQVJTRVQ7CiAgICAgd2luZm9udC0+bGZPdXRQcmVjaXNpb24gPSBPVVRfVFRf
T05MWV9QUkVDSVM7Ci0gICAgd2luZm9udC0+bGZRdWFsaXR5ID0gQ2hyb21pdW1CcmlkZ2U6Omxh
eW91dFRlc3RNb2RlKCkgPyBOT05BTlRJQUxJQVNFRF9RVUFMSVRZIDogREVGQVVMVF9RVUFMSVRZ
OyAvLyBIb25vciB1c2VyJ3MgZGVza3RvcCBzZXR0aW5ncy4KKyAgICB3aW5mb250LT5sZlF1YWxp
dHkgPSBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/IE5PTkFOVElBTElBU0VEX1FV
QUxJVFkgOiBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIncyBkZXNrdG9wIHNldHRpbmdz
LgogICAgIHdpbmZvbnQtPmxmUGl0Y2hBbmRGYW1pbHkgPSBERUZBVUxUX1BJVENIIHwgRkZfRE9O
VENBUkU7CiAgICAgd2luZm9udC0+bGZJdGFsaWMgPSBmb250RGVzY3JpcHRpb24uaXRhbGljKCk7
CiAgICAgd2luZm9udC0+bGZXZWlnaHQgPSB0b0dESUZvbnRXZWlnaHQoZm9udERlc2NyaXB0aW9u
LndlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAJKHJldmlzaW9uIDc2MTcz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
TGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJp
ZGdlLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgog
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpbmNsdWRlICJTa1BhaW50LmgiCkBAIC01Nyw3
ICs1Nyw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoKQogewotICAgIFN0cmluZyBmYW1pbHkg
PSBDaHJvbWl1bUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywg
bGVuZ3RoKTsKKyAgICBTdHJpbmcgZmFtaWx5ID0gUGxhdGZvcm1CcmlkZ2U6OmdldEZvbnRGYW1p
bHlGb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgaWYgKGZhbWlseS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5j
cHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMy
LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogCi0jaW5jbHVk
ZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCiAjaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgog
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKQEAg
LTQyNCw3ICs0MjQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBn
CiAgICAgICAgICAgICBzdWNjZXNzID0gcGFpbnRlci5kcmF3R2x5cGhzKGN1ckxlbiwgJmdseXBo
c1swXSwgJmFkdmFuY2VzWzBdLCBjdXJBZHZhbmNlKTsKICAgICAgICAgICAgIGlmICghc3VjY2Vz
cyAmJiBleGVjdXRpb25zID09IDApIHsKICAgICAgICAgICAgICAgICAvLyBBc2sgdGhlIGJyb3dz
ZXIgdG8gbG9hZCB0aGUgZm9udCBmb3IgdXMgYW5kIHJldHJ5LgotICAgICAgICAgICAgICAgIENo
cm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZvbnQtPnBsYXRmb3JtRGF0YSgpLmhmb250
KCkpOworICAgICAgICAgICAgICAgIFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZv
bnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNo
cm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTMgKzMyLDEzIEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udFBsYXRmb3JtRGF0YS5oIgogCi0jaW5jbHVkZSA8
d2luZG93cy5oPgotI2luY2x1ZGUgPG9iamlkbC5oPgotI2luY2x1ZGUgPG1sYW5nLmg+Ci0KLSNp
bmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAj
aW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKIAorI2luY2x1ZGUgPG1sYW5nLmg+CisjaW5jbHVkZSA8
b2JqaWRsLmg+CisjaW5jbHVkZSA8d2luZG93cy5oPgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
IEZvbnRQbGF0Zm9ybURhdGE6OkZvbnRQbGF0Zm9ybURhdGEoV1RGOjpIYXNoVGFibGVEZWxldGVk
VmFsdWVUeXBlKQpAQCAtMTM2LDcgKzEzNiw3IEBAIFNDUklQVF9GT05UUFJPUEVSVElFUyogRm9u
dFBsYXRmb3JtRGF0YToKICAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBTY3JpcHRHZXRGb250UHJv
cGVydGllcyhkYywgc2NyaXB0Q2FjaGUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVzKTsKICAgICAgICAgICAg
IGlmIChTX09LICE9IGhyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENocm9taXVtQnJpZGdlOjpl
bnN1cmVGb250TG9hZGVkKGhmb250KCkpKSB7CisgICAgICAgICAgICAgICAgaWYgKFBsYXRmb3Jt
QnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGhmb250KCkpKSB7CiAgICAgICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28g
ZmFpbHMuCiAgICAgICAgICAgICAgICAgICAgIGhyID0gU2NyaXB0R2V0Rm9udFByb3BlcnRpZXMo
ZGMsIHNjcmlwdENhY2hlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyk7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhTGludXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Zv
bnRQbGF0Zm9ybURhdGFMaW51eC5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUxpbnV4LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgi
CiAjaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgi
CiAKICNpbmNsdWRlICJTa1BhaW50LmgiCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBGb250UGxh
dGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJlbgogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKG1fZmFtaWx5LmRhdGEo
KSwgKCgoaW50KW1fdGV4dFNpemUpIDw8IDIpIHwgKG1fdHlwZWZhY2UtPnN0eWxlKCkgJiAzKSwg
Jm1fc3R5bGUpOworICAgIFBsYXRmb3JtQnJpZGdlOjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZSht
X2ZhbWlseS5kYXRhKCksICgoKGludCltX3RleHRTaXplKSA8PCAyKSB8IChtX3R5cGVmYWNlLT5z
dHlsZSgpICYgMyksICZtX3N0eWxlKTsKIH0KIAogfSAgLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRy
ZWVOb2RlQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCShy
ZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw5ICszMiw5IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1ZGUgPHZlY3Rvcj4KIAot
I2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUg
IkdseXBoUGFnZVRyZWVOb2RlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNs
dWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlVuaXNjcmliZUhlbHBlclRleHRSdW4u
aCIKICNpbmNsdWRlICJXaW5kb3dzVmVyc2lvbi5oIgpAQCAtODAsMTIgKzgwLDExIEBAIHN0YXRp
YyBib29sIGZpbGxCTVBHbHlwaHModW5zaWduZWQgb2Zmc2UKICAgICAgICAgUmVsZWFzZURDKDAs
IGRjKTsKIAogICAgICAgICBpZiAocmVjdXJzZSkgewotICAgICAgICAgICAgaWYgKENocm9taXVt
QnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZvbnREYXRhLT5wbGF0Zm9ybURhdGEoKS5oZm9udCgp
KSkKKyAgICAgICAgICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChmb250
RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZp
bGxCTVBHbHlwaHMob2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgcGFnZSwgZm9udERhdGEsIGZhbHNl
KTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZpbGxFbXB0eUdseXBocyhw
YWdlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGZpbGxFbXB0eUdseXBocyhwYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2Vm
dWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28gZmFpbHMuCiAgICAgICAgICAgICAvLyBT
ZWUgaHR0cDovL2NyYnVnLmNvbS82NDAxCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcAkocmV2
aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9JbWFnZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1
bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQ
dHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25zdCBjaGFyICpuYW1lKQog
ewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZShu
YW1lKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3Vy
Y2UobmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW1NYWMubW0KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vSW1hZ2VD
aHJvbWl1bU1hYy5tbQkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBA
IC0zMywxNCArMzMsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJJbWFnZS5o
IgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
UGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKGNvbnN0IGNoYXIq
IG5hbWUpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJl
c291cmNlKG5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1h
Z2VSZXNvdXJjZShuYW1lKTsKIH0KIAogLy8gRklYTUU6IFRoZXNlIGFyZSB0ZW1wb3Jhcnkgc3R1
YnMsIHdlIG5lZWQgcmVhbCBpbXBsZW1lbnRhdGlvbnMgd2hpY2gKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hy
b21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIsMTEgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCi0jaW5jbHVkZSAiQ2hy
b21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNpbmNsdWRlICJGb250Lmgi
CiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRmxvYXRSZWN0LmgiCiAjaW5jbHVk
ZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiAjaW5jbHVkZSA8dW5pY29kZS91Y2hhci5oPgpAQCAt
NzAsNyArNzAsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQoKQogCiAgICAg
VEVYVE1FVFJJQyB0ZXh0TWV0cmljID0gezB9OwogICAgIGlmICghR2V0VGV4dE1ldHJpY3MoZGMs
ICZ0ZXh0TWV0cmljKSkgewotICAgICAgICBpZiAoQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRM
b2FkZWQobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSkpIHsKKyAgICAgICAgaWYgKFBsYXRmb3JtQnJp
ZGdlOjplbnN1cmVGb250TG9hZGVkKG1fcGxhdGZvcm1EYXRhLmhmb250KCkpKSB7CiAgICAgICAg
ICAgICAvLyBSZXRyeSBHZXRUZXh0TWV0cmljcy4KICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5k
bGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28gZmFpbHMuCiAgICAgICAg
ICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS82NDAxLgpAQCAtMTU5LDcgKzE1OSw3IEBAIHZv
aWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAgICAvLyBpcyAqbm90KiBmaXhl
ZCBwaXRjaC4gIFVuYmVsaWV2YWJsZSBidXQgdHJ1ZS4KICAgICBURVhUTUVUUklDIHRleHRNZXRy
aWMgPSB7MH07CiAgICAgaWYgKCFHZXRUZXh0TWV0cmljcyhkYywgJnRleHRNZXRyaWMpKSB7Ci0g
ICAgICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0
YS5oZm9udCgpKSkgeworICAgICAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2Fk
ZWQobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSkpIHsKICAgICAgICAgICAgIC8vIFJldHJ5IEdldFRl
eHRNZXRyaWNzLgogICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBncmFjZWZ1bGx5IHRoZSBl
cnJvciBpZiB0aGlzIGNhbGwgYWxzbyBmYWlscy4KICAgICAgICAgICAgIC8vIFNlZSBodHRwOi8v
Y3JidWcuY29tLzY0MDEuCkBAIC0xOTAsNyArMTkwLDcgQEAgZmxvYXQgU2ltcGxlRm9udERhdGE6
OnBsYXRmb3JtV2lkdGhGb3JHbAogICAgIGludCB3aWR0aCA9IDA7CiAgICAgaWYgKCFHZXRDaGFy
V2lkdGhJKGRjLCBnbHlwaCwgMSwgMCwgJndpZHRoKSkgewogICAgICAgICAvLyBBc2sgdGhlIGJy
b3dzZXIgdG8gcHJlbG9hZCB0aGUgZm9udCBhbmQgcmV0cnkuCi0gICAgICAgIGlmIChDaHJvbWl1
bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgeworICAg
ICAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQobV9wbGF0Zm9ybURhdGEu
aGZvbnQoKSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUg
ZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28gZmFpbHMuCiAgICAgICAgICAgICAvLyBTZWUgaHR0cDov
L2NyYnVnLmNvbS82NDAxLgogICAgICAgICAgICAgaWYgKCFHZXRDaGFyV2lkdGhJKGRjLCBnbHlw
aCwgMSwgMCwgJndpZHRoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRS
dW4uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiVW5pc2NyaWJl
SGVscGVyVGV4dFJ1bi5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRl
ICJGb250LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJTaW1wbGVG
b250RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSw3ICs3OSw3IEBAIHZvaWQg
VW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6dHJ5VG9QcmVsb2EKICAgICAvLyBBc2sgdGhlIGJyb3dz
ZXIgdG8gZ2V0IHRoZSBmb250IG1ldHJpY3MgZm9yIHRoaXMgZm9udC4KICAgICAvLyBUaGF0IHdp
bGwgcHJlbG9hZCB0aGUgZm9udCBhbmQgaXQgc2hvdWxkIG5vdyBiZSBhY2Nlc3NpYmxlCiAgICAg
Ly8gZnJvbSB0aGUgcmVuZGVyZXIuCi0gICAgQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2Fk
ZWQoZm9udCk7CisgICAgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoZm9udCk7CiB9
CiAKIGJvb2wgVW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6bmV4dFdpbkZvbnREYXRhKApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZvcm1E
YXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
a2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3RvbVBsYXRmb3JtRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKIAogI2lmIE9TKFdJTkRPV1MpCiAj
aW5jbHVkZSAiQmFzZTY0LmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRl
ICJPcGVuVHlwZVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjZWxp
ZiBPUyhMSU5VWCkgfHwgT1MoRlJFRUJTRCkgfHwgUExBVEZPUk0oQlJFV01QKQogI2luY2x1ZGUg
IlNrU3RyZWFtLmgiCiAjZW5kaWYKQEAgLTkxLDcgKzkxLDcgQEAgRm9udFBsYXRmb3JtRGF0YSBG
b250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIGxvZ0ZvbnQubGZTdHJpa2VPdXQgPSBmYWxzZTsK
ICAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsKICAgICBsb2dGb250Lmxm
T3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwotICAgIGxvZ0ZvbnQubGZRdWFsaXR5
ID0gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPworICAgIGxvZ0ZvbnQubGZRdWFs
aXR5ID0gUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPwogICAgICAgICAgICAgICAg
ICAgICAgICAgTk9OQU5USUFMSUFTRURfUVVBTElUWSA6CiAgICAgICAgICAgICAgICAgICAgICAg
ICBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIncyBkZXNrdG9wIHNldHRpbmdzLgogICAg
IGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IERFRkFVTFRfUElUQ0ggfCBGRl9ET05UQ0FSRTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFy
Q2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdv
cmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwzOSArMzIsMzkgQEAKICNpbmNsdWRlICJDb29raWVK
YXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgi
CiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgc2V0Q29va2llcyhEb2N1bWVudCogZG9jdW1lbnQs
IGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBDaHJvbWl1bUJy
aWRnZTo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7CisgICAgUGxhdGZvcm1Ccmlk
Z2U6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUpOwogfQogCiBTdHJpbmcgY29va2ll
cyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1
cm4gQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7CisgICAgcmV0dXJuIFBs
YXRmb3JtQnJpZGdlOjpjb29raWVzKGRvY3VtZW50LCB1cmwpOwogfQogCiBTdHJpbmcgY29va2ll
UmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBL
VVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjb29raWVSZXF1ZXN0SGVh
ZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1cmwpOwogfQogCiBib29s
IGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKIHsKLSAgICByZXR1cm4g
Q2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKKyAgICByZXR1cm4gUGxh
dGZvcm1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKIH0KIAogYm9vbCBnZXRSYXdD
b29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8
Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnJhd0Nv
b2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJp
ZGdlOjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMpOwogfQogCiB2b2lkIGRl
bGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGVs
ZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworICAgIHJldHVybiBQbGF0Zm9y
bUJyaWRnZTo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOwogfQogCiB9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3
b3JrL2Nocm9taXVtL0ROU0Nocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0ROU0Nocm9taXVtLmNwcAkocmV2aXNpb24gNzYx
NzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0ROU0Nocm9t
aXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiRE5TLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGUuaCIK
IAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYg
aG9zdG5hbWUpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnByZWZldGNoRE5TKGhvc3RuYW1lKTsK
KyAgICBQbGF0Zm9ybUJyaWRnZTo6cHJlZmV0Y2hETlMoaG9zdG5hbWUpOwogfQogCiB2b2lkIFJl
c291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwmIHVybCkKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1CcmlkZ2UuaAkocmV2aXNpb24gNzYxNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybUJyaWRnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIFdpZGdldDsKIAogLy8gQW4gaW50ZXJmYWNl
IHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUgYWJpbGl0eSB0byBhbnN3ZXIK
IC8vIHF1ZXN0aW9ucyBhYm91dCB0aGUgc3lzdGVtIGFuZCBzbyBvbi4uLgotLy8gVGhpcyBpcyB2
ZXJ5IHNpbWlsYXIgdG8gQ2hyb21pdW1CcmlkZ2UgYW5kIHRoZSB0d28gYXJlIGxpa2VseSB0byBj
b252ZXJnZQorLy8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gY2hyb21pdW0vUGxhdGZvcm1Ccmlk
Z2UgYW5kIHRoZSB0d28gYXJlIGxpa2VseSB0byBjb252ZXJnZQogLy8gaW4gdGhlIGZ1dHVyZS4K
IGNsYXNzIFBsYXRmb3JtQnJpZGdlIHsKIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lz
dGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1FM
aXRlRmlsZVN5c3RlbS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRl
ICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFiYXNlLmgiCiAjaW5jbHVk
ZSA8c3FsaXRlMy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTkyLDEyICs5
MiwxMiBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5RGF0YWJhCiAKIGJvb2wg
U1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0IFN0cmluZyYgZmlsZU5h
bWUpCiB7Ci0gICAgcmV0dXJuIChDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZp
bGVOYW1lKSA9PSBTUUxJVEVfT0spOworICAgIHJldHVybiAoUGxhdGZvcm1CcmlkZ2U6OmRhdGFi
YXNlRGVsZXRlRmlsZShmaWxlTmFtZSkgPT0gU1FMSVRFX09LKTsKIH0KIAogbG9uZyBsb25nIFNR
TGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUoZmls
ZU5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShm
aWxlTmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vc3FsL2Nocm9taXVtL1NR
TGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVt
UG9zaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogCi0jaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgPHNxbGl0
ZTMuaD4KIAogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC05OTYsMTAgKzk5NiwxMCBAQCBzdGF0aWMg
aW50IGNocm9taXVtT3BlbihzcWxpdGUzX3ZmcyogdmZzCiAgICAgfQogCiAgICAgaWYgKGZkIDwg
MCkgewotICAgICAgICBmZCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVO
YW1lLCBkZXNpcmVkRmxhZ3MpOworICAgICAgICBmZCA9IFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFz
ZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOwogICAgICAgICBpZiAoKGZkIDwgMCkg
JiYgKGRlc2lyZWRGbGFncyAmIFNRTElURV9PUEVOX1JFQURXUklURSkpIHsKICAgICAgICAgICAg
IGludCBuZXdGbGFncyA9IChkZXNpcmVkRmxhZ3MgJiB+KFNRTElURV9PUEVOX1JFQURXUklURSB8
IFNRTElURV9PUEVOX0NSRUFURSkpIHwgU1FMSVRFX09QRU5fUkVBRE9OTFk7Ci0gICAgICAgICAg
ICBmZCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBuZXdGbGFn
cyk7CisgICAgICAgICAgICBmZCA9IFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZp
bGVOYW1lLCBuZXdGbGFncyk7CiAgICAgICAgIH0KICAgICB9CiAgICAgaWYgKGZkIDwgMCkgewpA
QCAtMTAzMSw3ICsxMDMxLDcgQEAgc3RhdGljIGludCBjaHJvbWl1bU9wZW4oc3FsaXRlM192ZnMq
IHZmcwogLy8gICAgICAgICAgIHNob3VsZCBiZSBzeW5jaGVkIGFmdGVyIHRoZSBmaWxlIGlzIGRl
bGV0ZWQuCiBzdGF0aWMgaW50IGNocm9taXVtRGVsZXRlKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hh
ciogZmlsZU5hbWUsIGludCBzeW5jRGlyKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6
ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lLCBzeW5jRGlyKTsKKyAgICByZXR1cm4gUGxhdGZv
cm1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSwgc3luY0Rpcik7CiB9CiAKIC8v
IENoZWNrIHRoZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmlsZS4KQEAgLTEw
NDIsNyArMTA0Miw3IEBAIHN0YXRpYyBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192ZnMqLCAK
IC8vIHJlcyAtIHRoZSByZXN1bHQuCiBzdGF0aWMgaW50IGNocm9taXVtQWNjZXNzKHNxbGl0ZTNf
dmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQqIHJlcykKIHsKLSAgICBp
bnQgYXR0ciA9IHN0YXRpY19jYXN0PGludD4oQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0Rmls
ZUF0dHJpYnV0ZXMoZmlsZU5hbWUpKTsKKyAgICBpbnQgYXR0ciA9IHN0YXRpY19jYXN0PGludD4o
UGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpKTsKICAg
ICBpZiAoYXR0ciA8IDApIHsKICAgICAgICAgKnJlcyA9IDA7CiAgICAgICAgIHJldHVybiBTUUxJ
VEVfT0s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRl
RmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkocmV2
aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FM
aXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNRTGl0ZUZpbGVTeXN0ZW0uaCIK
IAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2Uu
aCIKICNpbmNsdWRlIDxzcWxpdGUzLmg+CiAjaW5jbHVkZSA8d2luZG93cy5oPgogCkBAIC01NSw3
ICs1NSw3IEBAIG5hbWVzcGFjZSB7CiBpbnQgY2hyb21pdW1PcGVuKHNxbGl0ZTNfdmZzKiwgY29u
c3QgY2hhciogZmlsZU5hbWUsCiAgICAgICAgICAgICAgICAgIHNxbGl0ZTNfZmlsZSogaWQsIGlu
dCBkZXNpcmVkRmxhZ3MsIGludCogdXNlZEZsYWdzKQogewotICAgIEhBTkRMRSBoID0gQ2hyb21p
dW1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2lyZWRGbGFncyk7CisgICAg
SEFORExFIGggPSBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmlsZShmaWxlTmFtZSwgZGVz
aXJlZEZsYWdzKTsKICAgICBpZiAoaCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkgewogICAgICAg
ICBpZiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRFKSB7CiAgICAgICAgICAg
ICBpbnQgbmV3RmxhZ3MgPSAoZGVzaXJlZEZsYWdzIHwgU1FMSVRFX09QRU5fUkVBRE9OTFkpICYg
flNRTElURV9PUEVOX1JFQURXUklURTsKQEAgLTgyLDcgKzgyLDcgQEAgaW50IGNocm9taXVtT3Bl
bihzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYQogLy8gICAgICAgICAgIHNob3VsZCBiZSBzeW5jaGVk
IGFmdGVyIHRoZSBmaWxlIGlzIGRlbGV0ZWQuCiBpbnQgY2hyb21pdW1EZWxldGUoc3FsaXRlM192
ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50KQogewotICAgIHJldHVybiBDaHJvbWl1bUJy
aWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKTsKKyAgICByZXR1cm4gUGxhdGZvcm1C
cmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSk7CiB9CiAKIC8vIENoZWNrIHRoZSBl
eGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmlsZS4KQEAgLTkzLDcgKzkzLDcgQEAg
aW50IGNocm9taXVtRGVsZXRlKHNxbGl0ZTNfdmZzKiwgY29uc3QgYwogLy8gcmVzIC0gdGhlIHJl
c3VsdC4KIGludCBjaHJvbWl1bUFjY2VzcyhzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYXIqIGZpbGVO
YW1lLCBpbnQgZmxhZywgaW50KiByZXMpCiB7Ci0gICAgRFdPUkQgYXR0ciA9IENocm9taXVtQnJp
ZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKTsKKyAgICBEV09SRCBhdHRy
ID0gUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpOwog
ICAgIHN3aXRjaCAoZmxhZykgewogICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19SRUFEOgogICAgIGNh
c2UgU1FMSVRFX0FDQ0VTU19FWElTVFM6CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbHVnaW5zL2No
cm9taXVtL1BsdWdpbkRhdGFDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGx1Z2lucy9jaHJvbWl1bS9QbHVnaW5EYXRhQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjE3
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvY2hyb21pdW0vUGx1Z2luRGF0YUNocm9taXVt
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIlBsdWdpbkRhdGFDaHJvbWl1bS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNvbnN0IFZlY3RvcjxQbHVnaW5J
bmZvPiYgcGx1Z2lucygpCiAgICAgewogICAgICAgICBpZiAoIW1fbG9hZGVkKSB7Ci0gICAgICAg
ICAgICBDaHJvbWl1bUJyaWRnZTo6cGx1Z2lucyhtX3JlZnJlc2gsICZtX3BsdWdpbnMpOworICAg
ICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnBsdWdpbnMobV9yZWZyZXNoLCAmbV9wbHVnaW5zKTsK
ICAgICAgICAgICAgIG1fbG9hZGVkID0gdHJ1ZTsKICAgICAgICAgICAgIG1fcmVmcmVzaCA9IGZh
bHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQkod29ya2luZyBjb3B5KQpA
QCAtMjAsOCArMjAsOCBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlJlbmRlclRo
ZW1lQ2hyb21pdW1NYWMuaCIKLSNpbXBvcnQgIkNocm9taXVtQnJpZGdlLmgiCiAjaW1wb3J0ICJQ
YWludEluZm8uaCIKKyNpbXBvcnQgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW1wb3J0ICJSZW5kZXJN
ZWRpYUNvbnRyb2xzQ2hyb21pdW0uaCIKICNpbXBvcnQgIlVzZXJBZ2VudFN0eWxlU2hlZXRzLmgi
CiAjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CkBAIC03MSw3ICs3MSw3IEBAIFBhc3NSZWZQdHI8
UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lQ2hyb20KIAogYm9vbCBSZW5kZXJUaGVtZUNocm9taXVt
TWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENo
cm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRn
ZTo6bGF5b3V0VGVzdE1vZGUoKTsKIH0KIAogTlNWaWV3KiBSZW5kZXJUaGVtZUNocm9taXVtTWFj
Ojpkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0KikgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1Ta2lhLmNwcAkocmV2
aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuaCIKIAotI2luY2x1
ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgogI2lu
Y2x1ZGUgIkN1cnJlbnRUaW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCkBAIC0z
Myw2ICszMiw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJNZWRpYUNvbnRyb2xF
bGVtZW50cy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJp
ZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlJlbmRl
ckJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhQ29udHJvbHNDaHJvbWl1bS5oIgpAQCAtMTg1
LDcgKzE4NSw3IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tpYTo6Y2FyZXRCbGkKIHsK
ICAgICAvLyBEaXNhYmxlIHRoZSBibGlua2luZyBjYXJldCBpbiBsYXlvdXQgdGVzdCBtb2RlLCBh
cyBpdCBpbnRyb2R1Y2VzCiAgICAgLy8gYSByYWNlIGNvbmRpdGlvbiBmb3IgdGhlIHBpeGVsIHRl
c3RzLiBodHRwOi8vYi8xMTk4NDQwCi0gICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0
TW9kZSgpKQorICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAg
ICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gY2FyZXRCbGlua0ludGVydmFsSW50ZXJuYWwoKTsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtV2luLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJv
bWl1bVdpbi5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw2
IEBACiAjaW5jbHVkZSA8dnNzeW0zMi5oPgogCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIK
ICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGb250VXRpbHNDaHJvbWl1bVdp
bi5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUg
Ik1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFpbnRJbmZvLmgiCisjaW5jbHVk
ZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCb3guaCIKICNpbmNsdWRlICJS
ZW5kZXJQcm9ncmVzcy5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5oIgpAQCAtMjM4LDcgKzIz
OCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3VwcG9ydHNGb2MKIAogQ29sb3Ig
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25CYWNrZ3JvdW5k
Q29sb3IoKSBjb25zdAogewotICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUo
KSkKKyAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCiAgICAgICAgIHJl
dHVybiBDb2xvcigweDAwLCAweDAwLCAweGZmKTsgLy8gUm95YWwgYmx1ZS4KICAgICBDT0xPUlJF
RiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0hJR0hMSUdIVCk7CiAgICAgcmV0dXJuIENvbG9y
KEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJWYWx1ZShjb2xvciksIDB4
ZmYpOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIENvbG9yIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBs
YXRmb3JtQWMKIAogQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1JbmFjdGl2
ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgaWYgKENocm9taXVtQnJp
ZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQorICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVz
dE1vZGUoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKDB4OTksIDB4OTksIDB4OTkpOyAvLyBNZWRp
dW0gZ3JheS4KICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0dSQVlURVhU
KTsKICAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0R1ZhbHVlKGNvbG9yKSwg
R2V0QlZhbHVlKGNvbG9yKSwgMHhmZik7CkBAIC0yNTQsNyArMjU0LDcgQEAgQ29sb3IgUmVuZGVy
VGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1JbgogCiBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVt
V2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0g
ICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQorICAgIGlmIChQbGF0Zm9y
bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKDB4ZmYsIDB4
ZmYsIDB4Y2MpOyAvLyBQYWxlIHllbGxvdy4KICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0Nv
bG9yKENPTE9SX0hJR0hMSUdIVFRFWFQpOwogICAgIHJldHVybiBDb2xvcihHZXRSVmFsdWUoY29s
b3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpLCAweGZmKTsKQEAgLTM3NSw3
ICszNzUsNyBAQCBzdGF0aWMgaW50IGNzc1ZhbHVlSWRUb1N5c0NvbG9ySW5kZXgoaW50CiBDb2xv
ciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0ZW1Db2xvcihpbnQgY3NzVmFsdWVJZCkgY29u
c3QKIHsKICAgICBpbnQgc3lzQ29sb3JJbmRleCA9IGNzc1ZhbHVlSWRUb1N5c0NvbG9ySW5kZXgo
Y3NzVmFsdWVJZCk7Ci0gICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpIHx8
IChzeXNDb2xvckluZGV4ID09IC0xKSkKKyAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRl
c3RNb2RlKCkgfHwgKHN5c0NvbG9ySW5kZXggPT0gLTEpKQogICAgICAgICByZXR1cm4gUmVuZGVy
VGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwogCiAgICAgQ09MT1JSRUYgY29sb3IgPSBH
ZXRTeXNDb2xvcihzeXNDb2xvckluZGV4KTsKQEAgLTQxMSw3ICs0MTEsNyBAQCBib29sIFJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0dG9uCiAgICAgY29uc3QgVGhlbWVEYXRhJiB0aGVt
ZURhdGEgPSBnZXRUaGVtZURhdGEobyk7CiAKICAgICBUaGVtZVBhaW50ZXIgcGFpbnRlcihpLmNv
bnRleHQsIHIpOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludEJ1dHRvbihwYWludGVyLmNvbnRl
eHQoKSwKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24ocGFpbnRlci5jb250ZXh0KCks
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3BhcnQsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3N0YXRlLAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICB0aGVtZURhdGEubV9jbGFzc2ljU3RhdGUsCkBAIC00Mjks
NyArNDI5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFNsaWRlcgogICAg
IGNvbnN0IFRoZW1lRGF0YSYgdGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG8pOwogCiAgICAgVGhl
bWVQYWludGVyIHBhaW50ZXIoaS5jb250ZXh0LCByKTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFp
bnRUcmFja2JhcihwYWludGVyLmNvbnRleHQoKSwKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRU
cmFja2JhcihwYWludGVyLmNvbnRleHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB0aGVtZURhdGEubV9wYXJ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHRoZW1lRGF0YS5tX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRo
ZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSwKQEAgLTQ0NCw3ICs0NDQsNyBAQCBib29sIFJlbmRlclRo
ZW1lQ2hyb21pdW1XaW46OnBhaW50U2xpZGVyCiAKIHN0YXRpYyBpbnQgbWVudUxpc3RCdXR0b25X
aWR0aCgpCiB7Ci0gICAgc3RhdGljIGludCB3aWR0aCA9IENocm9taXVtQnJpZGdlOjpsYXlvdXRU
ZXN0TW9kZSgpID8ga1N0YW5kYXJkTWVudUxpc3RCdXR0b25XaWR0aCA6IEdldFN5c3RlbU1ldHJp
Y3MoU01fQ1hWU0NST0xMKTsKKyAgICBzdGF0aWMgaW50IHdpZHRoID0gUGxhdGZvcm1CcmlkZ2U6
OmxheW91dFRlc3RNb2RlKCkgPyBrU3RhbmRhcmRNZW51TGlzdEJ1dHRvbldpZHRoIDogR2V0U3lz
dGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAgIHJldHVybiB3aWR0aDsKIH0KIApAQCAtNDky
LDcgKzQ5Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRNZW51TGkKIAog
ICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIHRleHRmaWVsZCBhbmQgcGFp
bnQgdGhlIG1lbnUuCiAgICAgVGhlbWVQYWludGVyIHBhaW50ZXIoaS5jb250ZXh0LCByZWN0KTsK
LSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRNZW51TGlzdChwYWludGVyLmNvbnRleHQoKSwKKyAg
ICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRNZW51TGlzdChwYWludGVyLmNvbnRleHQoKSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUF9EUk9QRE9XTkJVVFRPTiwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShvKSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVDbGFzc2ljU3RhdGUobyksCkBAIC02NTcs
NyArNjU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwYWludFRleHRGaQogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZHJh
d0VkZ2VzKQogewogICAgIC8vIEZhbGxiYWNrIHRvIHdoaXRlIGlmIHRoZSBzcGVjaWZpZWQgY29s
b3Igb2JqZWN0IGlzIGludmFsaWQuCi0gICAgLy8gKE5vdGUgQ2hyb21pdW1CcmlkZ2U6OnBhaW50
VGV4dEZpZWxkIGR1cGxpY2F0ZXMgdGhpcyBjaGVjaykuCisgICAgLy8gKE5vdGUgUGxhdGZvcm1C
cmlkZ2U6OnBhaW50VGV4dEZpZWxkIGR1cGxpY2F0ZXMgdGhpcyBjaGVjaykuCiAgICAgQ29sb3Ig
YmFja2dyb3VuZENvbG9yKENvbG9yOjp3aGl0ZSk7CiAgICAgaWYgKG8tPnN0eWxlKCktPnZpc2l0
ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvcikuaXNWYWxpZCgpKQog
ICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBvLT5zdHlsZSgpLT52aXNpdGVkRGVwZW5kZW50Q29s
b3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwpAQCAtNjgxLDcgKzY4MSw3IEBAIGJvb2wg
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUZXh0RmkKICAgICB7CiAgICAgICAgIGNvbnN0
IFRoZW1lRGF0YSYgdGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG8pOwogICAgICAgICBUaGVtZVBh
aW50ZXIgcGFpbnRlcihpLmNvbnRleHQsIHIpOwotICAgICAgICBDaHJvbWl1bUJyaWRnZTo6cGFp
bnRUZXh0RmllbGQocGFpbnRlci5jb250ZXh0KCksCisgICAgICAgIFBsYXRmb3JtQnJpZGdlOjpw
YWludFRleHRGaWVsZChwYWludGVyLmNvbnRleHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3BhcnQsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB0aGVtZURhdGEubV9zdGF0ZSwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSwKQEAgLTcxMCw3ICs3
MTAsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50SW5uZXJTCiAgICAgaGFs
Zi5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAvIDIpOwogICAgIGNvbnN0IFRoZW1lRGF0YSYgdXBU
aGVtZURhdGEgPSBnZXRUaGVtZURhdGEob2JqZWN0LCBTcGluQnV0dG9uVXApOwogICAgIFRoZW1l
UGFpbnRlciB1cFBhaW50ZXIoaW5mby5jb250ZXh0LCBoYWxmKTsKLSAgICBDaHJvbWl1bUJyaWRn
ZTo6cGFpbnRTcGluQnV0dG9uKHVwUGFpbnRlci5jb250ZXh0KCksCisgICAgUGxhdGZvcm1Ccmlk
Z2U6OnBhaW50U3BpbkJ1dHRvbih1cFBhaW50ZXIuY29udGV4dCgpLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXBUaGVtZURhdGEubV9wYXJ0LAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgdXBUaGVtZURhdGEubV9zdGF0ZSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHVwVGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlLApAQCAtNzE5
LDcgKzcxOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRJbm5lclMKICAg
ICBoYWxmLnNldFkocmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMik7CiAgICAgY29uc3QgVGhl
bWVEYXRhJiBkb3duVGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG9iamVjdCwgU3BpbkJ1dHRvbkRv
d24pOwogICAgIFRoZW1lUGFpbnRlciBkb3duUGFpbnRlcihpbmZvLmNvbnRleHQsIGhhbGYpOwot
ICAgIENocm9taXVtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oZG93blBhaW50ZXIuY29udGV4dCgp
LAorICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oZG93blBhaW50ZXIuY29udGV4
dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG93blRoZW1lRGF0YS5t
X3BhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duVGhlbWVEYXRh
Lm1fc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkb3duVGhlbWVE
YXRhLm1fY2xhc3NpY1N0YXRlLApAQCAtNzYwLDcgKzc2MCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVD
aHJvbWl1bVdpbjo6cGFpbnRQcm9ncmUKICAgICBJbnRSZWN0IHZhbHVlUmVjdCA9IHJlbmRlclBy
b2dyZXNzLT5pc0RldGVybWluYXRlKCkgPyBkZXRlcm1pbmF0ZVByb2dyZXNzVmFsdWVSZWN0Rm9y
KHJlbmRlclByb2dyZXNzLCByKSA6IEludFJlY3QoMCwgMCwgMCwgMCk7CiAgICAgZG91YmxlIGFu
aW1hdGVkU2Vjb25kcyA9IHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25TdGFydFRpbWUoKSA/ICBX
VEY6OmN1cnJlbnRUaW1lKCkgLSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0aW9uU3RhcnRUaW1lKCkg
OiAwOwogICAgIFRoZW1lUGFpbnRlciBwYWludGVyKGkuY29udGV4dCwgcik7Ci0gICAgQ2hyb21p
dW1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIocGFpbnRlci5jb250ZXh0KCksIHIsIHZhbHVlUmVj
dCwgcmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSwgYW5pbWF0ZWRTZWNvbmRzKTsKKyAg
ICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcihwYWludGVyLmNvbnRleHQoKSwgciwg
dmFsdWVSZWN0LCByZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgpLCBhbmltYXRlZFNlY29u
ZHMpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFn
ZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZS5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1
bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJREJGYWN0b3J5QmFja2Vu
ZEludGVyZmFjZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUJyaWRnZS5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKQEAgLTM2
LDEyICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NSZWZQdHI8SURCRmFjdG9y
eUJhY2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOjpjcmVhdGUoKQog
ewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6aWRiRmFjdG9yeSgpOworICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6aWRiRmFjdG9yeSgpOwogfQogCiBJREJGYWN0b3J5QmFja2VuZEludGVy
ZmFjZTo6fklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkKIHsKLSAgICBDaHJvbWl1bUJyaWRn
ZTo6aWRiU2h1dGRvd24oKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6aWRiU2h1dGRvd24oKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvc3RvcmFnZS9j
aHJvbWl1bS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vSURCS2V5UGF0aEJhY2tlbmRJbXBsLmNwcAkocmV2aXNp
b24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9taXVtL0lEQktleVBhdGhC
YWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsyOCwxMyBAQAogCiAjaWYg
RU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgor
I2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9p
ZCBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVl
c0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+LCAw
PiYgdmFsdWVzLCAgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4s
IDA+JiBrZXlzKQogewotICAgIENocm9taXVtQnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlh
bGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0aCwga2V5cyk7CisgICAgUGxhdGZv
cm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgodmFs
dWVzLCBrZXlQYXRoLCBrZXlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYktp
dC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMjQgQEAKKzIw
MTEtMDEtMTkgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9taXVtXSBSZW5hbWUgQ2hy
b21pdW1CcmlkZ2UgdG8gUGxhdGZvcm1CcmlkZ2UKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNDcxCisKKyAgICAgICAgKiBXZWJLaXQuZ3lwOgorICAg
ICAgICAqIHNyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAgICAgKiBzcmMvUGxhdGZv
cm1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9DaHJvbWVDbGllbnRJbXBsKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvV2ViV2lkZ2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6Omdl
dENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2FjaGVNZXRh
ZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3Jt
YXRBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFJlYWRQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbGlwYm9h
cmRXcml0ZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xp
cGJvYXJkV3JpdGVQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmNsaXBib2FyZFdyaXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRXcml0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRXcml0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNs
aXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNv
b2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpyYXdD
b29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkZWxldGVDb29raWUp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwcmVmZXRjaEROUyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZmlsZUV4aXN0cyk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmdldEZpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpy
ZXZlYWxGb2xkZXJJbk9TKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRG
aWxlTW9kaWZpY2F0aW9uVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
ZGlyZWN0b3J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGF0aEJ5
QXBwZW5kaW5nQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpt
YWtlQWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Omdl
dEFic29sdXRlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aXNEaXJl
Y3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om9wZW5GaWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbG9zZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1CcmlkZ2U6OnNlZWtGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJp
ZGdlOjp0cnVuY2F0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnJl
YWRGcm9tRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0Zp
bGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmdldEZvbnRGYW1pbHlGb3JDaGFy
YWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpnZXRSZW5kZXJTdHls
ZUZvclN0cmlrZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bG9hZEZvbnQp
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRl
cyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6
ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aWRiRmFjdG9yeSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aWRiU2h1dGRvd24pOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0Fu
ZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmxheW91dFRlc3RNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRm9yRXh0ZW5zaW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjptaW1lVHlwZUZyb21GaWxlKToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lucyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9iamVjdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2FuZGJveEVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJl
VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c3RvcFNoYXJlZFRpbWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291
bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtQ3VzdG9t
Q291bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpoaXN0b2dyYW1FbnVt
ZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c3VkZGVuVGVybWlu
YXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjdXJyZW50
VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24pOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50TWVudUxpc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyQXJyb3cpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2spOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbik6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUZXh0RmllbGQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50VHJhY2tiYXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6V2ViVGhl
bWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRoZW1lU3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R2V0V2ViVGhlbWVFeHRyYVBhcmFtcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6cGFpbnRUaGVtZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OnRyYWNlRXZlbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6dHJh
Y2VFdmVudEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExp
bmtIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjppc0xpbmtWaXNpdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpub3RpZnlKU091dE9mTWVtb3J5
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjptZW1vcnlVc2FnZU1CKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjphY3R1YWxNZW1vcnlVc2FnZU1CKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZSk6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUJyaWRnZTo6cG9wdXBzQWxsb3dlZCk6CisgICAgICAgIChXZWJDb3JlOjpXb3Jr
ZXJDb250ZXh0UHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1Jlc291cmNlSGFuZGxlLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYWNoZU1ldGFkYXRhKToKKyAg
ICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViRnJhbWVJ
bXBsOjpXZWJGcmFtZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZUltcGw6On5XZWJG
cmFtZUltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6CisgICAgICAgIChXZWJL
aXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUpOgorCiAy
MDExLTAxLTE5ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgcm9sbCBjaHJvbWl1bSBkZXBzIHRvIHBpY2sgdXAgZml4ZXMgZm9yIHRoZSBsaW51
eCBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2ViS2l0Lmd5cAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJKHJldmlzaW9uIDc2MTcz
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTUsNyArMzE1LDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL0JvdW5kT2JqZWN0LmgnLAog
ICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5oJywKLSAgICAgICAgICAgICAgICAnc3JjL0Nocm9t
aXVtQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWl1bUN1cnJlbnRUaW1l
LmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWl1bVRocmVhZGluZy5jcHAnLAogICAg
ICAgICAgICAgICAgICdzcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVCdWlsZGVyLmgnLApAQCAtMzg0
LDYgKzM4Myw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVBsYXllclByaXZhdGVDaHJv
bWl1bS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0aW9uUHJlc2VudGVySW1w
bC5oJywKICAgICAgICAgICAgICAgICAnc3JjL05vdGlmaWNhdGlvblByZXNlbnRlckltcGwuY3Bw
JywKKyAgICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtQnJpZGdlLmNwcCcsCiAgICAgICAgICAg
ICAgICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAnLAogICAgICAgICAgICAg
ICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAgICAgICAgICAgICAgICAg
J3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAnLApJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAJKHJldmlzaW9uIDc2MTczKQorKysg
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBs
Lmg+CiAKICNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNs
dWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIm1hYy9XZWJUaGVtZUVuZ2luZS5oIgog
I2VuZGlmCiAKQEAgLTM5OCwxNyArMzk4LDE3IEBAIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViR2VvbG9jYXQKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViR2VvbG9jYXRp
b25FcnJvcjo6RXJyb3JQb3NpdGlvblVuYXZhaWxhYmxlLCBHZW9sb2NhdGlvbkVycm9yOjpQb3Np
dGlvblVuYXZhaWxhYmxlKTsKIAogI2lmIE9TKERBUldJTikKLUNPTVBJTEVfQVNTRVJUX01BVENI
SU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQsIENocm9taXVtQnJpZGdlOjpT
dGF0ZURpc2FibGVkKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdp
bmU6OlN0YXRlSW5hY3RpdmUsIENocm9taXVtQnJpZGdlOjpTdGF0ZUluYWN0aXZlKTsKLUNPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlQWN0aXZlLCBDaHJv
bWl1bUJyaWRnZTo6U3RhdGVBY3RpdmUpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkLCBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2Vk
KTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlz
YWJsZWQsIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVkKTsKK0NPTVBJTEVfQVNTRVJUX01B
VENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlSW5hY3RpdmUsIFBsYXRmb3JtQnJpZGdl
OjpTdGF0ZUluYWN0aXZlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVF
bmdpbmU6OlN0YXRlQWN0aXZlLCBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVBY3RpdmUpOworQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkLCBQbGF0
Zm9ybUJyaWRnZTo6U3RhdGVQcmVzc2VkKTsKIAotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIsIENocm9taXVtQnJpZGdlOjpTaXplUmVndWxh
cik7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTaXplU21h
bGwsIENocm9taXVtQnJpZGdlOjpTaXplU21hbGwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdf
RU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIsIFBsYXRmb3JtQnJpZGdlOjpTaXplUmVn
dWxhcik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTaXpl
U21hbGwsIFBsYXRmb3JtQnJpZGdlOjpTaXplU21hbGwpOwogCi1DT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJPcmllbnRhdGlvbkhvcml6b250YWws
IENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlvbkhvcml6b250YWwpOwotQ09NUElM
RV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyT3JpZW50YXRp
b25WZXJ0aWNhbCwgQ2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWwp
OworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFy
T3JpZW50YXRpb25Ib3Jpem9udGFsLCBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyT3JpZW50YXRp
b25Ib3Jpem9udGFsKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdp
bmU6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWwsIFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxi
YXJPcmllbnRhdGlvblZlcnRpY2FsKTsKIAotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShX
ZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldywgQ2hyb21pdW1CcmlkZ2U6
OlNjcm9sbGJhclBhcmVudFNjcm9sbFZpZXcpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5V
TShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5ZXIsIENocm9taXVtQnJp
ZGdlOjpTY3JvbGxiYXJQYXJlbnRSZW5kZXJMYXllcik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElO
R19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJQYXJlbnRTY3JvbGxWaWV3LCBQbGF0Zm9y
bUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldyk7CitDT01QSUxFX0FTU0VSVF9NQVRD
SElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJQYXJlbnRSZW5kZXJMYXllciwgUGxh
dGZvcm1CcmlkZ2U6OlNjcm9sbGJhclBhcmVudFJlbmRlckxheWVyKTsKICNlbmRpZgpJbmRleDog
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJpZGdlLmNwcAkocmV2aXNp
b24gNzYxNzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9DaHJvbWl1bUJyaWRnZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTk3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlzdHJpYnV0aW9uLgotICog
ICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3IgdGhlIG5hbWVzIG9mIGl0
cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwotICogIkFTIElTIiBBTkQg
QU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKLSAq
IExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAotICogU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLQotI2luY2x1ZGUgPGdvb2dsZXVybC9zcmMvdXJs
X3V0aWwuaD4KLQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9tZUNsaWVudElt
cGwuaCIKLSNpbmNsdWRlICJXZWJBdWRpb0J1cy5oIgotI2luY2x1ZGUgIldlYkNsaXBib2FyZC5o
IgotI2luY2x1ZGUgIldlYkNvb2tpZS5oIgotI2luY2x1ZGUgIldlYkNvb2tpZUphci5oIgotI2lu
Y2x1ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJXZWJEcmFnRGF0YS5oIgotI2luY2x1ZGUgIldl
YkZpbGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUNsaWVudC5oIgotI2luY2x1ZGUg
IldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYklEQktleS5oIgotI2luY2x1ZGUgIldlYklt
YWdlLmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2ViS2l0Q2xpZW50LmgiCi0j
aW5jbHVkZSAiV2ViTWltZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiV2ViUGx1Z2luQ29udGFpbmVy
SW1wbC5oIgotI2luY2x1ZGUgIldlYlBsdWdpbkxpc3RCdWlsZGVySW1wbC5oIgotI2luY2x1ZGUg
IldlYlNhbmRib3hTdXBwb3J0LmgiCi0jaW5jbHVkZSAiV2ViU2VyaWFsaXplZFNjcmlwdFZhbHVl
LmgiCi0jaW5jbHVkZSAiV2ViU2NyZWVuSW5mby5oIgotI2luY2x1ZGUgIldlYlN0cmluZy5oIgot
I2luY2x1ZGUgIldlYlVSTC5oIgotI2luY2x1ZGUgIldlYlZlY3Rvci5oIgotI2luY2x1ZGUgIldl
YlZpZXdDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgotI2luY2x1ZGUgIldlYldv
cmtlckNsaWVudEltcGwuaCIKLQotI2lmIFBMQVRGT1JNKENHKQotI2luY2x1ZGUgPENvcmVHcmFw
aGljcy9DR0NvbnRleHQuaD4KLSNlbmRpZgotCi0jaWYgT1MoV0lORE9XUykKLSNpbmNsdWRlICJX
ZWJSZWN0LmgiCi0jaW5jbHVkZSAid2luL1dlYlRoZW1lRW5naW5lLmgiCi0jZW5kaWYKLQotI2lm
IE9TKExJTlVYKSB8fCBPUyhGUkVFQlNEKQotI2luY2x1ZGUgImxpbnV4L1dlYlRoZW1lRW5naW5l
LmgiCi0jaW5jbHVkZSAiV2ViRm9udEluZm8uaCIKLSNpbmNsdWRlICJXZWJGb250UmVuZGVyU3R5
bGUuaCIKLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUgIm1hYy9XZWJUaGVtZUVu
Z2luZS5oIgotI2VuZGlmCi0KLSNpZiBXRUJLSVRfVVNJTkdfU0tJQQotI2luY2x1ZGUgIk5hdGl2
ZUltYWdlU2tpYS5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1
ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2luY2x1ZGUgIkdyYXBoaWNz
Q29udGV4dC5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kUHJveHkuaCIKLSNpbmNsdWRl
ICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJQbGF0Zm9y
bUNvbnRleHRTa2lhLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgotI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiV29ya2VyLmgiCi0jaW5jbHVkZSAiV29ya2VyQ29udGV4
dFByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQotLy8gV2UgYXJlIHBhcnQg
b2YgdGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbi4KLXVzaW5nIG5hbWVzcGFjZSBXZWJLaXQ7Ci0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIENocm9tZUNsaWVudEltcGwqIHRvQ2hyb21l
Q2xpZW50SW1wbChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBpZiAoIXdpZGdldCkKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXc7Ci0gICAgaWYgKHdpZGdldC0+aXNGcmFt
ZVZpZXcoKSkKLSAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldCk7
Ci0gICAgZWxzZSBpZiAod2lkZ2V0LT5wYXJlbnQoKSAmJiB3aWRnZXQtPnBhcmVudCgpLT5pc0Zy
YW1lVmlldygpKQotICAgICAgICB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJhbWVWaWV3Kj4od2lkZ2V0
LT5wYXJlbnQoKSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFBhZ2UqIHBh
Z2UgPSB2aWV3LT5mcmFtZSgpID8gdmlldy0+ZnJhbWUoKS0+cGFnZSgpIDogMDsKLSAgICBpZiAo
IXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PENocm9t
ZUNsaWVudEltcGwqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwotfQotCi1zdGF0aWMgV2Vi
V2lkZ2V0Q2xpZW50KiB0b1dlYldpZGdldENsaWVudChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBD
aHJvbWVDbGllbnRJbXBsKiBjaHJvbWVDbGllbnRJbXBsID0gdG9DaHJvbWVDbGllbnRJbXBsKHdp
ZGdldCk7Ci0gICAgaWYgKCFjaHJvbWVDbGllbnRJbXBsIHx8ICFjaHJvbWVDbGllbnRJbXBsLT53
ZWJWaWV3KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjaHJvbWVDbGllbnRJbXBs
LT53ZWJWaWV3KCktPmNsaWVudCgpOwotfQotCi1zdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29r
aWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIFdlYkZyYW1lSW1wbCogZnJh
bWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQtPmZyYW1lKCkpOwotICAg
IGlmICghZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwtPmNsaWVudCgpKQotICAgICAgICByZXR1cm4g
MDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGZyYW1lSW1wbC0+Y2xpZW50KCktPmNv
b2tpZUphcihmcmFtZUltcGwpOwotICAgIGlmICghY29va2llSmFyKQotICAgICAgICBjb29raWVK
YXIgPSB3ZWJLaXRDbGllbnQoKS0+Y29va2llSmFyKCk7Ci0gICAgcmV0dXJuIGNvb2tpZUphcjsK
LX0KLQotLy8gQ2FjaGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIENocm9taXVtQnJpZGdlOjpjYWNo
ZU1ldGFkYXRhKGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHJlc3BvbnNlVGltZSwgY29uc3QgVmVj
dG9yPGNoYXI+JiBkYXRhKQotewotICAgIHdlYktpdENsaWVudCgpLT5jYWNoZU1ldGFkYXRhKHVy
bCwgcmVzcG9uc2VUaW1lLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkpOwotfQotCi0vLyBDbGlw
Ym9hcmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZElzRm9ybWF0
QXZhaWxhYmxlKAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRGb3JtYXQgZm9ybWF0
LAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQotewotICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPmlzRm9ybWF0QXZhaWxhYmxlKAot
ICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkZvcm1hdD4oZm9ybWF0KSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwotfQotCi1TdHJp
bmcgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoCi0gICAgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCi17Ci0gICAgcmV0dXJuIHdlYktpdENs
aWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZFBsYWluVGV4dCgKLSAgICAgICAgc3RhdGljX2Nhc3Q8
V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdl
OjpjbGlwYm9hcmRSZWFkSFRNTCgKLSAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVm
ZmVyIGJ1ZmZlciwKLSAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBzb3VyY2VVUkwpCi17Ci0g
ICAgV2ViVVJMIHVybDsKLSAgICAqaHRtbFRleHQgPSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJk
KCktPnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4o
YnVmZmVyKSwgJnVybCk7Ci0gICAgKnNvdXJjZVVSTCA9IHVybDsKLX0KLQotdm9pZCBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBodG1sVGV4dCwK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwm
IHNvdXJjZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYm9vbCB3cml0ZVNtYXJ0UGFzdGUpCi17Ci0gICAgd2ViS2l0Q2xpZW50
KCktPmNsaXBib2FyZCgpLT53cml0ZUhUTUwoCi0gICAgICAgIGh0bWxUZXh0LCBzb3VyY2VVUkws
IHBsYWluVGV4dCwgd3JpdGVTbWFydFBhc3RlKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwbGFpblRleHQpCi17Ci0gICAg
d2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZVBsYWluVGV4dChwbGFpblRleHQpOwot
fQotCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVSTChjb25zdCBLVVJMJiB1
cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2Fy
ZCgpLT53cml0ZVVSTCh1cmwsIHRpdGxlKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xp
cGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgc291cmNlVVJMLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHRpdGxlKQotewot
I2lmIFdFQktJVF9VU0lOR19TS0lBCi0gICAgV2ViSW1hZ2Ugd2ViSW1hZ2UoKmltYWdlKTsKLSNl
bHNlCi0gICAgV2ViSW1hZ2Ugd2ViSW1hZ2UoaW1hZ2UpOwotI2VuZGlmCi0gICAgd2ViS2l0Q2xp
ZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUltYWdlKHdlYkltYWdlLCBzb3VyY2VVUkwsIHRpdGxl
KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVEYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
Y29uc3QgU3RyaW5nJiBtZXRhZGF0YSkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJk
KCktPndyaXRlRGF0YSh0eXBlLCBkYXRhLCBtZXRhZGF0YSk7Ci19Ci0KLUhhc2hTZXQ8U3RyaW5n
PiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5cGVzKAotICAgIFBhc3Rl
Ym9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLCBib29sKiBjb250YWluc0ZpbGVu
YW1lcykKLXsKLSAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQgPSB3ZWJLaXRDbGllbnQo
KS0+Y2xpcGJvYXJkKCktPnJlYWRBdmFpbGFibGVUeXBlcygKLSAgICAgICAgc3RhdGljX2Nhc3Q8
V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIGNvbnRhaW5zRmlsZW5hbWVzKTsKLSAgICBI
YXNoU2V0PFN0cmluZz4gdHlwZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHQu
c2l6ZSgpOyArK2kpCi0gICAgICAgIHR5cGVzLmFkZChyZXN1bHRbaV0pOwotICAgIHJldHVybiB0
eXBlczsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoUGFzdGVi
b2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHR5cGUsIFN0cmluZyYgZGF0YSwgU3Ry
aW5nJiBtZXRhZGF0YSkKLXsKLSAgICBXZWJTdHJpbmcgcmVzdWx0RGF0YTsKLSAgICBXZWJTdHJp
bmcgcmVzdWx0TWV0YWRhdGE7Ci0gICAgYm9vbCBzdWNjZWVkZWQgPSB3ZWJLaXRDbGllbnQoKS0+
Y2xpcGJvYXJkKCktPnJlYWREYXRhKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6
OkJ1ZmZlcj4oYnVmZmVyKSwgdHlwZSwgJnJlc3VsdERhdGEsICZyZXN1bHRNZXRhZGF0YSk7Ci0g
ICAgaWYgKHN1Y2NlZWRlZCkgewotICAgICAgICBkYXRhID0gcmVzdWx0RGF0YTsKLSAgICAgICAg
bWV0YWRhdGEgPSByZXN1bHRNZXRhZGF0YTsKLSAgICB9Ci0gICAgcmV0dXJuIHN1Y2NlZWRlZDsK
LX0KLQotVmVjdG9yPFN0cmluZz4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFt
ZXMoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCi17Ci0gICAgV2Vi
VmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5y
ZWFkRmlsZW5hbWVzKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4o
YnVmZmVyKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gY29udmVydGVkUmVzdWx0OwotICAgIGZvciAo
c2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQotICAgICAgICBjb252ZXJ0ZWRS
ZXN1bHQuYXBwZW5kKHJlc3VsdFtpXSk7Ci0gICAgcmV0dXJuIGNvbnZlcnRlZFJlc3VsdDsKLX0K
LQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIENocm9taXVtQnJpZGdlOjpzZXRDb29r
aWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVlKQotewotICAgIFdlYkNv
b2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29v
a2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJz
dFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6
Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKLXsKLSAg
ICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2ll
SmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1bHQgPSBjb29r
aWVKYXItPmNvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIENocm9taXVtQnJpZGdlOjpjb29raWVSZXF1
ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHVy
bCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0g
Z2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICByZXN1
bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKHVybCwgZG9jdW1l
bnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJv
b2wgQ2hyb21pdW1CcmlkZ2U6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBj
b25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVzKQotewotICAgIHJhd0Nv
b2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3ZWJDb29raWVzOwotCi0g
ICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAg
IGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3Q29va2llcyh1cmwsIGRvY3Vt
ZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVzKTsKLQotICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0
IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKLSAgICAgICAgQ29va2llIGNv
b2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUudmFs
dWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRvbWFpbiwKLSAgICAgICAgICAg
ICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29r
aWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuaHR0cE9ubHksCi0g
ICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwKLSAgICAgICAgICAgICAgICAg
ICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nvb2tpZXMuYXBwZW5kKGNvb2tp
ZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpk
ZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNv
bnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9
IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUphcikKLSAgICAgICAgY29v
a2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0KLQotYm9vbCBDaHJvbWl1
bUJyaWRnZTo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAg
IGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRD
b29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIHJlc3VsdCA9
IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQtPmNvb2tpZVVSTCgpLCBkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotLy8g
RE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIENocm9taXVtQnJpZGdlOjpwcmVmZXRjaEROUyhj
b25zdCBTdHJpbmcmIGhvc3RuYW1lKQotewotICAgIHdlYktpdENsaWVudCgpLT5wcmVmZXRjaEhv
c3ROYW1lKGhvc3RuYW1lKTsKLX0KLQotLy8gRmlsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotYm9vbCBD
aHJvbWl1bUJyaWRnZTo6ZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVFeGlzdHMocGF0aCk7Ci19
Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQot
ewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVGaWxl
KHBhdGgpOwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjpkZWxldGVFbXB0eURpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRp
bGl0aWVzKCktPmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOwotfQotCi1ib29sIENocm9taXVt
QnJpZGdlOjpnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0
KQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5nZXRGaWxl
U2l6ZShwYXRoLCByZXN1bHQpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpyZXZlYWxGb2xk
ZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5yZXZlYWxGb2xkZXJJbk9TKHBhdGgpOwotfQotCi1ib29sIENocm9taXVtQnJp
ZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYg
cmVzdWx0KQotewotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lOwotICAgIGlmICghd2ViS2l0
Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwg
bW9kaWZpY2F0aW9uVGltZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXN1bHQgPSBz
dGF0aWNfY2FzdDx0aW1lX3Q+KG1vZGlmaWNhdGlvblRpbWUpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5nJiBw
YXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kaXJl
Y3RvcnlOYW1lKHBhdGgpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OnBhdGhCeUFwcGVu
ZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50
KQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5wYXRoQnlB
cHBlbmRpbmdDb21wb25lbnQocGF0aCwgY29tcG9uZW50KTsKLX0KLQotYm9vbCBDaHJvbWl1bUJy
aWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+bWFrZUFsbERpcmVjdG9yaWVzKHBh
dGgpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmdldEFic29sdXRlUGF0aChjb25zdCBT
dHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPmdldEFic29sdXRlUGF0aChwYXRoKTsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNE
aXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+ZmlsZVV0aWxpdGllcygpLT5pc0RpcmVjdG9yeShwYXRoKTsKLX0KLQotS1VSTCBDaHJvbWl1
bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVQYXRoVG9VUkwocGF0aCk7Ci19
Ci0KLVBsYXRmb3JtRmlsZUhhbmRsZSBDaHJvbWl1bUJyaWRnZTo6b3BlbkZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPmZpbGVVdGlsaXRpZXMoKS0+b3BlbkZpbGUocGF0aCwgbW9kZSk7Ci19Ci0KLXZvaWQgQ2hy
b21pdW1CcmlkZ2U6OmNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmIGhhbmRsZSkKLXsKLSAg
ICB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5jbG9zZUZpbGUoaGFuZGxlKTsKLX0K
LQotbG9uZyBsb25nIENocm9taXVtQnJpZGdlOjpzZWVrRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUg
aGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbiBvcmlnaW4pCi17Ci0gICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnNlZWtGaWxlKGhhbmRsZSwg
b2Zmc2V0LCBvcmlnaW4pOwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjp0cnVuY2F0ZUZpbGUo
UGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCkKLXsKLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+dHJ1bmNhdGVGaWxlKGhhbmRsZSwg
b2Zmc2V0KTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjpyZWFkRnJvbUZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKLXsKLSAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cmVhZEZyb21GaWxlKGhhbmRsZSwgZGF0
YSwgbGVuZ3RoKTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQotewotICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT53cml0ZVRvRmlsZShoYW5k
bGUsIGRhdGEsIGxlbmd0aCk7Ci19Ci0KLS8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotI2lmIE9T
KFdJTkRPV1MpCi1ib29sIENocm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKEhGT05UIGZv
bnQpCi17Ci0gICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0Q2xpZW50KCktPnNhbmRi
b3hTdXBwb3J0KCk7Ci0KLSAgICAvLyBpZiB0aGVyZSBpcyBubyBzYW5kYm94LCB0aGVuIHdlIGNh
biBhc3N1bWUgdGhlIGZvbnQKLSAgICAvLyB3YXMgYWJsZSB0byBiZSBsb2FkZWQgc3VjY2Vzc2Z1
bGx5IGFscmVhZHkKLSAgICByZXR1cm4gc3MgPyBzcy0+ZW5zdXJlRm9udExvYWRlZChmb250KSA6
IHRydWU7Ci19Ci0jZW5kaWYKLQotI2lmIE9TKExJTlVYKSB8fCBPUyhGUkVFQlNEKQotU3RyaW5n
IENocm9taXVtQnJpZGdlOjpnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3RlcnMpCi17Ci0gICAgaWYgKHdlYktpdENsaWVu
dCgpLT5zYW5kYm94U3VwcG9ydCgpKQotICAgICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnNh
bmRib3hTdXBwb3J0KCktPmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIG51
bUNoYXJhY3RlcnMpOwotCi0gICAgV2ViQ1N0cmluZyBmYW1pbHkgPSBXZWJGb250SW5mbzo6ZmFt
aWx5Rm9yQ2hhcnMoY2hhcmFjdGVycywgbnVtQ2hhcmFjdGVycyk7Ci0gICAgaWYgKGZhbWlseS5k
YXRhKCkpCi0gICAgICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21VVEY4KGZhbWlseS5kYXRhKCkp
OwotCi0gICAgcmV0dXJuIFdlYlN0cmluZygpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpn
ZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFyKiBmb250LCBpbnQgc2l6ZUFuZFN0eWxl
LCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCkKLXsKLSAgICBXZWJGb250UmVuZGVyU3R5bGUgc3R5
bGU7Ci0KLSAgICBpZiAod2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCkpCi0gICAgICAg
IHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRSZW5kZXJTdHlsZUZvclN0cmlr
ZShmb250LCBzaXplQW5kU3R5bGUsICZzdHlsZSk7Ci0gICAgZWxzZQotICAgICAgICBXZWJGb250
SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2UoZm9udCwgc2l6ZUFuZFN0eWxlLCAmc3R5bGUpOwot
Ci0gICAgc3R5bGUudG9Gb250UmVuZGVyU3R5bGUocmVzdWx0KTsKLX0KLSNlbmRpZgotCi0jaWYg
T1MoREFSV0lOKQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6bG9hZEZvbnQoTlNGb250KiBzcmNGb250
LCBBVFNGb250Q29udGFpbmVyUmVmKiBvdXQpCi17Ci0gICAgV2ViU2FuZGJveFN1cHBvcnQqIHNz
ID0gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCk7Ci0gICAgaWYgKHNzKQotICAgICAg
ICByZXR1cm4gc3MtPmxvYWRGb250KHNyY0ZvbnQsIG91dCk7Ci0KLSAgICAvLyBUaGlzIGZ1bmN0
aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiByZXNwb25zZSB0byBhbiBlcnJvciBsb2FkaW5n
IGEKLSAgICAvLyBmb250IGR1ZSB0byBiZWluZyBibG9ja2VkIGJ5IHRoZSBzYW5kYm94LgotICAg
IC8vIFRoaXMgYnkgZGVmaW5pdGlvbiBzaG91bGRuJ3QgaGFwcGVuIGlmIHRoZXJlIGlzIG5vIHNh
bmRib3ggc3VwcG9ydC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAqb3V0ID0gMDsK
LSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotLy8gRGF0YWJhc2VzIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci1QbGF0Zm9ybUZpbGVIYW5kbGUgQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoY29u
c3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgaW50IGRlc2lyZWRGbGFncykKLXsKLSAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlT3BlbkZpbGUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwg
ZGVzaXJlZEZsYWdzKTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZp
bGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyKQotewotICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VEZWxldGVGaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFt
ZSksIHN5bmNEaXIpOwotfQotCi1sb25nIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVB
dHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCi17Ci0gICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKFdlYlN0cmluZyh2ZnNGaWxlTmFt
ZSkpOwotfQotCi1sb25nIGxvbmcgQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZVNpemUo
Y29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PmRhdGFiYXNlR2V0RmlsZVNpemUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSk7Ci19Ci0KLS8vIElu
ZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotUGFzc1JlZlB0cjxJREJGYWN0b3J5QmFja2VuZEludGVyZmFj
ZT4gQ2hyb21pdW1CcmlkZ2U6OmlkYkZhY3RvcnkoKQotewotICAgIC8vIFRoZXJlJ3Mgbm8gcmVh
c29uIHdoeSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHByb3h5IGVhY2ggdGltZSwgYnV0Ci0g
ICAgLy8gdGhlcmUncyBhbHNvIG5vIHN0cm9uZyByZWFzb24gbm90IHRvLgotICAgIHJldHVybiBJ
REJGYWN0b3J5QmFja2VuZFByb3h5OjpjcmVhdGUoKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6aWRiU2h1dGRvd24oKQotewotICAgIC8vIEluIHRoZSBicm93c2VyIHByb2Nlc3MsIHRoaXMg
c2h1dHMgZG93biB0aGUgdXRpbGl0eSBwcm9jZXNzLiBJbiB0aGUgcmVuZGVyZXIgcHJvY2Vzcywg
aXQgZG9lcyBub3RoaW5nLgotICAgIHdlYktpdENsaWVudCgpLT5pZGJTaHV0ZG93bigpOwotfQot
Ci12b2lkIENocm9taXVtQnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNB
bmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2
YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtl
eXMpCi17Ci0gICAgV2ViVmVjdG9yPFdlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gd2ViVmFsdWVz
ID0gdmFsdWVzOwotICAgIFdlYlZlY3RvcjxXZWJJREJLZXk+IHdlYktleXM7Ci0gICAgd2ViS2l0
Q2xpZW50KCktPmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgod2Vi
VmFsdWVzLCBXZWJTdHJpbmcoa2V5UGF0aCksIHdlYktleXMpOwotCi0gICAgc2l6ZV90IHdlYktl
eXNTaXplID0gd2ViS2V5cy5zaXplKCk7Ci0gICAga2V5cy5yZXNlcnZlQ2FwYWNpdHkod2ViS2V5
c1NpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViS2V5c1NpemU7ICsraSkKLSAg
ICAgICAga2V5cy5hcHBlbmQoUGFzc1JlZlB0cjxJREJLZXk+KHdlYktleXNbaV0pKTsKLX0KLQot
Ly8gS2V5Z2VuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OnNpZ25lZFB1
YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZygKLSAgICB1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNv
bnN0IFN0cmluZyYgY2hhbGxlbmdlLCBjb25zdCBLVVJMJiB1cmwpCi17Ci0gICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5zaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoa2V5U2l6ZUlu
ZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFdlYlN0cmluZyhjaGFsbGVuZ2UpLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlVSTCh1cmwpKTsKLX0KLQot
Ly8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNvbXB1dGVk
RGVmYXVsdExhbmd1YWdlKCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRlZmF1bHRM
b2NhbGUoKTsKLX0KLQotLy8gTGF5b3V0VGVzdE1vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIENocm9taXVtQnJp
ZGdlOjpsYXlvdXRUZXN0TW9kZSgpCi17Ci0gICAgcmV0dXJuIFdlYktpdDo6bGF5b3V0VGVzdE1v
ZGUoKTsKLX0KLQotLy8gTWltZVR5cGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29sIENocm9taXVtQnJpZGdl
Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsKLSAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c0ltYWdlTUlN
RVR5cGUobWltZVR5cGUpCi0gICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0
ZWQ7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVU
eXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNKYXZhU2NyaXB0TUlNRVR5cGUobWltZVR5cGUpCi0g
ICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7Ci19Ci0KLWJvb2wgQ2hy
b21pdW1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1
cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKLSAgICAgICAgIT0gV2ViTWltZVJlZ2lz
dHJ5OjpJc05vdFN1cHBvcnRlZDsKLX0KLQotU3RyaW5nIENocm9taXVtQnJpZGdlOjptaW1lVHlw
ZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKLXsKLSAgICByZXR1cm4gd2Vi
S2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZvckV4dGVuc2lvbihleHRlbnNp
b24pOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6Om1pbWVUeXBlRnJvbUZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5
KCktPm1pbWVUeXBlRnJvbUZpbGUocGF0aCk7Ci19Ci0KLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6
cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKLXsK
LSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5wcmVmZXJyZWRFeHRl
bnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Ci19Ci0KLS8vIFBsdWdpbiAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
LQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6cGx1Z2lucyhib29sIHJlZnJlc2gsIFZlY3RvcjxQbHVn
aW5JbmZvPiogcmVzdWx0cykKLXsKLSAgICBXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwgYnVpbGRl
cihyZXN1bHRzKTsKLSAgICB3ZWJLaXRDbGllbnQoKS0+Z2V0UGx1Z2luTGlzdChyZWZyZXNoLCAm
YnVpbGRlcik7Ci0gICAgcmV0dXJuIHRydWU7ICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gbmVlZCBm
b3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSB2YWx1ZS4KLX0KLQotTlBPYmplY3QqIENocm9t
aXVtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCogd2lkZ2V0KQotewotICAg
IGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzUGx1Z2luQ29udGFpbmVyKCkpCi0gICAgICAgIHJl
dHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlBsdWdpbkNvbnRhaW5lckltcGwq
Pih3aWRnZXQpLT5zY3JpcHRhYmxlT2JqZWN0KCk7Ci19Ci0KLS8vIFJlc291cmNlcyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotUGFzc1JlZlB0cjxJbWFnZT4gQ2hyb21pdW1CcmlkZ2U6OmxvYWRQbGF0Zm9ybUltYWdl
UmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJj
ZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7Ci0gICAgaWYgKHJlc291cmNl
LmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1hZ2UoKTsKLQotICAgIFJl
ZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7Ci0gICAgaW1hZ2UtPnNl
dERhdGEocmVzb3VyY2UsIHRydWUpOwotICAgIHJldHVybiBpbWFnZTsKLX0KLQotI2lmIEVOQUJM
RShXRUJfQVVESU8pCi0KLVBhc3NPd25QdHI8QXVkaW9CdXM+IENocm9taXVtQnJpZGdlOjpsb2Fk
UGxhdGZvcm1BdWRpb1Jlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRl
KQotewotICAgIGNvbnN0IFdlYkRhdGEmIHJlc291cmNlID0gd2ViS2l0Q2xpZW50KCktPmxvYWRS
ZXNvdXJjZShuYW1lKTsKLSAgICBpZiAocmVzb3VyY2UuaXNFbXB0eSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICAKLSAgICByZXR1cm4gZGVjb2RlQXVkaW9GaWxlRGF0YShyZXNvdXJjZS5kYXRh
KCksIHJlc291cmNlLnNpemUoKSwgc2FtcGxlUmF0ZSk7Ci19Ci0KLVBhc3NPd25QdHI8QXVkaW9C
dXM+IENocm9taXVtQnJpZGdlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKLXsKLSAgICBXZWJBdWRpb0J1cyB3ZWJB
dWRpb0J1czsKLSAgICBpZiAod2ViS2l0Q2xpZW50KCktPmxvYWRBdWRpb1Jlc291cmNlKCZ3ZWJB
dWRpb0J1cywgZGF0YSwgc2l6ZSwgc2FtcGxlUmF0ZSkpCi0gICAgICAgIHJldHVybiB3ZWJBdWRp
b0J1cy5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRpZiAvLyBFTkFCTEUoV0VC
X0FVRElPKQotCi0vLyBTYW5kYm94IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6
OnNhbmRib3hFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hF
bmFibGVkKCk7Ci19Ci0KLS8vIFNoYXJlZFRpbWVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJy
aWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKQotewotICAg
IHdlYktpdENsaWVudCgpLT5zZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oZnVuYyk7Ci19Ci0K
LXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZG91YmxlIGZpcmVU
aW1lKQotewotICAgIHdlYktpdENsaWVudCgpLT5zZXRTaGFyZWRUaW1lckZpcmVUaW1lKGZpcmVU
aW1lKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c3RvcFNoYXJlZFRpbWVyKCkKLXsKLSAg
ICB3ZWJLaXRDbGllbnQoKS0+c3RvcFNoYXJlZFRpbWVyKCk7Ci19Ci0KLS8vIFN0YXRzQ291bnRl
cnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3VudGVyKGNv
bnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmRlY3JlbWVudFN0YXRzQ291
bnRlcihuYW1lKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6aW5jcmVtZW50U3RhdHNDb3Vu
dGVyKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmluY3JlbWVudFN0
YXRzQ291bnRlcihuYW1lKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtQ3Vz
dG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgs
IGludCBidWNrZXRDb3VudCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+aGlzdG9ncmFtQ3VzdG9t
Q291bnRzKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldENvdW50KTsKLX0KLQotdm9pZCBD
aHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3QgY2hhciogbmFtZSwgaW50
IHNhbXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmhpc3Rv
Z3JhbUVudW1lcmF0aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1ZSk7Ci19Ci0KLS8vIFN1
ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c3VkZGVuVGVybWluYXRp
b25DaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+c3VkZGVuVGVy
bWluYXRpb25DaGFuZ2VkKGVuYWJsZWQpOwotfQotCi0vLyBTeXN0ZW1UaW1lIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0K
LWRvdWJsZSBDaHJvbWl1bUJyaWRnZTo6Y3VycmVudFRpbWUoKQotewotICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+Y3VycmVudFRpbWUoKTsKLX0KLQotLy8gVGhlbWluZyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
Ci0jaWYgT1MoV0lORE9XUykKLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRCdXR0b24oCi0g
ICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNT
dGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdlYktpdENsaWVudCgpLT50
aGVtZUVuZ2luZSgpLT5wYWludEJ1dHRvbigKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Ci19Ci0KLXZvaWQg
Q2hyb21pdW1CcmlkZ2U6OnBhaW50TWVudUxpc3QoCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywg
aW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0
JiByZWN0KQotewotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludE1lbnVM
aXN0KAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0
ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRT
Y3JvbGxiYXJBcnJvdygKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgc3RhdGUsIGludCBj
bGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICB3ZWJLaXRDbGll
bnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJBcnJvdygKLSAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Ci19
Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgR3JhcGhp
Y3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAg
ICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2lu
ZSgpLT5wYWludFNjcm9sbGJhclRodW1iKAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCkt
PmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKLX0KLQotdm9pZCBD
aHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUcmFjaygKLSAgICBHcmFwaGljc0NvbnRleHQq
IGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAotICAgIGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGFsaWduUmVjdCkKLXsKLSAgICB3ZWJLaXRDbGll
bnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUcmFjaygKLSAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVj
dCwKLSAgICAgICAgYWxpZ25SZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRT
cGluQnV0dG9uKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUs
IGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsKLSAgICB3ZWJL
aXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTcGluQnV0dG9uKAotICAgICAgICBnYy0+
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCBy
ZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUZXh0RmllbGQoCi0gICAgR3Jh
cGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwK
LSAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGJvb2wgZmlsbENv
bnRlbnRBcmVhLAotICAgIGJvb2wgZHJhd0VkZ2VzKQotewotICAgIC8vIEZhbGxiYWNrIHRvIHdo
aXRlIHdoZW4gfGNvbG9yfCBpcyBpbnZhbGlkLgotICAgIFJHQkEzMiBiYWNrZ3JvdW5kQ29sb3Ig
PSBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvci5yZ2IoKSA6IENvbG9yOjp3aGl0ZTsKLQotICAgIHdl
YktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFRleHRGaWVsZCgKLSAgICAgICAgZ2Mt
PnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwg
cmVjdCwKLSAgICAgICAgYmFja2dyb3VuZENvbG9yLCBmaWxsQ29udGVudEFyZWEsIGRyYXdFZGdl
cyk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VHJhY2tiYXIoCi0gICAgR3JhcGhp
Y3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAg
ICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2lu
ZSgpLT5wYWludFRyYWNrYmFyKAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcigKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBjb25z
dCBJbnRSZWN0JiBiYXJSZWN0LCBjb25zdCBJbnRSZWN0JiB2YWx1ZVJlY3QsIGJvb2wgZGV0ZXJt
aW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPnRo
ZW1lRW5naW5lKCktPnBhaW50UHJvZ3Jlc3NCYXIoCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y2FudmFzKCksIGJhclJlY3QsIHZhbHVlUmVjdCwgZGV0ZXJtaW5hdGUsIGFuaW1hdGVk
U2Vjb25kcyk7Ci19Ci0KLSNlbGlmIE9TKExJTlVYKQotCi1zdGF0aWMgV2ViVGhlbWVFbmdpbmU6
OlBhcnQgV2ViVGhlbWVQYXJ0KENocm9taXVtQnJpZGdlOjpUaGVtZVBhcnQgcGFydCkKLXsKLSAg
ICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
RG93bkFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7
Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzogcmV0dXJu
IFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93OwotICAgIGNhc2UgQ2hyb21p
dW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6
OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRT
Y3JvbGxiYXJVcEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJVcEFy
cm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1
bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYjsK
LSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYjogcmV0
dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYjsKLSAgICBjYXNl
IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrOiByZXR1cm4gV2Vi
VGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2s7Ci0gICAgY2FzZSBDaHJv
bWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s6IHJldHVybiBXZWJUaGVtZUVu
Z2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s7Ci0gICAgfQotICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckRvd25B
cnJvdzsKLX0KLQotc3RhdGljIFdlYlRoZW1lRW5naW5lOjpTdGF0ZSBXZWJUaGVtZVN0YXRlKENo
cm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0
ZSkgewotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlRGlzYWJsZWQ6IHJldHVybiBXZWJU
aGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0
ZUhvdmVyOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlSG92ZXI7Ci0gICAgY2FzZSBDaHJv
bWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVOb3Jt
YWw7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkOiByZXR1cm4gV2ViVGhl
bWVFbmdpbmU6OlN0YXRlUHJlc3NlZDsKLSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZURpc2FibGVkOwotfQotCi1zdGF0aWMg
dm9pZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKENocm9taXVtQnJpZGdlOjpUaGVtZVBhcnQgcGFy
dCwgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgY29uc3QgQ2hyb21pdW1C
cmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyogZXh0cmFQYXJhbXMsIFdlYlRoZW1lRW5naW5l
OjpFeHRyYVBhcmFtcyogd2ViVGhlbWVFeHRyYVBhcmFtcykKLXsKLSAgICBpZiAocGFydCA9PSBD
aHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjayB8fCBwYXJ0ID09IENo
cm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaykgewotICAgICAgICB3ZWJU
aGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1ggPSBleHRyYVBhcmFtcy0+c2Ny
b2xsYmFyVHJhY2sudHJhY2tYOwotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxi
YXJUcmFjay50cmFja1kgPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tZOwotICAg
ICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1dpZHRoID0gZXh0
cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGg7Ci0gICAgICAgIHdlYlRoZW1lRXh0
cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrSGVpZ2h0ID0gZXh0cmFQYXJhbXMtPnNjcm9s
bGJhclRyYWNrLnRyYWNrSGVpZ2h0OwotICAgIH0KLX0KLQotSW50U2l6ZSBDaHJvbWl1bUJyaWRn
ZTo6Z2V0VGhlbWVQYXJ0U2l6ZShUaGVtZVBhcnQgcGFydCkKLXsKLSAgICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5nZXRTaXplKFdlYlRoZW1lUGFydChwYXJ0KSk7Ci19
Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAotICAgIEdyYXBoaWNzQ29u
dGV4dCogZ2MsIFRoZW1lUGFydCBwYXJ0LCBUaGVtZVBhaW50U3RhdGUgc3RhdGUsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIGNvbnN0IFRoZW1lUGFpbnRFeHRyYVBhcmFtcyogZXh0cmFQYXJhbXMpCi17
Ci0gICAgV2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zIHdlYlRoZW1lRXh0cmFQYXJhbXM7Ci0g
ICAgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhwYXJ0LCBzdGF0ZSwgZXh0cmFQYXJhbXMsICZ3ZWJU
aGVtZUV4dHJhUGFyYW1zKTsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFp
bnQoCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIFdlYlRoZW1lUGFy
dChwYXJ0KSwgV2ViVGhlbWVTdGF0ZShzdGF0ZSksIHJlY3QsICZ3ZWJUaGVtZUV4dHJhUGFyYW1z
KTsKLX0KLQotI2VsaWYgT1MoREFSV0lOKQotCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNj
cm9sbGJhclRodW1iKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIFRoZW1lUGFpbnRTdGF0ZSBz
dGF0ZSwgVGhlbWVQYWludFNpemUgc2l6ZSwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhl
bWVQYWludFNjcm9sbGJhckluZm8mIHNjcm9sbGJhckluZm8pCi17Ci0gICAgV2ViVGhlbWVFbmdp
bmU6OlNjcm9sbGJhckluZm8gd2ViVGhlbWVTY3JvbGxiYXJJbmZvOwotCi0gICAgd2ViVGhlbWVT
Y3JvbGxiYXJJbmZvLm9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlNj
cm9sbGJhck9yaWVudGF0aW9uPihzY3JvbGxiYXJJbmZvLm9yaWVudGF0aW9uKTsKLSAgICB3ZWJU
aGVtZVNjcm9sbGJhckluZm8ucGFyZW50ID0gc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlNj
cm9sbGJhclBhcmVudD4oc2Nyb2xsYmFySW5mby5wYXJlbnQpOwotICAgIHdlYlRoZW1lU2Nyb2xs
YmFySW5mby5tYXhWYWx1ZSA9IHNjcm9sbGJhckluZm8ubWF4VmFsdWU7Ci0gICAgd2ViVGhlbWVT
Y3JvbGxiYXJJbmZvLmN1cnJlbnRWYWx1ZSA9IHNjcm9sbGJhckluZm8uY3VycmVudFZhbHVlOwot
ICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby52aXNpYmxlU2l6ZSA9IHNjcm9sbGJhckluZm8udmlz
aWJsZVNpemU7Ci0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLnRvdGFsU2l6ZSA9IHNjcm9sbGJh
ckluZm8udG90YWxTaXplOwotCi0gICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBh
aW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKSwKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlN0YXRlPihzdGF0ZSksCi0gICAgICAgIHN0
YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTaXplPihzaXplKSwKLSAgICAgICAgcmVjdCwKLSAg
ICAgICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvKTsKLX0KLQotI2VuZGlmCi0KLS8vIFRyYWNlIEV2
ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEJlZ2luKGNvbnN0
IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkKLXsKLSAgICB3ZWJLaXRD
bGllbnQoKS0+dHJhY2VFdmVudEJlZ2luKG5hbWUsIGlkLCBleHRyYSk7Ci19Ci0KLXZvaWQgQ2hy
b21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNv
bnN0IGNoYXIqIGV4dHJhKQotewotICAgIHdlYktpdENsaWVudCgpLT50cmFjZUV2ZW50RW5kKG5h
bWUsIGlkLCBleHRyYSk7Ci19Ci0KLS8vIFZpc2l0ZWQgTGlua3MgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotTGlua0hhc2gg
Q2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25l
ZCBsZW5ndGgpCi17Ci0gICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4PiBidWZmZXI7
Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOwotICAgIGlmICghdXJsX3V0aWw6OkNhbm9u
aWNhbGl6ZSh1cmwsIGxlbmd0aCwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkpCi0gICAgICAgIHJldHVy
biAwOyAgLy8gSW52YWxpZCBVUkxzIGFyZSB1bnZpc2l0ZWQuCi0gICAgcmV0dXJuIHdlYktpdENs
aWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsK
LX0KLQotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBLVVJM
JiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBB
dG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKLXsKLSAgICAvLyBSZXNvbHZlIHRoZSByZWxhdGl2
ZSBVUkwgdXNpbmcgZ29vZ2xldXJsIGFuZCBwYXNzIHRoZSBhYnNvbHV0ZSBVUkwgdXAgdG8KLSAg
ICAvLyB0aGUgZW1iZWRkZXIuIFdlIGNvdWxkIGNyZWF0ZSBhIEdVUkwgb2JqZWN0IGZyb20gdGhl
IGJhc2UgYW5kIHJlc29sdmUKLSAgICAvLyB0aGUgcmVsYXRpdmUgVVJMIHRoYXQgd2F5LCBidXQg
Y2FsbGluZyB0aGUgbG93ZXItbGV2ZWwgZnVuY3Rpb25zCi0gICAgLy8gZGlyZWN0bHkgc2F2ZXMg
dXMgdGhlIHN0cmluZyBhbGxvY2F0aW9uIGluIG1vc3QgY2FzZXMuCi0gICAgdXJsX2Nhbm9uOjpS
YXdDYW5vbk91dHB1dDwyMDQ4PiBidWZmZXI7Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2Vk
OwotCi0jaWYgVVNFKEdPT0dMRVVSTCkKLSAgICBjb25zdCBDU3RyaW5nJiBjc3RyID0gYmFzZS51
dGY4U3RyaW5nKCk7Ci0gICAgY29uc3QgY2hhciogZGF0YSA9IGNzdHIuZGF0YSgpOwotICAgIGlu
dCBsZW5ndGggPSBjc3RyLmxlbmd0aCgpOwotICAgIGNvbnN0IHVybF9wYXJzZTo6UGFyc2VkJiBz
cmNQYXJzZWQgPSBiYXNlLnBhcnNlZCgpOwotI2Vsc2UKLSAgICAvLyBXaGVuIHdlJ3JlIG5vdCB1
c2luZyBHb29nbGVVUkwsIGZpcnN0IGNhbm9uaWNhbGl6ZSBpdCBzbyB3ZSBjYW4gcmVzb2x2ZSBp
dAotICAgIC8vIGJlbG93LgotICAgIHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gc3Jj
Q2Fub247Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQgc3JjUGFyc2VkOwotICAgIFN0cmluZyBzdHIg
PSBiYXNlLnN0cmluZygpOwotICAgIGlmICghdXJsX3V0aWw6OkNhbm9uaWNhbGl6ZShzdHIuY2hh
cmFjdGVycygpLCBzdHIubGVuZ3RoKCksIDAsICZzcmNDYW5vbiwgJnNyY1BhcnNlZCkpCi0gICAg
ICAgIHJldHVybiAwOwotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzcmNDYW5vbi5kYXRhKCk7Ci0g
ICAgaW50IGxlbmd0aCA9IHNyY0Nhbm9uLmxlbmd0aCgpOwotI2VuZGlmCi0KLSAgICBpZiAoIXVy
bF91dGlsOjpSZXNvbHZlUmVsYXRpdmUoZGF0YSwgbGVuZ3RoLCBzcmNQYXJzZWQsIGF0dHJpYnV0
ZVVSTC5jaGFyYWN0ZXJzKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0
dHJpYnV0ZVVSTC5sZW5ndGgoKSwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkpCi0gICAgICAgIHJldHVy
biAwOyAgLy8gSW52YWxpZCByZXNvbHZlZCBVUkwuCi0KLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOwotfQot
Ci1ib29sIENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVkKExpbmtIYXNoIHZpc2l0ZWRMaW5r
SGFzaCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmlzTGlua1Zpc2l0ZWQodmlzaXRl
ZExpbmtIYXNoKTsKLX0KLQotLy8gVGhlc2UgYXJlIHRlbXBvcmFyeSBtZXRob2RzIHRoYXQgdGhl
IFdlYktpdCBsYXllciBjYW4gdXNlIHRvIGNhbGwgdG8gdGhlCi0vLyBHbHVlIGxheWVyLiBPbmNl
IHRoZSBHbHVlIGxheWVyIG1vdmVzIGVudGlyZWx5IGludG8gdGhlIFdlYktpdCBsYXllciwgdGhl
c2UKLS8vIG1ldGhvZHMgd2lsbCBiZSBkZWxldGVkLgotCi12b2lkIENocm9taXVtQnJpZGdlOjpu
b3RpZnlKU091dE9mTWVtb3J5KEZyYW1lKiBmcmFtZSkKLXsKLSAgICBpZiAoIWZyYW1lKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1lID0gV2ViRnJhbWVJbXBs
Ojpmcm9tRnJhbWUoZnJhbWUpOwotICAgIGlmICghd2ViRnJhbWUtPmNsaWVudCgpKQotICAgICAg
ICByZXR1cm47Ci0gICAgd2ViRnJhbWUtPmNsaWVudCgpLT5kaWRFeGhhdXN0TWVtb3J5QXZhaWxh
YmxlRm9yU2NyaXB0KHdlYkZyYW1lKTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjptZW1vcnlV
c2FnZU1CKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3ZWJLaXRDbGllbnQoKS0+
bWVtb3J5VXNhZ2VNQigpKTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjphY3R1YWxNZW1vcnlV
c2FnZU1CKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3ZWJLaXRDbGllbnQoKS0+
YWN0dWFsTWVtb3J5VXNhZ2VNQigpKTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjpzY3JlZW5E
ZXB0aChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRv
V2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVy
biAwOwotICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5kZXB0aDsKLX0KLQotaW50IENo
cm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRnZXQqIHdpZGdldCkKLXsK
LSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7
Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjbGllbnQt
PnNjcmVlbkluZm8oKS5kZXB0aFBlckNvbXBvbmVudDsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRn
ZTo6c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQotewotICAgIFdlYldpZGdldENs
aWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKLSAgICBpZiAoIWNsaWVu
dCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLmlz
TW9ub2Nocm9tZTsKLX0KLQotSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuUmVjdChXaWRn
ZXQqIHdpZGdldCkKLXsKLSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0
Q2xpZW50KHdpZGdldCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiBJbnRSZWN0
KCk7Ci0gICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLnJlY3Q7Ci19Ci0KLUludFJlY3Qg
Q2hyb21pdW1CcmlkZ2U6OnNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0KiB3aWRnZXQpCi17Ci0g
ICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwot
ICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gSW50UmVjdCgpOwotICAgIHJldHVybiBj
bGllbnQtPnNjcmVlbkluZm8oKS5hdmFpbGFibGVSZWN0OwotfQotCi1ib29sIENocm9taXVtQnJp
ZGdlOjpwb3B1cHNBbGxvd2VkKE5QUCBucHApCi17Ci0gICAgLy8gRklYTUU6IEdpdmUgdGhlIGVt
YmVkZGVyIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLVdv
cmtlckNvbnRleHRQcm94eSogV29ya2VyQ29udGV4dFByb3h5OjpjcmVhdGUoV29ya2VyKiB3b3Jr
ZXIpCi17Ci0gICAgcmV0dXJuIFdlYldvcmtlckNsaWVudEltcGw6OmNyZWF0ZVdvcmtlckNvbnRl
eHRQcm94eSh3b3JrZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCShyZXZpc2lvbiA3
NjE3MykJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2UuY3Bw
Ojc2MTczKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTk3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAg
ICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMK
KyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
VEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFO
WSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
KyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisKKyNpbmNsdWRlIDxnb29nbGV1cmwvc3JjL3VybF91
dGlsLmg+CisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJDaHJvbWVDbGllbnRJbXBs
LmgiCisjaW5jbHVkZSAiV2ViQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJXZWJDbGlwYm9hcmQuaCIK
KyNpbmNsdWRlICJXZWJDb29raWUuaCIKKyNpbmNsdWRlICJXZWJDb29raWVKYXIuaCIKKyNpbmNs
dWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViRHJhZ0RhdGEuaCIKKyNpbmNsdWRlICJXZWJG
aWxlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQuaCIKKyNpbmNsdWRlICJX
ZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJJREJLZXkuaCIKKyNpbmNsdWRlICJXZWJJbWFn
ZS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktpdENsaWVudC5oIgorI2lu
Y2x1ZGUgIldlYk1pbWVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIldlYlBsdWdpbkNvbnRhaW5lcklt
cGwuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwuaCIKKyNpbmNsdWRlICJX
ZWJTYW5kYm94U3VwcG9ydC5oIgorI2luY2x1ZGUgIldlYlNlcmlhbGl6ZWRTY3JpcHRWYWx1ZS5o
IgorI2luY2x1ZGUgIldlYlNjcmVlbkluZm8uaCIKKyNpbmNsdWRlICJXZWJTdHJpbmcuaCIKKyNp
bmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIKKyNpbmNsdWRlICJXZWJW
aWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNpbmNsdWRlICJXZWJXb3Jr
ZXJDbGllbnRJbXBsLmgiCisKKyNpZiBQTEFURk9STShDRykKKyNpbmNsdWRlIDxDb3JlR3JhcGhp
Y3MvQ0dDb250ZXh0Lmg+CisjZW5kaWYKKworI2lmIE9TKFdJTkRPV1MpCisjaW5jbHVkZSAiV2Vi
UmVjdC5oIgorI2luY2x1ZGUgIndpbi9XZWJUaGVtZUVuZ2luZS5oIgorI2VuZGlmCisKKyNpZiBP
UyhMSU5VWCkgfHwgT1MoRlJFRUJTRCkKKyNpbmNsdWRlICJsaW51eC9XZWJUaGVtZUVuZ2luZS5o
IgorI2luY2x1ZGUgIldlYkZvbnRJbmZvLmgiCisjaW5jbHVkZSAiV2ViRm9udFJlbmRlclN0eWxl
LmgiCisjZW5kaWYKKworI2lmIE9TKERBUldJTikKKyNpbmNsdWRlICJtYWMvV2ViVGhlbWVFbmdp
bmUuaCIKKyNlbmRpZgorCisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyNpbmNsdWRlICJOYXRpdmVJ
bWFnZVNraWEuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKKyNpbmNsdWRl
ICJDb29raWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNsdWRlICJHcmFwaGljc0Nv
bnRleHQuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZFByb3h5LmgiCisjaW5jbHVkZSAi
S1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1D
b250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNpbmNsdWRlICJTaGFyZWRC
dWZmZXIuaCIKKworI2luY2x1ZGUgIldvcmtlci5oIgorI2luY2x1ZGUgIldvcmtlckNvbnRleHRQ
cm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKy8vIFdlIGFyZSBwYXJ0IG9m
IHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24uCit1c2luZyBuYW1lc3BhY2UgV2ViS2l0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBDaHJvbWVDbGllbnRJbXBsKiB0b0Nocm9tZUNs
aWVudEltcGwoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRnZXQpCisgICAgICAgIHJl
dHVybiAwOworCisgICAgRnJhbWVWaWV3KiB2aWV3OworICAgIGlmICh3aWRnZXQtPmlzRnJhbWVW
aWV3KCkpCisgICAgICAgIHZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPih3aWRnZXQpOwor
ICAgIGVsc2UgaWYgKHdpZGdldC0+cGFyZW50KCkgJiYgd2lkZ2V0LT5wYXJlbnQoKS0+aXNGcmFt
ZVZpZXcoKSkKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHdpZGdldC0+
cGFyZW50KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBQYWdlKiBwYWdl
ID0gdmlldy0+ZnJhbWUoKSA/IHZpZXctPmZyYW1lKCktPnBhZ2UoKSA6IDA7CisgICAgaWYgKCFw
YWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxDaHJvbWVD
bGllbnRJbXBsKj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKTsKK30KKworc3RhdGljIFdlYldp
ZGdldENsaWVudCogdG9XZWJXaWRnZXRDbGllbnQoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgQ2hy
b21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1wbCA9IHRvQ2hyb21lQ2xpZW50SW1wbCh3aWRn
ZXQpOworICAgIGlmICghY2hyb21lQ2xpZW50SW1wbCB8fCAhY2hyb21lQ2xpZW50SW1wbC0+d2Vi
VmlldygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2hyb21lQ2xpZW50SW1wbC0+
d2ViVmlldygpLT5jbGllbnQoKTsKK30KKworc3RhdGljIFdlYkNvb2tpZUphciogZ2V0Q29va2ll
SmFyKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBXZWJGcmFtZUltcGwqIGZyYW1l
SW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5mcmFtZSgpKTsKKyAgICBp
ZiAoIWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKKyAgICAgICAgcmV0dXJuIDA7
CisgICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwtPmNsaWVudCgpLT5jb29r
aWVKYXIoZnJhbWVJbXBsKTsKKyAgICBpZiAoIWNvb2tpZUphcikKKyAgICAgICAgY29va2llSmFy
ID0gd2ViS2l0Q2xpZW50KCktPmNvb2tpZUphcigpOworICAgIHJldHVybiBjb29raWVKYXI7Cit9
CisKKy8vIENhY2hlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2FjaGVN
ZXRhZGF0YShjb25zdCBLVVJMJiB1cmwsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNvbnN0IFZlY3Rv
cjxjaGFyPiYgZGF0YSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2FjaGVNZXRhZGF0YSh1cmws
IHJlc3BvbnNlVGltZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsKK30KKworLy8gQ2xpcGJv
YXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorCitib29sIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2
YWlsYWJsZSgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0IGZvcm1hdCwK
KyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlcikKK3sKKyAgICBy
ZXR1cm4gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5pc0Zvcm1hdEF2YWlsYWJsZSgKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpGb3JtYXQ+KGZvcm1hdCksCisgICAgICAg
IHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKK30KKworU3RyaW5n
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KAorICAgIFBhc3RlYm9hcmRQ
cml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQoreworICAgIHJldHVybiB3ZWJLaXRDbGll
bnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRQbGFpblRleHQoCisgICAgICAgIHN0YXRpY19jYXN0PFdl
YkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6
Y2xpcGJvYXJkUmVhZEhUTUwoCisgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZl
ciBidWZmZXIsCisgICAgU3RyaW5nKiBodG1sVGV4dCwgS1VSTCogc291cmNlVVJMKQoreworICAg
IFdlYlVSTCB1cmw7CisgICAgKmh0bWxUZXh0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgp
LT5yZWFkSFRNTCgKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1
ZmZlciksICZ1cmwpOworICAgICpzb3VyY2VVUkwgPSB1cmw7Cit9CisKK3ZvaWQgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKGNvbnN0IFN0cmluZyYgaHRtbFRleHQsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiBz
b3VyY2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBTdHJpbmcmIHBsYWluVGV4dCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJvb2wgd3JpdGVTbWFydFBhc3RlKQoreworICAgIHdlYktpdENsaWVudCgp
LT5jbGlwYm9hcmQoKS0+d3JpdGVIVE1MKAorICAgICAgICBodG1sVGV4dCwgc291cmNlVVJMLCBw
bGFpblRleHQsIHdyaXRlU21hcnRQYXN0ZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0KQoreworICAgIHdl
YktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKK30K
Kwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVVUkwoY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQo
KS0+d3JpdGVVUkwodXJsLCB0aXRsZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFdyaXRlSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVSTCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0aXRsZSkKK3sKKyNp
ZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIFdlYkltYWdlIHdlYkltYWdlKCppbWFnZSk7CisjZWxz
ZQorICAgIFdlYkltYWdlIHdlYkltYWdlKGltYWdlKTsKKyNlbmRpZgorICAgIHdlYktpdENsaWVu
dCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVJbWFnZSh3ZWJJbWFnZSwgc291cmNlVVJMLCB0aXRsZSk7
Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YShjb25zdCBTdHJp
bmcmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg
U3RyaW5nJiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IFN0cmluZyYgbWV0YWRhdGEpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgp
LT53cml0ZURhdGEodHlwZSwgZGF0YSwgbWV0YWRhdGEpOworfQorCitIYXNoU2V0PFN0cmluZz4g
Q2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKKyAgICBQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFt
ZXMpCit7CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCkt
PmNsaXBib2FyZCgpLT5yZWFkQXZhaWxhYmxlVHlwZXMoCisgICAgICAgIHN0YXRpY19jYXN0PFdl
YkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCBjb250YWluc0ZpbGVuYW1lcyk7CisgICAgSGFz
aFNldDxTdHJpbmc+IHR5cGVzOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNp
emUoKTsgKytpKQorICAgICAgICB0eXBlcy5hZGQocmVzdWx0W2ldKTsKKyAgICByZXR1cm4gdHlw
ZXM7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKFBhc3RlYm9h
cmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0eXBlLCBTdHJpbmcmIGRhdGEsIFN0cmlu
ZyYgbWV0YWRhdGEpCit7CisgICAgV2ViU3RyaW5nIHJlc3VsdERhdGE7CisgICAgV2ViU3RyaW5n
IHJlc3VsdE1ldGFkYXRhOworICAgIGJvb2wgc3VjY2VlZGVkID0gd2ViS2l0Q2xpZW50KCktPmNs
aXBib2FyZCgpLT5yZWFkRGF0YSgKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpC
dWZmZXI+KGJ1ZmZlciksIHR5cGUsICZyZXN1bHREYXRhLCAmcmVzdWx0TWV0YWRhdGEpOworICAg
IGlmIChzdWNjZWVkZWQpIHsKKyAgICAgICAgZGF0YSA9IHJlc3VsdERhdGE7CisgICAgICAgIG1l
dGFkYXRhID0gcmVzdWx0TWV0YWRhdGE7CisgICAgfQorICAgIHJldHVybiBzdWNjZWVkZWQ7Cit9
CisKK1ZlY3RvcjxTdHJpbmc+IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVz
KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQoreworICAgIFdlYlZl
Y3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVh
ZEZpbGVuYW1lcygKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1
ZmZlcikpOworICAgIFZlY3RvcjxTdHJpbmc+IGNvbnZlcnRlZFJlc3VsdDsKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAgICAgY29udmVydGVkUmVz
dWx0LmFwcGVuZChyZXN1bHRbaV0pOworICAgIHJldHVybiBjb252ZXJ0ZWRSZXN1bHQ7Cit9CisK
Ky8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0Q29va2ll
cyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkKK3sKKyAgICBXZWJDb29r
aWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CisgICAgaWYgKGNvb2tp
ZUphcikKKyAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBkb2N1bWVudC0+Zmlyc3RQ
YXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNv
b2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCit7CisgICAg
U3RyaW5nIHJlc3VsdDsKKyAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUph
cihkb2N1bWVudCk7CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgcmVzdWx0ID0gY29va2ll
SmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAg
IHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29va2llUmVxdWVz
dEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLVVJMJiB1cmwp
Cit7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdl
dENvb2tpZUphcihkb2N1bWVudCk7CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgcmVzdWx0
ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZSh1cmwsIGRvY3VtZW50
LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitib29s
IENocm9taXVtQnJpZGdlOjpyYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29u
c3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKK3sKKyAgICByYXdDb29r
aWVzLmNsZWFyKCk7CisgICAgV2ViVmVjdG9yPFdlYkNvb2tpZT4gd2ViQ29va2llczsKKworICAg
IFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKKyAgICBp
ZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVKYXItPnJhd0Nvb2tpZXModXJsLCBkb2N1bWVu
dC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2llcyk7CisKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBX
ZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07CisgICAgICAgIENvb2tpZSBjb29r
aWUod2ViQ29va2llLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnZhbHVl
LAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5kb21haW4sCisgICAgICAgICAgICAg
ICAgICAgICAgd2ViQ29va2llLnBhdGgsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2ll
LmV4cGlyZXMsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmh0dHBPbmx5LAorICAg
ICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUsCisgICAgICAgICAgICAgICAgICAg
ICAgd2ViQ29va2llLnNlc3Npb24pOworICAgICAgICByYXdDb29raWVzLmFwcGVuZChjb29raWUp
OworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6ZGVs
ZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25z
dCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBn
ZXRDb29raWVKYXIoZG9jdW1lbnQpOworICAgIGlmIChjb29raWVKYXIpCisgICAgICAgIGNvb2tp
ZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7Cit9CisKK2Jvb2wgQ2hyb21pdW1C
cmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBi
b29sIHJlc3VsdCA9IGZhbHNlOworICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29v
a2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICByZXN1bHQgPSBj
b29raWVKYXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVVUkwoKSwgZG9jdW1lbnQt
PmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKy8vIERO
UyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cHJlZmV0Y2hETlMoY29u
c3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+cHJlZmV0Y2hIb3N0
TmFtZShob3N0bmFtZSk7Cit9CisKKy8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK2Jvb2wgQ2hy
b21pdW1CcmlkZ2U6OmZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5maWxlRXhpc3RzKHBhdGgpOworfQor
Citib29sIENocm9taXVtQnJpZGdlOjpkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sK
KyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGVsZXRlRmlsZShw
YXRoKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29u
c3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxp
dGllcygpLT5kZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKK30KKworYm9vbCBDaHJvbWl1bUJy
aWRnZTo6Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25nIGxvbmcmIHJlc3VsdCkK
K3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZVNp
emUocGF0aCwgcmVzdWx0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cmV2ZWFsRm9sZGVy
SW5PUyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+cmV2ZWFsRm9sZGVySW5PUyhwYXRoKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRn
ZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBwYXRoLCB0aW1lX3QmIHJl
c3VsdCkKK3sKKyAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZTsKKyAgICBpZiAoIXdlYktpdENs
aWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmdldEZpbGVNb2RpZmljYXRpb25UaW1lKHBhdGgsIG1v
ZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gc3Rh
dGljX2Nhc3Q8dGltZV90Pihtb2RpZmljYXRpb25UaW1lKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworU3RyaW5nIENocm9taXVtQnJpZGdlOjpkaXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0
aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGlyZWN0
b3J5TmFtZShwYXRoKTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkK
K3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1Ccmlk
Z2U6Om1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPm1ha2VBbGxEaXJlY3RvcmllcyhwYXRo
KTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0ZVBhdGgoY29uc3QgU3Ry
aW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygp
LT5nZXRBYnNvbHV0ZVBhdGgocGF0aCk7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzRGly
ZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PmZpbGVVdGlsaXRpZXMoKS0+aXNEaXJlY3RvcnkocGF0aCk7Cit9CisKK0tVUkwgQ2hyb21pdW1C
cmlkZ2U6OmZpbGVQYXRoVG9VUkwoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiB3
ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5maWxlUGF0aFRvVVJMKHBhdGgpOworfQor
CitQbGF0Zm9ybUZpbGVIYW5kbGUgQ2hyb21pdW1CcmlkZ2U6Om9wZW5GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5maWxlVXRpbGl0aWVzKCktPm9wZW5GaWxlKHBhdGgsIG1vZGUpOworfQorCit2b2lkIENocm9t
aXVtQnJpZGdlOjpjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Y2xvc2VGaWxlKGhhbmRsZSk7Cit9CisK
K2xvbmcgbG9uZyBDaHJvbWl1bUJyaWRnZTo6c2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhh
bmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3JpZ2luKQoreworICAgIHJl
dHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5zZWVrRmlsZShoYW5kbGUsIG9m
ZnNldCwgb3JpZ2luKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6dHJ1bmNhdGVGaWxlKFBs
YXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQpCit7CisgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnRydW5jYXRlRmlsZShoYW5kbGUsIG9m
ZnNldCk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6cmVhZEZyb21GaWxlKFBsYXRmb3JtRmls
ZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7CisgICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEs
IGxlbmd0aCk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6d3JpdGVUb0ZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKK3sKKyAgICBy
ZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+d3JpdGVUb0ZpbGUoaGFuZGxl
LCBkYXRhLCBsZW5ndGgpOworfQorCisvLyBGb250IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyNpZiBPUyhX
SU5ET1dTKQorYm9vbCBDaHJvbWl1bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChIRk9OVCBmb250
KQoreworICAgIFdlYlNhbmRib3hTdXBwb3J0KiBzcyA9IHdlYktpdENsaWVudCgpLT5zYW5kYm94
U3VwcG9ydCgpOworCisgICAgLy8gaWYgdGhlcmUgaXMgbm8gc2FuZGJveCwgdGhlbiB3ZSBjYW4g
YXNzdW1lIHRoZSBmb250CisgICAgLy8gd2FzIGFibGUgdG8gYmUgbG9hZGVkIHN1Y2Nlc3NmdWxs
eSBhbHJlYWR5CisgICAgcmV0dXJuIHNzID8gc3MtPmVuc3VyZUZvbnRMb2FkZWQoZm9udCkgOiB0
cnVlOworfQorI2VuZGlmCisKKyNpZiBPUyhMSU5VWCkgfHwgT1MoRlJFRUJTRCkKK1N0cmluZyBD
aHJvbWl1bUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMsIHNpemVfdCBudW1DaGFyYWN0ZXJzKQoreworICAgIGlmICh3ZWJLaXRDbGllbnQo
KS0+c2FuZGJveFN1cHBvcnQoKSkKKyAgICAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zYW5k
Ym94U3VwcG9ydCgpLT5nZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBudW1D
aGFyYWN0ZXJzKTsKKworICAgIFdlYkNTdHJpbmcgZmFtaWx5ID0gV2ViRm9udEluZm86OmZhbWls
eUZvckNoYXJzKGNoYXJhY3RlcnMsIG51bUNoYXJhY3RlcnMpOworICAgIGlmIChmYW1pbHkuZGF0
YSgpKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRGOChmYW1pbHkuZGF0YSgpKTsK
KworICAgIHJldHVybiBXZWJTdHJpbmcoKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Z2V0
UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29uc3QgY2hhciogZm9udCwgaW50IHNpemVBbmRTdHlsZSwg
Rm9udFJlbmRlclN0eWxlKiByZXN1bHQpCit7CisgICAgV2ViRm9udFJlbmRlclN0eWxlIHN0eWxl
OworCisgICAgaWYgKHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpKQorICAgICAgICB3
ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKS0+Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2Uo
Zm9udCwgc2l6ZUFuZFN0eWxlLCAmc3R5bGUpOworICAgIGVsc2UKKyAgICAgICAgV2ViRm9udElu
Zm86OnJlbmRlclN0eWxlRm9yU3RyaWtlKGZvbnQsIHNpemVBbmRTdHlsZSwgJnN0eWxlKTsKKwor
ICAgIHN0eWxlLnRvRm9udFJlbmRlclN0eWxlKHJlc3VsdCk7Cit9CisjZW5kaWYKKworI2lmIE9T
KERBUldJTikKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmxvYWRGb250KE5TRm9udCogc3JjRm9udCwg
QVRTRm9udENvbnRhaW5lclJlZiogb3V0KQoreworICAgIFdlYlNhbmRib3hTdXBwb3J0KiBzcyA9
IHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpOworICAgIGlmIChzcykKKyAgICAgICAg
cmV0dXJuIHNzLT5sb2FkRm9udChzcmNGb250LCBvdXQpOworCisgICAgLy8gVGhpcyBmdW5jdGlv
biBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gYW4gZXJyb3IgbG9hZGluZyBh
CisgICAgLy8gZm9udCBkdWUgdG8gYmVpbmcgYmxvY2tlZCBieSB0aGUgc2FuZGJveC4KKyAgICAv
LyBUaGlzIGJ5IGRlZmluaXRpb24gc2hvdWxkbid0IGhhcHBlbiBpZiB0aGVyZSBpcyBubyBzYW5k
Ym94IHN1cHBvcnQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgKm91dCA9IDA7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKKy8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
UGxhdGZvcm1GaWxlSGFuZGxlIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGNvbnN0
IFN0cmluZyYgdmZzRmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpCit7CisgICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5kYXRhYmFzZU9wZW5GaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIGRl
c2lyZWRGbGFncyk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxl
KGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpcikKK3sKKyAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlRGVsZXRlRmlsZShXZWJTdHJpbmcodmZzRmlsZU5hbWUp
LCBzeW5jRGlyKTsKK30KKworbG9uZyBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlQXR0
cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKQoreworICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhXZWJTdHJpbmcodmZzRmlsZU5hbWUp
KTsKK30KKworbG9uZyBsb25nIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVTaXplKGNv
bnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5k
YXRhYmFzZUdldEZpbGVTaXplKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSkpOworfQorCisvLyBJbmRl
eGVkIERhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+
IENocm9taXVtQnJpZGdlOjppZGJGYWN0b3J5KCkKK3sKKyAgICAvLyBUaGVyZSdzIG5vIHJlYXNv
biB3aHkgd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBwcm94eSBlYWNoIHRpbWUsIGJ1dAorICAg
IC8vIHRoZXJlJ3MgYWxzbyBubyBzdHJvbmcgcmVhc29uIG5vdCB0by4KKyAgICByZXR1cm4gSURC
RmFjdG9yeUJhY2tlbmRQcm94eTo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6
OmlkYlNodXRkb3duKCkKK3sKKyAgICAvLyBJbiB0aGUgYnJvd3NlciBwcm9jZXNzLCB0aGlzIHNo
dXRzIGRvd24gdGhlIHV0aWxpdHkgcHJvY2Vzcy4gSW4gdGhlIHJlbmRlcmVyIHByb2Nlc3MsIGl0
IGRvZXMgbm90aGluZy4KKyAgICB3ZWJLaXRDbGllbnQoKS0+aWRiU2h1dGRvd24oKTsKK30KKwor
dm9pZCBDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFsdWVzQW5k
S2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4gPiYgdmFs
dWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+JiBrZXlz
KQoreworICAgIFdlYlZlY3RvcjxXZWJTZXJpYWxpemVkU2NyaXB0VmFsdWU+IHdlYlZhbHVlcyA9
IHZhbHVlczsKKyAgICBXZWJWZWN0b3I8V2ViSURCS2V5PiB3ZWJLZXlzOworICAgIHdlYktpdENs
aWVudCgpLT5jcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHdlYlZh
bHVlcywgV2ViU3RyaW5nKGtleVBhdGgpLCB3ZWJLZXlzKTsKKworICAgIHNpemVfdCB3ZWJLZXlz
U2l6ZSA9IHdlYktleXMuc2l6ZSgpOworICAgIGtleXMucmVzZXJ2ZUNhcGFjaXR5KHdlYktleXNT
aXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYktleXNTaXplOyArK2kpCisgICAg
ICAgIGtleXMuYXBwZW5kKFBhc3NSZWZQdHI8SURCS2V5Pih3ZWJLZXlzW2ldKSk7Cit9CisKKy8v
IEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpzaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoCisgICAgdW5zaWduZWQga2V5U2l6ZUluZGV4LCBjb25z
dCBTdHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYgdXJsKQoreworICAgIHJldHVybiB3ZWJL
aXRDbGllbnQoKS0+c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKGtleVNpemVJbmRl
eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBXZWJTdHJpbmcoY2hhbGxlbmdlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJVUkwodXJsKSk7Cit9CisKKy8v
IExhbmd1YWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpjb21wdXRlZERl
ZmF1bHRMYW5ndWFnZSgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kZWZhdWx0TG9j
YWxlKCk7Cit9CisKKy8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9vbCBDaHJvbWl1bUJyaWRn
ZTo6bGF5b3V0VGVzdE1vZGUoKQoreworICAgIHJldHVybiBXZWJLaXQ6OmxheW91dFRlc3RNb2Rl
KCk7Cit9CisKKy8vIE1pbWVUeXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6
aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7CisgICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNJbWFnZU1JTUVU
eXBlKG1pbWVUeXBlKQorICAgICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVk
OworfQorCitib29sIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKQorICAg
ICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOworfQorCitib29sIENocm9t
aXVtQnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBw
b3J0c05vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpCisgICAgICAgICE9IFdlYk1pbWVSZWdpc3Ry
eTo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKK1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6bWltZVR5cGVG
b3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCit7CisgICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9u
KTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjptaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgp
LT5taW1lVHlwZUZyb21GaWxlKHBhdGgpOworfQorCitTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OnBy
ZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCit7Cisg
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+cHJlZmVycmVkRXh0ZW5z
aW9uRm9yTUlNRVR5cGUobWltZVR5cGUpOworfQorCisvLyBQbHVnaW4gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisK
K2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OnBsdWdpbnMoYm9vbCByZWZyZXNoLCBWZWN0b3I8UGx1Z2lu
SW5mbz4qIHJlc3VsdHMpCit7CisgICAgV2ViUGx1Z2luTGlzdEJ1aWxkZXJJbXBsIGJ1aWxkZXIo
cmVzdWx0cyk7CisgICAgd2ViS2l0Q2xpZW50KCktPmdldFBsdWdpbkxpc3QocmVmcmVzaCwgJmJ1
aWxkZXIpOworICAgIHJldHVybiB0cnVlOyAgLy8gRklYTUU6IFRoZXJlIGlzIG5vIG5lZWQgZm9y
IHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIGEgdmFsdWUuCit9CisKK05QT2JqZWN0KiBDaHJvbWl1
bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9iamVjdChXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBp
ZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc1BsdWdpbkNvbnRhaW5lcigpKQorICAgICAgICByZXR1
cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJQbHVnaW5Db250YWluZXJJbXBsKj4o
d2lkZ2V0KS0+c2NyaXB0YWJsZU9iamVjdCgpOworfQorCisvLyBSZXNvdXJjZXMgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK1Bhc3NSZWZQdHI8SW1hZ2U+IENocm9taXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1JbWFnZVJl
c291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgY29uc3QgV2ViRGF0YSYgcmVzb3VyY2Ug
PSB3ZWJLaXRDbGllbnQoKS0+bG9hZFJlc291cmNlKG5hbWUpOworICAgIGlmIChyZXNvdXJjZS5p
c0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdlKCk7CisKKyAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOworICAgIGltYWdlLT5zZXRE
YXRhKHJlc291cmNlLCB0cnVlKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9CisKKyNpZiBFTkFCTEUo
V0VCX0FVRElPKQorCitQYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBs
YXRmb3JtQXVkaW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkK
K3sKKyAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVz
b3VyY2UobmFtZSk7CisgICAgaWYgKHJlc291cmNlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJu
IDA7CisgICAgCisgICAgcmV0dXJuIGRlY29kZUF1ZGlvRmlsZURhdGEocmVzb3VyY2UuZGF0YSgp
LCByZXNvdXJjZS5zaXplKCksIHNhbXBsZVJhdGUpOworfQorCitQYXNzT3duUHRyPEF1ZGlvQnVz
PiBDaHJvbWl1bUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBz
aXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgV2ViQXVkaW9CdXMgd2ViQXVk
aW9CdXM7CisgICAgaWYgKHdlYktpdENsaWVudCgpLT5sb2FkQXVkaW9SZXNvdXJjZSgmd2ViQXVk
aW9CdXMsIGRhdGEsIHNpemUsIHNhbXBsZVJhdGUpKQorICAgICAgICByZXR1cm4gd2ViQXVkaW9C
dXMucmVsZWFzZSgpOworICAgIHJldHVybiAwOworfQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9B
VURJTykKKworLy8gU2FuZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitib29sIENocm9taXVtQnJpZGdlOjpz
YW5kYm94RW5hYmxlZCgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zYW5kYm94RW5h
YmxlZCgpOworfQorCisvLyBTaGFyZWRUaW1lcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1Ccmlk
Z2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZnVuYykoKSkKK3sKKyAgICB3
ZWJLaXRDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKGZ1bmMpOworfQorCit2
b2lkIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGlt
ZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlVGltZShmaXJlVGlt
ZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcigpCit7CisgICAg
d2ViS2l0Q2xpZW50KCktPnN0b3BTaGFyZWRUaW1lcigpOworfQorCisvLyBTdGF0c0NvdW50ZXJz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmRlY3JlbWVudFN0YXRzQ291bnRlcihjb25z
dCBjaGFyKiBuYW1lKQoreworICAgIHdlYktpdENsaWVudCgpLT5kZWNyZW1lbnRTdGF0c0NvdW50
ZXIobmFtZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRl
cihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHdlYktpdENsaWVudCgpLT5pbmNyZW1lbnRTdGF0
c0NvdW50ZXIobmFtZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3Rv
bUNvdW50cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBp
bnQgYnVja2V0Q291bnQpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNv
dW50cyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBidWNrZXRDb3VudCk7Cit9CisKK3ZvaWQgQ2hy
b21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBz
YW1wbGUsIGludCBib3VuZGFyeVZhbHVlKQoreworICAgIHdlYktpdENsaWVudCgpLT5oaXN0b2dy
YW1FbnVtZXJhdGlvbihuYW1lLCBzYW1wbGUsIGJvdW5kYXJ5VmFsdWUpOworfQorCisvLyBTdWRk
ZW4gVGVybWluYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9u
Q2hhbmdlZChib29sIGVuYWJsZWQpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnN1ZGRlblRlcm1p
bmF0aW9uQ2hhbmdlZChlbmFibGVkKTsKK30KKworLy8gU3lzdGVtVGltZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitk
b3VibGUgQ2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1lKCkKK3sKKyAgICByZXR1cm4gd2ViS2l0
Q2xpZW50KCktPmN1cnJlbnRUaW1lKCk7Cit9CisKKy8vIFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
I2lmIE9TKFdJTkRPV1MpCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50QnV0dG9uKAorICAg
IEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3Rh
dGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhl
bWVFbmdpbmUoKS0+cGFpbnRCdXR0b24oCisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+
Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOworfQorCit2b2lkIENo
cm9taXVtQnJpZGdlOjpwYWludE1lbnVMaXN0KAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGlu
dCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYg
cmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRNZW51TGlz
dCgKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUs
IGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Ny
b2xsYmFyQXJyb3coCisgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgd2ViS2l0Q2xpZW50
KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyQXJyb3coCisgICAgICAgIGdjLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOworfQor
Cit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAorICAgIEdyYXBoaWNz
Q29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCisgICAg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUo
KS0+cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5j
YW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hy
b21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2soCisgICAgR3JhcGhpY3NDb250ZXh0KiBn
YywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKKyAgICBjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBhbGlnblJlY3QpCit7CisgICAgd2ViS2l0Q2xpZW50
KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVHJhY2soCisgICAgICAgIGdjLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3Qs
CisgICAgICAgIGFsaWduUmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U3Bp
bkJ1dHRvbigKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBp
bnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCit7CisgICAgd2ViS2l0
Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U3BpbkJ1dHRvbigKKyAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVj
dCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKAorICAgIEdyYXBo
aWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCisg
ICAgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9yLCBib29sIGZpbGxDb250
ZW50QXJlYSwKKyAgICBib29sIGRyYXdFZGdlcykKK3sKKyAgICAvLyBGYWxsYmFjayB0byB3aGl0
ZSB3aGVuIHxjb2xvcnwgaXMgaW52YWxpZC4KKyAgICBSR0JBMzIgYmFja2dyb3VuZENvbG9yID0g
Y29sb3IuaXNWYWxpZCgpID8gY29sb3IucmdiKCkgOiBDb2xvcjo6d2hpdGU7CisKKyAgICB3ZWJL
aXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUZXh0RmllbGQoCisgICAgICAgIGdjLT5w
bGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJl
Y3QsCisgICAgICAgIGJhY2tncm91bmRDb2xvciwgZmlsbENvbnRlbnRBcmVhLCBkcmF3RWRnZXMp
OworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFRyYWNrYmFyKAorICAgIEdyYXBoaWNz
Q29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCisgICAg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUo
KS0+cGFpbnRUcmFja2JhcigKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1C
cmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIoCisgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgY29uc3Qg
SW50UmVjdCYgYmFyUmVjdCwgY29uc3QgSW50UmVjdCYgdmFsdWVSZWN0LCBib29sIGRldGVybWlu
YXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNvbmRzKQoreworICAgIHdlYktpdENsaWVudCgpLT50aGVt
ZUVuZ2luZSgpLT5wYWludFByb2dyZXNzQmFyKAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLCBiYXJSZWN0LCB2YWx1ZVJlY3QsIGRldGVybWluYXRlLCBhbmltYXRlZFNl
Y29uZHMpOworfQorCisjZWxpZiBPUyhMSU5VWCkKKworc3RhdGljIFdlYlRoZW1lRW5naW5lOjpQ
YXJ0IFdlYlRoZW1lUGFydChDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBhcnQpCit7CisgICAg
c3dpdGNoIChwYXJ0KSB7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckRv
d25BcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93Owor
ICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3c6IHJldHVybiBX
ZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAgICBjYXNlIENocm9taXVt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQ
YXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Ny
b2xsYmFyVXBBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVXBBcnJv
dzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1i
OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWI7Cisg
ICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWI6IHJldHVy
biBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWI7CisgICAgY2FzZSBD
aHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjazogcmV0dXJuIFdlYlRo
ZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrOworICAgIGNhc2UgQ2hyb21p
dW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOiByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOworICAgIH0KKyAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJEb3duQXJy
b3c7Cit9CisKK3N0YXRpYyBXZWJUaGVtZUVuZ2luZTo6U3RhdGUgV2ViVGhlbWVTdGF0ZShDaHJv
bWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUp
IHsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVkOiByZXR1cm4gV2ViVGhl
bWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVI
b3ZlcjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZUhvdmVyOworICAgIGNhc2UgQ2hyb21p
dW1CcmlkZ2U6OlN0YXRlTm9ybWFsOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlTm9ybWFs
OworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlUHJlc3NlZDogcmV0dXJuIFdlYlRoZW1l
RW5naW5lOjpTdGF0ZVByZXNzZWQ7CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsKK30KKworc3RhdGljIHZv
aWQgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBhcnQs
IENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUsIGNvbnN0IENocm9taXVtQnJp
ZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zLCBXZWJUaGVtZUVuZ2luZTo6
RXh0cmFQYXJhbXMqIHdlYlRoZW1lRXh0cmFQYXJhbXMpCit7CisgICAgaWYgKHBhcnQgPT0gQ2hy
b21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sgfHwgcGFydCA9PSBDaHJv
bWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2spIHsKKyAgICAgICAgd2ViVGhl
bWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tYID0gZXh0cmFQYXJhbXMtPnNjcm9s
bGJhclRyYWNrLnRyYWNrWDsKKyAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFy
VHJhY2sudHJhY2tZID0gZXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWTsKKyAgICAg
ICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aCA9IGV4dHJh
UGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1dpZHRoOworICAgICAgICB3ZWJUaGVtZUV4dHJh
UGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja0hlaWdodCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxi
YXJUcmFjay50cmFja0hlaWdodDsKKyAgICB9Cit9CisKK0ludFNpemUgQ2hyb21pdW1CcmlkZ2U6
OmdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0IHBhcnQpCit7CisgICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+Z2V0U2l6ZShXZWJUaGVtZVBhcnQocGFydCkpOworfQor
Cit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFRoZW1lUGFydCgKKyAgICBHcmFwaGljc0NvbnRl
eHQqIGdjLCBUaGVtZVBhcnQgcGFydCwgVGhlbWVQYWludFN0YXRlIHN0YXRlLCBjb25zdCBJbnRS
ZWN0JiByZWN0LCBjb25zdCBUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zKQorewor
ICAgIFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyB3ZWJUaGVtZUV4dHJhUGFyYW1zOworICAg
IEdldFdlYlRoZW1lRXh0cmFQYXJhbXMocGFydCwgc3RhdGUsIGV4dHJhUGFyYW1zLCAmd2ViVGhl
bWVFeHRyYVBhcmFtcyk7CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50
KAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBXZWJUaGVtZVBhcnQo
cGFydCksIFdlYlRoZW1lU3RhdGUoc3RhdGUpLCByZWN0LCAmd2ViVGhlbWVFeHRyYVBhcmFtcyk7
Cit9CisKKyNlbGlmIE9TKERBUldJTikKKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3Jv
bGxiYXJUaHVtYigKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBUaGVtZVBhaW50U3RhdGUgc3Rh
dGUsIFRoZW1lUGFpbnRTaXplIHNpemUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFRoZW1l
UGFpbnRTY3JvbGxiYXJJbmZvJiBzY3JvbGxiYXJJbmZvKQoreworICAgIFdlYlRoZW1lRW5naW5l
OjpTY3JvbGxiYXJJbmZvIHdlYlRoZW1lU2Nyb2xsYmFySW5mbzsKKworICAgIHdlYlRoZW1lU2Ny
b2xsYmFySW5mby5vcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTY3Jv
bGxiYXJPcmllbnRhdGlvbj4oc2Nyb2xsYmFySW5mby5vcmllbnRhdGlvbik7CisgICAgd2ViVGhl
bWVTY3JvbGxiYXJJbmZvLnBhcmVudCA9IHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTY3Jv
bGxiYXJQYXJlbnQ+KHNjcm9sbGJhckluZm8ucGFyZW50KTsKKyAgICB3ZWJUaGVtZVNjcm9sbGJh
ckluZm8ubWF4VmFsdWUgPSBzY3JvbGxiYXJJbmZvLm1heFZhbHVlOworICAgIHdlYlRoZW1lU2Ny
b2xsYmFySW5mby5jdXJyZW50VmFsdWUgPSBzY3JvbGxiYXJJbmZvLmN1cnJlbnRWYWx1ZTsKKyAg
ICB3ZWJUaGVtZVNjcm9sbGJhckluZm8udmlzaWJsZVNpemUgPSBzY3JvbGxiYXJJbmZvLnZpc2li
bGVTaXplOworICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby50b3RhbFNpemUgPSBzY3JvbGxiYXJJ
bmZvLnRvdGFsU2l6ZTsKKworICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWlu
dFNjcm9sbGJhclRodW1iKAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCksCisgICAgICAg
IHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTdGF0ZT4oc3RhdGUpLAorICAgICAgICBzdGF0
aWNfY2FzdDxXZWJUaGVtZUVuZ2luZTo6U2l6ZT4oc2l6ZSksCisgICAgICAgIHJlY3QsCisgICAg
ICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mbyk7Cit9CisKKyNlbmRpZgorCisvLyBUcmFjZSBFdmVu
dCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRCZWdpbihjb25zdCBj
aGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpCit7CisgICAgd2ViS2l0Q2xp
ZW50KCktPnRyYWNlRXZlbnRCZWdpbihuYW1lLCBpZCwgZXh0cmEpOworfQorCit2b2lkIENocm9t
aXVtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25z
dCBjaGFyKiBleHRyYSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEVuZChuYW1l
LCBpZCwgZXh0cmEpOworfQorCisvLyBWaXNpdGVkIExpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0xpbmtIYXNoIENo
cm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQg
bGVuZ3RoKQoreworICAgIHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOwor
ICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsKKyAgICBpZiAoIXVybF91dGlsOjpDYW5vbmlj
YWxpemUodXJsLCBsZW5ndGgsIDAsICZidWZmZXIsICZwYXJzZWQpKQorICAgICAgICByZXR1cm4g
MDsgIC8vIEludmFsaWQgVVJMcyBhcmUgdW52aXNpdGVkLgorICAgIHJldHVybiB3ZWJLaXRDbGll
bnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZlci5sZW5ndGgoKSk7Cit9
CisKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgS1VSTCYg
YmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQXRv
bWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCit7CisgICAgLy8gUmVzb2x2ZSB0aGUgcmVsYXRpdmUg
VVJMIHVzaW5nIGdvb2dsZXVybCBhbmQgcGFzcyB0aGUgYWJzb2x1dGUgVVJMIHVwIHRvCisgICAg
Ly8gdGhlIGVtYmVkZGVyLiBXZSBjb3VsZCBjcmVhdGUgYSBHVVJMIG9iamVjdCBmcm9tIHRoZSBi
YXNlIGFuZCByZXNvbHZlCisgICAgLy8gdGhlIHJlbGF0aXZlIFVSTCB0aGF0IHdheSwgYnV0IGNh
bGxpbmcgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucworICAgIC8vIGRpcmVjdGx5IHNhdmVzIHVz
IHRoZSBzdHJpbmcgYWxsb2NhdGlvbiBpbiBtb3N0IGNhc2VzLgorICAgIHVybF9jYW5vbjo6UmF3
Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOworICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsK
KworI2lmIFVTRShHT09HTEVVUkwpCisgICAgY29uc3QgQ1N0cmluZyYgY3N0ciA9IGJhc2UudXRm
OFN0cmluZygpOworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBjc3RyLmRhdGEoKTsKKyAgICBpbnQg
bGVuZ3RoID0gY3N0ci5sZW5ndGgoKTsKKyAgICBjb25zdCB1cmxfcGFyc2U6OlBhcnNlZCYgc3Jj
UGFyc2VkID0gYmFzZS5wYXJzZWQoKTsKKyNlbHNlCisgICAgLy8gV2hlbiB3ZSdyZSBub3QgdXNp
bmcgR29vZ2xlVVJMLCBmaXJzdCBjYW5vbmljYWxpemUgaXQgc28gd2UgY2FuIHJlc29sdmUgaXQK
KyAgICAvLyBiZWxvdy4KKyAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0cHV0PDIwNDg+IHNyY0Nh
bm9uOworICAgIHVybF9wYXJzZTo6UGFyc2VkIHNyY1BhcnNlZDsKKyAgICBTdHJpbmcgc3RyID0g
YmFzZS5zdHJpbmcoKTsKKyAgICBpZiAoIXVybF91dGlsOjpDYW5vbmljYWxpemUoc3RyLmNoYXJh
Y3RlcnMoKSwgc3RyLmxlbmd0aCgpLCAwLCAmc3JjQ2Fub24sICZzcmNQYXJzZWQpKQorICAgICAg
ICByZXR1cm4gMDsKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gc3JjQ2Fub24uZGF0YSgpOworICAg
IGludCBsZW5ndGggPSBzcmNDYW5vbi5sZW5ndGgoKTsKKyNlbmRpZgorCisgICAgaWYgKCF1cmxf
dXRpbDo6UmVzb2x2ZVJlbGF0aXZlKGRhdGEsIGxlbmd0aCwgc3JjUGFyc2VkLCBhdHRyaWJ1dGVV
UkwuY2hhcmFjdGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVVUkwubGVuZ3RoKCksIDAsICZidWZmZXIsICZwYXJzZWQpKQorICAgICAgICByZXR1cm4g
MDsgIC8vIEludmFsaWQgcmVzb2x2ZWQgVVJMLgorCisgICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxlbmd0aCgpKTsKK30KKwor
Ym9vbCBDaHJvbWl1bUJyaWRnZTo6aXNMaW5rVmlzaXRlZChMaW5rSGFzaCB2aXNpdGVkTGlua0hh
c2gpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5pc0xpbmtWaXNpdGVkKHZpc2l0ZWRM
aW5rSGFzaCk7Cit9CisKKy8vIFRoZXNlIGFyZSB0ZW1wb3JhcnkgbWV0aG9kcyB0aGF0IHRoZSBX
ZWJLaXQgbGF5ZXIgY2FuIHVzZSB0byBjYWxsIHRvIHRoZQorLy8gR2x1ZSBsYXllci4gT25jZSB0
aGUgR2x1ZSBsYXllciBtb3ZlcyBlbnRpcmVseSBpbnRvIHRoZSBXZWJLaXQgbGF5ZXIsIHRoZXNl
CisvLyBtZXRob2RzIHdpbGwgYmUgZGVsZXRlZC4KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6bm90
aWZ5SlNPdXRPZk1lbW9yeShGcmFtZSogZnJhbWUpCit7CisgICAgaWYgKCFmcmFtZSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9IFdlYkZyYW1lSW1wbDo6
ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBpZiAoIXdlYkZyYW1lLT5jbGllbnQoKSkKKyAgICAgICAg
cmV0dXJuOworICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+ZGlkRXhoYXVzdE1lbW9yeUF2YWlsYWJs
ZUZvclNjcmlwdCh3ZWJGcmFtZSk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6bWVtb3J5VXNh
Z2VNQigpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2ViS2l0Q2xpZW50KCktPm1l
bW9yeVVzYWdlTUIoKSk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6YWN0dWFsTWVtb3J5VXNh
Z2VNQigpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2ViS2l0Q2xpZW50KCktPmFj
dHVhbE1lbW9yeVVzYWdlTUIoKSk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVw
dGgoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dl
YldpZGdldENsaWVudCh3aWRnZXQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4g
MDsKKyAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuZGVwdGg7Cit9CisKK2ludCBDaHJv
bWl1bUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCit7Cisg
ICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwor
ICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2xpZW50LT5z
Y3JlZW5JbmZvKCkuZGVwdGhQZXJDb21wb25lbnQ7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6
OnNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBXZWJXaWRnZXRDbGll
bnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7CisgICAgaWYgKCFjbGllbnQp
CisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5pc01v
bm9jaHJvbWU7Cit9CisKK0ludFJlY3QgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlblJlY3QoV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENs
aWVudCh3aWRnZXQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4gSW50UmVjdCgp
OworICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5yZWN0OworfQorCitJbnRSZWN0IENo
cm9taXVtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQoreworICAg
IFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsKKyAg
ICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsKKyAgICByZXR1cm4gY2xp
ZW50LT5zY3JlZW5JbmZvKCkuYXZhaWxhYmxlUmVjdDsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRn
ZTo6cG9wdXBzQWxsb3dlZChOUFAgbnBwKQoreworICAgIC8vIEZJWE1FOiBHaXZlIHRoZSBlbWJl
ZGRlciBhIHdheSB0byBjb250cm9sIHRoaXMuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitXb3Jr
ZXJDb250ZXh0UHJveHkqIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRlKFdvcmtlciogd29ya2Vy
KQoreworICAgIHJldHVybiBXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVhdGVXb3JrZXJDb250ZXh0
UHJveHkod29ya2VyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNl
L1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNwcAkocmV2aXNpb24gNzYx
NzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5o
IgogCiAjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy91cmxfdXRpbC5oPgogCkBAIC0xNDUsMTQgKzE0
NSwxNCBAQCBzdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgCiAKIC8vIENh
Y2hlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShj
b25zdCBLVVJMJiB1cmwsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNvbnN0IFZlY3RvcjxjaGFyPiYg
ZGF0YSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNhY2hlTWV0YWRhdGEoY29uc3QgS1VSTCYgdXJs
LCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEpCiB7CiAgICAg
d2ViS2l0Q2xpZW50KCktPmNhY2hlTWV0YWRhdGEodXJsLCByZXNwb25zZVRpbWUsIGRhdGEuZGF0
YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKIC8vIENsaXBib2FyZCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUoCitib29sIFBsYXRmb3Jt
QnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZSgKICAgICBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkRm9ybWF0IGZvcm1hdCwKICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyIGJ1ZmZlcikKIHsKQEAgLTE2MSwxNCArMTYxLDE0IEBAIGJvb2wgQ2hyb21pdW1C
cmlkZ2U6OmNsaXBib2FyZElzRm9ybWF0QXYKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJv
YXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwogfQogCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRQbGFpblRleHQoCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQ
bGFpblRleHQoCiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIp
CiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZFBsYWluVGV4
dCgKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwog
fQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTCgKK3ZvaWQgUGxhdGZv
cm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKAogICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlw
Ym9hcmRCdWZmZXIgYnVmZmVyLAogICAgIFN0cmluZyogaHRtbFRleHQsIEtVUkwqIHNvdXJjZVVS
TCkKIHsKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkSFRNTCgKICAgICAqc291cmNlVVJMID0gdXJsOwogfQogCi12b2lkIENocm9taXVtQnJpZGdl
OjpjbGlwYm9hcmRXcml0ZVNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGh0bWxUZXh0LAordm9pZCBQ
bGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiBodG1s
VGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0
IEtVUkwmIHNvdXJjZVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVNtYXJ0UGFzdGUpCkBAIC0xODcsMTcgKzE4
NywxNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNlbGVjCiAgICAgICAg
IGh0bWxUZXh0LCBzb3VyY2VVUkwsIHBsYWluVGV4dCwgd3JpdGVTbWFydFBhc3RlKTsKIH0KIAot
dm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5n
JiBwbGFpblRleHQpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4
dChjb25zdCBTdHJpbmcmIHBsYWluVGV4dCkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJv
YXJkKCktPndyaXRlUGxhaW5UZXh0KHBsYWluVGV4dCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1Ccmlk
Z2U6OmNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmIHVy
bCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJk
KCktPndyaXRlVVJMKHVybCwgdGl0bGUpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRyIGltYWdlLAordm9pZCBQbGF0Zm9ybUJyaWRn
ZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgc291cmNlVVJMLAogICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHRpdGxl
KQogewpAQCAtMjA5LDE0ICsyMDksMTQgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJk
V3JpdGVJbWFnZQogICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVJbWFnZSh3
ZWJJbWFnZSwgc291cmNlVVJMLCB0aXRsZSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNs
aXBib2FyZFdyaXRlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUsCit2b2lkIFBsYXRmb3JtQnJpZGdl
OjpjbGlwYm9hcmRXcml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0YSwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIG1ldGFkYXRhKQogewog
ICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVEYXRhKHR5cGUsIGRhdGEsIG1l
dGFkYXRhKTsKIH0KIAotSGFzaFNldDxTdHJpbmc+IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkQXZhaWxhYmxlVHlwZXMoCitIYXNoU2V0PFN0cmluZz4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRBdmFpbGFibGVUeXBlcygKICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
QnVmZmVyIGJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpCiB7CiAgICAgV2ViVmVjdG9y
PFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkQXZh
aWxhYmxlVHlwZXMoCkBAIC0yMjcsNyArMjI3LDcgQEAgSGFzaFNldDxTdHJpbmc+IENocm9taXVt
QnJpZGdlOjpjbGlwYm9hcgogICAgIHJldHVybiB0eXBlczsKIH0KIAotYm9vbCBDaHJvbWl1bUJy
aWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZl
ciBidWZmZXIsCitib29sIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YShQYXN0ZWJv
YXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdHlwZSwgU3RyaW5nJiBkYXRhLCBTdHJp
bmcmIG1ldGFkYXRhKQogewogICAgIFdlYlN0cmluZyByZXN1bHREYXRhOwpAQCAtMjQxLDcgKzI0
MSw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWREYXRhKFAKICAgICByZXR1
cm4gc3VjY2VlZGVkOwogfQogCi1WZWN0b3I8U3RyaW5nPiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJv
YXJkUmVhZEZpbGVuYW1lcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZl
cikKK1ZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRmlsZW5hbWVz
KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQogewogICAgIFdlYlZl
Y3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVh
ZEZpbGVuYW1lcygKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1
ZmZlcikpOwpAQCAtMjUzLDcgKzI1Myw3IEBAIFZlY3RvcjxTdHJpbmc+IENocm9taXVtQnJpZGdl
OjpjbGlwYm9hcmQKIAogLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIENocm9taXVtQnJp
ZGdlOjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJs
LAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsIGNvbnN0IEtVUkwmIHVybCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u
c3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENv
b2tpZUphcihkb2N1bWVudCk7CkBAIC0yNjEsNyArMjYxLDcgQEAgdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6c2V0Q29va2llcyhjb25zdCBEbwogICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmws
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7CiB9CiAKLVN0cmluZyBD
aHJvbWl1bUJyaWRnZTo6Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCkKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Y29va2llcyhjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBTdHJpbmcgcmVzdWx0OwogICAgIFdl
YkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKQEAgLTI3MCw3
ICsyNzAsNyBAQCBTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXMoY29uc3QgRG9jCiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KIAotU3RyaW5nIENocm9taXVtQnJpZGdlOjpjb29raWVSZXF1ZXN0
SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsCitTdHJpbmcgUGxhdGZv
cm1CcmlkZ2U6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50KiBk
b2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgS1VSTCYgdXJsKQogewogICAgIFN0cmluZyByZXN1bHQ7CkBAIC0yODAsNyAr
MjgwLDcgQEAgU3RyaW5nIENocm9taXVtQnJpZGdlOjpjb29raWVSZXF1ZXN0SGVhZAogICAgIHJl
dHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OnJhd0Nvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdD
b29raWVzKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6cmF3Q29va2llcyhjb25zdCBEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mIHJhd0Nvb2tpZXMpCiB7
CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIFdlYlZlY3RvcjxXZWJDb29raWU+IHdlYkNv
b2tpZXM7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBib29sIENocm9taXVtQnJpZGdlOjpyYXdDb29r
aWVzKGNvbnN0IERvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6
OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwg
Y29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlQ29v
a2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJp
bmcmIGNvb2tpZU5hbWUpCiB7CiAgICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29r
aWVKYXIoZG9jdW1lbnQpOwogICAgIGlmIChjb29raWVKYXIpCiAgICAgICAgIGNvb2tpZUphci0+
ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6
OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK2Jvb2wgUGxhdGZvcm1C
cmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKIHsKICAgICBi
b29sIHJlc3VsdCA9IGZhbHNlOwogICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29v
a2llSmFyKGRvY3VtZW50KTsKQEAgLTMyMiwzOSArMzIyLDM5IEBAIGJvb2wgQ2hyb21pdW1Ccmlk
Z2U6OmNvb2tpZXNFbmFibGVkKGNvbnMKIAogLy8gRE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lk
IENocm9taXVtQnJpZGdlOjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQordm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKIHsK
ICAgICB3ZWJLaXRDbGllbnQoKS0+cHJlZmV0Y2hIb3N0TmFtZShob3N0bmFtZSk7CiB9CiAKIC8v
IEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmZpbGVFeGlzdHMo
Y29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6ZmlsZUV4aXN0cyhjb25z
dCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0
aWVzKCktPmZpbGVFeGlzdHMocGF0aCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmRlbGV0
ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRmls
ZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxl
VXRpbGl0aWVzKCktPmRlbGV0ZUZpbGUocGF0aCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6
OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK2Jvb2wgUGxhdGZvcm1C
cmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICBy
ZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGVsZXRlRW1wdHlEaXJlY3Rv
cnkocGF0aCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVTaXplKGNvbnN0IFN0
cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCitib29sIFBsYXRmb3JtQnJpZGdlOjpnZXRG
aWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVzdWx0KQogewogICAgIHJl
dHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5nZXRGaWxlU2l6ZShwYXRoLCBy
ZXN1bHQpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpyZXZlYWxGb2xkZXJJbk9TKGNvbnN0
IFN0cmluZyYgcGF0aCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnJldmVhbEZvbGRlckluT1MoY29u
c3QgU3RyaW5nJiBwYXRoKQogewogICAgIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCkt
PnJldmVhbEZvbGRlckluT1MocGF0aCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmdldEZp
bGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGltZV90JiByZXN1bHQpCiti
b29sIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcm
IHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogewogICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lOwog
ICAgIGlmICghd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZU1vZGlmaWNh
dGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCkBAIC0zNjMsNjIgKzM2Myw2MiBAQCBi
b29sIENocm9taXVtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uCiAgICAgcmV0dXJuIHRydWU7
CiB9CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6ZGlyZWN0b3J5TmFtZShjb25zdCBTdHJpbmcm
IHBhdGgpCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUoY29uc3QgU3RyaW5n
JiBwYXRoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5k
aXJlY3RvcnlOYW1lKHBhdGgpOwogfQogCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OnBhdGhCeUFw
cGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9u
ZW50KQorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29u
c3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsKICAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50
KHBhdGgsIGNvbXBvbmVudCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6Om1ha2VBbGxEaXJl
Y3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsYXRmb3JtQnJpZGdlOjptYWtlQWxs
RGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGll
bnQoKS0+ZmlsZVV0aWxpdGllcygpLT5tYWtlQWxsRGlyZWN0b3JpZXMocGF0aCk7CiB9CiAKLVN0
cmluZyBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0aCkK
K1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKGNvbnN0IFN0cmluZyYgcGF0
aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0QWJz
b2x1dGVQYXRoKHBhdGgpOwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjppc0RpcmVjdG9yeShj
b25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsYXRmb3JtQnJpZGdlOjppc0RpcmVjdG9yeShjb25z
dCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0
aWVzKCktPmlzRGlyZWN0b3J5KHBhdGgpOwogfQogCi1LVVJMIENocm9taXVtQnJpZGdlOjpmaWxl
UGF0aFRvVVJMKGNvbnN0IFN0cmluZyYgcGF0aCkKK0tVUkwgUGxhdGZvcm1CcmlkZ2U6OmZpbGVQ
YXRoVG9VUkwoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+ZmlsZVV0aWxpdGllcygpLT5maWxlUGF0aFRvVVJMKHBhdGgpOwogfQogCi1QbGF0Zm9ybUZp
bGVIYW5kbGUgQ2hyb21pdW1CcmlkZ2U6Om9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmls
ZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVIYW5kbGUgUGxhdGZvcm1CcmlkZ2U6Om9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCiB7CiAgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPm9wZW5GaWxlKHBhdGgsIG1vZGUpOwog
fQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBo
YW5kbGUpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxl
JiBoYW5kbGUpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Y2xvc2VG
aWxlKGhhbmRsZSk7CiB9CiAKLWxvbmcgbG9uZyBDaHJvbWl1bUJyaWRnZTo6c2Vla0ZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4g
b3JpZ2luKQorbG9uZyBsb25nIFBsYXRmb3JtQnJpZGdlOjpzZWVrRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbiBvcmlnaW4pCiB7
CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnNlZWtGaWxlKGhh
bmRsZSwgb2Zmc2V0LCBvcmlnaW4pOwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjp0cnVuY2F0
ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCkKK2Jvb2wg
UGxhdGZvcm1CcmlkZ2U6OnRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBs
b25nIGxvbmcgb2Zmc2V0KQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxp
dGllcygpLT50cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQpOwogfQogCi1pbnQgQ2hyb21pdW1C
cmlkZ2U6OnJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFyKiBkYXRh
LCBpbnQgbGVuZ3RoKQoraW50IFBsYXRmb3JtQnJpZGdlOjpyZWFkRnJvbUZpbGUoUGxhdGZvcm1G
aWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkKIHsKICAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cmVhZEZyb21GaWxlKGhhbmRsZSwgZGF0
YSwgbGVuZ3RoKTsKIH0KIAotaW50IENocm9taXVtQnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9y
bUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFBs
YXRmb3JtQnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25z
dCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
ZmlsZVV0aWxpdGllcygpLT53cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CkBA
IC00MjYsNyArNDI2LDcgQEAgaW50IENocm9taXVtQnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9y
bQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgT1MoV0lORE9XUykKLWJvb2wgQ2hyb21p
dW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCkKK2Jvb2wgUGxhdGZvcm1Ccmlk
Z2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCkKIHsKICAgICBXZWJTYW5kYm94U3VwcG9y
dCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKIApAQCAtNDM3LDcgKzQz
Nyw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEYKICNlbmRpZgog
CiAjaWYgT1MoTElOVVgpIHx8IE9TKEZSRUVCU0QpCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6Omdl
dEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCBzaXplX3Qg
bnVtQ2hhcmFjdGVycykKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNo
YXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFyYWN0ZXJzKQog
ewogICAgIGlmICh3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKSkKICAgICAgICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRGb250RmFtaWx5Rm9yQ2hh
cmFjdGVycyhjaGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzKTsKQEAgLTQ0OSw3ICs0NDksNyBAQCBT
dHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmdldEZvbnRGYW1pbHlGb3JDCiAgICAgcmV0dXJuIFdlYlN0
cmluZygpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpnZXRSZW5kZXJTdHlsZUZvclN0cmlr
ZShjb25zdCBjaGFyKiBmb250LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJl
c3VsdCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtlKGNvbnN0
IGNoYXIqIGZvbnQsIGludCBzaXplQW5kU3R5bGUsIEZvbnRSZW5kZXJTdHlsZSogcmVzdWx0KQog
ewogICAgIFdlYkZvbnRSZW5kZXJTdHlsZSBzdHlsZTsKIApAQCAtNDYzLDcgKzQ2Myw3IEBAIHZv
aWQgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3QKICNlbmRpZgogCiAjaWYgT1Mo
REFSV0lOKQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6bG9hZEZvbnQoTlNGb250KiBzcmNGb250LCBB
VFNGb250Q29udGFpbmVyUmVmKiBvdXQpCitib29sIFBsYXRmb3JtQnJpZGdlOjpsb2FkRm9udChO
U0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWluZXJSZWYqIG91dCkKIHsKICAgICBXZWJTYW5k
Ym94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKTsKICAgICBp
ZiAoc3MpCkBAIC00ODAsNDIgKzQ4MCw0MiBAQCBib29sIENocm9taXVtQnJpZGdlOjpsb2FkRm9u
dChOU0ZvbnQqIHNyCiAKIC8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotUGxhdGZvcm1GaWxlSGFu
ZGxlIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgdmZzRmls
ZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpCitQbGF0Zm9ybUZpbGVIYW5kbGUgUGxhdGZvcm1Ccmlk
Z2U6OmRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgaW50IGRlc2ly
ZWRGbGFncykKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlT3BlbkZpbGUo
V2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwgZGVzaXJlZEZsYWdzKTsKIH0KIAotaW50IENocm9taXVt
QnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9v
bCBzeW5jRGlyKQoraW50IFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3Qg
U3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyKQogewogICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+ZGF0YWJhc2VEZWxldGVGaWxlKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSksIHN5bmNE
aXIpOwogfQogCi1sb25nIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVz
KGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCitsb25nIFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFz
ZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCiB7CiAgICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKFdlYlN0cmluZyh2
ZnNGaWxlTmFtZSkpOwogfQogCi1sb25nIGxvbmcgQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlR2V0
RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSkKK2xvbmcgbG9uZyBQbGF0Zm9ybUJy
aWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKQogewog
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VHZXRGaWxlU2l6ZShXZWJTdHJpbmco
dmZzRmlsZU5hbWUpKTsKIH0KIAogLy8gSW5kZXhlZCBEYXRhYmFzZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1QYXNzUmVmUHRy
PElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBDaHJvbWl1bUJyaWRnZTo6aWRiRmFjdG9yeSgp
CitQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBQbGF0Zm9ybUJyaWRnZTo6
aWRiRmFjdG9yeSgpCiB7CiAgICAgLy8gVGhlcmUncyBubyByZWFzb24gd2h5IHdlIG5lZWQgdG8g
YWxsb2NhdGUgYSBuZXcgcHJveHkgZWFjaCB0aW1lLCBidXQKICAgICAvLyB0aGVyZSdzIGFsc28g
bm8gc3Ryb25nIHJlYXNvbiBub3QgdG8uCiAgICAgcmV0dXJuIElEQkZhY3RvcnlCYWNrZW5kUHJv
eHk6OmNyZWF0ZSgpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjppZGJTaHV0ZG93bigpCit2
b2lkIFBsYXRmb3JtQnJpZGdlOjppZGJTaHV0ZG93bigpCiB7CiAgICAgLy8gSW4gdGhlIGJyb3dz
ZXIgcHJvY2VzcywgdGhpcyBzaHV0cyBkb3duIHRoZSB1dGlsaXR5IHByb2Nlc3MuIEluIHRoZSBy
ZW5kZXJlciBwcm9jZXNzLCBpdCBkb2VzIG5vdGhpbmcuCiAgICAgd2ViS2l0Q2xpZW50KCktPmlk
YlNodXRkb3duKCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9t
U2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+ID4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8UmVm
UHRyPElEQktleT4gPiYga2V5cykKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNG
cm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxp
emVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8
UmVmUHRyPElEQktleT4gPiYga2V5cykKIHsKICAgICBXZWJWZWN0b3I8V2ViU2VyaWFsaXplZFNj
cmlwdFZhbHVlPiB3ZWJWYWx1ZXMgPSB2YWx1ZXM7CiAgICAgV2ViVmVjdG9yPFdlYklEQktleT4g
d2ViS2V5czsKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpjcmVhdGVJ
REJLZXlzRnJvbVNlCiAKIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotU3RyaW5nIENocm9taXVt
QnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoCitTdHJpbmcgUGxhdGZv
cm1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZygKICAgICB1bnNpZ25l
ZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlLCBjb25zdCBLVVJMJiB1cmwp
CiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVu
Z2VTdHJpbmcoa2V5U2l6ZUluZGV4LApAQCAtNTM5LDYzICs1MzksNjMgQEAgU3RyaW5nIENocm9t
aXVtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbgogCiAvLyBMYW5ndWFnZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAK
LVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKQorU3RyaW5n
IFBsYXRmb3JtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgpCiB7CiAgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5kZWZhdWx0TG9jYWxlKCk7CiB9CiAKIC8vIExheW91dFRlc3RNb2Rl
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKQorYm9vbCBQbGF0
Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKQogewogICAgIHJldHVybiBXZWJLaXQ6OmxheW91
dFRlc3RNb2RlKCk7CiB9CiAKIC8vIE1pbWVUeXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBDaHJvbWl1
bUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUp
Citib29sIFBsYXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUoY29uc3QgU3Ry
aW5nJiBtaW1lVHlwZSkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3Ry
eSgpLT5zdXBwb3J0c0ltYWdlTUlNRVR5cGUobWltZVR5cGUpCiAgICAgICAgICE9IFdlYk1pbWVS
ZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzU3Vw
cG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCitib29sIFBs
YXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcm
IG1pbWVUeXBlKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCkt
PnN1cHBvcnRzSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKQogICAgICAgICAhPSBXZWJNaW1l
UmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjppc1N1
cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKK2Jvb2wgUGxh
dGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1p
bWVUeXBlKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1
cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKICAgICAgICAgIT0gV2ViTWltZVJlZ2lz
dHJ5OjpJc05vdFN1cHBvcnRlZDsKIH0KIAotU3RyaW5nIENocm9taXVtQnJpZGdlOjptaW1lVHlw
ZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK1N0cmluZyBQbGF0Zm9ybUJy
aWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCiB7CiAg
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+bWltZVR5cGVGb3JFeHRl
bnNpb24oZXh0ZW5zaW9uKTsKIH0KIAotU3RyaW5nIENocm9taXVtQnJpZGdlOjptaW1lVHlwZUZy
b21GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6bWltZVR5
cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5taW1lUmVnaXN0cnkoKS0+bWltZVR5cGVGcm9tRmlsZShwYXRoKTsKIH0KIAotU3RyaW5n
IENocm9taXVtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJp
bmcmIG1pbWVUeXBlKQorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25G
b3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIHJldHVybiB3ZWJLaXRD
bGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKG1p
bWVUeXBlKTsKIH0KIAogLy8gUGx1Z2luIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1ib29sIENocm9taXVtQnJp
ZGdlOjpwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbkluZm8+KiByZXN1bHRzKQor
Ym9vbCBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lucyhib29sIHJlZnJlc2gsIFZlY3RvcjxQbHVnaW5J
bmZvPiogcmVzdWx0cykKIHsKICAgICBXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwgYnVpbGRlcihy
ZXN1bHRzKTsKICAgICB3ZWJLaXRDbGllbnQoKS0+Z2V0UGx1Z2luTGlzdChyZWZyZXNoLCAmYnVp
bGRlcik7CiAgICAgcmV0dXJuIHRydWU7ICAvLyBGSVhNRTogVGhlcmUgaXMgbm8gbmVlZCBmb3Ig
dGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSB2YWx1ZS4KIH0KIAotTlBPYmplY3QqIENocm9taXVt
QnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCogd2lkZ2V0KQorTlBPYmplY3Qq
IFBsYXRmb3JtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCogd2lkZ2V0KQog
ewogICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzUGx1Z2luQ29udGFpbmVyKCkpCiAgICAg
ICAgIHJldHVybiAwOwpAQCAtNjA1LDcgKzYwNSw3IEBAIE5QT2JqZWN0KiBDaHJvbWl1bUJyaWRn
ZTo6cGx1Z2luU2NyaXB0YWIKIAogLy8gUmVzb3VyY2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1QYXNzUmVmUHRy
PEltYWdlPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZShjb25zdCBj
aGFyKiBuYW1lKQorUGFzc1JlZlB0cjxJbWFnZT4gUGxhdGZvcm1CcmlkZ2U6OmxvYWRQbGF0Zm9y
bUltYWdlUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBjb25zdCBXZWJEYXRhJiBy
ZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7CiAgICAgaWYgKHJl
c291cmNlLmlzRW1wdHkoKSkKQEAgLTYxOCw3ICs2MTgsNyBAQCBQYXNzUmVmUHRyPEltYWdlPiBD
aHJvbWl1bUJyaWRnZTo6bG9hZFBsCiAKICNpZiBFTkFCTEUoV0VCX0FVRElPKQogCi1QYXNzT3du
UHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShj
b25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkKK1Bhc3NPd25QdHI8QXVkaW9CdXM+
IFBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKGNvbnN0IGNoYXIqIG5h
bWUsIGRvdWJsZSBzYW1wbGVSYXRlKQogewogICAgIGNvbnN0IFdlYkRhdGEmIHJlc291cmNlID0g
d2ViS2l0Q2xpZW50KCktPmxvYWRSZXNvdXJjZShuYW1lKTsKICAgICBpZiAocmVzb3VyY2UuaXNF
bXB0eSgpKQpAQCAtNjI3LDcgKzYyNyw3IEBAIFBhc3NPd25QdHI8QXVkaW9CdXM+IENocm9taXVt
QnJpZGdlOjpsb2EKICAgICByZXR1cm4gZGVjb2RlQXVkaW9GaWxlRGF0YShyZXNvdXJjZS5kYXRh
KCksIHJlc291cmNlLnNpemUoKSwgc2FtcGxlUmF0ZSk7CiB9CiAKLVBhc3NPd25QdHI8QXVkaW9C
dXM+IENocm9taXVtQnJpZGdlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEs
IHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKK1Bhc3NPd25QdHI8QXVkaW9CdXM+IFBs
YXRmb3JtQnJpZGdlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIHNpemVf
dCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsKICAgICBXZWJBdWRpb0J1cyB3ZWJBdWRpb0J1
czsKICAgICBpZiAod2ViS2l0Q2xpZW50KCktPmxvYWRBdWRpb1Jlc291cmNlKCZ3ZWJBdWRpb0J1
cywgZGF0YSwgc2l6ZSwgc2FtcGxlUmF0ZSkpCkBAIC02MzksNjAgKzYzOSw2MCBAQCBQYXNzT3du
UHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6ZGVjCiAKIC8vIFNhbmRib3ggLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQoKQorYm9vbCBQbGF0Zm9y
bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
c2FuZGJveEVuYWJsZWQoKTsKIH0KIAogLy8gU2hhcmVkVGltZXJzIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIENo
cm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmZ1bmMpKCkp
Cit2b2lkIFBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAo
KmZ1bmMpKCkpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnNldFNoYXJlZFRpbWVyRmlyZWRGdW5j
dGlvbihmdW5jKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJl
VGltZShkb3VibGUgZmlyZVRpbWUpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1l
ckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hh
cmVkVGltZXJGaXJlVGltZShmaXJlVGltZSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnN0
b3BTaGFyZWRUaW1lcigpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpzdG9wU2hhcmVkVGltZXIoKQog
ewogICAgIHdlYktpdENsaWVudCgpLT5zdG9wU2hhcmVkVGltZXIoKTsKIH0KIAogLy8gU3RhdHND
b3VudGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQogCi12b2lkIENocm9taXVtQnJpZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50
ZXIoY29uc3QgY2hhciogbmFtZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmRlY3JlbWVudFN0YXRz
Q291bnRlcihjb25zdCBjaGFyKiBuYW1lKQogewogICAgIHdlYktpdENsaWVudCgpLT5kZWNyZW1l
bnRTdGF0c0NvdW50ZXIobmFtZSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmluY3JlbWVu
dFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6aW5j
cmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAgICAgd2ViS2l0Q2xpZW50
KCktPmluY3JlbWVudFN0YXRzQ291bnRlcihuYW1lKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGlu
dCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6Omhp
c3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQgbWlu
LCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmhpc3Rv
Z3JhbUN1c3RvbUNvdW50cyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBidWNrZXRDb3VudCk7CiB9
CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIq
IG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKQordm9pZCBQbGF0Zm9ybUJyaWRn
ZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50
IGJvdW5kYXJ5VmFsdWUpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmhpc3RvZ3JhbUVudW1lcmF0
aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1ZSk7CiB9CiAKIC8vIFN1ZGRlbiBUZXJtaW5h
dGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJv
b2wgZW5hYmxlZCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdl
ZChib29sIGVuYWJsZWQpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnN1ZGRlblRlcm1pbmF0aW9u
Q2hhbmdlZChlbmFibGVkKTsKIH0KIAogLy8gU3lzdGVtVGltZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1kb3VibGUg
Q2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1lKCkKK2RvdWJsZSBQbGF0Zm9ybUJyaWRnZTo6Y3Vy
cmVudFRpbWUoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y3VycmVudFRpbWUoKTsK
IH0KQEAgLTcwMSw3ICs3MDEsNyBAQCBkb3VibGUgQ2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1l
KCkKIAogI2lmIE9TKFdJTkRPV1MpCiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50QnV0dG9u
KAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24oCiAgICAgR3JhcGhpY3NDb250ZXh0
KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJ
bnRSZWN0JiByZWN0KQogewpAQCAtNzA5LDcgKzcwOSw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6
OnBhaW50QnV0dG9uKAogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBw
YXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6cGFpbnRNZW51TGlzdCgKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50TWVudUxpc3QoCiAg
ICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNT
dGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtNzE3LDcgKzcxNyw3IEBAIHZv
aWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50TWVudUxpc3QoCiAgICAgICAgIGdjLT5wbGF0Zm9ybUNv
bnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQog
Ci12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93KAordm9pZCBQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJvdygKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBp
bnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsK
QEAgLTcyNSw3ICs3MjUsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhckFy
cm93CiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHN0YXRlLCBjbGFz
c2ljU3RhdGUsIHJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJh
clRodW1iKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKICAgICBH
cmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRl
LAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CkBAIC03MzMsNyArNzMzLDcgQEAgdm9pZCBD
aHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYgogICAgICAgICBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0K
IAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUcmFjaygKK3ZvaWQgUGxhdGZv
cm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2soCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywg
aW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBJbnRSZWN0JiBhbGlnblJlY3QpCiB7CkBAIC03NDIsNyArNzQyLDcgQEAg
dm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUcmFjawogICAgICAgICBhbGlnblJl
Y3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oCit2b2lkIFBs
YXRmb3JtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywg
aW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0
JiByZWN0KQogewpAQCAtNzUwLDcgKzc1MCw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50
U3BpbkJ1dHRvbigKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFy
dCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6
OnBhaW50VGV4dEZpZWxkKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUZXh0RmllbGQoCiAg
ICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNT
dGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29sb3IsIGJvb2wg
ZmlsbENvbnRlbnRBcmVhLAogICAgIGJvb2wgZHJhd0VkZ2VzKQpAQCAtNzYzLDcgKzc2Myw3IEBA
IHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKAogICAgICAgICBiYWNrZ3JvdW5k
Q29sb3IsIGZpbGxDb250ZW50QXJlYSwgZHJhd0VkZ2VzKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJy
aWRnZTo6cGFpbnRUcmFja2JhcigKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VHJhY2tiYXIo
CiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNz
aWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtNzcxLDcgKzc3MSw3IEBA
IHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VHJhY2tiYXIoCiAgICAgICAgIGdjLT5wbGF0Zm9y
bUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwog
fQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFByb2dyZXNzQmFyKAordm9pZCBQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcigKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBjb25z
dCBJbnRSZWN0JiBiYXJSZWN0LCBjb25zdCBJbnRSZWN0JiB2YWx1ZVJlY3QsIGJvb2wgZGV0ZXJt
aW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnRo
ZW1lRW5naW5lKCktPnBhaW50UHJvZ3Jlc3NCYXIoCkBAIC03ODAsMzcgKzc4MCwzNyBAQCB2b2lk
IENocm9taXVtQnJpZGdlOjpwYWludFByb2dyZXNzQmFyKAogCiAjZWxpZiBPUyhMSU5VWCkKIAot
c3RhdGljIFdlYlRoZW1lRW5naW5lOjpQYXJ0IFdlYlRoZW1lUGFydChDaHJvbWl1bUJyaWRnZTo6
VGhlbWVQYXJ0IHBhcnQpCitzdGF0aWMgV2ViVGhlbWVFbmdpbmU6OlBhcnQgV2ViVGhlbWVQYXJ0
KFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhcnQgcGFydCkKIHsKICAgICBzd2l0Y2ggKHBhcnQpIHsK
LSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OiByZXR1cm4g
V2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7Ci0gICAgY2FzZSBDaHJvbWl1
bUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQ
YXJ0U2Nyb2xsYmFyTGVmdEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJSaWdodEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJSaWdo
dEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJVcEFycm93OiBy
ZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJVcEFycm93OwotICAgIGNhc2UgQ2hy
b21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWI6IHJldHVybiBXZWJUaGVt
ZUVuZ2luZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYjsKLSAgICBjYXNlIENocm9taXVt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYjogcmV0dXJuIFdlYlRoZW1lRW5naW5l
OjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYjsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQ
YXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRT
Y3JvbGxiYXJIb3Jpem9udGFsVHJhY2s7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNj
cm9sbGJhclZlcnRpY2FsVHJhY2s6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJh
clZlcnRpY2FsVHJhY2s7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckRv
d25BcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93Owor
ICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJMZWZ0QXJyb3c6IHJldHVybiBX
ZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAgICBjYXNlIFBsYXRmb3Jt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQ
YXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Ny
b2xsYmFyVXBBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVXBBcnJv
dzsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRodW1i
OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWI7Cisg
ICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWI6IHJldHVy
biBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWI7CisgICAgY2FzZSBQ
bGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjazogcmV0dXJuIFdlYlRo
ZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrOworICAgIGNhc2UgUGxhdGZv
cm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOiByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOwogICAgIH0KICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKICAgICByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJEb3duQXJy
b3c7CiB9CiAKLXN0YXRpYyBXZWJUaGVtZUVuZ2luZTo6U3RhdGUgV2ViVGhlbWVTdGF0ZShDaHJv
bWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlKQorc3RhdGljIFdlYlRoZW1lRW5naW5l
OjpTdGF0ZSBXZWJUaGVtZVN0YXRlKFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3Rh
dGUpCiB7CiAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0
YXRlRGlzYWJsZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsKLSAgICBj
YXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVyOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0
YXRlSG92ZXI7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw6IHJldHVybiBX
ZWJUaGVtZUVuZ2luZTo6U3RhdGVOb3JtYWw7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3Rh
dGVQcmVzc2VkOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlUHJlc3NlZDsKKyAgICBjYXNl
IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVkOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0
YXRlRGlzYWJsZWQ7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVIb3ZlcjogcmV0dXJu
IFdlYlRoZW1lRW5naW5lOjpTdGF0ZUhvdmVyOworICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlN0
YXRlTm9ybWFsOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlTm9ybWFsOworICAgIGNhc2Ug
UGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3NlZDogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0
ZVByZXNzZWQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIHJldHVybiBX
ZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsKIH0KIAotc3RhdGljIHZvaWQgR2V0V2ViVGhl
bWVFeHRyYVBhcmFtcyhDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBhcnQsIENocm9taXVtQnJp
ZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUsIGNvbnN0IENocm9taXVtQnJpZGdlOjpUaGVtZVBh
aW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zLCBXZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMq
IHdlYlRoZW1lRXh0cmFQYXJhbXMpCitzdGF0aWMgdm9pZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1z
KFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhcnQgcGFydCwgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFp
bnRTdGF0ZSBzdGF0ZSwgY29uc3QgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFt
cyogZXh0cmFQYXJhbXMsIFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyogd2ViVGhlbWVFeHRy
YVBhcmFtcykKIHsKLSAgICBpZiAocGFydCA9PSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJh
ckhvcml6b250YWxUcmFjayB8fCBwYXJ0ID09IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
VmVydGljYWxUcmFjaykgeworICAgIGlmIChwYXJ0ID09IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Ny
b2xsYmFySG9yaXpvbnRhbFRyYWNrIHx8IHBhcnQgPT0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJWZXJ0aWNhbFRyYWNrKSB7CiAgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9s
bGJhclRyYWNrLnRyYWNrWCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1g7CiAg
ICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWSA9IGV4dHJh
UGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1k7CiAgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJh
bXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGggPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJh
Y2sudHJhY2tXaWR0aDsKQEAgLTgxOCwxMiArODE4LDEyIEBAIHN0YXRpYyB2b2lkIEdldFdlYlRo
ZW1lRXh0cmFQYXJhbXMoQ2hyb20KICAgICB9CiB9CiAKLUludFNpemUgQ2hyb21pdW1CcmlkZ2U6
OmdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0IHBhcnQpCitJbnRTaXplIFBsYXRmb3JtQnJpZGdl
OjpnZXRUaGVtZVBhcnRTaXplKFRoZW1lUGFydCBwYXJ0KQogewogICAgICByZXR1cm4gd2ViS2l0
Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2ViVGhlbWVQYXJ0KHBhcnQpKTsKIH0K
IAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCit2b2lkIFBsYXRmb3JtQnJp
ZGdlOjpwYWludFRoZW1lUGFydCgKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBUaGVtZVBhcnQg
cGFydCwgVGhlbWVQYWludFN0YXRlIHN0YXRlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBU
aGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zKQogewogICAgIFdlYlRoZW1lRW5naW5l
OjpFeHRyYVBhcmFtcyB3ZWJUaGVtZUV4dHJhUGFyYW1zOwpAQCAtODM0LDcgKzgzNCw3IEBAIHZv
aWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAogCiAjZWxpZiBPUyhEQVJXSU4pCiAK
LXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCit2b2lkIFBsYXRmb3Jt
QnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAogICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIFRo
ZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgVGhlbWVQYWludFNpemUgc2l6ZSwgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8mIHNjcm9sbGJhckluZm8pCiB7CiAg
ICAgV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhckluZm8gd2ViVGhlbWVTY3JvbGxiYXJJbmZvOwpA
QCAtODU4LDE5ICs4NTgsMTkgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJU
aHVtYgogCiAvLyBUcmFjZSBFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnRy
YWNlRXZlbnRCZWdpbihjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0
cmEpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFt
ZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQogewogICAgIHdlYktpdENsaWVudCgpLT50
cmFjZUV2ZW50QmVnaW4obmFtZSwgaWQsIGV4dHJhKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciog
ZXh0cmEpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5h
bWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+
dHJhY2VFdmVudEVuZChuYW1lLCBpZCwgZXh0cmEpOwogfQogCiAvLyBWaXNpdGVkIExpbmtzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCiAKLUxpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgVUNo
YXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQorTGlua0hhc2ggUGxhdGZvcm1CcmlkZ2U6OnZpc2l0
ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgdXJs
X2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4PiBidWZmZXI7CiAgICAgdXJsX3BhcnNlOjpQYXJz
ZWQgcGFyc2VkOwpAQCAtODc5LDcgKzg3OSw3IEBAIExpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2
aXNpdGVkTGlua0hhc2gKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFz
aChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOwogfQogCi1MaW5rSGFzaCBDaHJvbWl1
bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsCitMaW5rSGFzaCBQbGF0
Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmli
dXRlVVJMKQogewogICAgIC8vIFJlc29sdmUgdGhlIHJlbGF0aXZlIFVSTCB1c2luZyBnb29nbGV1
cmwgYW5kIHBhc3MgdGhlIGFic29sdXRlIFVSTCB1cCB0bwpAQCAtOTEzLDcgKzkxMyw3IEBAIExp
bmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2gKICAgICByZXR1cm4gd2ViS2l0
Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkp
OwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVkKExpbmtIYXNoIHZpc2l0
ZWRMaW5rSGFzaCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2gg
dmlzaXRlZExpbmtIYXNoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+aXNMaW5rVmlz
aXRlZCh2aXNpdGVkTGlua0hhc2gpOwogfQpAQCAtOTIyLDcgKzkyMiw3IEBAIGJvb2wgQ2hyb21p
dW1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQoTGlua0gKIC8vIEdsdWUgbGF5ZXIuIE9uY2UgdGhlIEds
dWUgbGF5ZXIgbW92ZXMgZW50aXJlbHkgaW50byB0aGUgV2ViS2l0IGxheWVyLCB0aGVzZQogLy8g
bWV0aG9kcyB3aWxsIGJlIGRlbGV0ZWQuCiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6Om5vdGlmeUpT
T3V0T2ZNZW1vcnkoRnJhbWUqIGZyYW1lKQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6bm90aWZ5SlNP
dXRPZk1lbW9yeShGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0
dXJuOwpAQCAtOTMzLDE3ICs5MzMsMTcgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6bm90aWZ5SlNP
dXRPZk1lbW9yeQogICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+ZGlkRXhoYXVzdE1lbW9yeUF2YWls
YWJsZUZvclNjcmlwdCh3ZWJGcmFtZSk7CiB9CiAKLWludCBDaHJvbWl1bUJyaWRnZTo6bWVtb3J5
VXNhZ2VNQigpCitpbnQgUGxhdGZvcm1CcmlkZ2U6Om1lbW9yeVVzYWdlTUIoKQogewogICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxpbnQ+KHdlYktpdENsaWVudCgpLT5tZW1vcnlVc2FnZU1CKCkpOwog
fQogCi1pbnQgQ2hyb21pdW1CcmlkZ2U6OmFjdHVhbE1lbW9yeVVzYWdlTUIoKQoraW50IFBsYXRm
b3JtQnJpZGdlOjphY3R1YWxNZW1vcnlVc2FnZU1CKCkKIHsKICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8aW50Pih3ZWJLaXRDbGllbnQoKS0+YWN0dWFsTWVtb3J5VXNhZ2VNQigpKTsKIH0KIAotaW50
IENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKK2ludCBQbGF0Zm9y
bUJyaWRnZTo6c2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViV2lkZ2V0Q2xp
ZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwogICAgIGlmICghY2xpZW50
KQpAQCAtOTUxLDcgKzk1MSw3IEBAIGludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGgoV2lk
Z2V0KiAKICAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuZGVwdGg7CiB9CiAKLWludCBD
aHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCitp
bnQgUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50KFdpZGdldCogd2lkZ2V0
KQogewogICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lk
Z2V0KTsKICAgICBpZiAoIWNsaWVudCkKQEAgLTk1OSw3ICs5NTksNyBAQCBpbnQgQ2hyb21pdW1C
cmlkZ2U6OnNjcmVlbkRlcHRoUGVyQ29tcG9uCiAgICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5m
bygpLmRlcHRoUGVyQ29tcG9uZW50OwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjpzY3JlZW5J
c01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCitib29sIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5J
c01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGll
bnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwogICAgIGlmICghY2xpZW50KQpAQCAtOTY3
LDcgKzk2Nyw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZSgKICAg
ICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuaXNNb25vY2hyb21lOwogfQogCi1JbnRSZWN0
IENocm9taXVtQnJpZGdlOjpzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0KQorSW50UmVjdCBQbGF0
Zm9ybUJyaWRnZTo6c2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBXZWJXaWRnZXRD
bGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7CiAgICAgaWYgKCFjbGll
bnQpCkBAIC05NzUsNyArOTc1LDcgQEAgSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuUmVj
dChXaWRnZQogICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5yZWN0OwogfQogCi1JbnRS
ZWN0IENocm9taXVtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCogd2lkZ2V0KQor
SW50UmVjdCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqIHdpZGdl
dCkKIHsKICAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdp
ZGdldCk7CiAgICAgaWYgKCFjbGllbnQpCkBAIC05ODMsNyArOTgzLDcgQEAgSW50UmVjdCBDaHJv
bWl1bUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUgogICAgIHJldHVybiBjbGllbnQtPnNjcmVlbklu
Zm8oKS5hdmFpbGFibGVSZWN0OwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjpwb3B1cHNBbGxv
d2VkKE5QUCBucHApCitib29sIFBsYXRmb3JtQnJpZGdlOjpwb3B1cHNBbGxvd2VkKE5QUCBucHAp
CiB7CiAgICAgLy8gRklYTUU6IEdpdmUgdGhlIGVtYmVkZGVyIGEgd2F5IHRvIGNvbnRyb2wgdGhp
cy4KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9S
ZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJLaXQv
Y2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJlc291cmNlSGFuZGxlLmgi
CiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdl
LmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNpbmNsdWRlICJSZXNvdXJj
ZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAgLTMzMCw3ICszMzAsNyBA
QCBib29sIFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShSCiAvLyBzdGF0aWMKIHZv
aWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYg
cmVzcG9uc2UsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAgICBDaHJvbWl1bUJyaWRn
ZTo6Y2FjaGVNZXRhZGF0YShyZXNwb25zZS51cmwoKSwgcmVzcG9uc2UucmVzcG9uc2VUaW1lKCks
IGRhdGEpOworICAgIFBsYXRmb3JtQnJpZGdlOjpjYWNoZU1ldGFkYXRhKHJlc3BvbnNlLnVybCgp
LCByZXNwb25zZS5yZXNwb25zZVRpbWUoKSwgZGF0YSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkZyYW1lSW1wbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRnJhbWVJbXBsLmNw
cAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJGcmFt
ZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw2IEBACiAjaW5jbHVkZSAiQXNz
b2NpYXRlZFVSTExvYWRlci5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgog
I2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVk
ZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKICNpbmNsdWRlICJDb25zb2xlLmgiCiAj
aW5jbHVkZSAiRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgpAQCAtMTAzLDYgKzEwMiw3IEBACiAjaW5j
bHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRl
ICJQZXJmb3JtYW5jZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlBsdWdpbkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiUHJpbnRDb250ZXh0LmgiCkBAIC0xODIwLDEzICsxODIwLDEzIEBAIFdlYkZyYW1lSW1w
bDo6V2ViRnJhbWVJbXBsKFdlYkZyYW1lQ2xpZW4KICAgICAsIG1fYW5pbWF0aW9uQ29udHJvbGxl
cih0aGlzKQogICAgICwgbV9pZGVudGlmaWVyKGdlbmVyYXRlRnJhbWVJZGVudGlmaWVyKCkpCiB7
Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcih3ZWJGcmFtZUFjdGl2
ZUNvdW50KTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6aW5jcmVtZW50U3RhdHNDb3VudGVyKHdlYkZy
YW1lQWN0aXZlQ291bnQpOwogICAgIGZyYW1lQ291bnQrKzsKIH0KIAogV2ViRnJhbWVJbXBsOjp+
V2ViRnJhbWVJbXBsKCkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6ZGVjcmVtZW50U3RhdHNDb3Vu
dGVyKHdlYkZyYW1lQWN0aXZlQ291bnQpOworICAgIFBsYXRmb3JtQnJpZGdlOjpkZWNyZW1lbnRT
dGF0c0NvdW50ZXIod2ViRnJhbWVBY3RpdmVDb3VudCk7CiAgICAgZnJhbWVDb3VudC0tOwogCiAg
ICAgY2FuY2VsUGVuZGluZ1Njb3BpbmdFZmZvcnQoKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hy
b21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2No
cm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwy
MyArMzQsMjIgQEAKICNpbmNsdWRlICJBdXRvRmlsbFBvcHVwTWVudUNsaWVudC5oIgogI2luY2x1
ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZExpc3RDaHJvbWl1bS5o
IgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIK
ICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiQ29tcG9zaXRpb25VbmRlcmxpbmVW
ZWN0b3JCdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIKICNpbmNsdWRlICJDb250
ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb250ZXh0TWVudUl0ZW0uaCIKLSNpbmNs
dWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5oIgog
I2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkRPTVV0aWxpdGllc1ByaXZhdGUuaCIKICNp
bmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5LmgiCiAjaW5jbHVkZSAiRG9jdW1l
bnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1ZGUgIkRPTVV0aWxpdGll
c1ByaXZhdGUuaCIKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkRyYWdT
Y3JvbGxUaW1lci5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisjaW5jbHVkZSAiRHJhZ1Njcm9s
bFRpbWVyLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgi
CiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCkBAIC02NSw4ICs2NCw4IEBACiAjaW5jbHVkZSAi
R3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQu
aCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVkZSAiSGl0VGVzdFJlc3Vs
dC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVyLmgiCiAjaW5jbHVkZSAi
SW5zcGVjdG9yQ29udHJvbGxlci5oIgpAQCAtNzgsNiArNzcsNyBAQAogI2luY2x1ZGUgIlBhZ2VH
cm91cC5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cExvYWREZWZlcnJlci5oIgogI2luY2x1ZGUgIlBh
c3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRm
b3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJvYXJkRXZlbnQuaCIKICNp
bmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKQEAgLTk4LDggKzk4LDggQEAKICNpbmNsdWRl
ICJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0LmgiCiAjaW5jbHVk
ZSAiV2ViQXV0b0ZpbGxDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJEZXZUb29sc0FnZW50UHJpdmF0
ZS5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCisjaW5jbHVkZSAiV2ViRGV2
VG9vbHNBZ2VudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJEcmFnRGF0YS5oIgogI2luY2x1ZGUg
IldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCkBAIC0yMjg3LDcgKzIyODcs
NyBAQCB2b2lkIFdlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVyUmVjCiAKIHZvaWQgV2Vi
Vmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZShib29sIGFjdGl2ZSkK
IHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oIkdQVS5zZXRJc0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUiLCBhY3RpdmUgKiAyICsgbV9pc0FjY2VsZXJhdGVk
Q29tcG9zaXRpbmdBY3RpdmUsIDQpOworICAgIFBsYXRmb3JtQnJpZGdlOjpoaXN0b2dyYW1FbnVt
ZXJhdGlvbigiR1BVLnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSIsIGFjdGl2ZSAq
IDIgKyBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSwgNCk7CiAKICAgICBpZiAobV9p
c0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPT0gYWN0aXZlKQogICAgICAgICByZXR1cm47
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>79615</attachid>
            <date>2011-01-20 10:38:11 -0800</date>
            <delta_ts>2011-01-21 03:31:24 -0800</delta_ts>
            <desc>Reverted style fixes in FontPlatformDataChromiumWin.cpp to fix Chromium/Windows build</desc>
            <filename>bug-52471-20110120103809.patch</filename>
            <type>text/plain</type>
            <size>231721</size>
            <attacher name="Adam Klein">adamk</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTcwIEBACisyMDExLTAxLTE5ICBBZGFtIEts
ZWluICA8YWRhbWtAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIFtjaHJvbWl1bV0gUmVuYW1lIENocm9taXVtQnJpZGdlIHRvIFBs
YXRmb3JtQnJpZGdlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD01MjQ3MQorCisgICAgICAgIE5vIHRlc3RzIGFkZGVkIGFzIHRoaXMgaXMgYSByZW5hbWU7
IG5vIGNoYW5nZSBpbiBiZWhhdmlvci4KKworICAgICAgICAqIFdlYkNvcmUuZ3lwaToKKyAgICAg
ICAgKiBiaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnJlcG9ydEZhdGFsRXJyb3JJblY4KToKKyAgICAgICAgKiBwYWdlL1BhZ2VHcm91cC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpQYWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL2FuZHJvaWQvUGxhdGZvcm1CcmlkZ2UuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9jaHJvbWl1bS9BdWRpb0J1c0Nocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0
ZUJ1c0Zyb21Jbk1lbW9yeUF1ZGlvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0v
Q2hyb21pdW1CcmlkZ2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9D
aHJvbWl1bURhdGFPYmplY3RMZWdhY3kuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q2hyb21pdW1E
YXRhT2JqZWN0TGVnYWN5OjpnZXREYXRhKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9E
cmFnRGF0YUNocm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRyYWdEYXRhOjphc1VSTCk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmRlbGV0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRlRW1w
dHlEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0RmlsZVNpemUpOgorICAgICAgICAo
V2ViQ29yZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUpOgorICAgICAgICAoV2ViQ29yZTo6cmV2
ZWFsRm9sZGVySW5PUyk6CisgICAgICAgIChXZWJDb3JlOjpkaXJlY3RvcnlOYW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3Jl
OjptYWtlQWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsZUV4aXN0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpvcGVuRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpjbG9zZUZpbGUp
OgorICAgICAgICAoV2ViQ29yZTo6c2Vla0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6dHJ1bmNh
dGVGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnJlYWRGcm9tRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjp3cml0ZVRvRmlsZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTGFuZ3VhZ2VD
aHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwbGF0Zm9ybURlZmF1bHRMYW5ndWFnZSk6
CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vTGlua0hhc2hDaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjp2aXNpdGVkTGlua0hhc2gpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9t
aXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbik6CisgICAgICAgIChXZWJDb3Jl
OjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZh
U2NyaXB0TUlNRVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6aXNT
dXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9Q
YXN0ZWJvYXJkQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3Jp
dGVTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQbGFpblRl
eHQpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVVUkwpOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVJbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjpjYW5TbWFydFJlcGxhY2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6
cGxhaW5UZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmRvY3VtZW50RnJhZ21l
bnQpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1BsYXRmb3JtQnJpZGdlLmg6CisgICAg
ICAgICogcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0aCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5EZXB0
aFBlckNvbXBvbmVudCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5Jc01vbm9jaHJvbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6c2NyZWVuUmVjdCk6CisgICAgICAgIChXZWJDb3JlOjpzY3JlZW5B
dmFpbGFibGVSZWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9SZWFkYWJsZURhdGFP
YmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpnZXREYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWRhYmxlRGF0YU9iamVjdDo6dXJsVGl0bGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhZGFibGVEYXRhT2JqZWN0OjpodG1sQmFzZVVybCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmZpbGVuYW1lcyk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFkYWJsZURhdGFPYmplY3Q6OmVuc3VyZVR5cGVDYWNoZUluaXRpYWxpemVkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TU0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcpOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW0uY3BwOgorICAg
ICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnNjcm9sbGJh
clRoaWNrbmVzcyk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTGlu
dXg6OnBhaW50VHJhY2tQaWVjZSk6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxiYXJUaGVtZUNo
cm9taXVtTGludXg6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYik6CisgICAgICAgIChXZWJDb3JlOjpTY3JvbGxi
YXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvblNpemUpOgorICAgICAgICAoV2ViQ29yZTo6U2Ny
b2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtVGh1bWJMZW5ndGgpOgorICAgICAgICAq
IHBsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW06CisgICAgICAg
IChXZWJDb3JlOjpzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludCk6CisgICAgICAgICogcGxhdGZvcm0v
Y2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3JvbGxiYXJUaGlja25lc3MpOgorICAgICAg
ICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUcmFja1BpZWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0dG9u
KToKKyAgICAgICAgKFdlYkNvcmU6OlNjcm9sbGJhclRoZW1lQ2hyb21pdW1XaW46OnBhaW50VGh1
bWIpOgorICAgICAgICAoV2ViQ29yZTo6U2Nyb2xsYmFyVGhlbWVDaHJvbWl1bVdpbjo6YnV0dG9u
U2l6ZSk6CisgICAgICAgICogcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZSk6CisgICAgICAgIChXZWJDb3Jl
OjpzdG9wU2hhcmVkVGltZXIpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVtL1N1ZGRlblRl
cm1pbmF0aW9uQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6ZGlzYWJsZVN1ZGRlblRl
cm1pbmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9jaHJvbWl1bS9TeXN0ZW1UaW1lQ2hyb21pdW0uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y3VycmVudFRpbWUpOgorICAgICAgICAqIHBsYXRmb3JtL2Nocm9taXVt
L1dyaXRhYmxlRGF0YU9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXcml0YWJsZURhdGFP
YmplY3Q6OnNldERhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0Ny
b3NzUHJvY2Vzc0ZvbnRMb2FkaW5nLm1tOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2No
cm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZvbnRD
b250YWluc0NoYXJhY3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpGaWxsTG9nRm9udCk6CisgICAg
ICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hlTGludXguY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Rm9udENhY2hlOjpnZXRGb250RGF0YUZvckNoYXJhY3RlcnMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpGb250OjpkcmF3R2x5cGhzKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6Rm9udFBsYXRmb3JtRGF0YTo6c2NyaXB0Rm9udFByb3BlcnRpZXMpOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJl
bmRlclN0eWxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9HbHlwaFBh
Z2VUcmVlTm9kZUNocm9taXVtV2luLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxCTVBHbHlw
aHMpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21pdW0u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtTWFjLm1tOgor
ICAgICAgICAoV2ViQ29yZTo6SW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291cmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9TaW1wbGVGb250RGF0YUNocm9taXVtV2luLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybUluaXQpOgorICAg
ICAgICAoV2ViQ29yZTo6U2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKToKKyAgICAgICAg
KFdlYkNvcmU6OlNpbXBsZUZvbnREYXRhOjpwbGF0Zm9ybVdpZHRoRm9yR2x5cGgpOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6VW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6dHJ5VG9QcmVsb2Fk
Rm9udCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250Q3VzdG9tUGxhdGZv
cm1EYXRhLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZvbnRDdXN0b21QbGF0Zm9ybURhdGE6OmZv
bnRQbGF0Zm9ybURhdGEpOgorICAgICAgICAqIHBsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29v
a2llSmFyQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6c2V0Q29va2llcyk6CisgICAg
ICAgIChXZWJDb3JlOjpjb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZVJlcXVlc3RI
ZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OmNvb2tpZXNFbmFibGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OmdldFJhd0Nvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6ZGVsZXRl
Q29va2llKToKKyAgICAgICAgKiBwbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0ROU0Nocm9taXVt
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnByZWZldGNoRE5TKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9QbGF0Zm9ybUJyaWRnZS5oOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9T
UUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwOgorICAgICAgICAoV2ViQ29yZTo6U1FMaXRlRmls
ZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlNRTGl0ZUZp
bGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9j
aHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW1Qb3NpeC5jcHA6CisgICAgICAgIChjaHJv
bWl1bU9wZW4pOgorICAgICAgICAoY2hyb21pdW1EZWxldGUpOgorICAgICAgICAoY2hyb21pdW1B
Y2Nlc3MpOgorICAgICAgICAqIHBsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW1XaW4uY3BwOgorICAgICAgICAqIHBsdWdpbnMvY2hyb21pdW0vUGx1Z2luRGF0YUNo
cm9taXVtLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBsdWdpbkNhY2hlOjpwbHVnaW5zKToKKyAg
ICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlclRoZW1lQ2hyb21pdW1NYWM6OnVzZXNUZXN0TW9kZUZvY3VzUmluZ0NvbG9y
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVNraWE6OmNhcmV0QmxpbmtJbnRlcnZh
bCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJv
bWl1bVdpbjo6cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVj
dGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpzeXN0ZW1Db2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpwYWludEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9t
aXVtV2luOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6Om1lbnVMaXN0QnV0
dG9uV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFp
bnRNZW51TGlzdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludFRleHRGaWVsZEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lQ2hy
b21pdW1XaW46OnBhaW50SW5uZXJTcGluQnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRoZW1lQ2hyb21pdW1XaW46OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAqIHN0b3JhZ2Uv
Y2hyb21pdW0vSURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2UuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpJREJGYWN0b3J5QmFja2VuZEludGVyZmFjZTo6fklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNl
KToKKyAgICAgICAgKiBzdG9yYWdlL2Nocm9taXVtL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNG
cm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgpOgorCiAyMDExLTAxLTE5ICBEYXZpZCBELiBL
aWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgPGh0dHA6Ly93ZWJraXQub3Jn
L2IvNTI2ODc+IENsZWFuIHVwIEZyYW1lTG9hZGVyIG1ldGhvZHMgZm9yIFBMVUdJTl9QUk9YWV9G
T1JfVklERU8KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUuZ3lwaQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNl
L1dlYkNvcmUvV2ViQ29yZS5neXBpCSh3b3JraW5nIGNvcHkpCkBAIC0yNDQwLDcgKzI0NDAsNiBA
QAogICAgICAgICAgICAgJ3BsYXRmb3JtL2NmL1NjaGVkdWxlUGFpci5jcHAnLAogICAgICAgICAg
ICAgJ3BsYXRmb3JtL2NmL1NjaGVkdWxlUGFpci5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9j
Zi9TaGFyZWRCdWZmZXJDRi5jcHAnLAotICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0No
cm9taXVtQnJpZGdlLmgnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5jcHAnLAogICAgICAgICAgICAgJ3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVt
RGF0YU9iamVjdC5oJywKICAgICAgICAgICAgICdwbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURh
dGFPYmplY3RMZWdhY3kuY3BwJywKQEAgLTI0NzcsNiArMjQ3Niw3IEBACiAgICAgICAgICAgICAn
cGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcCcsCiAgICAgICAg
ICAgICAncGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZFByaXZhdGUuaCcsCisgICAgICAgICAg
ICAncGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1CcmlkZ2UuaCcsCiAgICAgICAgICAgICAncGxh
dGZvcm0vY2hyb21pdW0vUGxhdGZvcm1DdXJzb3IuaCcsCiAgICAgICAgICAgICAncGxhdGZvcm0v
Y2hyb21pdW0vUGxhdGZvcm1LZXlib2FyZEV2ZW50Q2hyb21pdW0uY3BwJywKICAgICAgICAgICAg
ICdwbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybVNjcmVlbkNocm9taXVtLmNwcCcsCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1NoZWxsLmNwcAkocmV2
aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9WOERPTVdpbmRvd1No
ZWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODQsNyArODQsNyBAQCBzdGF0aWMgdm9pZCByZXBv
cnRGYXRhbEVycm9ySW5WOChjb25zdCBjCiAgICAgLy8gRklYTUU6IGNsZWFuIHVwIFY4UHJveHkg
YW5kIGRpc2FibGUgSmF2YVNjcmlwdC4KICAgICBpbnQgbWVtb3J5VXNhZ2VNQiA9IC0xOwogI2lm
IFBMQVRGT1JNKENIUk9NSVVNKQotICAgIG1lbW9yeVVzYWdlTUIgPSBDaHJvbWl1bUJyaWRnZTo6
YWN0dWFsTWVtb3J5VXNhZ2VNQigpOworICAgIG1lbW9yeVVzYWdlTUIgPSBQbGF0Zm9ybUJyaWRn
ZTo6YWN0dWFsTWVtb3J5VXNhZ2VNQigpOwogI2VuZGlmCiAgICAgcHJpbnRmKCJWOCBlcnJvcjog
JXMgKCVzKS4gIEN1cnJlbnQgbWVtb3J5IHVzYWdlOiAlZCBNQlxuIiwgbWVzc2FnZSwgbG9jYXRp
b24sIG1lbW9yeVVzYWdlTUIpOwogICAgIGhhbmRsZUZhdGFsRXJyb3JJblY4KCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2VHcm91cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlR3JvdXAuY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJD
b3JlL3BhZ2UvUGFnZUdyb3VwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQAog
I2luY2x1ZGUgIlN0b3JhZ2VOYW1lc3BhY2UuaCIKIAogI2lmIFBMQVRGT1JNKENIUk9NSVVNKQot
I2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIK
ICNlbmRpZgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0xMjgsNyArMTI4LDcgQEAgYm9vbCBQ
YWdlR3JvdXA6OmlzTGlua1Zpc2l0ZWQoTGlua0hhc2ggdgogewogI2lmIFBMQVRGT1JNKENIUk9N
SVVNKQogICAgIC8vIFVzZSBDaHJvbWl1bSdzIGJ1aWx0LWluIHZpc2l0ZWQgbGluayBkYXRhYmFz
ZS4KLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQodmlzaXRlZExpbmtI
YXNoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQodmlzaXRlZExp
bmtIYXNoKTsKICNlbHNlCiAgICAgaWYgKCFtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZCkgewogICAg
ICAgICBtX3Zpc2l0ZWRMaW5rc1BvcHVsYXRlZCA9IHRydWU7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hbmRyb2lkL1BsYXRmb3JtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYW5kcm9pZC9QbGF0Zm9ybUJyaWRnZS5oCShyZXZpc2lvbiA3NjE3
MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2FuZHJvaWQvUGxhdGZvcm1CcmlkZ2UuaAko
d29ya2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBjbGFzcyBXaWRnZXQ7CiAKIC8vIEFuIGlu
dGVyZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxheWVyLCB3aGljaCBoYXMgdGhlIGFiaWxpdHkgdG8g
YW5zd2VyCiAvLyBxdWVzdGlvbnMgYWJvdXQgdGhlIHN5c3RlbSBhbmQgc28gb24uLi4KLS8vIFRo
aXMgaXMgdmVyeSBzaW1pbGFyIHRvIENocm9taXVtQnJpZGdlIGFuZCB0aGUgdHdvIGFyZSBsaWtl
bHkgdG8gY29udmVyZ2UKKy8vIFRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIGNocm9taXVtL1BsYXRm
b3JtQnJpZGdlIGFuZCB0aGUgdHdvIGFyZSBsaWtlbHkgdG8gY29udmVyZ2UKIC8vIGluIHRoZSBm
dXR1cmUuCiAvLwogLy8gVGhlIG1ldGhvZHMgaW4gdGhpcyBjbGFzcyBhbGwgbmVlZCB0byByZWFj
aCBhY3Jvc3MgYSBKTkkgbGF5ZXIgdG8gdGhlIEphdmEgVk0KSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21pdW0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21p
dW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2Nocm9taXVtL0F1ZGlvQnVzQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsy
OSw3IEBACiAjaW5jbHVkZSAiQXVkaW9CdXMuaCIKIAogI2luY2x1ZGUgIkF1ZGlvRmlsZVJlYWRl
ci5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Ccmlk
Z2UuaCIKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CkBAIC0zOCwxMiArMzgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAvLyBQYXNzT3duUHRy
PEF1ZGlvQnVzPiBBdWRpb0J1czo6bG9hZFBsYXRmb3JtUmVzb3VyY2UoY29uc3QgY2hhciogbmFt
ZSwgZG91YmxlIHNhbXBsZVJhdGUpCiAvLyB7Ci0vLyAgICAgcmV0dXJuIENocm9taXVtQnJpZGdl
Ojpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKG5hbWUsIHNhbXBsZVJhdGUpOworLy8gICAgIHJl
dHVybiBQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShuYW1lLCBzYW1w
bGVSYXRlKTsKIC8vIH0KIAogUGFzc093blB0cjxBdWRpb0J1cz4gY3JlYXRlQnVzRnJvbUluTWVt
b3J5QXVkaW9GaWxlKGNvbnN0IHZvaWQqIGRhdGEsIHNpemVfdCBkYXRhU2l6ZSwgYm9vbCBtaXhU
b01vbm8sIGRvdWJsZSBzYW1wbGVSYXRlKQogewotICAgIE93blB0cjxBdWRpb0J1cz4gYXVkaW9C
dXMgPSBDaHJvbWl1bUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YShzdGF0aWNfY2FzdDxjb25z
dCBjaGFyKj4oZGF0YSksIGRhdGFTaXplLCBzYW1wbGVSYXRlKTsKKyAgICBPd25QdHI8QXVkaW9C
dXM+IGF1ZGlvQnVzID0gUGxhdGZvcm1CcmlkZ2U6OmRlY29kZUF1ZGlvRmlsZURhdGEoc3RhdGlj
X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEpLCBkYXRhU2l6ZSwgc2FtcGxlUmF0ZSk7CiAgICAgaWYg
KGF1ZGlvQnVzLT5udW1iZXJPZkNoYW5uZWxzKCkgPT0gMiAmJiBtaXhUb01vbm8pIHsKICAgICAg
ICAgT3duUHRyPEF1ZGlvQnVzPiBtb25vQXVkaW9CdXMgPSBhZG9wdFB0cihuZXcgQXVkaW9CdXMo
MSwgYXVkaW9CdXMtPmxlbmd0aCgpKSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL0Nocm9taXVtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vQ2hyb21pdW1CcmlkZ2UuaAkocmV2aXNpb24gNzYxNzMpCisrKyBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bUJyaWRnZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xLDM1MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29n
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zIGFyZQotICogbWV0OgotICoKLSAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCi0g
KiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyCi0gKiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCi0gKiBkaXN0cmlidXRpb24uCi0gKiAgICAgKiBOZWl0
aGVyIHRoZSBuYW1lIG9mIEdvb2dsZSBJbmMuIG5vciB0aGUgbmFtZXMgb2YgaXRzCi0gKiBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQgZnJvbQotICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZ
UklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCi0gKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBU
TywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SCi0gKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgVEhFIENPUFlSSUdIVAotICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCi0gKiBTUEVDSUFMLCBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1J
VEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQotICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgQ2hyb21pdW1CcmlkZ2VfaAotI2RlZmlu
ZSBDaHJvbWl1bUJyaWRnZV9oCi0KLSNpZiBFTkFCTEUoV0VCX0FVRElPKQotI2luY2x1ZGUgIkF1
ZGlvQnVzLmgiCi0jZW5kaWYKLQotI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKLSNpbmNsdWRlICJJ
bWFnZVNvdXJjZS5oIgotI2luY2x1ZGUgIkxpbmtIYXNoLmgiCi0jaW5jbHVkZSAiUGFzc1JlZlB0
ci5oIgotI2luY2x1ZGUgIlBhc3RlYm9hcmRQcml2YXRlLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0
YS5oIgotCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5o
PgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotdHlwZWRlZiBzdHJ1Y3QgTlBPYmplY3QgTlBP
YmplY3Q7Ci10eXBlZGVmIHN0cnVjdCBfTlBQIE5QUF90OwotdHlwZWRlZiBOUFBfdCogTlBQOwot
Ci0jaWYgT1MoREFSV0lOKQotdHlwZWRlZiBzdHJ1Y3QgQ0dGb250KiBDR0ZvbnRSZWY7Ci10eXBl
ZGVmIHVpbnRwdHJfdCBBVFNGb250Q29udGFpbmVyUmVmOwotI2lmZGVmIF9fT0JKQ19fCi1AY2xh
c3MgTlNGb250OwotI2Vsc2UKLWNsYXNzIE5TRm9udDsKLSNlbmRpZgotI2VuZGlmIC8vIE9TKERB
UldJTikKLQotI2lmIE9TKFdJTkRPV1MpCi10eXBlZGVmIHN0cnVjdCBIRk9OVF9fKiBIRk9OVDsK
LSNlbmRpZgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLSAgICBjbGFzcyBDbGlwYm9hcmREYXRh
OwotICAgIGNsYXNzIENvbG9yOwotICAgIGNsYXNzIEN1cnNvcjsKLSAgICBjbGFzcyBEb2N1bWVu
dDsKLSAgICBjbGFzcyBGcmFtZTsKLSAgICBjbGFzcyBHZW9sb2NhdGlvblNlcnZpY2VCcmlkZ2U7
Ci0gICAgY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQ2hyb21pdW07Ci0gICAgY2xhc3MgR3JhcGhp
Y3NDb250ZXh0OwotICAgIGNsYXNzIEltYWdlOwotICAgIGNsYXNzIElEQkZhY3RvcnlCYWNrZW5k
SW50ZXJmYWNlOwotICAgIGNsYXNzIElEQktleTsKLSAgICBjbGFzcyBJbnRSZWN0OwotICAgIGNs
YXNzIEtVUkw7Ci0gICAgY2xhc3MgU2VyaWFsaXplZFNjcmlwdFZhbHVlOwotICAgIGNsYXNzIFdp
ZGdldDsKLQotICAgIHN0cnVjdCBDb29raWU7Ci0gICAgc3RydWN0IEZvbnRSZW5kZXJTdHlsZTsK
LQotICAgIC8vIEFuIGludGVyZmFjZSB0byB0aGUgZW1iZWRkaW5nIGxheWVyLCB3aGljaCBoYXMg
dGhlIGFiaWxpdHkgdG8gYW5zd2VyCi0gICAgLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0g
YW5kIHNvIG9uLi4uCi0KLSAgICBjbGFzcyBDaHJvbWl1bUJyaWRnZSB7Ci0gICAgcHVibGljOgot
ICAgICAgICAvLyBDYWNoZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgdm9pZCBjYWNoZU1ldGFkYXRh
KGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHJlc3BvbnNlVGltZSwgY29uc3QgVmVjdG9yPGNoYXI+
Jik7Ci0KLSAgICAgICAgLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIGJvb2wgY2xpcGJv
YXJkSXNGb3JtYXRBdmFpbGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEZvcm1hdCwg
UGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlcik7Ci0KLSAgICAgICAgc3RhdGljIFN0
cmluZyBjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRC
dWZmZXIpOwotICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7Ci0KLSAgICAgICAgLy8g
T25seSB0aGUgY2xpcGJvYXJkUmVhZCBmdW5jdGlvbnMgdGFrZSBhIGJ1ZmZlciBhcmd1bWVudCBi
ZWNhdXNlCi0gICAgICAgIC8vIENocm9taXVtIGN1cnJlbnRseSB1c2VzIGEgZGlmZmVyZW50IHRl
Y2huaXF1ZSB0byB3cml0ZSB0byBhbHRlcm5hdGUKLSAgICAgICAgLy8gY2xpcGJvYXJkIGJ1ZmZl
cnMuCi0gICAgICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKGNvbnN0IFN0
cmluZyYsIGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmLCBib29sKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgY2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsK
LSAgICAgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciwg
Y29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYpOwotICAgICAgICBzdGF0aWMgdm9pZCBjbGlwYm9h
cmRXcml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEsIGNvbnN0
IFN0cmluZyYgbWV0YWRhdGEpOwotCi0gICAgICAgIC8vIEludGVyZmFjZSBmb3IgaGFuZGxpbmcg
Y29weSBhbmQgcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBzZWxlY3Rpb24gY29weS4KLSAgICAg
ICAgc3RhdGljIEhhc2hTZXQ8U3RyaW5nPiBjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMp
OwotICAgICAgICBzdGF0aWMgYm9vbCBjbGlwYm9hcmRSZWFkRGF0YShQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyLCBjb25zdCBTdHJpbmcmIHR5cGUsIFN0cmluZyYgZGF0YSwgU3Ry
aW5nJiBtZXRhZGF0YSk7Ci0gICAgICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBjbGlwYm9hcmRS
ZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIpOwotCi0gICAg
ICAgIC8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIHNldENvb2tpZXMoY29uc3Qg
RG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB2YWx1ZSk7Ci0gICAgICAgIHN0
YXRpYyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICAg
ICAgc3RhdGljIFN0cmluZyBjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1
bWVudCosIGNvbnN0IEtVUkwmKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcmF3Q29va2llcyhjb25z
dCBEb2N1bWVudCosIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4mKTsKLSAgICAgICAg
c3RhdGljIHZvaWQgZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpOwotICAgICAgICBzdGF0aWMgYm9vbCBjb29raWVz
RW5hYmxlZChjb25zdCBEb2N1bWVudCopOwotCi0gICAgICAgIC8vIEROUyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAg
ICAgIHN0YXRpYyB2b2lkIHByZWZldGNoRE5TKGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpOwotCi0g
ICAgICAgIC8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIHJldmVhbEZvbGRlcklu
T1MoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGZpbGVFeGlzdHMoY29uc3Qg
U3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJik7
Ci0gICAgICAgIHN0YXRpYyBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYp
OwotICAgICAgICBzdGF0aWMgYm9vbCBnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmLCBsb25nIGxv
bmcmIHJlc3VsdCk7Ci0gICAgICAgIHN0YXRpYyBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1l
KGNvbnN0IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBk
aXJlY3RvcnlOYW1lKGNvbnN0IFN0cmluZyYgcGF0aCk7Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcg
cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KGNvbnN0IFN0cmluZyYgcGF0aCwgY29uc3QgU3RyaW5n
JiBjb21wb25lbnQpOwotICAgICAgICBzdGF0aWMgYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29u
c3QgU3RyaW5nJiBwYXRoKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBnZXRBYnNvbHV0ZVBhdGgo
Y29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHN0YXRpYyBib29sIGlzRGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYpOwotICAgICAgICBzdGF0aWMgS1VSTCBmaWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYp
OwotICAgICAgICBzdGF0aWMgUGxhdGZvcm1GaWxlSGFuZGxlIG9wZW5GaWxlKGNvbnN0IFN0cmlu
ZyYgcGF0aCwgRmlsZU9wZW5Nb2RlKTsKLSAgICAgICAgc3RhdGljIHZvaWQgY2xvc2VGaWxlKFBs
YXRmb3JtRmlsZUhhbmRsZSYpOwotICAgICAgICBzdGF0aWMgbG9uZyBsb25nIHNlZWtGaWxlKFBs
YXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4pOwotICAg
ICAgICBzdGF0aWMgYm9vbCB0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlLCBsb25nIGxv
bmcgb2Zmc2V0KTsKLSAgICAgICAgc3RhdGljIGludCByZWFkRnJvbUZpbGUoUGxhdGZvcm1GaWxl
SGFuZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIGludCB3cml0
ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5ndGgp
OwotCi0gICAgICAgIC8vIEZvbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgT1MoV0lORE9XUykKLSAgICAgICAgc3Rh
dGljIGJvb2wgZW5zdXJlRm9udExvYWRlZChIRk9OVCBmb250KTsKLSNlbmRpZgotI2lmIE9TKExJ
TlVYKSB8fCBPUyhGUkVFQlNEKQotICAgICAgICBzdGF0aWMgdm9pZCBnZXRSZW5kZXJTdHlsZUZv
clN0cmlrZShjb25zdCBjaGFyKiBmYW1pbHksIGludCBzaXplQW5kU3R5bGUsIEZvbnRSZW5kZXJT
dHlsZSogcmVzdWx0KTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hh
cmFjdGVycyhjb25zdCBVQ2hhciosIHNpemVfdCBudW1DaGFyYWN0ZXJzKTsKLSNlbmRpZgotI2lm
IE9TKERBUldJTikKLSAgICAgICAgc3RhdGljIGJvb2wgbG9hZEZvbnQoTlNGb250KiBzcmNGb250
LCBBVFNGb250Q29udGFpbmVyUmVmKiBvdXQpOwotI2VuZGlmCi0KLSAgICAgICAgLy8gRm9ybXMg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQgbm90aWZ5Rm9ybVN0YXRlQ2hhbmdlZChjb25zdCBE
b2N1bWVudCopOwotCi0gICAgICAgIC8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIC8vIFJldHVybnMg
YSBoYW5kbGUgdG8gdGhlIERCIGZpbGUgYW5kIG9vcHRpb25hbGx5IGEgaGFuZGxlIHRvIGl0cyBj
b250YWluaW5nIGRpcmVjdG9yeQotICAgICAgICBzdGF0aWMgUGxhdGZvcm1GaWxlSGFuZGxlIGRh
dGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGbGVOYW1lLCBpbnQgZGVzaXJlZEZsYWdz
KTsKLSAgICAgICAgLy8gUmV0dXJucyBhIFNRTGl0ZSBjb2RlIChTUUxJVEVfT0sgPSAwLCBvbiBz
dWNjZXNzKQotICAgICAgICBzdGF0aWMgaW50IGRhdGFiYXNlRGVsZXRlRmlsZShjb25zdCBTdHJp
bmcmIHZmc0ZpbGVOYW1lLCBib29sIHN5bmNEaXIgPSBmYWxzZSk7Ci0gICAgICAgIC8vIFJldHVy
bnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIERCIGZpbGUKLSAgICAgICAgc3RhdGljIGxvbmcgZGF0
YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKTsKLSAgICAg
ICAgLy8gUmV0dXJucyB0aGUgc2l6ZSBvZiB0aGUgREIgZmlsZQotICAgICAgICBzdGF0aWMgbG9u
ZyBsb25nIGRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSk7Ci0K
LSAgICAgICAgLy8gSW5kZXhlZERCIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8SURCRmFj
dG9yeUJhY2tlbmRJbnRlcmZhY2U+IGlkYkZhY3RvcnkoKTsKLSAgICAgICAgc3RhdGljIHZvaWQg
aWRiU2h1dGRvd24oKTsKLSAgICAgICAgLy8gRXh0cmFjdHMga2V5UGF0aCBmcm9tIHZhbHVlcyBh
bmQgcmV0dXJucyB0aGUgY29ycmVzcG9uZGluZyBrZXlzLgotICAgICAgICBzdGF0aWMgdm9pZCBj
cmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8U2VyaWFsaXplZFNjcmlwdFZhbHVlPiA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCwgVmVjdG9yPFJlZlB0cjxJREJLZXk+ID4mIGtleXMpOwotCi0gICAgICAgIC8vIEphdmFT
Y3JpcHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tCi0gICAgICAgIHN0YXRpYyB2b2lkIG5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUqKTsK
LSAgICAgICAgc3RhdGljIGJvb2wgYWxsb3dTY3JpcHREZXNwaXRlU2V0dGluZ3MoY29uc3QgS1VS
TCYgZG9jdW1lbnRVUkwpOwotCi0gICAgICAgIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRp
YyBTdHJpbmcgc2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3RyaW5nKHVuc2lnbmVkIGtleVNp
emVJbmRleCwgY29uc3QgU3RyaW5nJiBjaGFsbGVuZ2UsIGNvbnN0IEtVUkwmIHVybCk7Ci0KLSAg
ICAgICAgLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIFN0cmluZyBjb21wdXRlZERlZmF1
bHRMYW5ndWFnZSgpOwotCi0gICAgICAgIC8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBi
b29sIGxheW91dFRlc3RNb2RlKCk7Ci0KLSAgICAgICAgLy8gTWVtb3J5IC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
Ly8gUmV0dXJucyB0aGUgY3VycmVudCBzcGFjZSBhbGxvY2F0ZWQgZm9yIHRoZSBwYWdlZmlsZSwg
aW4gTUIuCi0gICAgICAgIC8vIFRoYXQgaXMgY29tbWl0dGVkIHNpemUgZm9yIFdpbmRvd3MgYW5k
IHZpcnR1YWwgbWVtb3J5IHNpemUgZm9yIFBPU0lYCi0gICAgICAgIHN0YXRpYyBpbnQgbWVtb3J5
VXNhZ2VNQigpOwotCi0gICAgICAgIC8vIFNhbWUgYXMgYWJvdmUsIGJ1dCBhbHdheXMgcmV0dXJu
cyBhY3R1YWwgdmFsdWUsIHdpdGhvdXQgYW55IGNhY2hlcy4KLSAgICAgICAgc3RhdGljIGludCBh
Y3R1YWxNZW1vcnlVc2FnZU1CKCk7Ci0KLSAgICAgICAgLy8gTWltZVR5cGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAg
c3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5
cGUpOwotICAgICAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLSAgICAgICAgc3RhdGljIGJvb2wgaXNTdXBwb3J0ZWRO
b25JbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOwotICAgICAgICBzdGF0aWMg
U3RyaW5nIG1pbWVUeXBlRm9yRXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgZmlsZUV4dGVuc2lvbik7
Ci0gICAgICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIGZp
bGVQYXRoKTsKLSAgICAgICAgc3RhdGljIFN0cmluZyBwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKLQotICAgICAgICAvLyBQbHVnaW4gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot
ICAgICAgICBzdGF0aWMgYm9vbCBwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbklu
Zm8+Kik7Ci0gICAgICAgIHN0YXRpYyBOUE9iamVjdCogcGx1Z2luU2NyaXB0YWJsZU9iamVjdChX
aWRnZXQqKTsKLSAgICAgICAgc3RhdGljIGJvb2wgcG9wdXBzQWxsb3dlZChOUFApOwotCi0gICAg
ICAgIC8vIFJlc291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCi0gICAgICAgIHN0YXRpYyBQYXNzUmVmUHRyPEltYWdlPiBsb2Fk
UGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpOwotCi0jaWYgRU5BQkxFKFdF
Ql9BVURJTykKLSAgICAgICAgc3RhdGljIFBhc3NPd25QdHI8QXVkaW9CdXM+IGxvYWRQbGF0Zm9y
bUF1ZGlvUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSwgZG91YmxlIHNhbXBsZVJhdGUpOwotICAg
ICAgICBzdGF0aWMgUGFzc093blB0cjxBdWRpb0J1cz4gZGVjb2RlQXVkaW9GaWxlRGF0YShjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUpOwotI2VuZGlmCi0K
LSAgICAgICAgLy8gU2FuZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIGJvb2wgc2FuZGJveEVuYWJs
ZWQoKTsKLQotICAgICAgICAvLyBTY3JlZW4gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgaW50IHNjcmVl
bkRlcHRoKFdpZGdldCopOwotICAgICAgICBzdGF0aWMgaW50IHNjcmVlbkRlcHRoUGVyQ29tcG9u
ZW50KFdpZGdldCopOwotICAgICAgICBzdGF0aWMgYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lk
Z2V0Kik7Ci0gICAgICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7Ci0gICAg
ICAgIHN0YXRpYyBJbnRSZWN0IHNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0Kik7Ci0KLSAgICAg
ICAgLy8gU2hhcmVkVGltZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJl
ZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKTsKLSAgICAgICAgc3RhdGljIHZvaWQgc2V0U2hhcmVk
VGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpOwotICAgICAgICBzdGF0aWMgdm9pZCBzdG9w
U2hhcmVkVGltZXIoKTsKLQotICAgICAgICAvLyBTdGF0c0NvdW50ZXJzIC0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMg
dm9pZCBkZWNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSk7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKTsKLSAgICAg
ICAgc3RhdGljIHZvaWQgaGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGlu
dCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCk7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1w
bGUsIGludCBib3VuZGFyeVZhbHVlKTsKLQotICAgICAgICAvLyBTdWRkZW4gVGVybWluYXRpb24K
LSAgICAgICAgc3RhdGljIHZvaWQgc3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxl
ZCk7Ci0KLSAgICAgICAgLy8gU3lzdGVtVGltZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgICAgICAgc3RhdGljIGRvdWJsZSBjdXJy
ZW50VGltZSgpOwotCi0gICAgICAgIC8vIFRoZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0jaWYgT1MoV0lORE9XUykKLSAg
ICAgICAgc3RhdGljIHZvaWQgcGFpbnRCdXR0b24oCi0gICAgICAgICAgICBHcmFwaGljc0NvbnRl
eHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0
Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50TWVudUxpc3QoCi0gICAgICAgICAgICBHcmFw
aGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25z
dCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50U2Nyb2xsYmFyQXJyb3coCi0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUs
IGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFpbnRTY3JvbGxiYXJUaHVt
YigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGlu
dCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFp
bnRTY3JvbGxiYXJUcmFjaygKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0
LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmLCBjb25zdCBJbnRS
ZWN0JiBhbGlnblJlY3QpOwotICAgICAgICBzdGF0aWMgdm9pZCBwYWludFNwaW5CdXR0b24oCi0g
ICAgICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xh
c3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7Ci0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50VGV4
dEZpZWxkKAotICAgICAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IENvbG9yJiwgYm9vbCBm
aWxsQ29udGVudEFyZWEsIGJvb2wgZHJhd0VkZ2VzKTsKLSAgICAgICAgc3RhdGljIHZvaWQgcGFp
bnRUcmFja2JhcigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQg
c3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKLSAgICAgICAgc3RhdGlj
IHZvaWQgcGFpbnRQcm9ncmVzc0JhcigKLSAgICAgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGNv
bnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0IEludFJlY3QmIHZhbHVlUmVjdCwgYm9vbCBkZXRl
cm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25kcyk7Ci0jZWxpZiBPUyhMSU5VWCkKLSAgICAg
ICAgLy8gVGhlIFVJIHBhcnQgd2hpY2ggaXMgYmVpbmcgYWNjZXNzZWQuCi0gICAgICAgIGVudW0g
VGhlbWVQYXJ0IHsKLSAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3csCi0gICAgICAg
ICAgICBQYXJ0U2Nyb2xsYmFyTGVmdEFycm93LAotICAgICAgICAgICAgUGFydFNjcm9sbGJhclJp
Z2h0QXJyb3csCi0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKLSAgICAgICAgICAg
IFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWIsCi0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFy
VmVydGljYWxUaHVtYiwKLSAgICAgICAgICAgIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2ss
Ci0gICAgICAgICAgICBQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaywKLSAgICAgICAgfTsKLQot
ICAgICAgICAvLyBUaGUgY3VycmVudCBzdGF0ZSBvZiB0aGUgYXNzb2NpYXRlZCBQYXJ0LgotICAg
ICAgICBlbnVtIFRoZW1lUGFpbnRTdGF0ZSB7Ci0gICAgICAgICAgICBTdGF0ZURpc2FibGVkLAot
ICAgICAgICAgICAgU3RhdGVIb3ZlciwKLSAgICAgICAgICAgIFN0YXRlTm9ybWFsLAotICAgICAg
ICAgICAgU3RhdGVQcmVzc2VkLAotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBTY3JvbGxi
YXJUcmFja0V4dHJhUGFyYW1zIHsKLSAgICAgICAgICAgIC8vIFRoZSBib3VuZHMgb2YgdGhlIGVu
dGlyZSB0cmFjaywgYXMgb3Bwb3NlZCB0byB0aGUgcGFydCBiZWluZyBwYWludGVkLgotICAgICAg
ICAgICAgaW50IHRyYWNrWDsKLSAgICAgICAgICAgIGludCB0cmFja1k7Ci0gICAgICAgICAgICBp
bnQgdHJhY2tXaWR0aDsKLSAgICAgICAgICAgIGludCB0cmFja0hlaWdodDsKLSAgICAgICAgfTsK
LQotICAgICAgICB1bmlvbiBUaGVtZVBhaW50RXh0cmFQYXJhbXMgewotICAgICAgICAgICAgU2Ny
b2xsYmFyVHJhY2tFeHRyYVBhcmFtcyBzY3JvbGxiYXJUcmFjazsKLSAgICAgICAgfTsKLQotICAg
ICAgICAvLyBHZXRzIHRoZSBzaXplIG9mIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LiBGb3IgdmFyaWFi
bGUgc2l6ZWQgaXRlbXMKLSAgICAgICAgLy8gbGlrZSB2ZXJ0aWNhbCBzY3JvbGxiYXIgdGh1bWJz
LCB0aGUgd2lkdGggd2lsbCBiZSB0aGUgcmVxdWlyZWQgd2lkdGggb2YKLSAgICAgICAgLy8gdGhl
IHRyYWNrIHdoaWxlIHRoZSBoZWlnaHQgd2lsbCBiZSB0aGUgbWluaW11bSBoZWlnaHQuCi0gICAg
ICAgIHN0YXRpYyBJbnRTaXplIGdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0KTsKLSAgICAgICAg
Ly8gUGFpbnQgdGhlIGdpdmVuIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LgotICAgICAgICBzdGF0aWMg
dm9pZCBwYWludFRoZW1lUGFydChHcmFwaGljc0NvbnRleHQqLCBUaGVtZVBhcnQsIFRoZW1lUGFp
bnRTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFRoZW1lUGFpbnRFeHRyYVBhcmFtcyopOwot
I2VsaWYgT1MoREFSV0lOKQotICAgICAgICBlbnVtIFRoZW1lUGFpbnRTdGF0ZSB7Ci0gICAgICAg
ICAgICBTdGF0ZURpc2FibGVkLAotICAgICAgICAgICAgU3RhdGVJbmFjdGl2ZSwKLSAgICAgICAg
ICAgIFN0YXRlQWN0aXZlLAotICAgICAgICAgICAgU3RhdGVQcmVzc2VkLAotICAgICAgICB9Owot
Ci0gICAgICAgIGVudW0gVGhlbWVQYWludFNpemUgewotICAgICAgICAgICAgU2l6ZVJlZ3VsYXIs
Ci0gICAgICAgICAgICBTaXplU21hbGwsCi0gICAgICAgIH07Ci0KLSAgICAgICAgZW51bSBUaGVt
ZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24gewotICAgICAgICAgICAgU2Nyb2xsYmFyT3JpZW50
YXRpb25Ib3Jpem9udGFsLAotICAgICAgICAgICAgU2Nyb2xsYmFyT3JpZW50YXRpb25WZXJ0aWNh
bCwKLSAgICAgICAgfTsKLQotICAgICAgICBlbnVtIFRoZW1lUGFpbnRTY3JvbGxiYXJQYXJlbnQg
ewotICAgICAgICAgICAgU2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldywKLSAgICAgICAgICAgIFNj
cm9sbGJhclBhcmVudFJlbmRlckxheWVyLAotICAgICAgICB9OwotCi0gICAgICAgIHN0cnVjdCBU
aGVtZVBhaW50U2Nyb2xsYmFySW5mbyB7Ci0gICAgICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFy
T3JpZW50YXRpb24gb3JpZW50YXRpb247Ci0gICAgICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFy
UGFyZW50IHBhcmVudDsKLSAgICAgICAgICAgIGludCBtYXhWYWx1ZTsKLSAgICAgICAgICAgIGlu
dCBjdXJyZW50VmFsdWU7Ci0gICAgICAgICAgICBpbnQgdmlzaWJsZVNpemU7Ci0gICAgICAgICAg
ICBpbnQgdG90YWxTaXplOwotICAgICAgICB9OwotCi0gICAgICAgIHN0YXRpYyB2b2lkIHBhaW50
U2Nyb2xsYmFyVGh1bWIoR3JhcGhpY3NDb250ZXh0KiwgVGhlbWVQYWludFN0YXRlLCBUaGVtZVBh
aW50U2l6ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IFRoZW1lUGFpbnRTY3JvbGxiYXJJbmZvJik7
Ci0jZW5kaWYKLQotICAgICAgICAvLyBUcmFjZSBFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICAgICAgICBzdGF0aWMgdm9pZCB0
cmFjZUV2ZW50QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4
dHJhKTsKLSAgICAgICAgc3RhdGljIHZvaWQgdHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1l
LCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpOwotCi0gICAgICAgIC8vIFZpc2l0ZWQgbGlu
a3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
Ci0gICAgICAgIHN0YXRpYyBMaW5rSGFzaCB2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVy
bCwgdW5zaWduZWQgbGVuZ3RoKTsKLSAgICAgICAgc3RhdGljIExpbmtIYXNoIHZpc2l0ZWRMaW5r
SGFzaChjb25zdCBLVVJMJiBiYXNlLCBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCk7
Ci0gICAgICAgIHN0YXRpYyBib29sIGlzTGlua1Zpc2l0ZWQoTGlua0hhc2gpOwotICAgIH07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLQotI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9DaHJvbWl1bURhdGFPYmplY3RMZWdhY3kuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0Nocm9taXVtRGF0YU9iamVjdExl
Z2FjeS5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
OSArMzEsOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkNocm9taXVtRGF0YU9i
amVjdExlZ2FjeS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJD
bGlwYm9hcmRNaW1lVHlwZXMuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMzIsNyArMTMy
LDcgQEAgU3RyaW5nIENocm9taXVtRGF0YU9iamVjdExlZ2FjeTo6Z2V0RGF0YQogICAgICAgICAg
ICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgp
ID8KICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoK
ICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAg
ICAgICAgICBTdHJpbmcgdGV4dCA9IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5U
ZXh0KGJ1ZmZlcik7CisgICAgICAgICAgICBTdHJpbmcgdGV4dCA9IFBsYXRmb3JtQnJpZGdlOjpj
bGlwYm9hcmRSZWFkUGxhaW5UZXh0KGJ1ZmZlcik7CiAgICAgICAgICAgICBzdWNjZXNzID0gIXRl
eHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIHRleHQ7CiAgICAgICAgIH0KQEAgLTE1
OCw3ICsxNTgsNyBAQCBTdHJpbmcgQ2hyb21pdW1EYXRhT2JqZWN0TGVnYWN5OjpnZXREYXRhCiAg
ICAgICAgICAgICAgICAgUGFzdGVib2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwogICAgICAg
ICAgICAgU3RyaW5nIGh0bWxUZXh0OwogICAgICAgICAgICAgS1VSTCBzb3VyY2VVUkw7Ci0gICAg
ICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmaHRtbFRl
eHQsICZzb3VyY2VVUkwpOworICAgICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJl
YWRIVE1MKGJ1ZmZlciwgJmh0bWxUZXh0LCAmc291cmNlVVJMKTsKICAgICAgICAgICAgIHN1Y2Nl
c3MgPSAhaHRtbFRleHQuaXNFbXB0eSgpOwogICAgICAgICAgICAgcmV0dXJuIGh0bWxUZXh0Owog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0
YUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9EcmFnRGF0YUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsMTYgKzMwLDE2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRHJh
Z0RhdGEuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2hyb21p
dW1EYXRhT2JqZWN0LmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkTWltZVR5cGVzLmgiCiAjaW5jbHVk
ZSAiRG9jdW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKICNpbmNsdWRl
ICJGcmFtZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNs
dWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKKyNpbmNsdWRlICJtYXJrdXAuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC02Myw3ICs2Myw3IEBAIFN0cmluZyBEcmFnRGF0YTo6YXNVUkwoRnJh
bWUqLCBGaWxlbmFtZUMKICAgICAgICAgaWYgKHRpdGxlKQogICAgICAgICAgICAgKnRpdGxlID0g
bV9wbGF0Zm9ybURyYWdEYXRhLT51cmxUaXRsZSgpOwogICAgIH0gZWxzZSBpZiAoZmlsZW5hbWVQ
b2xpY3kgPT0gQ29udmVydEZpbGVuYW1lcyAmJiBjb250YWluc0ZpbGVzKCkpIHsKLSAgICAgICAg
dXJsID0gQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoQ2hyb21pdW1CcmlkZ2U6OmdldEFi
c29sdXRlUGF0aChtX3BsYXRmb3JtRHJhZ0RhdGEtPmZpbGVuYW1lcygpWzBdKSk7CisgICAgICAg
IHVybCA9IFBsYXRmb3JtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKFBsYXRmb3JtQnJpZGdlOjpnZXRB
YnNvbHV0ZVBhdGgobV9wbGF0Zm9ybURyYWdEYXRhLT5maWxlbmFtZXMoKVswXSkpOwogICAgIH0K
ICAgICByZXR1cm4gdXJsOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vRmlsZVN5c3RlbUNocm9taXVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9jaHJvbWl1bS9GaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0ZpbGVTeXN0ZW1DaHJvbWl1bS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDg1ICszMSw4NSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkZpbGVTeXN0ZW0uaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgi
CiAjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAog
Ym9vbCBkZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OmRlbGV0ZUZpbGUocGF0aCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpk
ZWxldGVGaWxlKHBhdGgpOwogfQogCiBib29sIGRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0
cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGly
ZWN0b3J5KHBhdGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJl
Y3RvcnkocGF0aCk7CiB9CiAKIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBs
b25nIGxvbmcmIHJlc3VsdCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmdldEZpbGVT
aXplKHBhdGgsIHJlc3VsdCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlU2l6
ZShwYXRoLCByZXN1bHQpOwogfQogCiBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0
IFN0cmluZyYgcGF0aCwgdGltZV90JiByZXN1bHQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJp
ZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShwYXRoLCByZXN1bHQpOworICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgcmVzdWx0KTsKIH0K
IAogdm9pZCByZXZlYWxGb2xkZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICBDaHJv
bWl1bUJyaWRnZTo6cmV2ZWFsRm9sZGVySW5PUyhwYXRoKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6
cmV2ZWFsRm9sZGVySW5PUyhwYXRoKTsKIH0KIAogU3RyaW5nIGRpcmVjdG9yeU5hbWUoY29uc3Qg
U3RyaW5nJiBwYXRoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6ZGlyZWN0b3J5TmFt
ZShwYXRoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUocGF0aCk7
CiB9CiAKIFN0cmluZyBwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRo
LCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6
OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChwYXRoLCBjb21wb25lbnQpOworICAgIHJldHVybiBQ
bGF0Zm9ybUJyaWRnZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCk7
CiB9CiAKIGJvb2wgbWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAg
ICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6Om1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKKyAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6Om1ha2VBbGxEaXJlY3RvcmllcyhwYXRoKTsKIH0KIAogYm9v
bCBmaWxlRXhpc3RzKGNvbnN0IFN0cmluZyYgcGF0aCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1C
cmlkZ2U6OmZpbGVFeGlzdHMocGF0aCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpmaWxl
RXhpc3RzKHBhdGgpOwogfQogCiBQbGF0Zm9ybUZpbGVIYW5kbGUgb3BlbkZpbGUoY29uc3QgU3Ry
aW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1Ccmlk
Z2U6Om9wZW5GaWxlKHBhdGgsIG1vZGUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6b3Bl
bkZpbGUocGF0aCwgbW9kZSk7CiB9CiAKIHZvaWQgY2xvc2VGaWxlKFBsYXRmb3JtRmlsZUhhbmRs
ZSYgaGFuZGxlKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y2xvc2VGaWxlKGhhbmRs
ZSk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjbG9zZUZpbGUoaGFuZGxlKTsKIH0KIAog
bG9uZyBsb25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBv
ZmZzZXQsIEZpbGVTZWVrT3JpZ2luIG9yaWdpbikKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1Ccmlk
Z2U6OnNlZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4pOworICAgIHJldHVybiBQbGF0Zm9y
bUJyaWRnZTo6c2Vla0ZpbGUoaGFuZGxlLCBvZmZzZXQsIG9yaWdpbik7CiB9CiAKIGJvb2wgdHJ1
bmNhdGVGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQpCiB7
Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp0cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQp
OworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6dHJ1bmNhdGVGaWxlKGhhbmRsZSwgb2Zmc2V0
KTsKIH0KIAogaW50IHJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjaGFy
KiBkYXRhLCBpbnQgbGVuZ3RoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6cmVhZEZy
b21GaWxlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6
OnJlYWRGcm9tRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7CiB9CiAKIGludCB3cml0ZVRvRmls
ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3Ro
KQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxlLCBkYXRh
LCBsZW5ndGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6d3JpdGVUb0ZpbGUoaGFuZGxl
LCBkYXRhLCBsZW5ndGgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MYW5ndWFnZUNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9MYW5ndWFnZUNocm9taXVt
LmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9MYW5ndWFnZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAog
I2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkxhbmd1YWdlLmgiCiAKLSNpbmNsdWRlICJD
aHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAi
UGxhdGZvcm1TdHJpbmcuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtNDAsNyArNDAsNyBA
QCBTdHJpbmcgcGxhdGZvcm1EZWZhdWx0TGFuZ3VhZ2UoKQogewogICAgIHN0YXRpYyBTdHJpbmcg
Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2U7CiAgICAgaWYgKGNvbXB1dGVkRGVmYXVsdExhbmd1YWdl
LmlzRW1wdHkoKSkKLSAgICAgICAgY29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UgPSBDaHJvbWl1bUJy
aWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKTsKKyAgICAgICAgY29tcHV0ZWREZWZhdWx0
TGFuZ3VhZ2UgPSBQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UoKTsKICAg
ICByZXR1cm4gY29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtIYXNoQ2hyb21pdW0uY3BwCShy
ZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL0xpbmtI
YXNoQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxOCArMzEsMTggQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJMaW5rSGFzaC5oIgogCi0jaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNp
Z25lZCBsZW5ndGgpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hh
c2godXJsLCBsZW5ndGgpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtI
YXNoKHVybCwgbGVuZ3RoKTsKIH0KIAogTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtV
UkwmIGJhc2UsIGNvbnN0IEF0b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKQogewotICAgIHJldHVy
biBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGJhc2UsIGF0dHJpYnV0ZVVSTCk7Cisg
ICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goYmFzZSwgYXR0cmlidXRl
VVJMKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vTUlNRVR5cGVSZWdpc3RyeUNocm9taXVtLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9NSU1FVHlwZVJlZ2lzdHJ5Q2hy
b21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2No
cm9taXVtL01JTUVUeXBlUmVnaXN0cnlDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
LDIwICszMSwyMCBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1JTUVUeXBlUmVn
aXN0cnkuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiTWVkaWFQ
bGF5ZXIuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsdWdpbkRh
dGFDaHJvbWl1bS5oIgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KIAogLy8gTk9URTog
VW5saWtlIG90aGVyIHBvcnRzLCB3ZSBkb24ndCB1c2UgdGhlIHNoYXJlZCBpbXBsZW1lbnRhdGlv
biBiaXRzIGluCiAvLyBNSU1FVHlwZVJlZ2lzdHJ5LmNwcC4gIEluc3RlYWQsIHdlIG5lZWQgdG8g
cm91dGUgbW9zdCBmdW5jdGlvbnMgdmlhIHRoZQotLy8gQ2hyb21pdW1CcmlkZ2UgdG8gdGhlIGVt
YmVkZGVyLgorLy8gUGxhdGZvcm1CcmlkZ2UgdG8gdGhlIGVtYmVkZGVyLgogCiBuYW1lc3BhY2Ug
V2ViQ29yZSB7CiAKIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVu
c2lvbihjb25zdCBTdHJpbmcgJmV4dCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6Om1p
bWVUeXBlRm9yRXh0ZW5zaW9uKGV4dCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjptaW1l
VHlwZUZvckV4dGVuc2lvbihleHQpOwogfQogCiAvLyBSZXR1cm5zIHRoZSBmaWxlIGV4dGVuc2lv
biBpZiBvbmUgaXMgZm91bmQuICBEb2VzIG5vdCBpbmNsdWRlIHRoZSBkb3QgaW4gdGhlCkBAIC01
NSw3ICs1NSw3IEBAIFN0cmluZyBNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRQcmVmZXJyZWRFeHQKICAg
ICAvLyBGSVhNRTogSXMgdGhpcyByZWFsbHkgbmVjZXNzYXJ5Pz8KICAgICBTdHJpbmcgbWltZVR5
cGUgPSB0eXBlLnN1YnN0cmluZygwLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odHlwZS5maW5kKCc7
JykpKTsKIAotICAgIFN0cmluZyBleHQgPSBDaHJvbWl1bUJyaWRnZTo6cHJlZmVycmVkRXh0ZW5z
aW9uRm9yTUlNRVR5cGUodHlwZSk7CisgICAgU3RyaW5nIGV4dCA9IFBsYXRmb3JtQnJpZGdlOjpw
cmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZSh0eXBlKTsKICAgICBpZiAoIWV4dC5pc0VtcHR5
KCkgJiYgZXh0WzBdID09ICcuJykKICAgICAgICAgZXh0ID0gZXh0LnN1YnN0cmluZygxKTsKIApA
QCAtODEsNyArODEsNyBAQCBTdHJpbmcgTUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JQ
CiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0
IFN0cmluZyYgbWltZVR5cGUpCiB7IAotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6aXNTdXBw
b3J0ZWRJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6
OmlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSk7CiB9CiAKIGJvb2wgTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZVJlc291cmNlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKQEAgLTk2LDEyICs5NiwxMiBAQCBib29sIE1JTUVUeXBlUmVnaXN0cnk6OmlzU3Vw
cG9ydGVkSW1hZ2VNCiAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRKYXZhU2Ny
aXB0TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKLSAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKTsKKyAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVU
eXBlKTsKIH0KICAgICAKIGJvb2wgTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFn
ZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCiB7Ci0gICAgcmV0dXJuIENocm9taXVt
QnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpOworICAgIHJldHVy
biBQbGF0Zm9ybUJyaWRnZTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKG1pbWVUeXBlKTsK
IH0KIAogYm9vbCBNSU1FVHlwZVJlZ2lzdHJ5Ojppc1N1cHBvcnRlZE1lZGlhTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9t
aXVtL1Bhc3RlYm9hcmRDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vUGFzdGVib2FyZENocm9taXVtLmNwcAkocmV2aXNpb24gNzYxNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9QYXN0ZWJvYXJkQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwyMCArMzEsMjAgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5o
IgogI2luY2x1ZGUgIkNsaXBib2FyZFV0aWxpdGllc0Nocm9taXVtLmgiCi0jaW5jbHVkZSAiRG9j
dW1lbnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRG9jdW1l
bnRGcmFnbWVudC5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZS5oIgog
I2luY2x1ZGUgIkhUTUxOYW1lcy5oIgogI2luY2x1ZGUgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIktVUkwuaCIKLSNpbmNsdWRlICJtYXJrdXAuaCIK
ICNpbmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5o
IgogI2luY2x1ZGUgIlJhbmdlLmgiCiAjaW5jbHVkZSAiUmVuZGVySW1hZ2UuaCIKKyNpbmNsdWRl
ICJtYXJrdXAuaCIKIAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHTmFtZXMuaCIKQEAg
LTkxLDcgKzkxLDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVNlbGVjdGlvbihSYW5nZSogcwog
I2VuZGlmCiAgICAgcmVwbGFjZU5CU1BXaXRoU3BhY2UocGxhaW5UZXh0KTsKIAotICAgIENocm9t
aXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNlbGVjdGlvbihodG1sLCB1cmwsIHBsYWluVGV4dCwg
Y2FuU21hcnRDb3B5T3JEZWxldGUpOworICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0
ZVNlbGVjdGlvbihodG1sLCB1cmwsIHBsYWluVGV4dCwgY2FuU21hcnRDb3B5T3JEZWxldGUpOwog
fQogCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCkK
QEAgLTk5LDkgKzk5LDkgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBT
dAogI2lmIE9TKFdJTkRPV1MpCiAgICAgU3RyaW5nIHBsYWluVGV4dCh0ZXh0KTsKICAgICByZXBs
YWNlTmV3bGluZXNXaXRoV2luZG93c1N0eWxlTmV3bGluZXMocGxhaW5UZXh0KTsKLSAgICBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKKyAgICBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQocGxhaW5UZXh0KTsKICNlbHNlCi0g
ICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KHRleHQpOworICAgIFBs
YXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVBsYWluVGV4dCh0ZXh0KTsKICNlbmRpZgogfQog
CkBAIC0xMTYsNyArMTE2LDcgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVVSTChjb25zdCBLVVJM
JiB1cgogICAgICAgICAgICAgdGl0bGUgPSB1cmwuaG9zdCgpOwogICAgIH0KIAotICAgIENocm9t
aXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVSTCh1cmwsIHRpdGxlKTsKKyAgICBQbGF0Zm9ybUJy
aWRnZTo6Y2xpcGJvYXJkV3JpdGVVUkwodXJsLCB0aXRsZSk7CiB9CiAKIHZvaWQgUGFzdGVib2Fy
ZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRs
ZSkKQEAgLTE1MCwxNyArMTUwLDE3IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVJbWFnZShOb2Rl
KiBub2RlLCAKICAgICB9CiAgICAgS1VSTCB1cmwgPSB1cmxTdHJpbmcuaXNFbXB0eSgpID8gS1VS
TCgpIDogbm9kZS0+ZG9jdW1lbnQoKS0+Y29tcGxldGVVUkwoc3RyaXBMZWFkaW5nQW5kVHJhaWxp
bmdIVE1MU3BhY2VzKHVybFN0cmluZykpOwogCi0gICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2Fy
ZFdyaXRlSW1hZ2UoYml0bWFwLCB1cmwsIHRpdGxlKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xp
cGJvYXJkV3JpdGVJbWFnZShiaXRtYXAsIHVybCwgdGl0bGUpOwogfQogCiBib29sIFBhc3RlYm9h
cmQ6OmNhblNtYXJ0UmVwbGFjZSgpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6V2ViU21hcnRQYXN0ZUZv
cm1hdCwgbV9zZWxlY3Rpb25Nb2RlID8gUGFzdGVib2FyZFByaXZhdGU6OlNlbGVjdGlvbkJ1ZmZl
ciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7CisgICAgcmV0dXJuIFBsYXRm
b3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6
V2ViU21hcnRQYXN0ZUZvcm1hdCwgbV9zZWxlY3Rpb25Nb2RlID8gUGFzdGVib2FyZFByaXZhdGU6
OlNlbGVjdGlvbkJ1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7CiB9
CiAKIFN0cmluZyBQYXN0ZWJvYXJkOjpwbGFpblRleHQoRnJhbWUqIGZyYW1lKQogewotICAgIHJl
dHVybiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChtX3NlbGVjdGlvbk1v
ZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogUGFzdGVib2FyZFByaXZh
dGU6OlN0YW5kYXJkQnVmZmVyKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2Fy
ZFJlYWRQbGFpblRleHQobV9zZWxlY3Rpb25Nb2RlID8gUGFzdGVib2FyZFByaXZhdGU6OlNlbGVj
dGlvbkJ1ZmZlciA6IFBhc3RlYm9hcmRQcml2YXRlOjpTdGFuZGFyZEJ1ZmZlcik7CiB9CiAKIFBh
c3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gUGFzdGVib2FyZDo6ZG9jdW1lbnRGcmFnbWVudChG
cmFtZSogZnJhbWUsIFBhc3NSZWZQdHI8UmFuZ2U+IGNvbnRleHQsIGJvb2wgYWxsb3dQbGFpblRl
eHQsIGJvb2wmIGNob3NlUGxhaW5UZXh0KQpAQCAtMTY4LDEwICsxNjgsMTAgQEAgUGFzc1JlZlB0
cjxEb2N1bWVudEZyYWdtZW50PiBQYXN0ZWJvYXJkOgogICAgIGNob3NlUGxhaW5UZXh0ID0gZmFs
c2U7CiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPSBtX3Nl
bGVjdGlvbk1vZGUgPyBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDogUGFzdGVi
b2FyZFByaXZhdGU6OlN0YW5kYXJkQnVmZmVyOwogCi0gICAgaWYgKENocm9taXVtQnJpZGdlOjpj
bGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6SFRNTEZvcm1hdCwg
YnVmZmVyKSkgeworICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFp
bGFibGUoUGFzdGVib2FyZFByaXZhdGU6OkhUTUxGb3JtYXQsIGJ1ZmZlcikpIHsKICAgICAgICAg
U3RyaW5nIG1hcmt1cDsKICAgICAgICAgS1VSTCBzcmNVUkw7Ci0gICAgICAgIENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkSFRNTChidWZmZXIsICZtYXJrdXAsICZzcmNVUkwpOworICAgICAg
ICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoYnVmZmVyLCAmbWFya3VwLCAmc3Jj
VVJMKTsKIAogICAgICAgICBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPQogICAg
ICAgICAgICAgY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKGZyYW1lLT5kb2N1bWVudCgpLCBtYXJr
dXAsIHNyY1VSTCwgRnJhZ21lbnRTY3JpcHRpbmdOb3RBbGxvd2VkKTsKQEAgLTE4MCw3ICsxODAs
NyBAQCBQYXNzUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IFBhc3RlYm9hcmQ6CiAgICAgfQogCiAg
ICAgaWYgKGFsbG93UGxhaW5UZXh0KSB7Ci0gICAgICAgIFN0cmluZyBtYXJrdXAgPSBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOworICAgICAgICBTdHJpbmcg
bWFya3VwID0gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsK
ICAgICAgICAgaWYgKCFtYXJrdXAuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICBjaG9zZVBsYWlu
VGV4dCA9IHRydWU7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Bs
YXRmb3JtQnJpZGdlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1CcmlkZ2UuaAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jaHJvbWl1bS9QbGF0Zm9ybUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMjAxMCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChjKSAyMDEwLCBHb29nbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQpAQCAtMzEs
MTcgKzMxLDMyMyBAQAogI2lmbmRlZiBQbGF0Zm9ybUJyaWRnZV9oCiAjZGVmaW5lIFBsYXRmb3Jt
QnJpZGdlX2gKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaWYgRU5BQkxFKFdFQl9B
VURJTykKKyNpbmNsdWRlICJBdWRpb0J1cy5oIgorI2VuZGlmCisKKyNpbmNsdWRlICJGaWxlU3lz
dGVtLmgiCisjaW5jbHVkZSAiSW1hZ2VTb3VyY2UuaCIKKyNpbmNsdWRlICJMaW5rSGFzaC5oIgor
I2luY2x1ZGUgIlBhc3NSZWZQdHIuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkUHJpdmF0ZS5oIgor
I2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKworI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK3R5cGVkZWYg
c3RydWN0IE5QT2JqZWN0IE5QT2JqZWN0OwordHlwZWRlZiBzdHJ1Y3QgX05QUCBOUFBfdDsKK3R5
cGVkZWYgTlBQX3QqIE5QUDsKKworI2lmIE9TKERBUldJTikKK3R5cGVkZWYgc3RydWN0IENHRm9u
dCogQ0dGb250UmVmOwordHlwZWRlZiB1aW50cHRyX3QgQVRTRm9udENvbnRhaW5lclJlZjsKKyNp
ZmRlZiBfX09CSkNfXworQGNsYXNzIE5TRm9udDsKKyNlbHNlCitjbGFzcyBOU0ZvbnQ7CisjZW5k
aWYKKyNlbmRpZiAvLyBPUyhEQVJXSU4pCisKKyNpZiBPUyhXSU5ET1dTKQordHlwZWRlZiBzdHJ1
Y3QgSEZPTlRfXyogSEZPTlQ7CisjZW5kaWYKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0vLyBG
SVhNRTogQSBiZXR0ZXIgbmFtZSBmb3IgQ2hyb21pdW1CcmlkZ2UgaXMgUGxhdGZvcm1CcmlkZ2Uu
IEFuZHJvaWQgYWxyZWFkeQotLy8gdXNlcyBQbGF0Zm9ybUJyaWRnZSBzbyB0aGUgY29kZSB0aGF0
IGlzIHNoYXJlZCBhbW9uZyB0aGUgQW5kcm9pZCBhbmQgQ2hyb21pdW0KLS8vIHBvcnRzIGlzIGdy
YWR1YWxseSBtb3ZpbmcgdG93YXJkcyB1c2luZyBQbGF0Zm9ybUJyaWRnZS4gT25jZSB0aGUgQW5k
cm9pZAotLy8gdW5mb3JraW5nIGlzIGRvbmUsIHdlIHdpbGwgY2hhbmdlIHRoZSBuYW1lIG9mIENo
cm9taXVtQnJpZGdlIHRvIFBsYXRmb3JtQnJpZGdlCi0vLyBhbmQgbWVyZ2UgdGhlIHR3byBjbGFz
c2VzIGludG8gb25lIHRoYXQgd2lsbCBiZSBzaGFyZWQgYnkgYm90aCBwb3J0cy4KLXR5cGVkZWYg
Q2hyb21pdW1CcmlkZ2UgUGxhdGZvcm1CcmlkZ2U7CitjbGFzcyBDbGlwYm9hcmREYXRhOworY2xh
c3MgQ29sb3I7CitjbGFzcyBDdXJzb3I7CitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIEZyYW1lOwor
Y2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNlQnJpZGdlOworY2xhc3MgR2VvbG9jYXRpb25TZXJ2aWNl
Q2hyb21pdW07CitjbGFzcyBHcmFwaGljc0NvbnRleHQ7CitjbGFzcyBJbWFnZTsKK2NsYXNzIElE
QkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlOworY2xhc3MgSURCS2V5OworY2xhc3MgSW50UmVjdDsK
K2NsYXNzIEtVUkw7CitjbGFzcyBTZXJpYWxpemVkU2NyaXB0VmFsdWU7CitjbGFzcyBXaWRnZXQ7
CisKK3N0cnVjdCBDb29raWU7CitzdHJ1Y3QgRm9udFJlbmRlclN0eWxlOworCisvLyBBbiBpbnRl
cmZhY2UgdG8gdGhlIGVtYmVkZGluZyBsYXllciwgd2hpY2ggaGFzIHRoZSBhYmlsaXR5IHRvIGFu
c3dlcgorLy8gcXVlc3Rpb25zIGFib3V0IHRoZSBzeXN0ZW0gYW5kIHNvIG9uLi4uCisKK2NsYXNz
IFBsYXRmb3JtQnJpZGdlIHsKK3B1YmxpYzoKKyAgICAvLyBDYWNoZSAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRp
YyB2b2lkIGNhY2hlTWV0YWRhdGEoY29uc3QgS1VSTCYsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNv
bnN0IFZlY3RvcjxjaGFyPiYpOworCisgICAgLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgYm9v
bCBjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
Rm9ybWF0LCBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyKTsKKworICAgIHN0YXRp
YyBTdHJpbmcgY2xpcGJvYXJkUmVhZFBsYWluVGV4dChQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwYm9hcmRSZWFkSFRNTChQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBTdHJpbmcqLCBLVVJMKik7CisKKyAgICAvLyBPbmx5
IHRoZSBjbGlwYm9hcmRSZWFkIGZ1bmN0aW9ucyB0YWtlIGEgYnVmZmVyIGFyZ3VtZW50IGJlY2F1
c2UKKyAgICAvLyBDaHJvbWl1bSBjdXJyZW50bHkgdXNlcyBhIGRpZmZlcmVudCB0ZWNobmlxdWUg
dG8gd3JpdGUgdG8gYWx0ZXJuYXRlCisgICAgLy8gY2xpcGJvYXJkIGJ1ZmZlcnMuCisgICAgc3Rh
dGljIHZvaWQgY2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3RyaW5nJiwgY29uc3QgS1VS
TCYsIGNvbnN0IFN0cmluZyYsIGJvb2wpOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRl
UGxhaW5UZXh0KGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyB2b2lkIGNsaXBib2FyZFdyaXRl
VVJMKGNvbnN0IEtVUkwmLCBjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgdm9pZCBjbGlwYm9h
cmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRyLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJik7
CisgICAgc3RhdGljIHZvaWQgY2xpcGJvYXJkV3JpdGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwg
Y29uc3QgU3RyaW5nJiBkYXRhLCBjb25zdCBTdHJpbmcmIG1ldGFkYXRhKTsKKworICAgIC8vIElu
dGVyZmFjZSBmb3IgaGFuZGxpbmcgY29weSBhbmQgcGFzdGUsIGRyYWcgYW5kIGRyb3AsIGFuZCBz
ZWxlY3Rpb24gY29weS4KKyAgICBzdGF0aWMgSGFzaFNldDxTdHJpbmc+IGNsaXBib2FyZFJlYWRB
dmFpbGFibGVUeXBlcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyLCBib29sKiBj
b250YWluc0ZpbGVuYW1lcyk7CisgICAgc3RhdGljIGJvb2wgY2xpcGJvYXJkUmVhZERhdGEoUGFz
dGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciwgY29uc3QgU3RyaW5nJiB0eXBlLCBTdHJp
bmcmIGRhdGEsIFN0cmluZyYgbWV0YWRhdGEpOworICAgIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBj
bGlwYm9hcmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIp
OworCisgICAgLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgdm9pZCBzZXRDb29raWVzKGNvbnN0
IERvY3VtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdmFsdWUpOworICAgIHN0YXRp
YyBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCosIGNvbnN0IEtVUkwmKTsKKyAgICBzdGF0
aWMgU3RyaW5nIGNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNvbnN0IERvY3VtZW50Kiwg
Y29uc3QgS1VSTCYpOworICAgIHN0YXRpYyBib29sIHJhd0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQq
LCBjb25zdCBLVVJMJiwgVmVjdG9yPENvb2tpZT4mKTsKKyAgICBzdGF0aWMgdm9pZCBkZWxldGVD
b29raWUoY29uc3QgRG9jdW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiBjb29raWVO
YW1lKTsKKyAgICBzdGF0aWMgYm9vbCBjb29raWVzRW5hYmxlZChjb25zdCBEb2N1bWVudCopOwor
CisgICAgLy8gRE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgdm9pZCBwcmVmZXRjaEROUyhjb25zdCBT
dHJpbmcmIGhvc3RuYW1lKTsKKworICAgIC8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQg
cmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgYm9vbCBmaWxlRXhp
c3RzKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBib29sIGRlbGV0ZUZpbGUoY29uc3QgU3Ry
aW5nJik7CisgICAgc3RhdGljIGJvb2wgZGVsZXRlRW1wdHlEaXJlY3RvcnkoY29uc3QgU3RyaW5n
Jik7CisgICAgc3RhdGljIGJvb2wgZ2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiwgbG9uZyBsb25n
JiByZXN1bHQpOworICAgIHN0YXRpYyBib29sIGdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0
IFN0cmluZyYsIHRpbWVfdCYgcmVzdWx0KTsKKyAgICBzdGF0aWMgU3RyaW5nIGRpcmVjdG9yeU5h
bWUoY29uc3QgU3RyaW5nJiBwYXRoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHBhdGhCeUFwcGVuZGlu
Z0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0cmluZyYgY29tcG9uZW50KTsK
KyAgICBzdGF0aWMgYm9vbCBtYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKTsK
KyAgICBzdGF0aWMgU3RyaW5nIGdldEFic29sdXRlUGF0aChjb25zdCBTdHJpbmcmKTsKKyAgICBz
dGF0aWMgYm9vbCBpc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmKTsKKyAgICBzdGF0aWMgS1VSTCBm
aWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYpOworICAgIHN0YXRpYyBQbGF0Zm9ybUZpbGVIYW5k
bGUgb3BlbkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUpOworICAgIHN0YXRp
YyB2b2lkIGNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUmKTsKKyAgICBzdGF0aWMgbG9uZyBs
b25nIHNlZWtGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNl
ZWtPcmlnaW4pOworICAgIHN0YXRpYyBib29sIHRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUsIGxvbmcgbG9uZyBvZmZzZXQpOworICAgIHN0YXRpYyBpbnQgcmVhZEZyb21GaWxlKFBsYXRm
b3JtRmlsZUhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCk7CisgICAgc3RhdGljIGludCB3
cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUsIGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW5n
dGgpOworCisgICAgLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyNpZiBPUyhXSU5ET1dTKQorICAgIHN0YXRpYyBi
b29sIGVuc3VyZUZvbnRMb2FkZWQoSEZPTlQpOworI2VuZGlmCisjaWYgT1MoTElOVVgpIHx8IE9T
KEZSRUVCU0QpCisgICAgc3RhdGljIHZvaWQgZ2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29uc3Qg
Y2hhciogZmFtaWx5LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCk7
CisgICAgc3RhdGljIFN0cmluZyBnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjb25zdCBVQ2hh
ciosIHNpemVfdCBudW1DaGFyYWN0ZXJzKTsKKyNlbmRpZgorI2lmIE9TKERBUldJTikKKyAgICBz
dGF0aWMgYm9vbCBsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWluZXJSZWYq
IG91dCk7CisjZW5kaWYKKworICAgIC8vIEZvcm1zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQgbm90
aWZ5Rm9ybVN0YXRlQ2hhbmdlZChjb25zdCBEb2N1bWVudCopOworCisgICAgLy8gRGF0YWJhc2Vz
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KKyAgICAvLyBSZXR1cm5zIGEgaGFuZGxlIHRvIHRoZSBEQiBmaWxlIGFuZCBvb3B0aW9uYWxs
eSBhIGhhbmRsZSB0byBpdHMgY29udGFpbmluZyBkaXJlY3RvcnkKKyAgICBzdGF0aWMgUGxhdGZv
cm1GaWxlSGFuZGxlIGRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGbGVOYW1lLCBp
bnQgZGVzaXJlZEZsYWdzKTsKKyAgICAvLyBSZXR1cm5zIGEgU1FMaXRlIGNvZGUgKFNRTElURV9P
SyA9IDAsIG9uIHN1Y2Nlc3MpCisgICAgc3RhdGljIGludCBkYXRhYmFzZURlbGV0ZUZpbGUoY29u
c3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyID0gZmFsc2UpOworICAgIC8vIFJl
dHVybnMgdGhlIGF0dHJpYnV0ZXMgb2YgdGhlIERCIGZpbGUKKyAgICBzdGF0aWMgbG9uZyBkYXRh
YmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpOworICAgIC8v
IFJldHVybnMgdGhlIHNpemUgb2YgdGhlIERCIGZpbGUKKyAgICBzdGF0aWMgbG9uZyBsb25nIGRh
dGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSk7CisKKyAgICAvLyBJ
bmRleGVkREIgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlPiBpZGJGYWN0b3J5KCk7CisgICAgc3RhdGljIHZvaWQgaWRiU2h1dGRvd24oKTsKKyAgICAv
LyBFeHRyYWN0cyBrZXlQYXRoIGZyb20gdmFsdWVzIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25k
aW5nIGtleXMuCisgICAgc3RhdGljIHZvaWQgY3JlYXRlSURCS2V5c0Zyb21TZXJpYWxpemVkVmFs
dWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZT4g
PiYgdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8SURCS2V5PiA+
JiBrZXlzKTsKKworICAgIC8vIEphdmFTY3JpcHQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3RhdGljIHZvaWQgbm90aWZ5SlNP
dXRPZk1lbW9yeShGcmFtZSopOworICAgIHN0YXRpYyBib29sIGFsbG93U2NyaXB0RGVzcGl0ZVNl
dHRpbmdzKGNvbnN0IEtVUkwmIGRvY3VtZW50VVJMKTsKKworICAgIC8vIEtleWdlbiAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisg
ICAgc3RhdGljIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcodW5zaWdu
ZWQga2V5U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYpOwor
CisgICAgLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgU3RyaW5nIGNvbXB1dGVkRGVmYXVsdExh
bmd1YWdlKCk7CisKKyAgICAvLyBMYXlvdXRUZXN0TW9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRpYyBib29sIGxheW91dFRl
c3RNb2RlKCk7CisKKyAgICAvLyBNZW1vcnkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIC8vIFJldHVybnMgdGhlIGN1cnJl
bnQgc3BhY2UgYWxsb2NhdGVkIGZvciB0aGUgcGFnZWZpbGUsIGluIE1CLgorICAgIC8vIFRoYXQg
aXMgY29tbWl0dGVkIHNpemUgZm9yIFdpbmRvd3MgYW5kIHZpcnR1YWwgbWVtb3J5IHNpemUgZm9y
IFBPU0lYCisgICAgc3RhdGljIGludCBtZW1vcnlVc2FnZU1CKCk7CisKKyAgICAvLyBTYW1lIGFz
IGFib3ZlLCBidXQgYWx3YXlzIHJldHVybnMgYWN0dWFsIHZhbHVlLCB3aXRob3V0IGFueSBjYWNo
ZXMuCisgICAgc3RhdGljIGludCBhY3R1YWxNZW1vcnlVc2FnZU1CKCk7CisKKyAgICAvLyBNaW1l
VHlwZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQorICAgIHN0YXRpYyBib29sIGlzU3VwcG9ydGVkSW1hZ2VNSU1FVHlwZShjb25zdCBT
dHJpbmcmIG1pbWVUeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBvcnRlZEphdmFTY3JpcHRN
SU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKTsKKyAgICBzdGF0aWMgYm9vbCBpc1N1cHBv
cnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSk7CisgICAgc3RhdGlj
IFN0cmluZyBtaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGZpbGVFeHRlbnNpb24p
OworICAgIHN0YXRpYyBTdHJpbmcgbWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIGZpbGVQ
YXRoKTsKKyAgICBzdGF0aWMgU3RyaW5nIHByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNv
bnN0IFN0cmluZyYgbWltZVR5cGUpOworCisgICAgLy8gUGx1Z2luIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMg
Ym9vbCBwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbkluZm8+Kik7CisgICAgc3Rh
dGljIE5QT2JqZWN0KiBwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCopOworICAgIHN0YXRp
YyBib29sIHBvcHVwc0FsbG93ZWQoTlBQKTsKKworICAgIC8vIFJlc291cmNlcyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8SW1hZ2U+IGxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hh
ciogbmFtZSk7CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorICAgIHN0YXRpYyBQYXNzT3duUHRy
PEF1ZGlvQnVzPiBsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGRv
dWJsZSBzYW1wbGVSYXRlKTsKKyAgICBzdGF0aWMgUGFzc093blB0cjxBdWRpb0J1cz4gZGVjb2Rl
QXVkaW9GaWxlRGF0YShjb25zdCBjaGFyKiBkYXRhLCBzaXplX3QsIGRvdWJsZSBzYW1wbGVSYXRl
KTsKKyNlbmRpZgorCisgICAgLy8gU2FuZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgYm9vbCBzYW5kYm94
RW5hYmxlZCgpOworCisgICAgLy8gU2NyZWVuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgaW50IHNjcmVlbkRl
cHRoKFdpZGdldCopOworICAgIHN0YXRpYyBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lk
Z2V0Kik7CisgICAgc3RhdGljIGJvb2wgc2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCopOworICAg
IHN0YXRpYyBJbnRSZWN0IHNjcmVlblJlY3QoV2lkZ2V0Kik7CisgICAgc3RhdGljIEludFJlY3Qg
c2NyZWVuQXZhaWxhYmxlUmVjdChXaWRnZXQqKTsKKworICAgIC8vIFNoYXJlZFRpbWVycyAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICAg
c3RhdGljIHZvaWQgc2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpmdW5jKSgpKTsK
KyAgICBzdGF0aWMgdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSk7CisgICAgc3Rh
dGljIHZvaWQgc3RvcFNoYXJlZFRpbWVyKCk7CisKKyAgICAvLyBTdGF0c0NvdW50ZXJzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0
YXRpYyB2b2lkIGRlY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKTsKKyAgICBz
dGF0aWMgdm9pZCBpbmNyZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSk7CisgICAg
c3RhdGljIHZvaWQgaGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBz
YW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCk7CisgICAgc3RhdGljIHZv
aWQgaGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3QgY2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50
IGJvdW5kYXJ5VmFsdWUpOworCisgICAgLy8gU3VkZGVuIFRlcm1pbmF0aW9uCisgICAgc3RhdGlj
IHZvaWQgc3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCk7CisKKyAgICAvLyBT
eXN0ZW1UaW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorICAgIHN0YXRpYyBkb3VibGUgY3VycmVudFRpbWUoKTsKKworICAgIC8vIFRo
ZW1pbmcgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCisjaWYgT1MoV0lORE9XUykKKyAgICBzdGF0aWMgdm9pZCBwYWludEJ1dHRvbigK
KyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNz
aWNTdGF0ZSwgY29uc3QgSW50UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50TWVudUxpc3Qo
CisgICAgICAgIEdyYXBoaWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFz
c2ljU3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJh
ckFycm93KAorICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgc3RhdGUsIGludCBjbGFzc2lj
U3RhdGUsIGNvbnN0IEludFJlY3QmKTsKKyAgICBzdGF0aWMgdm9pZCBwYWludFNjcm9sbGJhclRo
dW1iKAorICAgICAgICBHcmFwaGljc0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQg
Y2xhc3NpY1N0YXRlLCBjb25zdCBJbnRSZWN0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRTY3Jv
bGxiYXJUcmFjaygKKyAgICAgICAgR3JhcGhpY3NDb250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50UmVjdCYsIGNvbnN0IEludFJlY3QmIGFsaWdu
UmVjdCk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRTcGluQnV0dG9uKAorICAgICAgICBHcmFwaGlj
c0NvbnRleHQqLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLCBjb25zdCBJ
bnRSZWN0Jik7CisgICAgc3RhdGljIHZvaWQgcGFpbnRUZXh0RmllbGQoCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dCosIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsIGNvbnN0
IEludFJlY3QmLCBjb25zdCBDb2xvciYsIGJvb2wgZmlsbENvbnRlbnRBcmVhLCBib29sIGRyYXdF
ZGdlcyk7CisgICAgc3RhdGljIHZvaWQgcGFpbnRUcmFja2JhcigKKyAgICAgICAgR3JhcGhpY3ND
b250ZXh0KiwgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwgY29uc3QgSW50
UmVjdCYpOworICAgIHN0YXRpYyB2b2lkIHBhaW50UHJvZ3Jlc3NCYXIoCisgICAgICAgIEdyYXBo
aWNzQ29udGV4dCosIGNvbnN0IEludFJlY3QmIGJhclJlY3QsIGNvbnN0IEludFJlY3QmIHZhbHVl
UmVjdCwgYm9vbCBkZXRlcm1pbmF0ZSwgZG91YmxlIGFuaW1hdGVkU2Vjb25kcyk7CisjZWxpZiBP
UyhMSU5VWCkKKyAgICAvLyBUaGUgVUkgcGFydCB3aGljaCBpcyBiZWluZyBhY2Nlc3NlZC4KKyAg
ICBlbnVtIFRoZW1lUGFydCB7CisgICAgICAgIFBhcnRTY3JvbGxiYXJEb3duQXJyb3csCisgICAg
ICAgIFBhcnRTY3JvbGxiYXJMZWZ0QXJyb3csCisgICAgICAgIFBhcnRTY3JvbGxiYXJSaWdodEFy
cm93LAorICAgICAgICBQYXJ0U2Nyb2xsYmFyVXBBcnJvdywKKyAgICAgICAgUGFydFNjcm9sbGJh
ckhvcml6b250YWxUaHVtYiwKKyAgICAgICAgUGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIsCisg
ICAgICAgIFBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2ssCisgICAgICAgIFBhcnRTY3JvbGxi
YXJWZXJ0aWNhbFRyYWNrLAorICAgIH07CisKKyAgICAvLyBUaGUgY3VycmVudCBzdGF0ZSBvZiB0
aGUgYXNzb2NpYXRlZCBQYXJ0LgorICAgIGVudW0gVGhlbWVQYWludFN0YXRlIHsKKyAgICAgICAg
U3RhdGVEaXNhYmxlZCwKKyAgICAgICAgU3RhdGVIb3ZlciwKKyAgICAgICAgU3RhdGVOb3JtYWws
CisgICAgICAgIFN0YXRlUHJlc3NlZCwKKyAgICB9OworCisgICAgc3RydWN0IFNjcm9sbGJhclRy
YWNrRXh0cmFQYXJhbXMgeworICAgICAgICAvLyBUaGUgYm91bmRzIG9mIHRoZSBlbnRpcmUgdHJh
Y2ssIGFzIG9wcG9zZWQgdG8gdGhlIHBhcnQgYmVpbmcgcGFpbnRlZC4KKyAgICAgICAgaW50IHRy
YWNrWDsKKyAgICAgICAgaW50IHRyYWNrWTsKKyAgICAgICAgaW50IHRyYWNrV2lkdGg7CisgICAg
ICAgIGludCB0cmFja0hlaWdodDsKKyAgICB9OworCisgICAgdW5pb24gVGhlbWVQYWludEV4dHJh
UGFyYW1zIHsKKyAgICAgICAgU2Nyb2xsYmFyVHJhY2tFeHRyYVBhcmFtcyBzY3JvbGxiYXJUcmFj
azsKKyAgICB9OworCisgICAgLy8gR2V0cyB0aGUgc2l6ZSBvZiB0aGUgZ2l2ZW4gdGhlbWUgcGFy
dC4gRm9yIHZhcmlhYmxlIHNpemVkIGl0ZW1zCisgICAgLy8gbGlrZSB2ZXJ0aWNhbCBzY3JvbGxi
YXIgdGh1bWJzLCB0aGUgd2lkdGggd2lsbCBiZSB0aGUgcmVxdWlyZWQgd2lkdGggb2YKKyAgICAv
LyB0aGUgdHJhY2sgd2hpbGUgdGhlIGhlaWdodCB3aWxsIGJlIHRoZSBtaW5pbXVtIGhlaWdodC4K
KyAgICBzdGF0aWMgSW50U2l6ZSBnZXRUaGVtZVBhcnRTaXplKFRoZW1lUGFydCk7CisgICAgLy8g
UGFpbnQgdGhlIGdpdmVuIHRoZSBnaXZlbiB0aGVtZSBwYXJ0LgorICAgIHN0YXRpYyB2b2lkIHBh
aW50VGhlbWVQYXJ0KEdyYXBoaWNzQ29udGV4dCosIFRoZW1lUGFydCwgVGhlbWVQYWludFN0YXRl
LCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVGhlbWVQYWludEV4dHJhUGFyYW1zKik7CisjZWxpZiBP
UyhEQVJXSU4pCisgICAgZW51bSBUaGVtZVBhaW50U3RhdGUgeworICAgICAgICBTdGF0ZURpc2Fi
bGVkLAorICAgICAgICBTdGF0ZUluYWN0aXZlLAorICAgICAgICBTdGF0ZUFjdGl2ZSwKKyAgICAg
ICAgU3RhdGVQcmVzc2VkLAorICAgIH07CisKKyAgICBlbnVtIFRoZW1lUGFpbnRTaXplIHsKKyAg
ICAgICAgU2l6ZVJlZ3VsYXIsCisgICAgICAgIFNpemVTbWFsbCwKKyAgICB9OworCisgICAgZW51
bSBUaGVtZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24geworICAgICAgICBTY3JvbGxiYXJPcmll
bnRhdGlvbkhvcml6b250YWwsCisgICAgICAgIFNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWws
CisgICAgfTsKKworICAgIGVudW0gVGhlbWVQYWludFNjcm9sbGJhclBhcmVudCB7CisgICAgICAg
IFNjcm9sbGJhclBhcmVudFNjcm9sbFZpZXcsCisgICAgICAgIFNjcm9sbGJhclBhcmVudFJlbmRl
ckxheWVyLAorICAgIH07CisKKyAgICBzdHJ1Y3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8gewor
ICAgICAgICBUaGVtZVBhaW50U2Nyb2xsYmFyT3JpZW50YXRpb24gb3JpZW50YXRpb247CisgICAg
ICAgIFRoZW1lUGFpbnRTY3JvbGxiYXJQYXJlbnQgcGFyZW50OworICAgICAgICBpbnQgbWF4VmFs
dWU7CisgICAgICAgIGludCBjdXJyZW50VmFsdWU7CisgICAgICAgIGludCB2aXNpYmxlU2l6ZTsK
KyAgICAgICAgaW50IHRvdGFsU2l6ZTsKKyAgICB9OworCisgICAgc3RhdGljIHZvaWQgcGFpbnRT
Y3JvbGxiYXJUaHVtYihHcmFwaGljc0NvbnRleHQqLCBUaGVtZVBhaW50U3RhdGUsIFRoZW1lUGFp
bnRTaXplLCBjb25zdCBJbnRSZWN0JiwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8mKTsK
KyNlbmRpZgorCisgICAgLy8gVHJhY2UgRXZlbnQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICBzdGF0aWMgdm9pZCB0cmFjZUV2ZW50
QmVnaW4oY29uc3QgY2hhciogbmFtZSwgdm9pZCosIGNvbnN0IGNoYXIqIGV4dHJhKTsKKyAgICBz
dGF0aWMgdm9pZCB0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqLCBjb25zdCBj
aGFyKiBleHRyYSk7CisKKyAgICAvLyBWaXNpdGVkIGxpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgIHN0YXRpYyBMaW5rSGFzaCB2
aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKTsKKyAgICBz
dGF0aWMgTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IEF0
b21pY1N0cmluZyYgYXR0cmlidXRlVVJMKTsKKyAgICBzdGF0aWMgYm9vbCBpc0xpbmtWaXNpdGVk
KExpbmtIYXNoKTsKK307CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKIAotI2VuZGlmIC8vIFBs
YXRmb3JtQnJpZGdlX2gKKyNlbmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hy
b21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1TY3JlZW5DaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUGxhdGZvcm1T
Y3JlZW5DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDM0ICszMSwzNCBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU2NyZWVuLmgiCiAKLSNpbmNsdWRl
ICJDaHJvbWl1bUJyaWRnZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGludCBzY3JlZW5EZXB0aChX
aWRnZXQqIHdpZGdldCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRlcHRo
KHdpZGdldCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5EZXB0aCh3aWRnZXQp
OwogfQogCiBpbnQgc2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0g
ICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudCh3aWRnZXQp
OworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQod2lk
Z2V0KTsKIH0KIAogYm9vbCBzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0g
ICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUod2lkZ2V0KTsKKyAg
ICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZSh3aWRnZXQpOwogfQog
CiBGbG9hdFJlY3Qgc2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsKLSAgICByZXR1cm4gQ2hy
b21pdW1CcmlkZ2U6OnNjcmVlblJlY3Qod2lkZ2V0KTsKKyAgICByZXR1cm4gUGxhdGZvcm1Ccmlk
Z2U6OnNjcmVlblJlY3Qod2lkZ2V0KTsKIH0KIAogRmxvYXRSZWN0IHNjcmVlbkF2YWlsYWJsZVJl
Y3QoV2lkZ2V0KiB3aWRnZXQpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpzY3JlZW5B
dmFpbGFibGVSZWN0KHdpZGdldCk7CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpzY3JlZW5B
dmFpbGFibGVSZWN0KHdpZGdldCk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1JlYWRhYmxlRGF0YU9iamVjdC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vUmVhZGFibGVE
YXRhT2JqZWN0LmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9jaHJvbWl1bS9SZWFkYWJsZURhdGFPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MCArMzEsMTAgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJSZWFkYWJsZURhdGFP
YmplY3QuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ2xpcGJv
YXJkTWltZVR5cGVzLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIlBhc3Rl
Ym9hcmRQcml2YXRlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC04MCwxOSArODAsMTkgQEAgU3RyaW5nIFJlYWRhYmxlRGF0YU9iamVj
dDo6Z2V0RGF0YShjb25zdAogICAgICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmdlbmVyYWxQYXN0
ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJk
UHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKICAgICAgICAgICAgICAgICBQYXN0ZWJvYXJkUHJp
dmF0ZTo6U3RhbmRhcmRCdWZmZXI7Ci0gICAgICAgICAgICBkYXRhID0gQ2hyb21pdW1CcmlkZ2U6
OmNsaXBib2FyZFJlYWRQbGFpblRleHQoYnVmZmVyKTsKKyAgICAgICAgICAgIGRhdGEgPSBQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZFBsYWluVGV4dChidWZmZXIpOwogICAgICAgICB9IGVs
c2UgaWYgKHR5cGUgPT0gbWltZVR5cGVUZXh0SFRNTCkgewogICAgICAgICAgICAgUGFzdGVib2Fy
ZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIgPQogICAgICAgICAgICAgICAgIFBhc3Rl
Ym9hcmQ6OmdlbmVyYWxQYXN0ZWJvYXJkKCktPmlzU2VsZWN0aW9uTW9kZSgpID8KICAgICAgICAg
ICAgICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U2VsZWN0aW9uQnVmZmVyIDoKICAgICAgICAgICAg
ICAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6U3RhbmRhcmRCdWZmZXI7CiAgICAgICAgICAgICBLVVJM
IGlnbm9yZWRTb3VyY2VVUkw7Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJk
UmVhZEhUTUwoYnVmZmVyLCAmZGF0YSwgJmlnbm9yZWRTb3VyY2VVUkwpOworICAgICAgICAgICAg
UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKGJ1ZmZlciwgJmRhdGEsICZpZ25vcmVk
U291cmNlVVJMKTsKICAgICAgICAgfQogICAgICAgICBzdWNjZWVkZWQgPSAhZGF0YS5pc0VtcHR5
KCk7CiAgICAgICAgIHJldHVybiBkYXRhOwogICAgIH0KLSAgICBzdWNjZWVkZWQgPSBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgc3VjY2VlZGVkID0gUGxhdGZvcm1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9jbGlwYm9h
cmRUeXBlKSwgdHlwZSwgZGF0YSwgaWdub3JlZE1ldGFkYXRhKTsKICAgICByZXR1cm4gZGF0YTsK
IH0KQEAgLTEwMSw3ICsxMDEsNyBAQCBTdHJpbmcgUmVhZGFibGVEYXRhT2JqZWN0Ojp1cmxUaXRs
ZSgpIGNvCiB7CiAgICAgU3RyaW5nIGlnbm9yZWREYXRhOwogICAgIFN0cmluZyB1cmxUaXRsZTsK
LSAgICBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoCisgICAgUGxhdGZvcm1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWREYXRhKAogICAgICAgICBjbGlwYm9hcmRCdWZmZXIobV9jbGlwYm9h
cmRUeXBlKSwgbWltZVR5cGVUZXh0VVJJTGlzdCwgaWdub3JlZERhdGEsIHVybFRpdGxlKTsKICAg
ICByZXR1cm4gdXJsVGl0bGU7CiB9CkBAIC0xMTAsNyArMTEwLDcgQEAgS1VSTCBSZWFkYWJsZURh
dGFPYmplY3Q6Omh0bWxCYXNlVXJsKCkgYwogewogICAgIFN0cmluZyBpZ25vcmVkRGF0YTsKICAg
ICBTdHJpbmcgaHRtbEJhc2VVcmw7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRE
YXRhKAorICAgIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRSZWFkRGF0YSgKICAgICAgICAgY2xp
cGJvYXJkQnVmZmVyKG1fY2xpcGJvYXJkVHlwZSksIG1pbWVUeXBlVGV4dEhUTUwsIGlnbm9yZWRE
YXRhLCBodG1sQmFzZVVybCk7CiAgICAgcmV0dXJuIEtVUkwoUGFyc2VkVVJMU3RyaW5nLCBodG1s
QmFzZVVybCk7CiB9CkBAIC0xMjMsNyArMTIzLDcgQEAgYm9vbCBSZWFkYWJsZURhdGFPYmplY3Q6
OmNvbnRhaW5zRmlsZW5hbQogCiBWZWN0b3I8U3RyaW5nPiBSZWFkYWJsZURhdGFPYmplY3Q6OmZp
bGVuYW1lcygpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkRmlsZW5hbWVzKGNsaXBib2FyZEJ1ZmZlcihtX2NsaXBib2FyZFR5cGUpKTsKKyAgICByZXR1
cm4gUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMoY2xpcGJvYXJkQnVmZmVy
KG1fY2xpcGJvYXJkVHlwZSkpOwogfQogCiB2b2lkIFJlYWRhYmxlRGF0YU9iamVjdDo6ZW5zdXJl
VHlwZUNhY2hlSW5pdGlhbGl6ZWQoKSBjb25zdApAQCAtMTMxLDcgKzEzMSw3IEBAIHZvaWQgUmVh
ZGFibGVEYXRhT2JqZWN0OjplbnN1cmVUeXBlQ2FjaGUKICAgICBpZiAobV9pc1R5cGVDYWNoZUlu
aXRpYWxpemVkKQogICAgICAgICByZXR1cm47CiAKLSAgICBtX3R5cGVzID0gQ2hyb21pdW1Ccmlk
Z2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKKyAgICBtX3R5cGVzID0gUGxhdGZvcm1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKICAgICAgICAgY2xpcGJvYXJkQnVm
ZmVyKG1fY2xpcGJvYXJkVHlwZSksICZtX2NvbnRhaW5zRmlsZW5hbWVzKTsKICAgICBtX2lzVHlw
ZUNhY2hlSW5pdGlhbGl6ZWQgPSB0cnVlOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vY2hyb21pdW0vU1NMS2V5R2VuZXJhdG9yQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1NTTEtleUdlbmVyYXRvckNocm9taXVtLmNw
cAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9T
U0xLZXlHZW5lcmF0b3JDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTU0xLZXlHZW5lcmF0b3IuaCIKIAot
I2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIK
ICNpbmNsdWRlICJQbGF0Zm9ybVN0cmluZy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01
MSw3ICs1MSw3IEBAIFN0cmluZyBzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBjaGFs
bGVuZ2VTdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv
bnN0IEtVUkwmIHVybCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OnNpZ25lZFB1Ymxp
Y0tleUFuZENoYWxsZW5nZVN0cmluZyhrZXlTaXplSW5kZXgsCisgICAgcmV0dXJuIFBsYXRmb3Jt
QnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoa2V5U2l6ZUluZGV4LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoYWxsZW5nZVN0cmluZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB1cmwpOwogfQpJbmRleDogU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bS5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21p
dW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDcgKzI3
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTY3JvbGxiYXJUaGVtZUNocm9t
aXVtLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
QnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Ny
b2xsYmFyLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyQ2xpZW50LmgiCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eC5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IlNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eC5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtTW91
c2VFdmVudC5oIgogI2luY2x1ZGUgIlNjcm9sbGJhci5oIgogCkBAIC00NiwyMiArNDYsMjIgQEAg
U2Nyb2xsYmFyVGhlbWUqIFNjcm9sbGJhclRoZW1lOjpuYXRpdmVUaAogaW50IFNjcm9sbGJhclRo
ZW1lQ2hyb21pdW1MaW51eDo6c2Nyb2xsYmFyVGhpY2tuZXNzKFNjcm9sbGJhckNvbnRyb2xTaXpl
IGNvbnRyb2xTaXplKQogewogICAgIC8vIEhvcml6IGFuZCBWZXJ0IHNjcm9sbGJhcnMgYXJlIHRo
ZSBzYW1lIHRoaWNrbmVzcy4KLSAgICBJbnRTaXplIHNjcm9sbGJhclNpemUgPSBDaHJvbWl1bUJy
aWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRp
Y2FsVHJhY2spOworICAgIEludFNpemUgc2Nyb2xsYmFyU2l6ZSA9IFBsYXRmb3JtQnJpZGdlOjpn
ZXRUaGVtZVBhcnRTaXplKFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFj
ayk7CiAgICAgcmV0dXJuIHNjcm9sbGJhclNpemUud2lkdGgoKTsKIH0KIAogdm9pZCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtTGludXg6OnBhaW50VHJhY2tQaWVjZShHcmFwaGljc0NvbnRleHQqIGdj
LCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFy
dCBwYXJ0VHlwZSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRl
ID0gc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IHBhcnRUeXBlID8gQ2hyb21pdW1CcmlkZ2U6
OlN0YXRlSG92ZXIgOiBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAgUGxhdGZvcm1C
cmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSA9IHNjcm9sbGJhci0+aG92ZXJlZFBhcnQoKSA9
PSBwYXJ0VHlwZSA/IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUhvdmVyIDogUGxhdGZvcm1CcmlkZ2U6
OlN0YXRlTm9ybWFsOwogICAgIEludFJlY3QgYWxpZ25SZWN0ID0gdHJhY2tSZWN0KHNjcm9sbGJh
ciwgZmFsc2UpOwotICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMgZXh0
cmFQYXJhbXM7CisgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyBleHRy
YVBhcmFtczsKICAgICBleHRyYVBhcmFtcy5zY3JvbGxiYXJUcmFjay50cmFja1ggPSBhbGlnblJl
Y3QueCgpOwogICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrWSA9IGFsaWduUmVj
dC55KCk7CiAgICAgZXh0cmFQYXJhbXMuc2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aCA9IGFsaWdu
UmVjdC53aWR0aCgpOwogICAgIGV4dHJhUGFyYW1zLnNjcm9sbGJhclRyYWNrLnRyYWNrSGVpZ2h0
ID0gYWxpZ25SZWN0LmhlaWdodCgpOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludFRoZW1lUGFy
dCgKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCiAgICAgICAgIGdjLAotICAg
ICAgICBzY3JvbGxiYXItPm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IENo
cm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIDogQ2hyb21pdW1Ccmlk
Z2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrLAorICAgICAgICBzY3JvbGxiYXItPm9yaWVu
dGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhciA/IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Ny
b2xsYmFySG9yaXpvbnRhbFRyYWNrIDogUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0
aWNhbFRyYWNrLAogICAgICAgICBzdGF0ZSwKICAgICAgICAgcmVjdCwKICAgICAgICAgJmV4dHJh
UGFyYW1zKTsKQEAgLTY5LDUyICs2OSw1MiBAQCB2b2lkIFNjcm9sbGJhclRoZW1lQ2hyb21pdW1M
aW51eDo6cGFpbnRUCiAKIHZvaWQgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bUxpbnV4OjpwYWludEJ1
dHRvbihHcmFwaGljc0NvbnRleHQqIGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50
UmVjdCYgcmVjdCwgU2Nyb2xsYmFyUGFydCBwYXJ0KQogewotICAgIENocm9taXVtQnJpZGdlOjpU
aGVtZVBhcnQgcGFpbnRQYXJ0OwotICAgIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUg
c3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAgUGxhdGZvcm1CcmlkZ2U6
OlRoZW1lUGFydCBwYWludFBhcnQ7CisgICAgUGxhdGZvcm1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0
ZSBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZU5vcm1hbDsKICAgICBib29sIGNoZWNrTWlu
ID0gZmFsc2U7CiAgICAgYm9vbCBjaGVja01heCA9IGZhbHNlOwogICAgIGlmIChzY3JvbGxiYXIt
Pm9yaWVudGF0aW9uKCkgPT0gSG9yaXpvbnRhbFNjcm9sbGJhcikgewogICAgICAgICBpZiAocGFy
dCA9PSBCYWNrQnV0dG9uU3RhcnRQYXJ0KSB7Ci0gICAgICAgICAgICBwYWludFBhcnQgPSBDaHJv
bWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAgICAgICAgICAgIHBhaW50UGFy
dCA9IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93OwogICAgICAgICAgICAg
Y2hlY2tNaW4gPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFpbnRQYXJ0
ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OworICAgICAgICAgICAg
cGFpbnRQYXJ0ID0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OwogICAg
ICAgICAgICAgY2hlY2tNYXggPSB0cnVlOwogICAgICAgICB9CiAgICAgfSBlbHNlIHsKICAgICAg
ICAgaWYgKHBhcnQgPT0gQmFja0J1dHRvblN0YXJ0UGFydCkgewotICAgICAgICAgICAgcGFpbnRQ
YXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJVcEFycm93OworICAgICAgICAgICAg
cGFpbnRQYXJ0ID0gUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJVcEFycm93OwogICAgICAg
ICAgICAgY2hlY2tNaW4gPSB0cnVlOwogICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgcGFp
bnRQYXJ0ID0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7CisgICAgICAg
ICAgICBwYWludFBhcnQgPSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckRvd25BcnJvdzsK
ICAgICAgICAgICAgIGNoZWNrTWF4ID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0KICAgICBpZiAo
KGNoZWNrTWluICYmIChzY3JvbGxiYXItPmN1cnJlbnRQb3MoKSA8PSAwKSkKICAgICAgICAgfHwg
KGNoZWNrTWF4ICYmIHNjcm9sbGJhci0+Y3VycmVudFBvcygpID09IHNjcm9sbGJhci0+bWF4aW11
bSgpKSkgewotICAgICAgICBzdGF0ZSA9IENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVkOwor
ICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVkOwogICAgIH0gZWxz
ZSB7CiAgICAgICAgIGlmIChwYXJ0ID09IHNjcm9sbGJhci0+cHJlc3NlZFBhcnQoKSkKLSAgICAg
ICAgICAgIHN0YXRlID0gQ2hyb21pdW1CcmlkZ2U6OlN0YXRlUHJlc3NlZDsKKyAgICAgICAgICAg
IHN0YXRlID0gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3NlZDsKICAgICAgICAgZWxzZSBpZiAo
cGFydCA9PSBzY3JvbGxiYXItPmhvdmVyZWRQYXJ0KCkpCi0gICAgICAgICAgICBzdGF0ZSA9IENo
cm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVyOworICAgICAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJy
aWRnZTo6U3RhdGVIb3ZlcjsKICAgICB9Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGhlbWVQ
YXJ0KGdjLCBwYWludFBhcnQsIHN0YXRlLCByZWN0LCAwKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6
cGFpbnRUaGVtZVBhcnQoZ2MsIHBhaW50UGFydCwgc3RhdGUsIHJlY3QsIDApOwogfQogCiB2b2lk
IFNjcm9sbGJhclRoZW1lQ2hyb21pdW1MaW51eDo6cGFpbnRUaHVtYihHcmFwaGljc0NvbnRleHQq
IGdjLCBTY3JvbGxiYXIqIHNjcm9sbGJhciwgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBD
aHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlOworICAgIFBsYXRmb3JtQnJpZGdl
OjpUaGVtZVBhaW50U3RhdGUgc3RhdGU7CiAKICAgICBpZiAoc2Nyb2xsYmFyLT5wcmVzc2VkUGFy
dCgpID09IFRodW1iUGFydCkKLSAgICAgICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQ
cmVzc2VkOworICAgICAgICBzdGF0ZSA9IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZVByZXNzZWQ7CiAg
ICAgZWxzZSBpZiAoc2Nyb2xsYmFyLT5ob3ZlcmVkUGFydCgpID09IFRodW1iUGFydCkKLSAgICAg
ICAgc3RhdGUgPSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVIb3ZlcjsKKyAgICAgICAgc3RhdGUgPSBQ
bGF0Zm9ybUJyaWRnZTo6U3RhdGVIb3ZlcjsKICAgICBlbHNlCi0gICAgICAgIHN0YXRlID0gQ2hy
b21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFsOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludFRoZW1l
UGFydCgKKyAgICAgICAgc3RhdGUgPSBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVOb3JtYWw7CisgICAg
UGxhdGZvcm1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAogICAgICAgICBnYywKLSAgICAgICAgc2Ny
b2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBDaHJvbWl1bUJy
aWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYiA6IENocm9taXVtQnJpZGdlOjpQYXJ0
U2Nyb2xsYmFyVmVydGljYWxUaHVtYiwKKyAgICAgICAgc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigp
ID09IEhvcml6b250YWxTY3JvbGxiYXIgPyBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhv
cml6b250YWxUaHVtYiA6IFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVt
YiwKICAgICAgICAgc3RhdGUsCiAgICAgICAgIHJlY3QsCiAgICAgICAgIDApOwpAQCAtMTI4LDIz
ICsxMjgsMjMgQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OnNob3VsZAogSW50
U2l6ZSBTY3JvbGxiYXJUaGVtZUNocm9taXVtTGludXg6OmJ1dHRvblNpemUoU2Nyb2xsYmFyKiBz
Y3JvbGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNh
bFNjcm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0
VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3cpOworICAg
ICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQbGF0
Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclVwQXJyb3cpOwogICAgICAgICByZXR1cm4gSW50U2l6
ZShzaXplLndpZHRoKCksIHNjcm9sbGJhci0+aGVpZ2h0KCkgPCAyICogc2l6ZS5oZWlnaHQoKSA/
IHNjcm9sbGJhci0+aGVpZ2h0KCkgLyAyIDogc2l6ZS5oZWlnaHQoKSk7CiAgICAgfQogCiAgICAg
Ly8gSG9yaXpvbnRhbFNjcm9sbGJhcgotICAgIEludFNpemUgc2l6ZSA9IENocm9taXVtQnJpZGdl
OjpnZXRUaGVtZVBhcnRTaXplKENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93
KTsKKyAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQ
bGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdyk7CiAgICAgcmV0dXJuIEludFNp
emUoc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIHNpemUud2lkdGgoKSA/IHNjcm9sbGJhci0+d2lk
dGgoKSAvIDIgOiBzaXplLndpZHRoKCksIHNpemUuaGVpZ2h0KCkpOwogfQogCiBpbnQgU2Nyb2xs
YmFyVGhlbWVDaHJvbWl1bUxpbnV4OjptaW5pbXVtVGh1bWJMZW5ndGgoU2Nyb2xsYmFyKiBzY3Jv
bGxiYXIpCiB7CiAgICAgaWYgKHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBWZXJ0aWNhbFNj
cm9sbGJhcikgewotICAgICAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhl
bWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIpOwor
ICAgICAgICBJbnRTaXplIHNpemUgPSBQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShQ
bGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1bWIpOwogICAgICAgICByZXR1
cm4gc2l6ZS5oZWlnaHQoKTsKICAgICB9CiAKLSAgICBJbnRTaXplIHNpemUgPSBDaHJvbWl1bUJy
aWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6
b250YWxUaHVtYik7CisgICAgSW50U2l6ZSBzaXplID0gUGxhdGZvcm1CcmlkZ2U6OmdldFRoZW1l
UGFydFNpemUoUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWIpOwog
ICAgIHJldHVybiBzaXplLndpZHRoKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1NYWMubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2Nyb2xsYmFyVGhlbWVDaHJvbWl1bU1h
Yy5tbQkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1
bS9TY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yNyw5ICsy
Nyw5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyVGhlbWVDaHJv
bWl1bU1hYy5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGcmFt
ZVZpZXcuaCIKICNpbmNsdWRlICJJbWFnZUJ1ZmZlci5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJp
ZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xs
Vmlldy5oIgogI2luY2x1ZGUgPENhcmJvbi9DYXJib24uaD4KQEAgLTM3MCwxNSArMzcwLDE1IEBA
IHN0YXRpYyBpbnQgc2Nyb2xsYmFyUGFydFRvSElQcmVzc2VkU3RhdGUKICAgICB9CiB9CiAKLXN0
YXRpYyBDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHNjcm9sbGJhclN0YXRlVG9UaGVt
ZVN0YXRlKFNjcm9sbGJhciogc2Nyb2xsYmFyKSB7CitzdGF0aWMgUGxhdGZvcm1CcmlkZ2U6OlRo
ZW1lUGFpbnRTdGF0ZSBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShTY3JvbGxiYXIqIHNjcm9s
bGJhcikgewogICAgIGlmICghc2Nyb2xsYmFyLT5lbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBD
aHJvbWl1bUJyaWRnZTo6U3RhdGVEaXNhYmxlZDsKKyAgICAgICAgcmV0dXJuIFBsYXRmb3JtQnJp
ZGdlOjpTdGF0ZURpc2FibGVkOwogICAgIGlmICghc2Nyb2xsYmFyLT5jbGllbnQoKS0+aXNBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpTdGF0ZUluYWN0aXZlOworICAg
ICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OlN0YXRlSW5hY3RpdmU7CiAgICAgaWYgKHNjcm9s
bGJhci0+cHJlc3NlZFBhcnQoKSA9PSBUaHVtYlBhcnQpCi0gICAgICAgIHJldHVybiBDaHJvbWl1
bUJyaWRnZTo6U3RhdGVQcmVzc2VkOworICAgICAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OlN0
YXRlUHJlc3NlZDsKIAotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6U3RhdGVBY3RpdmU7Cisg
ICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUFjdGl2ZTsKIH0KIAogYm9vbCBTY3JvbGxi
YXJUaGVtZUNocm9taXVtTWFjOjpwYWludChTY3JvbGxiYXIqIHNjcm9sbGJhciwgR3JhcGhpY3ND
b250ZXh0KiBjb250ZXh0LCBjb25zdCBJbnRSZWN0JiBkYW1hZ2VSZWN0KQpAQCAtNDYzLDE4ICs0
NjMsMTggQEAgYm9vbCBTY3JvbGxiYXJUaGVtZUNocm9taXVtTWFjOjpwYWludChTYwogICAgIH0K
IAogICAgIGlmIChoYXNUaHVtYihzY3JvbGxiYXIpKSB7Ci0gICAgICAgIENocm9taXVtQnJpZGdl
OjpUaGVtZVBhaW50U2Nyb2xsYmFySW5mbyBzY3JvbGxiYXJJbmZvOwotICAgICAgICBzY3JvbGxi
YXJJbmZvLm9yaWVudGF0aW9uID0gc2Nyb2xsYmFyLT5vcmllbnRhdGlvbigpID09IEhvcml6b250
YWxTY3JvbGxiYXIgPyBDaHJvbWl1bUJyaWRnZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9u
dGFsIDogQ2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWw7Ci0gICAg
ICAgIHNjcm9sbGJhckluZm8ucGFyZW50ID0gc2Nyb2xsYmFyLT5wYXJlbnQoKSAmJiBzY3JvbGxi
YXItPnBhcmVudCgpLT5pc0ZyYW1lVmlldygpICYmIHN0YXRpY19jYXN0PEZyYW1lVmlldyo+KHNj
cm9sbGJhci0+cGFyZW50KCkpLT5pc1Njcm9sbFZpZXdTY3JvbGxiYXIoc2Nyb2xsYmFyKSA/IENo
cm9taXVtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRTY3JvbGxWaWV3IDogQ2hyb21pdW1CcmlkZ2U6
OlNjcm9sbGJhclBhcmVudFJlbmRlckxheWVyOworICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6VGhl
bWVQYWludFNjcm9sbGJhckluZm8gc2Nyb2xsYmFySW5mbzsKKyAgICAgICAgc2Nyb2xsYmFySW5m
by5vcmllbnRhdGlvbiA9IHNjcm9sbGJhci0+b3JpZW50YXRpb24oKSA9PSBIb3Jpem9udGFsU2Ny
b2xsYmFyID8gUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhck9yaWVudGF0aW9uSG9yaXpvbnRhbCA6
IFBsYXRmb3JtQnJpZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsOworICAgICAgICBz
Y3JvbGxiYXJJbmZvLnBhcmVudCA9IHNjcm9sbGJhci0+cGFyZW50KCkgJiYgc2Nyb2xsYmFyLT5w
YXJlbnQoKS0+aXNGcmFtZVZpZXcoKSAmJiBzdGF0aWNfY2FzdDxGcmFtZVZpZXcqPihzY3JvbGxi
YXItPnBhcmVudCgpKS0+aXNTY3JvbGxWaWV3U2Nyb2xsYmFyKHNjcm9sbGJhcikgPyBQbGF0Zm9y
bUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldyA6IFBsYXRmb3JtQnJpZGdlOjpTY3Jv
bGxiYXJQYXJlbnRSZW5kZXJMYXllcjsKICAgICAgICAgc2Nyb2xsYmFySW5mby5tYXhWYWx1ZSA9
IHNjcm9sbGJhci0+bWF4aW11bSgpOwogICAgICAgICBzY3JvbGxiYXJJbmZvLmN1cnJlbnRWYWx1
ZSA9IHNjcm9sbGJhci0+Y3VycmVudFBvcygpOwogICAgICAgICBzY3JvbGxiYXJJbmZvLnZpc2li
bGVTaXplID0gc2Nyb2xsYmFyLT52aXNpYmxlU2l6ZSgpOwogICAgICAgICBzY3JvbGxiYXJJbmZv
LnRvdGFsU2l6ZSA9IHNjcm9sbGJhci0+dG90YWxTaXplKCk7CiAKLSAgICAgICAgQ2hyb21pdW1C
cmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIoCisgICAgICAgIFBsYXRmb3JtQnJpZGdlOjpwYWlu
dFNjcm9sbGJhclRodW1iKAogICAgICAgICAgICAgZHJhd2luZ0NvbnRleHQsCiAgICAgICAgICAg
ICBzY3JvbGxiYXJTdGF0ZVRvVGhlbWVTdGF0ZShzY3JvbGxiYXIpLAotICAgICAgICAgICAgc2Ny
b2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFJlZ3VsYXJTY3JvbGxiYXIgPyBDaHJvbWl1bUJyaWRn
ZTo6U2l6ZVJlZ3VsYXIgOiBDaHJvbWl1bUJyaWRnZTo6U2l6ZVNtYWxsLAorICAgICAgICAgICAg
c2Nyb2xsYmFyLT5jb250cm9sU2l6ZSgpID09IFJlZ3VsYXJTY3JvbGxiYXIgPyBQbGF0Zm9ybUJy
aWRnZTo6U2l6ZVJlZ3VsYXIgOiBQbGF0Zm9ybUJyaWRnZTo6U2l6ZVNtYWxsLAogICAgICAgICAg
ICAgc2Nyb2xsYmFyLT5mcmFtZVJlY3QoKSwKICAgICAgICAgICAgIHNjcm9sbGJhckluZm8pOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRo
ZW1lQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lvbiA3NjE3MykK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2Nocm9taXVtL1Njcm9sbGJhclRoZW1lQ2hyb21p
dW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw4ICszMCw4IEBACiAjaW5jbHVkZSA8d2lu
ZG93cy5oPgogI2luY2x1ZGUgPHZzc3R5bGUuaD4KIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdl
LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1Nb3VzZUV2ZW50LmgiCiAjaW5jbHVkZSAiU2Nyb2xsYmFyLmgiCkBAIC02MSw3ICs2MSw3IEBA
IGludCBTY3JvbGxiYXJUaGVtZUNocm9taXVtV2luOjpzY3JvbGxiYXIKIHsKICAgICBzdGF0aWMg
aW50IHRoaWNrbmVzczsKICAgICBpZiAoIXRoaWNrbmVzcykgewotICAgICAgICBpZiAoQ2hyb21p
dW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkpCisgICAgICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6
bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgICAgIHJldHVybiBrTWFjU2Nyb2xsYmFyU2l6ZVtj
b250cm9sU2l6ZV07CiAgICAgICAgIHRoaWNrbmVzcyA9IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hW
U0NST0xMKTsKICAgICB9CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFRyYQogICAgIEludFJlY3QgYWxpZ25SZWN0ID0gdHJhY2tSZWN0KHNj
cm9sbGJhciwgZmFsc2UpOwogCiAgICAgLy8gRHJhdyB0aGUgdHJhY2sgYXJlYSBiZWZvcmUvYWZ0
ZXIgdGhlIHRodW1iIG9uIHRoZSBzY3JvbGwgYmFyLgotICAgIENocm9taXVtQnJpZGdlOjpwYWlu
dFNjcm9sbGJhclRyYWNrKAorICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRyYWNr
KAogICAgICAgICBnYywKICAgICAgICAgcGFydElkLAogICAgICAgICBnZXRUaGVtZVN0YXRlKHNj
cm9sbGJhciwgcGFydFR5cGUpLApAQCAtMTI0LDcgKzEyNCw3IEBAIHZvaWQgU2Nyb2xsYmFyVGhl
bWVDaHJvbWl1bVdpbjo6cGFpbnRCdXQKICAgICAgICAgcGFydElkID0gaG9yeiA/IERGQ1NfU0NS
T0xMUklHSFQgOiBERkNTX1NDUk9MTERPV047CiAKICAgICAvLyBEcmF3IHRoZSB0aHVtYiAodGhl
IGJveCB5b3UgZHJhZyBpbiB0aGUgc2Nyb2xsIGJhciB0byBzY3JvbGwpLgotICAgIENocm9taXVt
QnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93KAorICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFNj
cm9sbGJhckFycm93KAogICAgICAgICBnYywKICAgICAgICAgZ2V0VGhlbWVBcnJvd1N0YXRlKHNj
cm9sbGJhciwgcGFydCksCiAgICAgICAgIHBhcnRJZCB8IGdldENsYXNzaWNUaGVtZVN0YXRlKHNj
cm9sbGJhciwgcGFydCksCkBAIC0xMzYsNyArMTM2LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNo
cm9taXVtV2luOjpwYWludFRodQogICAgIGJvb2wgaG9yeiA9IHNjcm9sbGJhci0+b3JpZW50YXRp
b24oKSA9PSBIb3Jpem9udGFsU2Nyb2xsYmFyOwogCiAgICAgLy8gRHJhdyB0aGUgdGh1bWIgKHRo
ZSBib3ggeW91IGRyYWcgaW4gdGhlIHNjcm9sbCBiYXIgdG8gc2Nyb2xsKS4KLSAgICBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRT
Y3JvbGxiYXJUaHVtYigKICAgICAgICAgZ2MsCiAgICAgICAgIGhvcnogPyBTQlBfVEhVTUJCVE5I
T1JaIDogU0JQX1RIVU1CQlROVkVSVCwKICAgICAgICAgZ2V0VGhlbWVTdGF0ZShzY3JvbGxiYXIs
IFRodW1iUGFydCksCkBAIC0xNDQsNyArMTQ0LDcgQEAgdm9pZCBTY3JvbGxiYXJUaGVtZUNocm9t
aXVtV2luOjpwYWludFRodQogICAgICAgICByZWN0KTsKIAogICAgIC8vIERyYXcgdGhlIGdyaXBw
ZXIgKHRoZSB0aHJlZSBsaXR0bGUgbGluZXMgb24gdGhlIHRodW1iKS4KLSAgICBDaHJvbWl1bUJy
aWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3Jv
bGxiYXJUaHVtYigKICAgICAgICAgZ2MsCiAgICAgICAgIGhvcnogPyBTQlBfR1JJUFBFUkhPUlog
OiBTQlBfR1JJUFBFUlZFUlQsCiAgICAgICAgIGdldFRoZW1lU3RhdGUoc2Nyb2xsYmFyLCBUaHVt
YlBhcnQpLApAQCAtMjU2LDcgKzI1Niw3IEBAIEludFNpemUgU2Nyb2xsYmFyVGhlbWVDaHJvbWl1
bVdpbjo6YnV0dG8KICAgICAvLyB0ZXN0IG1vZGUgc28gdGhhdCBzaG91bGQgYmUgZW5vdWdoIHRv
IHJlc3VsdCBpbiByZXBlYXRhYmxlIHJlc3VsdHMsIGJ1dAogICAgIC8vIHByZXNlcnZpbmcgdGhp
cyBoYWNrIGF2b2lkcyBoYXZpbmcgdG8gcmViYXNlbGluZSBwaXhlbCB0ZXN0cy4KICAgICBjb25z
dCBpbnQga0xheW91dFRlc3RNb2RlR2lydGggPSAxNzsKLSAgICBpbnQgZ2lydGggPSBDaHJvbWl1
bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/IGtMYXlvdXRUZXN0TW9kZUdpcnRoIDogdGhpY2tu
ZXNzOworICAgIGludCBnaXJ0aCA9IFBsYXRmb3JtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpID8g
a0xheW91dFRlc3RNb2RlR2lydGggOiB0aGlja25lc3M7CiAKICAgICBpZiAoc2Nyb2xsYmFyLT5v
cmllbnRhdGlvbigpID09IEhvcml6b250YWxTY3JvbGxiYXIpIHsKICAgICAgICAgaW50IHdpZHRo
ID0gc2Nyb2xsYmFyLT53aWR0aCgpIDwgMiAqIGdpcnRoID8gc2Nyb2xsYmFyLT53aWR0aCgpIC8g
MiA6IGdpcnRoOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVk
VGltZXJDaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Y2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU2hhcmVkVGltZXJDaHJvbWl1bS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDIzICsyNiwyMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIlNoYXJlZFRpbWVyLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogdm9pZCBz
ZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24odm9pZCAoKmYpKCkpCiB7ICAgICAgICAgICAgICAg
ICAgIAotICAgIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24oZik7
CisgICAgUGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbihmKTsKIH0K
IAogdm9pZCBzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKIHsKLSAgICBD
aHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlVGltZShmaXJlVGltZSk7CisgICAgUGxh
dGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZVRpbWUoZmlyZVRpbWUpOwogfQogCiB2b2lk
IHN0b3BTaGFyZWRUaW1lcigpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1l
cigpOworICAgIFBsYXRmb3JtQnJpZGdlOjpzdG9wU2hhcmVkVGltZXIoKTsKIH0KIAogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0v
U3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVybWluYXRpb25DaHJvbWl1bS5jcHAJKHJldmlz
aW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU3VkZGVuVGVy
bWluYXRpb25DaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDggKzEsNDggQEAKLS8q
DQotICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
DQotICoNCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQNCi0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlDQotICogbWV0Og0KLSAqDQot
ICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQNCi0gKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuDQotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQ0KLSAqIGNvcHlyaWdodCBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXINCi0g
KiBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlDQotICogZGlzdHJpYnV0aW9uLg0KLSAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2Yg
R29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMNCi0gKiBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQ0KLSAqIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uDQot
ICoNCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVS
UyBBTkQgQ09OVFJJQlVUT1JTDQotICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1INCi0gKiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhF
IENPUFlSSUdIVA0KLSAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLA0KLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QNCi0gKiBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwNCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkNCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUDQotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4NCi0gKi8NCi0NCi0jaW5jbHVkZSAiY29uZmlnLmgiDQotI2luY2x1ZGUg
IlN1ZGRlblRlcm1pbmF0aW9uLmgiDQotDQotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiDQot
DQotbmFtZXNwYWNlIFdlYkNvcmUgew0KLQ0KLXZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9u
KCkNCi17DQotICAgIENocm9taXVtQnJpZGdlOjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQoZmFs
c2UpOw0KLX0NCi0NCi12b2lkIGVuYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkNCi17DQotICAgIENo
cm9taXVtQnJpZGdlOjpzdWRkZW5UZXJtaW5hdGlvbkNoYW5nZWQodHJ1ZSk7DQotfQ0KLQ0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUNCisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMg
YXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNv
cHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIg
dGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBm
cm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJt
aXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdI
VCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IK
KyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlN1ZGRl
blRlcm1pbmF0aW9uLmgiCisKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3ZvaWQgZGlzYWJsZVN1ZGRlblRlcm1pbmF0aW9uKCkKK3sKKyAgICBQ
bGF0Zm9ybUJyaWRnZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGZhbHNlKTsKK30KKwordm9p
ZCBlbmFibGVTdWRkZW5UZXJtaW5hdGlvbigpCit7CisgICAgUGxhdGZvcm1CcmlkZ2U6OnN1ZGRl
blRlcm1pbmF0aW9uQ2hhbmdlZCh0cnVlKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vU3lzdGVtVGltZUNocm9taXVt
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJvbWl1bS9TeXN0
ZW1UaW1lQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2Nocm9taXVtL1N5c3RlbVRpbWVDaHJvbWl1bS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMxLDE1ICszMSwxNSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN5c3RlbVRp
bWUuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIC8vIEdldCB0aGUgY3VycmVudCB0aW1lIGluIHNlY29uZHMgc2luY2UgZXBvY2guCiBk
b3VibGUgY3VycmVudFRpbWUoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6Y3VycmVu
dFRpbWUoKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmN1cnJlbnRUaW1lKCk7CiB9CiAK
IGZsb2F0IHVzZXJJZGxlVGltZSgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jaHJv
bWl1bS9Xcml0YWJsZURhdGFPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2Nocm9taXVtL1dyaXRhYmxlRGF0YU9iamVjdC5jcHAJKHJldmlzaW9uIDc2MTcz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY2hyb21pdW0vV3JpdGFibGVEYXRhT2JqZWN0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOCArMzEsOCBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldyaXRhYmxlRGF0YU9iamVjdC5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKICNpbmNsdWRlICJDbGlwYm9hcmRNaW1lVHlwZXMuaCIKKyNpbmNsdWRlICJQbGF0
Zm9ybUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTgwLDcgKzgwLDcgQEAg
Ym9vbCBXcml0YWJsZURhdGFPYmplY3Q6OnNldERhdGEoY29uc3QgUwogICAgICAgICAvLyBGSVhN
RTogVGhpcyBpcyBjdXJyZW50bHkgdW5pbXBsZW1lbnRlZCBvbiB0aGUgQ2hyb21pdW0tc2lkZS4g
VGhpcyBpcwogICAgICAgICAvLyAib2theSIgZm9yIG5vdyBzaW5jZSB0aGUgb3JpZ2luYWwgaW1w
bGVtZW50YXRpb24gZGlkbid0IHN1cHBvcnQgaXQKICAgICAgICAgLy8gYW55d2F5LiBHb2luZyBm
b3J3YXJkLCB0aGlzIGlzIHNvbWV0aGluZyB3ZSdsbCBuZWVkIHRvIGZpeCB0aG91Z2guCi0gICAg
ICAgIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEodHlwZSwgZGF0YSwgIiIpOwor
ICAgICAgICBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVEYXRhKHR5cGUsIGRhdGEsICIi
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIG1fZGF0YU1hcC5zZXQodHlwZSwg
ZGF0YSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9D
cm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQkocmV2
aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1
bS9Dcm9zc1Byb2Nlc3NGb250TG9hZGluZy5tbQkod29ya2luZyBjb3B5KQpAQCAtMzAsNyArMzAs
NyBAQAogI2ltcG9ydCAiQ3Jvc3NQcm9jZXNzRm9udExvYWRpbmcuaCIKIAogI2ltcG9ydCAiLi4v
Z3JhcGhpY3MvY29jb2EvRm9udFBsYXRmb3JtRGF0YS5oIgotI2ltcG9ydCAiQ2hyb21pdW1Ccmlk
Z2UuaCIKKyNpbXBvcnQgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW1wb3J0IDxBcHBLaXQvTlNGb250
Lmg+CiAjaW1wb3J0IDx3dGYvSGFzaE1hcC5oPgogCkBAIC04Nyw3ICs4Nyw3IEBAIFBhc3NSZWZQ
dHI8TWVtb3J5QWN0aXZhdGVkRm9udD4gbG9hZEZvbnQKIHsKICAgICBBVFNGb250Q29udGFpbmVy
UmVmIGNvbnRhaW5lcjsKICAgICAvLyBTZW5kIGNyb3NzLXByb2Nlc3MgcmVxdWVzdCB0byBsb2Fk
IGZvbnQuCi0gICAgaWYgKCFDaHJvbWl1bUJyaWRnZTo6bG9hZEZvbnQobnNGb250LCAmY29udGFp
bmVyKSkKKyAgICBpZiAoIVBsYXRmb3JtQnJpZGdlOjpsb2FkRm9udChuc0ZvbnQsICZjb250YWlu
ZXIpKQogICAgICAgICByZXR1cm4gMDsKICAgICAKICAgICBBVFNGb250Q29udGFpbmVyUmVmIHNy
Y0ZvbnRDb250YWluZXJSZWYgPSBmb250Q29udGFpbmVyUmVmRnJvbU5TRm9udChuc0ZvbnQpOwpJ
bmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2Nocm9taXVtL0ZvbnRDYWNoZUNocm9taXVtV2luLmNwcAkocmV2aXNpb24gNzYxNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVD
aHJvbWl1bVdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMyLDExICszMiwxMSBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRDYWNoZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21p
dW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udFV0aWxzQ2hyb21p
dW1XaW4uaCIKICNpbmNsdWRlICJIYXNoTWFwLmgiCiAjaW5jbHVkZSAiSGFzaFNldC5oIgorI2lu
Y2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiU2ltcGxlRm9udERhdGEuaCIKICNp
bmNsdWRlIDx1bmljb2RlL3VuaXNldC5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2gu
aD4KQEAgLTI4OCw5ICsyODgsOSBAQCBzdGF0aWMgYm9vbCBmb250Q29udGFpbnNDaGFyYWN0ZXIo
Y29uc3QgCiAgICAgSERDIGhkYyA9IEdldERDKDApOwogICAgIEhHRElPQkogb2xkRm9udCA9IHN0
YXRpY19jYXN0PEhGT05UPihTZWxlY3RPYmplY3QoaGRjLCBoZm9udCkpOwogICAgIGludCBjb3Vu
dCA9IEdldEZvbnRVbmljb2RlUmFuZ2VzKGhkYywgMCk7Ci0gICAgaWYgKGNvdW50ID09IDAgJiYg
Q2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoaGZvbnQpKQorICAgIGlmICghY291bnQg
JiYgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoaGZvbnQpKQogICAgICAgICBjb3Vu
dCA9IEdldEZvbnRVbmljb2RlUmFuZ2VzKGhkYywgMCk7Ci0gICAgaWYgKGNvdW50ID09IDApIHsK
KyAgICBpZiAoIWNvdW50KSB7CiAgICAgICAgIExPR19FUlJPUigiVW5hYmxlIHRvIGdldCB0aGUg
Zm9udCB1bmljb2RlIHJhbmdlIGFmdGVyIHNlY29uZCBhdHRlbXB0Iik7CiAgICAgICAgIFNlbGVj
dE9iamVjdChoZGMsIG9sZEZvbnQpOwogICAgICAgICBSZWxlYXNlREMoMCwgaGRjKTsKQEAgLTM2
Miw3ICszNjIsNyBAQCBzdGF0aWMgdm9pZCBGaWxsTG9nRm9udChjb25zdCBGb250RGVzY3JpCiAg
ICAgd2luZm9udC0+bGZTdHJpa2VPdXQgPSBmYWxzZTsKICAgICB3aW5mb250LT5sZkNoYXJTZXQg
PSBERUZBVUxUX0NIQVJTRVQ7CiAgICAgd2luZm9udC0+bGZPdXRQcmVjaXNpb24gPSBPVVRfVFRf
T05MWV9QUkVDSVM7Ci0gICAgd2luZm9udC0+bGZRdWFsaXR5ID0gQ2hyb21pdW1CcmlkZ2U6Omxh
eW91dFRlc3RNb2RlKCkgPyBOT05BTlRJQUxJQVNFRF9RVUFMSVRZIDogREVGQVVMVF9RVUFMSVRZ
OyAvLyBIb25vciB1c2VyJ3MgZGVza3RvcCBzZXR0aW5ncy4KKyAgICB3aW5mb250LT5sZlF1YWxp
dHkgPSBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSA/IE5PTkFOVElBTElBU0VEX1FV
QUxJVFkgOiBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIncyBkZXNrdG9wIHNldHRpbmdz
LgogICAgIHdpbmZvbnQtPmxmUGl0Y2hBbmRGYW1pbHkgPSBERUZBVUxUX1BJVENIIHwgRkZfRE9O
VENBUkU7CiAgICAgd2luZm9udC0+bGZJdGFsaWMgPSBmb250RGVzY3JpcHRpb24uaXRhbGljKCk7
CiAgICAgd2luZm9udC0+bGZXZWlnaHQgPSB0b0dESUZvbnRXZWlnaHQoZm9udERlc2NyaXB0aW9u
LndlaWdodCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0ZvbnRDYWNoZUxpbnV4LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2FjaGVMaW51eC5jcHAJKHJldmlzaW9uIDc2MTcz
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udENhY2hl
TGludXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxMiArMzEsMTIgQEAKICNpbmNsdWRlICJj
b25maWcuaCIKICNpbmNsdWRlICJGb250Q2FjaGUuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJp
ZGdlLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogI2luY2x1ZGUgIkZvbnREZXNjcmlwdGlvbi5oIgog
I2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2lu
Y2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAKICNpbmNsdWRlICJTa1BhaW50LmgiCkBAIC01Nyw3
ICs1Nyw3IEBAIGNvbnN0IFNpbXBsZUZvbnREYXRhKiBGb250Q2FjaGU6OmdldEZvbnQKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBpbnQgbGVuZ3RoKQogewotICAgIFN0cmluZyBmYW1pbHkg
PSBDaHJvbWl1bUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY2hhcmFjdGVycywg
bGVuZ3RoKTsKKyAgICBTdHJpbmcgZmFtaWx5ID0gUGxhdGZvcm1CcmlkZ2U6OmdldEZvbnRGYW1p
bHlGb3JDaGFyYWN0ZXJzKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiAgICAgaWYgKGZhbWlseS5pc0Vt
cHR5KCkpCiAgICAgICAgIHJldHVybiAwOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jaHJvbWl1bS9Gb250Q2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ZvbnRDaHJvbWl1bVdpbi5j
cHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vRm9udENocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsMTAgKzMy
LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRm9udC5oIgogCi0jaW5jbHVk
ZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJGb250RmFsbGJhY2tMaXN0LmgiCiAjaW5j
bHVkZSAiR2x5cGhCdWZmZXIuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgog
I2luY2x1ZGUgIlNpbXBsZUZvbnREYXRhLmgiCiAjaW5jbHVkZSAiU2tpYUZvbnRXaW4uaCIKQEAg
LTQyNCw3ICs0MjQsNyBAQCB2b2lkIEZvbnQ6OmRyYXdHbHlwaHMoR3JhcGhpY3NDb250ZXh0KiBn
CiAgICAgICAgICAgICBzdWNjZXNzID0gcGFpbnRlci5kcmF3R2x5cGhzKGN1ckxlbiwgJmdseXBo
c1swXSwgJmFkdmFuY2VzWzBdLCBjdXJBZHZhbmNlKTsKICAgICAgICAgICAgIGlmICghc3VjY2Vz
cyAmJiBleGVjdXRpb25zID09IDApIHsKICAgICAgICAgICAgICAgICAvLyBBc2sgdGhlIGJyb3dz
ZXIgdG8gbG9hZCB0aGUgZm9udCBmb3IgdXMgYW5kIHJldHJ5LgotICAgICAgICAgICAgICAgIENo
cm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZvbnQtPnBsYXRmb3JtRGF0YSgpLmhmb250
KCkpOworICAgICAgICAgICAgICAgIFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZv
bnQtPnBsYXRmb3JtRGF0YSgpLmhmb250KCkpOwogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1EYXRhQ2hyb21pdW1XaW4uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVt
L0ZvbnRQbGF0Zm9ybURhdGFDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3JtRGF0YUNo
cm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsNyArMzYsNyBAQAogI2luY2x1ZGUg
PG9iamlkbC5oPgogI2luY2x1ZGUgPG1sYW5nLmg+CiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRn
ZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiU2tpYUZvbnRXaW4u
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewpAQCAtMTM2LDcgKzEzNiw3IEBAIFNDUklQVF9GT05U
UFJPUEVSVElFUyogRm9udFBsYXRmb3JtRGF0YToKICAgICAgICAgICAgIEhSRVNVTFQgaHIgPSBT
Y3JpcHRHZXRGb250UHJvcGVydGllcyhkYywgc2NyaXB0Q2FjaGUoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX3NjcmlwdEZvbnRQcm9wZXJ0aWVz
KTsKICAgICAgICAgICAgIGlmIChTX09LICE9IGhyKSB7Ci0gICAgICAgICAgICAgICAgaWYgKENo
cm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGhmb250KCkpKSB7CisgICAgICAgICAgICAg
ICAgaWYgKFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGhmb250KCkpKSB7CiAgICAg
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYg
dGhpcyBjYWxsIGFsc28gZmFpbHMuCiAgICAgICAgICAgICAgICAgICAgIGhyID0gU2NyaXB0R2V0
Rm9udFByb3BlcnRpZXMoZGMsIHNjcmlwdENhY2hlKCksCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9zY3JpcHRGb250UHJvcGVydGllcyk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9Gb250UGxhdGZvcm1E
YXRhTGludXguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2Nocm9taXVtL0ZvbnRQbGF0Zm9ybURhdGFMaW51eC5jcHAJKHJldmlzaW9uIDc2MTczKQor
KysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2hyb21pdW0vRm9udFBsYXRmb3Jt
RGF0YUxpbnV4LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsOSArMzEsOSBAQAogI2luY2x1ZGUg
ImNvbmZpZy5oIgogI2luY2x1ZGUgIkZvbnRQbGF0Zm9ybURhdGEuaCIKIAotI2luY2x1ZGUgIkNo
cm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiSGFyZmJ1enpTa2lhLmgiCiAjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlBs
YXRmb3JtU3RyaW5nLmgiCiAKICNpbmNsdWRlICJTa1BhaW50LmgiCkBAIC0yMjksNyArMjI5LDcg
QEAgdm9pZCBGb250UGxhdGZvcm1EYXRhOjpxdWVyeVN5c3RlbUZvclJlbgogICAgICAgICByZXR1
cm47CiAgICAgfQogCi0gICAgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3RyaWtl
KG1fZmFtaWx5LmRhdGEoKSwgKCgoaW50KW1fdGV4dFNpemUpIDw8IDIpIHwgKG1fdHlwZWZhY2Ut
PnN0eWxlKCkgJiAzKSwgJm1fc3R5bGUpOworICAgIFBsYXRmb3JtQnJpZGdlOjpnZXRSZW5kZXJT
dHlsZUZvclN0cmlrZShtX2ZhbWlseS5kYXRhKCksICgoKGludCltX3RleHRTaXplKSA8PCAyKSB8
IChtX3R5cGVmYWNlLT5zdHlsZSgpICYgMyksICZtX3N0eWxlKTsKIH0KIAogfSAgLy8gbmFtZXNw
YWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9t
aXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hy
b21pdW1XaW4uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL0dseXBoUGFnZVRyZWVOb2RlQ2hyb21pdW1XaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zMiw5ICszMiw5IEBACiAjaW5jbHVkZSA8d2luZG93cy5oPgogI2luY2x1
ZGUgPHZlY3Rvcj4KIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiRm9u
dC5oIgogI2luY2x1ZGUgIkdseXBoUGFnZVRyZWVOb2RlLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1C
cmlkZ2UuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogI2luY2x1ZGUgIlVuaXNjcmli
ZUhlbHBlclRleHRSdW4uaCIKICNpbmNsdWRlICJXaW5kb3dzVmVyc2lvbi5oIgpAQCAtODAsMTIg
KzgwLDExIEBAIHN0YXRpYyBib29sIGZpbGxCTVBHbHlwaHModW5zaWduZWQgb2Zmc2UKICAgICAg
ICAgUmVsZWFzZURDKDAsIGRjKTsKIAogICAgICAgICBpZiAocmVjdXJzZSkgewotICAgICAgICAg
ICAgaWYgKENocm9taXVtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKGZvbnREYXRhLT5wbGF0Zm9y
bURhdGEoKS5oZm9udCgpKSkKKyAgICAgICAgICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6ZW5zdXJl
Rm9udExvYWRlZChmb250RGF0YS0+cGxhdGZvcm1EYXRhKCkuaGZvbnQoKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZpbGxCTVBHbHlwaHMob2Zmc2V0LCBsZW5ndGgsIGJ1ZmZlciwgcGFnZSwg
Zm9udERhdGEsIGZhbHNlKTsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgIGZp
bGxFbXB0eUdseXBocyhwYWdlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZpbGxFbXB0eUdseXBocyhwYWdlKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIEZJWE1F
OiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28gZmFpbHMuCiAg
ICAgICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS82NDAxCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNo
cm9taXVtLmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEs
NyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCiAKLSNp
bmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAKIFBhc3NSZWZQdHI8SW1hZ2U+IEltYWdlOjpsb2FkUGxhdGZvcm1SZXNvdXJjZShjb25z
dCBjaGFyICpuYW1lKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3Jt
SW1hZ2VSZXNvdXJjZShuYW1lKTsKKyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmxvYWRQbGF0
Zm9ybUltYWdlUmVzb3VyY2UobmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL0ltYWdlQ2hyb21p
dW1NYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2hyb21pdW0vSW1hZ2VDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jaHJvbWl1bS9JbWFnZUNocm9taXVtTWFjLm1tCSh3
b3JraW5nIGNvcHkpCkBAIC0zMywxNCArMzMsMTQgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJCaXRtYXBJbWFnZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKICNp
bmNsdWRlICJJbWFnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogUGFzc1JlZlB0cjxJbWFnZT4gSW1hZ2U6OmxvYWRQbGF0Zm9ybVJlc291
cmNlKGNvbnN0IGNoYXIqIG5hbWUpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsb2Fk
UGxhdGZvcm1JbWFnZVJlc291cmNlKG5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6
bG9hZFBsYXRmb3JtSW1hZ2VSZXNvdXJjZShuYW1lKTsKIH0KIAogLy8gRklYTUU6IFRoZXNlIGFy
ZSB0ZW1wb3Jhcnkgc3R1YnMsIHdlIG5lZWQgcmVhbCBpbXBsZW1lbnRhdGlvbnMgd2hpY2gKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnRE
YXRhQ2hyb21pdW1XaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2Nocm9taXVtL1NpbXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCShyZXZpc2lv
biA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1Np
bXBsZUZvbnREYXRhQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMSArMzIs
MTEgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgog
Ci0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJGbG9hdFJlY3QuaCIKICNp
bmNsdWRlICJGb250LmgiCiAjaW5jbHVkZSAiRm9udENhY2hlLmgiCi0jaW5jbHVkZSAiRmxvYXRS
ZWN0LmgiCiAjaW5jbHVkZSAiRm9udERlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1C
cmlkZ2UuaCIKICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogCiAjaW5jbHVkZSA8dW5pY29k
ZS91Y2hhci5oPgpAQCAtNzAsNyArNzAsNyBAQCB2b2lkIFNpbXBsZUZvbnREYXRhOjpwbGF0Zm9y
bUluaXQoKQogCiAgICAgVEVYVE1FVFJJQyB0ZXh0TWV0cmljID0gezB9OwogICAgIGlmICghR2V0
VGV4dE1ldHJpY3MoZGMsICZ0ZXh0TWV0cmljKSkgewotICAgICAgICBpZiAoQ2hyb21pdW1Ccmlk
Z2U6OmVuc3VyZUZvbnRMb2FkZWQobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSkpIHsKKyAgICAgICAg
aWYgKFBsYXRmb3JtQnJpZGdlOjplbnN1cmVGb250TG9hZGVkKG1fcGxhdGZvcm1EYXRhLmhmb250
KCkpKSB7CiAgICAgICAgICAgICAvLyBSZXRyeSBHZXRUZXh0TWV0cmljcy4KICAgICAgICAgICAg
IC8vIEZJWE1FOiBIYW5kbGUgZ3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28g
ZmFpbHMuCiAgICAgICAgICAgICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS82NDAxLgpAQCAtMTU5
LDcgKzE1OSw3IEBAIHZvaWQgU2ltcGxlRm9udERhdGE6OmRldGVybWluZVBpdGNoKCkKICAgICAv
LyBpcyAqbm90KiBmaXhlZCBwaXRjaC4gIFVuYmVsaWV2YWJsZSBidXQgdHJ1ZS4KICAgICBURVhU
TUVUUklDIHRleHRNZXRyaWMgPSB7MH07CiAgICAgaWYgKCFHZXRUZXh0TWV0cmljcyhkYywgJnRl
eHRNZXRyaWMpKSB7Ci0gICAgICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRl
ZChtX3BsYXRmb3JtRGF0YS5oZm9udCgpKSkgeworICAgICAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6
OmVuc3VyZUZvbnRMb2FkZWQobV9wbGF0Zm9ybURhdGEuaGZvbnQoKSkpIHsKICAgICAgICAgICAg
IC8vIFJldHJ5IEdldFRleHRNZXRyaWNzLgogICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBn
cmFjZWZ1bGx5IHRoZSBlcnJvciBpZiB0aGlzIGNhbGwgYWxzbyBmYWlscy4KICAgICAgICAgICAg
IC8vIFNlZSBodHRwOi8vY3JidWcuY29tLzY0MDEuCkBAIC0xOTAsNyArMTkwLDcgQEAgZmxvYXQg
U2ltcGxlRm9udERhdGE6OnBsYXRmb3JtV2lkdGhGb3JHbAogICAgIGludCB3aWR0aCA9IDA7CiAg
ICAgaWYgKCFHZXRDaGFyV2lkdGhJKGRjLCBnbHlwaCwgMSwgMCwgJndpZHRoKSkgewogICAgICAg
ICAvLyBBc2sgdGhlIGJyb3dzZXIgdG8gcHJlbG9hZCB0aGUgZm9udCBhbmQgcmV0cnkuCi0gICAg
ICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6ZW5zdXJlRm9udExvYWRlZChtX3BsYXRmb3JtRGF0YS5o
Zm9udCgpKSkgeworICAgICAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQo
bV9wbGF0Zm9ybURhdGEuaGZvbnQoKSkpIHsKICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUg
Z3JhY2VmdWxseSB0aGUgZXJyb3IgaWYgdGhpcyBjYWxsIGFsc28gZmFpbHMuCiAgICAgICAgICAg
ICAvLyBTZWUgaHR0cDovL2NyYnVnLmNvbS82NDAxLgogICAgICAgICAgICAgaWYgKCFHZXRDaGFy
V2lkdGhJKGRjLCBnbHlwaCwgMSwgMCwgJndpZHRoKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNj
cmliZUhlbHBlclRleHRSdW4uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2Nocm9taXVtL1VuaXNjcmliZUhlbHBlclRleHRSdW4uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw4ICszMSw4IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiVW5pc2NyaWJlSGVscGVyVGV4dFJ1bi5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJGb250LmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNp
bmNsdWRlICJTaW1wbGVGb250RGF0YS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC03OSw3
ICs3OSw3IEBAIHZvaWQgVW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6dHJ5VG9QcmVsb2EKICAgICAv
LyBBc2sgdGhlIGJyb3dzZXIgdG8gZ2V0IHRoZSBmb250IG1ldHJpY3MgZm9yIHRoaXMgZm9udC4K
ICAgICAvLyBUaGF0IHdpbGwgcHJlbG9hZCB0aGUgZm9udCBhbmQgaXQgc2hvdWxkIG5vdyBiZSBh
Y2Nlc3NpYmxlCiAgICAgLy8gZnJvbSB0aGUgcmVuZGVyZXIuCi0gICAgQ2hyb21pdW1CcmlkZ2U6
OmVuc3VyZUZvbnRMb2FkZWQoZm9udCk7CisgICAgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRM
b2FkZWQoZm9udCk7CiB9CiAKIGJvb2wgVW5pc2NyaWJlSGVscGVyVGV4dFJ1bjo6bmV4dFdpbkZv
bnREYXRhKApJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc2tpYS9Gb250
Q3VzdG9tUGxhdGZvcm1EYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9za2lhL0ZvbnRDdXN0b21QbGF0Zm9ybURhdGEuY3BwCShyZXZpc2lvbiA3
NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3NraWEvRm9udEN1c3Rv
bVBsYXRmb3JtRGF0YS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDggKzM1LDggQEAKIAogI2lm
IE9TKFdJTkRPV1MpCiAjaW5jbHVkZSAiQmFzZTY0LmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKICNpbmNsdWRlICJPcGVuVHlwZVV0aWxpdGllcy5oIgorI2luY2x1ZGUgIlBsYXRmb3Jt
QnJpZGdlLmgiCiAjZWxpZiBPUyhMSU5VWCkgfHwgT1MoRlJFRUJTRCkgfHwgUExBVEZPUk0oQlJF
V01QKQogI2luY2x1ZGUgIlNrU3RyZWFtLmgiCiAjZW5kaWYKQEAgLTkxLDcgKzkxLDcgQEAgRm9u
dFBsYXRmb3JtRGF0YSBGb250Q3VzdG9tUGxhdGZvcm1EYXRhOgogICAgIGxvZ0ZvbnQubGZTdHJp
a2VPdXQgPSBmYWxzZTsKICAgICBsb2dGb250LmxmQ2hhclNldCA9IERFRkFVTFRfQ0hBUlNFVDsK
ICAgICBsb2dGb250LmxmT3V0UHJlY2lzaW9uID0gT1VUX1RUX09OTFlfUFJFQ0lTOwotICAgIGxv
Z0ZvbnQubGZRdWFsaXR5ID0gQ2hyb21pdW1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPworICAg
IGxvZ0ZvbnQubGZRdWFsaXR5ID0gUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPwog
ICAgICAgICAgICAgICAgICAgICAgICAgTk9OQU5USUFMSUFTRURfUVVBTElUWSA6CiAgICAgICAg
ICAgICAgICAgICAgICAgICBERUZBVUxUX1FVQUxJVFk7IC8vIEhvbm9yIHVzZXIncyBkZXNrdG9w
IHNldHRpbmdzLgogICAgIGxvZ0ZvbnQubGZQaXRjaEFuZEZhbWlseSA9IERFRkFVTFRfUElUQ0gg
fCBGRl9ET05UQ0FSRTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hy
b21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29va2llSmFyQ2hyb21pdW0uY3BwCShyZXZpc2lv
biA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvY2hyb21pdW0vQ29v
a2llSmFyQ2hyb21pdW0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwzOSArMzIsMzkgQEAKICNp
bmNsdWRlICJDb29raWVKYXIuaCIKIAogI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkNo
cm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJQbGF0Zm9y
bUJyaWRnZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIHZvaWQgc2V0Q29va2llcyhEb2N1
bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsK
LSAgICBDaHJvbWl1bUJyaWRnZTo6c2V0Q29va2llcyhkb2N1bWVudCwgdXJsLCB2YWx1ZSk7Cisg
ICAgUGxhdGZvcm1CcmlkZ2U6OnNldENvb2tpZXMoZG9jdW1lbnQsIHVybCwgdmFsdWUpOwogfQog
CiBTdHJpbmcgY29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXMoZG9jdW1lbnQsIHVybCk7
CisgICAgcmV0dXJuIFBsYXRmb3JtQnJpZGdlOjpjb29raWVzKGRvY3VtZW50LCB1cmwpOwogfQog
CiBTdHJpbmcgY29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50LCBjb25zdCBLVVJMJiB1cmwpCiB7Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpj
b29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShkb2N1bWVudCwgdXJsKTsKKyAgICByZXR1cm4g
UGxhdGZvcm1CcmlkZ2U6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGRvY3VtZW50LCB1
cmwpOwogfQogCiBib29sIGNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkK
IHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsK
KyAgICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGRvY3VtZW50KTsKIH0K
IAogYm9vbCBnZXRSYXdDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VS
TCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykKIHsKLSAgICByZXR1cm4gQ2hyb21p
dW1CcmlkZ2U6OnJhd0Nvb2tpZXMoZG9jdW1lbnQsIHVybCwgcmF3Q29va2llcyk7CisgICAgcmV0
dXJuIFBsYXRmb3JtQnJpZGdlOjpyYXdDb29raWVzKGRvY3VtZW50LCB1cmwsIHJhd0Nvb2tpZXMp
OwogfQogCiB2b2lkIGRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQogewotICAgIHJldHVybiBDaHJv
bWl1bUJyaWRnZTo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tpZU5hbWUpOworICAg
IHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlQ29va2llKGRvY3VtZW50LCB1cmwsIGNvb2tp
ZU5hbWUpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0ROU0Nocm9taXVtLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2Nocm9taXVtL0ROU0Nocm9taXVtLmNw
cAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL2No
cm9taXVtL0ROU0Nocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTQgKzI2LDE0IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRE5TLmgiCiAKLSNpbmNsdWRlICJDaHJv
bWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUmVz
b3VyY2VIYW5kbGUuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiB2b2lkIHByZWZldGNoRE5T
KGNvbnN0IFN0cmluZyYgaG9zdG5hbWUpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnByZWZldGNo
RE5TKGhvc3RuYW1lKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cHJlZmV0Y2hETlMoaG9zdG5hbWUp
OwogfQogCiB2b2lkIFJlc291cmNlSGFuZGxlOjpwcmVwYXJlRm9yVVJMKGNvbnN0IEtVUkwmIHVy
bCkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1BsYXRmb3JtQnJpZGdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGxhdGZvcm1CcmlkZ2UuaAko
cmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QbGF0Zm9ybUJy
aWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIGNsYXNzIFdpZGdldDsKIAog
Ly8gQW4gaW50ZXJmYWNlIHRvIHRoZSBlbWJlZGRpbmcgbGF5ZXIsIHdoaWNoIGhhcyB0aGUgYWJp
bGl0eSB0byBhbnN3ZXIKIC8vIHF1ZXN0aW9ucyBhYm91dCB0aGUgc3lzdGVtIGFuZCBzbyBvbi4u
LgotLy8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gQ2hyb21pdW1CcmlkZ2UgYW5kIHRoZSB0d28g
YXJlIGxpa2VseSB0byBjb252ZXJnZQorLy8gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gY2hyb21p
dW0vUGxhdGZvcm1CcmlkZ2UgYW5kIHRoZSB0d28gYXJlIGxpa2VseSB0byBjb252ZXJnZQogLy8g
aW4gdGhlIGZ1dHVyZS4KIGNsYXNzIFBsYXRmb3JtQnJpZGdlIHsKIHB1YmxpYzoKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21p
dW0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1
bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0uY3BwCShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVtQ2hyb21pdW0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgi
CiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1Ccmlk
Z2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIlNRTGl0ZURhdGFi
YXNlLmgiCiAjaW5jbHVkZSA8c3FsaXRlMy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcu
aD4KQEAgLTkyLDEyICs5MiwxMiBAQCBib29sIFNRTGl0ZUZpbGVTeXN0ZW06OmRlbGV0ZUVtcHR5
RGF0YWJhCiAKIGJvb2wgU1FMaXRlRmlsZVN5c3RlbTo6ZGVsZXRlRGF0YWJhc2VGaWxlKGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUpCiB7Ci0gICAgcmV0dXJuIChDaHJvbWl1bUJyaWRnZTo6ZGF0YWJh
c2VEZWxldGVGaWxlKGZpbGVOYW1lKSA9PSBTUUxJVEVfT0spOworICAgIHJldHVybiAoUGxhdGZv
cm1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSkgPT0gU1FMSVRFX09LKTsKIH0K
IAogbG9uZyBsb25nIFNRTGl0ZUZpbGVTeXN0ZW06OmdldERhdGFiYXNlRmlsZVNpemUoY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSkKIHsKLSAgICByZXR1cm4gQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNl
R2V0RmlsZVNpemUoZmlsZU5hbWUpOworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJh
c2VHZXRGaWxlU2l6ZShmaWxlTmFtZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3NxbC9jaHJvbWl1bS9TUUxpdGVGaWxlU3lzdGVt
Q2hyb21pdW1Qb3NpeC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
c3FsL2Nocm9taXVtL1NRTGl0ZUZpbGVTeXN0ZW1DaHJvbWl1bVBvc2l4LmNwcAkocmV2aXNpb24g
NzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmls
ZVN5c3RlbUNocm9taXVtUG9zaXguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU1FMaXRlRmlsZVN5c3RlbS5oIgogCi0j
aW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgog
I2luY2x1ZGUgPHNxbGl0ZTMuaD4KIAogI2luY2x1ZGUgPGVycm5vLmg+CkBAIC05OTYsMTAgKzk5
NiwxMCBAQCBzdGF0aWMgaW50IGNocm9taXVtT3BlbihzcWxpdGUzX3ZmcyogdmZzCiAgICAgfQog
CiAgICAgaWYgKGZkIDwgMCkgewotICAgICAgICBmZCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFz
ZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOworICAgICAgICBmZCA9IFBsYXRmb3Jt
QnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBkZXNpcmVkRmxhZ3MpOwogICAgICAg
ICBpZiAoKGZkIDwgMCkgJiYgKGRlc2lyZWRGbGFncyAmIFNRTElURV9PUEVOX1JFQURXUklURSkp
IHsKICAgICAgICAgICAgIGludCBuZXdGbGFncyA9IChkZXNpcmVkRmxhZ3MgJiB+KFNRTElURV9P
UEVOX1JFQURXUklURSB8IFNRTElURV9PUEVOX0NSRUFURSkpIHwgU1FMSVRFX09QRU5fUkVBRE9O
TFk7Ci0gICAgICAgICAgICBmZCA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGZp
bGVOYW1lLCBuZXdGbGFncyk7CisgICAgICAgICAgICBmZCA9IFBsYXRmb3JtQnJpZGdlOjpkYXRh
YmFzZU9wZW5GaWxlKGZpbGVOYW1lLCBuZXdGbGFncyk7CiAgICAgICAgIH0KICAgICB9CiAgICAg
aWYgKGZkIDwgMCkgewpAQCAtMTAzMSw3ICsxMDMxLDcgQEAgc3RhdGljIGludCBjaHJvbWl1bU9w
ZW4oc3FsaXRlM192ZnMqIHZmcwogLy8gICAgICAgICAgIHNob3VsZCBiZSBzeW5jaGVkIGFmdGVy
IHRoZSBmaWxlIGlzIGRlbGV0ZWQuCiBzdGF0aWMgaW50IGNocm9taXVtRGVsZXRlKHNxbGl0ZTNf
dmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBzeW5jRGlyKQogewotICAgIHJldHVybiBD
aHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lLCBzeW5jRGlyKTsKKyAg
ICByZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSwgc3lu
Y0Rpcik7CiB9CiAKIC8vIENoZWNrIHRoZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2
ZW4gZmlsZS4KQEAgLTEwNDIsNyArMTA0Miw3IEBAIHN0YXRpYyBpbnQgY2hyb21pdW1EZWxldGUo
c3FsaXRlM192ZnMqLCAKIC8vIHJlcyAtIHRoZSByZXN1bHQuCiBzdGF0aWMgaW50IGNocm9taXVt
QWNjZXNzKHNxbGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsIGludCBmbGFnLCBpbnQq
IHJlcykKIHsKLSAgICBpbnQgYXR0ciA9IHN0YXRpY19jYXN0PGludD4oQ2hyb21pdW1CcmlkZ2U6
OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMoZmlsZU5hbWUpKTsKKyAgICBpbnQgYXR0ciA9IHN0
YXRpY19jYXN0PGludD4oUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0ZXMo
ZmlsZU5hbWUpKTsKICAgICBpZiAoYXR0ciA8IDApIHsKICAgICAgICAgKnJlcyA9IDA7CiAgICAg
ICAgIHJldHVybiBTUUxJVEVfT0s7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwv
Y2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9zcWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9t
aXVtV2luLmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9z
cWwvY2hyb21pdW0vU1FMaXRlRmlsZVN5c3RlbUNocm9taXVtV2luLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNRTGl0
ZUZpbGVTeXN0ZW0uaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisjaW5jbHVkZSAi
UGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlIDxzcWxpdGUzLmg+CiAjaW5jbHVkZSA8d2luZG93
cy5oPgogCkBAIC01NSw3ICs1NSw3IEBAIG5hbWVzcGFjZSB7CiBpbnQgY2hyb21pdW1PcGVuKHNx
bGl0ZTNfdmZzKiwgY29uc3QgY2hhciogZmlsZU5hbWUsCiAgICAgICAgICAgICAgICAgIHNxbGl0
ZTNfZmlsZSogaWQsIGludCBkZXNpcmVkRmxhZ3MsIGludCogdXNlZEZsYWdzKQogewotICAgIEhB
TkRMRSBoID0gQ2hyb21pdW1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoZmlsZU5hbWUsIGRlc2ly
ZWRGbGFncyk7CisgICAgSEFORExFIGggPSBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VPcGVuRmls
ZShmaWxlTmFtZSwgZGVzaXJlZEZsYWdzKTsKICAgICBpZiAoaCA9PSBJTlZBTElEX0hBTkRMRV9W
QUxVRSkgewogICAgICAgICBpZiAoZGVzaXJlZEZsYWdzICYgU1FMSVRFX09QRU5fUkVBRFdSSVRF
KSB7CiAgICAgICAgICAgICBpbnQgbmV3RmxhZ3MgPSAoZGVzaXJlZEZsYWdzIHwgU1FMSVRFX09Q
RU5fUkVBRE9OTFkpICYgflNRTElURV9PUEVOX1JFQURXUklURTsKQEAgLTgyLDcgKzgyLDcgQEAg
aW50IGNocm9taXVtT3BlbihzcWxpdGUzX3ZmcyosIGNvbnN0IGNoYQogLy8gICAgICAgICAgIHNo
b3VsZCBiZSBzeW5jaGVkIGFmdGVyIHRoZSBmaWxlIGlzIGRlbGV0ZWQuCiBpbnQgY2hyb21pdW1E
ZWxldGUoc3FsaXRlM192ZnMqLCBjb25zdCBjaGFyKiBmaWxlTmFtZSwgaW50KQogewotICAgIHJl
dHVybiBDaHJvbWl1bUJyaWRnZTo6ZGF0YWJhc2VEZWxldGVGaWxlKGZpbGVOYW1lKTsKKyAgICBy
ZXR1cm4gUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlRGVsZXRlRmlsZShmaWxlTmFtZSk7CiB9CiAK
IC8vIENoZWNrIHRoZSBleGlzdGFuY2UgYW5kIHN0YXR1cyBvZiB0aGUgZ2l2ZW4gZmlsZS4KQEAg
LTkzLDcgKzkzLDcgQEAgaW50IGNocm9taXVtRGVsZXRlKHNxbGl0ZTNfdmZzKiwgY29uc3QgYwog
Ly8gcmVzIC0gdGhlIHJlc3VsdC4KIGludCBjaHJvbWl1bUFjY2VzcyhzcWxpdGUzX3ZmcyosIGNv
bnN0IGNoYXIqIGZpbGVOYW1lLCBpbnQgZmxhZywgaW50KiByZXMpCiB7Ci0gICAgRFdPUkQgYXR0
ciA9IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGZpbGVOYW1lKTsK
KyAgICBEV09SRCBhdHRyID0gUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlR2V0RmlsZUF0dHJpYnV0
ZXMoZmlsZU5hbWUpOwogICAgIHN3aXRjaCAoZmxhZykgewogICAgIGNhc2UgU1FMSVRFX0FDQ0VT
U19SRUFEOgogICAgIGNhc2UgU1FMSVRFX0FDQ0VTU19FWElTVFM6CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbHVnaW5zL2Nocm9taXVtL1BsdWdpbkRhdGFDaHJvbWl1bS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGx1Z2lucy9jaHJvbWl1bS9QbHVnaW5EYXRhQ2hyb21pdW0uY3Bw
CShyZXZpc2lvbiA3NjE3MykKKysrIFNvdXJjZS9XZWJDb3JlL3BsdWdpbnMvY2hyb21pdW0vUGx1
Z2luRGF0YUNocm9taXVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlBsdWdpbkRhdGFDaHJvbWl1bS5oIgogCi0jaW5j
bHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIGNvbnN0
IFZlY3RvcjxQbHVnaW5JbmZvPiYgcGx1Z2lucygpCiAgICAgewogICAgICAgICBpZiAoIW1fbG9h
ZGVkKSB7Ci0gICAgICAgICAgICBDaHJvbWl1bUJyaWRnZTo6cGx1Z2lucyhtX3JlZnJlc2gsICZt
X3BsdWdpbnMpOworICAgICAgICAgICAgUGxhdGZvcm1CcmlkZ2U6OnBsdWdpbnMobV9yZWZyZXNo
LCAmbV9wbHVnaW5zKTsKICAgICAgICAgICAgIG1fbG9hZGVkID0gdHJ1ZTsKICAgICAgICAgICAg
IG1fcmVmcmVzaCA9IGZhbHNlOwogICAgICAgICB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQkocmV2aXNpb24gNzYxNzMp
CisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhlbWVDaHJvbWl1bU1hYy5tbQko
d29ya2luZyBjb3B5KQpAQCAtMjAsOCArMjAsOCBAQAogCiAjaW1wb3J0ICJjb25maWcuaCIKICNp
bXBvcnQgIlJlbmRlclRoZW1lQ2hyb21pdW1NYWMuaCIKLSNpbXBvcnQgIkNocm9taXVtQnJpZGdl
LmgiCiAjaW1wb3J0ICJQYWludEluZm8uaCIKKyNpbXBvcnQgIlBsYXRmb3JtQnJpZGdlLmgiCiAj
aW1wb3J0ICJSZW5kZXJNZWRpYUNvbnRyb2xzQ2hyb21pdW0uaCIKICNpbXBvcnQgIlVzZXJBZ2Vu
dFN0eWxlU2hlZXRzLmgiCiAjaW1wb3J0IDxDYXJib24vQ2FyYm9uLmg+CkBAIC03MSw3ICs3MSw3
IEBAIFBhc3NSZWZQdHI8UmVuZGVyVGhlbWU+IFJlbmRlclRoZW1lQ2hyb20KIAogYm9vbCBSZW5k
ZXJUaGVtZUNocm9taXVtTWFjOjp1c2VzVGVzdE1vZGVGb2N1c1JpbmdDb2xvcigpIGNvbnN0CiB7
Ci0gICAgcmV0dXJuIENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpOworICAgIHJldHVy
biBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKTsKIH0KIAogTlNWaWV3KiBSZW5kZXJU
aGVtZUNocm9taXVtTWFjOjpkb2N1bWVudFZpZXdGb3IoUmVuZGVyT2JqZWN0KikgY29uc3QKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUNocm9taXVtU2tpYS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21p
dW1Ta2lhLmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bVNraWEuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw2
IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGhlbWVDaHJvbWl1bVNr
aWEuaCIKIAotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVL
ZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkN1cnJlbnRUaW1lLmgiCiAjaW5jbHVkZSAiR3JhcGhpY3ND
b250ZXh0LmgiCkBAIC0zMyw2ICszMiw3IEBACiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRl
ICJNZWRpYUNvbnRyb2xFbGVtZW50cy5oIgogI2luY2x1ZGUgIlBhaW50SW5mby5oIgorI2luY2x1
ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgog
I2luY2x1ZGUgIlJlbmRlckJveC5oIgogI2luY2x1ZGUgIlJlbmRlck1lZGlhQ29udHJvbHNDaHJv
bWl1bS5oIgpAQCAtMTg1LDcgKzE4NSw3IEBAIGRvdWJsZSBSZW5kZXJUaGVtZUNocm9taXVtU2tp
YTo6Y2FyZXRCbGkKIHsKICAgICAvLyBEaXNhYmxlIHRoZSBibGlua2luZyBjYXJldCBpbiBsYXlv
dXQgdGVzdCBtb2RlLCBhcyBpdCBpbnRyb2R1Y2VzCiAgICAgLy8gYSByYWNlIGNvbmRpdGlvbiBm
b3IgdGhlIHBpeGVsIHRlc3RzLiBodHRwOi8vYi8xMTk4NDQwCi0gICAgaWYgKENocm9taXVtQnJp
ZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQorICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVz
dE1vZGUoKSkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICByZXR1cm4gY2FyZXRCbGlua0ludGVy
dmFsSW50ZXJuYWwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVt
ZUNocm9taXVtV2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyVGhlbWVDaHJvbWl1bVdpbi5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lQ2hyb21pdW1XaW4uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSA8dnNzeW0zMi5oPgogCiAjaW5jbHVkZSAiQ1NT
VmFsdWVLZXl3b3Jkcy5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCiAjaW5jbHVkZSAi
Q3VycmVudFRpbWUuaCIKICNpbmNsdWRlICJGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJGb250
VXRpbHNDaHJvbWl1bVdpbi5oIgpAQCAtMzksNiArMzgsNyBAQAogI2luY2x1ZGUgIkhUTUxOYW1l
cy5oIgogI2luY2x1ZGUgIk1lZGlhQ29udHJvbEVsZW1lbnRzLmgiCiAjaW5jbHVkZSAiUGFpbnRJ
bmZvLmgiCisjaW5jbHVkZSAiUGxhdGZvcm1CcmlkZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJCb3gu
aCIKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5oIgogI2luY2x1ZGUgIlJlbmRlclNsaWRlci5o
IgpAQCAtMjM4LDcgKzIzOCw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6c3VwcG9y
dHNGb2MKIAogQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1BY3RpdmVTZWxl
Y3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAgIGlmIChDaHJvbWl1bUJyaWRnZTo6
bGF5b3V0VGVzdE1vZGUoKSkKKyAgICBpZiAoUGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2Rl
KCkpCiAgICAgICAgIHJldHVybiBDb2xvcigweDAwLCAweDAwLCAweGZmKTsgLy8gUm95YWwgYmx1
ZS4KICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0hJR0hMSUdIVCk7CiAg
ICAgcmV0dXJuIENvbG9yKEdldFJWYWx1ZShjb2xvciksIEdldEdWYWx1ZShjb2xvciksIEdldEJW
YWx1ZShjb2xvciksIDB4ZmYpOwpAQCAtMjQ2LDcgKzI0Niw3IEBAIENvbG9yIFJlbmRlclRoZW1l
Q2hyb21pdW1XaW46OnBsYXRmb3JtQWMKIAogQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
cGxhdGZvcm1JbmFjdGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAg
aWYgKENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQorICAgIGlmIChQbGF0Zm9ybUJy
aWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgcmV0dXJuIENvbG9yKDB4OTksIDB4OTks
IDB4OTkpOyAvLyBNZWRpdW0gZ3JheS4KICAgICBDT0xPUlJFRiBjb2xvciA9IEdldFN5c0NvbG9y
KENPTE9SX0dSQVlURVhUKTsKICAgICByZXR1cm4gQ29sb3IoR2V0UlZhbHVlKGNvbG9yKSwgR2V0
R1ZhbHVlKGNvbG9yKSwgR2V0QlZhbHVlKGNvbG9yKSwgMHhmZik7CkBAIC0yNTQsNyArMjU0LDcg
QEAgQ29sb3IgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGxhdGZvcm1JbgogCiBDb2xvciBSZW5k
ZXJUaGVtZUNocm9taXVtV2luOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkZvcmVncm91bmRDb2xv
cigpIGNvbnN0CiB7Ci0gICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpKQor
ICAgIGlmIChQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKSkKICAgICAgICAgcmV0dXJu
IENvbG9yKDB4ZmYsIDB4ZmYsIDB4Y2MpOyAvLyBQYWxlIHllbGxvdy4KICAgICBDT0xPUlJFRiBj
b2xvciA9IEdldFN5c0NvbG9yKENPTE9SX0hJR0hMSUdIVFRFWFQpOwogICAgIHJldHVybiBDb2xv
cihHZXRSVmFsdWUoY29sb3IpLCBHZXRHVmFsdWUoY29sb3IpLCBHZXRCVmFsdWUoY29sb3IpLCAw
eGZmKTsKQEAgLTM3NSw3ICszNzUsNyBAQCBzdGF0aWMgaW50IGNzc1ZhbHVlSWRUb1N5c0NvbG9y
SW5kZXgoaW50CiBDb2xvciBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpzeXN0ZW1Db2xvcihpbnQg
Y3NzVmFsdWVJZCkgY29uc3QKIHsKICAgICBpbnQgc3lzQ29sb3JJbmRleCA9IGNzc1ZhbHVlSWRU
b1N5c0NvbG9ySW5kZXgoY3NzVmFsdWVJZCk7Ci0gICAgaWYgKENocm9taXVtQnJpZGdlOjpsYXlv
dXRUZXN0TW9kZSgpIHx8IChzeXNDb2xvckluZGV4ID09IC0xKSkKKyAgICBpZiAoUGxhdGZvcm1C
cmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgfHwgKHN5c0NvbG9ySW5kZXggPT0gLTEpKQogICAgICAg
ICByZXR1cm4gUmVuZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwogCiAgICAgQ09M
T1JSRUYgY29sb3IgPSBHZXRTeXNDb2xvcihzeXNDb2xvckluZGV4KTsKQEAgLTQxMSw3ICs0MTEs
NyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50QnV0dG9uCiAgICAgY29uc3Qg
VGhlbWVEYXRhJiB0aGVtZURhdGEgPSBnZXRUaGVtZURhdGEobyk7CiAKICAgICBUaGVtZVBhaW50
ZXIgcGFpbnRlcihpLmNvbnRleHQsIHIpOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludEJ1dHRv
bihwYWludGVyLmNvbnRleHQoKSwKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24ocGFp
bnRlci5jb250ZXh0KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0
YS5tX3BhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3N0
YXRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZURhdGEubV9jbGFzc2lj
U3RhdGUsCkBAIC00MjksNyArNDI5LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludFNsaWRlcgogICAgIGNvbnN0IFRoZW1lRGF0YSYgdGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRh
KG8pOwogCiAgICAgVGhlbWVQYWludGVyIHBhaW50ZXIoaS5jb250ZXh0LCByKTsKLSAgICBDaHJv
bWl1bUJyaWRnZTo6cGFpbnRUcmFja2JhcihwYWludGVyLmNvbnRleHQoKSwKKyAgICBQbGF0Zm9y
bUJyaWRnZTo6cGFpbnRUcmFja2JhcihwYWludGVyLmNvbnRleHQoKSwKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB0aGVtZURhdGEubV9wYXJ0LAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3N0YXRlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0ZSwKQEAgLTQ0NCw3ICs0NDQsNyBA
QCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50U2xpZGVyCiAKIHN0YXRpYyBpbnQg
bWVudUxpc3RCdXR0b25XaWR0aCgpCiB7Ci0gICAgc3RhdGljIGludCB3aWR0aCA9IENocm9taXVt
QnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpID8ga1N0YW5kYXJkTWVudUxpc3RCdXR0b25XaWR0aCA6
IEdldFN5c3RlbU1ldHJpY3MoU01fQ1hWU0NST0xMKTsKKyAgICBzdGF0aWMgaW50IHdpZHRoID0g
UGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKCkgPyBrU3RhbmRhcmRNZW51TGlzdEJ1dHRv
bldpZHRoIDogR2V0U3lzdGVtTWV0cmljcyhTTV9DWFZTQ1JPTEwpOwogICAgIHJldHVybiB3aWR0
aDsKIH0KIApAQCAtNDkyLDcgKzQ5Miw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
cGFpbnRNZW51TGkKIAogICAgIC8vIEdldCB0aGUgY29ycmVjdCB0aGVtZSBkYXRhIGZvciBhIHRl
eHRmaWVsZCBhbmQgcGFpbnQgdGhlIG1lbnUuCiAgICAgVGhlbWVQYWludGVyIHBhaW50ZXIoaS5j
b250ZXh0LCByZWN0KTsKLSAgICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRNZW51TGlzdChwYWludGVy
LmNvbnRleHQoKSwKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRNZW51TGlzdChwYWludGVyLmNv
bnRleHQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUF9EUk9QRE9XTkJV
VFRPTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVTdGF0ZShv
KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXRlcm1pbmVDbGFzc2ljU3Rh
dGUobyksCkBAIC02NTcsNyArNjU3LDcgQEAgYm9vbCBSZW5kZXJUaGVtZUNocm9taXVtV2luOjpw
YWludFRleHRGaQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGJvb2wgZHJhd0VkZ2VzKQogewogICAgIC8vIEZhbGxiYWNrIHRvIHdoaXRlIGlmIHRo
ZSBzcGVjaWZpZWQgY29sb3Igb2JqZWN0IGlzIGludmFsaWQuCi0gICAgLy8gKE5vdGUgQ2hyb21p
dW1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkIGR1cGxpY2F0ZXMgdGhpcyBjaGVjaykuCisgICAgLy8g
KE5vdGUgUGxhdGZvcm1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkIGR1cGxpY2F0ZXMgdGhpcyBjaGVj
aykuCiAgICAgQ29sb3IgYmFja2dyb3VuZENvbG9yKENvbG9yOjp3aGl0ZSk7CiAgICAgaWYgKG8t
PnN0eWxlKCktPnZpc2l0ZWREZXBlbmRlbnRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xv
cikuaXNWYWxpZCgpKQogICAgICAgICBiYWNrZ3JvdW5kQ29sb3IgPSBvLT5zdHlsZSgpLT52aXNp
dGVkRGVwZW5kZW50Q29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IpOwpAQCAtNjgxLDcg
KzY4MSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRUZXh0RmkKICAgICB7
CiAgICAgICAgIGNvbnN0IFRoZW1lRGF0YSYgdGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG8pOwog
ICAgICAgICBUaGVtZVBhaW50ZXIgcGFpbnRlcihpLmNvbnRleHQsIHIpOwotICAgICAgICBDaHJv
bWl1bUJyaWRnZTo6cGFpbnRUZXh0RmllbGQocGFpbnRlci5jb250ZXh0KCksCisgICAgICAgIFBs
YXRmb3JtQnJpZGdlOjpwYWludFRleHRGaWVsZChwYWludGVyLmNvbnRleHQoKSwKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX3BhcnQsCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGVtZURhdGEubV9zdGF0ZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZW1lRGF0YS5tX2NsYXNzaWNTdGF0
ZSwKQEAgLTcxMCw3ICs3MTAsNyBAQCBib29sIFJlbmRlclRoZW1lQ2hyb21pdW1XaW46OnBhaW50
SW5uZXJTCiAgICAgaGFsZi5zZXRIZWlnaHQocmVjdC5oZWlnaHQoKSAvIDIpOwogICAgIGNvbnN0
IFRoZW1lRGF0YSYgdXBUaGVtZURhdGEgPSBnZXRUaGVtZURhdGEob2JqZWN0LCBTcGluQnV0dG9u
VXApOwogICAgIFRoZW1lUGFpbnRlciB1cFBhaW50ZXIoaW5mby5jb250ZXh0LCBoYWxmKTsKLSAg
ICBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKHVwUGFpbnRlci5jb250ZXh0KCksCisg
ICAgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbih1cFBhaW50ZXIuY29udGV4dCgpLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBUaGVtZURhdGEubV9wYXJ0LAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXBUaGVtZURhdGEubV9zdGF0ZSwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVwVGhlbWVEYXRhLm1fY2xhc3Np
Y1N0YXRlLApAQCAtNzE5LDcgKzcxOSw3IEBAIGJvb2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6
cGFpbnRJbm5lclMKICAgICBoYWxmLnNldFkocmVjdC55KCkgKyByZWN0LmhlaWdodCgpIC8gMik7
CiAgICAgY29uc3QgVGhlbWVEYXRhJiBkb3duVGhlbWVEYXRhID0gZ2V0VGhlbWVEYXRhKG9iamVj
dCwgU3BpbkJ1dHRvbkRvd24pOwogICAgIFRoZW1lUGFpbnRlciBkb3duUGFpbnRlcihpbmZvLmNv
bnRleHQsIGhhbGYpOwotICAgIENocm9taXVtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oZG93blBh
aW50ZXIuY29udGV4dCgpLAorICAgIFBsYXRmb3JtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oZG93
blBhaW50ZXIuY29udGV4dCgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZG93blRoZW1lRGF0YS5tX3BhcnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBkb3duVGhlbWVEYXRhLm1fc3RhdGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBkb3duVGhlbWVEYXRhLm1fY2xhc3NpY1N0YXRlLApAQCAtNzYwLDcgKzc2MCw3IEBAIGJv
b2wgUmVuZGVyVGhlbWVDaHJvbWl1bVdpbjo6cGFpbnRQcm9ncmUKICAgICBJbnRSZWN0IHZhbHVl
UmVjdCA9IHJlbmRlclByb2dyZXNzLT5pc0RldGVybWluYXRlKCkgPyBkZXRlcm1pbmF0ZVByb2dy
ZXNzVmFsdWVSZWN0Rm9yKHJlbmRlclByb2dyZXNzLCByKSA6IEludFJlY3QoMCwgMCwgMCwgMCk7
CiAgICAgZG91YmxlIGFuaW1hdGVkU2Vjb25kcyA9IHJlbmRlclByb2dyZXNzLT5hbmltYXRpb25T
dGFydFRpbWUoKSA/ICBXVEY6OmN1cnJlbnRUaW1lKCkgLSByZW5kZXJQcm9ncmVzcy0+YW5pbWF0
aW9uU3RhcnRUaW1lKCkgOiAwOwogICAgIFRoZW1lUGFpbnRlciBwYWludGVyKGkuY29udGV4dCwg
cik7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIocGFpbnRlci5jb250ZXh0
KCksIHIsIHZhbHVlUmVjdCwgcmVuZGVyUHJvZ3Jlc3MtPmlzRGV0ZXJtaW5hdGUoKSwgYW5pbWF0
ZWRTZWNvbmRzKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcihwYWludGVy
LmNvbnRleHQoKSwgciwgdmFsdWVSZWN0LCByZW5kZXJQcm9ncmVzcy0+aXNEZXRlcm1pbmF0ZSgp
LCBhbmltYXRlZFNlY29uZHMpOwogICAgIHJldHVybiBmYWxzZTsKIH0KIApJbmRleDogU291cmNl
L1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZS5jcHAJKHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYkNvcmUv
c3RvcmFnZS9jaHJvbWl1bS9JREJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDcgKzI4LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJ
REJGYWN0b3J5QmFja2VuZEludGVyZmFjZS5oIgogCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2Uu
aCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogCiAjaWYgRU5BQkxFKElOREVYRURfREFU
QUJBU0UpCiAKQEAgLTM2LDEyICszNiwxMiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIFBhc3NS
ZWZQdHI8SURCRmFjdG9yeUJhY2tlbmRJbnRlcmZhY2U+IElEQkZhY3RvcnlCYWNrZW5kSW50ZXJm
YWNlOjpjcmVhdGUoKQogewotICAgIHJldHVybiBDaHJvbWl1bUJyaWRnZTo6aWRiRmFjdG9yeSgp
OworICAgIHJldHVybiBQbGF0Zm9ybUJyaWRnZTo6aWRiRmFjdG9yeSgpOwogfQogCiBJREJGYWN0
b3J5QmFja2VuZEludGVyZmFjZTo6fklEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlKCkKIHsKLSAg
ICBDaHJvbWl1bUJyaWRnZTo6aWRiU2h1dGRvd24oKTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6aWRi
U2h1dGRvd24oKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dl
YkNvcmUvc3RvcmFnZS9jaHJvbWl1bS9JREJLZXlQYXRoQmFja2VuZEltcGwuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3N0b3JhZ2UvY2hyb21pdW0vSURCS2V5UGF0aEJhY2tlbmRJ
bXBsLmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViQ29yZS9zdG9yYWdlL2Nocm9t
aXVtL0lEQktleVBhdGhCYWNrZW5kSW1wbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDEzICsy
OCwxMyBAQAogCiAjaWYgRU5BQkxFKElOREVYRURfREFUQUJBU0UpCiAKLSNpbmNsdWRlICJDaHJv
bWl1bUJyaWRnZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdlLmgiCiAKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAogdm9pZCBJREJLZXlQYXRoQmFja2VuZEltcGw6OmNyZWF0ZUlEQktleXNGcm9t
U2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJlZlB0cjxTZXJpYWxpemVk
U2NyaXB0VmFsdWU+LCAwPiYgdmFsdWVzLCAgY29uc3QgU3RyaW5nJiBrZXlQYXRoLCBWZWN0b3I8
UmVmUHRyPElEQktleT4sIDA+JiBrZXlzKQogewotICAgIENocm9taXVtQnJpZGdlOjpjcmVhdGVJ
REJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKHZhbHVlcywga2V5UGF0aCwga2V5
cyk7CisgICAgUGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVl
c0FuZEtleVBhdGgodmFsdWVzLCBrZXlQYXRoLCBrZXlzKTsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHJldmlzaW9uIDc2MTczKQor
KysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwxMjQgQEAKKzIwMTEtMDEtMTkgIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW2Nocm9t
aXVtXSBSZW5hbWUgQ2hyb21pdW1CcmlkZ2UgdG8gUGxhdGZvcm1CcmlkZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyNDcxCisKKyAgICAgICAgKiBX
ZWJLaXQuZ3lwOgorICAgICAgICAqIHNyYy9Bc3NlcnRNYXRjaGluZ0VudW1zLmNwcDoKKyAgICAg
ICAgKiBzcmMvUGxhdGZvcm1CcmlkZ2UuY3BwOgorICAgICAgICAoV2ViQ29yZTo6dG9DaHJvbWVD
bGllbnRJbXBsKToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViV2lkZ2V0Q2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OmdldENvb2tpZUphcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6Y2FjaGVNZXRhZGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1C
cmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZv
cm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZUltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcyk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRGaWxlbmFtZXMpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNldENvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmNvb2tpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpyYXdDb29raWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjpkZWxldGVDb29raWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNvb2tp
ZXNFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwcmVmZXRjaERO
Uyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZmlsZUV4aXN0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRmlsZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGVsZXRlRW1wdHlEaXJlY3RvcnkpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OmdldEZpbGVTaXplKToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjpyZXZlYWxGb2xkZXJJbk9TKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQ
bGF0Zm9ybUJyaWRnZTo6ZGlyZWN0b3J5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlBs
YXRmb3JtQnJpZGdlOjptYWtlQWxsRGlyZWN0b3JpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OmdldEFic29sdXRlUGF0aCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUJyaWRnZTo6aXNEaXJlY3RvcnkpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6
OmZpbGVQYXRoVG9VUkwpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om9wZW5G
aWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpjbG9zZUZpbGUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNlZWtGaWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQnJpZGdlOjp0cnVuY2F0ZUZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1CcmlkZ2U6OnJlYWRGcm9tRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6d3JpdGVUb0ZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmVu
c3VyZUZvbnRMb2FkZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmdldEZv
bnRGYW1pbHlGb3JDaGFyYWN0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6bG9hZEZvbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRhdGFi
YXNlT3BlbkZpbGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNl
RGVsZXRlRmlsZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VH
ZXRGaWxlQXR0cmlidXRlcyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGF0
YWJhc2VHZXRGaWxlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aWRi
RmFjdG9yeSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6aWRiU2h1dGRvd24p
OgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OmNyZWF0ZUlEQktleXNGcm9tU2Vy
aWFsaXplZFZhbHVlc0FuZEtleVBhdGgpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1Ccmlk
Z2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZyk6CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFuZ3VhZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OmxheW91dFRlc3RNb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OlBsYXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUpOgorICAgICAgICAoV2Vi
Q29yZTo6UGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Om1pbWVUeXBlRm9yRXh0ZW5z
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjptaW1lVHlwZUZyb21GaWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25G
b3JNSU1FVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lucyk6
CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9iamVj
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VS
ZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6bG9hZFBsYXRmb3Jt
QXVkaW9SZXNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6ZGVjb2Rl
QXVkaW9GaWxlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2FuZGJv
eEVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNldFNoYXJlZFRp
bWVyRmlyZWRGdW5jdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2V0
U2hhcmVkVGltZXJGaXJlVGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
c3RvcFNoYXJlZFRpbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpkZWNy
ZW1lbnRTdGF0c0NvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6Omlu
Y3JlbWVudFN0YXRzQ291bnRlcik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
aGlzdG9ncmFtQ3VzdG9tQ291bnRzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
OjpoaXN0b2dyYW1FbnVtZXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRn
ZTo6c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3Jt
QnJpZGdlOjpjdXJyZW50VGltZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6
cGFpbnRCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50TWVu
dUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFy
QXJyb3cpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFy
VGh1bWIpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFy
VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUZXh0RmllbGQpOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50VHJhY2tiYXIpOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViVGhlbWVQYXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OldlYlRoZW1lU3RhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6R2V0V2ViVGhlbWVFeHRyYVBhcmFtcyk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZSk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
UGxhdGZvcm1CcmlkZ2U6OnRyYWNlRXZlbnRCZWdpbik6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUJyaWRnZTo6dHJhY2VFdmVudEVuZCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJy
aWRnZTo6dmlzaXRlZExpbmtIYXNoKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdl
Ojppc0xpbmtWaXNpdGVkKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpub3Rp
ZnlKU091dE9mTWVtb3J5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjptZW1v
cnlVc2FnZU1CKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjphY3R1YWxNZW1v
cnlVc2FnZU1CKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQnJpZGdlOjpzY3JlZW5EZXB0
aCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21w
b25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1CcmlkZ2U6OnNjcmVlbklzTW9ub2No
cm9tZSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUmVjdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUJyaWRnZTo6cG9wdXBzQWxsb3dlZCk6CisgICAgICAg
IChXZWJDb3JlOjpXb3JrZXJDb250ZXh0UHJveHk6OmNyZWF0ZSk6CisgICAgICAgICogc3JjL1Jl
c291cmNlSGFuZGxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlc291cmNlSGFuZGxlOjpjYWNo
ZU1ldGFkYXRhKToKKyAgICAgICAgKiBzcmMvV2ViRnJhbWVJbXBsLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6V2ViRnJhbWVJbXBsOjpXZWJGcmFtZUltcGwpOgorICAgICAgICAoV2ViS2l0OjpXZWJG
cmFtZUltcGw6On5XZWJGcmFtZUltcGwpOgorICAgICAgICAqIHNyYy9XZWJWaWV3SW1wbC5jcHA6
CisgICAgICAgIChXZWJLaXQ6OldlYlZpZXdJbXBsOjpzZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRp
bmdBY3RpdmUpOgorCiAyMDExLTAxLTE5ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+
CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbCBjaHJvbWl1bSBkZXBzIHRvIHBpY2sgdXAgZml4
ZXMgZm9yIHRoZSBsaW51eCBidWlsZC4KSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vV2Vi
S2l0Lmd5cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL1dlYktpdC5neXAJ
KHJldmlzaW9uIDc2MTczKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9XZWJLaXQuZ3lwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMTUsNyArMzE1LDYgQEAKICAgICAgICAgICAgICAgICAnc3JjL0Jv
dW5kT2JqZWN0LmgnLAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvQ2hyb21lQ2xpZW50SW1wbC5oJywKLSAgICAgICAgICAg
ICAgICAnc3JjL0Nocm9taXVtQnJpZGdlLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9DaHJv
bWl1bUN1cnJlbnRUaW1lLmNwcCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9DaHJvbWl1bVRocmVh
ZGluZy5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvQ29tcG9zaXRpb25VbmRlcmxpbmVCdWls
ZGVyLmgnLApAQCAtMzg0LDYgKzM4Myw3IEBACiAgICAgICAgICAgICAgICAgJ3NyYy9NZWRpYVBs
YXllclByaXZhdGVDaHJvbWl1bS5jcHAnLAogICAgICAgICAgICAgICAgICdzcmMvTm90aWZpY2F0
aW9uUHJlc2VudGVySW1wbC5oJywKICAgICAgICAgICAgICAgICAnc3JjL05vdGlmaWNhdGlvblBy
ZXNlbnRlckltcGwuY3BwJywKKyAgICAgICAgICAgICAgICAnc3JjL1BsYXRmb3JtQnJpZGdlLmNw
cCcsCiAgICAgICAgICAgICAgICAgJ3NyYy9QbGF0Zm9ybU1lc3NhZ2VQb3J0Q2hhbm5lbC5jcHAn
LAogICAgICAgICAgICAgICAgICdzcmMvUGxhdGZvcm1NZXNzYWdlUG9ydENoYW5uZWwuaCcsCiAg
ICAgICAgICAgICAgICAgJ3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAnLApJbmRleDogU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdFbnVtcy5jcHAJKHJldmlz
aW9uIDc2MTczKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQXNzZXJ0TWF0Y2hpbmdF
bnVtcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgwLDcgKzgwLDcgQEAKICNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdJbXBsLmg+CiAKICNpZiBPUyhEQVJXSU4pCi0jaW5jbHVkZSAiQ2hyb21pdW1C
cmlkZ2UuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgogI2luY2x1ZGUgIm1hYy9XZWJU
aGVtZUVuZ2luZS5oIgogI2VuZGlmCiAKQEAgLTM5OCwxNyArMzk4LDE3IEBAIENPTVBJTEVfQVNT
RVJUX01BVENISU5HX0VOVU0oV2ViR2VvbG9jYXQKIENPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViR2VvbG9jYXRpb25FcnJvcjo6RXJyb3JQb3NpdGlvblVuYXZhaWxhYmxlLCBHZW9sb2Nh
dGlvbkVycm9yOjpQb3NpdGlvblVuYXZhaWxhYmxlKTsKIAogI2lmIE9TKERBUldJTikKLUNPTVBJ
TEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQsIENo
cm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVkKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlSW5hY3RpdmUsIENocm9taXVtQnJpZGdlOjpTdGF0ZUlu
YWN0aXZlKTsKLUNPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0
YXRlQWN0aXZlLCBDaHJvbWl1bUJyaWRnZTo6U3RhdGVBY3RpdmUpOwotQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U3RhdGVQcmVzc2VkLCBDaHJvbWl1bUJyaWRn
ZTo6U3RhdGVQcmVzc2VkKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVF
bmdpbmU6OlN0YXRlRGlzYWJsZWQsIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVkKTsKK0NP
TVBJTEVfQVNTRVJUX01BVENISU5HX0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlSW5hY3RpdmUs
IFBsYXRmb3JtQnJpZGdlOjpTdGF0ZUluYWN0aXZlKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5H
X0VOVU0oV2ViVGhlbWVFbmdpbmU6OlN0YXRlQWN0aXZlLCBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVB
Y3RpdmUpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U3Rh
dGVQcmVzc2VkLCBQbGF0Zm9ybUJyaWRnZTo6U3RhdGVQcmVzc2VkKTsKIAotQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIsIENocm9taXVtQnJp
ZGdlOjpTaXplUmVndWxhcik7Ci1DT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1l
RW5naW5lOjpTaXplU21hbGwsIENocm9taXVtQnJpZGdlOjpTaXplU21hbGwpOworQ09NUElMRV9B
U1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2l6ZVJlZ3VsYXIsIFBsYXRmb3Jt
QnJpZGdlOjpTaXplUmVndWxhcik7CitDT01QSUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRo
ZW1lRW5naW5lOjpTaXplU21hbGwsIFBsYXRmb3JtQnJpZGdlOjpTaXplU21hbGwpOwogCi1DT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJPcmllbnRh
dGlvbkhvcml6b250YWwsIENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlvbkhvcml6
b250YWwpOwotQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Ny
b2xsYmFyT3JpZW50YXRpb25WZXJ0aWNhbCwgQ2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhck9yaWVu
dGF0aW9uVmVydGljYWwpOworQ09NUElMRV9BU1NFUlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVu
Z2luZTo6U2Nyb2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsLCBQbGF0Zm9ybUJyaWRnZTo6U2Ny
b2xsYmFyT3JpZW50YXRpb25Ib3Jpem9udGFsKTsKK0NPTVBJTEVfQVNTRVJUX01BVENISU5HX0VO
VU0oV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVudGF0aW9uVmVydGljYWwsIFBsYXRmb3Jt
QnJpZGdlOjpTY3JvbGxiYXJPcmllbnRhdGlvblZlcnRpY2FsKTsKIAotQ09NUElMRV9BU1NFUlRf
TUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldywg
Q2hyb21pdW1CcmlkZ2U6OlNjcm9sbGJhclBhcmVudFNjcm9sbFZpZXcpOwotQ09NUElMRV9BU1NF
UlRfTUFUQ0hJTkdfRU5VTShXZWJUaGVtZUVuZ2luZTo6U2Nyb2xsYmFyUGFyZW50UmVuZGVyTGF5
ZXIsIENocm9taXVtQnJpZGdlOjpTY3JvbGxiYXJQYXJlbnRSZW5kZXJMYXllcik7CitDT01QSUxF
X0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJQYXJlbnRTY3Jv
bGxWaWV3LCBQbGF0Zm9ybUJyaWRnZTo6U2Nyb2xsYmFyUGFyZW50U2Nyb2xsVmlldyk7CitDT01Q
SUxFX0FTU0VSVF9NQVRDSElOR19FTlVNKFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJQYXJlbnRS
ZW5kZXJMYXllciwgUGxhdGZvcm1CcmlkZ2U6OlNjcm9sbGJhclBhcmVudFJlbmRlckxheWVyKTsK
ICNlbmRpZgpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hyb21pdW1CcmlkZ2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL0Nocm9taXVtQnJp
ZGdlLmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9D
aHJvbWl1bUJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsOTk3ICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMDkgR29vZ2xlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKLSAqIG1ldDoKLSAqCi0gKiAgICAgKiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQotICogY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcgotICogaW4gdGhlIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQotICogZGlz
dHJpYnV0aW9uLgotICogICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBHb29nbGUgSW5jLiBub3Ig
dGhlIG5hbWVzIG9mIGl0cwotICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KLSAqIHRoaXMgc29mdHdhcmUgd2l0aG91
dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwot
ICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgotICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKLSAqIE9XTkVSIE9S
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLAotICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVAotICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCi0gKiBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKLSAqIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKLQotI2luY2x1ZGUgPGdv
b2dsZXVybC9zcmMvdXJsX3V0aWwuaD4KLQotI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUg
IkNocm9tZUNsaWVudEltcGwuaCIKLSNpbmNsdWRlICJXZWJBdWRpb0J1cy5oIgotI2luY2x1ZGUg
IldlYkNsaXBib2FyZC5oIgotI2luY2x1ZGUgIldlYkNvb2tpZS5oIgotI2luY2x1ZGUgIldlYkNv
b2tpZUphci5oIgotI2luY2x1ZGUgIldlYkRhdGEuaCIKLSNpbmNsdWRlICJXZWJEcmFnRGF0YS5o
IgotI2luY2x1ZGUgIldlYkZpbGVVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJXZWJGcmFtZUNsaWVu
dC5oIgotI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgotI2luY2x1ZGUgIldlYklEQktleS5oIgot
I2luY2x1ZGUgIldlYkltYWdlLmgiCi0jaW5jbHVkZSAiV2ViS2l0LmgiCi0jaW5jbHVkZSAiV2Vi
S2l0Q2xpZW50LmgiCi0jaW5jbHVkZSAiV2ViTWltZVJlZ2lzdHJ5LmgiCi0jaW5jbHVkZSAiV2Vi
UGx1Z2luQ29udGFpbmVySW1wbC5oIgotI2luY2x1ZGUgIldlYlBsdWdpbkxpc3RCdWlsZGVySW1w
bC5oIgotI2luY2x1ZGUgIldlYlNhbmRib3hTdXBwb3J0LmgiCi0jaW5jbHVkZSAiV2ViU2VyaWFs
aXplZFNjcmlwdFZhbHVlLmgiCi0jaW5jbHVkZSAiV2ViU2NyZWVuSW5mby5oIgotI2luY2x1ZGUg
IldlYlN0cmluZy5oIgotI2luY2x1ZGUgIldlYlVSTC5oIgotI2luY2x1ZGUgIldlYlZlY3Rvci5o
IgotI2luY2x1ZGUgIldlYlZpZXdDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJWaWV3SW1wbC5oIgot
I2luY2x1ZGUgIldlYldvcmtlckNsaWVudEltcGwuaCIKLQotI2lmIFBMQVRGT1JNKENHKQotI2lu
Y2x1ZGUgPENvcmVHcmFwaGljcy9DR0NvbnRleHQuaD4KLSNlbmRpZgotCi0jaWYgT1MoV0lORE9X
UykKLSNpbmNsdWRlICJXZWJSZWN0LmgiCi0jaW5jbHVkZSAid2luL1dlYlRoZW1lRW5naW5lLmgi
Ci0jZW5kaWYKLQotI2lmIE9TKExJTlVYKSB8fCBPUyhGUkVFQlNEKQotI2luY2x1ZGUgImxpbnV4
L1dlYlRoZW1lRW5naW5lLmgiCi0jaW5jbHVkZSAiV2ViRm9udEluZm8uaCIKLSNpbmNsdWRlICJX
ZWJGb250UmVuZGVyU3R5bGUuaCIKLSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQotI2luY2x1ZGUg
Im1hYy9XZWJUaGVtZUVuZ2luZS5oIgotI2VuZGlmCi0KLSNpZiBXRUJLSVRfVVNJTkdfU0tJQQot
I2luY2x1ZGUgIk5hdGl2ZUltYWdlU2tpYS5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJCaXRtYXBJ
bWFnZS5oIgotI2luY2x1ZGUgIkNvb2tpZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgotI2lu
Y2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgotI2luY2x1ZGUgIklEQkZhY3RvcnlCYWNrZW5kUHJv
eHkuaCIKLSNpbmNsdWRlICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNp
bmNsdWRlICJQbGF0Zm9ybUNvbnRleHRTa2lhLmgiCi0jaW5jbHVkZSAiUGx1Z2luRGF0YS5oIgot
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgotCi0jaW5jbHVkZSAiV29ya2VyLmgiCi0jaW5jbHVk
ZSAiV29ya2VyQ29udGV4dFByb3h5LmgiCi0jaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KLQot
Ly8gV2UgYXJlIHBhcnQgb2YgdGhlIFdlYktpdCBpbXBsZW1lbnRhdGlvbi4KLXVzaW5nIG5hbWVz
cGFjZSBXZWJLaXQ7Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIENocm9tZUNsaWVu
dEltcGwqIHRvQ2hyb21lQ2xpZW50SW1wbChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBpZiAoIXdp
ZGdldCkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBGcmFtZVZpZXcqIHZpZXc7Ci0gICAgaWYg
KHdpZGdldC0+aXNGcmFtZVZpZXcoKSkKLSAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PEZyYW1l
Vmlldyo+KHdpZGdldCk7Ci0gICAgZWxzZSBpZiAod2lkZ2V0LT5wYXJlbnQoKSAmJiB3aWRnZXQt
PnBhcmVudCgpLT5pc0ZyYW1lVmlldygpKQotICAgICAgICB2aWV3ID0gc3RhdGljX2Nhc3Q8RnJh
bWVWaWV3Kj4od2lkZ2V0LT5wYXJlbnQoKSk7Ci0gICAgZWxzZQotICAgICAgICByZXR1cm4gMDsK
LQotICAgIFBhZ2UqIHBhZ2UgPSB2aWV3LT5mcmFtZSgpID8gdmlldy0+ZnJhbWUoKS0+cGFnZSgp
IDogMDsKLSAgICBpZiAoIXBhZ2UpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0
YXRpY19jYXN0PENocm9tZUNsaWVudEltcGwqPihwYWdlLT5jaHJvbWUoKS0+Y2xpZW50KCkpOwot
fQotCi1zdGF0aWMgV2ViV2lkZ2V0Q2xpZW50KiB0b1dlYldpZGdldENsaWVudChXaWRnZXQqIHdp
ZGdldCkKLXsKLSAgICBDaHJvbWVDbGllbnRJbXBsKiBjaHJvbWVDbGllbnRJbXBsID0gdG9DaHJv
bWVDbGllbnRJbXBsKHdpZGdldCk7Ci0gICAgaWYgKCFjaHJvbWVDbGllbnRJbXBsIHx8ICFjaHJv
bWVDbGllbnRJbXBsLT53ZWJWaWV3KCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBj
aHJvbWVDbGllbnRJbXBsLT53ZWJWaWV3KCktPmNsaWVudCgpOwotfQotCi1zdGF0aWMgV2ViQ29v
a2llSmFyKiBnZXRDb29raWVKYXIoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIFdl
YkZyYW1lSW1wbCogZnJhbWVJbXBsID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZG9jdW1lbnQt
PmZyYW1lKCkpOwotICAgIGlmICghZnJhbWVJbXBsIHx8ICFmcmFtZUltcGwtPmNsaWVudCgpKQot
ICAgICAgICByZXR1cm4gMDsKLSAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGZyYW1lSW1w
bC0+Y2xpZW50KCktPmNvb2tpZUphcihmcmFtZUltcGwpOwotICAgIGlmICghY29va2llSmFyKQot
ICAgICAgICBjb29raWVKYXIgPSB3ZWJLaXRDbGllbnQoKS0+Y29va2llSmFyKCk7Ci0gICAgcmV0
dXJuIGNvb2tpZUphcjsKLX0KLQotLy8gQ2FjaGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIENocm9t
aXVtQnJpZGdlOjpjYWNoZU1ldGFkYXRhKGNvbnN0IEtVUkwmIHVybCwgZG91YmxlIHJlc3BvbnNl
VGltZSwgY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhKQotewotICAgIHdlYktpdENsaWVudCgpLT5j
YWNoZU1ldGFkYXRhKHVybCwgcmVzcG9uc2VUaW1lLCBkYXRhLmRhdGEoKSwgZGF0YS5zaXplKCkp
OwotfQotCi0vLyBDbGlwYm9hcmQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNs
aXBib2FyZElzRm9ybWF0QXZhaWxhYmxlKAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9h
cmRGb3JtYXQgZm9ybWF0LAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIg
YnVmZmVyKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPmlzRm9y
bWF0QXZhaWxhYmxlKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlwYm9hcmQ6OkZvcm1hdD4o
Zm9ybWF0KSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZl
cikpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQo
Ci0gICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIpCi17Ci0gICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+cmVhZFBsYWluVGV4dCgKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwotfQotCi12b2lk
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRNTCgKLSAgICBQYXN0ZWJvYXJkUHJpdmF0
ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwKLSAgICBTdHJpbmcqIGh0bWxUZXh0LCBLVVJMKiBz
b3VyY2VVUkwpCi17Ci0gICAgV2ViVVJMIHVybDsKLSAgICAqaHRtbFRleHQgPSB3ZWJLaXRDbGll
bnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRIVE1MKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlw
Ym9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgJnVybCk7Ci0gICAgKnNvdXJjZVVSTCA9IHVybDsKLX0K
LQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29uc3QgU3Ry
aW5nJiBodG1sVGV4dCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVSTCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0LAotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVNtYXJ0UGFzdGUpCi17Ci0g
ICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUhUTUwoCi0gICAgICAgIGh0bWxU
ZXh0LCBzb3VyY2VVUkwsIHBsYWluVGV4dCwgd3JpdGVTbWFydFBhc3RlKTsKLX0KLQotdm9pZCBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiBwbGFp
blRleHQpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZVBsYWluVGV4
dChwbGFpblRleHQpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVVS
TChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUpCi17Ci0gICAgd2ViS2l0Q2xp
ZW50KCktPmNsaXBib2FyZCgpLT53cml0ZVVSTCh1cmwsIHRpdGxlKTsKLX0KLQotdm9pZCBDaHJv
bWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFnZSwKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgc291cmNl
VVJMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJp
bmcmIHRpdGxlKQotewotI2lmIFdFQktJVF9VU0lOR19TS0lBCi0gICAgV2ViSW1hZ2Ugd2ViSW1h
Z2UoKmltYWdlKTsKLSNlbHNlCi0gICAgV2ViSW1hZ2Ugd2ViSW1hZ2UoaW1hZ2UpOwotI2VuZGlm
Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT53cml0ZUltYWdlKHdlYkltYWdlLCBz
b3VyY2VVUkwsIHRpdGxlKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3Jp
dGVEYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb25zdCBTdHJpbmcmIGRhdGEsCi0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiBtZXRhZGF0YSkKLXsKLSAgICB3ZWJLaXRDbGll
bnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlRGF0YSh0eXBlLCBkYXRhLCBtZXRhZGF0YSk7Ci19Ci0K
LUhhc2hTZXQ8U3RyaW5nPiBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEF2YWlsYWJsZVR5
cGVzKAotICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLCBib29s
KiBjb250YWluc0ZpbGVuYW1lcykKLXsKLSAgICBXZWJWZWN0b3I8V2ViU3RyaW5nPiByZXN1bHQg
PSB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRBdmFpbGFibGVUeXBlcygKLSAgICAg
ICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIGNvbnRhaW5zRmls
ZW5hbWVzKTsKLSAgICBIYXNoU2V0PFN0cmluZz4gdHlwZXM7Ci0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCByZXN1bHQuc2l6ZSgpOyArK2kpCi0gICAgICAgIHR5cGVzLmFkZChyZXN1bHRbaV0p
OwotICAgIHJldHVybiB0eXBlczsKLX0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJk
UmVhZERhdGEoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHR5cGUsIFN0
cmluZyYgZGF0YSwgU3RyaW5nJiBtZXRhZGF0YSkKLXsKLSAgICBXZWJTdHJpbmcgcmVzdWx0RGF0
YTsKLSAgICBXZWJTdHJpbmcgcmVzdWx0TWV0YWRhdGE7Ci0gICAgYm9vbCBzdWNjZWVkZWQgPSB3
ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWREYXRhKAotICAgICAgICBzdGF0aWNfY2Fz
dDxXZWJDbGlwYm9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSwgdHlwZSwgJnJlc3VsdERhdGEsICZyZXN1
bHRNZXRhZGF0YSk7Ci0gICAgaWYgKHN1Y2NlZWRlZCkgewotICAgICAgICBkYXRhID0gcmVzdWx0
RGF0YTsKLSAgICAgICAgbWV0YWRhdGEgPSByZXN1bHRNZXRhZGF0YTsKLSAgICB9Ci0gICAgcmV0
dXJuIHN1Y2NlZWRlZDsKLX0KLQotVmVjdG9yPFN0cmluZz4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBi
b2FyZFJlYWRGaWxlbmFtZXMoUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2FyZEJ1ZmZlciBidWZm
ZXIpCi17Ci0gICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCkt
PmNsaXBib2FyZCgpLT5yZWFkRmlsZW5hbWVzKAotICAgICAgICBzdGF0aWNfY2FzdDxXZWJDbGlw
Ym9hcmQ6OkJ1ZmZlcj4oYnVmZmVyKSk7Ci0gICAgVmVjdG9yPFN0cmluZz4gY29udmVydGVkUmVz
dWx0OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQotICAg
ICAgICBjb252ZXJ0ZWRSZXN1bHQuYXBwZW5kKHJlc3VsdFtpXSk7Ci0gICAgcmV0dXJuIGNvbnZl
cnRlZFJlc3VsdDsKLX0KLQotLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIENocm9taXVt
QnJpZGdlOjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHZhbHVl
KQotewotICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50
KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAgICBjb29raWVKYXItPnNldENvb2tpZSh1cmws
IGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7Ci19Ci0KLVN0cmluZyBD
aHJvbWl1bUJyaWRnZTo6Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtV
UkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUphciogY29va2ll
SmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFyKQotICAgICAg
ICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZv
ckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotU3RyaW5nIENocm9taXVtQnJp
ZGdlOjpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1l
bnQsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IEtVUkwmIHVybCkKLXsKLSAgICBTdHJpbmcgcmVzdWx0OwotICAgIFdlYkNvb2tpZUph
ciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKLSAgICBpZiAoY29va2llSmFy
KQotICAgICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZh
bHVlKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOwotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OnJhd0Nvb2tpZXMoY29uc3QgRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3RvcjxDb29raWU+JiByYXdDb29raWVz
KQotewotICAgIHJhd0Nvb2tpZXMuY2xlYXIoKTsKLSAgICBXZWJWZWN0b3I8V2ViQ29va2llPiB3
ZWJDb29raWVzOwotCi0gICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIo
ZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0gICAgICAgIGNvb2tpZUphci0+cmF3Q29v
a2llcyh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB3ZWJDb29raWVzKTsK
LQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB3ZWJDb29raWVzLnNpemUoKTsgKytpKSB7
Ci0gICAgICAgIGNvbnN0IFdlYkNvb2tpZSYgd2ViQ29va2llID0gd2ViQ29va2llc1tpXTsKLSAg
ICAgICAgQ29va2llIGNvb2tpZSh3ZWJDb29raWUubmFtZSwKLSAgICAgICAgICAgICAgICAgICAg
ICB3ZWJDb29raWUudmFsdWUsCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLmRvbWFp
biwKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUucGF0aCwKLSAgICAgICAgICAgICAg
ICAgICAgICB3ZWJDb29raWUuZXhwaXJlcywKLSAgICAgICAgICAgICAgICAgICAgICB3ZWJDb29r
aWUuaHR0cE9ubHksCi0gICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlY3VyZSwKLSAg
ICAgICAgICAgICAgICAgICAgICB3ZWJDb29raWUuc2Vzc2lvbik7Ci0gICAgICAgIHJhd0Nvb2tp
ZXMuYXBwZW5kKGNvb2tpZSk7Ci0gICAgfQotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENo
cm9taXVtQnJpZGdlOjpkZWxldGVDb29raWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgY29va2llTmFtZSkKLXsKLSAgICBXZWJDb29raWVK
YXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7Ci0gICAgaWYgKGNvb2tpZUph
cikKLSAgICAgICAgY29va2llSmFyLT5kZWxldGVDb29raWUodXJsLCBjb29raWVOYW1lKTsKLX0K
LQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Y29va2llc0VuYWJsZWQoY29uc3QgRG9jdW1lbnQqIGRv
Y3VtZW50KQotewotICAgIGJvb2wgcmVzdWx0ID0gZmFsc2U7Ci0gICAgV2ViQ29va2llSmFyKiBj
b29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwotICAgIGlmIChjb29raWVKYXIpCi0g
ICAgICAgIHJlc3VsdCA9IGNvb2tpZUphci0+Y29va2llc0VuYWJsZWQoZG9jdW1lbnQtPmNvb2tp
ZVVSTCgpLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKLX0KLQotLy8gRE5TIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi12b2lkIENocm9taXVtQnJpZGdl
OjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcmIGhvc3RuYW1lKQotewotICAgIHdlYktpdENsaWVu
dCgpLT5wcmVmZXRjaEhvc3ROYW1lKGhvc3RuYW1lKTsKLX0KLQotLy8gRmlsZSAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6ZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBh
dGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVF
eGlzdHMocGF0aCk7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUZpbGUoY29uc3Qg
U3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGll
cygpLT5kZWxldGVGaWxlKHBhdGgpOwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjpkZWxldGVF
bXB0eURpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENs
aWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmRlbGV0ZUVtcHR5RGlyZWN0b3J5KHBhdGgpOwotfQot
Ci1ib29sIENocm9taXVtQnJpZGdlOjpnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxv
bmcgbG9uZyYgcmVzdWx0KQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxp
dGllcygpLT5nZXRGaWxlU2l6ZShwYXRoLCByZXN1bHQpOwotfQotCi12b2lkIENocm9taXVtQnJp
ZGdlOjpyZXZlYWxGb2xkZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKLXsKLSAgICB3ZWJLaXRD
bGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5yZXZlYWxGb2xkZXJJbk9TKHBhdGgpOwotfQotCi1i
b29sIENocm9taXVtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGltZShjb25zdCBTdHJpbmcm
IHBhdGgsIHRpbWVfdCYgcmVzdWx0KQotewotICAgIGRvdWJsZSBtb2RpZmljYXRpb25UaW1lOwot
ICAgIGlmICghd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Z2V0RmlsZU1vZGlmaWNh
dGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXN1bHQgPSBzdGF0aWNfY2FzdDx0aW1lX3Q+KG1vZGlmaWNhdGlvblRpbWUpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmRpcmVjdG9yeU5hbWUo
Y29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0
aWxpdGllcygpLT5kaXJlY3RvcnlOYW1lKHBhdGgpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1Ccmlk
Z2U6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0IFN0
cmluZyYgY29tcG9uZW50KQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxp
dGllcygpLT5wYXRoQnlBcHBlbmRpbmdDb21wb25lbnQocGF0aCwgY29tcG9uZW50KTsKLX0KLQot
Ym9vbCBDaHJvbWl1bUJyaWRnZTo6bWFrZUFsbERpcmVjdG9yaWVzKGNvbnN0IFN0cmluZyYgcGF0
aCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+bWFrZUFs
bERpcmVjdG9yaWVzKHBhdGgpOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmdldEFic29s
dXRlUGF0aChjb25zdCBTdHJpbmcmIHBhdGgpCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgp
LT5maWxlVXRpbGl0aWVzKCktPmdldEFic29sdXRlUGF0aChwYXRoKTsKLX0KLQotYm9vbCBDaHJv
bWl1bUJyaWRnZTo6aXNEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5pc0RpcmVjdG9yeShwYXRoKTsKLX0K
LQotS1VSTCBDaHJvbWl1bUJyaWRnZTo6ZmlsZVBhdGhUb1VSTChjb25zdCBTdHJpbmcmIHBhdGgp
Ci17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVQYXRo
VG9VUkwocGF0aCk7Ci19Ci0KLVBsYXRmb3JtRmlsZUhhbmRsZSBDaHJvbWl1bUJyaWRnZTo6b3Bl
bkZpbGUoY29uc3QgU3RyaW5nJiBwYXRoLCBGaWxlT3Blbk1vZGUgbW9kZSkKLXsKLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+b3BlbkZpbGUocGF0aCwgbW9kZSk7
Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsb3NlRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUm
IGhhbmRsZSkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5jbG9zZUZp
bGUoaGFuZGxlKTsKLX0KLQotbG9uZyBsb25nIENocm9taXVtQnJpZGdlOjpzZWVrRmlsZShQbGF0
Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09yaWdpbiBv
cmlnaW4pCi17Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnNl
ZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4pOwotfQotCi1ib29sIENocm9taXVtQnJpZGdl
Ojp0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNl
dCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+dHJ1bmNh
dGVGaWxlKGhhbmRsZSwgb2Zmc2V0KTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjpyZWFkRnJv
bUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
LXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cmVhZEZyb21G
aWxlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjp3cml0
ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT53
cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7Ci19Ci0KLS8vIEZvbnQgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KLQotI2lmIE9TKFdJTkRPV1MpCi1ib29sIENocm9taXVtQnJpZGdlOjplbnN1cmVGb250
TG9hZGVkKEhGT05UIGZvbnQpCi17Ci0gICAgV2ViU2FuZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0
Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCk7Ci0KLSAgICAvLyBpZiB0aGVyZSBpcyBubyBzYW5k
Ym94LCB0aGVuIHdlIGNhbiBhc3N1bWUgdGhlIGZvbnQKLSAgICAvLyB3YXMgYWJsZSB0byBiZSBs
b2FkZWQgc3VjY2Vzc2Z1bGx5IGFscmVhZHkKLSAgICByZXR1cm4gc3MgPyBzcy0+ZW5zdXJlRm9u
dExvYWRlZChmb250KSA6IHRydWU7Ci19Ci0jZW5kaWYKLQotI2lmIE9TKExJTlVYKSB8fCBPUyhG
UkVFQlNEKQotU3RyaW5nIENocm9taXVtQnJpZGdlOjpnZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVy
cyhjb25zdCBVQ2hhciogY2hhcmFjdGVycywgc2l6ZV90IG51bUNoYXJhY3RlcnMpCi17Ci0gICAg
aWYgKHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpKQotICAgICAgICByZXR1cm4gd2Vi
S2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCktPmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJz
KGNoYXJhY3RlcnMsIG51bUNoYXJhY3RlcnMpOwotCi0gICAgV2ViQ1N0cmluZyBmYW1pbHkgPSBX
ZWJGb250SW5mbzo6ZmFtaWx5Rm9yQ2hhcnMoY2hhcmFjdGVycywgbnVtQ2hhcmFjdGVycyk7Ci0g
ICAgaWYgKGZhbWlseS5kYXRhKCkpCi0gICAgICAgIHJldHVybiBXZWJTdHJpbmc6OmZyb21VVEY4
KGZhbWlseS5kYXRhKCkpOwotCi0gICAgcmV0dXJuIFdlYlN0cmluZygpOwotfQotCi12b2lkIENo
cm9taXVtQnJpZGdlOjpnZXRSZW5kZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFyKiBmb250LCBp
bnQgc2l6ZUFuZFN0eWxlLCBGb250UmVuZGVyU3R5bGUqIHJlc3VsdCkKLXsKLSAgICBXZWJGb250
UmVuZGVyU3R5bGUgc3R5bGU7Ci0KLSAgICBpZiAod2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBw
b3J0KCkpCi0gICAgICAgIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRSZW5k
ZXJTdHlsZUZvclN0cmlrZShmb250LCBzaXplQW5kU3R5bGUsICZzdHlsZSk7Ci0gICAgZWxzZQot
ICAgICAgICBXZWJGb250SW5mbzo6cmVuZGVyU3R5bGVGb3JTdHJpa2UoZm9udCwgc2l6ZUFuZFN0
eWxlLCAmc3R5bGUpOwotCi0gICAgc3R5bGUudG9Gb250UmVuZGVyU3R5bGUocmVzdWx0KTsKLX0K
LSNlbmRpZgotCi0jaWYgT1MoREFSV0lOKQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6bG9hZEZvbnQo
TlNGb250KiBzcmNGb250LCBBVFNGb250Q29udGFpbmVyUmVmKiBvdXQpCi17Ci0gICAgV2ViU2Fu
ZGJveFN1cHBvcnQqIHNzID0gd2ViS2l0Q2xpZW50KCktPnNhbmRib3hTdXBwb3J0KCk7Ci0gICAg
aWYgKHNzKQotICAgICAgICByZXR1cm4gc3MtPmxvYWRGb250KHNyY0ZvbnQsIG91dCk7Ci0KLSAg
ICAvLyBUaGlzIGZ1bmN0aW9uIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpbiByZXNwb25zZSB0byBh
biBlcnJvciBsb2FkaW5nIGEKLSAgICAvLyBmb250IGR1ZSB0byBiZWluZyBibG9ja2VkIGJ5IHRo
ZSBzYW5kYm94LgotICAgIC8vIFRoaXMgYnkgZGVmaW5pdGlvbiBzaG91bGRuJ3QgaGFwcGVuIGlm
IHRoZXJlIGlzIG5vIHNhbmRib3ggc3VwcG9ydC4KLSAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LSAgICAqb3V0ID0gMDsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0jZW5kaWYKLQotLy8gRGF0YWJh
c2VzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi1QbGF0Zm9ybUZpbGVIYW5kbGUgQ2hyb21pdW1CcmlkZ2U6OmRhdGFi
YXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgaW50IGRlc2lyZWRGbGFncykK
LXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlT3BlbkZpbGUoV2ViU3RyaW5n
KHZmc0ZpbGVOYW1lKSwgZGVzaXJlZEZsYWdzKTsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjpk
YXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGly
KQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VEZWxldGVGaWxlKFdlYlN0
cmluZyh2ZnNGaWxlTmFtZSksIHN5bmNEaXIpOwotfQotCi1sb25nIENocm9taXVtQnJpZGdlOjpk
YXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCi17Ci0g
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKFdlYlN0
cmluZyh2ZnNGaWxlTmFtZSkpOwotfQotCi1sb25nIGxvbmcgQ2hyb21pdW1CcmlkZ2U6OmRhdGFi
YXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSkKLXsKLSAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlR2V0RmlsZVNpemUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1l
KSk7Ci19Ci0KLS8vIEluZGV4ZWQgRGF0YWJhc2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotUGFzc1JlZlB0cjxJREJGYWN0b3J5
QmFja2VuZEludGVyZmFjZT4gQ2hyb21pdW1CcmlkZ2U6OmlkYkZhY3RvcnkoKQotewotICAgIC8v
IFRoZXJlJ3Mgbm8gcmVhc29uIHdoeSB3ZSBuZWVkIHRvIGFsbG9jYXRlIGEgbmV3IHByb3h5IGVh
Y2ggdGltZSwgYnV0Ci0gICAgLy8gdGhlcmUncyBhbHNvIG5vIHN0cm9uZyByZWFzb24gbm90IHRv
LgotICAgIHJldHVybiBJREJGYWN0b3J5QmFja2VuZFByb3h5OjpjcmVhdGUoKTsKLX0KLQotdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6aWRiU2h1dGRvd24oKQotewotICAgIC8vIEluIHRoZSBicm93c2Vy
IHByb2Nlc3MsIHRoaXMgc2h1dHMgZG93biB0aGUgdXRpbGl0eSBwcm9jZXNzLiBJbiB0aGUgcmVu
ZGVyZXIgcHJvY2VzcywgaXQgZG9lcyBub3RoaW5nLgotICAgIHdlYktpdENsaWVudCgpLT5pZGJT
aHV0ZG93bigpOwotfQotCi12b2lkIENocm9taXVtQnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNl
cmlhbGl6ZWRWYWx1ZXNBbmRLZXlQYXRoKGNvbnN0IFZlY3RvcjxSZWZQdHI8U2VyaWFsaXplZFNj
cmlwdFZhbHVlPiA+JiB2YWx1ZXMsIGNvbnN0IFN0cmluZyYga2V5UGF0aCwgVmVjdG9yPFJlZlB0
cjxJREJLZXk+ID4mIGtleXMpCi17Ci0gICAgV2ViVmVjdG9yPFdlYlNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZT4gd2ViVmFsdWVzID0gdmFsdWVzOwotICAgIFdlYlZlY3RvcjxXZWJJREJLZXk+IHdlYktl
eXM7Ci0gICAgd2ViS2l0Q2xpZW50KCktPmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVl
c0FuZEtleVBhdGgod2ViVmFsdWVzLCBXZWJTdHJpbmcoa2V5UGF0aCksIHdlYktleXMpOwotCi0g
ICAgc2l6ZV90IHdlYktleXNTaXplID0gd2ViS2V5cy5zaXplKCk7Ci0gICAga2V5cy5yZXNlcnZl
Q2FwYWNpdHkod2ViS2V5c1NpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgd2ViS2V5
c1NpemU7ICsraSkKLSAgICAgICAga2V5cy5hcHBlbmQoUGFzc1JlZlB0cjxJREJLZXk+KHdlYktl
eXNbaV0pKTsKLX0KLQotLy8gS2V5Z2VuIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdHJpbmcgQ2hyb21pdW1C
cmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmluZygKLSAgICB1bnNpZ25lZCBr
ZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlLCBjb25zdCBLVVJMJiB1cmwpCi17
Ci0gICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VT
dHJpbmcoa2V5U2l6ZUluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlN0cmluZyhjaGFsbGVuZ2UpLAotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFdlYlVS
TCh1cmwpKTsKLX0KLQotLy8gTGFuZ3VhZ2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1TdHJpbmcgQ2hyb21pdW1C
cmlkZ2U6OmNvbXB1dGVkRGVmYXVsdExhbmd1YWdlKCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xp
ZW50KCktPmRlZmF1bHRMb2NhbGUoKTsKLX0KLQotLy8gTGF5b3V0VGVzdE1vZGUgLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1i
b29sIENocm9taXVtQnJpZGdlOjpsYXlvdXRUZXN0TW9kZSgpCi17Ci0gICAgcmV0dXJuIFdlYktp
dDo6bGF5b3V0VGVzdE1vZGUoKTsKLX0KLQotLy8gTWltZVR5cGUgLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1ib29s
IENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBt
aW1lVHlwZSkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5z
dXBwb3J0c0ltYWdlTUlNRVR5cGUobWltZVR5cGUpCi0gICAgICAgICE9IFdlYk1pbWVSZWdpc3Ry
eTo6SXNOb3RTdXBwb3J0ZWQ7Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzU3VwcG9ydGVk
SmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWltZVR5cGUpCi17Ci0gICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3VwcG9ydHNKYXZhU2NyaXB0TUlNRVR5
cGUobWltZVR5cGUpCi0gICAgICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7
Ci19Ci0KLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWlt
ZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKLSAgICAgICAg
IT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKLX0KLQotU3RyaW5nIENocm9taXVt
QnJpZGdlOjptaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKLXsK
LSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZvckV4
dGVuc2lvbihleHRlbnNpb24pOwotfQotCi1TdHJpbmcgQ2hyb21pdW1CcmlkZ2U6Om1pbWVUeXBl
RnJvbUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQotewotICAgIHJldHVybiB3ZWJLaXRDbGllbnQo
KS0+bWltZVJlZ2lzdHJ5KCktPm1pbWVUeXBlRnJvbUZpbGUocGF0aCk7Ci19Ci0KLVN0cmluZyBD
aHJvbWl1bUJyaWRnZTo6cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUoY29uc3QgU3RyaW5n
JiBtaW1lVHlwZSkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVSZWdpc3RyeSgp
LT5wcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShtaW1lVHlwZSk7Ci19Ci0KLS8vIFBsdWdp
biAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0KLQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6cGx1Z2lucyhib29sIHJlZnJl
c2gsIFZlY3RvcjxQbHVnaW5JbmZvPiogcmVzdWx0cykKLXsKLSAgICBXZWJQbHVnaW5MaXN0QnVp
bGRlckltcGwgYnVpbGRlcihyZXN1bHRzKTsKLSAgICB3ZWJLaXRDbGllbnQoKS0+Z2V0UGx1Z2lu
TGlzdChyZWZyZXNoLCAmYnVpbGRlcik7Ci0gICAgcmV0dXJuIHRydWU7ICAvLyBGSVhNRTogVGhl
cmUgaXMgbm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSB2YWx1ZS4KLX0KLQot
TlBPYmplY3QqIENocm9taXVtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCog
d2lkZ2V0KQotewotICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzUGx1Z2luQ29udGFpbmVy
KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgcmV0dXJuIHN0YXRpY19jYXN0PFdlYlBsdWdp
bkNvbnRhaW5lckltcGwqPih3aWRnZXQpLT5zY3JpcHRhYmxlT2JqZWN0KCk7Ci19Ci0KLS8vIFJl
c291cmNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KLQotUGFzc1JlZlB0cjxJbWFnZT4gQ2hyb21pdW1CcmlkZ2U6Omxv
YWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKLXsKLSAgICBjb25zdCBX
ZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7Ci0g
ICAgaWYgKHJlc291cmNlLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIEltYWdlOjpudWxsSW1h
Z2UoKTsKLQotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSBCaXRtYXBJbWFnZTo6Y3JlYXRlKCk7
Ci0gICAgaW1hZ2UtPnNldERhdGEocmVzb3VyY2UsIHRydWUpOwotICAgIHJldHVybiBpbWFnZTsK
LX0KLQotI2lmIEVOQUJMRShXRUJfQVVESU8pCi0KLVBhc3NPd25QdHI8QXVkaW9CdXM+IENocm9t
aXVtQnJpZGdlOjpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUsIGRv
dWJsZSBzYW1wbGVSYXRlKQotewotICAgIGNvbnN0IFdlYkRhdGEmIHJlc291cmNlID0gd2ViS2l0
Q2xpZW50KCktPmxvYWRSZXNvdXJjZShuYW1lKTsKLSAgICBpZiAocmVzb3VyY2UuaXNFbXB0eSgp
KQotICAgICAgICByZXR1cm4gMDsKLSAgICAKLSAgICByZXR1cm4gZGVjb2RlQXVkaW9GaWxlRGF0
YShyZXNvdXJjZS5kYXRhKCksIHJlc291cmNlLnNpemUoKSwgc2FtcGxlUmF0ZSk7Ci19Ci0KLVBh
c3NPd25QdHI8QXVkaW9CdXM+IENocm9taXVtQnJpZGdlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKLXsKLSAgICBX
ZWJBdWRpb0J1cyB3ZWJBdWRpb0J1czsKLSAgICBpZiAod2ViS2l0Q2xpZW50KCktPmxvYWRBdWRp
b1Jlc291cmNlKCZ3ZWJBdWRpb0J1cywgZGF0YSwgc2l6ZSwgc2FtcGxlUmF0ZSkpCi0gICAgICAg
IHJldHVybiB3ZWJBdWRpb0J1cy5yZWxlYXNlKCk7Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLSNlbmRp
ZiAvLyBFTkFCTEUoV0VCX0FVRElPKQotCi0vLyBTYW5kYm94IC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLWJvb2wg
Q2hyb21pdW1CcmlkZ2U6OnNhbmRib3hFbmFibGVkKCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xp
ZW50KCktPnNhbmRib3hFbmFibGVkKCk7Ci19Ci0KLS8vIFNoYXJlZFRpbWVycyAtLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQot
dm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9uKHZvaWQgKCpm
dW5jKSgpKQotewotICAgIHdlYktpdENsaWVudCgpLT5zZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rp
b24oZnVuYyk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZVRp
bWUoZG91YmxlIGZpcmVUaW1lKQotewotICAgIHdlYktpdENsaWVudCgpLT5zZXRTaGFyZWRUaW1l
ckZpcmVUaW1lKGZpcmVUaW1lKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c3RvcFNoYXJl
ZFRpbWVyKCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+c3RvcFNoYXJlZFRpbWVyKCk7Ci19Ci0K
LS8vIFN0YXRzQ291bnRlcnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6ZGVjcmVtZW50
U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgd2ViS2l0Q2xpZW50KCktPmRl
Y3JlbWVudFN0YXRzQ291bnRlcihuYW1lKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6aW5j
cmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpCi17Ci0gICAgd2ViS2l0Q2xpZW50
KCktPmluY3JlbWVudFN0YXRzQ291bnRlcihuYW1lKTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRn
ZTo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGlu
dCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+
aGlzdG9ncmFtQ3VzdG9tQ291bnRzKG5hbWUsIHNhbXBsZSwgbWluLCBtYXgsIGJ1Y2tldENvdW50
KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3Qg
Y2hhciogbmFtZSwgaW50IHNhbXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpCi17Ci0gICAgd2ViS2l0
Q2xpZW50KCktPmhpc3RvZ3JhbUVudW1lcmF0aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1
ZSk7Ci19Ci0KLS8vIFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6
c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICB3ZWJLaXRDbGll
bnQoKS0+c3VkZGVuVGVybWluYXRpb25DaGFuZ2VkKGVuYWJsZWQpOwotfQotCi0vLyBTeXN0ZW1U
aW1lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCi0KLWRvdWJsZSBDaHJvbWl1bUJyaWRnZTo6Y3VycmVudFRpbWUoKQotewot
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Y3VycmVudFRpbWUoKTsKLX0KLQotLy8gVGhlbWlu
ZyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQotCi0jaWYgT1MoV0lORE9XUykKLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6
cGFpbnRCdXR0b24oCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdl
YktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludEJ1dHRvbigKLSAgICAgICAgZ2MtPnBs
YXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVj
dCk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50TWVudUxpc3QoCi0gICAgR3JhcGhp
Y3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKLSAg
ICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2lu
ZSgpLT5wYWludE1lbnVMaXN0KAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZh
cygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJvdygKLSAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBp
bnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYgcmVjdCkKLXsK
LSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJBcnJvdygK
LSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgc3RhdGUsIGNsYXNzaWNT
dGF0ZSwgcmVjdCk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1
bWIoCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNs
YXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdlYktpdENsaWVu
dCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhclRodW1iKAotICAgICAgICBnYy0+cGxh
dGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0
KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUcmFjaygKLSAgICBH
cmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRl
LAotICAgIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IEludFJlY3QmIGFsaWduUmVjdCkKLXsK
LSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUcmFjaygK
LSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNs
YXNzaWNTdGF0ZSwgcmVjdCwKLSAgICAgICAgYWxpZ25SZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1
bUJyaWRnZTo6cGFpbnRTcGluQnV0dG9uKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBw
YXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCi0gICAgY29uc3QgSW50UmVjdCYgcmVj
dCkKLXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTcGluQnV0dG9u
KAotICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwg
Y2xhc3NpY1N0YXRlLCByZWN0KTsKLX0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUZXh0
RmllbGQoCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50
IGNsYXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xvciYgY29s
b3IsIGJvb2wgZmlsbENvbnRlbnRBcmVhLAotICAgIGJvb2wgZHJhd0VkZ2VzKQotewotICAgIC8v
IEZhbGxiYWNrIHRvIHdoaXRlIHdoZW4gfGNvbG9yfCBpcyBpbnZhbGlkLgotICAgIFJHQkEzMiBi
YWNrZ3JvdW5kQ29sb3IgPSBjb2xvci5pc1ZhbGlkKCkgPyBjb2xvci5yZ2IoKSA6IENvbG9yOjp3
aGl0ZTsKLQotICAgIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFRleHRGaWVs
ZCgKLSAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUs
IGNsYXNzaWNTdGF0ZSwgcmVjdCwKLSAgICAgICAgYmFja2dyb3VuZENvbG9yLCBmaWxsQ29udGVu
dEFyZWEsIGRyYXdFZGdlcyk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VHJhY2ti
YXIoCi0gICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNs
YXNzaWNTdGF0ZSwKLSAgICBjb25zdCBJbnRSZWN0JiByZWN0KQotewotICAgIHdlYktpdENsaWVu
dCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFRyYWNrYmFyKAotICAgICAgICBnYy0+cGxhdGZvcm1D
b250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKLX0K
LQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcigKLSAgICBHcmFwaGljc0Nv
bnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiBiYXJSZWN0LCBjb25zdCBJbnRSZWN0JiB2YWx1ZVJl
Y3QsIGJvb2wgZGV0ZXJtaW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMpCi17Ci0gICAgd2Vi
S2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50UHJvZ3Jlc3NCYXIoCi0gICAgICAgIGdj
LT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIGJhclJlY3QsIHZhbHVlUmVjdCwgZGV0ZXJt
aW5hdGUsIGFuaW1hdGVkU2Vjb25kcyk7Ci19Ci0KLSNlbGlmIE9TKExJTlVYKQotCi1zdGF0aWMg
V2ViVGhlbWVFbmdpbmU6OlBhcnQgV2ViVGhlbWVQYXJ0KENocm9taXVtQnJpZGdlOjpUaGVtZVBh
cnQgcGFydCkKLXsKLSAgICBzd2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIENocm9taXVtQnJpZGdl
OjpQYXJ0U2Nyb2xsYmFyRG93bkFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3Jv
bGxiYXJEb3duQXJyb3c7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckxl
ZnRBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93Owot
ICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OiByZXR1cm4g
V2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OwotICAgIGNhc2UgQ2hyb21p
dW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJVcEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBh
cnRTY3JvbGxiYXJVcEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxi
YXJIb3Jpem9udGFsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckhv
cml6b250YWxUaHVtYjsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVy
dGljYWxUaHVtYjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxU
aHVtYjsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRy
YWNrOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2s7
Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s6IHJl
dHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s7Ci0gICAgfQot
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFy
dFNjcm9sbGJhckRvd25BcnJvdzsKLX0KLQotc3RhdGljIFdlYlRoZW1lRW5naW5lOjpTdGF0ZSBX
ZWJUaGVtZVN0YXRlKENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUpCi17Ci0g
ICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlRGlzYWJs
ZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsKLSAgICBjYXNlIENocm9t
aXVtQnJpZGdlOjpTdGF0ZUhvdmVyOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlSG92ZXI7
Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVOb3JtYWw6IHJldHVybiBXZWJUaGVtZUVu
Z2luZTo6U3RhdGVOb3JtYWw7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVQcmVzc2Vk
OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlUHJlc3NlZDsKLSAgICB9Ci0gICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZURpc2FibGVk
OwotfQotCi1zdGF0aWMgdm9pZCBHZXRXZWJUaGVtZUV4dHJhUGFyYW1zKENocm9taXVtQnJpZGdl
OjpUaGVtZVBhcnQgcGFydCwgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwg
Y29uc3QgQ2hyb21pdW1CcmlkZ2U6OlRoZW1lUGFpbnRFeHRyYVBhcmFtcyogZXh0cmFQYXJhbXMs
IFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyogd2ViVGhlbWVFeHRyYVBhcmFtcykKLXsKLSAg
ICBpZiAocGFydCA9PSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFj
ayB8fCBwYXJ0ID09IENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaykg
ewotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1ggPSBl
eHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tYOwotICAgICAgICB3ZWJUaGVtZUV4dHJh
UGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1kgPSBleHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJh
Y2sudHJhY2tZOwotICAgICAgICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50
cmFja1dpZHRoID0gZXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGg7Ci0gICAg
ICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrSGVpZ2h0ID0gZXh0
cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrSGVpZ2h0OwotICAgIH0KLX0KLQotSW50U2l6
ZSBDaHJvbWl1bUJyaWRnZTo6Z2V0VGhlbWVQYXJ0U2l6ZShUaGVtZVBhcnQgcGFydCkKLXsKLSAg
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5nZXRTaXplKFdlYlRoZW1l
UGFydChwYXJ0KSk7Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAot
ICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIFRoZW1lUGFydCBwYXJ0LCBUaGVtZVBhaW50U3RhdGUg
c3RhdGUsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNvbnN0IFRoZW1lUGFpbnRFeHRyYVBhcmFtcyog
ZXh0cmFQYXJhbXMpCi17Ci0gICAgV2ViVGhlbWVFbmdpbmU6OkV4dHJhUGFyYW1zIHdlYlRoZW1l
RXh0cmFQYXJhbXM7Ci0gICAgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhwYXJ0LCBzdGF0ZSwgZXh0
cmFQYXJhbXMsICZ3ZWJUaGVtZUV4dHJhUGFyYW1zKTsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dGhl
bWVFbmdpbmUoKS0+cGFpbnQoCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCksIFdlYlRoZW1lUGFydChwYXJ0KSwgV2ViVGhlbWVTdGF0ZShzdGF0ZSksIHJlY3QsICZ3ZWJU
aGVtZUV4dHJhUGFyYW1zKTsKLX0KLQotI2VsaWYgT1MoREFSV0lOKQotCi12b2lkIENocm9taXVt
QnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAotICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIFRo
ZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgVGhlbWVQYWludFNpemUgc2l6ZSwgY29uc3QgSW50UmVjdCYg
cmVjdCwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8mIHNjcm9sbGJhckluZm8pCi17Ci0g
ICAgV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhckluZm8gd2ViVGhlbWVTY3JvbGxiYXJJbmZvOwot
Ci0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLm9yaWVudGF0aW9uID0gc3RhdGljX2Nhc3Q8V2Vi
VGhlbWVFbmdpbmU6OlNjcm9sbGJhck9yaWVudGF0aW9uPihzY3JvbGxiYXJJbmZvLm9yaWVudGF0
aW9uKTsKLSAgICB3ZWJUaGVtZVNjcm9sbGJhckluZm8ucGFyZW50ID0gc3RhdGljX2Nhc3Q8V2Vi
VGhlbWVFbmdpbmU6OlNjcm9sbGJhclBhcmVudD4oc2Nyb2xsYmFySW5mby5wYXJlbnQpOwotICAg
IHdlYlRoZW1lU2Nyb2xsYmFySW5mby5tYXhWYWx1ZSA9IHNjcm9sbGJhckluZm8ubWF4VmFsdWU7
Ci0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLmN1cnJlbnRWYWx1ZSA9IHNjcm9sbGJhckluZm8u
Y3VycmVudFZhbHVlOwotICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby52aXNpYmxlU2l6ZSA9IHNj
cm9sbGJhckluZm8udmlzaWJsZVNpemU7Ci0gICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLnRvdGFs
U2l6ZSA9IHNjcm9sbGJhckluZm8udG90YWxTaXplOwotCi0gICAgd2ViS2l0Q2xpZW50KCktPnRo
ZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVGh1bWIoCi0gICAgICAgIGdjLT5wbGF0Zm9ybUNv
bnRleHQoKSwKLSAgICAgICAgc3RhdGljX2Nhc3Q8V2ViVGhlbWVFbmdpbmU6OlN0YXRlPihzdGF0
ZSksCi0gICAgICAgIHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTaXplPihzaXplKSwKLSAg
ICAgICAgcmVjdCwKLSAgICAgICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvKTsKLX0KLQotI2VuZGlm
Ci0KLS8vIFRyYWNlIEV2ZW50IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQotdm9pZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VF
dmVudEJlZ2luKGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkK
LXsKLSAgICB3ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEJlZ2luKG5hbWUsIGlkLCBleHRyYSk7
Ci19Ci0KLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRFbmQoY29uc3QgY2hhciogbmFt
ZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQotewotICAgIHdlYktpdENsaWVudCgpLT50
cmFjZUV2ZW50RW5kKG5hbWUsIGlkLCBleHRyYSk7Ci19Ci0KLS8vIFZpc2l0ZWQgTGlua3MgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KLQotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hh
ciogdXJsLCB1bnNpZ25lZCBsZW5ndGgpCi17Ci0gICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1
dDwyMDQ4PiBidWZmZXI7Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOwotICAgIGlmICgh
dXJsX3V0aWw6OkNhbm9uaWNhbGl6ZSh1cmwsIGxlbmd0aCwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkp
Ci0gICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCBVUkxzIGFyZSB1bnZpc2l0ZWQuCi0gICAg
cmV0dXJuIHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVm
ZmVyLmxlbmd0aCgpKTsKLX0KLQotTGlua0hhc2ggQ2hyb21pdW1CcmlkZ2U6OnZpc2l0ZWRMaW5r
SGFzaChjb25zdCBLVVJMJiBiYXNlLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBjb25zdCBBdG9taWNTdHJpbmcmIGF0dHJpYnV0ZVVSTCkKLXsKLSAgICAvLyBSZXNv
bHZlIHRoZSByZWxhdGl2ZSBVUkwgdXNpbmcgZ29vZ2xldXJsIGFuZCBwYXNzIHRoZSBhYnNvbHV0
ZSBVUkwgdXAgdG8KLSAgICAvLyB0aGUgZW1iZWRkZXIuIFdlIGNvdWxkIGNyZWF0ZSBhIEdVUkwg
b2JqZWN0IGZyb20gdGhlIGJhc2UgYW5kIHJlc29sdmUKLSAgICAvLyB0aGUgcmVsYXRpdmUgVVJM
IHRoYXQgd2F5LCBidXQgY2FsbGluZyB0aGUgbG93ZXItbGV2ZWwgZnVuY3Rpb25zCi0gICAgLy8g
ZGlyZWN0bHkgc2F2ZXMgdXMgdGhlIHN0cmluZyBhbGxvY2F0aW9uIGluIG1vc3QgY2FzZXMuCi0g
ICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4PiBidWZmZXI7Ci0gICAgdXJsX3BhcnNl
OjpQYXJzZWQgcGFyc2VkOwotCi0jaWYgVVNFKEdPT0dMRVVSTCkKLSAgICBjb25zdCBDU3RyaW5n
JiBjc3RyID0gYmFzZS51dGY4U3RyaW5nKCk7Ci0gICAgY29uc3QgY2hhciogZGF0YSA9IGNzdHIu
ZGF0YSgpOwotICAgIGludCBsZW5ndGggPSBjc3RyLmxlbmd0aCgpOwotICAgIGNvbnN0IHVybF9w
YXJzZTo6UGFyc2VkJiBzcmNQYXJzZWQgPSBiYXNlLnBhcnNlZCgpOwotI2Vsc2UKLSAgICAvLyBX
aGVuIHdlJ3JlIG5vdCB1c2luZyBHb29nbGVVUkwsIGZpcnN0IGNhbm9uaWNhbGl6ZSBpdCBzbyB3
ZSBjYW4gcmVzb2x2ZSBpdAotICAgIC8vIGJlbG93LgotICAgIHVybF9jYW5vbjo6UmF3Q2Fub25P
dXRwdXQ8MjA0OD4gc3JjQ2Fub247Ci0gICAgdXJsX3BhcnNlOjpQYXJzZWQgc3JjUGFyc2VkOwot
ICAgIFN0cmluZyBzdHIgPSBiYXNlLnN0cmluZygpOwotICAgIGlmICghdXJsX3V0aWw6OkNhbm9u
aWNhbGl6ZShzdHIuY2hhcmFjdGVycygpLCBzdHIubGVuZ3RoKCksIDAsICZzcmNDYW5vbiwgJnNy
Y1BhcnNlZCkpCi0gICAgICAgIHJldHVybiAwOwotICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBzcmND
YW5vbi5kYXRhKCk7Ci0gICAgaW50IGxlbmd0aCA9IHNyY0Nhbm9uLmxlbmd0aCgpOwotI2VuZGlm
Ci0KLSAgICBpZiAoIXVybF91dGlsOjpSZXNvbHZlUmVsYXRpdmUoZGF0YSwgbGVuZ3RoLCBzcmNQ
YXJzZWQsIGF0dHJpYnV0ZVVSTC5jaGFyYWN0ZXJzKCksCi0gICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGF0dHJpYnV0ZVVSTC5sZW5ndGgoKSwgMCwgJmJ1ZmZlciwgJnBhcnNlZCkp
Ci0gICAgICAgIHJldHVybiAwOyAgLy8gSW52YWxpZCByZXNvbHZlZCBVUkwuCi0KLSAgICByZXR1
cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIu
bGVuZ3RoKCkpOwotfQotCi1ib29sIENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVkKExpbmtI
YXNoIHZpc2l0ZWRMaW5rSGFzaCkKLXsKLSAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmlzTGlu
a1Zpc2l0ZWQodmlzaXRlZExpbmtIYXNoKTsKLX0KLQotLy8gVGhlc2UgYXJlIHRlbXBvcmFyeSBt
ZXRob2RzIHRoYXQgdGhlIFdlYktpdCBsYXllciBjYW4gdXNlIHRvIGNhbGwgdG8gdGhlCi0vLyBH
bHVlIGxheWVyLiBPbmNlIHRoZSBHbHVlIGxheWVyIG1vdmVzIGVudGlyZWx5IGludG8gdGhlIFdl
YktpdCBsYXllciwgdGhlc2UKLS8vIG1ldGhvZHMgd2lsbCBiZSBkZWxldGVkLgotCi12b2lkIENo
cm9taXVtQnJpZGdlOjpub3RpZnlKU091dE9mTWVtb3J5KEZyYW1lKiBmcmFtZSkKLXsKLSAgICBp
ZiAoIWZyYW1lKQotICAgICAgICByZXR1cm47Ci0KLSAgICBXZWJGcmFtZUltcGwqIHdlYkZyYW1l
ID0gV2ViRnJhbWVJbXBsOjpmcm9tRnJhbWUoZnJhbWUpOwotICAgIGlmICghd2ViRnJhbWUtPmNs
aWVudCgpKQotICAgICAgICByZXR1cm47Ci0gICAgd2ViRnJhbWUtPmNsaWVudCgpLT5kaWRFeGhh
dXN0TWVtb3J5QXZhaWxhYmxlRm9yU2NyaXB0KHdlYkZyYW1lKTsKLX0KLQotaW50IENocm9taXVt
QnJpZGdlOjptZW1vcnlVc2FnZU1CKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3
ZWJLaXRDbGllbnQoKS0+bWVtb3J5VXNhZ2VNQigpKTsKLX0KLQotaW50IENocm9taXVtQnJpZGdl
OjphY3R1YWxNZW1vcnlVc2FnZU1CKCkKLXsKLSAgICByZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3
ZWJLaXRDbGllbnQoKS0+YWN0dWFsTWVtb3J5VXNhZ2VNQigpKTsKLX0KLQotaW50IENocm9taXVt
QnJpZGdlOjpzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJXaWRnZXRDbGll
bnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7Ci0gICAgaWYgKCFjbGllbnQp
Ci0gICAgICAgIHJldHVybiAwOwotICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5kZXB0
aDsKLX0KLQotaW50IENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aFBlckNvbXBvbmVudChXaWRn
ZXQqIHdpZGdldCkKLXsKLSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0
Q2xpZW50KHdpZGdldCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAgIHJldHVybiAwOwotICAg
IHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5kZXB0aFBlckNvbXBvbmVudDsKLX0KLQotYm9v
bCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuSXNNb25vY2hyb21lKFdpZGdldCogd2lkZ2V0KQotewot
ICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGllbnQod2lkZ2V0KTsK
LSAgICBpZiAoIWNsaWVudCkKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgcmV0dXJuIGNsaWVudC0+
c2NyZWVuSW5mbygpLmlzTW9ub2Nocm9tZTsKLX0KLQotSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6
c2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKLXsKLSAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVu
dCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7Ci0gICAgaWYgKCFjbGllbnQpCi0gICAgICAg
IHJldHVybiBJbnRSZWN0KCk7Ci0gICAgcmV0dXJuIGNsaWVudC0+c2NyZWVuSW5mbygpLnJlY3Q7
Ci19Ci0KLUludFJlY3QgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkF2YWlsYWJsZVJlY3QoV2lkZ2V0
KiB3aWRnZXQpCi17Ci0gICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENs
aWVudCh3aWRnZXQpOwotICAgIGlmICghY2xpZW50KQotICAgICAgICByZXR1cm4gSW50UmVjdCgp
OwotICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5hdmFpbGFibGVSZWN0OwotfQotCi1i
b29sIENocm9taXVtQnJpZGdlOjpwb3B1cHNBbGxvd2VkKE5QUCBucHApCi17Ci0gICAgLy8gRklY
TUU6IEdpdmUgdGhlIGVtYmVkZGVyIGEgd2F5IHRvIGNvbnRyb2wgdGhpcy4KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLVdvcmtlckNvbnRleHRQcm94eSogV29ya2VyQ29udGV4dFByb3h5OjpjcmVh
dGUoV29ya2VyKiB3b3JrZXIpCi17Ci0gICAgcmV0dXJuIFdlYldvcmtlckNsaWVudEltcGw6OmNy
ZWF0ZVdvcmtlckNvbnRleHRQcm94eSh3b3JrZXIpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9ybUJyaWRnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2Uu
Y3BwCShyZXZpc2lvbiA3NjE3MykJKGZyb20gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvQ2hy
b21pdW1CcmlkZ2UuY3BwOjc2MTczKQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxh
dGZvcm1CcmlkZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTk3IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA5IEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3Ry
aWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRo
ZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9y
IHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAq
ICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVP
UlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkNocm9taXVtQnJpZGdlLmgiCisKKyNpbmNsdWRlIDxnb29n
bGV1cmwvc3JjL3VybF91dGlsLmg+CisKKyNpbmNsdWRlICJDaHJvbWUuaCIKKyNpbmNsdWRlICJD
aHJvbWVDbGllbnRJbXBsLmgiCisjaW5jbHVkZSAiV2ViQXVkaW9CdXMuaCIKKyNpbmNsdWRlICJX
ZWJDbGlwYm9hcmQuaCIKKyNpbmNsdWRlICJXZWJDb29raWUuaCIKKyNpbmNsdWRlICJXZWJDb29r
aWVKYXIuaCIKKyNpbmNsdWRlICJXZWJEYXRhLmgiCisjaW5jbHVkZSAiV2ViRHJhZ0RhdGEuaCIK
KyNpbmNsdWRlICJXZWJGaWxlVXRpbGl0aWVzLmgiCisjaW5jbHVkZSAiV2ViRnJhbWVDbGllbnQu
aCIKKyNpbmNsdWRlICJXZWJGcmFtZUltcGwuaCIKKyNpbmNsdWRlICJXZWJJREJLZXkuaCIKKyNp
bmNsdWRlICJXZWJJbWFnZS5oIgorI2luY2x1ZGUgIldlYktpdC5oIgorI2luY2x1ZGUgIldlYktp
dENsaWVudC5oIgorI2luY2x1ZGUgIldlYk1pbWVSZWdpc3RyeS5oIgorI2luY2x1ZGUgIldlYlBs
dWdpbkNvbnRhaW5lckltcGwuaCIKKyNpbmNsdWRlICJXZWJQbHVnaW5MaXN0QnVpbGRlckltcGwu
aCIKKyNpbmNsdWRlICJXZWJTYW5kYm94U3VwcG9ydC5oIgorI2luY2x1ZGUgIldlYlNlcmlhbGl6
ZWRTY3JpcHRWYWx1ZS5oIgorI2luY2x1ZGUgIldlYlNjcmVlbkluZm8uaCIKKyNpbmNsdWRlICJX
ZWJTdHJpbmcuaCIKKyNpbmNsdWRlICJXZWJVUkwuaCIKKyNpbmNsdWRlICJXZWJWZWN0b3IuaCIK
KyNpbmNsdWRlICJXZWJWaWV3Q2xpZW50LmgiCisjaW5jbHVkZSAiV2ViVmlld0ltcGwuaCIKKyNp
bmNsdWRlICJXZWJXb3JrZXJDbGllbnRJbXBsLmgiCisKKyNpZiBQTEFURk9STShDRykKKyNpbmNs
dWRlIDxDb3JlR3JhcGhpY3MvQ0dDb250ZXh0Lmg+CisjZW5kaWYKKworI2lmIE9TKFdJTkRPV1Mp
CisjaW5jbHVkZSAiV2ViUmVjdC5oIgorI2luY2x1ZGUgIndpbi9XZWJUaGVtZUVuZ2luZS5oIgor
I2VuZGlmCisKKyNpZiBPUyhMSU5VWCkgfHwgT1MoRlJFRUJTRCkKKyNpbmNsdWRlICJsaW51eC9X
ZWJUaGVtZUVuZ2luZS5oIgorI2luY2x1ZGUgIldlYkZvbnRJbmZvLmgiCisjaW5jbHVkZSAiV2Vi
Rm9udFJlbmRlclN0eWxlLmgiCisjZW5kaWYKKworI2lmIE9TKERBUldJTikKKyNpbmNsdWRlICJt
YWMvV2ViVGhlbWVFbmdpbmUuaCIKKyNlbmRpZgorCisjaWYgV0VCS0lUX1VTSU5HX1NLSUEKKyNp
bmNsdWRlICJOYXRpdmVJbWFnZVNraWEuaCIKKyNlbmRpZgorCisjaW5jbHVkZSAiQml0bWFwSW1h
Z2UuaCIKKyNpbmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJGcmFtZVZpZXcuaCIKKyNpbmNs
dWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJJREJGYWN0b3J5QmFja2VuZFByb3h5
LmgiCisjaW5jbHVkZSAiS1VSTC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5j
bHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgorI2luY2x1ZGUgIlBsdWdpbkRhdGEuaCIKKyNp
bmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgIldvcmtlci5oIgorI2luY2x1ZGUg
IldvcmtlckNvbnRleHRQcm94eS5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CisKKy8v
IFdlIGFyZSBwYXJ0IG9mIHRoZSBXZWJLaXQgaW1wbGVtZW50YXRpb24uCit1c2luZyBuYW1lc3Bh
Y2UgV2ViS2l0OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBDaHJvbWVDbGllbnRJ
bXBsKiB0b0Nocm9tZUNsaWVudEltcGwoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgaWYgKCF3aWRn
ZXQpCisgICAgICAgIHJldHVybiAwOworCisgICAgRnJhbWVWaWV3KiB2aWV3OworICAgIGlmICh3
aWRnZXQtPmlzRnJhbWVWaWV3KCkpCisgICAgICAgIHZpZXcgPSBzdGF0aWNfY2FzdDxGcmFtZVZp
ZXcqPih3aWRnZXQpOworICAgIGVsc2UgaWYgKHdpZGdldC0+cGFyZW50KCkgJiYgd2lkZ2V0LT5w
YXJlbnQoKS0+aXNGcmFtZVZpZXcoKSkKKyAgICAgICAgdmlldyA9IHN0YXRpY19jYXN0PEZyYW1l
Vmlldyo+KHdpZGdldC0+cGFyZW50KCkpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBQYWdlKiBwYWdlID0gdmlldy0+ZnJhbWUoKSA/IHZpZXctPmZyYW1lKCktPnBhZ2UoKSA6
IDA7CisgICAgaWYgKCFwYWdlKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0
aWNfY2FzdDxDaHJvbWVDbGllbnRJbXBsKj4ocGFnZS0+Y2hyb21lKCktPmNsaWVudCgpKTsKK30K
Kworc3RhdGljIFdlYldpZGdldENsaWVudCogdG9XZWJXaWRnZXRDbGllbnQoV2lkZ2V0KiB3aWRn
ZXQpCit7CisgICAgQ2hyb21lQ2xpZW50SW1wbCogY2hyb21lQ2xpZW50SW1wbCA9IHRvQ2hyb21l
Q2xpZW50SW1wbCh3aWRnZXQpOworICAgIGlmICghY2hyb21lQ2xpZW50SW1wbCB8fCAhY2hyb21l
Q2xpZW50SW1wbC0+d2ViVmlldygpKQorICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2hy
b21lQ2xpZW50SW1wbC0+d2ViVmlldygpLT5jbGllbnQoKTsKK30KKworc3RhdGljIFdlYkNvb2tp
ZUphciogZ2V0Q29va2llSmFyKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkKK3sKKyAgICBXZWJG
cmFtZUltcGwqIGZyYW1lSW1wbCA9IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGRvY3VtZW50LT5m
cmFtZSgpKTsKKyAgICBpZiAoIWZyYW1lSW1wbCB8fCAhZnJhbWVJbXBsLT5jbGllbnQoKSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgV2ViQ29va2llSmFyKiBjb29raWVKYXIgPSBmcmFtZUltcGwt
PmNsaWVudCgpLT5jb29raWVKYXIoZnJhbWVJbXBsKTsKKyAgICBpZiAoIWNvb2tpZUphcikKKyAg
ICAgICAgY29va2llSmFyID0gd2ViS2l0Q2xpZW50KCktPmNvb2tpZUphcigpOworICAgIHJldHVy
biBjb29raWVKYXI7Cit9CisKKy8vIENhY2hlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJvbWl1
bUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShjb25zdCBLVVJMJiB1cmwsIGRvdWJsZSByZXNwb25zZVRp
bWUsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+Y2Fj
aGVNZXRhZGF0YSh1cmwsIHJlc3BvbnNlVGltZSwgZGF0YS5kYXRhKCksIGRhdGEuc2l6ZSgpKTsK
K30KKworLy8gQ2xpcGJvYXJkIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitib29sIENocm9taXVtQnJpZGdlOjpjbGlw
Ym9hcmRJc0Zvcm1hdEF2YWlsYWJsZSgKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJk
Rm9ybWF0IGZvcm1hdCwKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1
ZmZlcikKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5pc0Zvcm1h
dEF2YWlsYWJsZSgKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpGb3JtYXQ+KGZv
cm1hdCksCisgICAgICAgIHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIp
KTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkUGxhaW5UZXh0KAor
ICAgIFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyKQoreworICAgIHJl
dHVybiB3ZWJLaXRDbGllbnQoKS0+Y2xpcGJvYXJkKCktPnJlYWRQbGFpblRleHQoCisgICAgICAg
IHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpKTsKK30KKwordm9pZCBD
aHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEhUTUwoCisgICAgUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCisgICAgU3RyaW5nKiBodG1sVGV4dCwgS1VSTCogc291
cmNlVVJMKQoreworICAgIFdlYlVSTCB1cmw7CisgICAgKmh0bWxUZXh0ID0gd2ViS2l0Q2xpZW50
KCktPmNsaXBib2FyZCgpLT5yZWFkSFRNTCgKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJv
YXJkOjpCdWZmZXI+KGJ1ZmZlciksICZ1cmwpOworICAgICpzb3VyY2VVUkwgPSB1cmw7Cit9CisK
K3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlU2VsZWN0aW9uKGNvbnN0IFN0cmlu
ZyYgaHRtbFRleHQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBjb25zdCBLVVJMJiBzb3VyY2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHBsYWluVGV4dCwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2wgd3JpdGVTbWFydFBhc3RlKQoreworICAg
IHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVIVE1MKAorICAgICAgICBodG1sVGV4
dCwgc291cmNlVVJMLCBwbGFpblRleHQsIHdyaXRlU21hcnRQYXN0ZSk7Cit9CisKK3ZvaWQgQ2hy
b21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgcGxhaW5U
ZXh0KQoreworICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVQbGFpblRleHQo
cGxhaW5UZXh0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVVUkwo
Y29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlKQoreworICAgIHdlYktpdENsaWVu
dCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVVUkwodXJsLCB0aXRsZSk7Cit9CisKK3ZvaWQgQ2hyb21p
dW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlSW1hZ2UoTmF0aXZlSW1hZ2VQdHIgaW1hZ2UsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVS
TCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5n
JiB0aXRsZSkKK3sKKyNpZiBXRUJLSVRfVVNJTkdfU0tJQQorICAgIFdlYkltYWdlIHdlYkltYWdl
KCppbWFnZSk7CisjZWxzZQorICAgIFdlYkltYWdlIHdlYkltYWdlKGltYWdlKTsKKyNlbmRpZgor
ICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVJbWFnZSh3ZWJJbWFnZSwgc291
cmNlVVJMLCB0aXRsZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRl
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY29uc3QgU3RyaW5nJiBkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgbWV0YWRhdGEpCit7CisgICAgd2ViS2l0Q2xpZW50
KCktPmNsaXBib2FyZCgpLT53cml0ZURhdGEodHlwZSwgZGF0YSwgbWV0YWRhdGEpOworfQorCitI
YXNoU2V0PFN0cmluZz4gQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBl
cygKKyAgICBQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwgYm9vbCog
Y29udGFpbnNGaWxlbmFtZXMpCit7CisgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0g
d2ViS2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkQXZhaWxhYmxlVHlwZXMoCisgICAgICAg
IHN0YXRpY19jYXN0PFdlYkNsaXBib2FyZDo6QnVmZmVyPihidWZmZXIpLCBjb250YWluc0ZpbGVu
YW1lcyk7CisgICAgSGFzaFNldDxTdHJpbmc+IHR5cGVzOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgcmVzdWx0LnNpemUoKTsgKytpKQorICAgICAgICB0eXBlcy5hZGQocmVzdWx0W2ldKTsK
KyAgICByZXR1cm4gdHlwZXM7Cit9CisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJl
YWREYXRhKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB0eXBlLCBTdHJp
bmcmIGRhdGEsIFN0cmluZyYgbWV0YWRhdGEpCit7CisgICAgV2ViU3RyaW5nIHJlc3VsdERhdGE7
CisgICAgV2ViU3RyaW5nIHJlc3VsdE1ldGFkYXRhOworICAgIGJvb2wgc3VjY2VlZGVkID0gd2Vi
S2l0Q2xpZW50KCktPmNsaXBib2FyZCgpLT5yZWFkRGF0YSgKKyAgICAgICAgc3RhdGljX2Nhc3Q8
V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlciksIHR5cGUsICZyZXN1bHREYXRhLCAmcmVzdWx0
TWV0YWRhdGEpOworICAgIGlmIChzdWNjZWVkZWQpIHsKKyAgICAgICAgZGF0YSA9IHJlc3VsdERh
dGE7CisgICAgICAgIG1ldGFkYXRhID0gcmVzdWx0TWV0YWRhdGE7CisgICAgfQorICAgIHJldHVy
biBzdWNjZWVkZWQ7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IENocm9taXVtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVy
KQoreworICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktpdENsaWVudCgpLT5j
bGlwYm9hcmQoKS0+cmVhZEZpbGVuYW1lcygKKyAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJv
YXJkOjpCdWZmZXI+KGJ1ZmZlcikpOworICAgIFZlY3RvcjxTdHJpbmc+IGNvbnZlcnRlZFJlc3Vs
dDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdC5zaXplKCk7ICsraSkKKyAgICAg
ICAgY29udmVydGVkUmVzdWx0LmFwcGVuZChyZXN1bHRbaV0pOworICAgIHJldHVybiBjb252ZXJ0
ZWRSZXN1bHQ7Cit9CisKKy8vIENvb2tpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJvbWl1bUJy
aWRnZTo6c2V0Q29va2llcyhjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVy
bCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkK
K3sKKyAgICBXZWJDb29raWVKYXIqIGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7
CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAgY29va2llSmFyLT5zZXRDb29raWUodXJsLCBk
b2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgdmFsdWUpOworfQorCitTdHJpbmcgQ2hy
b21pdW1CcmlkZ2U6OmNvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJM
JiB1cmwpCit7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBXZWJDb29raWVKYXIqIGNvb2tpZUph
ciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CisgICAgaWYgKGNvb2tpZUphcikKKyAgICAgICAg
cmVzdWx0ID0gY29va2llSmFyLT5jb29raWVzKHVybCwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JD
b29raWVzKCkpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK1N0cmluZyBDaHJvbWl1bUJyaWRn
ZTo6Y29va2llUmVxdWVzdEhlYWRlckZpZWxkVmFsdWUoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b25zdCBLVVJMJiB1cmwpCit7CisgICAgU3RyaW5nIHJlc3VsdDsKKyAgICBXZWJDb29raWVKYXIq
IGNvb2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CisgICAgaWYgKGNvb2tpZUphcikK
KyAgICAgICAgcmVzdWx0ID0gY29va2llSmFyLT5jb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1
ZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitib29sIENocm9taXVtQnJpZGdlOjpyYXdDb29raWVzKGNvbnN0IERvY3VtZW50
KiBkb2N1bWVudCwgY29uc3QgS1VSTCYgdXJsLCBWZWN0b3I8Q29va2llPiYgcmF3Q29va2llcykK
K3sKKyAgICByYXdDb29raWVzLmNsZWFyKCk7CisgICAgV2ViVmVjdG9yPFdlYkNvb2tpZT4gd2Vi
Q29va2llczsKKworICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRv
Y3VtZW50KTsKKyAgICBpZiAoY29va2llSmFyKQorICAgICAgICBjb29raWVKYXItPnJhd0Nvb2tp
ZXModXJsLCBkb2N1bWVudC0+Zmlyc3RQYXJ0eUZvckNvb2tpZXMoKSwgd2ViQ29va2llcyk7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgd2ViQ29va2llcy5zaXplKCk7ICsraSkgewor
ICAgICAgICBjb25zdCBXZWJDb29raWUmIHdlYkNvb2tpZSA9IHdlYkNvb2tpZXNbaV07CisgICAg
ICAgIENvb2tpZSBjb29raWUod2ViQ29va2llLm5hbWUsCisgICAgICAgICAgICAgICAgICAgICAg
d2ViQ29va2llLnZhbHVlLAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5kb21haW4s
CisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnBhdGgsCisgICAgICAgICAgICAgICAg
ICAgICAgd2ViQ29va2llLmV4cGlyZXMsCisgICAgICAgICAgICAgICAgICAgICAgd2ViQ29va2ll
Lmh0dHBPbmx5LAorICAgICAgICAgICAgICAgICAgICAgIHdlYkNvb2tpZS5zZWN1cmUsCisgICAg
ICAgICAgICAgICAgICAgICAgd2ViQ29va2llLnNlc3Npb24pOworICAgICAgICByYXdDb29raWVz
LmFwcGVuZChjb29raWUpOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBDaHJv
bWl1bUJyaWRnZTo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCit7CisgICAgV2ViQ29va2llSmFy
KiBjb29raWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOworICAgIGlmIChjb29raWVKYXIp
CisgICAgICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7Cit9CisK
K2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCkKK3sKKyAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgIFdlYkNvb2tpZUphciogY29v
a2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKKyAgICBpZiAoY29va2llSmFyKQorICAg
ICAgICByZXN1bHQgPSBjb29raWVKYXItPmNvb2tpZXNFbmFibGVkKGRvY3VtZW50LT5jb29raWVV
UkwoKSwgZG9jdW1lbnQtPmZpcnN0UGFydHlGb3JDb29raWVzKCkpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKKy8vIEROUyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6
cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5nJiBob3N0bmFtZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQo
KS0+cHJlZmV0Y2hIb3N0TmFtZShob3N0bmFtZSk7Cit9CisKKy8vIEZpbGUgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRo
KQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5maWxlRXhp
c3RzKHBhdGgpOworfQorCitib29sIENocm9taXVtQnJpZGdlOjpkZWxldGVGaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMo
KS0+ZGVsZXRlRmlsZShwYXRoKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6ZGVsZXRlRW1w
dHlEaXJlY3RvcnkoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGll
bnQoKS0+ZmlsZVV0aWxpdGllcygpLT5kZWxldGVFbXB0eURpcmVjdG9yeShwYXRoKTsKK30KKwor
Ym9vbCBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiBwYXRoLCBsb25n
IGxvbmcmIHJlc3VsdCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRp
ZXMoKS0+Z2V0RmlsZVNpemUocGF0aCwgcmVzdWx0KTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRn
ZTo6cmV2ZWFsRm9sZGVySW5PUyhjb25zdCBTdHJpbmcmIHBhdGgpCit7CisgICAgd2ViS2l0Q2xp
ZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cmV2ZWFsRm9sZGVySW5PUyhwYXRoKTsKK30KKworYm9v
bCBDaHJvbWl1bUJyaWRnZTo6Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUoY29uc3QgU3RyaW5nJiBw
YXRoLCB0aW1lX3QmIHJlc3VsdCkKK3sKKyAgICBkb3VibGUgbW9kaWZpY2F0aW9uVGltZTsKKyAg
ICBpZiAoIXdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmdldEZpbGVNb2RpZmljYXRp
b25UaW1lKHBhdGgsIG1vZGlmaWNhdGlvblRpbWUpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgcmVzdWx0ID0gc3RhdGljX2Nhc3Q8dGltZV90Pihtb2RpZmljYXRpb25UaW1lKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpkaXJlY3RvcnlOYW1lKGNv
bnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+ZGlyZWN0b3J5TmFtZShwYXRoKTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdl
OjpwYXRoQnlBcHBlbmRpbmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJp
bmcmIGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRp
ZXMoKS0+cGF0aEJ5QXBwZW5kaW5nQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCk7Cit9CisKK2Jv
b2wgQ2hyb21pdW1CcmlkZ2U6Om1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgp
Cit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPm1ha2VBbGxE
aXJlY3RvcmllcyhwYXRoKTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjpnZXRBYnNvbHV0
ZVBhdGgoY29uc3QgU3RyaW5nJiBwYXRoKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
ZmlsZVV0aWxpdGllcygpLT5nZXRBYnNvbHV0ZVBhdGgocGF0aCk7Cit9CisKK2Jvb2wgQ2hyb21p
dW1CcmlkZ2U6OmlzRGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4g
d2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+aXNEaXJlY3RvcnkocGF0aCk7Cit9CisK
K0tVUkwgQ2hyb21pdW1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoY29uc3QgU3RyaW5nJiBwYXRoKQor
eworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5maWxlUGF0aFRv
VVJMKHBhdGgpOworfQorCitQbGF0Zm9ybUZpbGVIYW5kbGUgQ2hyb21pdW1CcmlkZ2U6Om9wZW5G
aWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCit7CisgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPm9wZW5GaWxlKHBhdGgsIG1vZGUpOwor
fQorCit2b2lkIENocm9taXVtQnJpZGdlOjpjbG9zZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlJiBo
YW5kbGUpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+Y2xvc2VGaWxl
KGhhbmRsZSk7Cit9CisKK2xvbmcgbG9uZyBDaHJvbWl1bUJyaWRnZTo6c2Vla0ZpbGUoUGxhdGZv
cm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwgRmlsZVNlZWtPcmlnaW4gb3Jp
Z2luKQoreworICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5zZWVr
RmlsZShoYW5kbGUsIG9mZnNldCwgb3JpZ2luKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6
dHJ1bmNhdGVGaWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGxvbmcgbG9uZyBvZmZzZXQp
Cit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnRydW5jYXRl
RmlsZShoYW5kbGUsIG9mZnNldCk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6cmVhZEZyb21G
aWxlKFBsYXRmb3JtRmlsZUhhbmRsZSBoYW5kbGUsIGNoYXIqIGRhdGEsIGludCBsZW5ndGgpCit7
CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPnJlYWRGcm9tRmls
ZShoYW5kbGUsIGRhdGEsIGxlbmd0aCk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6d3JpdGVU
b0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY29uc3QgY2hhciogZGF0YSwgaW50IGxl
bmd0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+d3Jp
dGVUb0ZpbGUoaGFuZGxlLCBkYXRhLCBsZW5ndGgpOworfQorCisvLyBGb250IC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tCisKKyNpZiBPUyhXSU5ET1dTKQorYm9vbCBDaHJvbWl1bUJyaWRnZTo6ZW5zdXJlRm9udExv
YWRlZChIRk9OVCBmb250KQoreworICAgIFdlYlNhbmRib3hTdXBwb3J0KiBzcyA9IHdlYktpdENs
aWVudCgpLT5zYW5kYm94U3VwcG9ydCgpOworCisgICAgLy8gaWYgdGhlcmUgaXMgbm8gc2FuZGJv
eCwgdGhlbiB3ZSBjYW4gYXNzdW1lIHRoZSBmb250CisgICAgLy8gd2FzIGFibGUgdG8gYmUgbG9h
ZGVkIHN1Y2Nlc3NmdWxseSBhbHJlYWR5CisgICAgcmV0dXJuIHNzID8gc3MtPmVuc3VyZUZvbnRM
b2FkZWQoZm9udCkgOiB0cnVlOworfQorI2VuZGlmCisKKyNpZiBPUyhMSU5VWCkgfHwgT1MoRlJF
RUJTRCkKK1N0cmluZyBDaHJvbWl1bUJyaWRnZTo6Z2V0Rm9udEZhbWlseUZvckNoYXJhY3RlcnMo
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBudW1DaGFyYWN0ZXJzKQoreworICAgIGlm
ICh3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKSkKKyAgICAgICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRGb250RmFtaWx5Rm9yQ2hhcmFjdGVycyhj
aGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzKTsKKworICAgIFdlYkNTdHJpbmcgZmFtaWx5ID0gV2Vi
Rm9udEluZm86OmZhbWlseUZvckNoYXJzKGNoYXJhY3RlcnMsIG51bUNoYXJhY3RlcnMpOworICAg
IGlmIChmYW1pbHkuZGF0YSgpKQorICAgICAgICByZXR1cm4gV2ViU3RyaW5nOjpmcm9tVVRGOChm
YW1pbHkuZGF0YSgpKTsKKworICAgIHJldHVybiBXZWJTdHJpbmcoKTsKK30KKwordm9pZCBDaHJv
bWl1bUJyaWRnZTo6Z2V0UmVuZGVyU3R5bGVGb3JTdHJpa2UoY29uc3QgY2hhciogZm9udCwgaW50
IHNpemVBbmRTdHlsZSwgRm9udFJlbmRlclN0eWxlKiByZXN1bHQpCit7CisgICAgV2ViRm9udFJl
bmRlclN0eWxlIHN0eWxlOworCisgICAgaWYgKHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9y
dCgpKQorICAgICAgICB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKS0+Z2V0UmVuZGVy
U3R5bGVGb3JTdHJpa2UoZm9udCwgc2l6ZUFuZFN0eWxlLCAmc3R5bGUpOworICAgIGVsc2UKKyAg
ICAgICAgV2ViRm9udEluZm86OnJlbmRlclN0eWxlRm9yU3RyaWtlKGZvbnQsIHNpemVBbmRTdHls
ZSwgJnN0eWxlKTsKKworICAgIHN0eWxlLnRvRm9udFJlbmRlclN0eWxlKHJlc3VsdCk7Cit9Cisj
ZW5kaWYKKworI2lmIE9TKERBUldJTikKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OmxvYWRGb250KE5T
Rm9udCogc3JjRm9udCwgQVRTRm9udENvbnRhaW5lclJlZiogb3V0KQoreworICAgIFdlYlNhbmRi
b3hTdXBwb3J0KiBzcyA9IHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpOworICAgIGlm
IChzcykKKyAgICAgICAgcmV0dXJuIHNzLT5sb2FkRm9udChzcmNGb250LCBvdXQpOworCisgICAg
Ly8gVGhpcyBmdW5jdGlvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgaW4gcmVzcG9uc2UgdG8gYW4g
ZXJyb3IgbG9hZGluZyBhCisgICAgLy8gZm9udCBkdWUgdG8gYmVpbmcgYmxvY2tlZCBieSB0aGUg
c2FuZGJveC4KKyAgICAvLyBUaGlzIGJ5IGRlZmluaXRpb24gc2hvdWxkbid0IGhhcHBlbiBpZiB0
aGVyZSBpcyBubyBzYW5kYm94IHN1cHBvcnQuCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgKm91dCA9IDA7CisgICAgcmV0dXJuIGZhbHNlOworfQorI2VuZGlmCisKKy8vIERhdGFiYXNl
cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworUGxhdGZvcm1GaWxlSGFuZGxlIENocm9taXVtQnJpZGdlOjpkYXRhYmFz
ZU9wZW5GaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpCit7
CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZU9wZW5GaWxlKFdlYlN0cmluZyh2
ZnNGaWxlTmFtZSksIGRlc2lyZWRGbGFncyk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6ZGF0
YWJhc2VEZWxldGVGaWxlKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUsIGJvb2wgc3luY0RpcikK
K3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRhdGFiYXNlRGVsZXRlRmlsZShXZWJTdHJp
bmcodmZzRmlsZU5hbWUpLCBzeW5jRGlyKTsKK30KKworbG9uZyBDaHJvbWl1bUJyaWRnZTo6ZGF0
YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIHZmc0ZpbGVOYW1lKQoreworICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VHZXRGaWxlQXR0cmlidXRlcyhXZWJTdHJp
bmcodmZzRmlsZU5hbWUpKTsKK30KKworbG9uZyBsb25nIENocm9taXVtQnJpZGdlOjpkYXRhYmFz
ZUdldEZpbGVTaXplKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCit7CisgICAgcmV0dXJuIHdl
YktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVTaXplKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSkp
OworfQorCisvLyBJbmRleGVkIERhdGFiYXNlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8SURCRmFjdG9yeUJh
Y2tlbmRJbnRlcmZhY2U+IENocm9taXVtQnJpZGdlOjppZGJGYWN0b3J5KCkKK3sKKyAgICAvLyBU
aGVyZSdzIG5vIHJlYXNvbiB3aHkgd2UgbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBwcm94eSBlYWNo
IHRpbWUsIGJ1dAorICAgIC8vIHRoZXJlJ3MgYWxzbyBubyBzdHJvbmcgcmVhc29uIG5vdCB0by4K
KyAgICByZXR1cm4gSURCRmFjdG9yeUJhY2tlbmRQcm94eTo6Y3JlYXRlKCk7Cit9CisKK3ZvaWQg
Q2hyb21pdW1CcmlkZ2U6OmlkYlNodXRkb3duKCkKK3sKKyAgICAvLyBJbiB0aGUgYnJvd3NlciBw
cm9jZXNzLCB0aGlzIHNodXRzIGRvd24gdGhlIHV0aWxpdHkgcHJvY2Vzcy4gSW4gdGhlIHJlbmRl
cmVyIHByb2Nlc3MsIGl0IGRvZXMgbm90aGluZy4KKyAgICB3ZWJLaXRDbGllbnQoKS0+aWRiU2h1
dGRvd24oKTsKK30KKwordm9pZCBDaHJvbWl1bUJyaWRnZTo6Y3JlYXRlSURCS2V5c0Zyb21TZXJp
YWxpemVkVmFsdWVzQW5kS2V5UGF0aChjb25zdCBWZWN0b3I8UmVmUHRyPFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZT4gPiYgdmFsdWVzLCBjb25zdCBTdHJpbmcmIGtleVBhdGgsIFZlY3RvcjxSZWZQdHI8
SURCS2V5PiA+JiBrZXlzKQoreworICAgIFdlYlZlY3RvcjxXZWJTZXJpYWxpemVkU2NyaXB0VmFs
dWU+IHdlYlZhbHVlcyA9IHZhbHVlczsKKyAgICBXZWJWZWN0b3I8V2ViSURCS2V5PiB3ZWJLZXlz
OworICAgIHdlYktpdENsaWVudCgpLT5jcmVhdGVJREJLZXlzRnJvbVNlcmlhbGl6ZWRWYWx1ZXNB
bmRLZXlQYXRoKHdlYlZhbHVlcywgV2ViU3RyaW5nKGtleVBhdGgpLCB3ZWJLZXlzKTsKKworICAg
IHNpemVfdCB3ZWJLZXlzU2l6ZSA9IHdlYktleXMuc2l6ZSgpOworICAgIGtleXMucmVzZXJ2ZUNh
cGFjaXR5KHdlYktleXNTaXplKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHdlYktleXNT
aXplOyArK2kpCisgICAgICAgIGtleXMuYXBwZW5kKFBhc3NSZWZQdHI8SURCS2V5Pih3ZWJLZXlz
W2ldKSk7Cit9CisKKy8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5nIENocm9taXVtQnJp
ZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoCisgICAgdW5zaWduZWQga2V5
U2l6ZUluZGV4LCBjb25zdCBTdHJpbmcmIGNoYWxsZW5nZSwgY29uc3QgS1VSTCYgdXJsKQorewor
ICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+c2lnbmVkUHVibGljS2V5QW5kQ2hhbGxlbmdlU3Ry
aW5nKGtleVNpemVJbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBXZWJTdHJpbmcoY2hhbGxlbmdlKSwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXZWJVUkwo
dXJsKSk7Cit9CisKKy8vIExhbmd1YWdlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworU3RyaW5nIENocm9taXVtQnJp
ZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5kZWZhdWx0TG9jYWxlKCk7Cit9CisKKy8vIExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9v
bCBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKQoreworICAgIHJldHVybiBXZWJLaXQ6
OmxheW91dFRlc3RNb2RlKCk7Cit9CisKKy8vIE1pbWVUeXBlIC0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworYm9vbCBD
aHJvbWl1bUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+c3Vw
cG9ydHNJbWFnZU1JTUVUeXBlKG1pbWVUeXBlKQorICAgICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6
OklzTm90U3VwcG9ydGVkOworfQorCitib29sIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZEph
dmFTY3JpcHRNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQoreworICAgIHJldHVybiB3
ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSmF2YVNjcmlwdE1JTUVUeXBl
KG1pbWVUeXBlKQorICAgICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOwor
fQorCitib29sIENocm9taXVtQnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29u
c3QgU3RyaW5nJiBtaW1lVHlwZSkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPm1pbWVS
ZWdpc3RyeSgpLT5zdXBwb3J0c05vbkltYWdlTUlNRVR5cGUobWltZVR5cGUpCisgICAgICAgICE9
IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7Cit9CisKK1N0cmluZyBDaHJvbWl1bUJy
aWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBleHRlbnNpb24pCit7Cisg
ICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+bWltZVR5cGVGb3JFeHRl
bnNpb24oZXh0ZW5zaW9uKTsKK30KKworU3RyaW5nIENocm9taXVtQnJpZGdlOjptaW1lVHlwZUZy
b21GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK3sKKyAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
Pm1pbWVSZWdpc3RyeSgpLT5taW1lVHlwZUZyb21GaWxlKHBhdGgpOworfQorCitTdHJpbmcgQ2hy
b21pdW1CcmlkZ2U6OnByZWZlcnJlZEV4dGVuc2lvbkZvck1JTUVUeXBlKGNvbnN0IFN0cmluZyYg
bWltZVR5cGUpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+
cHJlZmVycmVkRXh0ZW5zaW9uRm9yTUlNRVR5cGUobWltZVR5cGUpOworfQorCisvLyBQbHVnaW4g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK2Jvb2wgQ2hyb21pdW1CcmlkZ2U6OnBsdWdpbnMoYm9vbCByZWZyZXNo
LCBWZWN0b3I8UGx1Z2luSW5mbz4qIHJlc3VsdHMpCit7CisgICAgV2ViUGx1Z2luTGlzdEJ1aWxk
ZXJJbXBsIGJ1aWxkZXIocmVzdWx0cyk7CisgICAgd2ViS2l0Q2xpZW50KCktPmdldFBsdWdpbkxp
c3QocmVmcmVzaCwgJmJ1aWxkZXIpOworICAgIHJldHVybiB0cnVlOyAgLy8gRklYTUU6IFRoZXJl
IGlzIG5vIG5lZWQgZm9yIHRoaXMgZnVuY3Rpb24gdG8gcmV0dXJuIGEgdmFsdWUuCit9CisKK05Q
T2JqZWN0KiBDaHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWJsZU9iamVjdChXaWRnZXQqIHdp
ZGdldCkKK3sKKyAgICBpZiAoIXdpZGdldCB8fCAhd2lkZ2V0LT5pc1BsdWdpbkNvbnRhaW5lcigp
KQorICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBzdGF0aWNfY2FzdDxXZWJQbHVnaW5D
b250YWluZXJJbXBsKj4od2lkZ2V0KS0+c2NyaXB0YWJsZU9iamVjdCgpOworfQorCisvLyBSZXNv
dXJjZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCisKK1Bhc3NSZWZQdHI8SW1hZ2U+IENocm9taXVtQnJpZGdlOjpsb2Fk
UGxhdGZvcm1JbWFnZVJlc291cmNlKGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgY29uc3QgV2Vi
RGF0YSYgcmVzb3VyY2UgPSB3ZWJLaXRDbGllbnQoKS0+bG9hZFJlc291cmNlKG5hbWUpOworICAg
IGlmIChyZXNvdXJjZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiBJbWFnZTo6bnVsbEltYWdl
KCk7CisKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gQml0bWFwSW1hZ2U6OmNyZWF0ZSgpOwor
ICAgIGltYWdlLT5zZXREYXRhKHJlc291cmNlLCB0cnVlKTsKKyAgICByZXR1cm4gaW1hZ2U7Cit9
CisKKyNpZiBFTkFCTEUoV0VCX0FVRElPKQorCitQYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1
bUJyaWRnZTo6bG9hZFBsYXRmb3JtQXVkaW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3Vi
bGUgc2FtcGxlUmF0ZSkKK3sKKyAgICBjb25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENs
aWVudCgpLT5sb2FkUmVzb3VyY2UobmFtZSk7CisgICAgaWYgKHJlc291cmNlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIDA7CisgICAgCisgICAgcmV0dXJuIGRlY29kZUF1ZGlvRmlsZURhdGEo
cmVzb3VyY2UuZGF0YSgpLCByZXNvdXJjZS5zaXplKCksIHNhbXBsZVJhdGUpOworfQorCitQYXNz
T3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6ZGVjb2RlQXVkaW9GaWxlRGF0YShjb25z
dCBjaGFyKiBkYXRhLCBzaXplX3Qgc2l6ZSwgZG91YmxlIHNhbXBsZVJhdGUpCit7CisgICAgV2Vi
QXVkaW9CdXMgd2ViQXVkaW9CdXM7CisgICAgaWYgKHdlYktpdENsaWVudCgpLT5sb2FkQXVkaW9S
ZXNvdXJjZSgmd2ViQXVkaW9CdXMsIGRhdGEsIHNpemUsIHNhbXBsZVJhdGUpKQorICAgICAgICBy
ZXR1cm4gd2ViQXVkaW9CdXMucmVsZWFzZSgpOworICAgIHJldHVybiAwOworfQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9BVURJTykKKworLy8gU2FuZGJveCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitib29sIENo
cm9taXVtQnJpZGdlOjpzYW5kYm94RW5hYmxlZCgpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5zYW5kYm94RW5hYmxlZCgpOworfQorCisvLyBTaGFyZWRUaW1lcnMgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3Zv
aWQgQ2hyb21pdW1CcmlkZ2U6OnNldFNoYXJlZFRpbWVyRmlyZWRGdW5jdGlvbih2b2lkICgqZnVu
YykoKSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlZEZ1bmN0aW9u
KGZ1bmMpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVUaW1l
KGRvdWJsZSBmaXJlVGltZSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+c2V0U2hhcmVkVGltZXJG
aXJlVGltZShmaXJlVGltZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnN0b3BTaGFyZWRU
aW1lcigpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPnN0b3BTaGFyZWRUaW1lcigpOworfQorCisv
LyBTdGF0c0NvdW50ZXJzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmRlY3JlbWVudFN0
YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHdlYktpdENsaWVudCgpLT5kZWNy
ZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OmluY3Jl
bWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQoreworICAgIHdlYktpdENsaWVudCgp
LT5pbmNyZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6
Omhpc3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQgc2FtcGxlLCBpbnQg
bWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpCit7CisgICAgd2ViS2l0Q2xpZW50KCktPmhp
c3RvZ3JhbUN1c3RvbUNvdW50cyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBidWNrZXRDb3VudCk7
Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUVudW1lcmF0aW9uKGNvbnN0IGNo
YXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKQoreworICAgIHdlYktpdENs
aWVudCgpLT5oaXN0b2dyYW1FbnVtZXJhdGlvbihuYW1lLCBzYW1wbGUsIGJvdW5kYXJ5VmFsdWUp
OworfQorCisvLyBTdWRkZW4gVGVybWluYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnN1
ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChib29sIGVuYWJsZWQpCit7CisgICAgd2ViS2l0Q2xpZW50
KCktPnN1ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChlbmFibGVkKTsKK30KKworLy8gU3lzdGVtVGlt
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCitkb3VibGUgQ2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1lKCkKK3sKKyAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmN1cnJlbnRUaW1lKCk7Cit9CisKKy8vIFRoZW1pbmcg
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworI2lmIE9TKFdJTkRPV1MpCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBh
aW50QnV0dG9uKAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUs
IGludCBjbGFzc2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJL
aXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRCdXR0b24oCisgICAgICAgIGdjLT5wbGF0
Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3Qp
OworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludE1lbnVMaXN0KAorICAgIEdyYXBoaWNz
Q29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCisgICAg
Y29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUo
KS0+cGFpbnRNZW51TGlzdCgKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMo
KSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1C
cmlkZ2U6OnBhaW50U2Nyb2xsYmFyQXJyb3coCisgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50
IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCit7Cisg
ICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyQXJyb3coCisg
ICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHN0YXRlLCBjbGFzc2ljU3Rh
dGUsIHJlY3QpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1i
KAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFz
c2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQo
KS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICAgICAgZ2MtPnBsYXRm
b3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7
Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2soCisgICAgR3Jh
cGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwK
KyAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBhbGlnblJlY3QpCit7Cisg
ICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U2Nyb2xsYmFyVHJhY2soCisg
ICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFz
c2ljU3RhdGUsIHJlY3QsCisgICAgICAgIGFsaWduUmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1C
cmlkZ2U6OnBhaW50U3BpbkJ1dHRvbigKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFy
dCwgaW50IHN0YXRlLCBpbnQgY2xhc3NpY1N0YXRlLAorICAgIGNvbnN0IEludFJlY3QmIHJlY3Qp
Cit7CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50U3BpbkJ1dHRvbigK
KyAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNs
YXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGV4dEZp
ZWxkKAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBj
bGFzc2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgQ29sb3ImIGNvbG9y
LCBib29sIGZpbGxDb250ZW50QXJlYSwKKyAgICBib29sIGRyYXdFZGdlcykKK3sKKyAgICAvLyBG
YWxsYmFjayB0byB3aGl0ZSB3aGVuIHxjb2xvcnwgaXMgaW52YWxpZC4KKyAgICBSR0JBMzIgYmFj
a2dyb3VuZENvbG9yID0gY29sb3IuaXNWYWxpZCgpID8gY29sb3IucmdiKCkgOiBDb2xvcjo6d2hp
dGU7CisKKyAgICB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUZXh0RmllbGQo
CisgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBj
bGFzc2ljU3RhdGUsIHJlY3QsCisgICAgICAgIGJhY2tncm91bmRDb2xvciwgZmlsbENvbnRlbnRB
cmVhLCBkcmF3RWRnZXMpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFRyYWNrYmFy
KAorICAgIEdyYXBoaWNzQ29udGV4dCogZ2MsIGludCBwYXJ0LCBpbnQgc3RhdGUsIGludCBjbGFz
c2ljU3RhdGUsCisgICAgY29uc3QgSW50UmVjdCYgcmVjdCkKK3sKKyAgICB3ZWJLaXRDbGllbnQo
KS0+dGhlbWVFbmdpbmUoKS0+cGFpbnRUcmFja2JhcigKKyAgICAgICAgZ2MtPnBsYXRmb3JtQ29u
dGV4dCgpLT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7Cit9CisK
K3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50UHJvZ3Jlc3NCYXIoCisgICAgR3JhcGhpY3NDb250
ZXh0KiBnYywgY29uc3QgSW50UmVjdCYgYmFyUmVjdCwgY29uc3QgSW50UmVjdCYgdmFsdWVSZWN0
LCBib29sIGRldGVybWluYXRlLCBkb3VibGUgYW5pbWF0ZWRTZWNvbmRzKQoreworICAgIHdlYktp
dENsaWVudCgpLT50aGVtZUVuZ2luZSgpLT5wYWludFByb2dyZXNzQmFyKAorICAgICAgICBnYy0+
cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBiYXJSZWN0LCB2YWx1ZVJlY3QsIGRldGVybWlu
YXRlLCBhbmltYXRlZFNlY29uZHMpOworfQorCisjZWxpZiBPUyhMSU5VWCkKKworc3RhdGljIFdl
YlRoZW1lRW5naW5lOjpQYXJ0IFdlYlRoZW1lUGFydChDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYXJ0
IHBhcnQpCit7CisgICAgc3dpdGNoIChwYXJ0KSB7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6
UGFydFNjcm9sbGJhckRvd25BcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xs
YmFyRG93bkFycm93OworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJMZWZ0
QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAg
ICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzogcmV0dXJuIFdl
YlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAgICBjYXNlIENocm9taXVt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0
U2Nyb2xsYmFyVXBBcnJvdzsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
SG9yaXpvbnRhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jp
em9udGFsVGh1bWI7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRp
Y2FsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1
bWI7CisgICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFj
azogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrOwor
ICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOiByZXR1
cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOworICAgIH0KKyAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRT
Y3JvbGxiYXJEb3duQXJyb3c7Cit9CisKK3N0YXRpYyBXZWJUaGVtZUVuZ2luZTo6U3RhdGUgV2Vi
VGhlbWVTdGF0ZShDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlKQoreworICAg
IHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZURpc2FibGVk
OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7CisgICAgY2FzZSBDaHJvbWl1
bUJyaWRnZTo6U3RhdGVIb3ZlcjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZUhvdmVyOwor
ICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlTm9ybWFsOiByZXR1cm4gV2ViVGhlbWVFbmdp
bmU6OlN0YXRlTm9ybWFsOworICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlN0YXRlUHJlc3NlZDog
cmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZVByZXNzZWQ7CisgICAgfQorICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsK
K30KKworc3RhdGljIHZvaWQgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhDaHJvbWl1bUJyaWRnZTo6
VGhlbWVQYXJ0IHBhcnQsIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUsIGNv
bnN0IENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zLCBX
ZWJUaGVtZUVuZ2luZTo6RXh0cmFQYXJhbXMqIHdlYlRoZW1lRXh0cmFQYXJhbXMpCit7CisgICAg
aWYgKHBhcnQgPT0gQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2sg
fHwgcGFydCA9PSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2spIHsK
KyAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tYID0gZXh0
cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWDsKKyAgICAgICAgd2ViVGhlbWVFeHRyYVBh
cmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tZID0gZXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNr
LnRyYWNrWTsKKyAgICAgICAgd2ViVGhlbWVFeHRyYVBhcmFtcy0+c2Nyb2xsYmFyVHJhY2sudHJh
Y2tXaWR0aCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1dpZHRoOworICAgICAg
ICB3ZWJUaGVtZUV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja0hlaWdodCA9IGV4dHJh
UGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja0hlaWdodDsKKyAgICB9Cit9CisKK0ludFNpemUg
Q2hyb21pdW1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0IHBhcnQpCit7CisgICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+dGhlbWVFbmdpbmUoKS0+Z2V0U2l6ZShXZWJUaGVtZVBh
cnQocGFydCkpOworfQorCit2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFRoZW1lUGFydCgKKyAg
ICBHcmFwaGljc0NvbnRleHQqIGdjLCBUaGVtZVBhcnQgcGFydCwgVGhlbWVQYWludFN0YXRlIHN0
YXRlLCBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4
dHJhUGFyYW1zKQoreworICAgIFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyB3ZWJUaGVtZUV4
dHJhUGFyYW1zOworICAgIEdldFdlYlRoZW1lRXh0cmFQYXJhbXMocGFydCwgc3RhdGUsIGV4dHJh
UGFyYW1zLCAmd2ViVGhlbWVFeHRyYVBhcmFtcyk7CisgICAgd2ViS2l0Q2xpZW50KCktPnRoZW1l
RW5naW5lKCktPnBhaW50KAorICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygp
LCBXZWJUaGVtZVBhcnQocGFydCksIFdlYlRoZW1lU3RhdGUoc3RhdGUpLCByZWN0LCAmd2ViVGhl
bWVFeHRyYVBhcmFtcyk7Cit9CisKKyNlbGlmIE9TKERBUldJTikKKwordm9pZCBDaHJvbWl1bUJy
aWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYigKKyAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBUaGVt
ZVBhaW50U3RhdGUgc3RhdGUsIFRoZW1lUGFpbnRTaXplIHNpemUsIGNvbnN0IEludFJlY3QmIHJl
Y3QsIGNvbnN0IFRoZW1lUGFpbnRTY3JvbGxiYXJJbmZvJiBzY3JvbGxiYXJJbmZvKQoreworICAg
IFdlYlRoZW1lRW5naW5lOjpTY3JvbGxiYXJJbmZvIHdlYlRoZW1lU2Nyb2xsYmFySW5mbzsKKwor
ICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5vcmllbnRhdGlvbiA9IHN0YXRpY19jYXN0PFdlYlRo
ZW1lRW5naW5lOjpTY3JvbGxiYXJPcmllbnRhdGlvbj4oc2Nyb2xsYmFySW5mby5vcmllbnRhdGlv
bik7CisgICAgd2ViVGhlbWVTY3JvbGxiYXJJbmZvLnBhcmVudCA9IHN0YXRpY19jYXN0PFdlYlRo
ZW1lRW5naW5lOjpTY3JvbGxiYXJQYXJlbnQ+KHNjcm9sbGJhckluZm8ucGFyZW50KTsKKyAgICB3
ZWJUaGVtZVNjcm9sbGJhckluZm8ubWF4VmFsdWUgPSBzY3JvbGxiYXJJbmZvLm1heFZhbHVlOwor
ICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby5jdXJyZW50VmFsdWUgPSBzY3JvbGxiYXJJbmZvLmN1
cnJlbnRWYWx1ZTsKKyAgICB3ZWJUaGVtZVNjcm9sbGJhckluZm8udmlzaWJsZVNpemUgPSBzY3Jv
bGxiYXJJbmZvLnZpc2libGVTaXplOworICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mby50b3RhbFNp
emUgPSBzY3JvbGxiYXJJbmZvLnRvdGFsU2l6ZTsKKworICAgIHdlYktpdENsaWVudCgpLT50aGVt
ZUVuZ2luZSgpLT5wYWludFNjcm9sbGJhclRodW1iKAorICAgICAgICBnYy0+cGxhdGZvcm1Db250
ZXh0KCksCisgICAgICAgIHN0YXRpY19jYXN0PFdlYlRoZW1lRW5naW5lOjpTdGF0ZT4oc3RhdGUp
LAorICAgICAgICBzdGF0aWNfY2FzdDxXZWJUaGVtZUVuZ2luZTo6U2l6ZT4oc2l6ZSksCisgICAg
ICAgIHJlY3QsCisgICAgICAgIHdlYlRoZW1lU2Nyb2xsYmFySW5mbyk7Cit9CisKKyNlbmRpZgor
CisvLyBUcmFjZSBFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK3ZvaWQgQ2hyb21pdW1CcmlkZ2U6OnRyYWNlRXZl
bnRCZWdpbihjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwgY29uc3QgY2hhciogZXh0cmEpCit7
CisgICAgd2ViS2l0Q2xpZW50KCktPnRyYWNlRXZlbnRCZWdpbihuYW1lLCBpZCwgZXh0cmEpOwor
fQorCit2b2lkIENocm9taXVtQnJpZGdlOjp0cmFjZUV2ZW50RW5kKGNvbnN0IGNoYXIqIG5hbWUs
IHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkKK3sKKyAgICB3ZWJLaXRDbGllbnQoKS0+dHJh
Y2VFdmVudEVuZChuYW1lLCBpZCwgZXh0cmEpOworfQorCisvLyBWaXNpdGVkIExpbmtzIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CisKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2goY29uc3QgVUNoYXIq
IHVybCwgdW5zaWduZWQgbGVuZ3RoKQoreworICAgIHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8
MjA0OD4gYnVmZmVyOworICAgIHVybF9wYXJzZTo6UGFyc2VkIHBhcnNlZDsKKyAgICBpZiAoIXVy
bF91dGlsOjpDYW5vbmljYWxpemUodXJsLCBsZW5ndGgsIDAsICZidWZmZXIsICZwYXJzZWQpKQor
ICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQgVVJMcyBhcmUgdW52aXNpdGVkLgorICAgIHJl
dHVybiB3ZWJLaXRDbGllbnQoKS0+dmlzaXRlZExpbmtIYXNoKGJ1ZmZlci5kYXRhKCksIGJ1ZmZl
ci5sZW5ndGgoKSk7Cit9CisKK0xpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hh
c2goY29uc3QgS1VSTCYgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBhdHRyaWJ1dGVVUkwpCit7CisgICAgLy8gUmVzb2x2
ZSB0aGUgcmVsYXRpdmUgVVJMIHVzaW5nIGdvb2dsZXVybCBhbmQgcGFzcyB0aGUgYWJzb2x1dGUg
VVJMIHVwIHRvCisgICAgLy8gdGhlIGVtYmVkZGVyLiBXZSBjb3VsZCBjcmVhdGUgYSBHVVJMIG9i
amVjdCBmcm9tIHRoZSBiYXNlIGFuZCByZXNvbHZlCisgICAgLy8gdGhlIHJlbGF0aXZlIFVSTCB0
aGF0IHdheSwgYnV0IGNhbGxpbmcgdGhlIGxvd2VyLWxldmVsIGZ1bmN0aW9ucworICAgIC8vIGRp
cmVjdGx5IHNhdmVzIHVzIHRoZSBzdHJpbmcgYWxsb2NhdGlvbiBpbiBtb3N0IGNhc2VzLgorICAg
IHVybF9jYW5vbjo6UmF3Q2Fub25PdXRwdXQ8MjA0OD4gYnVmZmVyOworICAgIHVybF9wYXJzZTo6
UGFyc2VkIHBhcnNlZDsKKworI2lmIFVTRShHT09HTEVVUkwpCisgICAgY29uc3QgQ1N0cmluZyYg
Y3N0ciA9IGJhc2UudXRmOFN0cmluZygpOworICAgIGNvbnN0IGNoYXIqIGRhdGEgPSBjc3RyLmRh
dGEoKTsKKyAgICBpbnQgbGVuZ3RoID0gY3N0ci5sZW5ndGgoKTsKKyAgICBjb25zdCB1cmxfcGFy
c2U6OlBhcnNlZCYgc3JjUGFyc2VkID0gYmFzZS5wYXJzZWQoKTsKKyNlbHNlCisgICAgLy8gV2hl
biB3ZSdyZSBub3QgdXNpbmcgR29vZ2xlVVJMLCBmaXJzdCBjYW5vbmljYWxpemUgaXQgc28gd2Ug
Y2FuIHJlc29sdmUgaXQKKyAgICAvLyBiZWxvdy4KKyAgICB1cmxfY2Fub246OlJhd0Nhbm9uT3V0
cHV0PDIwNDg+IHNyY0Nhbm9uOworICAgIHVybF9wYXJzZTo6UGFyc2VkIHNyY1BhcnNlZDsKKyAg
ICBTdHJpbmcgc3RyID0gYmFzZS5zdHJpbmcoKTsKKyAgICBpZiAoIXVybF91dGlsOjpDYW5vbmlj
YWxpemUoc3RyLmNoYXJhY3RlcnMoKSwgc3RyLmxlbmd0aCgpLCAwLCAmc3JjQ2Fub24sICZzcmNQ
YXJzZWQpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBjb25zdCBjaGFyKiBkYXRhID0gc3JjQ2Fu
b24uZGF0YSgpOworICAgIGludCBsZW5ndGggPSBzcmNDYW5vbi5sZW5ndGgoKTsKKyNlbmRpZgor
CisgICAgaWYgKCF1cmxfdXRpbDo6UmVzb2x2ZVJlbGF0aXZlKGRhdGEsIGxlbmd0aCwgc3JjUGFy
c2VkLCBhdHRyaWJ1dGVVUkwuY2hhcmFjdGVycygpLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBhdHRyaWJ1dGVVUkwubGVuZ3RoKCksIDAsICZidWZmZXIsICZwYXJzZWQpKQor
ICAgICAgICByZXR1cm4gMDsgIC8vIEludmFsaWQgcmVzb2x2ZWQgVVJMLgorCisgICAgcmV0dXJu
IHdlYktpdENsaWVudCgpLT52aXNpdGVkTGlua0hhc2goYnVmZmVyLmRhdGEoKSwgYnVmZmVyLmxl
bmd0aCgpKTsKK30KKworYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNMaW5rVmlzaXRlZChMaW5rSGFz
aCB2aXNpdGVkTGlua0hhc2gpCit7CisgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5pc0xpbmtW
aXNpdGVkKHZpc2l0ZWRMaW5rSGFzaCk7Cit9CisKKy8vIFRoZXNlIGFyZSB0ZW1wb3JhcnkgbWV0
aG9kcyB0aGF0IHRoZSBXZWJLaXQgbGF5ZXIgY2FuIHVzZSB0byBjYWxsIHRvIHRoZQorLy8gR2x1
ZSBsYXllci4gT25jZSB0aGUgR2x1ZSBsYXllciBtb3ZlcyBlbnRpcmVseSBpbnRvIHRoZSBXZWJL
aXQgbGF5ZXIsIHRoZXNlCisvLyBtZXRob2RzIHdpbGwgYmUgZGVsZXRlZC4KKwordm9pZCBDaHJv
bWl1bUJyaWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeShGcmFtZSogZnJhbWUpCit7CisgICAgaWYg
KCFmcmFtZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgV2ViRnJhbWVJbXBsKiB3ZWJGcmFtZSA9
IFdlYkZyYW1lSW1wbDo6ZnJvbUZyYW1lKGZyYW1lKTsKKyAgICBpZiAoIXdlYkZyYW1lLT5jbGll
bnQoKSkKKyAgICAgICAgcmV0dXJuOworICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+ZGlkRXhoYXVz
dE1lbW9yeUF2YWlsYWJsZUZvclNjcmlwdCh3ZWJGcmFtZSk7Cit9CisKK2ludCBDaHJvbWl1bUJy
aWRnZTo6bWVtb3J5VXNhZ2VNQigpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2Vi
S2l0Q2xpZW50KCktPm1lbW9yeVVzYWdlTUIoKSk7Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6
YWN0dWFsTWVtb3J5VXNhZ2VNQigpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4od2Vi
S2l0Q2xpZW50KCktPmFjdHVhbE1lbW9yeVVzYWdlTUIoKSk7Cit9CisKK2ludCBDaHJvbWl1bUJy
aWRnZTo6c2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xpZW50
KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOworICAgIGlmICghY2xpZW50KQor
ICAgICAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuZGVwdGg7
Cit9CisKK2ludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lkZ2V0
KiB3aWRnZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENs
aWVudCh3aWRnZXQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICByZXR1cm4gMDsKKyAgICBy
ZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuZGVwdGhQZXJDb21wb25lbnQ7Cit9CisKK2Jvb2wg
Q2hyb21pdW1CcmlkZ2U6OnNjcmVlbklzTW9ub2Nocm9tZShXaWRnZXQqIHdpZGdldCkKK3sKKyAg
ICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7Cisg
ICAgaWYgKCFjbGllbnQpCisgICAgICAgIHJldHVybiAwOworICAgIHJldHVybiBjbGllbnQtPnNj
cmVlbkluZm8oKS5pc01vbm9jaHJvbWU7Cit9CisKK0ludFJlY3QgQ2hyb21pdW1CcmlkZ2U6OnNj
cmVlblJlY3QoV2lkZ2V0KiB3aWRnZXQpCit7CisgICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQg
PSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOworICAgIGlmICghY2xpZW50KQorICAgICAgICBy
ZXR1cm4gSW50UmVjdCgpOworICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5yZWN0Owor
fQorCitJbnRSZWN0IENocm9taXVtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVSZWN0KFdpZGdldCog
d2lkZ2V0KQoreworICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJXaWRnZXRDbGll
bnQod2lkZ2V0KTsKKyAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgcmV0dXJuIEludFJlY3QoKTsK
KyAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuYXZhaWxhYmxlUmVjdDsKK30KKworYm9v
bCBDaHJvbWl1bUJyaWRnZTo6cG9wdXBzQWxsb3dlZChOUFAgbnBwKQoreworICAgIC8vIEZJWE1F
OiBHaXZlIHRoZSBlbWJlZGRlciBhIHdheSB0byBjb250cm9sIHRoaXMuCisgICAgcmV0dXJuIGZh
bHNlOworfQorCitXb3JrZXJDb250ZXh0UHJveHkqIFdvcmtlckNvbnRleHRQcm94eTo6Y3JlYXRl
KFdvcmtlciogd29ya2VyKQoreworICAgIHJldHVybiBXZWJXb3JrZXJDbGllbnRJbXBsOjpjcmVh
dGVXb3JrZXJDb250ZXh0UHJveHkod29ya2VyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpJbmRleDogU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvUGxhdGZvcm1CcmlkZ2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1BsYXRmb3JtQnJpZGdlLmNw
cAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9QbGF0Zm9y
bUJyaWRnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI5LDcgKzI5LDcgQEAKICAqLwogCiAjaW5j
bHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ2hyb21pdW1CcmlkZ2UuaCIKKyNpbmNsdWRlICJQ
bGF0Zm9ybUJyaWRnZS5oIgogCiAjaW5jbHVkZSA8Z29vZ2xldXJsL3NyYy91cmxfdXRpbC5oPgog
CkBAIC0xNDUsMTQgKzE0NSwxNCBAQCBzdGF0aWMgV2ViQ29va2llSmFyKiBnZXRDb29raWVKYXIo
Y29uc3QgCiAKIC8vIENhY2hlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6
Y2FjaGVNZXRhZGF0YShjb25zdCBLVVJMJiB1cmwsIGRvdWJsZSByZXNwb25zZVRpbWUsIGNvbnN0
IFZlY3RvcjxjaGFyPiYgZGF0YSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNhY2hlTWV0YWRhdGEo
Y29uc3QgS1VSTCYgdXJsLCBkb3VibGUgcmVzcG9uc2VUaW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4m
IGRhdGEpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmNhY2hlTWV0YWRhdGEodXJsLCByZXNwb25z
ZVRpbWUsIGRhdGEuZGF0YSgpLCBkYXRhLnNpemUoKSk7CiB9CiAKIC8vIENsaXBib2FyZCAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkSXNGb3JtYXRBdmFpbGFibGUo
Citib29sIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRJc0Zvcm1hdEF2YWlsYWJsZSgKICAgICBQ
YXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkRm9ybWF0IGZvcm1hdCwKICAgICBQYXN0ZWJvYXJk
UHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlcikKIHsKQEAgLTE2MSwxNCArMTYxLDE0IEBA
IGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZElzRm9ybWF0QXYKICAgICAgICAgc3RhdGlj
X2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwogfQogCi1TdHJpbmcgQ2hyb21p
dW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRQbGFpblRleHQoCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6
OmNsaXBib2FyZFJlYWRQbGFpblRleHQoCiAgICAgUGFzdGVib2FyZFByaXZhdGU6OkNsaXBib2Fy
ZEJ1ZmZlciBidWZmZXIpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQo
KS0+cmVhZFBsYWluVGV4dCgKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJvYXJkOjpCdWZm
ZXI+KGJ1ZmZlcikpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRSZWFkSFRN
TCgKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRIVE1MKAogICAgIFBhc3RlYm9h
cmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVyLAogICAgIFN0cmluZyogaHRtbFRleHQs
IEtVUkwqIHNvdXJjZVVSTCkKIHsKQEAgLTE3OCw3ICsxNzgsNyBAQCB2b2lkIENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkSFRNTCgKICAgICAqc291cmNlVVJMID0gdXJsOwogfQogCi12b2lk
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZVNlbGVjdGlvbihjb25zdCBTdHJpbmcmIGh0
bWxUZXh0LAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVTZWxlY3Rpb24oY29u
c3QgU3RyaW5nJiBodG1sVGV4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnN0IEtVUkwmIHNvdXJjZVVSTCwKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcGxhaW5UZXh0LAogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCB3cml0ZVNtYXJ0UGFzdGUp
CkBAIC0xODcsMTcgKzE4NywxNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0
ZVNlbGVjCiAgICAgICAgIGh0bWxUZXh0LCBzb3VyY2VVUkwsIHBsYWluVGV4dCwgd3JpdGVTbWFy
dFBhc3RlKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVQbGFpblRl
eHQoY29uc3QgU3RyaW5nJiBwbGFpblRleHQpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9h
cmRXcml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHBsYWluVGV4dCkKIHsKICAgICB3ZWJLaXRD
bGllbnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlUGxhaW5UZXh0KHBsYWluVGV4dCk7CiB9CiAKLXZv
aWQgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlVVJMKGNvbnN0IEtVUkwmIHVybCwgY29u
c3QgU3RyaW5nJiB0aXRsZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlVVJM
KGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiB0aXRsZSkKIHsKICAgICB3ZWJLaXRDbGll
bnQoKS0+Y2xpcGJvYXJkKCktPndyaXRlVVJMKHVybCwgdGl0bGUpOwogfQogCi12b2lkIENocm9t
aXVtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZUltYWdlKE5hdGl2ZUltYWdlUHRyIGltYWdlLAordm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZShOYXRpdmVJbWFnZVB0ciBpbWFn
ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYg
c291cmNlVVJMLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBTdHJpbmcmIHRpdGxlKQogewpAQCAtMjA5LDE0ICsyMDksMTQgQEAgdm9pZCBDaHJvbWl1bUJy
aWRnZTo6Y2xpcGJvYXJkV3JpdGVJbWFnZQogICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQo
KS0+d3JpdGVJbWFnZSh3ZWJJbWFnZSwgc291cmNlVVJMLCB0aXRsZSk7CiB9CiAKLXZvaWQgQ2hy
b21pdW1CcmlkZ2U6OmNsaXBib2FyZFdyaXRlRGF0YShjb25zdCBTdHJpbmcmIHR5cGUsCit2b2lk
IFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRXcml0ZURhdGEoY29uc3QgU3RyaW5nJiB0eXBlLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgZGF0
YSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcm
IG1ldGFkYXRhKQogewogICAgIHdlYktpdENsaWVudCgpLT5jbGlwYm9hcmQoKS0+d3JpdGVEYXRh
KHR5cGUsIGRhdGEsIG1ldGFkYXRhKTsKIH0KIAotSGFzaFNldDxTdHJpbmc+IENocm9taXVtQnJp
ZGdlOjpjbGlwYm9hcmRSZWFkQXZhaWxhYmxlVHlwZXMoCitIYXNoU2V0PFN0cmluZz4gUGxhdGZv
cm1CcmlkZ2U6OmNsaXBib2FyZFJlYWRBdmFpbGFibGVUeXBlcygKICAgICBQYXN0ZWJvYXJkUHJp
dmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwgYm9vbCogY29udGFpbnNGaWxlbmFtZXMpCiB7
CiAgICAgV2ViVmVjdG9yPFdlYlN0cmluZz4gcmVzdWx0ID0gd2ViS2l0Q2xpZW50KCktPmNsaXBi
b2FyZCgpLT5yZWFkQXZhaWxhYmxlVHlwZXMoCkBAIC0yMjcsNyArMjI3LDcgQEAgSGFzaFNldDxT
dHJpbmc+IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcgogICAgIHJldHVybiB0eXBlczsKIH0KIAot
Ym9vbCBDaHJvbWl1bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZERhdGEoUGFzdGVib2FyZFByaXZhdGU6
OkNsaXBib2FyZEJ1ZmZlciBidWZmZXIsCitib29sIFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9hcmRS
ZWFkRGF0YShQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJvYXJkQnVmZmVyIGJ1ZmZlciwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgdHlwZSwgU3Ry
aW5nJiBkYXRhLCBTdHJpbmcmIG1ldGFkYXRhKQogewogICAgIFdlYlN0cmluZyByZXN1bHREYXRh
OwpAQCAtMjQxLDcgKzI0MSw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmNsaXBib2FyZFJlYWRE
YXRhKFAKICAgICByZXR1cm4gc3VjY2VlZGVkOwogfQogCi1WZWN0b3I8U3RyaW5nPiBDaHJvbWl1
bUJyaWRnZTo6Y2xpcGJvYXJkUmVhZEZpbGVuYW1lcyhQYXN0ZWJvYXJkUHJpdmF0ZTo6Q2xpcGJv
YXJkQnVmZmVyIGJ1ZmZlcikKK1ZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtQnJpZGdlOjpjbGlwYm9h
cmRSZWFkRmlsZW5hbWVzKFBhc3RlYm9hcmRQcml2YXRlOjpDbGlwYm9hcmRCdWZmZXIgYnVmZmVy
KQogewogICAgIFdlYlZlY3RvcjxXZWJTdHJpbmc+IHJlc3VsdCA9IHdlYktpdENsaWVudCgpLT5j
bGlwYm9hcmQoKS0+cmVhZEZpbGVuYW1lcygKICAgICAgICAgc3RhdGljX2Nhc3Q8V2ViQ2xpcGJv
YXJkOjpCdWZmZXI+KGJ1ZmZlcikpOwpAQCAtMjUzLDcgKzI1Myw3IEBAIFZlY3RvcjxTdHJpbmc+
IENocm9taXVtQnJpZGdlOjpjbGlwYm9hcmQKIAogLy8gQ29va2llcyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12
b2lkIENocm9taXVtQnJpZGdlOjpzZXRDb29raWVzKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwg
Y29uc3QgS1VSTCYgdXJsLAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6c2V0Q29va2llcyhjb25zdCBE
b2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKICAgICBXZWJDb29raWVKYXIqIGNv
b2tpZUphciA9IGdldENvb2tpZUphcihkb2N1bWVudCk7CkBAIC0yNjEsNyArMjYxLDcgQEAgdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6c2V0Q29va2llcyhjb25zdCBEbwogICAgICAgICBjb29raWVKYXIt
PnNldENvb2tpZSh1cmwsIGRvY3VtZW50LT5maXJzdFBhcnR5Rm9yQ29va2llcygpLCB2YWx1ZSk7
CiB9CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29va2llcyhjb25zdCBEb2N1bWVudCogZG9j
dW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Y29va2llcyhj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCkKIHsKICAgICBTdHJpbmcg
cmVzdWx0OwogICAgIFdlYkNvb2tpZUphciogY29va2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3Vt
ZW50KTsKQEAgLTI3MCw3ICsyNzAsNyBAQCBTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXMo
Y29uc3QgRG9jCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotU3RyaW5nIENocm9taXVtQnJpZGdl
Ojpjb29raWVSZXF1ZXN0SGVhZGVyRmllbGRWYWx1ZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQs
CitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmNvb2tpZVJlcXVlc3RIZWFkZXJGaWVsZFZhbHVlKGNv
bnN0IERvY3VtZW50KiBkb2N1bWVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgY29uc3QgS1VSTCYgdXJsKQogewogICAgIFN0cmluZyByZXN1
bHQ7CkBAIC0yODAsNyArMjgwLDcgQEAgU3RyaW5nIENocm9taXVtQnJpZGdlOjpjb29raWVSZXF1
ZXN0SGVhZAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OnJh
d0Nvb2tpZXMoY29uc3QgRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBLVVJMJiB1cmwsIFZlY3Rv
cjxDb29raWU+JiByYXdDb29raWVzKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6cmF3Q29va2llcyhj
b25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0IEtVUkwmIHVybCwgVmVjdG9yPENvb2tpZT4m
IHJhd0Nvb2tpZXMpCiB7CiAgICAgcmF3Q29va2llcy5jbGVhcigpOwogICAgIFdlYlZlY3RvcjxX
ZWJDb29raWU+IHdlYkNvb2tpZXM7CkBAIC0zMDQsMTQgKzMwNCwxNCBAQCBib29sIENocm9taXVt
QnJpZGdlOjpyYXdDb29raWVzKGNvbnN0IERvCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQg
Q2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUNvb2tpZShjb25zdCBEb2N1bWVudCogZG9jdW1lbnQsIGNv
bnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBjb29raWVOYW1lKQordm9pZCBQbGF0Zm9ybUJy
aWRnZTo6ZGVsZXRlQ29va2llKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIGNvb2tpZU5hbWUpCiB7CiAgICAgV2ViQ29va2llSmFyKiBjb29r
aWVKYXIgPSBnZXRDb29raWVKYXIoZG9jdW1lbnQpOwogICAgIGlmIChjb29raWVKYXIpCiAgICAg
ICAgIGNvb2tpZUphci0+ZGVsZXRlQ29va2llKHVybCwgY29va2llTmFtZSk7CiB9CiAKLWJvb2wg
Q2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1bWVudCkK
K2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnN0IERvY3VtZW50KiBkb2N1
bWVudCkKIHsKICAgICBib29sIHJlc3VsdCA9IGZhbHNlOwogICAgIFdlYkNvb2tpZUphciogY29v
a2llSmFyID0gZ2V0Q29va2llSmFyKGRvY3VtZW50KTsKQEAgLTMyMiwzOSArMzIyLDM5IEBAIGJv
b2wgQ2hyb21pdW1CcmlkZ2U6OmNvb2tpZXNFbmFibGVkKGNvbnMKIAogLy8gRE5TIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwcmVmZXRjaEROUyhjb25zdCBTdHJpbmcm
IGhvc3RuYW1lKQordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cHJlZmV0Y2hETlMoY29uc3QgU3RyaW5n
JiBob3N0bmFtZSkKIHsKICAgICB3ZWJLaXRDbGllbnQoKS0+cHJlZmV0Y2hIb3N0TmFtZShob3N0
bmFtZSk7CiB9CiAKIC8vIEZpbGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLWJvb2wgQ2hyb21pdW1Ccmlk
Z2U6OmZpbGVFeGlzdHMoY29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6
ZmlsZUV4aXN0cyhjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5maWxlVXRpbGl0aWVzKCktPmZpbGVFeGlzdHMocGF0aCk7CiB9CiAKLWJvb2wgQ2hyb21p
dW1CcmlkZ2U6OmRlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiBwYXRoKQorYm9vbCBQbGF0Zm9ybUJy
aWRnZTo6ZGVsZXRlRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktp
dENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPmRlbGV0ZUZpbGUocGF0aCk7CiB9CiAKLWJvb2wg
Q2hyb21pdW1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYgcGF0aCkK
K2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmRlbGV0ZUVtcHR5RGlyZWN0b3J5KGNvbnN0IFN0cmluZyYg
cGF0aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+ZGVs
ZXRlRW1wdHlEaXJlY3RvcnkocGF0aCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmdldEZp
bGVTaXplKGNvbnN0IFN0cmluZyYgcGF0aCwgbG9uZyBsb25nJiByZXN1bHQpCitib29sIFBsYXRm
b3JtQnJpZGdlOjpnZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHBhdGgsIGxvbmcgbG9uZyYgcmVz
dWx0KQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5nZXRG
aWxlU2l6ZShwYXRoLCByZXN1bHQpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpyZXZlYWxG
b2xkZXJJbk9TKGNvbnN0IFN0cmluZyYgcGF0aCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnJldmVh
bEZvbGRlckluT1MoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHdlYktpdENsaWVudCgpLT5m
aWxlVXRpbGl0aWVzKCktPnJldmVhbEZvbGRlckluT1MocGF0aCk7CiB9CiAKLWJvb2wgQ2hyb21p
dW1CcmlkZ2U6OmdldEZpbGVNb2RpZmljYXRpb25UaW1lKGNvbnN0IFN0cmluZyYgcGF0aCwgdGlt
ZV90JiByZXN1bHQpCitib29sIFBsYXRmb3JtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uVGlt
ZShjb25zdCBTdHJpbmcmIHBhdGgsIHRpbWVfdCYgcmVzdWx0KQogewogICAgIGRvdWJsZSBtb2Rp
ZmljYXRpb25UaW1lOwogICAgIGlmICghd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+
Z2V0RmlsZU1vZGlmaWNhdGlvblRpbWUocGF0aCwgbW9kaWZpY2F0aW9uVGltZSkpCkBAIC0zNjMs
NjIgKzM2Myw2MiBAQCBib29sIENocm9taXVtQnJpZGdlOjpnZXRGaWxlTW9kaWZpY2F0aW9uCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6ZGlyZWN0b3J5TmFt
ZShjb25zdCBTdHJpbmcmIHBhdGgpCitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OmRpcmVjdG9yeU5h
bWUoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+Zmls
ZVV0aWxpdGllcygpLT5kaXJlY3RvcnlOYW1lKHBhdGgpOwogfQogCi1TdHJpbmcgQ2hyb21pdW1C
cmlkZ2U6OnBhdGhCeUFwcGVuZGluZ0NvbXBvbmVudChjb25zdCBTdHJpbmcmIHBhdGgsIGNvbnN0
IFN0cmluZyYgY29tcG9uZW50KQorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpwYXRoQnlBcHBlbmRp
bmdDb21wb25lbnQoY29uc3QgU3RyaW5nJiBwYXRoLCBjb25zdCBTdHJpbmcmIGNvbXBvbmVudCkK
IHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cGF0aEJ5QXBw
ZW5kaW5nQ29tcG9uZW50KHBhdGgsIGNvbXBvbmVudCk7CiB9CiAKLWJvb2wgQ2hyb21pdW1Ccmlk
Z2U6Om1ha2VBbGxEaXJlY3Rvcmllcyhjb25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsYXRmb3Jt
QnJpZGdlOjptYWtlQWxsRGlyZWN0b3JpZXMoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHJl
dHVybiB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5tYWtlQWxsRGlyZWN0b3JpZXMo
cGF0aCk7CiB9CiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKGNvbnN0
IFN0cmluZyYgcGF0aCkKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0QWJzb2x1dGVQYXRoKGNv
bnN0IFN0cmluZyYgcGF0aCkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+Z2V0QWJzb2x1dGVQYXRoKHBhdGgpOwogfQogCi1ib29sIENocm9taXVtQnJpZGdl
Ojppc0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCitib29sIFBsYXRmb3JtQnJpZGdlOjpp
c0RpcmVjdG9yeShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVu
dCgpLT5maWxlVXRpbGl0aWVzKCktPmlzRGlyZWN0b3J5KHBhdGgpOwogfQogCi1LVVJMIENocm9t
aXVtQnJpZGdlOjpmaWxlUGF0aFRvVVJMKGNvbnN0IFN0cmluZyYgcGF0aCkKK0tVUkwgUGxhdGZv
cm1CcmlkZ2U6OmZpbGVQYXRoVG9VUkwoY29uc3QgU3RyaW5nJiBwYXRoKQogewogICAgIHJldHVy
biB3ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT5maWxlUGF0aFRvVVJMKHBhdGgpOwog
fQogCi1QbGF0Zm9ybUZpbGVIYW5kbGUgQ2hyb21pdW1CcmlkZ2U6Om9wZW5GaWxlKGNvbnN0IFN0
cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUpCitQbGF0Zm9ybUZpbGVIYW5kbGUgUGxhdGZv
cm1CcmlkZ2U6Om9wZW5GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCwgRmlsZU9wZW5Nb2RlIG1vZGUp
CiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVzKCktPm9wZW5GaWxl
KHBhdGgsIG1vZGUpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpjbG9zZUZpbGUoUGxhdGZv
cm1GaWxlSGFuZGxlJiBoYW5kbGUpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpjbG9zZUZpbGUoUGxh
dGZvcm1GaWxlSGFuZGxlJiBoYW5kbGUpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmZpbGVVdGls
aXRpZXMoKS0+Y2xvc2VGaWxlKGhhbmRsZSk7CiB9CiAKLWxvbmcgbG9uZyBDaHJvbWl1bUJyaWRn
ZTo6c2Vla0ZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25nIG9mZnNldCwg
RmlsZVNlZWtPcmlnaW4gb3JpZ2luKQorbG9uZyBsb25nIFBsYXRmb3JtQnJpZGdlOjpzZWVrRmls
ZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0LCBGaWxlU2Vla09y
aWdpbiBvcmlnaW4pCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5maWxlVXRpbGl0aWVz
KCktPnNlZWtGaWxlKGhhbmRsZSwgb2Zmc2V0LCBvcmlnaW4pOwogfQogCi1ib29sIENocm9taXVt
QnJpZGdlOjp0cnVuY2F0ZUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgbG9uZyBsb25n
IG9mZnNldCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OnRydW5jYXRlRmlsZShQbGF0Zm9ybUZpbGVI
YW5kbGUgaGFuZGxlLCBsb25nIGxvbmcgb2Zmc2V0KQogewogICAgIHJldHVybiB3ZWJLaXRDbGll
bnQoKS0+ZmlsZVV0aWxpdGllcygpLT50cnVuY2F0ZUZpbGUoaGFuZGxlLCBvZmZzZXQpOwogfQog
Ci1pbnQgQ2hyb21pdW1CcmlkZ2U6OnJlYWRGcm9tRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFu
ZGxlLCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQoraW50IFBsYXRmb3JtQnJpZGdlOjpyZWFkRnJv
bUZpbGUoUGxhdGZvcm1GaWxlSGFuZGxlIGhhbmRsZSwgY2hhciogZGF0YSwgaW50IGxlbmd0aCkK
IHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmZpbGVVdGlsaXRpZXMoKS0+cmVhZEZyb21G
aWxlKGhhbmRsZSwgZGF0YSwgbGVuZ3RoKTsKIH0KIAotaW50IENocm9taXVtQnJpZGdlOjp3cml0
ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5kbGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQg
bGVuZ3RoKQoraW50IFBsYXRmb3JtQnJpZGdlOjp3cml0ZVRvRmlsZShQbGF0Zm9ybUZpbGVIYW5k
bGUgaGFuZGxlLCBjb25zdCBjaGFyKiBkYXRhLCBpbnQgbGVuZ3RoKQogewogICAgIHJldHVybiB3
ZWJLaXRDbGllbnQoKS0+ZmlsZVV0aWxpdGllcygpLT53cml0ZVRvRmlsZShoYW5kbGUsIGRhdGEs
IGxlbmd0aCk7CiB9CkBAIC00MjYsNyArNDI2LDcgQEAgaW50IENocm9taXVtQnJpZGdlOjp3cml0
ZVRvRmlsZShQbGF0Zm9ybQogLy8gRm9udCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCiAjaWYgT1MoV0lORE9X
UykKLWJvb2wgQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCkKK2Jv
b2wgUGxhdGZvcm1CcmlkZ2U6OmVuc3VyZUZvbnRMb2FkZWQoSEZPTlQgZm9udCkKIHsKICAgICBX
ZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQoKTsK
IApAQCAtNDM3LDcgKzQzNyw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmVuc3VyZUZvbnRMb2Fk
ZWQoSEYKICNlbmRpZgogCiAjaWYgT1MoTElOVVgpIHx8IE9TKEZSRUVCU0QpCi1TdHJpbmcgQ2hy
b21pdW1CcmlkZ2U6OmdldEZvbnRGYW1pbHlGb3JDaGFyYWN0ZXJzKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCBzaXplX3QgbnVtQ2hhcmFjdGVycykKK1N0cmluZyBQbGF0Zm9ybUJyaWRnZTo6Z2V0
Rm9udEZhbWlseUZvckNoYXJhY3RlcnMoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHNpemVfdCBu
dW1DaGFyYWN0ZXJzKQogewogICAgIGlmICh3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1cHBvcnQo
KSkKICAgICAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zYW5kYm94U3VwcG9ydCgpLT5nZXRG
b250RmFtaWx5Rm9yQ2hhcmFjdGVycyhjaGFyYWN0ZXJzLCBudW1DaGFyYWN0ZXJzKTsKQEAgLTQ0
OSw3ICs0NDksNyBAQCBTdHJpbmcgQ2hyb21pdW1CcmlkZ2U6OmdldEZvbnRGYW1pbHlGb3JDCiAg
ICAgcmV0dXJuIFdlYlN0cmluZygpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpnZXRSZW5k
ZXJTdHlsZUZvclN0cmlrZShjb25zdCBjaGFyKiBmb250LCBpbnQgc2l6ZUFuZFN0eWxlLCBGb250
UmVuZGVyU3R5bGUqIHJlc3VsdCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OmdldFJlbmRlclN0eWxl
Rm9yU3RyaWtlKGNvbnN0IGNoYXIqIGZvbnQsIGludCBzaXplQW5kU3R5bGUsIEZvbnRSZW5kZXJT
dHlsZSogcmVzdWx0KQogewogICAgIFdlYkZvbnRSZW5kZXJTdHlsZSBzdHlsZTsKIApAQCAtNDYz
LDcgKzQ2Myw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OmdldFJlbmRlclN0eWxlRm9yU3QKICNl
bmRpZgogCiAjaWYgT1MoREFSV0lOKQotYm9vbCBDaHJvbWl1bUJyaWRnZTo6bG9hZEZvbnQoTlNG
b250KiBzcmNGb250LCBBVFNGb250Q29udGFpbmVyUmVmKiBvdXQpCitib29sIFBsYXRmb3JtQnJp
ZGdlOjpsb2FkRm9udChOU0ZvbnQqIHNyY0ZvbnQsIEFUU0ZvbnRDb250YWluZXJSZWYqIG91dCkK
IHsKICAgICBXZWJTYW5kYm94U3VwcG9ydCogc3MgPSB3ZWJLaXRDbGllbnQoKS0+c2FuZGJveFN1
cHBvcnQoKTsKICAgICBpZiAoc3MpCkBAIC00ODAsNDIgKzQ4MCw0MiBAQCBib29sIENocm9taXVt
QnJpZGdlOjpsb2FkRm9udChOU0ZvbnQqIHNyCiAKIC8vIERhdGFiYXNlcyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
UGxhdGZvcm1GaWxlSGFuZGxlIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZU9wZW5GaWxlKGNvbnN0
IFN0cmluZyYgdmZzRmlsZU5hbWUsIGludCBkZXNpcmVkRmxhZ3MpCitQbGF0Zm9ybUZpbGVIYW5k
bGUgUGxhdGZvcm1CcmlkZ2U6OmRhdGFiYXNlT3BlbkZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxl
TmFtZSwgaW50IGRlc2lyZWRGbGFncykKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPmRh
dGFiYXNlT3BlbkZpbGUoV2ViU3RyaW5nKHZmc0ZpbGVOYW1lKSwgZGVzaXJlZEZsYWdzKTsKIH0K
IAotaW50IENocm9taXVtQnJpZGdlOjpkYXRhYmFzZURlbGV0ZUZpbGUoY29uc3QgU3RyaW5nJiB2
ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyKQoraW50IFBsYXRmb3JtQnJpZGdlOjpkYXRhYmFzZURl
bGV0ZUZpbGUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSwgYm9vbCBzeW5jRGlyKQogewogICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VEZWxldGVGaWxlKFdlYlN0cmluZyh2ZnNG
aWxlTmFtZSksIHN5bmNEaXIpOwogfQogCi1sb25nIENocm9taXVtQnJpZGdlOjpkYXRhYmFzZUdl
dEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5hbWUpCitsb25nIFBsYXRmb3Jt
QnJpZGdlOjpkYXRhYmFzZUdldEZpbGVBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgdmZzRmlsZU5h
bWUpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kYXRhYmFzZUdldEZpbGVBdHRyaWJ1
dGVzKFdlYlN0cmluZyh2ZnNGaWxlTmFtZSkpOwogfQogCi1sb25nIGxvbmcgQ2hyb21pdW1Ccmlk
Z2U6OmRhdGFiYXNlR2V0RmlsZVNpemUoY29uc3QgU3RyaW5nJiB2ZnNGaWxlTmFtZSkKK2xvbmcg
bG9uZyBQbGF0Zm9ybUJyaWRnZTo6ZGF0YWJhc2VHZXRGaWxlU2l6ZShjb25zdCBTdHJpbmcmIHZm
c0ZpbGVOYW1lKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+ZGF0YWJhc2VHZXRGaWxl
U2l6ZShXZWJTdHJpbmcodmZzRmlsZU5hbWUpKTsKIH0KIAogLy8gSW5kZXhlZCBEYXRhYmFzZSAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1QYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBDaHJvbWl1bUJyaWRn
ZTo6aWRiRmFjdG9yeSgpCitQYXNzUmVmUHRyPElEQkZhY3RvcnlCYWNrZW5kSW50ZXJmYWNlPiBQ
bGF0Zm9ybUJyaWRnZTo6aWRiRmFjdG9yeSgpCiB7CiAgICAgLy8gVGhlcmUncyBubyByZWFzb24g
d2h5IHdlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgcHJveHkgZWFjaCB0aW1lLCBidXQKICAgICAv
LyB0aGVyZSdzIGFsc28gbm8gc3Ryb25nIHJlYXNvbiBub3QgdG8uCiAgICAgcmV0dXJuIElEQkZh
Y3RvcnlCYWNrZW5kUHJveHk6OmNyZWF0ZSgpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpp
ZGJTaHV0ZG93bigpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjppZGJTaHV0ZG93bigpCiB7CiAgICAg
Ly8gSW4gdGhlIGJyb3dzZXIgcHJvY2VzcywgdGhpcyBzaHV0cyBkb3duIHRoZSB1dGlsaXR5IHBy
b2Nlc3MuIEluIHRoZSByZW5kZXJlciBwcm9jZXNzLCBpdCBkb2VzIG5vdGhpbmcuCiAgICAgd2Vi
S2l0Q2xpZW50KCktPmlkYlNodXRkb3duKCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OmNy
ZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9yPFJl
ZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBrZXlQ
YXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cykKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6
OmNyZWF0ZUlEQktleXNGcm9tU2VyaWFsaXplZFZhbHVlc0FuZEtleVBhdGgoY29uc3QgVmVjdG9y
PFJlZlB0cjxTZXJpYWxpemVkU2NyaXB0VmFsdWU+ID4mIHZhbHVlcywgY29uc3QgU3RyaW5nJiBr
ZXlQYXRoLCBWZWN0b3I8UmVmUHRyPElEQktleT4gPiYga2V5cykKIHsKICAgICBXZWJWZWN0b3I8
V2ViU2VyaWFsaXplZFNjcmlwdFZhbHVlPiB3ZWJWYWx1ZXMgPSB2YWx1ZXM7CiAgICAgV2ViVmVj
dG9yPFdlYklEQktleT4gd2ViS2V5czsKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIENocm9taXVt
QnJpZGdlOjpjcmVhdGVJREJLZXlzRnJvbVNlCiAKIC8vIEtleWdlbiAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAot
U3RyaW5nIENocm9taXVtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmco
CitTdHJpbmcgUGxhdGZvcm1CcmlkZ2U6OnNpZ25lZFB1YmxpY0tleUFuZENoYWxsZW5nZVN0cmlu
ZygKICAgICB1bnNpZ25lZCBrZXlTaXplSW5kZXgsIGNvbnN0IFN0cmluZyYgY2hhbGxlbmdlLCBj
b25zdCBLVVJMJiB1cmwpCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5zaWduZWRQdWJs
aWNLZXlBbmRDaGFsbGVuZ2VTdHJpbmcoa2V5U2l6ZUluZGV4LApAQCAtNTM5LDYzICs1MzksNjMg
QEAgU3RyaW5nIENocm9taXVtQnJpZGdlOjpzaWduZWRQdWJsaWNLZXlBbgogCiAvLyBMYW5ndWFn
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCiAKLVN0cmluZyBDaHJvbWl1bUJyaWRnZTo6Y29tcHV0ZWREZWZhdWx0TGFu
Z3VhZ2UoKQorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpjb21wdXRlZERlZmF1bHRMYW5ndWFnZSgp
CiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5kZWZhdWx0TG9jYWxlKCk7CiB9CiAKIC8v
IExheW91dFRlc3RNb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6bGF5b3V0VGVzdE1v
ZGUoKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6bGF5b3V0VGVzdE1vZGUoKQogewogICAgIHJldHVy
biBXZWJLaXQ6OmxheW91dFRlc3RNb2RlKCk7CiB9CiAKIC8vIE1pbWVUeXBlIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
IAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKGNvbnN0IFN0
cmluZyYgbWltZVR5cGUpCitib29sIFBsYXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZEltYWdlTUlN
RVR5cGUoY29uc3QgU3RyaW5nJiBtaW1lVHlwZSkKIHsKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50
KCktPm1pbWVSZWdpc3RyeSgpLT5zdXBwb3J0c0ltYWdlTUlNRVR5cGUobWltZVR5cGUpCiAgICAg
ICAgICE9IFdlYk1pbWVSZWdpc3RyeTo6SXNOb3RTdXBwb3J0ZWQ7CiB9CiAKLWJvb2wgQ2hyb21p
dW1CcmlkZ2U6OmlzU3VwcG9ydGVkSmF2YVNjcmlwdE1JTUVUeXBlKGNvbnN0IFN0cmluZyYgbWlt
ZVR5cGUpCitib29sIFBsYXRmb3JtQnJpZGdlOjppc1N1cHBvcnRlZEphdmFTY3JpcHRNSU1FVHlw
ZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
bWltZVJlZ2lzdHJ5KCktPnN1cHBvcnRzSmF2YVNjcmlwdE1JTUVUeXBlKG1pbWVUeXBlKQogICAg
ICAgICAhPSBXZWJNaW1lUmVnaXN0cnk6OklzTm90U3VwcG9ydGVkOwogfQogCi1ib29sIENocm9t
aXVtQnJpZGdlOjppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUoY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShj
b25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWlt
ZVJlZ2lzdHJ5KCktPnN1cHBvcnRzTm9uSW1hZ2VNSU1FVHlwZShtaW1lVHlwZSkKICAgICAgICAg
IT0gV2ViTWltZVJlZ2lzdHJ5OjpJc05vdFN1cHBvcnRlZDsKIH0KIAotU3RyaW5nIENocm9taXVt
QnJpZGdlOjptaW1lVHlwZUZvckV4dGVuc2lvbihjb25zdCBTdHJpbmcmIGV4dGVuc2lvbikKK1N0
cmluZyBQbGF0Zm9ybUJyaWRnZTo6bWltZVR5cGVGb3JFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBl
eHRlbnNpb24pCiB7CiAgICAgcmV0dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+
bWltZVR5cGVGb3JFeHRlbnNpb24oZXh0ZW5zaW9uKTsKIH0KIAotU3RyaW5nIENocm9taXVtQnJp
ZGdlOjptaW1lVHlwZUZyb21GaWxlKGNvbnN0IFN0cmluZyYgcGF0aCkKK1N0cmluZyBQbGF0Zm9y
bUJyaWRnZTo6bWltZVR5cGVGcm9tRmlsZShjb25zdCBTdHJpbmcmIHBhdGgpCiB7CiAgICAgcmV0
dXJuIHdlYktpdENsaWVudCgpLT5taW1lUmVnaXN0cnkoKS0+bWltZVR5cGVGcm9tRmlsZShwYXRo
KTsKIH0KIAotU3RyaW5nIENocm9taXVtQnJpZGdlOjpwcmVmZXJyZWRFeHRlbnNpb25Gb3JNSU1F
VHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQorU3RyaW5nIFBsYXRmb3JtQnJpZGdlOjpwcmVm
ZXJyZWRFeHRlbnNpb25Gb3JNSU1FVHlwZShjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQogewogICAg
IHJldHVybiB3ZWJLaXRDbGllbnQoKS0+bWltZVJlZ2lzdHJ5KCktPnByZWZlcnJlZEV4dGVuc2lv
bkZvck1JTUVUeXBlKG1pbWVUeXBlKTsKIH0KIAogLy8gUGx1Z2luIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi1i
b29sIENocm9taXVtQnJpZGdlOjpwbHVnaW5zKGJvb2wgcmVmcmVzaCwgVmVjdG9yPFBsdWdpbklu
Zm8+KiByZXN1bHRzKQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6cGx1Z2lucyhib29sIHJlZnJlc2gs
IFZlY3RvcjxQbHVnaW5JbmZvPiogcmVzdWx0cykKIHsKICAgICBXZWJQbHVnaW5MaXN0QnVpbGRl
ckltcGwgYnVpbGRlcihyZXN1bHRzKTsKICAgICB3ZWJLaXRDbGllbnQoKS0+Z2V0UGx1Z2luTGlz
dChyZWZyZXNoLCAmYnVpbGRlcik7CiAgICAgcmV0dXJuIHRydWU7ICAvLyBGSVhNRTogVGhlcmUg
aXMgbm8gbmVlZCBmb3IgdGhpcyBmdW5jdGlvbiB0byByZXR1cm4gYSB2YWx1ZS4KIH0KIAotTlBP
YmplY3QqIENocm9taXVtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdpZGdldCogd2lk
Z2V0KQorTlBPYmplY3QqIFBsYXRmb3JtQnJpZGdlOjpwbHVnaW5TY3JpcHRhYmxlT2JqZWN0KFdp
ZGdldCogd2lkZ2V0KQogewogICAgIGlmICghd2lkZ2V0IHx8ICF3aWRnZXQtPmlzUGx1Z2luQ29u
dGFpbmVyKCkpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNjA1LDcgKzYwNSw3IEBAIE5QT2JqZWN0
KiBDaHJvbWl1bUJyaWRnZTo6cGx1Z2luU2NyaXB0YWIKIAogLy8gUmVzb3VyY2VzIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogCi1QYXNzUmVmUHRyPEltYWdlPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3JtSW1hZ2VS
ZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lKQorUGFzc1JlZlB0cjxJbWFnZT4gUGxhdGZvcm1Ccmlk
Z2U6OmxvYWRQbGF0Zm9ybUltYWdlUmVzb3VyY2UoY29uc3QgY2hhciogbmFtZSkKIHsKICAgICBj
b25zdCBXZWJEYXRhJiByZXNvdXJjZSA9IHdlYktpdENsaWVudCgpLT5sb2FkUmVzb3VyY2UobmFt
ZSk7CiAgICAgaWYgKHJlc291cmNlLmlzRW1wdHkoKSkKQEAgLTYxOCw3ICs2MTgsNyBAQCBQYXNz
UmVmUHRyPEltYWdlPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsCiAKICNpZiBFTkFCTEUoV0VCX0FV
RElPKQogCi1QYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6bG9hZFBsYXRmb3Jt
QXVkaW9SZXNvdXJjZShjb25zdCBjaGFyKiBuYW1lLCBkb3VibGUgc2FtcGxlUmF0ZSkKK1Bhc3NP
d25QdHI8QXVkaW9CdXM+IFBsYXRmb3JtQnJpZGdlOjpsb2FkUGxhdGZvcm1BdWRpb1Jlc291cmNl
KGNvbnN0IGNoYXIqIG5hbWUsIGRvdWJsZSBzYW1wbGVSYXRlKQogewogICAgIGNvbnN0IFdlYkRh
dGEmIHJlc291cmNlID0gd2ViS2l0Q2xpZW50KCktPmxvYWRSZXNvdXJjZShuYW1lKTsKICAgICBp
ZiAocmVzb3VyY2UuaXNFbXB0eSgpKQpAQCAtNjI3LDcgKzYyNyw3IEBAIFBhc3NPd25QdHI8QXVk
aW9CdXM+IENocm9taXVtQnJpZGdlOjpsb2EKICAgICByZXR1cm4gZGVjb2RlQXVkaW9GaWxlRGF0
YShyZXNvdXJjZS5kYXRhKCksIHJlc291cmNlLnNpemUoKSwgc2FtcGxlUmF0ZSk7CiB9CiAKLVBh
c3NPd25QdHI8QXVkaW9CdXM+IENocm9taXVtQnJpZGdlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKGNv
bnN0IGNoYXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKK1Bhc3NPd25Q
dHI8QXVkaW9CdXM+IFBsYXRmb3JtQnJpZGdlOjpkZWNvZGVBdWRpb0ZpbGVEYXRhKGNvbnN0IGNo
YXIqIGRhdGEsIHNpemVfdCBzaXplLCBkb3VibGUgc2FtcGxlUmF0ZSkKIHsKICAgICBXZWJBdWRp
b0J1cyB3ZWJBdWRpb0J1czsKICAgICBpZiAod2ViS2l0Q2xpZW50KCktPmxvYWRBdWRpb1Jlc291
cmNlKCZ3ZWJBdWRpb0J1cywgZGF0YSwgc2l6ZSwgc2FtcGxlUmF0ZSkpCkBAIC02MzksNjAgKzYz
OSw2MCBAQCBQYXNzT3duUHRyPEF1ZGlvQnVzPiBDaHJvbWl1bUJyaWRnZTo6ZGVjCiAKIC8vIFNh
bmRib3ggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KIAotYm9vbCBDaHJvbWl1bUJyaWRnZTo6c2FuZGJveEVuYWJsZWQo
KQorYm9vbCBQbGF0Zm9ybUJyaWRnZTo6c2FuZGJveEVuYWJsZWQoKQogewogICAgIHJldHVybiB3
ZWJLaXRDbGllbnQoKS0+c2FuZGJveEVuYWJsZWQoKTsKIH0KIAogLy8gU2hhcmVkVGltZXJzIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi12b2lkIENocm9taXVtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVkRnVuY3Rpb24o
dm9pZCAoKmZ1bmMpKCkpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpzZXRTaGFyZWRUaW1lckZpcmVk
RnVuY3Rpb24odm9pZCAoKmZ1bmMpKCkpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnNldFNoYXJl
ZFRpbWVyRmlyZWRGdW5jdGlvbihmdW5jKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c2V0
U2hhcmVkVGltZXJGaXJlVGltZShkb3VibGUgZmlyZVRpbWUpCit2b2lkIFBsYXRmb3JtQnJpZGdl
OjpzZXRTaGFyZWRUaW1lckZpcmVUaW1lKGRvdWJsZSBmaXJlVGltZSkKIHsKICAgICB3ZWJLaXRD
bGllbnQoKS0+c2V0U2hhcmVkVGltZXJGaXJlVGltZShmaXJlVGltZSk7CiB9CiAKLXZvaWQgQ2hy
b21pdW1CcmlkZ2U6OnN0b3BTaGFyZWRUaW1lcigpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpzdG9w
U2hhcmVkVGltZXIoKQogewogICAgIHdlYktpdENsaWVudCgpLT5zdG9wU2hhcmVkVGltZXIoKTsK
IH0KIAogLy8gU3RhdHNDb3VudGVycyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCi12b2lkIENocm9taXVtQnJpZGdlOjpkZWNy
ZW1lbnRTdGF0c0NvdW50ZXIoY29uc3QgY2hhciogbmFtZSkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6
OmRlY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQogewogICAgIHdlYktpdENs
aWVudCgpLT5kZWNyZW1lbnRTdGF0c0NvdW50ZXIobmFtZSk7CiB9CiAKLXZvaWQgQ2hyb21pdW1C
cmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRlcihjb25zdCBjaGFyKiBuYW1lKQordm9pZCBQbGF0
Zm9ybUJyaWRnZTo6aW5jcmVtZW50U3RhdHNDb3VudGVyKGNvbnN0IGNoYXIqIG5hbWUpCiB7CiAg
ICAgd2ViS2l0Q2xpZW50KCktPmluY3JlbWVudFN0YXRzQ291bnRlcihuYW1lKTsKIH0KIAotdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtQ3VzdG9tQ291bnRzKGNvbnN0IGNoYXIqIG5hbWUs
IGludCBzYW1wbGUsIGludCBtaW4sIGludCBtYXgsIGludCBidWNrZXRDb3VudCkKK3ZvaWQgUGxh
dGZvcm1CcmlkZ2U6Omhpc3RvZ3JhbUN1c3RvbUNvdW50cyhjb25zdCBjaGFyKiBuYW1lLCBpbnQg
c2FtcGxlLCBpbnQgbWluLCBpbnQgbWF4LCBpbnQgYnVja2V0Q291bnQpCiB7CiAgICAgd2ViS2l0
Q2xpZW50KCktPmhpc3RvZ3JhbUN1c3RvbUNvdW50cyhuYW1lLCBzYW1wbGUsIG1pbiwgbWF4LCBi
dWNrZXRDb3VudCk7CiB9CiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6Omhpc3RvZ3JhbUVudW1lcmF0
aW9uKGNvbnN0IGNoYXIqIG5hbWUsIGludCBzYW1wbGUsIGludCBib3VuZGFyeVZhbHVlKQordm9p
ZCBQbGF0Zm9ybUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRpb24oY29uc3QgY2hhciogbmFtZSwg
aW50IHNhbXBsZSwgaW50IGJvdW5kYXJ5VmFsdWUpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPmhp
c3RvZ3JhbUVudW1lcmF0aW9uKG5hbWUsIHNhbXBsZSwgYm91bmRhcnlWYWx1ZSk7CiB9CiAKIC8v
IFN1ZGRlbiBUZXJtaW5hdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6c3VkZGVuVGVybWlu
YXRpb25DaGFuZ2VkKGJvb2wgZW5hYmxlZCkKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnN1ZGRlblRl
cm1pbmF0aW9uQ2hhbmdlZChib29sIGVuYWJsZWQpCiB7CiAgICAgd2ViS2l0Q2xpZW50KCktPnN1
ZGRlblRlcm1pbmF0aW9uQ2hhbmdlZChlbmFibGVkKTsKIH0KIAogLy8gU3lzdGVtVGltZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLQogCi1kb3VibGUgQ2hyb21pdW1CcmlkZ2U6OmN1cnJlbnRUaW1lKCkKK2RvdWJsZSBQbGF0
Zm9ybUJyaWRnZTo6Y3VycmVudFRpbWUoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGllbnQoKS0+
Y3VycmVudFRpbWUoKTsKIH0KQEAgLTcwMSw3ICs3MDEsNyBAQCBkb3VibGUgQ2hyb21pdW1Ccmlk
Z2U6OmN1cnJlbnRUaW1lKCkKIAogI2lmIE9TKFdJTkRPV1MpCiAKLXZvaWQgQ2hyb21pdW1Ccmlk
Z2U6OnBhaW50QnV0dG9uKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRCdXR0b24oCiAgICAg
R3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0
ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtNzA5LDcgKzcwOSw3IEBAIHZvaWQg
Q2hyb21pdW1CcmlkZ2U6OnBhaW50QnV0dG9uKAogICAgICAgICBnYy0+cGxhdGZvcm1Db250ZXh0
KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0YXRlLCByZWN0KTsKIH0KIAotdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRNZW51TGlzdCgKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBh
aW50TWVudUxpc3QoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtNzE3
LDcgKzcxNyw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50TWVudUxpc3QoCiAgICAgICAg
IGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2ljU3Rh
dGUsIHJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNjcm9sbGJhckFycm93
KAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJBcnJvdygKICAgICBHcmFwaGlj
c0NvbnRleHQqIGdjLCBpbnQgc3RhdGUsIGludCBjbGFzc2ljU3RhdGUsCiAgICAgY29uc3QgSW50
UmVjdCYgcmVjdCkKIHsKQEAgLTcyNSw3ICs3MjUsNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpw
YWludFNjcm9sbGJhckFycm93CiAgICAgICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFz
KCksIHN0YXRlLCBjbGFzc2ljU3RhdGUsIHJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdl
OjpwYWludFNjcm9sbGJhclRodW1iKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRTY3JvbGxi
YXJUaHVtYigKICAgICBHcmFwaGljc0NvbnRleHQqIGdjLCBpbnQgcGFydCwgaW50IHN0YXRlLCBp
bnQgY2xhc3NpY1N0YXRlLAogICAgIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CkBAIC03MzMsNyAr
NzMzLDcgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUaHVtYgogICAgICAg
ICBnYy0+cGxhdGZvcm1Db250ZXh0KCktPmNhbnZhcygpLCBwYXJ0LCBzdGF0ZSwgY2xhc3NpY1N0
YXRlLCByZWN0KTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUcmFj
aygKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVHJhY2soCiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAg
ICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBJbnRSZWN0JiBhbGlnblJlY3QpCiB7CkBAIC03
NDIsNyArNzQyLDcgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRTY3JvbGxiYXJUcmFjawog
ICAgICAgICBhbGlnblJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFNwaW5C
dXR0b24oCit2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNwaW5CdXR0b24oCiAgICAgR3JhcGhp
Y3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAg
ICBjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAtNzUwLDcgKzc1MCw3IEBAIHZvaWQgQ2hyb21p
dW1CcmlkZ2U6OnBhaW50U3BpbkJ1dHRvbigKICAgICAgICAgZ2MtPnBsYXRmb3JtQ29udGV4dCgp
LT5jYW52YXMoKSwgcGFydCwgc3RhdGUsIGNsYXNzaWNTdGF0ZSwgcmVjdCk7CiB9CiAKLXZvaWQg
Q2hyb21pdW1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFp
bnRUZXh0RmllbGQoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBzdGF0
ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0LCBjb25zdCBDb2xv
ciYgY29sb3IsIGJvb2wgZmlsbENvbnRlbnRBcmVhLAogICAgIGJvb2wgZHJhd0VkZ2VzKQpAQCAt
NzYzLDcgKzc2Myw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGV4dEZpZWxkKAogICAg
ICAgICBiYWNrZ3JvdW5kQ29sb3IsIGZpbGxDb250ZW50QXJlYSwgZHJhd0VkZ2VzKTsKIH0KIAot
dm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUcmFja2JhcigKK3ZvaWQgUGxhdGZvcm1CcmlkZ2U6
OnBhaW50VHJhY2tiYXIoCiAgICAgR3JhcGhpY3NDb250ZXh0KiBnYywgaW50IHBhcnQsIGludCBz
dGF0ZSwgaW50IGNsYXNzaWNTdGF0ZSwKICAgICBjb25zdCBJbnRSZWN0JiByZWN0KQogewpAQCAt
NzcxLDcgKzc3MSw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VHJhY2tiYXIoCiAgICAg
ICAgIGdjLT5wbGF0Zm9ybUNvbnRleHQoKS0+Y2FudmFzKCksIHBhcnQsIHN0YXRlLCBjbGFzc2lj
U3RhdGUsIHJlY3QpOwogfQogCi12b2lkIENocm9taXVtQnJpZGdlOjpwYWludFByb2dyZXNzQmFy
KAordm9pZCBQbGF0Zm9ybUJyaWRnZTo6cGFpbnRQcm9ncmVzc0JhcigKICAgICBHcmFwaGljc0Nv
bnRleHQqIGdjLCBjb25zdCBJbnRSZWN0JiBiYXJSZWN0LCBjb25zdCBJbnRSZWN0JiB2YWx1ZVJl
Y3QsIGJvb2wgZGV0ZXJtaW5hdGUsIGRvdWJsZSBhbmltYXRlZFNlY29uZHMpCiB7CiAgICAgd2Vi
S2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPnBhaW50UHJvZ3Jlc3NCYXIoCkBAIC03ODAsMzcg
Kzc4MCwzNyBAQCB2b2lkIENocm9taXVtQnJpZGdlOjpwYWludFByb2dyZXNzQmFyKAogCiAjZWxp
ZiBPUyhMSU5VWCkKIAotc3RhdGljIFdlYlRoZW1lRW5naW5lOjpQYXJ0IFdlYlRoZW1lUGFydChD
aHJvbWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBhcnQpCitzdGF0aWMgV2ViVGhlbWVFbmdpbmU6OlBh
cnQgV2ViVGhlbWVQYXJ0KFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhcnQgcGFydCkKIHsKICAgICBz
d2l0Y2ggKHBhcnQpIHsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyRG93
bkFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJEb3duQXJyb3c7Ci0g
ICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzogcmV0dXJuIFdl
YlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyTGVmdEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1C
cmlkZ2U6OlBhcnRTY3JvbGxiYXJSaWdodEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBh
cnRTY3JvbGxiYXJSaWdodEFycm93OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3Jv
bGxiYXJVcEFycm93OiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJVcEFycm93
OwotICAgIGNhc2UgQ2hyb21pdW1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVGh1bWI6
IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUaHVtYjsKLSAg
ICBjYXNlIENocm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYjogcmV0dXJu
IFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUaHVtYjsKLSAgICBjYXNlIENo
cm9taXVtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrOiByZXR1cm4gV2ViVGhl
bWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jpem9udGFsVHJhY2s7Ci0gICAgY2FzZSBDaHJvbWl1
bUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s6IHJldHVybiBXZWJUaGVtZUVuZ2lu
ZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVHJhY2s7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6
UGFydFNjcm9sbGJhckRvd25BcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xs
YmFyRG93bkFycm93OworICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJMZWZ0
QXJyb3c6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhckxlZnRBcnJvdzsKKyAg
ICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzogcmV0dXJuIFdl
YlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFyUmlnaHRBcnJvdzsKKyAgICBjYXNlIFBsYXRmb3Jt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFyVXBBcnJvdzogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0
U2Nyb2xsYmFyVXBBcnJvdzsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpQYXJ0U2Nyb2xsYmFy
SG9yaXpvbnRhbFRodW1iOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJIb3Jp
em9udGFsVGh1bWI7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhclZlcnRp
Y2FsVGh1bWI6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6UGFydFNjcm9sbGJhclZlcnRpY2FsVGh1
bWI7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFj
azogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrOwor
ICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOiByZXR1
cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrOwogICAgIH0KICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKICAgICByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlBhcnRT
Y3JvbGxiYXJEb3duQXJyb3c7CiB9CiAKLXN0YXRpYyBXZWJUaGVtZUVuZ2luZTo6U3RhdGUgV2Vi
VGhlbWVTdGF0ZShDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYWludFN0YXRlIHN0YXRlKQorc3RhdGlj
IFdlYlRoZW1lRW5naW5lOjpTdGF0ZSBXZWJUaGVtZVN0YXRlKFBsYXRmb3JtQnJpZGdlOjpUaGVt
ZVBhaW50U3RhdGUgc3RhdGUpCiB7CiAgICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQ2hy
b21pdW1CcmlkZ2U6OlN0YXRlRGlzYWJsZWQ6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVE
aXNhYmxlZDsKLSAgICBjYXNlIENocm9taXVtQnJpZGdlOjpTdGF0ZUhvdmVyOiByZXR1cm4gV2Vi
VGhlbWVFbmdpbmU6OlN0YXRlSG92ZXI7Ci0gICAgY2FzZSBDaHJvbWl1bUJyaWRnZTo6U3RhdGVO
b3JtYWw6IHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVOb3JtYWw7Ci0gICAgY2FzZSBDaHJv
bWl1bUJyaWRnZTo6U3RhdGVQcmVzc2VkOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlUHJl
c3NlZDsKKyAgICBjYXNlIFBsYXRmb3JtQnJpZGdlOjpTdGF0ZURpc2FibGVkOiByZXR1cm4gV2Vi
VGhlbWVFbmdpbmU6OlN0YXRlRGlzYWJsZWQ7CisgICAgY2FzZSBQbGF0Zm9ybUJyaWRnZTo6U3Rh
dGVIb3ZlcjogcmV0dXJuIFdlYlRoZW1lRW5naW5lOjpTdGF0ZUhvdmVyOworICAgIGNhc2UgUGxh
dGZvcm1CcmlkZ2U6OlN0YXRlTm9ybWFsOiByZXR1cm4gV2ViVGhlbWVFbmdpbmU6OlN0YXRlTm9y
bWFsOworICAgIGNhc2UgUGxhdGZvcm1CcmlkZ2U6OlN0YXRlUHJlc3NlZDogcmV0dXJuIFdlYlRo
ZW1lRW5naW5lOjpTdGF0ZVByZXNzZWQ7CiAgICAgfQogICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OwogICAgIHJldHVybiBXZWJUaGVtZUVuZ2luZTo6U3RhdGVEaXNhYmxlZDsKIH0KIAotc3RhdGlj
IHZvaWQgR2V0V2ViVGhlbWVFeHRyYVBhcmFtcyhDaHJvbWl1bUJyaWRnZTo6VGhlbWVQYXJ0IHBh
cnQsIENocm9taXVtQnJpZGdlOjpUaGVtZVBhaW50U3RhdGUgc3RhdGUsIGNvbnN0IENocm9taXVt
QnJpZGdlOjpUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zLCBXZWJUaGVtZUVuZ2lu
ZTo6RXh0cmFQYXJhbXMqIHdlYlRoZW1lRXh0cmFQYXJhbXMpCitzdGF0aWMgdm9pZCBHZXRXZWJU
aGVtZUV4dHJhUGFyYW1zKFBsYXRmb3JtQnJpZGdlOjpUaGVtZVBhcnQgcGFydCwgUGxhdGZvcm1C
cmlkZ2U6OlRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgY29uc3QgUGxhdGZvcm1CcmlkZ2U6OlRoZW1l
UGFpbnRFeHRyYVBhcmFtcyogZXh0cmFQYXJhbXMsIFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFt
cyogd2ViVGhlbWVFeHRyYVBhcmFtcykKIHsKLSAgICBpZiAocGFydCA9PSBDaHJvbWl1bUJyaWRn
ZTo6UGFydFNjcm9sbGJhckhvcml6b250YWxUcmFjayB8fCBwYXJ0ID09IENocm9taXVtQnJpZGdl
OjpQYXJ0U2Nyb2xsYmFyVmVydGljYWxUcmFjaykgeworICAgIGlmIChwYXJ0ID09IFBsYXRmb3Jt
QnJpZGdlOjpQYXJ0U2Nyb2xsYmFySG9yaXpvbnRhbFRyYWNrIHx8IHBhcnQgPT0gUGxhdGZvcm1C
cmlkZ2U6OlBhcnRTY3JvbGxiYXJWZXJ0aWNhbFRyYWNrKSB7CiAgICAgICAgIHdlYlRoZW1lRXh0
cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrWCA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJU
cmFjay50cmFja1g7CiAgICAgICAgIHdlYlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNr
LnRyYWNrWSA9IGV4dHJhUGFyYW1zLT5zY3JvbGxiYXJUcmFjay50cmFja1k7CiAgICAgICAgIHdl
YlRoZW1lRXh0cmFQYXJhbXMtPnNjcm9sbGJhclRyYWNrLnRyYWNrV2lkdGggPSBleHRyYVBhcmFt
cy0+c2Nyb2xsYmFyVHJhY2sudHJhY2tXaWR0aDsKQEAgLTgxOCwxMiArODE4LDEyIEBAIHN0YXRp
YyB2b2lkIEdldFdlYlRoZW1lRXh0cmFQYXJhbXMoQ2hyb20KICAgICB9CiB9CiAKLUludFNpemUg
Q2hyb21pdW1CcmlkZ2U6OmdldFRoZW1lUGFydFNpemUoVGhlbWVQYXJ0IHBhcnQpCitJbnRTaXpl
IFBsYXRmb3JtQnJpZGdlOjpnZXRUaGVtZVBhcnRTaXplKFRoZW1lUGFydCBwYXJ0KQogewogICAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnRoZW1lRW5naW5lKCktPmdldFNpemUoV2ViVGhlbWVQ
YXJ0KHBhcnQpKTsKIH0KIAotdm9pZCBDaHJvbWl1bUJyaWRnZTo6cGFpbnRUaGVtZVBhcnQoCit2
b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFRoZW1lUGFydCgKICAgICBHcmFwaGljc0NvbnRleHQq
IGdjLCBUaGVtZVBhcnQgcGFydCwgVGhlbWVQYWludFN0YXRlIHN0YXRlLCBjb25zdCBJbnRSZWN0
JiByZWN0LCBjb25zdCBUaGVtZVBhaW50RXh0cmFQYXJhbXMqIGV4dHJhUGFyYW1zKQogewogICAg
IFdlYlRoZW1lRW5naW5lOjpFeHRyYVBhcmFtcyB3ZWJUaGVtZUV4dHJhUGFyYW1zOwpAQCAtODM0
LDcgKzgzNCw3IEBAIHZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50VGhlbWVQYXJ0KAogCiAjZWxp
ZiBPUyhEQVJXSU4pCiAKLXZvaWQgQ2hyb21pdW1CcmlkZ2U6OnBhaW50U2Nyb2xsYmFyVGh1bWIo
Cit2b2lkIFBsYXRmb3JtQnJpZGdlOjpwYWludFNjcm9sbGJhclRodW1iKAogICAgIEdyYXBoaWNz
Q29udGV4dCogZ2MsIFRoZW1lUGFpbnRTdGF0ZSBzdGF0ZSwgVGhlbWVQYWludFNpemUgc2l6ZSwg
Y29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgVGhlbWVQYWludFNjcm9sbGJhckluZm8mIHNjcm9s
bGJhckluZm8pCiB7CiAgICAgV2ViVGhlbWVFbmdpbmU6OlNjcm9sbGJhckluZm8gd2ViVGhlbWVT
Y3JvbGxiYXJJbmZvOwpAQCAtODU4LDE5ICs4NTgsMTkgQEAgdm9pZCBDaHJvbWl1bUJyaWRnZTo6
cGFpbnRTY3JvbGxiYXJUaHVtYgogCiAvLyBUcmFjZSBFdmVudCAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKLXZvaWQgQ2hy
b21pdW1CcmlkZ2U6OnRyYWNlRXZlbnRCZWdpbihjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBpZCwg
Y29uc3QgY2hhciogZXh0cmEpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50QmVnaW4o
Y29uc3QgY2hhciogbmFtZSwgdm9pZCogaWQsIGNvbnN0IGNoYXIqIGV4dHJhKQogewogICAgIHdl
YktpdENsaWVudCgpLT50cmFjZUV2ZW50QmVnaW4obmFtZSwgaWQsIGV4dHJhKTsKIH0KIAotdm9p
ZCBDaHJvbWl1bUJyaWRnZTo6dHJhY2VFdmVudEVuZChjb25zdCBjaGFyKiBuYW1lLCB2b2lkKiBp
ZCwgY29uc3QgY2hhciogZXh0cmEpCit2b2lkIFBsYXRmb3JtQnJpZGdlOjp0cmFjZUV2ZW50RW5k
KGNvbnN0IGNoYXIqIG5hbWUsIHZvaWQqIGlkLCBjb25zdCBjaGFyKiBleHRyYSkKIHsKICAgICB3
ZWJLaXRDbGllbnQoKS0+dHJhY2VFdmVudEVuZChuYW1lLCBpZCwgZXh0cmEpOwogfQogCiAvLyBW
aXNpdGVkIExpbmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAKLUxpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlu
a0hhc2goY29uc3QgVUNoYXIqIHVybCwgdW5zaWduZWQgbGVuZ3RoKQorTGlua0hhc2ggUGxhdGZv
cm1CcmlkZ2U6OnZpc2l0ZWRMaW5rSGFzaChjb25zdCBVQ2hhciogdXJsLCB1bnNpZ25lZCBsZW5n
dGgpCiB7CiAgICAgdXJsX2Nhbm9uOjpSYXdDYW5vbk91dHB1dDwyMDQ4PiBidWZmZXI7CiAgICAg
dXJsX3BhcnNlOjpQYXJzZWQgcGFyc2VkOwpAQCAtODc5LDcgKzg3OSw3IEBAIExpbmtIYXNoIENo
cm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2gKICAgICByZXR1cm4gd2ViS2l0Q2xpZW50KCkt
PnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBidWZmZXIubGVuZ3RoKCkpOwogfQogCi1M
aW5rSGFzaCBDaHJvbWl1bUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJhc2Us
CitMaW5rSGFzaCBQbGF0Zm9ybUJyaWRnZTo6dmlzaXRlZExpbmtIYXNoKGNvbnN0IEtVUkwmIGJh
c2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEF0b21p
Y1N0cmluZyYgYXR0cmlidXRlVVJMKQogewogICAgIC8vIFJlc29sdmUgdGhlIHJlbGF0aXZlIFVS
TCB1c2luZyBnb29nbGV1cmwgYW5kIHBhc3MgdGhlIGFic29sdXRlIFVSTCB1cCB0bwpAQCAtOTEz
LDcgKzkxMyw3IEBAIExpbmtIYXNoIENocm9taXVtQnJpZGdlOjp2aXNpdGVkTGlua0hhc2gKICAg
ICByZXR1cm4gd2ViS2l0Q2xpZW50KCktPnZpc2l0ZWRMaW5rSGFzaChidWZmZXIuZGF0YSgpLCBi
dWZmZXIubGVuZ3RoKCkpOwogfQogCi1ib29sIENocm9taXVtQnJpZGdlOjppc0xpbmtWaXNpdGVk
KExpbmtIYXNoIHZpc2l0ZWRMaW5rSGFzaCkKK2Jvb2wgUGxhdGZvcm1CcmlkZ2U6OmlzTGlua1Zp
c2l0ZWQoTGlua0hhc2ggdmlzaXRlZExpbmtIYXNoKQogewogICAgIHJldHVybiB3ZWJLaXRDbGll
bnQoKS0+aXNMaW5rVmlzaXRlZCh2aXNpdGVkTGlua0hhc2gpOwogfQpAQCAtOTIyLDcgKzkyMiw3
IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OmlzTGlua1Zpc2l0ZWQoTGlua0gKIC8vIEdsdWUgbGF5
ZXIuIE9uY2UgdGhlIEdsdWUgbGF5ZXIgbW92ZXMgZW50aXJlbHkgaW50byB0aGUgV2ViS2l0IGxh
eWVyLCB0aGVzZQogLy8gbWV0aG9kcyB3aWxsIGJlIGRlbGV0ZWQuCiAKLXZvaWQgQ2hyb21pdW1C
cmlkZ2U6Om5vdGlmeUpTT3V0T2ZNZW1vcnkoRnJhbWUqIGZyYW1lKQordm9pZCBQbGF0Zm9ybUJy
aWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeShGcmFtZSogZnJhbWUpCiB7CiAgICAgaWYgKCFmcmFt
ZSkKICAgICAgICAgcmV0dXJuOwpAQCAtOTMzLDE3ICs5MzMsMTcgQEAgdm9pZCBDaHJvbWl1bUJy
aWRnZTo6bm90aWZ5SlNPdXRPZk1lbW9yeQogICAgIHdlYkZyYW1lLT5jbGllbnQoKS0+ZGlkRXho
YXVzdE1lbW9yeUF2YWlsYWJsZUZvclNjcmlwdCh3ZWJGcmFtZSk7CiB9CiAKLWludCBDaHJvbWl1
bUJyaWRnZTo6bWVtb3J5VXNhZ2VNQigpCitpbnQgUGxhdGZvcm1CcmlkZ2U6Om1lbW9yeVVzYWdl
TUIoKQogewogICAgIHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KHdlYktpdENsaWVudCgpLT5tZW1v
cnlVc2FnZU1CKCkpOwogfQogCi1pbnQgQ2hyb21pdW1CcmlkZ2U6OmFjdHVhbE1lbW9yeVVzYWdl
TUIoKQoraW50IFBsYXRmb3JtQnJpZGdlOjphY3R1YWxNZW1vcnlVc2FnZU1CKCkKIHsKICAgICBy
ZXR1cm4gc3RhdGljX2Nhc3Q8aW50Pih3ZWJLaXRDbGllbnQoKS0+YWN0dWFsTWVtb3J5VXNhZ2VN
QigpKTsKIH0KIAotaW50IENocm9taXVtQnJpZGdlOjpzY3JlZW5EZXB0aChXaWRnZXQqIHdpZGdl
dCkKK2ludCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuRGVwdGgoV2lkZ2V0KiB3aWRnZXQpCiB7CiAg
ICAgV2ViV2lkZ2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwog
ICAgIGlmICghY2xpZW50KQpAQCAtOTUxLDcgKzk1MSw3IEBAIGludCBDaHJvbWl1bUJyaWRnZTo6
c2NyZWVuRGVwdGgoV2lkZ2V0KiAKICAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuZGVw
dGg7CiB9CiAKLWludCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuRGVwdGhQZXJDb21wb25lbnQoV2lk
Z2V0KiB3aWRnZXQpCitpbnQgUGxhdGZvcm1CcmlkZ2U6OnNjcmVlbkRlcHRoUGVyQ29tcG9uZW50
KFdpZGdldCogd2lkZ2V0KQogewogICAgIFdlYldpZGdldENsaWVudCogY2xpZW50ID0gdG9XZWJX
aWRnZXRDbGllbnQod2lkZ2V0KTsKICAgICBpZiAoIWNsaWVudCkKQEAgLTk1OSw3ICs5NTksNyBA
QCBpbnQgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbkRlcHRoUGVyQ29tcG9uCiAgICAgcmV0dXJuIGNs
aWVudC0+c2NyZWVuSW5mbygpLmRlcHRoUGVyQ29tcG9uZW50OwogfQogCi1ib29sIENocm9taXVt
QnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCitib29sIFBsYXRmb3Jt
QnJpZGdlOjpzY3JlZW5Jc01vbm9jaHJvbWUoV2lkZ2V0KiB3aWRnZXQpCiB7CiAgICAgV2ViV2lk
Z2V0Q2xpZW50KiBjbGllbnQgPSB0b1dlYldpZGdldENsaWVudCh3aWRnZXQpOwogICAgIGlmICgh
Y2xpZW50KQpAQCAtOTY3LDcgKzk2Nyw3IEBAIGJvb2wgQ2hyb21pdW1CcmlkZ2U6OnNjcmVlbklz
TW9ub2Nocm9tZSgKICAgICByZXR1cm4gY2xpZW50LT5zY3JlZW5JbmZvKCkuaXNNb25vY2hyb21l
OwogfQogCi1JbnRSZWN0IENocm9taXVtQnJpZGdlOjpzY3JlZW5SZWN0KFdpZGdldCogd2lkZ2V0
KQorSW50UmVjdCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuUmVjdChXaWRnZXQqIHdpZGdldCkKIHsK
ICAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2ViV2lkZ2V0Q2xpZW50KHdpZGdldCk7
CiAgICAgaWYgKCFjbGllbnQpCkBAIC05NzUsNyArOTc1LDcgQEAgSW50UmVjdCBDaHJvbWl1bUJy
aWRnZTo6c2NyZWVuUmVjdChXaWRnZQogICAgIHJldHVybiBjbGllbnQtPnNjcmVlbkluZm8oKS5y
ZWN0OwogfQogCi1JbnRSZWN0IENocm9taXVtQnJpZGdlOjpzY3JlZW5BdmFpbGFibGVSZWN0KFdp
ZGdldCogd2lkZ2V0KQorSW50UmVjdCBQbGF0Zm9ybUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUmVj
dChXaWRnZXQqIHdpZGdldCkKIHsKICAgICBXZWJXaWRnZXRDbGllbnQqIGNsaWVudCA9IHRvV2Vi
V2lkZ2V0Q2xpZW50KHdpZGdldCk7CiAgICAgaWYgKCFjbGllbnQpCkBAIC05ODMsNyArOTgzLDcg
QEAgSW50UmVjdCBDaHJvbWl1bUJyaWRnZTo6c2NyZWVuQXZhaWxhYmxlUgogICAgIHJldHVybiBj
bGllbnQtPnNjcmVlbkluZm8oKS5hdmFpbGFibGVSZWN0OwogfQogCi1ib29sIENocm9taXVtQnJp
ZGdlOjpwb3B1cHNBbGxvd2VkKE5QUCBucHApCitib29sIFBsYXRmb3JtQnJpZGdlOjpwb3B1cHNB
bGxvd2VkKE5QUCBucHApCiB7CiAgICAgLy8gRklYTUU6IEdpdmUgdGhlIGVtYmVkZGVyIGEgd2F5
IHRvIGNvbnRyb2wgdGhpcy4KICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvV2ViS2l0
L2Nocm9taXVtL3NyYy9SZXNvdXJjZUhhbmRsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdC9jaHJvbWl1bS9zcmMvUmVzb3VyY2VIYW5kbGUuY3BwCShyZXZpc2lvbiA3NjE3MykKKysr
IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1Jlc291cmNlSGFuZGxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzEsNyArMzEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlJl
c291cmNlSGFuZGxlLmgiCiAKLSNpbmNsdWRlICJDaHJvbWl1bUJyaWRnZS5oIgorI2luY2x1ZGUg
IlBsYXRmb3JtQnJpZGdlLmgiCiAjaW5jbHVkZSAiUmVzb3VyY2VIYW5kbGVDbGllbnQuaCIKICNp
bmNsdWRlICJSZXNvdXJjZVJlcXVlc3QuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIKQEAg
LTMzMCw3ICszMzAsNyBAQCBib29sIFJlc291cmNlSGFuZGxlOjp3aWxsTG9hZEZyb21DYWNoZShS
CiAvLyBzdGF0aWMKIHZvaWQgUmVzb3VyY2VIYW5kbGU6OmNhY2hlTWV0YWRhdGEoY29uc3QgUmVz
b3VyY2VSZXNwb25zZSYgcmVzcG9uc2UsIGNvbnN0IFZlY3RvcjxjaGFyPiYgZGF0YSkKIHsKLSAg
ICBDaHJvbWl1bUJyaWRnZTo6Y2FjaGVNZXRhZGF0YShyZXNwb25zZS51cmwoKSwgcmVzcG9uc2Uu
cmVzcG9uc2VUaW1lKCksIGRhdGEpOworICAgIFBsYXRmb3JtQnJpZGdlOjpjYWNoZU1ldGFkYXRh
KHJlc3BvbnNlLnVybCgpLCByZXNwb25zZS5yZXNwb25zZVRpbWUoKSwgZGF0YSk7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dl
YkZyYW1lSW1wbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRnJhbWVJbXBsLmNwcAkocmV2aXNpb24gNzYxNzMpCisrKyBTb3VyY2UvV2ViS2l0L2Nocm9t
aXVtL3NyYy9XZWJGcmFtZUltcGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw2IEBA
CiAjaW5jbHVkZSAiQXNzb2NpYXRlZFVSTExvYWRlci5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJk
Q29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgotI2luY2x1ZGUgIkNocm9taXVtQnJp
ZGdlLmgiCiAjaW5jbHVkZSAiQ2xpcGJvYXJkVXRpbGl0aWVzQ2hyb21pdW0uaCIKICNpbmNsdWRl
ICJDb25zb2xlLmgiCiAjaW5jbHVkZSAiRE9NVXRpbGl0aWVzUHJpdmF0ZS5oIgpAQCAtMTAzLDYg
KzEwMiw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIlBh
Z2UuaCIKICNpbmNsdWRlICJQZXJmb3JtYW5jZS5oIgorI2luY2x1ZGUgIlBsYXRmb3JtQnJpZGdl
LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Db250ZXh0U2tpYS5oIgogI2luY2x1ZGUgIlBsdWdpbkRv
Y3VtZW50LmgiCiAjaW5jbHVkZSAiUHJpbnRDb250ZXh0LmgiCkBAIC0xODIwLDEzICsxODIwLDEz
IEBAIFdlYkZyYW1lSW1wbDo6V2ViRnJhbWVJbXBsKFdlYkZyYW1lQ2xpZW4KICAgICAsIG1fYW5p
bWF0aW9uQ29udHJvbGxlcih0aGlzKQogICAgICwgbV9pZGVudGlmaWVyKGdlbmVyYXRlRnJhbWVJ
ZGVudGlmaWVyKCkpCiB7Ci0gICAgQ2hyb21pdW1CcmlkZ2U6OmluY3JlbWVudFN0YXRzQ291bnRl
cih3ZWJGcmFtZUFjdGl2ZUNvdW50KTsKKyAgICBQbGF0Zm9ybUJyaWRnZTo6aW5jcmVtZW50U3Rh
dHNDb3VudGVyKHdlYkZyYW1lQWN0aXZlQ291bnQpOwogICAgIGZyYW1lQ291bnQrKzsKIH0KIAog
V2ViRnJhbWVJbXBsOjp+V2ViRnJhbWVJbXBsKCkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6ZGVj
cmVtZW50U3RhdHNDb3VudGVyKHdlYkZyYW1lQWN0aXZlQ291bnQpOworICAgIFBsYXRmb3JtQnJp
ZGdlOjpkZWNyZW1lbnRTdGF0c0NvdW50ZXIod2ViRnJhbWVBY3RpdmVDb3VudCk7CiAgICAgZnJh
bWVDb3VudC0tOwogCiAgICAgY2FuY2VsUGVuZGluZ1Njb3BpbmdFZmZvcnQoKTsKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYlZpZXdJbXBsLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJWaWV3SW1wbC5jcHAJKHJldmlzaW9uIDc2MTcz
KQorKysgU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViVmlld0ltcGwuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCwyMyArMzQsMjIgQEAKICNpbmNsdWRlICJBdXRvRmlsbFBvcHVwTWVudUNs
aWVudC5oIgogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9yd2Fy
ZExpc3RDaHJvbWl1bS5oIgorI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKKyNpbmNsdWRl
ICJDU1NWYWx1ZUtleXdvcmRzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCi0jaW5jbHVkZSAiQ2hy
b21pdW1CcmlkZ2UuaCIKICNpbmNsdWRlICJDb2xvclNwYWNlLmgiCiAjaW5jbHVkZSAiQ29tcG9z
aXRpb25VbmRlcmxpbmVWZWN0b3JCdWlsZGVyLmgiCiAjaW5jbHVkZSAiQ29udGV4dE1lbnUuaCIK
ICNpbmNsdWRlICJDb250ZXh0TWVudUNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb250ZXh0TWVu
dUl0ZW0uaCIKLSNpbmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCi0jaW5jbHVkZSAiQ1NTVmFs
dWVLZXl3b3Jkcy5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgorI2luY2x1ZGUgIkRPTVV0aWxpdGll
c1ByaXZhdGUuaCIKICNpbmNsdWRlICJEZXZpY2VPcmllbnRhdGlvbkNsaWVudFByb3h5LmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgotI2luY2x1
ZGUgIkRPTVV0aWxpdGllc1ByaXZhdGUuaCIKICNpbmNsdWRlICJEcmFnQ29udHJvbGxlci5oIgot
I2luY2x1ZGUgIkRyYWdTY3JvbGxUaW1lci5oIgogI2luY2x1ZGUgIkRyYWdEYXRhLmgiCisjaW5j
bHVkZSAiRHJhZ1Njcm9sbFRpbWVyLmgiCiAjaW5jbHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAi
RXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRXh0ZW5zaW9uczNELmgiCkBAIC02NSw4ICs2NCw4
IEBACiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0M0RJbnRlcm5hbC5oIgogI2luY2x1ZGUgIkhU
TUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MTWVkaWFFbGVtZW50LmgiCi0jaW5jbHVk
ZSAiSGl0VGVzdFJlc3VsdC5oIgogI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgorI2luY2x1ZGUgIkhp
dFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIkltYWdlQnVmZmVy
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJvbGxlci5oIgpAQCAtNzgsNiArNzcsNyBAQAog
I2luY2x1ZGUgIlBhZ2VHcm91cC5oIgogI2luY2x1ZGUgIlBhZ2VHcm91cExvYWREZWZlcnJlci5o
IgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJQbGF0Zm9ybUJyaWRnZS5oIgog
I2luY2x1ZGUgIlBsYXRmb3JtQ29udGV4dFNraWEuaCIKICNpbmNsdWRlICJQbGF0Zm9ybUtleWJv
YXJkRXZlbnQuaCIKICNpbmNsdWRlICJQbGF0Zm9ybU1vdXNlRXZlbnQuaCIKQEAgLTk4LDggKzk4
LDggQEAKICNpbmNsdWRlICJWZWN0b3IuaCIKICNpbmNsdWRlICJXZWJBY2Nlc3NpYmlsaXR5T2Jq
ZWN0LmgiCiAjaW5jbHVkZSAiV2ViQXV0b0ZpbGxDbGllbnQuaCIKLSNpbmNsdWRlICJXZWJEZXZU
b29sc0FnZW50UHJpdmF0ZS5oIgogI2luY2x1ZGUgIldlYkRldlRvb2xzQWdlbnRJbXBsLmgiCisj
aW5jbHVkZSAiV2ViRGV2VG9vbHNBZ2VudFByaXZhdGUuaCIKICNpbmNsdWRlICJXZWJEcmFnRGF0
YS5oIgogI2luY2x1ZGUgIldlYkZyYW1lSW1wbC5oIgogI2luY2x1ZGUgIldlYkltYWdlLmgiCkBA
IC0yMjg3LDcgKzIyODcsNyBAQCB2b2lkIFdlYlZpZXdJbXBsOjppbnZhbGlkYXRlUm9vdExheWVy
UmVjCiAKIHZvaWQgV2ViVmlld0ltcGw6OnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2
ZShib29sIGFjdGl2ZSkKIHsKLSAgICBDaHJvbWl1bUJyaWRnZTo6aGlzdG9ncmFtRW51bWVyYXRp
b24oIkdQVS5zZXRJc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUiLCBhY3RpdmUgKiAyICsg
bV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUsIDQpOworICAgIFBsYXRmb3JtQnJpZGdl
OjpoaXN0b2dyYW1FbnVtZXJhdGlvbigiR1BVLnNldElzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Fj
dGl2ZSIsIGFjdGl2ZSAqIDIgKyBtX2lzQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0FjdGl2ZSwgNCk7
CiAKICAgICBpZiAobV9pc0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdBY3RpdmUgPT0gYWN0aXZlKQog
ICAgICAgICByZXR1cm47Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>